Originally committed as revision 12561 to svn://svn.ffmpeg.org/ffmpeg/trunk
Luca Barbato authored on 2008/03/24 00:33:24... | ... |
@@ -84,6 +84,17 @@ static inline int vertClassify_altivec(uint8_t src[], int stride, PPContext *c) |
84 | 84 |
vector signed short v_data = vec_ld(0, data); |
85 | 85 |
vector signed short v_srcAss0, v_srcAss1, v_srcAss2, v_srcAss3, |
86 | 86 |
v_srcAss4, v_srcAss5, v_srcAss6, v_srcAss7; |
87 |
+//FIXME avoid this mess if possible |
|
88 |
+ register int j0 = 0, |
|
89 |
+ j1 = stride, |
|
90 |
+ j2 = 2 * stride, |
|
91 |
+ j3 = 3 * stride, |
|
92 |
+ j4 = 4 * stride, |
|
93 |
+ j5 = 5 * stride, |
|
94 |
+ j6 = 6 * stride, |
|
95 |
+ j7 = 7 * stride; |
|
96 |
+ vector unsigned char v_srcA0, v_srcA1, v_srcA2, v_srcA3, |
|
97 |
+ v_srcA4, v_srcA5, v_srcA6, v_srcA7; |
|
87 | 98 |
|
88 | 99 |
v_dcOffset = vec_splat(v_data, 0); |
89 | 100 |
v_dcThreshold = (vector unsigned short)vec_splat(v_data, 1); |
... | ... |
@@ -94,21 +105,20 @@ static inline int vertClassify_altivec(uint8_t src[], int stride, PPContext *c) |
94 | 94 |
|
95 | 95 |
|
96 | 96 |
#define LOAD_LINE(i) \ |
97 |
- register int j##i = i * stride; \ |
|
97 |
+ { \ |
|
98 | 98 |
vector unsigned char perm##i = vec_lvsl(j##i, src2); \ |
99 |
- const vector unsigned char v_srcA1##i = vec_ld(j##i, src2); \ |
|
100 | 99 |
vector unsigned char v_srcA2##i; \ |
100 |
+ vector unsigned char v_srcA1##i = vec_ld(j##i, src2); \ |
|
101 | 101 |
if (two_vectors) \ |
102 | 102 |
v_srcA2##i = vec_ld(j##i + 16, src2); \ |
103 |
- const vector unsigned char v_srcA##i = \ |
|
103 |
+ v_srcA##i = \ |
|
104 | 104 |
vec_perm(v_srcA1##i, v_srcA2##i, perm##i); \ |
105 | 105 |
v_srcAss##i = \ |
106 | 106 |
(vector signed short)vec_mergeh((vector signed char)zero, \ |
107 |
- (vector signed char)v_srcA##i) |
|
107 |
+ (vector signed char)v_srcA##i); } |
|
108 | 108 |
|
109 | 109 |
#define LOAD_LINE_ALIGNED(i) \ |
110 |
- register int j##i = i * stride; \ |
|
111 |
- const vector unsigned char v_srcA##i = vec_ld(j##i, src2); \ |
|
110 |
+ v_srcA##i = vec_ld(j##i, src2); \ |
|
112 | 111 |
v_srcAss##i = \ |
113 | 112 |
(vector signed short)vec_mergeh((vector signed char)zero, \ |
114 | 113 |
(vector signed char)v_srcA##i) |
... | ... |
@@ -146,16 +156,26 @@ static inline int vertClassify_altivec(uint8_t src[], int stride, PPContext *c) |
146 | 146 |
const vector signed short v_comp##i = \ |
147 | 147 |
(vector signed short)vec_cmplt((vector unsigned short)v_sum##i, \ |
148 | 148 |
v_dcThreshold); \ |
149 |
- const vector signed short v_part##i = vec_and(mask, v_comp##i); \ |
|
150 |
- v_numEq = vec_sum4s(v_part##i, v_numEq); |
|
151 |
- |
|
152 |
- ITER(0, 1); |
|
153 |
- ITER(1, 2); |
|
154 |
- ITER(2, 3); |
|
155 |
- ITER(3, 4); |
|
156 |
- ITER(4, 5); |
|
157 |
- ITER(5, 6); |
|
158 |
- ITER(6, 7); |
|
149 |
+ const vector signed short v_part##i = vec_and(mask, v_comp##i); |
|
150 |
+ |
|
151 |
+{ |
|
152 |
+ ITER(0, 1) |
|
153 |
+ ITER(1, 2) |
|
154 |
+ ITER(2, 3) |
|
155 |
+ ITER(3, 4) |
|
156 |
+ ITER(4, 5) |
|
157 |
+ ITER(5, 6) |
|
158 |
+ ITER(6, 7) |
|
159 |
+ |
|
160 |
+ v_numEq = vec_sum4s(v_part0, v_numEq); |
|
161 |
+ v_numEq = vec_sum4s(v_part1, v_numEq); |
|
162 |
+ v_numEq = vec_sum4s(v_part2, v_numEq); |
|
163 |
+ v_numEq = vec_sum4s(v_part3, v_numEq); |
|
164 |
+ v_numEq = vec_sum4s(v_part4, v_numEq); |
|
165 |
+ v_numEq = vec_sum4s(v_part5, v_numEq); |
|
166 |
+ v_numEq = vec_sum4s(v_part6, v_numEq); |
|
167 |
+} |
|
168 |
+ |
|
159 | 169 |
#undef ITER |
160 | 170 |
|
161 | 171 |
v_numEq = vec_sums(v_numEq, zero); |