[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

pixman: Changes to 'debian-unstable'



 .gitignore                       |   25 
 ChangeLog                        | 1497 ++++++++++++++++++++++++++
 Makefile.am                      |    4 
 configure.ac                     |  169 ++-
 debian/changelog                 |   24 
 debian/libpixman-1-0.symbols     |    2 
 debian/rules                     |    2 
 demos/Makefile.am                |   13 
 demos/checkerboard.c             |   71 +
 demos/composite-test.c           |   55 
 demos/gradient-test.c            |   13 
 demos/gtk-utils.c                |   46 
 demos/parrot.c                   | 1079 +++++++++++++++++++
 demos/parrot.jpg                 |binary
 demos/quad2quad.c                | 2183 +++++++++++++++++++++++++++++++++++++++
 pixman/Makefile.am               |   28 
 pixman/loongson-mmintrin.h       |  273 ++++
 pixman/pixman-access.c           |    9 
 pixman/pixman-accessor.h         |   15 
 pixman/pixman-bits-image.c       |   38 
 pixman/pixman-combine.h.template |    4 
 pixman/pixman-compiler.h         |    4 
 pixman/pixman-cpu.c              |  129 ++
 pixman/pixman-fast-path.c        |   10 
 pixman/pixman-general.c          |   16 
 pixman/pixman-image.c            |   20 
 pixman/pixman-implementation.c   |  119 --
 pixman/pixman-mips-dspr2-asm.S   |  812 ++++++++++++++
 pixman/pixman-mips-dspr2-asm.h   |  625 +++++++++++
 pixman/pixman-mips-dspr2.c       |  275 ++++
 pixman/pixman-mips-dspr2.h       |  182 +++
 pixman/pixman-mips-memcpy-asm.S  |  382 ++++++
 pixman/pixman-mmx.c              | 1054 ++++++++++++------
 pixman/pixman-noop.c             |   27 
 pixman/pixman-private.h          |   47 
 pixman/pixman-region.c           |   19 
 pixman/pixman-sse2.c             |    2 
 pixman/pixman-trap.c             |    2 
 pixman/pixman-utils.c            |   35 
 pixman/pixman.h                  |    2 
 test/Makefile.win32              |   21 
 test/a1-trap-test.c              |    2 
 test/alphamap.c                  |  144 +-
 test/blitters-test.c             |    7 
 test/composite-traps-test.c      |    1 
 test/composite.c                 |  351 +-----
 test/fetch-test.c                |    8 
 test/gradient-crash-test.c       |    6 
 test/lowlevel-blt-bench.c        |   10 
 test/oob-test.c                  |    4 
 test/region-contains-test.c      |    5 
 test/region-translate-test.c     |    2 
 test/scaling-crash-test.c        |   14 
 test/scaling-test.c              |    1 
 test/stress-test.c               |    4 
 test/trap-crasher.c              |    4 
 test/utils.c                     |  211 +++
 test/utils.h                     |   45 
 58 files changed, 9112 insertions(+), 1040 deletions(-)

New commits:
commit 8940c5222ea9a58cf89fe5473a931ae6bf7ceb01
Author: Cyril Brulebois <kibi@debian.org>
Date:   Fri Jun 15 00:16:59 2012 +0200

    Upload to unstable.

diff --git a/debian/changelog b/debian/changelog
index 5663bac..9ec8db0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,8 @@
-pixman (0.26.0-1) UNRELEASED; urgency=low
+pixman (0.26.0-1) unstable; urgency=low
 
   * New upstream release.
 
- -- Cyril Brulebois <kibi@debian.org>  Fri, 15 Jun 2012 00:15:32 +0200
+ -- Cyril Brulebois <kibi@debian.org>  Fri, 15 Jun 2012 00:16:47 +0200
 
 pixman (0.25.6-1) experimental; urgency=low
 

commit 0181d422abfb49129c2bad296e8920e56f7051ce
Author: Cyril Brulebois <kibi@debian.org>
Date:   Fri Jun 15 00:15:43 2012 +0200

    Bump changelogs.

diff --git a/ChangeLog b/ChangeLog
index 7f6f52d..d35fda1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,107 @@
+commit b1a401e6c9f204d33a55eee41897d66ab81d6117
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Sat May 26 16:17:14 2012 -0400
+
+    Pre-release version bump to 0.26.0
+
+commit f71e3dba979fcfc1cf87d01137e1e32451a173b1
+Author: Ingmar Runge <ingmar@irsoft.de>
+Date:   Sat May 19 15:45:18 2012 +0200
+
+    Fix MSVC compilation
+    
+    Only up to three SSE intrinsics supported in function declaration.
+
+commit 1e59e18d73a6e45729a99fe6ccc74d61631ff5f0
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Thu May 24 15:30:41 2012 -0400
+
+    test: Composite with solid images instead of using pixman_image_fill_*
+    
+    There is a couple of places where the test suite uses the
+    pixman_image_fill_* functions to initialize images. These functions
+    can fail, and will do so if the "fast" implementation is disabled.
+    
+    So to make sure the test suite passes even using
+    PIXMAN_DISABLE="fast", use pixman_image_composite32() with a solid
+    image instead of pixman_image_fill_*.
+
+commit 30816e3068bccf7c78c78f916b54971d24873bdc
+Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
+Date:   Thu May 3 00:03:43 2012 +0200
+
+    MIPS: DSPr2: Added bilinear over_8888_8_8888 fast path.
+    
+    Performance numbers before/after on MIPS-74kc @ 1GHz
+    
+    Referent (before):
+    
+    cairo-perf-trace:
+    [ # ]  backend                         test   min(s) median(s) stddev. count
+    [ # ]    image: pixman 0.25.3
+    [  0]    image             firefox-fishtank 2289.180 2290.567   0.05%    5/6
+    
+    Optimized:
+    
+    cairo-perf-trace:
+    [ # ]  backend                         test   min(s) median(s) stddev. count
+    [ # ]    image: pixman 0.25.3
+    [  0]    image             firefox-fishtank 1700.925 1708.314   0.22%    5/6
+
+commit aea0522f6f1a51b97a673cfe4dc157e501008580
+Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
+Date:   Wed May 23 18:53:43 2012 +0200
+
+    MIPS: DSPr2: Fix bug in over_n_8888_8888_ca/over_n_8888_0565_ca routines
+    
+    In main loop (unrolled by factor 2), instead of negating multiplied
+    mask values by srca, values of srca was negated, and passed as alpha
+    argument for
+    
+        UN8x4_MUL_UN8x4_ADD_UN8x4 macro.
+    
+    Instead of:
+    
+        ma = ~ma;
+        UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s);
+    
+    Code was doing this:
+    
+        ma = ~srca;
+        UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s);
+    
+    Key is in substituting registers s0/s1 (containing srca value), with
+    t0/t1 containing mask values multiplied by srca.  Register usage is
+    also improved (less registers are saved on stack, for
+    over_n_8888_8888_ca routine).
+    
+    The bug was introduced in commit d2ee5631 and revealed by composite test.
+
+commit 74bf5dc2f99245e7b486203b6ba074fb629eb5f3
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Sun May 20 13:09:16 2012 -0400
+
+    demos: Add parrot.jpg to EXTRA_DIST
+    
+    Pointed out by Cyril Brulebois.
+
+commit 55698584be93706794b181cbf595846da578e103
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Tue May 15 16:32:08 2012 -0400
+
+    configure.ac: Fail the ARM/iwMMXt test if not compiling with -march=iwmmxt
+    
+    If not compiling with -march=iwmmxt, the configure test will still pass,
+    thinking that the __builtin_arm_* intrinsic is a function instead of
+    generating a single instruction. Since no linking is done, the configure
+    test doesn't catch this, and we get linking errors in the build.
+
+commit 3682b615154338f9754e7c1e046b42bb8ad584fa
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Tue May 15 13:38:44 2012 -0400
+
+    Post-release version bump to 0.25.7
+
 commit 1e1a00e964a1d8ef43d6d75c1c3a0b5d518d1979
 Author: Søren Sandmann Pedersen <ssp@redhat.com>
 Date:   Tue May 15 13:20:09 2012 -0400
diff --git a/debian/changelog b/debian/changelog
index b39f72e..5663bac 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+pixman (0.26.0-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Cyril Brulebois <kibi@debian.org>  Fri, 15 Jun 2012 00:15:32 +0200
+
 pixman (0.25.6-1) experimental; urgency=low
 
   * New upstream release candidate.

commit b1a401e6c9f204d33a55eee41897d66ab81d6117
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Sat May 26 16:17:14 2012 -0400

    Pre-release version bump to 0.26.0

diff --git a/configure.ac b/configure.ac
index 027a168..6cafab3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -53,8 +53,8 @@ AC_PREREQ([2.57])
 #
 
 m4_define([pixman_major], 0)
-m4_define([pixman_minor], 25)
-m4_define([pixman_micro], 7)
+m4_define([pixman_minor], 26)
+m4_define([pixman_micro], 0)
 
 m4_define([pixman_version],[pixman_major.pixman_minor.pixman_micro])
 

commit f71e3dba979fcfc1cf87d01137e1e32451a173b1
Author: Ingmar Runge <ingmar@irsoft.de>
Date:   Sat May 19 15:45:18 2012 +0200

    Fix MSVC compilation
    
    Only up to three SSE intrinsics supported in function declaration.

diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index 01a2bc9..eb02d1a 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -598,14 +598,14 @@ pack_4xpacked565 (__m64 a, __m64 b)
 #endif
 }
 
+#ifndef _MSC_VER
+
 static force_inline __m64
 pack_4x565 (__m64 v0, __m64 v1, __m64 v2, __m64 v3)
 {
     return pack_4xpacked565 (pack8888 (v0, v1), pack8888 (v2, v3));
 }
 
-#ifndef _MSC_VER
-
 static force_inline __m64
 pix_add_mul (__m64 x, __m64 a, __m64 y, __m64 b)
 {
@@ -617,6 +617,11 @@ pix_add_mul (__m64 x, __m64 a, __m64 y, __m64 b)
 
 #else
 
+/* MSVC only handles a "pass by register" of up to three SSE intrinsics */
+
+#define pack_4x565(v0, v1, v2, v3) \
+    pack_4xpacked565 (pack8888 (v0, v1), pack8888 (v2, v3))
+
 #define pix_add_mul(x, a, y, b)	 \
     ( x = pix_multiply (x, a),	 \
       y = pix_multiply (y, b),	 \

commit 1e59e18d73a6e45729a99fe6ccc74d61631ff5f0
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Thu May 24 15:30:41 2012 -0400

    test: Composite with solid images instead of using pixman_image_fill_*
    
    There is a couple of places where the test suite uses the
    pixman_image_fill_* functions to initialize images. These functions
    can fail, and will do so if the "fast" implementation is disabled.
    
    So to make sure the test suite passes even using
    PIXMAN_DISABLE="fast", use pixman_image_composite32() with a solid
    image instead of pixman_image_fill_*.

diff --git a/test/composite.c b/test/composite.c
index 48bde9c..94b4825 100644
--- a/test/composite.c
+++ b/test/composite.c
@@ -525,15 +525,16 @@ composite_test (image_t *dst,
 		int testno)
 {
     pixman_color_t fill;
-    pixman_rectangle16_t rect;
     color_t expected, tdst, tsrc, tmsk;
     pixel_checker_t checker;
+    pixman_image_t *solid;
 
     /* Initialize dst */
     compute_pixman_color (dst->color, &fill);
-    rect.x = rect.y = 0;
-    rect.width = rect.height = dst->size;
-    pixman_image_fill_rectangles (PIXMAN_OP_SRC, dst->image, &fill, 1, &rect);
+    solid = pixman_image_create_solid_fill (&fill);
+    pixman_image_composite32 (PIXMAN_OP_SRC, solid, NULL, dst->image,
+			      0, 0, 0, 0, 0, 0, dst->size, dst->size);
+    pixman_image_unref (solid);
 
     if (mask)
     {
@@ -644,16 +645,16 @@ image_init (image_t *info,
 
     if (info->size)
     {
-	pixman_rectangle16_t rect;
+	pixman_image_t *solid;
 
 	info->image = pixman_image_create_bits (info->format->format,
 						info->size, info->size,
 						NULL, 0);
 
-	rect.x = rect.y = 0;
-	rect.width = rect.height = info->size;
-	pixman_image_fill_rectangles (PIXMAN_OP_SRC, info->image, &fill,
-				      1, &rect);
+	solid = pixman_image_create_solid_fill (&fill);
+	pixman_image_composite32 (PIXMAN_OP_SRC, solid, NULL, info->image,
+				  0, 0, 0, 0, 0, 0, info->size, info->size);
+	pixman_image_unref (solid);
 
 	if (sizes[size] & REPEAT)
 	{
diff --git a/test/scaling-crash-test.c b/test/scaling-crash-test.c
index ed57ae0..0dac892 100644
--- a/test/scaling-crash-test.c
+++ b/test/scaling-crash-test.c
@@ -32,8 +32,8 @@ run_test (int32_t		dst_width,
     pixman_transform_t transform;
     uint32_t *         srcbuf;
     uint32_t *         dstbuf;
-    pixman_box32_t     box = { 0, 0, src_width, src_height };
     pixman_color_t     color_cc = { 0xcccc, 0xcccc, 0xcccc, 0xcccc };
+    pixman_image_t *   solid;
     int result;
     int i;
 
@@ -62,7 +62,10 @@ run_test (int32_t		dst_width,
         PIXMAN_a8r8g8b8, src_width, src_height,
 	srcbuf + (src_width + 10) * 5 + 5, (src_width + 10) * 4);
 
-    pixman_image_fill_boxes (PIXMAN_OP_SRC, src_img, &color_cc, 1, &box);
+    solid = pixman_image_create_solid_fill (&color_cc);
+    pixman_image_composite32 (PIXMAN_OP_SRC, solid, NULL, src_img,
+			      0, 0, 0, 0, 0, 0, src_width, src_height);
+    pixman_image_unref (solid);
 
     dst_img = pixman_image_create_bits (
         PIXMAN_a8r8g8b8, dst_width, dst_height, dstbuf, dst_width * 4);

commit 30816e3068bccf7c78c78f916b54971d24873bdc
Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
Date:   Thu May 3 00:03:43 2012 +0200

    MIPS: DSPr2: Added bilinear over_8888_8_8888 fast path.
    
    Performance numbers before/after on MIPS-74kc @ 1GHz
    
    Referent (before):
    
    cairo-perf-trace:
    [ # ]  backend                         test   min(s) median(s) stddev. count
    [ # ]    image: pixman 0.25.3
    [  0]    image             firefox-fishtank 2289.180 2290.567   0.05%    5/6
    
    Optimized:
    
    cairo-perf-trace:
    [ # ]  backend                         test   min(s) median(s) stddev. count
    [ # ]    image: pixman 0.25.3
    [  0]    image             firefox-fishtank 1700.925 1708.314   0.22%    5/6

diff --git a/pixman/pixman-mips-dspr2-asm.S b/pixman/pixman-mips-dspr2-asm.S
index f3908da..87558f0 100644
--- a/pixman/pixman-mips-dspr2-asm.S
+++ b/pixman/pixman-mips-dspr2-asm.S
@@ -747,3 +747,66 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8_0565_asm_mips)
      nop
 
 END(pixman_composite_over_n_8_0565_asm_mips)
+
+LEAF_MIPS_DSPR2(pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_mips)
+/*
+ * a0     - dst        (a8r8g8b8)
+ * a1     - mask       (a8)
+ * a2     - src_top    (a8r8g8b8)
+ * a3     - src_bottom (a8r8g8b8)
+ * 16(sp) - wt
+ * 20(sp) - wb
+ * 24(sp) - vx
+ * 28(sp) - unit_x
+ * 32(sp) - w
+ */
+
+    SAVE_REGS_ON_STACK 28, v0, v1, s0, s1, s2, s3, s4, s5, s6, s7, s8
+
+    lw       v1, 60(sp)        /* v1 = w(sp + 32 + 28 save regs stack offset)*/
+    beqz     v1, 1f
+     nop
+
+    lw       s0, 44(sp)        /* s0 = wt */
+    lw       s1, 48(sp)        /* s1 = wb */
+    lw       s2, 52(sp)        /* s2 = vx */
+    lw       s3, 56(sp)        /* s3 = unit_x */
+    li       v0, 256
+    li       s8, 0x00ff00ff
+0:
+    andi     t4, s2, 0xffff    /* t4 = (short)vx */
+    srl      t4, t4, 8         /* t4 = vx >> 8 */
+    subu     t5, v0, t4        /* t5 = ( 256 - (vx>>8)) */
+
+    mul      s4, s0, t5        /* s4 = wt*(256-(vx>>8)) */
+    mul      s5, s0, t4        /* s5 = wt*(vx>>8) */
+    mul      s6, s1, t5        /* s6 = wb*(256-(vx>>8)) */
+    mul      s7, s1, t4        /* s7 = wb*(vx>>8) */
+
+    sra      t9, s2, 16
+    sll      t9, t9, 2
+    addiu    t8, t9, 4
+    lwx      t0, t9(a2)        /* t0 = tl */
+    lwx      t1, t8(a2)        /* t1 = tr */
+    addiu    v1, v1, -1
+    lwx      t2, t9(a3)        /* t2 = bl */
+    lwx      t3, t8(a3)        /* t3 = br */
+
+    BILINEAR_INTERPOLATE_SINGLE_PIXEL t0, t1, t2, t3, \
+                                      t4, t5, t6, t7, t8, t9, s4, s5, s6, s7
+    lbu      t1, 0(a1)         /* t1 = mask */
+    lw       t2, 0(a0)         /* t2 = dst */
+    addiu    a1, a1, 1
+    OVER_8888_8_8888 t0, t1, t2, t0, s8, t3, t4, t5, t6
+
+    addu     s2, s2, s3        /* vx += unit_x; */
+    sw       t0, 0(a0)
+    bnez     v1, 0b
+     addiu   a0, a0, 4
+
+1:
+    RESTORE_REGS_FROM_STACK 28, v0, v1, s0, s1, s2, s3, s4, s5, s6, s7, s8
+    j        ra
+     nop
+
+END(pixman_scaled_bilinear_scanline_8888_8_8888_OVER_asm_mips)
diff --git a/pixman/pixman-mips-dspr2-asm.h b/pixman/pixman-mips-dspr2-asm.h
index 8383060..7cf3281 100644
--- a/pixman/pixman-mips-dspr2-asm.h
+++ b/pixman/pixman-mips-dspr2-asm.h
@@ -566,4 +566,60 @@ LEAF_MIPS32R2(symbol)                                   \
     addu_s.qb              \out2_8888, \d2_8888,  \scratch2
 .endm
 
+.macro BILINEAR_INTERPOLATE_SINGLE_PIXEL tl, tr, bl, br,         \
+                                         scratch1, scratch2,     \
+                                         alpha, red, green, blue \
+                                         wt1, wt2, wb1, wb2
+    andi            \scratch1, \tl,  0xff
+    andi            \scratch2, \tr,  0xff
+    andi            \alpha,    \bl,  0xff
+    andi            \red,      \br,  0xff
+
+    multu           $ac0,      \wt1, \scratch1
+    maddu           $ac0,      \wt2, \scratch2
+    maddu           $ac0,      \wb1, \alpha
+    maddu           $ac0,      \wb2, \red
+
+    ext             \scratch1, \tl,  8, 8
+    ext             \scratch2, \tr,  8, 8
+    ext             \alpha,    \bl,  8, 8
+    ext             \red,      \br,  8, 8
+
+    multu           $ac1,      \wt1, \scratch1
+    maddu           $ac1,      \wt2, \scratch2
+    maddu           $ac1,      \wb1, \alpha
+    maddu           $ac1,      \wb2, \red
+
+    ext             \scratch1, \tl,  16, 8
+    ext             \scratch2, \tr,  16, 8
+    ext             \alpha,    \bl,  16, 8
+    ext             \red,      \br,  16, 8
+
+    mflo            \blue,     $ac0
+
+    multu           $ac2,      \wt1, \scratch1
+    maddu           $ac2,      \wt2, \scratch2
+    maddu           $ac2,      \wb1, \alpha
+    maddu           $ac2,      \wb2, \red
+
+    ext             \scratch1, \tl,  24, 8
+    ext             \scratch2, \tr,  24, 8
+    ext             \alpha,    \bl,  24, 8
+    ext             \red,      \br,  24, 8
+
+    mflo            \green,    $ac1
+
+    multu           $ac3,      \wt1, \scratch1
+    maddu           $ac3,      \wt2, \scratch2
+    maddu           $ac3,      \wb1, \alpha
+    maddu           $ac3,      \wb2, \red
+
+    mflo            \red,      $ac2
+    mflo            \alpha,    $ac3
+
+    precr.qb.ph     \alpha,    \alpha, \red
+    precr.qb.ph     \scratch1, \green, \blue
+    precrq.qb.ph    \tl,       \alpha, \scratch1
+.endm
+
 #endif //PIXMAN_MIPS_DSPR2_ASM_H
diff --git a/pixman/pixman-mips-dspr2.c b/pixman/pixman-mips-dspr2.c
index 7081734..06d4335 100644
--- a/pixman/pixman-mips-dspr2.c
+++ b/pixman/pixman-mips-dspr2.c
@@ -58,6 +58,9 @@ PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_8888,
 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_0565,
                                        uint8_t, 1, uint16_t, 1)
 
+PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_8888, OVER,
+                                             uint32_t, uint32_t)
+
 static pixman_bool_t
 pixman_fill_mips (uint32_t *bits,
                   int       stride,
@@ -206,6 +209,9 @@ static const pixman_fast_path_t mips_dspr2_fast_paths[] =
     PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       r5g6b5,   mips_composite_over_n_8_0565),
     PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       b5g6r5,   mips_composite_over_n_8_0565),
 
+    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8_8888),
+    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8_8888),
+
     { PIXMAN_OP_NONE },
 };
 
diff --git a/pixman/pixman-mips-dspr2.h b/pixman/pixman-mips-dspr2.h
index cc35d02..5036938 100644
--- a/pixman/pixman-mips-dspr2.h
+++ b/pixman/pixman-mips-dspr2.h
@@ -127,4 +127,56 @@ mips_composite_##name (pixman_implementation_t *imp,                \
     }                                                               \
 }
 
+/*****************************************************************************/
+
+#define PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST(flags, name, op,          \
+                                                src_type, dst_type)           \
+void                                                                          \
+pixman_scaled_bilinear_scanline_##name##_##op##_asm_mips (                    \
+                                             dst_type *       dst,            \
+                                             const uint8_t *  mask,           \
+                                             const src_type * top,            \
+                                             const src_type * bottom,         \
+                                             int              wt,             \
+                                             int              wb,             \
+                                             pixman_fixed_t   x,              \
+                                             pixman_fixed_t   ux,             \
+                                             int              width);         \
+                                                                              \
+static force_inline void                                                      \
+scaled_bilinear_scanline_mips_##name##_##op (dst_type *       dst,            \
+                                             const uint8_t *  mask,           \
+                                             const src_type * src_top,        \
+                                             const src_type * src_bottom,     \
+                                             int32_t          w,              \
+                                             int              wt,             \
+                                             int              wb,             \
+                                             pixman_fixed_t   vx,             \
+                                             pixman_fixed_t   unit_x,         \
+                                             pixman_fixed_t   max_vx,         \
+                                             pixman_bool_t    zero_src)       \
+{                                                                             \
+    if ((flags & SKIP_ZERO_SRC) && zero_src)                                  \
+        return;                                                               \
+    pixman_scaled_bilinear_scanline_##name##_##op##_asm_mips (                \
+                      dst, mask, src_top, src_bottom, wt, wb, vx, unit_x, w); \
+}                                                                             \
+                                                                              \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_cover_##op,                      \
+                       scaled_bilinear_scanline_mips_##name##_##op,           \
+                       src_type, uint8_t, dst_type, COVER,                    \
+                       FLAG_HAVE_NON_SOLID_MASK)                              \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_none_##op,                       \
+                       scaled_bilinear_scanline_mips_##name##_##op,           \
+                       src_type, uint8_t, dst_type, NONE,                     \
+                       FLAG_HAVE_NON_SOLID_MASK)                              \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_pad_##op,                        \
+                       scaled_bilinear_scanline_mips_##name##_##op,           \
+                       src_type, uint8_t, dst_type, PAD,                      \
+                       FLAG_HAVE_NON_SOLID_MASK)                              \
+FAST_BILINEAR_MAINLOOP_COMMON (mips_##name##_normal_##op,                     \
+                       scaled_bilinear_scanline_mips_##name##_##op,           \
+                       src_type, uint8_t, dst_type, NORMAL,                   \
+                       FLAG_HAVE_NON_SOLID_MASK)
+
 #endif //PIXMAN_MIPS_DSPR2_H

