From 38e5929400ea8d8bdf0830006f761a5498f558a5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Fri, 1 May 2009 14:18:32 -0400 Subject: [PATCH] Optimize source reading in combine4 --- pixman/pixman-sse2.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c index b4732ee..d815bfc 100644 --- a/pixman/pixman-sse2.c +++ b/pixman/pixman-sse2.c @@ -506,22 +506,29 @@ combine1 (const uint32_t *ps, const uint32_t *pm) static force_inline __m128i combine4 (const __m128i *ps, const __m128i *pm) { - __m128i s = load128Unaligned (ps); - + __m128i xmmSrcLo, xmmSrcHi; + __m128i xmmMskLo, xmmMskHi; + __m128i s; + if (pm) { - __m128i xmmSrcLo, xmmSrcHi; - __m128i xmmMskLo, xmmMskHi; - xmmMskLo = load128Unaligned (pm); + + if (!packAlpha (xmmMskLo)) + return _mm_setzero_si128 (); + } + + s = load128Unaligned (ps); + if (pm) + { unpack_128_2x128 (s, &xmmSrcLo, &xmmSrcHi); unpack_128_2x128 (xmmMskLo, &xmmMskLo, &xmmMskHi); - + expandAlpha_2x128 (xmmMskLo, xmmMskHi, &xmmMskLo, &xmmMskHi); - + pixMultiply_2x128 (&xmmSrcLo, &xmmSrcHi, &xmmMskLo, &xmmMskHi, &xmmSrcLo, &xmmSrcHi); - + s = pack_2x128_128 (xmmSrcLo, xmmSrcHi); } -- 2.7.4