Mercurial > libavcodec.hg
comparison ps2/dsputil_mmi.c @ 772:311ac50375e4 libavcodec
dsputil mmi cleanup patch by (Leon van Stuivenberg <leonvs at iae dot nl>)
author | michaelni |
---|---|
date | Sun, 27 Oct 2002 09:20:48 +0000 |
parents | 71f669e9f633 |
children | 3c6df37177dd |
comparison
equal
deleted
inserted
replaced
771:d4cc92144266 | 772:311ac50375e4 |
---|---|
20 */ | 20 */ |
21 | 21 |
22 #include "../dsputil.h" | 22 #include "../dsputil.h" |
23 #include "mmi.h" | 23 #include "mmi.h" |
24 | 24 |
25 /* the provided 'as' in binutils 2.9EE doesn't support | |
26 the EE's mips3 instructions properly */ | |
27 #define AS_BUGGY | |
28 | |
29 | 25 |
30 static void clear_blocks_mmi(DCTELEM * blocks) | 26 static void clear_blocks_mmi(DCTELEM * blocks) |
31 { | 27 { |
32 int i; | 28 int i; |
33 for (i = 0; i < 6; i++) { | 29 for (i = 0; i < 6; i++) { |
47 | 43 |
48 static void get_pixels_mmi(DCTELEM *block, const UINT8 *pixels, int line_size) | 44 static void get_pixels_mmi(DCTELEM *block, const UINT8 *pixels, int line_size) |
49 { | 45 { |
50 int i; | 46 int i; |
51 for(i=0;i<8;i++) { | 47 for(i=0;i<8;i++) { |
52 #ifdef AS_BUGGY | |
53 ld3(5, 0, 8); | |
54 asm volatile( | 48 asm volatile( |
55 "add %1, %1, %2 \n\t" | 49 ".set push \n\t" |
56 "pextlb $8, $0, $8 \n\t" | 50 ".set mips3 \n\t" |
57 "sq $8, 0(%0) \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); | |
58 #else | |
59 asm volatile( | |
60 "ld $8, 0(%1) \n\t" | 51 "ld $8, 0(%1) \n\t" |
61 "add %1, %1, %2 \n\t" | 52 "add %1, %1, %2 \n\t" |
62 "pextlb $8, $0, $8 \n\t" | 53 "pextlb $8, $0, $8 \n\t" |
63 "sq $8, 0(%0) \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); | 54 "sq $8, 0(%0) \n\t" |
64 #endif | 55 ".set pop \n\t" |
56 :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); | |
65 block += 8; | 57 block += 8; |
66 } | 58 } |
67 } | 59 } |
68 | 60 |
69 | 61 |
70 static void put_pixels8_mmi(uint8_t *block, const uint8_t *pixels, int line_size, int h) | 62 static void put_pixels8_mmi(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
71 { | 63 { |
72 int i; | 64 int i; |
73 for(i=0; i<h; i++) { | 65 for(i=0; i<h; i++) { |
74 #ifdef AS_BUGGY | |
75 ldr3(5, 0, 8); | |
76 ldl3(5, 7, 8); | |
77 asm volatile ( "add $5, $5, $6 \n\t" ); | |
78 sd3(8, 0, 4); | |
79 asm volatile ( "add $4, $4, $6 \n\t" ); | |
80 #else | |
81 asm volatile( | 66 asm volatile( |
67 ".set push \n\t" | |
68 ".set mips3 \n\t" | |
82 "ldr $8, 0(%1) \n\t" | 69 "ldr $8, 0(%1) \n\t" |
83 "ldl $8, 7(%1) \n\t" | 70 "ldl $8, 7(%1) \n\t" |
84 "add %1, %1, %2 \n\t" | 71 "add %1, %1, %2 \n\t" |
85 "sd $8, 0(%0) \n\t" | 72 "sd $8, 0(%0) \n\t" |
86 "add %0, %0, %2 \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); | 73 "add %0, %0, %2 \n\t" |
87 #endif | 74 ".set pop \n\t" |
75 :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "memory" ); | |
88 } | 76 } |
89 } | 77 } |
90 | 78 |
91 | 79 |
92 static void put_pixels16_mmi(uint8_t *block, const uint8_t *pixels, int line_size, int h) | 80 static void put_pixels16_mmi(uint8_t *block, const uint8_t *pixels, int line_size, int h) |
93 { | 81 { |
94 int i; | 82 int i; |
95 for(i=0; i<h; i++) { | 83 for(i=0; i<(h>>2); i++) { |
96 #ifdef AS_BUGGY | |
97 ldr3(5, 0, 8); | |
98 ldl3(5, 7, 8); | |
99 ldr3(5, 8, 9); | |
100 ldl3(5, 15, 9); | |
101 asm volatile ( "add $5, $5, $6 \n\t" ); | |
102 pcpyld($9, $8, $8); | |
103 sq($8, 0, $4); | |
104 asm volatile ( "add $4, $4, $6 \n\t" ); | |
105 #else | |
106 asm volatile ( | 84 asm volatile ( |
107 "ldr $8, 0(%1) \n\t" | 85 ".set push \n\t" |
108 "ldl $8, 7(%1) \n\t" | 86 ".set mips3 \n\t" |
109 "ldr $9, 8(%1) \n\t" | 87 #define PUTPIX16 \ |
110 "ldl $9, 15(%1) \n\t" | 88 "ldr $8, 0(%1) \n\t" \ |
111 "add %1, %1, %2 \n\t" | 89 "ldl $8, 7(%1) \n\t" \ |
112 "pcpyld $8, $9, $8 \n\t" | 90 "ldr $9, 8(%1) \n\t" \ |
113 "sq $8, 0(%0) \n\t" | 91 "ldl $9, 15(%1) \n\t" \ |
114 "add %0, %0, %2 \n\t" :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "$9", "memory" ); | 92 "add %1, %1, %2 \n\t" \ |
115 #endif | 93 "pcpyld $8, $9, $8 \n\t" \ |
94 "sq $8, 0(%0) \n\t" \ | |
95 "add %0, %0, %2 \n\t" | |
96 PUTPIX16 | |
97 PUTPIX16 | |
98 PUTPIX16 | |
99 PUTPIX16 | |
100 ".set pop \n\t" | |
101 :: "r" (block), "r" (pixels), "r" (line_size) : "$8", "$9", "memory" ); | |
116 } | 102 } |
117 } | 103 } |
118 | 104 |
119 | 105 |
120 void dsputil_init_mmi(void) | 106 void dsputil_init_mmi(void) |