32 const int A = (8 - x) * (8 - y);
33 const int B = x * (8 - y);
34 const int C = (8 - x) * y;
44 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
45 "dli %[tmp0], 0x06 \n\t"
46 "pshufh %[A], %[A], %[ftmp0] \n\t"
47 "pshufh %[B], %[B], %[ftmp0] \n\t"
48 "mtc1 %[tmp0], %[ftmp9] \n\t"
49 "pshufh %[C], %[C], %[ftmp0] \n\t"
50 "pshufh %[D], %[D], %[ftmp0] \n\t"
53 PTR_ADDU "%[addr0], %[src], %[stride] \n\t"
54 MMI_ULDC1(%[ftmp1], %[src], 0x00)
55 MMI_ULDC1(%[ftmp2], %[src], 0x01)
56 MMI_ULDC1(%[ftmp3], %[addr0], 0x00)
57 MMI_ULDC1(%[ftmp4], %[addr0], 0x01)
59 "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t"
60 "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t"
61 "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t"
62 "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t"
63 "pmullh %[ftmp5], %[ftmp5], %[A] \n\t"
64 "pmullh %[ftmp7], %[ftmp7], %[B] \n\t"
65 "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t"
66 "pmullh %[ftmp6], %[ftmp6], %[A] \n\t"
67 "pmullh %[ftmp8], %[ftmp8], %[B] \n\t"
68 "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t"
70 "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t"
71 "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t"
72 "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t"
73 "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t"
74 "pmullh %[ftmp5], %[ftmp5], %[C] \n\t"
75 "pmullh %[ftmp7], %[ftmp7], %[D] \n\t"
76 "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t"
77 "pmullh %[ftmp6], %[ftmp6], %[C] \n\t"
78 "pmullh %[ftmp8], %[ftmp8], %[D] \n\t"
79 "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t"
81 "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t"
82 "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t"
83 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
84 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
85 "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t"
86 "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t"
87 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
88 "addi %[h], %[h], -0x01 \n\t"
89 MMI_SDC1(%[ftmp1], %[dst], 0x00)
90 PTR_ADDU "%[src], %[src], %[stride] \n\t"
91 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
93 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
94 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
95 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
96 [ftmp6]
"=&f"(ftmp[6]), [ftmp7]
"=&f"(ftmp[7]),
97 [ftmp8]
"=&f"(ftmp[8]), [ftmp9]
"=&f"(ftmp[9]),
100 [addr0]
"=&r"(addr[0]),
101 [dst]
"+&r"(dst), [src]
"+&r"(src),
104 [
A]
"f"(
A), [B]
"f"(B),
109 const int step = C ? stride : 1;
112 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
113 "dli %[tmp0], 0x06 \n\t"
114 "pshufh %[A], %[A], %[ftmp0] \n\t"
115 "pshufh %[E], %[E], %[ftmp0] \n\t"
116 "mtc1 %[tmp0], %[ftmp7] \n\t"
119 PTR_ADDU "%[addr0], %[src], %[step] \n\t"
120 MMI_ULDC1(%[ftmp1], %[src], 0x00)
121 MMI_ULDC1(%[ftmp2], %[addr0], 0x00)
123 "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
124 "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t"
125 "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t"
126 "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t"
127 "pmullh %[ftmp3], %[ftmp3], %[A] \n\t"
128 "pmullh %[ftmp5], %[ftmp5], %[E] \n\t"
129 "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t"
130 "pmullh %[ftmp4], %[ftmp4], %[A] \n\t"
131 "pmullh %[ftmp6], %[ftmp6], %[E] \n\t"
132 "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t"
134 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
135 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
136 "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t"
137 "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t"
138 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
139 "addi %[h], %[h], -0x01 \n\t"
140 MMI_SDC1(%[ftmp1], %[dst], 0x00)
141 PTR_ADDU "%[src], %[src], %[stride] \n\t"
142 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
144 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
145 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
146 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
147 [ftmp6]
"=&f"(ftmp[6]), [ftmp7]
"=&f"(ftmp[7]),
150 [addr0]
"=&r"(addr[0]),
151 [dst]
"+&r"(dst), [src]
"+&r"(src),
160 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
161 "dli %[tmp0], 0x06 \n\t"
162 "pshufh %[A], %[A], %[ftmp0] \n\t"
163 "mtc1 %[tmp0], %[ftmp4] \n\t"
166 MMI_ULDC1(%[ftmp1], %[src], 0x00)
167 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
168 "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
169 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
170 "pmullh %[ftmp2], %[ftmp3], %[A] \n\t"
171 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
172 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
173 "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t"
174 "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t"
175 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
176 PTR_ADDU "%[src], %[src], %[stride] \n\t"
177 MMI_SDC1(%[ftmp1], %[dst], 0x00)
179 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
180 MMI_ULDC1(%[ftmp1], %[src], 0x00)
181 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
182 "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
183 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
184 "pmullh %[ftmp2], %[ftmp3], %[A] \n\t"
185 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
186 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
187 "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t"
188 "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t"
189 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
190 "addi %[h], %[h], -0x02 \n\t"
191 MMI_SDC1(%[ftmp1], %[dst], 0x00)
193 PTR_ADDU "%[src], %[src], %[stride] \n\t"
194 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
196 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
197 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
198 [ftmp4]
"=&f"(ftmp[4]),
201 [dst]
"+&r"(dst), [src]
"+&r"(src),
213 const int A = (8 - x) * (8 - y);
214 const int B = x * (8 - y);
215 const int C = (8 - x) * y;
225 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
226 "dli %[tmp0], 0x06 \n\t"
227 "pshufh %[A], %[A], %[ftmp0] \n\t"
228 "pshufh %[B], %[B], %[ftmp0] \n\t"
229 "mtc1 %[tmp0], %[ftmp9] \n\t"
230 "pshufh %[C], %[C], %[ftmp0] \n\t"
231 "pshufh %[D], %[D], %[ftmp0] \n\t"
234 PTR_ADDU "%[addr0], %[src], %[stride] \n\t"
235 MMI_ULDC1(%[ftmp1], %[src], 0x00)
236 MMI_ULDC1(%[ftmp2], %[src], 0x01)
237 MMI_ULDC1(%[ftmp3], %[addr0], 0x00)
238 MMI_ULDC1(%[ftmp4], %[addr0], 0x01)
240 "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t"
241 "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t"
242 "punpcklbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t"
243 "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t"
244 "pmullh %[ftmp5], %[ftmp5], %[A] \n\t"
245 "pmullh %[ftmp7], %[ftmp7], %[B] \n\t"
246 "paddh %[ftmp1], %[ftmp5], %[ftmp7] \n\t"
247 "pmullh %[ftmp6], %[ftmp6], %[A] \n\t"
248 "pmullh %[ftmp8], %[ftmp8], %[B] \n\t"
249 "paddh %[ftmp2], %[ftmp6], %[ftmp8] \n\t"
251 "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t"
252 "punpckhbh %[ftmp6], %[ftmp3], %[ftmp0] \n\t"
253 "punpcklbh %[ftmp7], %[ftmp4], %[ftmp0] \n\t"
254 "punpckhbh %[ftmp8], %[ftmp4], %[ftmp0] \n\t"
255 "pmullh %[ftmp5], %[ftmp5], %[C] \n\t"
256 "pmullh %[ftmp7], %[ftmp7], %[D] \n\t"
257 "paddh %[ftmp3], %[ftmp5], %[ftmp7] \n\t"
258 "pmullh %[ftmp6], %[ftmp6], %[C] \n\t"
259 "pmullh %[ftmp8], %[ftmp8], %[D] \n\t"
260 "paddh %[ftmp4], %[ftmp6], %[ftmp8] \n\t"
262 "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t"
263 "paddh %[ftmp2], %[ftmp2], %[ftmp4] \n\t"
264 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
265 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
266 "psrlh %[ftmp1], %[ftmp1], %[ftmp9] \n\t"
267 "psrlh %[ftmp2], %[ftmp2], %[ftmp9] \n\t"
268 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
269 MMI_LDC1(%[ftmp2], %[dst], 0x00)
270 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
271 "addi %[h], %[h], -0x01 \n\t"
272 MMI_SDC1(%[ftmp1], %[dst], 0x00)
273 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
274 PTR_ADDU "%[src], %[src], %[stride] \n\t"
276 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
277 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
278 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
279 [ftmp6]
"=&f"(ftmp[6]), [ftmp7]
"=&f"(ftmp[7]),
280 [ftmp8]
"=&f"(ftmp[8]), [ftmp9]
"=&f"(ftmp[9]),
283 [addr0]
"=&r"(addr[0]),
284 [dst]
"+&r"(dst), [src]
"+&r"(src),
287 [
A]
"f"(
A), [B]
"f"(B),
292 const int step = C ? stride : 1;
295 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
296 "dli %[tmp0], 0x06 \n\t"
297 "pshufh %[A], %[A], %[ftmp0] \n\t"
298 "pshufh %[E], %[E], %[ftmp0] \n\t"
299 "mtc1 %[tmp0], %[ftmp7] \n\t"
302 PTR_ADDU "%[addr0], %[src], %[step] \n\t"
303 MMI_ULDC1(%[ftmp1], %[src], 0x00)
304 MMI_ULDC1(%[ftmp2], %[addr0], 0x00)
306 "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
307 "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t"
308 "punpcklbh %[ftmp5], %[ftmp2], %[ftmp0] \n\t"
309 "punpckhbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t"
310 "pmullh %[ftmp3], %[ftmp3], %[A] \n\t"
311 "pmullh %[ftmp5], %[ftmp5], %[E] \n\t"
312 "paddh %[ftmp1], %[ftmp3], %[ftmp5] \n\t"
313 "pmullh %[ftmp4], %[ftmp4], %[A] \n\t"
314 "pmullh %[ftmp6], %[ftmp6], %[E] \n\t"
315 "paddh %[ftmp2], %[ftmp4], %[ftmp6] \n\t"
317 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
318 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
319 "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t"
320 "psrlh %[ftmp2], %[ftmp2], %[ftmp7] \n\t"
321 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
322 MMI_LDC1(%[ftmp2], %[dst], 0x00)
323 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
324 "addi %[h], %[h], -0x01 \n\t"
325 MMI_SDC1(%[ftmp1], %[dst], 0x00)
326 PTR_ADDU "%[src], %[src], %[stride] \n\t"
327 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
329 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
330 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
331 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
332 [ftmp6]
"=&f"(ftmp[6]), [ftmp7]
"=&f"(ftmp[7]),
335 [addr0]
"=&r"(addr[0]),
336 [dst]
"+&r"(dst), [src]
"+&r"(src),
345 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
346 "dli %[tmp0], 0x06 \n\t"
347 "pshufh %[A], %[A], %[ftmp0] \n\t"
348 "mtc1 %[tmp0], %[ftmp4] \n\t"
351 MMI_ULDC1(%[ftmp1], %[src], 0x00)
352 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
353 "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
354 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
355 "pmullh %[ftmp2], %[ftmp3], %[A] \n\t"
356 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
357 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
358 "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t"
359 "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t"
360 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
361 MMI_LDC1(%[ftmp2], %[dst], 0x00)
362 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
363 PTR_ADDU "%[src], %[src], %[stride] \n\t"
364 MMI_SDC1(%[ftmp1], %[dst], 0x00)
365 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
367 MMI_ULDC1(%[ftmp1], %[src], 0x00)
368 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
369 "punpckhbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
370 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
371 "pmullh %[ftmp2], %[ftmp3], %[A] \n\t"
372 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
373 "paddh %[ftmp2], %[ftmp2], %[ff_pw_32] \n\t"
374 "psrlh %[ftmp1], %[ftmp1], %[ftmp4] \n\t"
375 "psrlh %[ftmp2], %[ftmp2], %[ftmp4] \n\t"
376 "packushb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
377 MMI_LDC1(%[ftmp2], %[dst], 0x00)
378 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
379 "addi %[h], %[h], -0x02 \n\t"
380 MMI_SDC1(%[ftmp1], %[dst], 0x00)
382 PTR_ADDU "%[src], %[src], %[stride] \n\t"
383 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
385 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
386 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
387 [ftmp4]
"=&f"(ftmp[4]),
390 [dst]
"+&r"(dst), [src]
"+&r"(src),
402 const int A = (8 - x) * (8 - y);
403 const int B = x * (8 - y);
404 const int C = (8 - x) * y;
414 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
415 "dli %[tmp0], 0x06 \n\t"
416 "pshufh %[A], %[A], %[ftmp0] \n\t"
417 "pshufh %[B], %[B], %[ftmp0] \n\t"
418 "mtc1 %[tmp0], %[ftmp7] \n\t"
419 "pshufh %[C], %[C], %[ftmp0] \n\t"
420 "pshufh %[D], %[D], %[ftmp0] \n\t"
423 PTR_ADDU "%[addr0], %[src], %[stride] \n\t"
424 MMI_ULWC1(%[ftmp1], %[src], 0x00)
425 MMI_ULWC1(%[ftmp2], %[src], 0x01)
426 MMI_ULWC1(%[ftmp3], %[addr0], 0x00)
427 MMI_ULWC1(%[ftmp4], %[addr0], 0x01)
429 "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t"
430 "punpcklbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t"
431 "pmullh %[ftmp5], %[ftmp5], %[A] \n\t"
432 "pmullh %[ftmp6], %[ftmp6], %[B] \n\t"
433 "paddh %[ftmp1], %[ftmp5], %[ftmp6] \n\t"
435 "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t"
436 "punpcklbh %[ftmp6], %[ftmp4], %[ftmp0] \n\t"
437 "pmullh %[ftmp5], %[ftmp5], %[C] \n\t"
438 "pmullh %[ftmp6], %[ftmp6], %[D] \n\t"
439 "paddh %[ftmp2], %[ftmp5], %[ftmp6] \n\t"
441 "paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
442 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
443 "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t"
444 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
445 "addi %[h], %[h], -0x01 \n\t"
446 MMI_SWC1(%[ftmp1], %[dst], 0x00)
447 PTR_ADDU "%[src], %[src], %[stride] \n\t"
448 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
450 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
451 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
452 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
453 [ftmp6]
"=&f"(ftmp[6]), [ftmp7]
"=&f"(ftmp[7]),
456 [addr0]
"=&r"(addr[0]),
457 [dst]
"+&r"(dst), [src]
"+&r"(src),
460 [
A]
"f"(
A), [B]
"f"(B),
465 const int step = C ? stride : 1;
468 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
469 "dli %[tmp0], 0x06 \n\t"
470 "pshufh %[A], %[A], %[ftmp0] \n\t"
471 "pshufh %[E], %[E], %[ftmp0] \n\t"
472 "mtc1 %[tmp0], %[ftmp5] \n\t"
475 PTR_ADDU "%[addr0], %[src], %[step] \n\t"
476 MMI_ULWC1(%[ftmp1], %[src], 0x00)
477 MMI_ULWC1(%[ftmp2], %[addr0], 0x00)
479 "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
480 "punpcklbh %[ftmp4], %[ftmp2], %[ftmp0] \n\t"
481 "pmullh %[ftmp3], %[ftmp3], %[A] \n\t"
482 "pmullh %[ftmp4], %[ftmp4], %[E] \n\t"
483 "paddh %[ftmp1], %[ftmp3], %[ftmp4] \n\t"
485 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
486 "psrlh %[ftmp1], %[ftmp1], %[ftmp5] \n\t"
487 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
488 "addi %[h], %[h], -0x01 \n\t"
489 MMI_SWC1(%[ftmp1], %[dst], 0x00)
490 PTR_ADDU "%[src], %[src], %[stride] \n\t"
491 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
493 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
494 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
495 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
498 [addr0]
"=&r"(addr[0]),
499 [dst]
"+&r"(dst), [src]
"+&r"(src),
508 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
509 "dli %[tmp0], 0x06 \n\t"
510 "pshufh %[A], %[A], %[ftmp0] \n\t"
511 "mtc1 %[tmp0], %[ftmp3] \n\t"
514 MMI_ULWC1(%[ftmp1], %[src], 0x00)
515 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
516 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
517 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
518 "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t"
519 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
520 PTR_ADDU "%[src], %[src], %[stride] \n\t"
521 MMI_SWC1(%[ftmp1], %[dst], 0x00)
522 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
524 MMI_ULWC1(%[ftmp1], %[src], 0x00)
525 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
526 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
527 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
528 "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t"
529 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
530 "addi %[h], %[h], -0x02 \n\t"
531 MMI_SWC1(%[ftmp1], %[dst], 0x00)
533 PTR_ADDU "%[src], %[src], %[stride] \n\t"
534 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
536 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
537 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
540 [dst]
"+&r"(dst), [
src]
"+&r"(
src),
552 const int A = (8 - x) *(8 - y);
553 const int B = x * (8 - y);
554 const int C = (8 - x) * y;
564 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
565 "dli %[tmp0], 0x06 \n\t"
566 "pshufh %[A], %[A], %[ftmp0] \n\t"
567 "pshufh %[B], %[B], %[ftmp0] \n\t"
568 "mtc1 %[tmp0], %[ftmp7] \n\t"
569 "pshufh %[C], %[C], %[ftmp0] \n\t"
570 "pshufh %[D], %[D], %[ftmp0] \n\t"
573 PTR_ADDU "%[addr0], %[src], %[stride] \n\t"
574 MMI_ULWC1(%[ftmp1], %[src], 0x00)
575 MMI_ULWC1(%[ftmp2], %[src], 0x01)
576 MMI_ULWC1(%[ftmp3], %[addr0], 0x00)
577 MMI_ULWC1(%[ftmp4], %[addr0], 0x01)
579 "punpcklbh %[ftmp5], %[ftmp1], %[ftmp0] \n\t"
580 "punpcklbh %[ftmp6], %[ftmp2], %[ftmp0] \n\t"
581 "pmullh %[ftmp5], %[ftmp5], %[A] \n\t"
582 "pmullh %[ftmp6], %[ftmp6], %[B] \n\t"
583 "paddh %[ftmp1], %[ftmp5], %[ftmp6] \n\t"
585 "punpcklbh %[ftmp5], %[ftmp3], %[ftmp0] \n\t"
586 "punpcklbh %[ftmp6], %[ftmp4], %[ftmp0] \n\t"
587 "pmullh %[ftmp5], %[ftmp5], %[C] \n\t"
588 "pmullh %[ftmp6], %[ftmp6], %[D] \n\t"
589 "paddh %[ftmp2], %[ftmp5], %[ftmp6] \n\t"
591 "paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
592 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
593 "psrlh %[ftmp1], %[ftmp1], %[ftmp7] \n\t"
594 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
595 MMI_LWC1(%[ftmp2], %[dst], 0x00)
596 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
597 "addi %[h], %[h], -0x01 \n\t"
598 MMI_SWC1(%[ftmp1], %[dst], 0x00)
599 PTR_ADDU "%[src], %[src], %[stride] \n\t"
600 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
602 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
603 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
604 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
605 [ftmp6]
"=&f"(ftmp[6]), [ftmp7]
"=&f"(ftmp[7]),
608 [addr0]
"=&r"(addr[0]),
609 [dst]
"+&r"(dst), [src]
"+&r"(src),
612 [
A]
"f"(
A), [B]
"f"(B),
617 const int step = C ? stride : 1;
620 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
621 "dli %[tmp0], 0x06 \n\t"
622 "pshufh %[A], %[A], %[ftmp0] \n\t"
623 "pshufh %[E], %[E], %[ftmp0] \n\t"
624 "mtc1 %[tmp0], %[ftmp5] \n\t"
626 PTR_ADDU "%[addr0], %[src], %[step] \n\t"
627 MMI_ULWC1(%[ftmp1], %[src], 0x00)
628 MMI_ULWC1(%[ftmp2], %[addr0], 0x00)
630 "punpcklbh %[ftmp3], %[ftmp1], %[ftmp0] \n\t"
631 "punpcklbh %[ftmp4], %[ftmp2], %[ftmp0] \n\t"
632 "pmullh %[ftmp3], %[ftmp3], %[A] \n\t"
633 "pmullh %[ftmp4], %[ftmp4], %[E] \n\t"
634 "paddh %[ftmp1], %[ftmp3], %[ftmp4] \n\t"
636 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
637 "psrlh %[ftmp1], %[ftmp1], %[ftmp5] \n\t"
638 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
639 MMI_LWC1(%[ftmp2], %[dst], 0x00)
640 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
641 "addi %[h], %[h], -0x01 \n\t"
642 MMI_SWC1(%[ftmp1], %[dst], 0x00)
643 PTR_ADDU "%[src], %[src], %[stride] \n\t"
644 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
646 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
647 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
648 [ftmp4]
"=&f"(ftmp[4]), [ftmp5]
"=&f"(ftmp[5]),
651 [addr0]
"=&r"(addr[0]),
652 [dst]
"+&r"(dst), [src]
"+&r"(src),
661 "xor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
662 "dli %[tmp0], 0x06 \n\t"
663 "pshufh %[A], %[A], %[ftmp0] \n\t"
664 "mtc1 %[tmp0], %[ftmp3] \n\t"
667 MMI_ULWC1(%[ftmp1], %[src], 0x00)
668 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
669 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
670 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
671 "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t"
672 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
673 MMI_LWC1(%[ftmp2], %[dst], 0x00)
674 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
675 PTR_ADDU "%[src], %[src], %[stride] \n\t"
676 MMI_SWC1(%[ftmp1], %[dst], 0x00)
677 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
679 MMI_ULWC1(%[ftmp1], %[src], 0x00)
680 "punpcklbh %[ftmp2], %[ftmp1], %[ftmp0] \n\t"
681 "pmullh %[ftmp1], %[ftmp2], %[A] \n\t"
682 "paddh %[ftmp1], %[ftmp1], %[ff_pw_32] \n\t"
683 "psrlh %[ftmp1], %[ftmp1], %[ftmp3] \n\t"
684 "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t"
685 MMI_LWC1(%[ftmp2], %[dst], 0x00)
686 "pavgb %[ftmp1], %[ftmp1], %[ftmp2] \n\t"
687 "addi %[h], %[h], -0x02 \n\t"
688 MMI_SWC1(%[ftmp1], %[dst], 0x00)
690 PTR_ADDU "%[src], %[src], %[stride] \n\t"
691 PTR_ADDU "%[dst], %[dst], %[stride] \n\t"
693 : [ftmp0]
"=&f"(ftmp[0]), [ftmp1]
"=&f"(ftmp[1]),
694 [ftmp2]
"=&f"(ftmp[2]), [ftmp3]
"=&f"(ftmp[3]),
697 [dst]
"+&r"(dst), [
src]
"+&r"(
src),
void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y)
void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y)
void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y)
GLint GLenum GLboolean GLsizei stride
void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y)