summaryrefslogtreecommitdiff
path: root/libavcodec/ppc/mpegvideo_altivec.c
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2009-08-24 10:36:13 +0000
committerMåns Rullgård <mans@mansr.com>2009-08-24 10:36:13 +0000
commitb662e8395b81ee58e8e9b293904314f8918c8fae (patch)
tree9ba997466ee49928c14812e6e3d6bf2f8570d11d /libavcodec/ppc/mpegvideo_altivec.c
parent1feec476aa1afa25cdeaef358821f70d7648820f (diff)
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. Originally committed as revision 19691 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ppc/mpegvideo_altivec.c')
-rw-r--r--libavcodec/ppc/mpegvideo_altivec.c25
1 files changed, 7 insertions, 18 deletions
diff --git a/libavcodec/ppc/mpegvideo_altivec.c b/libavcodec/ppc/mpegvideo_altivec.c
index 74775f05fd..8348e684bd 100644
--- a/libavcodec/ppc/mpegvideo_altivec.c
+++ b/libavcodec/ppc/mpegvideo_altivec.c
@@ -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 @@ POWERPC_PERF_START_COUNT(altivec_dct_unquantize_h263_num, 1);
{
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