aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/ps2
diff options
context:
space:
mode:
authorLeon van Stuivenberg <leonvs@iae.nl>2002-10-27 09:20:48 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-10-27 09:20:48 +0000
commita09907d988002192311a358ee6c7d5a730f1e02e (patch)
tree196591d01ae3bf30fcf15a044d927d7dfbf8f742 /libavcodec/ps2
parentd6db1c9c6a331da88c3eca9b0afa939dbbf24651 (diff)
downloadffmpeg-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.c70
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" );
}
}