Fix various problems in FbCombineMultiplyC
authorSøren Sandmann Pedersen <sandmann@redhat.com>
Sat, 29 Nov 2008 19:53:57 +0000 (14:53 -0500)
committerSøren Sandmann Pedersen <sandmann@redhat.com>
Tue, 23 Jun 2009 18:42:35 +0000 (14:42 -0400)
Don't read the destination unless we have to.  fbByteMulAddC()
produces its result in its first argument, not its last.

pixman/pixman-combine.c.template

index ca3f351..f981392 100644 (file)
@@ -391,20 +391,21 @@ fbCombineMultiplyC (pixman_implementation_t *imp, pixman_op_t op,
     for (i = 0; i < width; ++i) {
         comp4_t m = *(mask + i);
         comp4_t s = combineMask (src, mask, i);
-        comp4_t d = *(dest + i);
-       comp4_t r = d;
-       comp4_t dest_ia = Alpha (~d);
+
+       fbCombineMaskValueC (&s, &m);
 
         if (m == 0)
            continue;
 
-       fbCombineMaskValueC (&s, &m);
-
        m = ~m;
        if (m != 0)
        {
+           comp4_t d = *(dest + i);
+           comp4_t r = d;
+           comp4_t dest_ia = Alpha (~d);
+           
            FbByteAddMulC (r, m, s, dest_ia);
-           FbByteMulAddC (s, d, r);
+           FbByteMulAddC (r, s, d);
        }
 
        *(dest + i) = r;