Mercurial > libavcodec.hg
diff ppc/mpegvideo_altivec.c @ 10079:71ead14665e3 libavcodec
PPC: simplify loading some values into altivec registers
Instead of filling a local array with the desired value and loading it,
load a single element and vec_splat() it to fill the vector.
author | mru |
---|---|
date | Mon, 24 Aug 2009 10:36:13 +0000 |
parents | dd2b5e52336a |
children | 98970e51365a |
line wrap: on
line diff
--- a/ppc/mpegvideo_altivec.c Mon Aug 24 10:06:26 2009 +0000 +++ b/ppc/mpegvideo_altivec.c Mon Aug 24 10:36:13 2009 +0000 @@ -28,6 +28,8 @@ #include "dsputil_ppc.h" #include "util_altivec.h" +#include "types_altivec.h" + // Swaps two variables (used for altivec registers) #define SWAP(a,b) \ do { \ @@ -504,29 +506,16 @@ { register const vector signed short vczero = (const vector signed short)vec_splat_s16(0); - DECLARE_ALIGNED_16(short, qmul8[]) = - { - qmul, qmul, qmul, qmul, - qmul, qmul, qmul, qmul - }; - DECLARE_ALIGNED_16(short, qadd8[]) = - { - qadd, qadd, qadd, qadd, - qadd, qadd, qadd, qadd - }; - DECLARE_ALIGNED_16(short, nqadd8[]) = - { - -qadd, -qadd, -qadd, -qadd, - -qadd, -qadd, -qadd, -qadd - }; + DECLARE_ALIGNED_16(short, qmul8) = qmul; + DECLARE_ALIGNED_16(short, qadd8) = qadd; register vector signed short blockv, qmulv, qaddv, nqaddv, temp1; register vector bool short blockv_null, blockv_neg; register short backup_0 = block[0]; register int j = 0; - qmulv = vec_ld(0, qmul8); - qaddv = vec_ld(0, qadd8); - nqaddv = vec_ld(0, nqadd8); + qmulv = vec_splat((vec_s16)vec_lde(0, &qmul8), 0); + qaddv = vec_splat((vec_s16)vec_lde(0, &qadd8), 0); + nqaddv = vec_sub(vczero, qaddv); #if 0 // block *is* 16 bytes-aligned, it seems. // first make sure block[j] is 16 bytes-aligned