diff --git a/.gitignore b/.gitignore index 84cf409..d6990fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/pixman-0.32.4.tar.bz2 +SOURCES/pixman-0.32.6.tar.bz2 diff --git a/.pixman.metadata b/.pixman.metadata index bdb9e74..114e9ff 100644 --- a/.pixman.metadata +++ b/.pixman.metadata @@ -1 +1 @@ -e2708db16595412e5aaf21a66b6f18b7223eb6c3 SOURCES/pixman-0.32.4.tar.bz2 +5b730399e1e212e5acaa69a4f1a2c7be1af1cdc4 SOURCES/pixman-0.32.6.tar.bz2 diff --git a/SOURCES/0001-vmx-fix-splat_alpha-for-ppc64le.patch b/SOURCES/0001-vmx-fix-splat_alpha-for-ppc64le.patch new file mode 100644 index 0000000..27dad23 --- /dev/null +++ b/SOURCES/0001-vmx-fix-splat_alpha-for-ppc64le.patch @@ -0,0 +1,45 @@ +From b3a61703f41c6b34ba2ec9736030e1df04f53ab4 Mon Sep 17 00:00:00 2001 +From: Oded Gabbay +Date: Thu, 25 Jun 2015 15:59:53 +0300 +Subject: [PATCH 1/5] vmx: fix splat_alpha for ppc64le + +The permutation vector isn't correct for LE, so correct its values +in case we are in LE mode. + +v2: + +- replace _LITTLE_ENDIAN with WORDS_BIGENDIAN for consistency +- change #ifndef to #ifdef for readability + +Signed-off-by: Oded Gabbay +Reviewed-by: Adam Jackson +Acked-by: Pekka Paalanen +--- + pixman/pixman-vmx.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c +index c33631c..d0a4fc8 100644 +--- a/pixman/pixman-vmx.c ++++ b/pixman/pixman-vmx.c +@@ -37,10 +37,17 @@ + static force_inline vector unsigned int + splat_alpha (vector unsigned int pix) + { ++#ifdef WORDS_BIGENDIAN + return vec_perm (pix, pix, + (vector unsigned char)AVV ( + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x08, 0x08, 0x08, 0x08, 0x0C, 0x0C, 0x0C, 0x0C)); ++#else ++ return vec_perm (pix, pix, ++ (vector unsigned char)AVV ( ++ 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, ++ 0x0B, 0x0B, 0x0B, 0x0B, 0x0F, 0x0F, 0x0F, 0x0F)); ++#endif + } + + static force_inline vector unsigned int +-- +2.4.3 + diff --git a/SOURCES/0002-vmx-adjust-macros-when-loading-vectors-on-ppc64le.patch b/SOURCES/0002-vmx-adjust-macros-when-loading-vectors-on-ppc64le.patch new file mode 100644 index 0000000..1b69644 --- /dev/null +++ b/SOURCES/0002-vmx-adjust-macros-when-loading-vectors-on-ppc64le.patch @@ -0,0 +1,71 @@ +From f6a26d09257dde9cd41144120543c8b754de515f Mon Sep 17 00:00:00 2001 +From: Fernando Seiti Furusato +Date: Thu, 25 Jun 2015 15:59:54 +0300 +Subject: [PATCH 2/5] vmx: adjust macros when loading vectors on ppc64le + +Replaced usage of vec_lvsl to direct unaligned assignment +operation (=). That is because, according to Power ABI Specification, +the usage of lvsl is deprecated on ppc64le. + +Changed COMPUTE_SHIFT_{MASK,MASKS,MASKC} macro usage to no-op for powerpc +little endian since unaligned access is supported on ppc64le. + +v2: + +- replace _LITTLE_ENDIAN with WORDS_BIGENDIAN for consistency +- fixed whitespaces and indentation issues + +Signed-off-by: Fernando Seiti Furusato +Reviewed-by: Adam Jackson +Signed-off-by: Oded Gabbay +Acked-by: Pekka Paalanen +--- + pixman/pixman-vmx.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c +index d0a4fc8..e33d9d9 100644 +--- a/pixman/pixman-vmx.c ++++ b/pixman/pixman-vmx.c +@@ -136,6 +136,7 @@ over (vector unsigned int src, + over (pix_multiply (src, mask), \ + pix_multiply (srca, mask), dest) + ++#ifdef WORDS_BIGENDIAN + + #define COMPUTE_SHIFT_MASK(source) \ + source ## _mask = vec_lvsl (0, source); +@@ -169,6 +170,30 @@ over (vector unsigned int src, + v ## mask = (typeof(v ## mask)) \ + vec_perm (tmp1, tmp2, mask ## _mask); + ++#else ++ ++/* Now the COMPUTE_SHIFT_{MASK, MASKS, MASKC} below are just no-op. ++ * They are defined that way because little endian altivec can do unaligned ++ * reads natively and have no need for constructing the permutation pattern ++ * variables. ++ */ ++#define COMPUTE_SHIFT_MASK(source) ++ ++#define COMPUTE_SHIFT_MASKS(dest, source) ++ ++#define COMPUTE_SHIFT_MASKC(dest, source, mask) ++ ++# define LOAD_VECTORS(dest, source) \ ++ v ## source = *((typeof(v ## source)*)source); \ ++ v ## dest = *((typeof(v ## dest)*)dest); ++ ++# define LOAD_VECTORSC(dest, source, mask) \ ++ v ## source = *((typeof(v ## source)*)source); \ ++ v ## dest = *((typeof(v ## dest)*)dest); \ ++ v ## mask = *((typeof(v ## mask)*)mask); ++ ++#endif /* WORDS_BIGENDIAN */ ++ + #define LOAD_VECTORSM(dest, source, mask) \ + LOAD_VECTORSC (dest, source, mask) \ + v ## source = pix_multiply (v ## source, \ +-- +2.4.3 + diff --git a/SOURCES/0003-vmx-encapsulate-the-temporary-variables-inside-the-m.patch b/SOURCES/0003-vmx-encapsulate-the-temporary-variables-inside-the-m.patch new file mode 100644 index 0000000..d57d47c --- /dev/null +++ b/SOURCES/0003-vmx-encapsulate-the-temporary-variables-inside-the-m.patch @@ -0,0 +1,331 @@ +From ff66a4a3ce95f2adcbf30b354eac60944596d6a2 Mon Sep 17 00:00:00 2001 +From: Oded Gabbay +Date: Thu, 25 Jun 2015 15:59:55 +0300 +Subject: [PATCH 3/5] vmx: encapsulate the temporary variables inside the + macros + +v2: fixed whitespaces and indentation issues + +Signed-off-by: Oded Gabbay +Reviewed-by: Adam Jackson +Acked-by: Pekka Paalanen +--- + pixman/pixman-vmx.c | 72 +++++++++++++++++++++++++++++------------------------ + 1 file changed, 39 insertions(+), 33 deletions(-) + +diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c +index e33d9d9..f28a0fd 100644 +--- a/pixman/pixman-vmx.c ++++ b/pixman/pixman-vmx.c +@@ -153,13 +153,18 @@ over (vector unsigned int src, + */ + + #define LOAD_VECTORS(dest, source) \ ++do { \ ++ vector unsigned char tmp1, tmp2; \ + tmp1 = (typeof(tmp1))vec_ld (0, source); \ + tmp2 = (typeof(tmp2))vec_ld (15, source); \ + v ## source = (typeof(v ## source)) \ + vec_perm (tmp1, tmp2, source ## _mask); \ +- v ## dest = (typeof(v ## dest))vec_ld (0, dest); ++ v ## dest = (typeof(v ## dest))vec_ld (0, dest); \ ++} while (0); + + #define LOAD_VECTORSC(dest, source, mask) \ ++do { \ ++ vector unsigned char tmp1, tmp2; \ + tmp1 = (typeof(tmp1))vec_ld (0, source); \ + tmp2 = (typeof(tmp2))vec_ld (15, source); \ + v ## source = (typeof(v ## source)) \ +@@ -168,7 +173,8 @@ over (vector unsigned int src, + v ## dest = (typeof(v ## dest))vec_ld (0, dest); \ + tmp2 = (typeof(tmp2))vec_ld (15, mask); \ + v ## mask = (typeof(v ## mask)) \ +- vec_perm (tmp1, tmp2, mask ## _mask); ++ vec_perm (tmp1, tmp2, mask ## _mask); \ ++} while (0); + + #else + +@@ -209,7 +215,7 @@ vmx_combine_over_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -259,7 +265,7 @@ vmx_combine_over_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -330,7 +336,7 @@ vmx_combine_over_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -378,7 +384,7 @@ vmx_combine_over_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -446,7 +452,7 @@ vmx_combine_in_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -491,7 +497,7 @@ vmx_combine_in_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -556,7 +562,7 @@ vmx_combine_in_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -603,7 +609,7 @@ vmx_combine_in_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -670,7 +676,7 @@ vmx_combine_out_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -717,7 +723,7 @@ vmx_combine_out_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -782,7 +788,7 @@ vmx_combine_out_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -830,7 +836,7 @@ vmx_combine_out_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -897,7 +903,7 @@ vmx_combine_atop_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -949,7 +955,7 @@ vmx_combine_atop_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1025,7 +1031,7 @@ vmx_combine_atop_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1077,7 +1083,7 @@ vmx_combine_atop_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1153,7 +1159,7 @@ vmx_combine_xor_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1205,7 +1211,7 @@ vmx_combine_xor_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1281,7 +1287,7 @@ vmx_combine_add_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char tmp1, tmp2, src_mask; ++ vector unsigned char src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1327,7 +1333,7 @@ vmx_combine_add_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, src_mask, mask_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1395,7 +1401,7 @@ vmx_combine_src_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1445,7 +1451,7 @@ vmx_combine_over_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1503,7 +1509,7 @@ vmx_combine_over_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1559,7 +1565,7 @@ vmx_combine_in_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char src_mask, mask_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1613,7 +1619,7 @@ vmx_combine_in_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1668,7 +1674,7 @@ vmx_combine_out_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1725,7 +1731,7 @@ vmx_combine_out_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1782,7 +1788,7 @@ vmx_combine_atop_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask, vsrca; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1848,7 +1854,7 @@ vmx_combine_atop_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1911,7 +1917,7 @@ vmx_combine_xor_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1974,7 +1980,7 @@ vmx_combine_add_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char tmp1, tmp2, mask_mask, src_mask; ++ vector unsigned char mask_mask, src_mask; + + while (width && ((uintptr_t)dest & 15)) + { +-- +2.4.3 + diff --git a/SOURCES/0004-vmx-fix-unused-var-warnings.patch b/SOURCES/0004-vmx-fix-unused-var-warnings.patch new file mode 100644 index 0000000..62251bf --- /dev/null +++ b/SOURCES/0004-vmx-fix-unused-var-warnings.patch @@ -0,0 +1,342 @@ +From 8d379ad88e208bed9697065f6911c9ef83d85276 Mon Sep 17 00:00:00 2001 +From: Oded Gabbay +Date: Thu, 25 Jun 2015 15:59:56 +0300 +Subject: [PATCH 4/5] vmx: fix unused var warnings + +v2: don't put ';' at the end of macro definition. Instead, move it to + each line the macro is used. + +Signed-off-by: Oded Gabbay +Reviewed-by: Adam Jackson +Acked-by: Pekka Paalanen +--- + pixman/pixman-vmx.c | 89 ++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 58 insertions(+), 31 deletions(-) + +diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c +index f28a0fd..c963c28 100644 +--- a/pixman/pixman-vmx.c ++++ b/pixman/pixman-vmx.c +@@ -176,6 +176,9 @@ do { \ + vec_perm (tmp1, tmp2, mask ## _mask); \ + } while (0); + ++#define DECLARE_SRC_MASK_VAR vector unsigned char src_mask ++#define DECLARE_MASK_MASK_VAR vector unsigned char mask_mask ++ + #else + + /* Now the COMPUTE_SHIFT_{MASK, MASKS, MASKC} below are just no-op. +@@ -198,6 +201,9 @@ do { \ + v ## dest = *((typeof(v ## dest)*)dest); \ + v ## mask = *((typeof(v ## mask)*)mask); + ++#define DECLARE_SRC_MASK_VAR ++#define DECLARE_MASK_MASK_VAR ++ + #endif /* WORDS_BIGENDIAN */ + + #define LOAD_VECTORSM(dest, source, mask) \ +@@ -215,7 +221,7 @@ vmx_combine_over_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -265,7 +271,8 @@ vmx_combine_over_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -336,7 +343,7 @@ vmx_combine_over_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -384,7 +391,8 @@ vmx_combine_over_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -452,7 +460,7 @@ vmx_combine_in_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -497,7 +505,8 @@ vmx_combine_in_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -562,7 +571,7 @@ vmx_combine_in_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -609,7 +618,8 @@ vmx_combine_in_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -676,7 +686,7 @@ vmx_combine_out_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -723,7 +733,8 @@ vmx_combine_out_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -788,7 +799,7 @@ vmx_combine_out_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -836,7 +847,8 @@ vmx_combine_out_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -903,7 +915,7 @@ vmx_combine_atop_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -955,7 +967,8 @@ vmx_combine_atop_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1031,7 +1044,7 @@ vmx_combine_atop_reverse_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1083,7 +1096,8 @@ vmx_combine_atop_reverse_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1159,7 +1173,7 @@ vmx_combine_xor_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1211,7 +1225,8 @@ vmx_combine_xor_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1287,7 +1302,7 @@ vmx_combine_add_u_no_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc; +- vector unsigned char src_mask; ++ DECLARE_SRC_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1333,7 +1348,8 @@ vmx_combine_add_u_mask (uint32_t * dest, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1401,7 +1417,8 @@ vmx_combine_src_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1451,7 +1468,8 @@ vmx_combine_over_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1509,7 +1527,8 @@ vmx_combine_over_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1565,7 +1584,8 @@ vmx_combine_in_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char src_mask, mask_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1619,7 +1639,8 @@ vmx_combine_in_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1674,7 +1695,8 @@ vmx_combine_out_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1731,7 +1753,8 @@ vmx_combine_out_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1788,7 +1811,8 @@ vmx_combine_atop_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask, vsrca; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1854,7 +1878,8 @@ vmx_combine_atop_reverse_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1917,7 +1942,8 @@ vmx_combine_xor_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +@@ -1980,7 +2006,8 @@ vmx_combine_add_ca (pixman_implementation_t *imp, + { + int i; + vector unsigned int vdest, vsrc, vmask; +- vector unsigned char mask_mask, src_mask; ++ DECLARE_SRC_MASK_VAR; ++ DECLARE_MASK_MASK_VAR; + + while (width && ((uintptr_t)dest & 15)) + { +-- +2.4.3 + diff --git a/SOURCES/0005-vmx-fix-pix_multiply-for-ppc64le.patch b/SOURCES/0005-vmx-fix-pix_multiply-for-ppc64le.patch new file mode 100644 index 0000000..48663b4 --- /dev/null +++ b/SOURCES/0005-vmx-fix-pix_multiply-for-ppc64le.patch @@ -0,0 +1,75 @@ +From 2be523b20402b7c9f548ac33b8c0f0ed00156c64 Mon Sep 17 00:00:00 2001 +From: Oded Gabbay +Date: Thu, 25 Jun 2015 15:59:57 +0300 +Subject: [PATCH 5/5] vmx: fix pix_multiply for ppc64le + +vec_mergeh/l operates differently for BE and LE, because of the order of +the vector elements (l->r in BE and r->l in LE). +To fix that, we simply need to swap between the input parameters, in case +we are working in LE. + +v2: + +- replace _LITTLE_ENDIAN with WORDS_BIGENDIAN for consistency +- fixed whitespaces and indentation issues + +Signed-off-by: Oded Gabbay +Reviewed-by: Adam Jackson +Acked-by: Pekka Paalanen +--- + pixman/pixman-vmx.c | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c +index c963c28..cef921f 100644 +--- a/pixman/pixman-vmx.c ++++ b/pixman/pixman-vmx.c +@@ -57,12 +57,22 @@ pix_multiply (vector unsigned int p, vector unsigned int a) + + /* unpack to short */ + hi = (vector unsigned short) ++#ifdef WORDS_BIGENDIAN + vec_mergeh ((vector unsigned char)AVV (0), + (vector unsigned char)p); ++#else ++ vec_mergeh ((vector unsigned char) p, ++ (vector unsigned char) AVV (0)); ++#endif + + mod = (vector unsigned short) ++#ifdef WORDS_BIGENDIAN + vec_mergeh ((vector unsigned char)AVV (0), + (vector unsigned char)a); ++#else ++ vec_mergeh ((vector unsigned char) a, ++ (vector unsigned char) AVV (0)); ++#endif + + hi = vec_mladd (hi, mod, (vector unsigned short) + AVV (0x0080, 0x0080, 0x0080, 0x0080, +@@ -74,11 +84,22 @@ pix_multiply (vector unsigned int p, vector unsigned int a) + + /* unpack to short */ + lo = (vector unsigned short) ++#ifdef WORDS_BIGENDIAN + vec_mergel ((vector unsigned char)AVV (0), + (vector unsigned char)p); ++#else ++ vec_mergel ((vector unsigned char) p, ++ (vector unsigned char) AVV (0)); ++#endif ++ + mod = (vector unsigned short) ++#ifdef WORDS_BIGENDIAN + vec_mergel ((vector unsigned char)AVV (0), + (vector unsigned char)a); ++#else ++ vec_mergel ((vector unsigned char) a, ++ (vector unsigned char) AVV (0)); ++#endif + + lo = vec_mladd (lo, mod, (vector unsigned short) + AVV (0x0080, 0x0080, 0x0080, 0x0080, +-- +2.4.3 + diff --git a/SPECS/pixman.spec b/SPECS/pixman.spec index eb9fe3b..cc24fe1 100644 --- a/SPECS/pixman.spec +++ b/SPECS/pixman.spec @@ -2,7 +2,7 @@ %define gitrev 8ff7213f39edc1b2b8b60d6b0cc5d5f14ca1928d Name: pixman -Version: 0.32.4 +Version: 0.32.6 Release: 3%{?dist} Summary: Pixel manipulation library @@ -16,6 +16,12 @@ URL: http://cgit.freedesktop.org/pixman/ Source0: http://xorg.freedesktop.org/archive/individual/lib/%{name}-%{version}.tar.bz2 Source1: make-pixman-snapshot.sh +Patch0: 0001-vmx-fix-splat_alpha-for-ppc64le.patch +Patch1: 0002-vmx-adjust-macros-when-loading-vectors-on-ppc64le.patch +Patch2: 0003-vmx-encapsulate-the-temporary-variables-inside-the-m.patch +Patch3: 0004-vmx-fix-unused-var-warnings.patch +Patch4: 0005-vmx-fix-pix_multiply-for-ppc64le.patch + BuildRequires: automake autoconf libtool pkgconfig %description @@ -24,7 +30,7 @@ Pixman is a pixel manipulation library for X and cairo. %package devel Summary: Pixel manipulation library development package Group: Development/Libraries -Requires: %{name} = %{version}-%{release} +Requires: %{name}%{?isa} = %{version}-%{release} Requires: pkgconfig %description devel @@ -32,6 +38,11 @@ Development library for pixman. %prep %setup -q +%patch0 -p1 -b .splat +%patch1 -p1 -b .macros +%patch2 -p1 -b .tmpvars +%patch3 -p1 -b .warnings +%patch4 -p1 -b .pix_mul %build %configure \ @@ -62,6 +73,18 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.la %{_libdir}/pkgconfig/pixman-1.pc %changelog +* Thu Jul 02 2015 Oded Gabbay - 0.32.6-3 +- Re-enable VMX fast paths on ppc64le and apply patches that fix them + +* Mon May 11 2015 Adam Jackson 0.32.6-2 +- Fix devel's requirement on the base package to include %%{?isa} + +* Tue Mar 17 2015 Adam Jackson 0.32.6-1 +- pixman 0.32.6 + +* Fri Nov 07 2014 Adam Jackson 0.32.4-4 +- Disable (broken) VMX fast paths on ppc64le for now + * Fri Jan 24 2014 Daniel Mach - 0.32.4-3 - Mass rebuild 2014-01-24