For unaligned loads.

This will be squash-merged with the previous patch.

Signed-off-by: Matt Turner <[email protected]>
---
 pixman/pixman-mmx.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index fe091a2..bd44f63 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -351,6 +351,13 @@ load8888 (const uint32_t *v)
 }
 
 static force_inline __m64
+load8888u (const uint32_t *v)
+{
+    uint32_t l = ldl_u(v);
+    return load8888(&l);
+}
+
+static force_inline __m64
 pack8888 (__m64 lo, __m64 hi)
 {
     return _mm_packs_pu16 (lo, hi);
@@ -2570,7 +2577,7 @@ mmx_composite_in_n_8_8 (pixman_implementation_t *imp,
            __m64 vmask;
            __m64 vdest;
 
-           vmask = load8888 ((uint32_t *)mask);
+           vmask = load8888u ((uint32_t *)mask);
            vdest = load8888 ((uint32_t *)dst);
 
            store8888 ((uint32_t *)dst, in (in (vsrca, vmask), vdest));
@@ -2640,7 +2647,7 @@ mmx_composite_in_8_8 (pixman_implementation_t *imp,
            uint32_t *s = (uint32_t *)src;
            uint32_t *d = (uint32_t *)dst;
 
-           store8888 (d, in (load8888 ((uint32_t *)s), load8888 (d)));
+           store8888 (d, in (load8888u (s), load8888 (d)));
 
            w -= 4;
            dst += 4;
@@ -2721,7 +2728,7 @@ mmx_composite_add_n_8_8 (pixman_implementation_t *imp,
            __m64 vmask;
            __m64 vdest;
 
-           vmask = load8888 ((uint32_t *)mask);
+           vmask = load8888u ((uint32_t *)mask);
            vdest = load8888 ((uint32_t *)dst);
 
            store8888 ((uint32_t *)dst, _mm_adds_pu8 (in (vsrca, vmask), 
vdest));
-- 
1.7.3.4

_______________________________________________
Pixman mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to