commit aea0522f6f1a51b97a673cfe4dc157e501008580
Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
Date:   Wed May 23 18:53:43 2012 +0200

    MIPS: DSPr2: Fix bug in over_n_8888_8888_ca/over_n_8888_0565_ca routines
    
    In main loop (unrolled by factor 2), instead of negating multiplied
    mask values by srca, values of srca was negated, and passed as alpha
    argument for
    
        UN8x4_MUL_UN8x4_ADD_UN8x4 macro.
    
    Instead of:
    
        ma = ~ma;
        UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s);
    
    Code was doing this:
    
        ma = ~srca;
        UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s);
    
    Key is in substituting registers s0/s1 (containing srca value), with
    t0/t1 containing mask values multiplied by srca.  Register usage is
    also improved (less registers are saved on stack, for
    over_n_8888_8888_ca routine).
    
    The bug was introduced in commit d2ee5631 and revealed by composite test.

diff --git a/pixman/pixman-mips-dspr2-asm.S b/pixman/pixman-mips-dspr2-asm.S
index 68ad33f..f3908da 100644
--- a/pixman/pixman-mips-dspr2-asm.S
+++ b/pixman/pixman-mips-dspr2-asm.S
@@ -317,7 +317,7 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
  * a3 - w
  */
 
-    SAVE_REGS_ON_STACK 16, s0, s1, s2, s3, s4, s5, s6, s7
+    SAVE_REGS_ON_STACK 8, s0, s1, s2, s3, s4, s5
     beqz         a3, 4f
      nop
     li           t6, 0xff
