|
|
02abd8 |
From 2be523b20402b7c9f548ac33b8c0f0ed00156c64 Mon Sep 17 00:00:00 2001
|
|
|
02abd8 |
From: Oded Gabbay <oded.gabbay@gmail.com>
|
|
|
02abd8 |
Date: Thu, 25 Jun 2015 15:59:57 +0300
|
|
|
02abd8 |
Subject: [PATCH 5/5] vmx: fix pix_multiply for ppc64le
|
|
|
02abd8 |
|
|
|
02abd8 |
vec_mergeh/l operates differently for BE and LE, because of the order of
|
|
|
02abd8 |
the vector elements (l->r in BE and r->l in LE).
|
|
|
02abd8 |
To fix that, we simply need to swap between the input parameters, in case
|
|
|
02abd8 |
we are working in LE.
|
|
|
02abd8 |
|
|
|
02abd8 |
v2:
|
|
|
02abd8 |
|
|
|
02abd8 |
- replace _LITTLE_ENDIAN with WORDS_BIGENDIAN for consistency
|
|
|
02abd8 |
- fixed whitespaces and indentation issues
|
|
|
02abd8 |
|
|
|
02abd8 |
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
|
|
|
02abd8 |
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
|
|
02abd8 |
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
|
|
|
02abd8 |
---
|
|
|
02abd8 |
pixman/pixman-vmx.c | 21 +++++++++++++++++++++
|
|
|
02abd8 |
1 file changed, 21 insertions(+)
|
|
|
02abd8 |
|
|
|
02abd8 |
diff --git a/pixman/pixman-vmx.c b/pixman/pixman-vmx.c
|
|
|
02abd8 |
index c963c28..cef921f 100644
|
|
|
02abd8 |
--- a/pixman/pixman-vmx.c
|
|
|
02abd8 |
+++ b/pixman/pixman-vmx.c
|
|
|
02abd8 |
@@ -57,12 +57,22 @@ pix_multiply (vector unsigned int p, vector unsigned int a)
|
|
|
02abd8 |
|
|
|
02abd8 |
/* unpack to short */
|
|
|
02abd8 |
hi = (vector unsigned short)
|
|
|
02abd8 |
+#ifdef WORDS_BIGENDIAN
|
|
|
02abd8 |
vec_mergeh ((vector unsigned char)AVV (0),
|
|
|
02abd8 |
(vector unsigned char)p);
|
|
|
02abd8 |
+#else
|
|
|
02abd8 |
+ vec_mergeh ((vector unsigned char) p,
|
|
|
02abd8 |
+ (vector unsigned char) AVV (0));
|
|
|
02abd8 |
+#endif
|
|
|
02abd8 |
|
|
|
02abd8 |
mod = (vector unsigned short)
|
|
|
02abd8 |
+#ifdef WORDS_BIGENDIAN
|
|
|
02abd8 |
vec_mergeh ((vector unsigned char)AVV (0),
|
|
|
02abd8 |
(vector unsigned char)a);
|
|
|
02abd8 |
+#else
|
|
|
02abd8 |
+ vec_mergeh ((vector unsigned char) a,
|
|
|
02abd8 |
+ (vector unsigned char) AVV (0));
|
|
|
02abd8 |
+#endif
|
|
|
02abd8 |
|
|
|
02abd8 |
hi = vec_mladd (hi, mod, (vector unsigned short)
|
|
|
02abd8 |
AVV (0x0080, 0x0080, 0x0080, 0x0080,
|
|
|
02abd8 |
@@ -74,11 +84,22 @@ pix_multiply (vector unsigned int p, vector unsigned int a)
|
|
|
02abd8 |
|
|
|
02abd8 |
/* unpack to short */
|
|
|
02abd8 |
lo = (vector unsigned short)
|
|
|
02abd8 |
+#ifdef WORDS_BIGENDIAN
|
|
|
02abd8 |
vec_mergel ((vector unsigned char)AVV (0),
|
|
|
02abd8 |
(vector unsigned char)p);
|
|
|
02abd8 |
+#else
|
|
|
02abd8 |
+ vec_mergel ((vector unsigned char) p,
|
|
|
02abd8 |
+ (vector unsigned char) AVV (0));
|
|
|
02abd8 |
+#endif
|
|
|
02abd8 |
+
|
|
|
02abd8 |
mod = (vector unsigned short)
|
|
|
02abd8 |
+#ifdef WORDS_BIGENDIAN
|
|
|
02abd8 |
vec_mergel ((vector unsigned char)AVV (0),
|
|
|
02abd8 |
(vector unsigned char)a);
|
|
|
02abd8 |
+#else
|
|
|
02abd8 |
+ vec_mergel ((vector unsigned char) a,
|
|
|
02abd8 |
+ (vector unsigned char) AVV (0));
|
|
|
02abd8 |
+#endif
|
|
|
02abd8 |
|
|
|
02abd8 |
lo = vec_mladd (lo, mod, (vector unsigned short)
|
|
|
02abd8 |
AVV (0x0080, 0x0080, 0x0080, 0x0080,
|
|
|
02abd8 |
--
|
|
|
02abd8 |
2.4.3
|
|
|
02abd8 |
|