diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2003-01-16 21:54:55 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2003-01-16 21:54:55 +0000 |
commit | db40a39aba6a22729279ac8915b52b182473f209 (patch) | |
tree | bd67103c33705c172f5cac6838edc4899a1bfc80 /libavcodec/ppc/mpegvideo_altivec.c | |
parent | f44a2df04fb553ef076594daca3ed4ccab315123 (diff) | |
download | ffmpeg-db40a39aba6a22729279ac8915b52b182473f209.tar.gz |
AltiVec perf (take 2), plus a couple AltiVec functions by (Romain Dolbeau <dolbeau at irisa dot fr>)
Originally committed as revision 1464 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ppc/mpegvideo_altivec.c')
-rw-r--r-- | libavcodec/ppc/mpegvideo_altivec.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/libavcodec/ppc/mpegvideo_altivec.c b/libavcodec/ppc/mpegvideo_altivec.c index a63df307c0..dfa4c0229a 100644 --- a/libavcodec/ppc/mpegvideo_altivec.c +++ b/libavcodec/ppc/mpegvideo_altivec.c @@ -20,6 +20,7 @@ #include <stdio.h> #include "../dsputil.h" #include "../mpegvideo.h" +#include "dsputil_altivec.h" // Swaps two variables (used for altivec registers) #define SWAP(a,b) \ @@ -510,10 +511,13 @@ int dct_quantize_altivec(MpegEncContext* s, void dct_unquantize_h263_altivec(MpegEncContext *s, DCTELEM *block, int n, int qscale) { +ALTIVEC_TBL_DECLARE(altivec_dct_unquantize_h263_num, 1); int i, level, qmul, qadd; int nCoeffs; assert(s->block_last_index[n]>=0); + +ALTIVEC_TBL_START_COUNT(altivec_dct_unquantize_h263_num, 1); qadd = (qscale - 1) | 1; qmul = qscale << 1; @@ -533,7 +537,7 @@ void dct_unquantize_h263_altivec(MpegEncContext *s, nCoeffs= s->intra_scantable.raster_end[ s->block_last_index[n] ]; } -#if 0 +#ifdef ALTIVEC_USE_REFERENCE_C_CODE for(;i<=nCoeffs;i++) { level = block[i]; if (level) { @@ -545,7 +549,7 @@ void dct_unquantize_h263_altivec(MpegEncContext *s, block[i] = level; } } -#else +#else /* ALTIVEC_USE_REFERENCE_C_CODE */ { register const vector short vczero = (const vector short)(0); short __attribute__ ((aligned(16))) qmul8[] = @@ -572,6 +576,7 @@ void dct_unquantize_h263_altivec(MpegEncContext *s, qaddv = vec_ld(0, qadd8); nqaddv = vec_ld(0, nqadd8); +#if 0 // block *is* 16 bytes-aligned, it seems. // first make sure block[j] is 16 bytes-aligned for(j = 0; (j <= nCoeffs) && ((((unsigned long)block) + (j << 1)) & 0x0000000F) ; j++) { level = block[j]; @@ -584,6 +589,7 @@ void dct_unquantize_h263_altivec(MpegEncContext *s, block[j] = level; } } +#endif // vectorize all the 16 bytes-aligned blocks // of 8 elements @@ -622,5 +628,7 @@ void dct_unquantize_h263_altivec(MpegEncContext *s, block[0] = backup_0; } } -#endif +#endif /* ALTIVEC_USE_REFERENCE_C_CODE */ + +ALTIVEC_TBL_STOP_COUNT(altivec_dct_unquantize_h263_num, nCoeffs == 63); } |