@@ -337,23 +337,21 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
     beqz         t2, 12f      /* if (t0 == 0) && (t1 == 0) */
      addiu       a2, a2, 8
     and          t3, t0, t1
-    move         s0, t8       /* s0 = srca */
-    move         s1, t8       /* s1 = srca */
     move         t4, a1       /* t4 = src */
     move         t5, a1       /* t5 = src */
     lw           t2, 0(a0)    /* t2 = dst */
     beq          t3, t7, 11f  /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
-     lw          t3, 4(a0)    /* t0 = dst */
+     lw          t3, 4(a0)    /* t3 = dst */
     MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
-    MIPS_2xUN8x4_MUL_2xUN8   t0, t1, t8, t8, s0, s1, t9, s2, s3, s4, s5, s6, s7
+    MIPS_2xUN8x4_MUL_2xUN8   t0, t1, t8, t8, t0, t1, t9, s0, s1, s2, s3, s4, s5
 11:
-    not          s0, s0
-    not          s1, s1
-    MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, s0, s1, s2, s3, t9, t0, t1, s4, s5, s6, s7
-    addu_s.qb    t0, t4, s2
-    addu_s.qb    t1, t5, s3
-    sw           t0, 0(a0)
-    sw           t1, 4(a0)
+    not          t0, t0
+    not          t1, t1
+    MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+    addu_s.qb    t2, t4, t2
+    addu_s.qb    t3, t5, t3
+    sw           t2, 0(a0)
+    sw           t3, 4(a0)
 12:
     addiu        a3, a3, -2
     addiu        t1, a3, -1
