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 <oded.gabbay@gmail.com>
+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 <oded.gabbay@gmail.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
+---
+ 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 <ferseiti@linux.vnet.ibm.com>
+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 <ferseiti@linux.vnet.ibm.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
+Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
+---
+ 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 <oded.gabbay@gmail.com>
+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 <oded.gabbay@gmail.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
+---
+ 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 <oded.gabbay@gmail.com>
+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 <oded.gabbay@gmail.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
+---
+ 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 <oded.gabbay@gmail.com>
+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 <oded.gabbay@gmail.com>
+Reviewed-by: Adam Jackson <ajax@redhat.com>
+Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
+---
+ 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 <ogabbay@redhat.com> - 0.32.6-3
+- Re-enable VMX fast paths on ppc64le and apply patches that fix them
+
+* Mon May 11 2015 Adam Jackson <ajax@redhat.com> 0.32.6-2
+- Fix devel's requirement on the base package to include %%{?isa}
+
+* Tue Mar 17 2015 Adam Jackson <ajax@redhat.com> 0.32.6-1
+- pixman 0.32.6
+
+* Fri Nov 07 2014 Adam Jackson <ajax@redhat.com> 0.32.4-4
+- Disable (broken) VMX fast paths on ppc64le for now
+
 * Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 0.32.4-3
 - Mass rebuild 2014-01-24