diff options
author | Leon van Stuivenberg <leonvs@iae.nl> | 2002-10-27 09:20:48 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2002-10-27 09:20:48 +0000 |
commit | a09907d988002192311a358ee6c7d5a730f1e02e (patch) | |
tree | 196591d01ae3bf30fcf15a044d927d7dfbf8f742 /libavcodec/ps2 | |
parent | d6db1c9c6a331da88c3eca9b0afa939dbbf24651 (diff) | |
download | ffmpeg-a09907d988002192311a358ee6c7d5a730f1e02e.tar.gz |
dsputil mmi cleanup patch by (Leon van Stuivenberg <leonvs at iae dot nl>)
Originally committed as revision 1076 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ps2')
-rw-r--r-- | libavcodec/ps2/dsputil_mmi.c | 70 |
1 files changed, 28 insertions, 42 deletions
diff --git a/libavcodec/ps2/dsputil_mmi.c b/libavcodec/ps2/dsputil_mmi.c index 3f478c05e1..a6a1b99fa3 100644 --- a/libavcodec/ps2/dsputil_mmi.c +++ b/libavcodec/ps2/dsputil_mmi.c @@ -22,10 +22,6 @@ #include "../dsputil.h" #include "mmi.h" -/* the provided 'as' in binutils 2.9EE doesn't support -the EE's mips3 instructions properly */ -#define AS_BUGGY - static void clear_blocks_mmi(DCTELEM * blocks) { @@ -49,19 +45,15 @@ static void get_pixels_mmi(DCTELEM *block, const UINT8 *pixels, int line_size) { int i; for(i=0;i<8;i++) { -#ifdef AS_BUGGY - ld3(5, 0, 8); - asm volatile( - "add %1, %1, %2 \n\t" - "pextlb $8, $0, $8 \n\t" - "sq $8, 0(%0) \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); -#else asm volatile( + ".set push \n\t" + ".set mips3 \n\t" "ld $8, 0(%1) \n\t" "add %1, %1, %2 \n\t" "pextlb $8, $0, $8 \n\t" - "sq $8, 0(%0) \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); -#endif + "sq $8, 0(%0) \n\t" + ".set pop \n\t" + :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); block += 8; } } @@ -71,20 +63,16 @@ static void put_pixels8_mmi(uint8_t *block, const uint8_t *pixels, int line_size { int i; for(i=0; i<h; i++) { -#ifdef AS_BUGGY - ldr3(5, 0, 8); - ldl3(5, 7, 8); - asm volatile ( "add $5, $5, $6 \n\t" ); - sd3(8, 0, 4); - asm volatile ( "add $4, $4, $6 \n\t" ); -#else asm volatile( + ".set push \n\t" + ".set mips3 \n\t" "ldr $8, 0(%1) \n\t" "ldl $8, 7(%1) \n\t" "add %1, %1, %2 \n\t" "sd $8, 0(%0) \n\t" - "add %0, %0, %2 \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); -#endif + "add %0, %0, %2 \n\t" + ".set pop \n\t" + :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); } } @@ -92,27 +80,25 @@ static void put_pixels8_mmi(uint8_t *block, const uint8_t *pixels, int line_size static void put_pixels16_mmi(uint8_t *block, const uint8_t *pixels, int line_size, int h) { int i; - for(i=0; i<h; i++) { -#ifdef AS_BUGGY - ldr3(5, 0, 8); - ldl3(5, 7, 8); - ldr3(5, 8, 9); - ldl3(5, 15, 9); - asm volatile ( "add $5, $5, $6 \n\t" ); - pcpyld($9, $8, $8); - sq($8, 0, $4); - asm volatile ( "add $4, $4, $6 \n\t" ); -#else + for(i=0; i<(h>>2); i++) { asm volatile ( - "ldr $8, 0(%1) \n\t" - "ldl $8, 7(%1) \n\t" - "ldr $9, 8(%1) \n\t" - "ldl $9, 15(%1) \n\t" - "add %1, %1, %2 \n\t" - "pcpyld $8, $9, $8 \n\t" - "sq $8, 0(%0) \n\t" - "add %0, %0, %2 \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "$9", "memory" ); -#endif + ".set push \n\t" + ".set mips3 \n\t" +#define PUTPIX16 \ + "ldr $8, 0(%1) \n\t" \ + "ldl $8, 7(%1) \n\t" \ + "ldr $9, 8(%1) \n\t" \ + "ldl $9, 15(%1) \n\t" \ + "add %1, %1, %2 \n\t" \ + "pcpyld $8, $9, $8 \n\t" \ + "sq $8, 0(%0) \n\t" \ + "add %0, %0, %2 \n\t" + PUTPIX16 + PUTPIX16 + PUTPIX16 + PUTPIX16 + ".set pop \n\t" + :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "$9", "memory" ); } } |