@@ -369,20 +367,20 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
     beqz         t2, 22f      /* if (t0 == 0) & (t1 == 0) */
      addiu       a2, a2, 8
     and          t2, t0, t1
-    move         s0, a1
+    move         t4, a1
     beq          t2, t7, 21f  /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
-     move        s1, a1
+     move        t5, a1
     lw           t2, 0(a0)    /* t2 = dst */
     lw           t3, 4(a0)    /* t3 = dst */
     MIPS_2xUN8x4_MUL_2xUN8x4 a1, a1, t0, t1, t4, t5, t9, s0, s1, s2, s3, s4, s5
     not          t0, t0
     not          t1, t1
-    MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, s0, s1, t9, s2, s3, s4, s5, s6, s7
-    addu_s.qb    s0, t4, s0
-    addu_s.qb    s1, t5, s1
+    MIPS_2xUN8x4_MUL_2xUN8x4 t2, t3, t0, t1, t2, t3, t9, s0, s1, s2, s3, s4, s5
+    addu_s.qb    t4, t4, t2
+    addu_s.qb    t5, t5, t3
 21:
-    sw           s0, 0(a0)
-    sw           s1, 4(a0)
+    sw           t4, 0(a0)
+    sw           t5, 4(a0)
 22:
     addiu        a3, a3, -2
     addiu        t1, a3, -1
