From: Måns Rullgård Date: Sat, 27 Dec 2008 16:25:36 +0000 (+0000) Subject: simple_idct: use MUL16 and MAC16 from mathops.h X-Git-Tag: v0.5~1427 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=edf7c2b26fde4719ed761f733afe977be31da674;p=coroid%2Fffmpeg_saccubus.git simple_idct: use MUL16 and MAC16 from mathops.h Originally committed as revision 16362 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/simple_idct.c b/libavcodec/simple_idct.c index 2f8edf83e..2cf9e8de9 100644 --- a/libavcodec/simple_idct.c +++ b/libavcodec/simple_idct.c @@ -31,6 +31,7 @@ */ #include "avcodec.h" #include "dsputil.h" +#include "mathops.h" #include "simple_idct.h" #if 0 @@ -55,26 +56,6 @@ #define COL_SHIFT 20 // 6 #endif -#if defined(ARCH_PPC_405) - -/* signed 16x16 -> 32 multiply add accumulate */ -#define MAC16(rt, ra, rb) \ - __asm__ ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb)); - -/* signed 16x16 -> 32 multiply */ -#define MUL16(rt, ra, rb) \ - __asm__ ("mullhw %0, %1, %2" : "=r" (rt) : "r" (ra), "r" (rb)); - -#else - -/* signed 16x16 -> 32 multiply add accumulate */ -#define MAC16(rt, ra, rb) rt += (ra) * (rb) - -/* signed 16x16 -> 32 multiply */ -#define MUL16(rt, ra, rb) rt = (ra) * (rb) - -#endif - static inline void idctRowCondDC (DCTELEM * row) { int a0, a1, a2, a3, b0, b1, b2, b3; @@ -137,13 +118,13 @@ static inline void idctRowCondDC (DCTELEM * row) a2 -= W6 * row[2]; a3 -= W2 * row[2]; - MUL16(b0, W1, row[1]); + b0 = MUL16(W1, row[1]); MAC16(b0, W3, row[3]); - MUL16(b1, W3, row[1]); + b1 = MUL16(W3, row[1]); MAC16(b1, -W7, row[3]); - MUL16(b2, W5, row[1]); + b2 = MUL16(W5, row[1]); MAC16(b2, -W1, row[3]); - MUL16(b3, W7, row[1]); + b3 = MUL16(W7, row[1]); MAC16(b3, -W5, row[3]); #ifdef HAVE_FAST_64BIT @@ -197,10 +178,10 @@ static inline void idctSparseColPut (uint8_t *dest, int line_size, a2 += - W6*col[8*2]; a3 += - W2*col[8*2]; - MUL16(b0, W1, col[8*1]); - MUL16(b1, W3, col[8*1]); - MUL16(b2, W5, col[8*1]); - MUL16(b3, W7, col[8*1]); + b0 = MUL16(W1, col[8*1]); + b1 = MUL16(W3, col[8*1]); + b2 = MUL16(W5, col[8*1]); + b3 = MUL16(W7, col[8*1]); MAC16(b0, + W3, col[8*3]); MAC16(b1, - W7, col[8*3]); @@ -269,10 +250,10 @@ static inline void idctSparseColAdd (uint8_t *dest, int line_size, a2 += - W6*col[8*2]; a3 += - W2*col[8*2]; - MUL16(b0, W1, col[8*1]); - MUL16(b1, W3, col[8*1]); - MUL16(b2, W5, col[8*1]); - MUL16(b3, W7, col[8*1]); + b0 = MUL16(W1, col[8*1]); + b1 = MUL16(W3, col[8*1]); + b2 = MUL16(W5, col[8*1]); + b3 = MUL16(W7, col[8*1]); MAC16(b0, + W3, col[8*3]); MAC16(b1, - W7, col[8*3]); @@ -339,10 +320,10 @@ static inline void idctSparseCol (DCTELEM * col) a2 += - W6*col[8*2]; a3 += - W2*col[8*2]; - MUL16(b0, W1, col[8*1]); - MUL16(b1, W3, col[8*1]); - MUL16(b2, W5, col[8*1]); - MUL16(b3, W7, col[8*1]); + b0 = MUL16(W1, col[8*1]); + b1 = MUL16(W3, col[8*1]); + b2 = MUL16(W5, col[8*1]); + b3 = MUL16(W7, col[8*1]); MAC16(b0, + W3, col[8*3]); MAC16(b1, - W7, col[8*3]);