Fix bug that prevented pixman_fill MMX and SSE paths for 16 and 8bpp
authorBenjamin Otte <otte@gnome.org>
Fri, 27 Nov 2009 21:02:54 +0000 (22:02 +0100)
committerBenjamin Otte <otte@gnome.org>
Fri, 4 Dec 2009 14:04:24 +0000 (15:04 +0100)
pixman/pixman-mmx.c
pixman/pixman-sse2.c

index 819e3a0..007fda7 100644 (file)
@@ -1883,22 +1883,13 @@ pixman_fill_mmx (uint32_t *bits,
     if (bpp != 16 && bpp != 32 && bpp != 8)
        return FALSE;
 
-    if (bpp == 16 && (xor >> 16 != (xor & 0xffff)))
-       return FALSE;
-
-    if (bpp == 8 &&
-        ((xor >> 16 != (xor & 0xffff)) ||
-         (xor >> 24 != (xor & 0x00ff) >> 16)))
-    {
-       return FALSE;
-    }
-
     if (bpp == 8)
     {
        stride = stride * (int) sizeof (uint32_t) / 1;
        byte_line = (uint8_t *)(((uint8_t *)bits) + stride * y + x);
        byte_width = width;
        stride *= 1;
+        xor = (xor & 0xff) * 0x01010101;
     }
     else if (bpp == 16)
     {
@@ -1906,6 +1897,7 @@ pixman_fill_mmx (uint32_t *bits,
        byte_line = (uint8_t *)(((uint16_t *)bits) + stride * y + x);
        byte_width = 2 * width;
        stride *= 2;
+        xor = (xor & 0xffff) * 0x00010001;
     }
     else
     {
index 78b0ad1..1f8aa6e 100644 (file)
@@ -3981,9 +3981,6 @@ pixman_fill_sse2 (uint32_t *bits,
 
     __m128i xmm_def;
 
-    if (bpp == 16 && (data >> 16 != (data & 0xffff)))
-       return FALSE;
-
     if (bpp != 16 && bpp != 32)
        return FALSE;
 
@@ -3993,6 +3990,7 @@ pixman_fill_sse2 (uint32_t *bits,
        byte_line = (uint8_t *)(((uint16_t *)bits) + stride * y + x);
        byte_width = 2 * width;
        stride *= 2;
+        data = (data & 0xffff) * 0x00010001;
     }
     else
     {