@@ -395,20 +393,19 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_8888_ca_asm_mips)
     lw           t1, 0(a2)    /* t1 = mask */
     beqz         t1, 4f
      nop
-    move         s0, t8       /* s0 = srca */
     move         t2, a1       /* t2 = src */
     beq          t1, t7, 31f
      lw          t0, 0(a0)    /* t0 = dst */
 
     MIPS_UN8x4_MUL_UN8x4  a1, t1, t2, t9, t3, t4, t5, t6
-    MIPS_UN8x4_MUL_UN8    t1, t8, s0, t9, t3, t4, t5
+    MIPS_UN8x4_MUL_UN8    t1, t8, t1, t9, t3, t4, t5
 31:
-    not          s0, s0
-    MIPS_UN8x4_MUL_UN8x4  t0, s0, t3, t9, t4, t5, t6, t1
-    addu_s.qb    t0, t2, t3
+    not          t1, t1
+    MIPS_UN8x4_MUL_UN8x4  t0, t1, t0, t9, t3, t4, t5, t6
+    addu_s.qb    t0, t2, t0
     sw           t0, 0(a0)
 4:
-    RESTORE_REGS_FROM_STACK 16, s0, s1, s2, s3, s4, s5, s6, s7
+    RESTORE_REGS_FROM_STACK 8, s0, s1, s2, s3, s4, s5
     j            ra
      nop
 
