[mmx] Fix mask creation bugs
authorSøren Sandmann Pedersen <ssp@redhat.com>
Wed, 7 Apr 2010 23:34:41 +0000 (19:34 -0400)
committerSøren Sandmann Pedersen <ssp@redhat.com>
Wed, 14 Apr 2010 02:41:48 +0000 (22:41 -0400)
This line:

    mask = mask | mask >> 8 | mask >> 16 | mask >> 24;

only works when mask has 0s in the lower 24 bits, so add

     mask &= 0xff000000;

before.

Reported by Todd Rinaldo on the #cairo IRC channel.

pixman/pixman-mmx.c

index e084e7f..d51b40c 100644 (file)
@@ -1385,6 +1385,7 @@ mmx_composite_over_8888_n_8888 (pixman_implementation_t *imp,
     PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
 
     mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);
+    mask &= 0xff000000;
     mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
     vmask = load8888 (mask);
     srca = MC (4x00ff);
@@ -1470,6 +1471,7 @@ mmx_composite_over_x888_n_8888 (pixman_implementation_t *imp,
     PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
     mask = _pixman_image_get_solid (mask_image, dst_image->bits.format);
 
+    mask &= 0xff000000;
     mask = mask | mask >> 8 | mask >> 16 | mask >> 24;
     vmask = load8888 (mask);
     srca = MC (4x00ff);