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