@@ -447,8 +444,8 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
     beqz         t2, 12f      /* if (t0 == 0) && (t1 == 0) */
      addiu       a2, a2, 8
     and          t3, t0, t1
-    move         t0, t8
-    move         t1, a1
+    move         s2, a1       /* s2 = src */
+    move         s3, a1       /* s3 = src */
     lhu          t2, 0(a0)    /* t2 = dst */
     beq          t3, s1, 11f  /* if (t0 == 0xffffffff) && (t1 == 0xffffffff) */
      lhu         t3, 2(a0)    /* t3 = dst */
@@ -461,7 +458,7 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
     MIPS_2xUN8x4_MUL_2xUN8x4 s4, s5, t0, t1, s4, s5, t9, t4, s6, s7, s8, t0, t1
     addu_s.qb    s2, s2, s4
     addu_s.qb    s3, s3, s5
-    CONVERT_2x8888_TO_2x0565 s2, s3, t2, t3, t5, t6, t7, s1, s2
+    CONVERT_2x8888_TO_2x0565 s2, s3, t2, t3, t5, t6, t7, s4, s5
     sh           t2, 0(a0)
     sh           t3, 2(a0)
 12:
@@ -507,17 +504,16 @@ LEAF_MIPS_DSPR2(pixman_composite_over_n_8888_0565_ca_asm_mips)
     lw           t1, 0(a2)    /* t1 = mask */
     beqz         t1, 4f
      nop
-    move         s0, t8       /* s0 = srca */
     move         t2, a1       /* t2 = src */
     beq          t1, t7, 31f
      lhu         t0, 0(a0)    /* t0 = dst */
 
     MIPS_UN8x4_MUL_UN8x4     a1, t1, t2, t9, t3, t4, t5, t6
-    MIPS_UN8x4_MUL_UN8       t1, t8, s0, t9, t3, t4, t5
+    MIPS_UN8x4_MUL_UN8       t1, t8, t1, t9, t3, t4, t5
 31:
-    not          s0, s0
+    not          t1, t1
     CONVERT_1x0565_TO_1x8888 t0, s1, s2, s3
-    MIPS_UN8x4_MUL_UN8x4     s1, s0, t3, t9, t4, t5, t6, t1
+    MIPS_UN8x4_MUL_UN8x4     s1, t1, t3, t9, t4, t5, t6, t7
     addu_s.qb    t0, t2, t3
     CONVERT_1x8888_TO_1x0565 t0, s1, s2, s3
     sh           s1, 0(a0)

commit 74bf5dc2f99245e7b486203b6ba074fb629eb5f3
Author: Søren Sandmann Pedersen <ssp@redhat.com>
Date:   Sun May 20 13:09:16 2012 -0400

    demos: Add parrot.jpg to EXTRA_DIST
    
    Pointed out by Cyril Brulebois.

