]> granicus.if.org Git - libx264/commitdiff
ppc: Fix hadamard for little-endian
authorLuca Barbato <lu_zero@gentoo.org>
Tue, 1 Nov 2016 22:16:18 +0000 (23:16 +0100)
committerHenrik Gramner <henrik@gramner.com>
Mon, 21 Nov 2016 18:52:24 +0000 (19:52 +0100)
Extending to 16-bit works with flipped bytes.

common/ppc/pixel.c

index 5ace7255b871d9a29574c3a023df9f09d2235942..baebb53586c5ca680fb8c9c114618e551163b507 100644 (file)
@@ -1812,9 +1812,15 @@ static int pixel_sa8d_16x16_altivec( uint8_t *pix1, intptr_t i_pix1,
     d3 = vec_sub(t1, t3);                           \
 }
 
+#ifdef WORDS_BIGENDIAN
+#define vec_perm_extend_s16(val, perm) (vec_s16_t)vec_perm(val, zero_u8v, perm)
+#else
+#define vec_perm_extend_s16(val, perm) (vec_s16_t)vec_perm(zero_u8v, val, perm)
+#endif
+
 #define VEC_LOAD_HIGH( p, num )                                    \
     vec_u8_t pix8_##num = vec_ld( stride*num, p );                 \
-    vec_s16_t pix16_s##num = (vec_s16_t)vec_perm(pix8_##num, zero_u8v, perm); \
+    vec_s16_t pix16_s##num = vec_perm_extend_s16( pix8_##num, perm ); \
     vec_s16_t pix16_d##num;
 
 static uint64_t pixel_hadamard_ac_altivec( uint8_t *pix, intptr_t stride, const vec_u8_t perm )