diff --git a/demos/Makefile.am b/demos/Makefile.am
index 8f734cf..9aac1f5 100644
--- a/demos/Makefile.am
+++ b/demos/Makefile.am
@@ -22,7 +22,7 @@ DEMOS =				\
 	quad2quad		\
 	checkerboard
 
-EXTRA_DIST = parrot.c
+EXTRA_DIST = parrot.c parrot.jpg
 
 gradient_test_SOURCES = gradient-test.c $(GTK_UTILS)
 alpha_test_SOURCES = alpha-test.c $(GTK_UTILS)

commit ae5a1097689d11ad50419345f1663058da3419a5
Author: Cyril Brulebois <kibi@debian.org>
Date:   Sun May 20 17:56:41 2012 +0200

    Upload to experimental.

diff --git a/debian/changelog b/debian/changelog
index ad16d95..b39f72e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,11 @@
-pixman (0.25.6-1) UNRELEASED; urgency=low
+pixman (0.25.6-1) experimental; urgency=low
 
   * New upstream release candidate.
   * Remove demos/parrot.jpg before building the source package to avoid
     “binary file contents changed” until it's shipped in the upstream
     tarball.
 
- -- Cyril Brulebois <kibi@debian.org>  Sun, 20 May 2012 17:41:09 +0200
+ -- Cyril Brulebois <kibi@debian.org>  Sun, 20 May 2012 17:56:35 +0200
 
 pixman (0.25.2-1) experimental; urgency=low
 

commit a2283057a65162f84b5f7cd52070dbcc1211d429
Author: Cyril Brulebois <kibi@debian.org>
Date:   Sun May 20 17:49:35 2012 +0200

    Remove demos/parrot.jpg before building the source package.
    
    Let's avoid “binary file contents changed” until it's shipped in the
    upstream tarball.

diff --git a/debian/changelog b/debian/changelog
index 96f3f30..ad16d95 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,9 @@
 pixman (0.25.6-1) UNRELEASED; urgency=low
 
   * New upstream release candidate.
+  * Remove demos/parrot.jpg before building the source package to avoid
+    “binary file contents changed” until it's shipped in the upstream
+    tarball.
 
  -- Cyril Brulebois <kibi@debian.org>  Sun, 20 May 2012 17:41:09 +0200
 

commit 5cb7202a34b3a9e7cc964e2db13be713f065aae4
Author: Cyril Brulebois <kibi@debian.org>
Date:   Sun May 20 17:41:34 2012 +0200

    Bump changelogs.

diff --git a/ChangeLog b/ChangeLog
index df849a8..7f6f52d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,675 @@
+commit 1e1a00e964a1d8ef43d6d75c1c3a0b5d518d1979
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Tue May 15 13:20:09 2012 -0400
+
+    Pre-release version bump to 0.25.6
+    
+    Note that 0.25.4 was a botched release that doesn't have a tag and
+    doesn't correspond to any commit ID. It was however uploaded and
+    announced, so I'll just use the 0.25.6 version number.
+
+commit b2c16aaadfae64d2573abb537bfedd92c13b8d06
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Tue May 15 13:19:19 2012 -0400
+
+    demos/Makefile.am: Add parrot.c to EXTRA_DIST
+    
+    To get 'make distcheck' to pass.
+
+commit 50d3088d7882e1054a35e917becb7752662da6f0
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Fri May 11 21:59:13 2012 -0400
+
+    configure.ac: Rename loongson -> loongson-mmi
+    
+    Make it match with the other fast paths, and the PIXMAN_DISABLE value is
+    already loongson-mmi.
+
+commit a0a40cb822bec52494c64e6750be50b734dc29df
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Fri May 11 21:49:42 2012 -0400
+
+    configure.ac: Fix loongson-mmi out-of-tree builds
+    
+    When building out-of-tree, gcc wasn't able to find loongson-mmintrin.h
+    to compile the test program. Add -I$srcdir to CFLAGS to point gcc to it.
+
+commit 618a08e6aa03b38e8dc71ac610f7fdd55e8a8558
+Author: Nemanja Lukic <nemanja.lukic@rt-rk.com>
+Date:   Thu May 3 00:03:42 2012 +0200
+
+    MIPS: DSPr2: Added over_n_8_8888 and over_n_8_0565 fast paths.
+    
+    Performance numbers before/after on MIPS-74kc @ 1GHz
+    
+    Referent (before):
+    
+    lowlevel-blt-bench:
+         over_n_8_8888 =  L1:  10.40  L2:   9.79  M:  8.47 ( 33.62%)  HT:  7.64  VT:  7.59  R:  7.48  RT:  5.30 (  40Kops/s)
+         over_n_8_0565 =  L1:   7.40  L2:   7.23  M:  6.78 ( 17.94%)  HT:  6.23  VT:  6.17  R:  6.14  RT:  4.62 (  37Kops/s)
+    
+    Optimized:
+    
+    lowlevel-blt-bench:
+         over_n_8_8888 =  L1:  27.25  L2:  26.24  M: 18.15 ( 72.12%)  HT: 14.52  VT: 14.31  R: 13.83  RT:  7.57 (  48Kops/s)
+         over_n_8_0565 =  L1:  18.91  L2:  17.59  M: 15.06 ( 39.90%)  HT: 12.18  VT: 11.98  R: 11.83  RT:  6.80 (  46Kops/s)
+
+commit 7d4beedc612a32b73d7673bbf6447de0f3fca298
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Wed May 9 19:20:55 2012 -0400
+
+    mmx: add and use pack_4x565 function
+    
+    The pack_4x565 makes use of the pack_4xpacked565 function which uses pmadd.
+    
+    Some of the speed up is probably attributable to removing the artificial
+    serialization imposed by the
+    	vdest = pack_565 (..., vdest, 0);
+    	vdest = pack_565 (..., vdest, 1);
+    	...
+    pattern.
+    
+    Loongson:
+            over_n_0565 =  L1:  16.44  L2:  16.42  M: 13.83 (  9.85%)  HT: 12.83  VT: 12.61  R: 12.34  RT:  8.90 (  93Kops/s)
+            over_n_0565 =  L1:  42.48  L2:  42.53  M: 29.83 ( 21.20%)  HT: 23.39  VT: 23.72  R: 21.80  RT: 11.60 ( 113Kops/s)
+    
+         over_8888_0565 =  L1:  15.61  L2:  15.42  M: 12.11 ( 25.79%)  HT: 11.07  VT: 10.70  R: 10.37  RT:  7.25 (  82Kops/s)
+         over_8888_0565 =  L1:  35.01  L2:  35.20  M: 21.42 ( 45.57%)  HT: 18.12  VT: 17.61  R: 16.09  RT:  9.01 (  97Kops/s)
+    
+          over_n_8_0565 =  L1:  15.17  L2:  14.94  M: 12.57 ( 17.86%)  HT: 11.96  VT: 11.52  R: 10.79  RT:  7.31 (  79Kops/s)
+          over_n_8_0565 =  L1:  29.83  L2:  29.79  M: 21.85 ( 30.94%)  HT: 18.82  VT: 18.25  R: 16.15  RT:  8.72 (  91Kops/s)
+    
+    over_n_8888_0565_ca =  L1:  15.25  L2:  15.02  M: 11.64 ( 41.39%)  HT: 11.08  VT: 10.72  R: 10.02  RT:  7.00 (  77Kops/s)
+    over_n_8888_0565_ca =  L1:  30.12  L2:  29.99  M: 19.47 ( 68.99%)  HT: 17.05  VT: 16.55  R: 14.67  RT:  8.38 (  88Kops/s)
+    
+    ARM/iwMMXt:
+            over_n_0565 =  L1:  19.29  L2:  19.88  M: 17.38 ( 10.54%)  HT: 15.53  VT: 16.11  R: 13.69  RT: 11.00 (  96Kops/s)
+            over_n_0565 =  L1:  36.02  L2:  34.85  M: 28.04 ( 16.97%)  HT: 22.12  VT: 24.21  R: 22.36  RT: 12.22 ( 103Kops/s)
+    
+         over_8888_0565 =  L1:  18.38  L2:  16.59  M: 12.34 ( 22.29%)  HT: 11.67  VT: 11.71  R: 11.02  RT:  6.89 (  72Kops/s)
+         over_8888_0565 =  L1:  24.96  L2:  22.17  M: 15.11 ( 26.81%)  HT: 14.14  VT: 13.71  R: 13.18  RT:  8.13 (  78Kops/s)
+    
+          over_n_8_0565 =  L1:  14.65  L2:  12.44  M: 11.56 ( 14.50%)  HT: 10.93  VT: 10.39  R: 10.06  RT:  7.05 (  70Kops/s)
+          over_n_8_0565 =  L1:  18.37  L2:  14.98  M: 13.97 ( 16.51%)  HT: 12.67  VT: 10.35  R: 11.80  RT:  8.14 (  74Kops/s)
+    
+    over_n_8888_0565_ca =  L1:  14.27  L2:  12.93  M: 10.52 ( 33.23%)  HT:  9.70  VT:  9.90  R:  9.31  RT:  6.34 (  65Kops/s)
+    over_n_8888_0565_ca =  L1:  19.69  L2:  17.58  M: 13.40 ( 42.35%)  HT: 11.75  VT: 11.33  R: 11.17  RT:  7.49 (  73Kops/s)
+
+commit 2beabd9fed76de0023eb36b0c938b8803aa8d129
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Thu May 10 16:15:34 2012 -0400
+
+    configure.ac: make -march=loongson2f come before CFLAGS
+    
+    Otherwise we'd have -march=loongson2f being overridden by automake's
+    CFLAGS ordering which causes build failures when -march=<not loongson2f>
+    is specified by the user.
+
+commit dadb9a318b8ca10c65e31e7278f4335a6968d246
+Author: Søren Sandmann Pedersen <ssp@redhat.com>
+Date:   Tue May 8 10:05:18 2012 -0400
+
+    Add Makefile.win32 and Makefile.win32.common to EXTRA_DIST
+    
+    https://bugs.freedesktop.org/show_bug.cgi?id=46905
+
+commit 3c57ec471e1aacc863747b82bbe0a84c6d776ab7
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Wed May 9 22:50:50 2012 -0400
+
+    .gitignore: add demos/checkerboard and demos/quad2quad
+
+commit 2d431b53d3cdbf1997e2d3b8e17408c12220c3a1
+Author: Matt Turner <mattst88@gmail.com>
+Date:   Fri Apr 27 14:12:56 2012 -0400
+
+    mmx: Use wpackhus in src_x888_0565 on iwMMXt
+    
+    iwMMXt which has an unsigned saturation pack instruction, while MMX/EXT
+    and Loongson don't.
+    
+    ARM/iwMMXt:
+    src_8888_0565 =  L1: 110.38  L2:  82.33  M: 40.92 ( 73.22%)  HT: 35.63  VT: 32.22  R: 30.07  RT: 18.40 ( 132Kops/s)
+    src_8888_0565 =  L1: 117.91  L2:  83.05  M: 41.52 ( 75.58%)  HT: 37.63  VT: 35.40  R: 29.37  RT: 19.39 ( 134Kops/s)
+
+commit 2ddd1c498b723e8e48a38eef01d5befba30b5259


Reply to: