3 * Copyright (C) 2003 David S. Miller <davem@redhat.com>
5 * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
6 * See http://libmpeg2.sourceforge.net/ for updates.
8 * mpeg2dec is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * mpeg2dec is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 #include "attributes.h"
31 #include "mpeg2_internal.h"
34 /* The trick used in some of this file is the formula from the MMX
35 * motion comp code, which is:
37 * (x+y+1)>>1 == (x|y)-((x^y)>>1)
39 * This allows us to average 8 bytes at a time in a 64-bit FPU reg.
40 * We avoid overflows by masking before we do the shift, and we
41 * implement the shift by multiplying by 1/2 using mul8x16. So in
42 * VIS this is (assume 'x' is in f0, 'y' is in f2, a repeating mask
43 * of '0xfe' is in f4, a repeating mask of '0x7f' is in f6, and
44 * the value 0x80808080 is in f8):
48 * fmul8x16 f8, f10, f10
51 * fpsub16 f12, f10, f10
54 #define DUP4(x) {x, x, x, x}
55 #define DUP8(x) {x, x, x, x, x, x, x, x}
56 static const int16_t constants1
[] ATTR_ALIGN(8) = DUP4 (1);
57 static const int16_t constants2
[] ATTR_ALIGN(8) = DUP4 (2);
58 static const int16_t constants3
[] ATTR_ALIGN(8) = DUP4 (3);
59 static const int16_t constants6
[] ATTR_ALIGN(8) = DUP4 (6);
60 static const int8_t constants_fe
[] ATTR_ALIGN(8) = DUP8 (0xfe);
61 static const int8_t constants_7f
[] ATTR_ALIGN(8) = DUP8 (0x7f);
62 static const int8_t constants128
[] ATTR_ALIGN(8) = DUP8 (128);
63 static const int16_t constants256_512
[] ATTR_ALIGN(8) =
65 static const int16_t constants256_1024
[] ATTR_ALIGN(8) =
66 {256, 1024, 256, 1024};
121 static void MC_put_o_16_vis (uint8_t * dest
, const uint8_t * _ref
,
122 const int stride
, int height
)
124 uint8_t *ref
= (uint8_t *) _ref
;
127 ref
= vis_alignaddr(ref
);
128 offset
= (ref
!= _ref
) ? 16 : 0;
130 vis_ld64(ref
[0], TMP0
);
132 vis_ld64_2(ref
, 8, TMP2
);
134 vis_ld64_2(ref
, offset
, TMP4
);
137 vis_faligndata(TMP0
, TMP2
, REF_0
);
138 vis_st64(REF_0
, dest
[0]);
140 vis_faligndata(TMP2
, TMP4
, REF_2
);
141 vis_st64_2(REF_2
, dest
, 8);
146 static void MC_put_o_8_vis (uint8_t * dest
, const uint8_t * _ref
,
147 const int stride
, int height
)
149 uint8_t *ref
= (uint8_t *) _ref
;
152 ref
= vis_alignaddr(ref
);
153 offset
= (ref
!= _ref
) ? 8 : 0;
155 vis_ld64(ref
[0], TMP0
);
157 vis_ld64_2(ref
, offset
, TMP2
);
162 vis_faligndata(TMP0
, TMP2
, REF_0
);
163 vis_st64(REF_0
, dest
[0]);
169 static void MC_avg_o_16_vis (uint8_t * dest
, const uint8_t * _ref
,
170 const int stride
, int height
)
172 uint8_t *ref
= (uint8_t *) _ref
;
173 int stride_8
= stride
+ 8;
176 ref
= vis_alignaddr(ref
);
177 offset
= (ref
!= _ref
) ? 16 : 0;
179 vis_ld64(ref
[0], TMP0
);
181 vis_ld64(ref
[8], TMP2
);
183 vis_ld64_2(ref
, offset
, TMP4
);
185 vis_ld64(dest
[0], DST_0
);
187 vis_ld64(dest
[8], DST_2
);
189 vis_ld64(constants_fe
[0], MASK_fe
);
190 vis_faligndata(TMP0
, TMP2
, REF_0
);
192 vis_ld64(constants_7f
[0], MASK_7f
);
193 vis_faligndata(TMP2
, TMP4
, REF_2
);
195 vis_ld64(constants128
[0], CONST_128
);
198 height
= (height
>> 1) - 1;
201 vis_ld64(ref
[0], TMP0
);
202 vis_xor(DST_0
, REF_0
, TMP6
);
204 vis_ld64_2(ref
, 8, TMP2
);
205 vis_and(TMP6
, MASK_fe
, TMP6
);
207 vis_ld64_2(ref
, offset
, TMP4
);
209 vis_mul8x16(CONST_128
, TMP6
, TMP6
);
210 vis_xor(DST_2
, REF_2
, TMP8
);
212 vis_and(TMP8
, MASK_fe
, TMP8
);
214 vis_or(DST_0
, REF_0
, TMP10
);
215 vis_ld64_2(dest
, stride
, DST_0
);
216 vis_mul8x16(CONST_128
, TMP8
, TMP8
);
218 vis_or(DST_2
, REF_2
, TMP12
);
219 vis_ld64_2(dest
, stride_8
, DST_2
);
221 vis_ld64(ref
[0], TMP14
);
222 vis_and(TMP6
, MASK_7f
, TMP6
);
224 vis_and(TMP8
, MASK_7f
, TMP8
);
226 vis_psub16(TMP10
, TMP6
, TMP6
);
227 vis_st64(TMP6
, dest
[0]);
229 vis_psub16(TMP12
, TMP8
, TMP8
);
230 vis_st64_2(TMP8
, dest
, 8);
233 vis_ld64_2(ref
, 8, TMP16
);
234 vis_faligndata(TMP0
, TMP2
, REF_0
);
236 vis_ld64_2(ref
, offset
, TMP18
);
237 vis_faligndata(TMP2
, TMP4
, REF_2
);
240 vis_xor(DST_0
, REF_0
, TMP20
);
242 vis_and(TMP20
, MASK_fe
, TMP20
);
244 vis_xor(DST_2
, REF_2
, TMP22
);
245 vis_mul8x16(CONST_128
, TMP20
, TMP20
);
247 vis_and(TMP22
, MASK_fe
, TMP22
);
249 vis_or(DST_0
, REF_0
, TMP24
);
250 vis_mul8x16(CONST_128
, TMP22
, TMP22
);
252 vis_or(DST_2
, REF_2
, TMP26
);
254 vis_ld64_2(dest
, stride
, DST_0
);
255 vis_faligndata(TMP14
, TMP16
, REF_0
);
257 vis_ld64_2(dest
, stride_8
, DST_2
);
258 vis_faligndata(TMP16
, TMP18
, REF_2
);
260 vis_and(TMP20
, MASK_7f
, TMP20
);
262 vis_and(TMP22
, MASK_7f
, TMP22
);
264 vis_psub16(TMP24
, TMP20
, TMP20
);
265 vis_st64(TMP20
, dest
[0]);
267 vis_psub16(TMP26
, TMP22
, TMP22
);
268 vis_st64_2(TMP22
, dest
, 8);
272 vis_ld64(ref
[0], TMP0
);
273 vis_xor(DST_0
, REF_0
, TMP6
);
275 vis_ld64_2(ref
, 8, TMP2
);
276 vis_and(TMP6
, MASK_fe
, TMP6
);
278 vis_ld64_2(ref
, offset
, TMP4
);
279 vis_mul8x16(CONST_128
, TMP6
, TMP6
);
280 vis_xor(DST_2
, REF_2
, TMP8
);
282 vis_and(TMP8
, MASK_fe
, TMP8
);
284 vis_or(DST_0
, REF_0
, TMP10
);
285 vis_ld64_2(dest
, stride
, DST_0
);
286 vis_mul8x16(CONST_128
, TMP8
, TMP8
);
288 vis_or(DST_2
, REF_2
, TMP12
);
289 vis_ld64_2(dest
, stride_8
, DST_2
);
291 vis_ld64(ref
[0], TMP14
);
292 vis_and(TMP6
, MASK_7f
, TMP6
);
294 vis_and(TMP8
, MASK_7f
, TMP8
);
296 vis_psub16(TMP10
, TMP6
, TMP6
);
297 vis_st64(TMP6
, dest
[0]);
299 vis_psub16(TMP12
, TMP8
, TMP8
);
300 vis_st64_2(TMP8
, dest
, 8);
303 vis_faligndata(TMP0
, TMP2
, REF_0
);
305 vis_faligndata(TMP2
, TMP4
, REF_2
);
307 vis_xor(DST_0
, REF_0
, TMP20
);
309 vis_and(TMP20
, MASK_fe
, TMP20
);
311 vis_xor(DST_2
, REF_2
, TMP22
);
312 vis_mul8x16(CONST_128
, TMP20
, TMP20
);
314 vis_and(TMP22
, MASK_fe
, TMP22
);
316 vis_or(DST_0
, REF_0
, TMP24
);
317 vis_mul8x16(CONST_128
, TMP22
, TMP22
);
319 vis_or(DST_2
, REF_2
, TMP26
);
321 vis_and(TMP20
, MASK_7f
, TMP20
);
323 vis_and(TMP22
, MASK_7f
, TMP22
);
325 vis_psub16(TMP24
, TMP20
, TMP20
);
326 vis_st64(TMP20
, dest
[0]);
328 vis_psub16(TMP26
, TMP22
, TMP22
);
329 vis_st64_2(TMP22
, dest
, 8);
332 static void MC_avg_o_8_vis (uint8_t * dest
, const uint8_t * _ref
,
333 const int stride
, int height
)
335 uint8_t *ref
= (uint8_t *) _ref
;
338 ref
= vis_alignaddr(ref
);
339 offset
= (ref
!= _ref
) ? 8 : 0;
341 vis_ld64(ref
[0], TMP0
);
343 vis_ld64_2(ref
, offset
, TMP2
);
345 vis_ld64(dest
[0], DST_0
);
347 vis_ld64(constants_fe
[0], MASK_fe
);
349 vis_ld64(constants_7f
[0], MASK_7f
);
350 vis_faligndata(TMP0
, TMP2
, REF_0
);
352 vis_ld64(constants128
[0], CONST_128
);
355 height
= (height
>> 1) - 1;
358 vis_ld64(ref
[0], TMP0
);
359 vis_xor(DST_0
, REF_0
, TMP4
);
361 vis_ld64_2(ref
, offset
, TMP2
);
362 vis_and(TMP4
, MASK_fe
, TMP4
);
364 vis_or(DST_0
, REF_0
, TMP6
);
365 vis_ld64_2(dest
, stride
, DST_0
);
367 vis_mul8x16(CONST_128
, TMP4
, TMP4
);
369 vis_ld64(ref
[0], TMP12
);
370 vis_faligndata(TMP0
, TMP2
, REF_0
);
372 vis_ld64_2(ref
, offset
, TMP2
);
373 vis_xor(DST_0
, REF_0
, TMP0
);
376 vis_and(TMP0
, MASK_fe
, TMP0
);
378 vis_and(TMP4
, MASK_7f
, TMP4
);
380 vis_psub16(TMP6
, TMP4
, TMP4
);
381 vis_st64(TMP4
, dest
[0]);
383 vis_mul8x16(CONST_128
, TMP0
, TMP0
);
385 vis_or(DST_0
, REF_0
, TMP6
);
386 vis_ld64_2(dest
, stride
, DST_0
);
388 vis_faligndata(TMP12
, TMP2
, REF_0
);
390 vis_and(TMP0
, MASK_7f
, TMP0
);
392 vis_psub16(TMP6
, TMP0
, TMP4
);
393 vis_st64(TMP4
, dest
[0]);
397 vis_ld64(ref
[0], TMP0
);
398 vis_xor(DST_0
, REF_0
, TMP4
);
400 vis_ld64_2(ref
, offset
, TMP2
);
401 vis_and(TMP4
, MASK_fe
, TMP4
);
403 vis_or(DST_0
, REF_0
, TMP6
);
404 vis_ld64_2(dest
, stride
, DST_0
);
405 vis_mul8x16(CONST_128
, TMP4
, TMP4
);
407 vis_faligndata(TMP0
, TMP2
, REF_0
);
409 vis_xor(DST_0
, REF_0
, TMP0
);
411 vis_and(TMP0
, MASK_fe
, TMP0
);
413 vis_and(TMP4
, MASK_7f
, TMP4
);
415 vis_psub16(TMP6
, TMP4
, TMP4
);
416 vis_st64(TMP4
, dest
[0]);
418 vis_mul8x16(CONST_128
, TMP0
, TMP0
);
420 vis_or(DST_0
, REF_0
, TMP6
);
422 vis_and(TMP0
, MASK_7f
, TMP0
);
424 vis_psub16(TMP6
, TMP0
, TMP4
);
425 vis_st64(TMP4
, dest
[0]);
428 static void MC_put_x_16_vis (uint8_t * dest
, const uint8_t * _ref
,
429 const int stride
, int height
)
431 uint8_t *ref
= (uint8_t *) _ref
;
432 unsigned long off
= (unsigned long) ref
& 0x7;
433 unsigned long off_plus_1
= off
+ 1;
435 ref
= vis_alignaddr(ref
);
437 vis_ld64(ref
[0], TMP0
);
439 vis_ld64_2(ref
, 8, TMP2
);
441 vis_ld64_2(ref
, 16, TMP4
);
443 vis_ld64(constants_fe
[0], MASK_fe
);
445 vis_ld64(constants_7f
[0], MASK_7f
);
446 vis_faligndata(TMP0
, TMP2
, REF_0
);
448 vis_ld64(constants128
[0], CONST_128
);
449 vis_faligndata(TMP2
, TMP4
, REF_4
);
452 vis_alignaddr_g0((void *)off_plus_1
);
453 vis_faligndata(TMP0
, TMP2
, REF_2
);
454 vis_faligndata(TMP2
, TMP4
, REF_6
);
456 vis_src1(TMP2
, REF_2
);
457 vis_src1(TMP4
, REF_6
);
461 height
= (height
>> 1) - 1;
464 vis_ld64(ref
[0], TMP0
);
465 vis_xor(REF_0
, REF_2
, TMP6
);
467 vis_ld64_2(ref
, 8, TMP2
);
468 vis_xor(REF_4
, REF_6
, TMP8
);
470 vis_ld64_2(ref
, 16, TMP4
);
471 vis_and(TMP6
, MASK_fe
, TMP6
);
474 vis_ld64(ref
[0], TMP14
);
475 vis_mul8x16(CONST_128
, TMP6
, TMP6
);
476 vis_and(TMP8
, MASK_fe
, TMP8
);
478 vis_ld64_2(ref
, 8, TMP16
);
479 vis_mul8x16(CONST_128
, TMP8
, TMP8
);
480 vis_or(REF_0
, REF_2
, TMP10
);
482 vis_ld64_2(ref
, 16, TMP18
);
484 vis_or(REF_4
, REF_6
, TMP12
);
486 vis_alignaddr_g0((void *)off
);
488 vis_faligndata(TMP0
, TMP2
, REF_0
);
490 vis_faligndata(TMP2
, TMP4
, REF_4
);
493 vis_alignaddr_g0((void *)off_plus_1
);
494 vis_faligndata(TMP0
, TMP2
, REF_2
);
495 vis_faligndata(TMP2
, TMP4
, REF_6
);
497 vis_src1(TMP2
, REF_2
);
498 vis_src1(TMP4
, REF_6
);
501 vis_and(TMP6
, MASK_7f
, TMP6
);
503 vis_and(TMP8
, MASK_7f
, TMP8
);
505 vis_psub16(TMP10
, TMP6
, TMP6
);
506 vis_st64(TMP6
, dest
[0]);
508 vis_psub16(TMP12
, TMP8
, TMP8
);
509 vis_st64_2(TMP8
, dest
, 8);
512 vis_xor(REF_0
, REF_2
, TMP6
);
514 vis_xor(REF_4
, REF_6
, TMP8
);
516 vis_and(TMP6
, MASK_fe
, TMP6
);
518 vis_mul8x16(CONST_128
, TMP6
, TMP6
);
519 vis_and(TMP8
, MASK_fe
, TMP8
);
521 vis_mul8x16(CONST_128
, TMP8
, TMP8
);
522 vis_or(REF_0
, REF_2
, TMP10
);
524 vis_or(REF_4
, REF_6
, TMP12
);
526 vis_alignaddr_g0((void *)off
);
528 vis_faligndata(TMP14
, TMP16
, REF_0
);
530 vis_faligndata(TMP16
, TMP18
, REF_4
);
533 vis_alignaddr_g0((void *)off_plus_1
);
534 vis_faligndata(TMP14
, TMP16
, REF_2
);
535 vis_faligndata(TMP16
, TMP18
, REF_6
);
537 vis_src1(TMP16
, REF_2
);
538 vis_src1(TMP18
, REF_6
);
541 vis_and(TMP6
, MASK_7f
, TMP6
);
543 vis_and(TMP8
, MASK_7f
, TMP8
);
545 vis_psub16(TMP10
, TMP6
, TMP6
);
546 vis_st64(TMP6
, dest
[0]);
548 vis_psub16(TMP12
, TMP8
, TMP8
);
549 vis_st64_2(TMP8
, dest
, 8);
553 vis_ld64(ref
[0], TMP0
);
554 vis_xor(REF_0
, REF_2
, TMP6
);
556 vis_ld64_2(ref
, 8, TMP2
);
557 vis_xor(REF_4
, REF_6
, TMP8
);
559 vis_ld64_2(ref
, 16, TMP4
);
560 vis_and(TMP6
, MASK_fe
, TMP6
);
562 vis_mul8x16(CONST_128
, TMP6
, TMP6
);
563 vis_and(TMP8
, MASK_fe
, TMP8
);
565 vis_mul8x16(CONST_128
, TMP8
, TMP8
);
566 vis_or(REF_0
, REF_2
, TMP10
);
568 vis_or(REF_4
, REF_6
, TMP12
);
570 vis_alignaddr_g0((void *)off
);
572 vis_faligndata(TMP0
, TMP2
, REF_0
);
574 vis_faligndata(TMP2
, TMP4
, REF_4
);
577 vis_alignaddr_g0((void *)off_plus_1
);
578 vis_faligndata(TMP0
, TMP2
, REF_2
);
579 vis_faligndata(TMP2
, TMP4
, REF_6
);
581 vis_src1(TMP2
, REF_2
);
582 vis_src1(TMP4
, REF_6
);
585 vis_and(TMP6
, MASK_7f
, TMP6
);
587 vis_and(TMP8
, MASK_7f
, TMP8
);
589 vis_psub16(TMP10
, TMP6
, TMP6
);
590 vis_st64(TMP6
, dest
[0]);
592 vis_psub16(TMP12
, TMP8
, TMP8
);
593 vis_st64_2(TMP8
, dest
, 8);
596 vis_xor(REF_0
, REF_2
, TMP6
);
598 vis_xor(REF_4
, REF_6
, TMP8
);
600 vis_and(TMP6
, MASK_fe
, TMP6
);
602 vis_mul8x16(CONST_128
, TMP6
, TMP6
);
603 vis_and(TMP8
, MASK_fe
, TMP8
);
605 vis_mul8x16(CONST_128
, TMP8
, TMP8
);
606 vis_or(REF_0
, REF_2
, TMP10
);
608 vis_or(REF_4
, REF_6
, TMP12
);
610 vis_and(TMP6
, MASK_7f
, TMP6
);
612 vis_and(TMP8
, MASK_7f
, TMP8
);
614 vis_psub16(TMP10
, TMP6
, TMP6
);
615 vis_st64(TMP6
, dest
[0]);
617 vis_psub16(TMP12
, TMP8
, TMP8
);
618 vis_st64_2(TMP8
, dest
, 8);
621 static void MC_put_x_8_vis (uint8_t * dest
, const uint8_t * _ref
,
622 const int stride
, int height
)
624 uint8_t *ref
= (uint8_t *) _ref
;
625 unsigned long off
= (unsigned long) ref
& 0x7;
626 unsigned long off_plus_1
= off
+ 1;
628 ref
= vis_alignaddr(ref
);
630 vis_ld64(ref
[0], TMP0
);
632 vis_ld64(ref
[8], TMP2
);
634 vis_ld64(constants_fe
[0], MASK_fe
);
636 vis_ld64(constants_7f
[0], MASK_7f
);
638 vis_ld64(constants128
[0], CONST_128
);
639 vis_faligndata(TMP0
, TMP2
, REF_0
);
642 vis_alignaddr_g0((void *)off_plus_1
);
643 vis_faligndata(TMP0
, TMP2
, REF_2
);
645 vis_src1(TMP2
, REF_2
);
649 height
= (height
>> 1) - 1;
652 vis_ld64(ref
[0], TMP0
);
653 vis_xor(REF_0
, REF_2
, TMP4
);
655 vis_ld64_2(ref
, 8, TMP2
);
656 vis_and(TMP4
, MASK_fe
, TMP4
);
659 vis_ld64(ref
[0], TMP8
);
660 vis_or(REF_0
, REF_2
, TMP6
);
661 vis_mul8x16(CONST_128
, TMP4
, TMP4
);
663 vis_alignaddr_g0((void *)off
);
665 vis_ld64_2(ref
, 8, TMP10
);
667 vis_faligndata(TMP0
, TMP2
, REF_0
);
670 vis_alignaddr_g0((void *)off_plus_1
);
671 vis_faligndata(TMP0
, TMP2
, REF_2
);
673 vis_src1(TMP2
, REF_2
);
676 vis_and(TMP4
, MASK_7f
, TMP4
);
678 vis_psub16(TMP6
, TMP4
, DST_0
);
679 vis_st64(DST_0
, dest
[0]);
682 vis_xor(REF_0
, REF_2
, TMP12
);
684 vis_and(TMP12
, MASK_fe
, TMP12
);
686 vis_or(REF_0
, REF_2
, TMP14
);
687 vis_mul8x16(CONST_128
, TMP12
, TMP12
);
689 vis_alignaddr_g0((void *)off
);
690 vis_faligndata(TMP8
, TMP10
, REF_0
);
692 vis_alignaddr_g0((void *)off_plus_1
);
693 vis_faligndata(TMP8
, TMP10
, REF_2
);
695 vis_src1(TMP10
, REF_2
);
698 vis_and(TMP12
, MASK_7f
, TMP12
);
700 vis_psub16(TMP14
, TMP12
, DST_0
);
701 vis_st64(DST_0
, dest
[0]);
705 vis_ld64(ref
[0], TMP0
);
706 vis_xor(REF_0
, REF_2
, TMP4
);
708 vis_ld64_2(ref
, 8, TMP2
);
709 vis_and(TMP4
, MASK_fe
, TMP4
);
711 vis_or(REF_0
, REF_2
, TMP6
);
712 vis_mul8x16(CONST_128
, TMP4
, TMP4
);
714 vis_alignaddr_g0((void *)off
);
716 vis_faligndata(TMP0
, TMP2
, REF_0
);
719 vis_alignaddr_g0((void *)off_plus_1
);
720 vis_faligndata(TMP0
, TMP2
, REF_2
);
722 vis_src1(TMP2
, REF_2
);
725 vis_and(TMP4
, MASK_7f
, TMP4
);
727 vis_psub16(TMP6
, TMP4
, DST_0
);
728 vis_st64(DST_0
, dest
[0]);
731 vis_xor(REF_0
, REF_2
, TMP12
);
733 vis_and(TMP12
, MASK_fe
, TMP12
);
735 vis_or(REF_0
, REF_2
, TMP14
);
736 vis_mul8x16(CONST_128
, TMP12
, TMP12
);
738 vis_and(TMP12
, MASK_7f
, TMP12
);
740 vis_psub16(TMP14
, TMP12
, DST_0
);
741 vis_st64(DST_0
, dest
[0]);
745 static void MC_avg_x_16_vis (uint8_t * dest
, const uint8_t * _ref
,
746 const int stride
, int height
)
748 uint8_t *ref
= (uint8_t *) _ref
;
749 unsigned long off
= (unsigned long) ref
& 0x7;
750 unsigned long off_plus_1
= off
+ 1;
752 vis_set_gsr(5 << VIS_GSR_SCALEFACT_SHIFT
);
754 vis_ld64(constants3
[0], CONST_3
);
756 vis_ld64(constants256_512
[0], CONST_256
);
758 ref
= vis_alignaddr(ref
);
760 vis_ld64(ref
[0], TMP0
);
762 vis_ld64(ref
[8], TMP2
);
764 vis_alignaddr_g0((void *)off
);
766 vis_ld64(ref
[16], TMP4
);
768 vis_ld64(dest
[0], DST_0
);
769 vis_faligndata(TMP0
, TMP2
, REF_0
);
771 vis_ld64(dest
[8], DST_2
);
772 vis_faligndata(TMP2
, TMP4
, REF_4
);
775 vis_alignaddr_g0((void *)off_plus_1
);
776 vis_faligndata(TMP0
, TMP2
, REF_2
);
777 vis_faligndata(TMP2
, TMP4
, REF_6
);
779 vis_src1(TMP2
, REF_2
);
780 vis_src1(TMP4
, REF_6
);
783 vis_mul8x16au(REF_0
, CONST_256
, TMP0
);
785 vis_pmerge(ZERO
, REF_2
, TMP4
);
786 vis_mul8x16au(REF_0_1
, CONST_256
, TMP2
);
788 vis_pmerge(ZERO
, REF_2_1
, TMP6
);
790 vis_padd16(TMP0
, TMP4
, TMP0
);
792 vis_mul8x16al(DST_0
, CONST_512
, TMP4
);
793 vis_padd16(TMP2
, TMP6
, TMP2
);
795 vis_mul8x16al(DST_1
, CONST_512
, TMP6
);
797 vis_mul8x16au(REF_6
, CONST_256
, TMP12
);
799 vis_padd16(TMP0
, TMP4
, TMP0
);
800 vis_mul8x16au(REF_6_1
, CONST_256
, TMP14
);
802 vis_padd16(TMP2
, TMP6
, TMP2
);
803 vis_mul8x16au(REF_4
, CONST_256
, TMP16
);
805 vis_padd16(TMP0
, CONST_3
, TMP8
);
806 vis_mul8x16au(REF_4_1
, CONST_256
, TMP18
);
808 vis_padd16(TMP2
, CONST_3
, TMP10
);
809 vis_pack16(TMP8
, DST_0
);
811 vis_pack16(TMP10
, DST_1
);
812 vis_padd16(TMP16
, TMP12
, TMP0
);
814 vis_st64(DST_0
, dest
[0]);
815 vis_mul8x16al(DST_2
, CONST_512
, TMP4
);
816 vis_padd16(TMP18
, TMP14
, TMP2
);
818 vis_mul8x16al(DST_3
, CONST_512
, TMP6
);
819 vis_padd16(TMP0
, CONST_3
, TMP0
);
821 vis_padd16(TMP2
, CONST_3
, TMP2
);
823 vis_padd16(TMP0
, TMP4
, TMP0
);
825 vis_padd16(TMP2
, TMP6
, TMP2
);
826 vis_pack16(TMP0
, DST_2
);
828 vis_pack16(TMP2
, DST_3
);
829 vis_st64(DST_2
, dest
[8]);
836 static void MC_avg_x_8_vis (uint8_t * dest
, const uint8_t * _ref
,
837 const int stride
, int height
)
839 uint8_t *ref
= (uint8_t *) _ref
;
840 unsigned long off
= (unsigned long) ref
& 0x7;
841 unsigned long off_plus_1
= off
+ 1;
842 int stride_times_2
= stride
<< 1;
844 vis_set_gsr(5 << VIS_GSR_SCALEFACT_SHIFT
);
846 vis_ld64(constants3
[0], CONST_3
);
848 vis_ld64(constants256_512
[0], CONST_256
);
850 ref
= vis_alignaddr(ref
);
853 vis_ld64(ref
[0], TMP0
);
855 vis_ld64_2(ref
, 8, TMP2
);
858 vis_alignaddr_g0((void *)off
);
860 vis_ld64(ref
[0], TMP4
);
861 vis_faligndata(TMP0
, TMP2
, REF_0
);
863 vis_ld64_2(ref
, 8, TMP6
);
866 vis_ld64(ref
[0], TMP8
);
868 vis_ld64_2(ref
, 8, TMP10
);
870 vis_faligndata(TMP4
, TMP6
, REF_4
);
872 vis_ld64(ref
[0], TMP12
);
874 vis_ld64_2(ref
, 8, TMP14
);
876 vis_faligndata(TMP8
, TMP10
, REF_S0
);
878 vis_faligndata(TMP12
, TMP14
, REF_S4
);
881 vis_alignaddr_g0((void *)off_plus_1
);
883 vis_ld64(dest
[0], DST_0
);
884 vis_faligndata(TMP0
, TMP2
, REF_2
);
886 vis_ld64_2(dest
, stride
, DST_2
);
887 vis_faligndata(TMP4
, TMP6
, REF_6
);
889 vis_faligndata(TMP8
, TMP10
, REF_S2
);
891 vis_faligndata(TMP12
, TMP14
, REF_S6
);
893 vis_ld64(dest
[0], DST_0
);
894 vis_src1(TMP2
, REF_2
);
896 vis_ld64_2(dest
, stride
, DST_2
);
897 vis_src1(TMP6
, REF_6
);
899 vis_src1(TMP10
, REF_S2
);
901 vis_src1(TMP14
, REF_S6
);
904 vis_pmerge(ZERO
, REF_0
, TMP0
);
905 vis_mul8x16au(REF_0_1
, CONST_256
, TMP2
);
907 vis_pmerge(ZERO
, REF_2
, TMP4
);
908 vis_mul8x16au(REF_2_1
, CONST_256
, TMP6
);
910 vis_padd16(TMP0
, CONST_3
, TMP0
);
911 vis_mul8x16al(DST_0
, CONST_512
, TMP16
);
913 vis_padd16(TMP2
, CONST_3
, TMP2
);
914 vis_mul8x16al(DST_1
, CONST_512
, TMP18
);
916 vis_padd16(TMP0
, TMP4
, TMP0
);
917 vis_mul8x16au(REF_4
, CONST_256
, TMP8
);
919 vis_padd16(TMP2
, TMP6
, TMP2
);
920 vis_mul8x16au(REF_4_1
, CONST_256
, TMP10
);
922 vis_padd16(TMP0
, TMP16
, TMP0
);
923 vis_mul8x16au(REF_6
, CONST_256
, TMP12
);
925 vis_padd16(TMP2
, TMP18
, TMP2
);
926 vis_mul8x16au(REF_6_1
, CONST_256
, TMP14
);
928 vis_padd16(TMP8
, CONST_3
, TMP8
);
929 vis_mul8x16al(DST_2
, CONST_512
, TMP16
);
931 vis_padd16(TMP8
, TMP12
, TMP8
);
932 vis_mul8x16al(DST_3
, CONST_512
, TMP18
);
934 vis_padd16(TMP10
, TMP14
, TMP10
);
935 vis_pack16(TMP0
, DST_0
);
937 vis_pack16(TMP2
, DST_1
);
938 vis_st64(DST_0
, dest
[0]);
940 vis_padd16(TMP10
, CONST_3
, TMP10
);
942 vis_ld64_2(dest
, stride
, DST_0
);
943 vis_padd16(TMP8
, TMP16
, TMP8
);
945 vis_ld64_2(dest
, stride_times_2
, TMP4
/*DST_2*/);
946 vis_padd16(TMP10
, TMP18
, TMP10
);
947 vis_pack16(TMP8
, DST_2
);
949 vis_pack16(TMP10
, DST_3
);
950 vis_st64(DST_2
, dest
[0]);
953 vis_mul8x16au(REF_S0_1
, CONST_256
, TMP2
);
954 vis_pmerge(ZERO
, REF_S0
, TMP0
);
956 vis_pmerge(ZERO
, REF_S2
, TMP24
);
957 vis_mul8x16au(REF_S2_1
, CONST_256
, TMP6
);
959 vis_padd16(TMP0
, CONST_3
, TMP0
);
960 vis_mul8x16au(REF_S4
, CONST_256
, TMP8
);
962 vis_padd16(TMP2
, CONST_3
, TMP2
);
963 vis_mul8x16au(REF_S4_1
, CONST_256
, TMP10
);
965 vis_padd16(TMP0
, TMP24
, TMP0
);
966 vis_mul8x16au(REF_S6
, CONST_256
, TMP12
);
968 vis_padd16(TMP2
, TMP6
, TMP2
);
969 vis_mul8x16au(REF_S6_1
, CONST_256
, TMP14
);
971 vis_padd16(TMP8
, CONST_3
, TMP8
);
972 vis_mul8x16al(DST_0
, CONST_512
, TMP16
);
974 vis_padd16(TMP10
, CONST_3
, TMP10
);
975 vis_mul8x16al(DST_1
, CONST_512
, TMP18
);
977 vis_padd16(TMP8
, TMP12
, TMP8
);
978 vis_mul8x16al(TMP4
/*DST_2*/, CONST_512
, TMP20
);
980 vis_mul8x16al(TMP5
/*DST_3*/, CONST_512
, TMP22
);
981 vis_padd16(TMP0
, TMP16
, TMP0
);
983 vis_padd16(TMP2
, TMP18
, TMP2
);
984 vis_pack16(TMP0
, DST_0
);
986 vis_padd16(TMP10
, TMP14
, TMP10
);
987 vis_pack16(TMP2
, DST_1
);
988 vis_st64(DST_0
, dest
[0]);
991 vis_padd16(TMP8
, TMP20
, TMP8
);
993 vis_padd16(TMP10
, TMP22
, TMP10
);
994 vis_pack16(TMP8
, DST_2
);
996 vis_pack16(TMP10
, DST_3
);
997 vis_st64(DST_2
, dest
[0]);
1002 static void MC_put_y_16_vis (uint8_t * dest
, const uint8_t * _ref
,
1003 const int stride
, int height
)
1005 uint8_t *ref
= (uint8_t *) _ref
;
1008 ref
= vis_alignaddr(ref
);
1009 offset
= (ref
!= _ref
) ? 16 : 0;
1011 vis_ld64(ref
[0], TMP0
);
1013 vis_ld64_2(ref
, 8, TMP2
);
1015 vis_ld64_2(ref
, offset
, TMP4
);
1018 vis_ld64(ref
[0], TMP6
);
1019 vis_faligndata(TMP0
, TMP2
, REF_0
);
1021 vis_ld64_2(ref
, 8, TMP8
);
1022 vis_faligndata(TMP2
, TMP4
, REF_4
);
1024 vis_ld64_2(ref
, offset
, TMP10
);
1027 vis_ld64(constants_fe
[0], MASK_fe
);
1028 vis_faligndata(TMP6
, TMP8
, REF_2
);
1030 vis_ld64(constants_7f
[0], MASK_7f
);
1031 vis_faligndata(TMP8
, TMP10
, REF_6
);
1033 vis_ld64(constants128
[0], CONST_128
);
1034 height
= (height
>> 1) - 1;
1035 do { /* 24 cycles */
1036 vis_ld64(ref
[0], TMP0
);
1037 vis_xor(REF_0
, REF_2
, TMP12
);
1039 vis_ld64_2(ref
, 8, TMP2
);
1040 vis_xor(REF_4
, REF_6
, TMP16
);
1042 vis_ld64_2(ref
, offset
, TMP4
);
1044 vis_or(REF_0
, REF_2
, TMP14
);
1046 vis_ld64(ref
[0], TMP6
);
1047 vis_or(REF_4
, REF_6
, TMP18
);
1049 vis_ld64_2(ref
, 8, TMP8
);
1050 vis_faligndata(TMP0
, TMP2
, REF_0
);
1052 vis_ld64_2(ref
, offset
, TMP10
);
1054 vis_faligndata(TMP2
, TMP4
, REF_4
);
1056 vis_and(TMP12
, MASK_fe
, TMP12
);
1058 vis_and(TMP16
, MASK_fe
, TMP16
);
1059 vis_mul8x16(CONST_128
, TMP12
, TMP12
);
1061 vis_mul8x16(CONST_128
, TMP16
, TMP16
);
1062 vis_xor(REF_0
, REF_2
, TMP0
);
1064 vis_xor(REF_4
, REF_6
, TMP2
);
1066 vis_or(REF_0
, REF_2
, TMP20
);
1068 vis_and(TMP12
, MASK_7f
, TMP12
);
1070 vis_and(TMP16
, MASK_7f
, TMP16
);
1072 vis_psub16(TMP14
, TMP12
, TMP12
);
1073 vis_st64(TMP12
, dest
[0]);
1075 vis_psub16(TMP18
, TMP16
, TMP16
);
1076 vis_st64_2(TMP16
, dest
, 8);
1079 vis_or(REF_4
, REF_6
, TMP18
);
1081 vis_and(TMP0
, MASK_fe
, TMP0
);
1083 vis_and(TMP2
, MASK_fe
, TMP2
);
1084 vis_mul8x16(CONST_128
, TMP0
, TMP0
);
1086 vis_faligndata(TMP6
, TMP8
, REF_2
);
1087 vis_mul8x16(CONST_128
, TMP2
, TMP2
);
1089 vis_faligndata(TMP8
, TMP10
, REF_6
);
1091 vis_and(TMP0
, MASK_7f
, TMP0
);
1093 vis_and(TMP2
, MASK_7f
, TMP2
);
1095 vis_psub16(TMP20
, TMP0
, TMP0
);
1096 vis_st64(TMP0
, dest
[0]);
1098 vis_psub16(TMP18
, TMP2
, TMP2
);
1099 vis_st64_2(TMP2
, dest
, 8);
1103 vis_ld64(ref
[0], TMP0
);
1104 vis_xor(REF_0
, REF_2
, TMP12
);
1106 vis_ld64_2(ref
, 8, TMP2
);
1107 vis_xor(REF_4
, REF_6
, TMP16
);
1109 vis_ld64_2(ref
, offset
, TMP4
);
1110 vis_or(REF_0
, REF_2
, TMP14
);
1112 vis_or(REF_4
, REF_6
, TMP18
);
1114 vis_faligndata(TMP0
, TMP2
, REF_0
);
1116 vis_faligndata(TMP2
, TMP4
, REF_4
);
1118 vis_and(TMP12
, MASK_fe
, TMP12
);
1120 vis_and(TMP16
, MASK_fe
, TMP16
);
1121 vis_mul8x16(CONST_128
, TMP12
, TMP12
);
1123 vis_mul8x16(CONST_128
, TMP16
, TMP16
);
1124 vis_xor(REF_0
, REF_2
, TMP0
);
1126 vis_xor(REF_4
, REF_6
, TMP2
);
1128 vis_or(REF_0
, REF_2
, TMP20
);
1130 vis_and(TMP12
, MASK_7f
, TMP12
);
1132 vis_and(TMP16
, MASK_7f
, TMP16
);
1134 vis_psub16(TMP14
, TMP12
, TMP12
);
1135 vis_st64(TMP12
, dest
[0]);
1137 vis_psub16(TMP18
, TMP16
, TMP16
);
1138 vis_st64_2(TMP16
, dest
, 8);
1141 vis_or(REF_4
, REF_6
, TMP18
);
1143 vis_and(TMP0
, MASK_fe
, TMP0
);
1145 vis_and(TMP2
, MASK_fe
, TMP2
);
1146 vis_mul8x16(CONST_128
, TMP0
, TMP0
);
1148 vis_mul8x16(CONST_128
, TMP2
, TMP2
);
1150 vis_and(TMP0
, MASK_7f
, TMP0
);
1152 vis_and(TMP2
, MASK_7f
, TMP2
);
1154 vis_psub16(TMP20
, TMP0
, TMP0
);
1155 vis_st64(TMP0
, dest
[0]);
1157 vis_psub16(TMP18
, TMP2
, TMP2
);
1158 vis_st64_2(TMP2
, dest
, 8);
1161 static void MC_put_y_8_vis (uint8_t * dest
, const uint8_t * _ref
,
1162 const int stride
, int height
)
1164 uint8_t *ref
= (uint8_t *) _ref
;
1167 ref
= vis_alignaddr(ref
);
1168 offset
= (ref
!= _ref
) ? 8 : 0;
1170 vis_ld64(ref
[0], TMP0
);
1172 vis_ld64_2(ref
, offset
, TMP2
);
1175 vis_ld64(ref
[0], TMP4
);
1177 vis_ld64_2(ref
, offset
, TMP6
);
1180 vis_ld64(constants_fe
[0], MASK_fe
);
1181 vis_faligndata(TMP0
, TMP2
, REF_0
);
1183 vis_ld64(constants_7f
[0], MASK_7f
);
1184 vis_faligndata(TMP4
, TMP6
, REF_2
);
1186 vis_ld64(constants128
[0], CONST_128
);
1187 height
= (height
>> 1) - 1;
1188 do { /* 12 cycles */
1189 vis_ld64(ref
[0], TMP0
);
1190 vis_xor(REF_0
, REF_2
, TMP4
);
1192 vis_ld64_2(ref
, offset
, TMP2
);
1194 vis_and(TMP4
, MASK_fe
, TMP4
);
1196 vis_or(REF_0
, REF_2
, TMP6
);
1197 vis_mul8x16(CONST_128
, TMP4
, TMP4
);
1199 vis_faligndata(TMP0
, TMP2
, REF_0
);
1200 vis_ld64(ref
[0], TMP0
);
1202 vis_ld64_2(ref
, offset
, TMP2
);
1204 vis_xor(REF_0
, REF_2
, TMP12
);
1206 vis_and(TMP4
, MASK_7f
, TMP4
);
1208 vis_and(TMP12
, MASK_fe
, TMP12
);
1210 vis_mul8x16(CONST_128
, TMP12
, TMP12
);
1211 vis_or(REF_0
, REF_2
, TMP14
);
1213 vis_psub16(TMP6
, TMP4
, DST_0
);
1214 vis_st64(DST_0
, dest
[0]);
1217 vis_faligndata(TMP0
, TMP2
, REF_2
);
1219 vis_and(TMP12
, MASK_7f
, TMP12
);
1221 vis_psub16(TMP14
, TMP12
, DST_0
);
1222 vis_st64(DST_0
, dest
[0]);
1226 vis_ld64(ref
[0], TMP0
);
1227 vis_xor(REF_0
, REF_2
, TMP4
);
1229 vis_ld64_2(ref
, offset
, TMP2
);
1230 vis_and(TMP4
, MASK_fe
, TMP4
);
1232 vis_or(REF_0
, REF_2
, TMP6
);
1233 vis_mul8x16(CONST_128
, TMP4
, TMP4
);
1235 vis_faligndata(TMP0
, TMP2
, REF_0
);
1237 vis_xor(REF_0
, REF_2
, TMP12
);
1239 vis_and(TMP4
, MASK_7f
, TMP4
);
1241 vis_and(TMP12
, MASK_fe
, TMP12
);
1243 vis_mul8x16(CONST_128
, TMP12
, TMP12
);
1244 vis_or(REF_0
, REF_2
, TMP14
);
1246 vis_psub16(TMP6
, TMP4
, DST_0
);
1247 vis_st64(DST_0
, dest
[0]);
1250 vis_and(TMP12
, MASK_7f
, TMP12
);
1252 vis_psub16(TMP14
, TMP12
, DST_0
);
1253 vis_st64(DST_0
, dest
[0]);
1256 static void MC_avg_y_16_vis (uint8_t * dest
, const uint8_t * _ref
,
1257 const int stride
, int height
)
1259 uint8_t *ref
= (uint8_t *) _ref
;
1260 int stride_8
= stride
+ 8;
1264 vis_set_gsr(5 << VIS_GSR_SCALEFACT_SHIFT
);
1266 ref
= vis_alignaddr(ref
);
1267 offset
= (ref
!= _ref
) ? 16 : 0;
1269 vis_ld64(ref
[ 0], TMP0
);
1272 vis_ld64(ref
[ 8], TMP2
);
1274 vis_ld64_2(ref
, offset
, TMP4
);
1275 stride_16
= stride
+ offset
;
1277 vis_ld64(constants3
[0], CONST_3
);
1278 vis_faligndata(TMP0
, TMP2
, REF_2
);
1280 vis_ld64(constants256_512
[0], CONST_256
);
1281 vis_faligndata(TMP2
, TMP4
, REF_6
);
1284 do { /* 31 cycles */
1285 vis_ld64_2(ref
, stride
, TMP0
);
1286 vis_pmerge(ZERO
, REF_2
, TMP12
);
1287 vis_mul8x16au(REF_2_1
, CONST_256
, TMP14
);
1289 vis_ld64_2(ref
, stride_8
, TMP2
);
1290 vis_pmerge(ZERO
, REF_6
, TMP16
);
1291 vis_mul8x16au(REF_6_1
, CONST_256
, TMP18
);
1293 vis_ld64_2(ref
, stride_16
, TMP4
);
1296 vis_ld64(dest
[0], DST_0
);
1297 vis_faligndata(TMP0
, TMP2
, REF_0
);
1299 vis_ld64_2(dest
, 8, DST_2
);
1300 vis_faligndata(TMP2
, TMP4
, REF_4
);
1302 vis_ld64_2(ref
, stride
, TMP6
);
1303 vis_pmerge(ZERO
, REF_0
, TMP0
);
1304 vis_mul8x16au(REF_0_1
, CONST_256
, TMP2
);
1306 vis_ld64_2(ref
, stride_8
, TMP8
);
1307 vis_pmerge(ZERO
, REF_4
, TMP4
);
1309 vis_ld64_2(ref
, stride_16
, TMP10
);
1312 vis_ld64_2(dest
, stride
, REF_S0
/*DST_4*/);
1313 vis_faligndata(TMP6
, TMP8
, REF_2
);
1314 vis_mul8x16au(REF_4_1
, CONST_256
, TMP6
);
1316 vis_ld64_2(dest
, stride_8
, REF_S2
/*DST_6*/);
1317 vis_faligndata(TMP8
, TMP10
, REF_6
);
1318 vis_mul8x16al(DST_0
, CONST_512
, TMP20
);
1320 vis_padd16(TMP0
, CONST_3
, TMP0
);
1321 vis_mul8x16al(DST_1
, CONST_512
, TMP22
);
1323 vis_padd16(TMP2
, CONST_3
, TMP2
);
1324 vis_mul8x16al(DST_2
, CONST_512
, TMP24
);
1326 vis_padd16(TMP4
, CONST_3
, TMP4
);
1327 vis_mul8x16al(DST_3
, CONST_512
, TMP26
);
1329 vis_padd16(TMP6
, CONST_3
, TMP6
);
1331 vis_padd16(TMP12
, TMP20
, TMP12
);
1332 vis_mul8x16al(REF_S0
, CONST_512
, TMP20
);
1334 vis_padd16(TMP14
, TMP22
, TMP14
);
1335 vis_mul8x16al(REF_S0_1
, CONST_512
, TMP22
);
1337 vis_padd16(TMP16
, TMP24
, TMP16
);
1338 vis_mul8x16al(REF_S2
, CONST_512
, TMP24
);
1340 vis_padd16(TMP18
, TMP26
, TMP18
);
1341 vis_mul8x16al(REF_S2_1
, CONST_512
, TMP26
);
1343 vis_padd16(TMP12
, TMP0
, TMP12
);
1344 vis_mul8x16au(REF_2
, CONST_256
, TMP28
);
1346 vis_padd16(TMP14
, TMP2
, TMP14
);
1347 vis_mul8x16au(REF_2_1
, CONST_256
, TMP30
);
1349 vis_padd16(TMP16
, TMP4
, TMP16
);
1350 vis_mul8x16au(REF_6
, CONST_256
, REF_S4
);
1352 vis_padd16(TMP18
, TMP6
, TMP18
);
1353 vis_mul8x16au(REF_6_1
, CONST_256
, REF_S6
);
1355 vis_pack16(TMP12
, DST_0
);
1356 vis_padd16(TMP28
, TMP0
, TMP12
);
1358 vis_pack16(TMP14
, DST_1
);
1359 vis_st64(DST_0
, dest
[0]);
1360 vis_padd16(TMP30
, TMP2
, TMP14
);
1362 vis_pack16(TMP16
, DST_2
);
1363 vis_padd16(REF_S4
, TMP4
, TMP16
);
1365 vis_pack16(TMP18
, DST_3
);
1366 vis_st64_2(DST_2
, dest
, 8);
1368 vis_padd16(REF_S6
, TMP6
, TMP18
);
1370 vis_padd16(TMP12
, TMP20
, TMP12
);
1372 vis_padd16(TMP14
, TMP22
, TMP14
);
1373 vis_pack16(TMP12
, DST_0
);
1375 vis_padd16(TMP16
, TMP24
, TMP16
);
1376 vis_pack16(TMP14
, DST_1
);
1377 vis_st64(DST_0
, dest
[0]);
1379 vis_padd16(TMP18
, TMP26
, TMP18
);
1380 vis_pack16(TMP16
, DST_2
);
1382 vis_pack16(TMP18
, DST_3
);
1383 vis_st64_2(DST_2
, dest
, 8);
1388 static void MC_avg_y_8_vis (uint8_t * dest
, const uint8_t * _ref
,
1389 const int stride
, int height
)
1391 uint8_t *ref
= (uint8_t *) _ref
;
1395 vis_set_gsr(5 << VIS_GSR_SCALEFACT_SHIFT
);
1397 ref
= vis_alignaddr(ref
);
1398 offset
= (ref
!= _ref
) ? 8 : 0;
1400 vis_ld64(ref
[ 0], TMP0
);
1403 vis_ld64_2(ref
, offset
, TMP2
);
1404 stride_8
= stride
+ offset
;
1406 vis_ld64(constants3
[0], CONST_3
);
1407 vis_faligndata(TMP0
, TMP2
, REF_2
);
1409 vis_ld64(constants256_512
[0], CONST_256
);
1412 do { /* 20 cycles */
1413 vis_ld64_2(ref
, stride
, TMP0
);
1414 vis_pmerge(ZERO
, REF_2
, TMP8
);
1415 vis_mul8x16au(REF_2_1
, CONST_256
, TMP10
);
1417 vis_ld64_2(ref
, stride_8
, TMP2
);
1420 vis_ld64(dest
[0], DST_0
);
1422 vis_ld64_2(dest
, stride
, DST_2
);
1423 vis_faligndata(TMP0
, TMP2
, REF_0
);
1425 vis_ld64_2(ref
, stride
, TMP4
);
1426 vis_mul8x16al(DST_0
, CONST_512
, TMP16
);
1427 vis_pmerge(ZERO
, REF_0
, TMP12
);
1429 vis_ld64_2(ref
, stride_8
, TMP6
);
1431 vis_mul8x16al(DST_1
, CONST_512
, TMP18
);
1432 vis_pmerge(ZERO
, REF_0_1
, TMP14
);
1434 vis_padd16(TMP12
, CONST_3
, TMP12
);
1435 vis_mul8x16al(DST_2
, CONST_512
, TMP24
);
1437 vis_padd16(TMP14
, CONST_3
, TMP14
);
1438 vis_mul8x16al(DST_3
, CONST_512
, TMP26
);
1440 vis_faligndata(TMP4
, TMP6
, REF_2
);
1442 vis_padd16(TMP8
, TMP12
, TMP8
);
1444 vis_padd16(TMP10
, TMP14
, TMP10
);
1445 vis_mul8x16au(REF_2
, CONST_256
, TMP20
);
1447 vis_padd16(TMP8
, TMP16
, TMP0
);
1448 vis_mul8x16au(REF_2_1
, CONST_256
, TMP22
);
1450 vis_padd16(TMP10
, TMP18
, TMP2
);
1451 vis_pack16(TMP0
, DST_0
);
1453 vis_pack16(TMP2
, DST_1
);
1454 vis_st64(DST_0
, dest
[0]);
1456 vis_padd16(TMP12
, TMP20
, TMP12
);
1458 vis_padd16(TMP14
, TMP22
, TMP14
);
1460 vis_padd16(TMP12
, TMP24
, TMP0
);
1462 vis_padd16(TMP14
, TMP26
, TMP2
);
1463 vis_pack16(TMP0
, DST_2
);
1465 vis_pack16(TMP2
, DST_3
);
1466 vis_st64(DST_2
, dest
[0]);
1471 static void MC_put_xy_16_vis (uint8_t * dest
, const uint8_t * _ref
,
1472 const int stride
, int height
)
1474 uint8_t *ref
= (uint8_t *) _ref
;
1475 unsigned long off
= (unsigned long) ref
& 0x7;
1476 unsigned long off_plus_1
= off
+ 1;
1477 int stride_8
= stride
+ 8;
1478 int stride_16
= stride
+ 16;
1480 vis_set_gsr(5 << VIS_GSR_SCALEFACT_SHIFT
);
1482 ref
= vis_alignaddr(ref
);
1484 vis_ld64(ref
[ 0], TMP0
);
1487 vis_ld64(ref
[ 8], TMP2
);
1489 vis_ld64(ref
[16], TMP4
);
1491 vis_ld64(constants2
[0], CONST_2
);
1492 vis_faligndata(TMP0
, TMP2
, REF_S0
);
1494 vis_ld64(constants256_512
[0], CONST_256
);
1495 vis_faligndata(TMP2
, TMP4
, REF_S4
);
1498 vis_alignaddr_g0((void *)off_plus_1
);
1499 vis_faligndata(TMP0
, TMP2
, REF_S2
);
1500 vis_faligndata(TMP2
, TMP4
, REF_S6
);
1502 vis_src1(TMP2
, REF_S2
);
1503 vis_src1(TMP4
, REF_S6
);
1508 vis_ld64_2(ref
, stride
, TMP0
);
1509 vis_mul8x16au(REF_S0
, CONST_256
, TMP12
);
1510 vis_pmerge(ZERO
, REF_S0_1
, TMP14
);
1512 vis_alignaddr_g0((void *)off
);
1514 vis_ld64_2(ref
, stride_8
, TMP2
);
1515 vis_mul8x16au(REF_S2
, CONST_256
, TMP16
);
1516 vis_pmerge(ZERO
, REF_S2_1
, TMP18
);
1518 vis_ld64_2(ref
, stride_16
, TMP4
);
1520 vis_mul8x16au(REF_S4
, CONST_256
, TMP20
);
1521 vis_pmerge(ZERO
, REF_S4_1
, TMP22
);
1523 vis_ld64_2(ref
, stride
, TMP6
);
1524 vis_mul8x16au(REF_S6
, CONST_256
, TMP24
);
1525 vis_pmerge(ZERO
, REF_S6_1
, TMP26
);
1527 vis_ld64_2(ref
, stride_8
, TMP8
);
1528 vis_faligndata(TMP0
, TMP2
, REF_0
);
1530 vis_ld64_2(ref
, stride_16
, TMP10
);
1532 vis_faligndata(TMP2
, TMP4
, REF_4
);
1534 vis_faligndata(TMP6
, TMP8
, REF_S0
);
1536 vis_faligndata(TMP8
, TMP10
, REF_S4
);
1539 vis_alignaddr_g0((void *)off_plus_1
);
1540 vis_faligndata(TMP0
, TMP2
, REF_2
);
1541 vis_faligndata(TMP2
, TMP4
, REF_6
);
1542 vis_faligndata(TMP6
, TMP8
, REF_S2
);
1543 vis_faligndata(TMP8
, TMP10
, REF_S6
);
1545 vis_src1(TMP2
, REF_2
);
1546 vis_src1(TMP4
, REF_6
);
1547 vis_src1(TMP8
, REF_S2
);
1548 vis_src1(TMP10
, REF_S6
);
1551 vis_mul8x16au(REF_0
, CONST_256
, TMP0
);
1552 vis_pmerge(ZERO
, REF_0_1
, TMP2
);
1554 vis_mul8x16au(REF_2
, CONST_256
, TMP4
);
1555 vis_pmerge(ZERO
, REF_2_1
, TMP6
);
1557 vis_padd16(TMP0
, CONST_2
, TMP8
);
1558 vis_mul8x16au(REF_4
, CONST_256
, TMP0
);
1560 vis_padd16(TMP2
, CONST_2
, TMP10
);
1561 vis_mul8x16au(REF_4_1
, CONST_256
, TMP2
);
1563 vis_padd16(TMP8
, TMP4
, TMP8
);
1564 vis_mul8x16au(REF_6
, CONST_256
, TMP4
);
1566 vis_padd16(TMP10
, TMP6
, TMP10
);
1567 vis_mul8x16au(REF_6_1
, CONST_256
, TMP6
);
1569 vis_padd16(TMP12
, TMP8
, TMP12
);
1571 vis_padd16(TMP14
, TMP10
, TMP14
);
1573 vis_padd16(TMP12
, TMP16
, TMP12
);
1575 vis_padd16(TMP14
, TMP18
, TMP14
);
1576 vis_pack16(TMP12
, DST_0
);
1578 vis_pack16(TMP14
, DST_1
);
1579 vis_st64(DST_0
, dest
[0]);
1580 vis_padd16(TMP0
, CONST_2
, TMP12
);
1582 vis_mul8x16au(REF_S0
, CONST_256
, TMP0
);
1583 vis_padd16(TMP2
, CONST_2
, TMP14
);
1585 vis_mul8x16au(REF_S0_1
, CONST_256
, TMP2
);
1586 vis_padd16(TMP12
, TMP4
, TMP12
);
1588 vis_mul8x16au(REF_S2
, CONST_256
, TMP4
);
1589 vis_padd16(TMP14
, TMP6
, TMP14
);
1591 vis_mul8x16au(REF_S2_1
, CONST_256
, TMP6
);
1592 vis_padd16(TMP20
, TMP12
, TMP20
);
1594 vis_padd16(TMP22
, TMP14
, TMP22
);
1596 vis_padd16(TMP20
, TMP24
, TMP20
);
1598 vis_padd16(TMP22
, TMP26
, TMP22
);
1599 vis_pack16(TMP20
, DST_2
);
1601 vis_pack16(TMP22
, DST_3
);
1602 vis_st64_2(DST_2
, dest
, 8);
1604 vis_padd16(TMP0
, TMP4
, TMP24
);
1606 vis_mul8x16au(REF_S4
, CONST_256
, TMP0
);
1607 vis_padd16(TMP2
, TMP6
, TMP26
);
1609 vis_mul8x16au(REF_S4_1
, CONST_256
, TMP2
);
1610 vis_padd16(TMP24
, TMP8
, TMP24
);
1612 vis_padd16(TMP26
, TMP10
, TMP26
);
1613 vis_pack16(TMP24
, DST_0
);
1615 vis_pack16(TMP26
, DST_1
);
1616 vis_st64(DST_0
, dest
[0]);
1617 vis_pmerge(ZERO
, REF_S6
, TMP4
);
1619 vis_pmerge(ZERO
, REF_S6_1
, TMP6
);
1621 vis_padd16(TMP0
, TMP4
, TMP0
);
1623 vis_padd16(TMP2
, TMP6
, TMP2
);
1625 vis_padd16(TMP0
, TMP12
, TMP0
);
1627 vis_padd16(TMP2
, TMP14
, TMP2
);
1628 vis_pack16(TMP0
, DST_2
);
1630 vis_pack16(TMP2
, DST_3
);
1631 vis_st64_2(DST_2
, dest
, 8);
1636 static void MC_put_xy_8_vis (uint8_t * dest
, const uint8_t * _ref
,
1637 const int stride
, int height
)
1639 uint8_t *ref
= (uint8_t *) _ref
;
1640 unsigned long off
= (unsigned long) ref
& 0x7;
1641 unsigned long off_plus_1
= off
+ 1;
1642 int stride_8
= stride
+ 8;
1644 vis_set_gsr(5 << VIS_GSR_SCALEFACT_SHIFT
);
1646 ref
= vis_alignaddr(ref
);
1648 vis_ld64(ref
[ 0], TMP0
);
1651 vis_ld64(ref
[ 8], TMP2
);
1653 vis_ld64(constants2
[0], CONST_2
);
1655 vis_ld64(constants256_512
[0], CONST_256
);
1656 vis_faligndata(TMP0
, TMP2
, REF_S0
);
1659 vis_alignaddr_g0((void *)off_plus_1
);
1660 vis_faligndata(TMP0
, TMP2
, REF_S2
);
1662 vis_src1(TMP2
, REF_S2
);
1666 do { /* 26 cycles */
1667 vis_ld64_2(ref
, stride
, TMP0
);
1668 vis_mul8x16au(REF_S0
, CONST_256
, TMP8
);
1669 vis_pmerge(ZERO
, REF_S2
, TMP12
);
1671 vis_alignaddr_g0((void *)off
);
1673 vis_ld64_2(ref
, stride_8
, TMP2
);
1675 vis_mul8x16au(REF_S0_1
, CONST_256
, TMP10
);
1676 vis_pmerge(ZERO
, REF_S2_1
, TMP14
);
1678 vis_ld64_2(ref
, stride
, TMP4
);
1680 vis_ld64_2(ref
, stride_8
, TMP6
);
1682 vis_faligndata(TMP0
, TMP2
, REF_S4
);
1684 vis_pmerge(ZERO
, REF_S4
, TMP18
);
1686 vis_pmerge(ZERO
, REF_S4_1
, TMP20
);
1688 vis_faligndata(TMP4
, TMP6
, REF_S0
);
1691 vis_alignaddr_g0((void *)off_plus_1
);
1692 vis_faligndata(TMP0
, TMP2
, REF_S6
);
1693 vis_faligndata(TMP4
, TMP6
, REF_S2
);
1695 vis_src1(TMP2
, REF_S6
);
1696 vis_src1(TMP6
, REF_S2
);
1699 vis_padd16(TMP18
, CONST_2
, TMP18
);
1700 vis_mul8x16au(REF_S6
, CONST_256
, TMP22
);
1702 vis_padd16(TMP20
, CONST_2
, TMP20
);
1703 vis_mul8x16au(REF_S6_1
, CONST_256
, TMP24
);
1705 vis_mul8x16au(REF_S0
, CONST_256
, TMP26
);
1706 vis_pmerge(ZERO
, REF_S0_1
, TMP28
);
1708 vis_mul8x16au(REF_S2
, CONST_256
, TMP30
);
1709 vis_padd16(TMP18
, TMP22
, TMP18
);
1711 vis_mul8x16au(REF_S2_1
, CONST_256
, TMP32
);
1712 vis_padd16(TMP20
, TMP24
, TMP20
);
1714 vis_padd16(TMP8
, TMP18
, TMP8
);
1716 vis_padd16(TMP10
, TMP20
, TMP10
);
1718 vis_padd16(TMP8
, TMP12
, TMP8
);
1720 vis_padd16(TMP10
, TMP14
, TMP10
);
1721 vis_pack16(TMP8
, DST_0
);
1723 vis_pack16(TMP10
, DST_1
);
1724 vis_st64(DST_0
, dest
[0]);
1726 vis_padd16(TMP18
, TMP26
, TMP18
);
1728 vis_padd16(TMP20
, TMP28
, TMP20
);
1730 vis_padd16(TMP18
, TMP30
, TMP18
);
1732 vis_padd16(TMP20
, TMP32
, TMP20
);
1733 vis_pack16(TMP18
, DST_2
);
1735 vis_pack16(TMP20
, DST_3
);
1736 vis_st64(DST_2
, dest
[0]);
1741 static void MC_avg_xy_16_vis (uint8_t * dest
, const uint8_t * _ref
,
1742 const int stride
, int height
)
1744 uint8_t *ref
= (uint8_t *) _ref
;
1745 unsigned long off
= (unsigned long) ref
& 0x7;
1746 unsigned long off_plus_1
= off
+ 1;
1747 int stride_8
= stride
+ 8;
1748 int stride_16
= stride
+ 16;
1750 vis_set_gsr(4 << VIS_GSR_SCALEFACT_SHIFT
);
1752 ref
= vis_alignaddr(ref
);
1754 vis_ld64(ref
[ 0], TMP0
);
1757 vis_ld64(ref
[ 8], TMP2
);
1759 vis_ld64(ref
[16], TMP4
);
1761 vis_ld64(constants6
[0], CONST_6
);
1762 vis_faligndata(TMP0
, TMP2
, REF_S0
);
1764 vis_ld64(constants256_1024
[0], CONST_256
);
1765 vis_faligndata(TMP2
, TMP4
, REF_S4
);
1768 vis_alignaddr_g0((void *)off_plus_1
);
1769 vis_faligndata(TMP0
, TMP2
, REF_S2
);
1770 vis_faligndata(TMP2
, TMP4
, REF_S6
);
1772 vis_src1(TMP2
, REF_S2
);
1773 vis_src1(TMP4
, REF_S6
);
1777 do { /* 55 cycles */
1778 vis_ld64_2(ref
, stride
, TMP0
);
1779 vis_mul8x16au(REF_S0
, CONST_256
, TMP12
);
1780 vis_pmerge(ZERO
, REF_S0_1
, TMP14
);
1782 vis_alignaddr_g0((void *)off
);
1784 vis_ld64_2(ref
, stride_8
, TMP2
);
1785 vis_mul8x16au(REF_S2
, CONST_256
, TMP16
);
1786 vis_pmerge(ZERO
, REF_S2_1
, TMP18
);
1788 vis_ld64_2(ref
, stride_16
, TMP4
);
1790 vis_mul8x16au(REF_S4
, CONST_256
, TMP20
);
1791 vis_pmerge(ZERO
, REF_S4_1
, TMP22
);
1793 vis_ld64_2(ref
, stride
, TMP6
);
1794 vis_mul8x16au(REF_S6
, CONST_256
, TMP24
);
1795 vis_pmerge(ZERO
, REF_S6_1
, TMP26
);
1797 vis_ld64_2(ref
, stride_8
, TMP8
);
1798 vis_faligndata(TMP0
, TMP2
, REF_0
);
1800 vis_ld64_2(ref
, stride_16
, TMP10
);
1802 vis_faligndata(TMP2
, TMP4
, REF_4
);
1804 vis_ld64(dest
[0], DST_0
);
1805 vis_faligndata(TMP6
, TMP8
, REF_S0
);
1807 vis_ld64_2(dest
, 8, DST_2
);
1808 vis_faligndata(TMP8
, TMP10
, REF_S4
);
1811 vis_alignaddr_g0((void *)off_plus_1
);
1812 vis_faligndata(TMP0
, TMP2
, REF_2
);
1813 vis_faligndata(TMP2
, TMP4
, REF_6
);
1814 vis_faligndata(TMP6
, TMP8
, REF_S2
);
1815 vis_faligndata(TMP8
, TMP10
, REF_S6
);
1817 vis_src1(TMP2
, REF_2
);
1818 vis_src1(TMP4
, REF_6
);
1819 vis_src1(TMP8
, REF_S2
);
1820 vis_src1(TMP10
, REF_S6
);
1823 vis_mul8x16al(DST_0
, CONST_1024
, TMP30
);
1824 vis_pmerge(ZERO
, REF_0
, TMP0
);
1826 vis_mul8x16al(DST_1
, CONST_1024
, TMP32
);
1827 vis_pmerge(ZERO
, REF_0_1
, TMP2
);
1829 vis_mul8x16au(REF_2
, CONST_256
, TMP4
);
1830 vis_pmerge(ZERO
, REF_2_1
, TMP6
);
1832 vis_mul8x16al(DST_2
, CONST_1024
, REF_0
);
1833 vis_padd16(TMP0
, CONST_6
, TMP0
);
1835 vis_mul8x16al(DST_3
, CONST_1024
, REF_2
);
1836 vis_padd16(TMP2
, CONST_6
, TMP2
);
1838 vis_padd16(TMP0
, TMP4
, TMP0
);
1839 vis_mul8x16au(REF_4
, CONST_256
, TMP4
);
1841 vis_padd16(TMP2
, TMP6
, TMP2
);
1842 vis_mul8x16au(REF_4_1
, CONST_256
, TMP6
);
1844 vis_padd16(TMP12
, TMP0
, TMP12
);
1845 vis_mul8x16au(REF_6
, CONST_256
, TMP8
);
1847 vis_padd16(TMP14
, TMP2
, TMP14
);
1848 vis_mul8x16au(REF_6_1
, CONST_256
, TMP10
);
1850 vis_padd16(TMP12
, TMP16
, TMP12
);
1851 vis_mul8x16au(REF_S0
, CONST_256
, REF_4
);
1853 vis_padd16(TMP14
, TMP18
, TMP14
);
1854 vis_mul8x16au(REF_S0_1
, CONST_256
, REF_6
);
1856 vis_padd16(TMP12
, TMP30
, TMP12
);
1858 vis_padd16(TMP14
, TMP32
, TMP14
);
1859 vis_pack16(TMP12
, DST_0
);
1861 vis_pack16(TMP14
, DST_1
);
1862 vis_st64(DST_0
, dest
[0]);
1863 vis_padd16(TMP4
, CONST_6
, TMP4
);
1865 vis_ld64_2(dest
, stride
, DST_0
);
1866 vis_padd16(TMP6
, CONST_6
, TMP6
);
1867 vis_mul8x16au(REF_S2
, CONST_256
, TMP12
);
1869 vis_padd16(TMP4
, TMP8
, TMP4
);
1870 vis_mul8x16au(REF_S2_1
, CONST_256
, TMP14
);
1872 vis_padd16(TMP6
, TMP10
, TMP6
);
1874 vis_padd16(TMP20
, TMP4
, TMP20
);
1876 vis_padd16(TMP22
, TMP6
, TMP22
);
1878 vis_padd16(TMP20
, TMP24
, TMP20
);
1880 vis_padd16(TMP22
, TMP26
, TMP22
);
1882 vis_padd16(TMP20
, REF_0
, TMP20
);
1883 vis_mul8x16au(REF_S4
, CONST_256
, REF_0
);
1885 vis_padd16(TMP22
, REF_2
, TMP22
);
1886 vis_pack16(TMP20
, DST_2
);
1888 vis_pack16(TMP22
, DST_3
);
1889 vis_st64_2(DST_2
, dest
, 8);
1892 vis_ld64_2(dest
, 8, DST_2
);
1893 vis_mul8x16al(DST_0
, CONST_1024
, TMP30
);
1894 vis_pmerge(ZERO
, REF_S4_1
, REF_2
);
1896 vis_mul8x16al(DST_1
, CONST_1024
, TMP32
);
1897 vis_padd16(REF_4
, TMP0
, TMP8
);
1899 vis_mul8x16au(REF_S6
, CONST_256
, REF_4
);
1900 vis_padd16(REF_6
, TMP2
, TMP10
);
1902 vis_mul8x16au(REF_S6_1
, CONST_256
, REF_6
);
1903 vis_padd16(TMP8
, TMP12
, TMP8
);
1905 vis_padd16(TMP10
, TMP14
, TMP10
);
1907 vis_padd16(TMP8
, TMP30
, TMP8
);
1909 vis_padd16(TMP10
, TMP32
, TMP10
);
1910 vis_pack16(TMP8
, DST_0
);
1912 vis_pack16(TMP10
, DST_1
);
1913 vis_st64(DST_0
, dest
[0]);
1915 vis_padd16(REF_0
, TMP4
, REF_0
);
1917 vis_mul8x16al(DST_2
, CONST_1024
, TMP30
);
1918 vis_padd16(REF_2
, TMP6
, REF_2
);
1920 vis_mul8x16al(DST_3
, CONST_1024
, TMP32
);
1921 vis_padd16(REF_0
, REF_4
, REF_0
);
1923 vis_padd16(REF_2
, REF_6
, REF_2
);
1925 vis_padd16(REF_0
, TMP30
, REF_0
);
1929 vis_padd16(REF_2
, TMP32
, REF_2
);
1930 vis_pack16(REF_0
, DST_2
);
1932 vis_pack16(REF_2
, DST_3
);
1933 vis_st64_2(DST_2
, dest
, 8);
1938 static void MC_avg_xy_8_vis (uint8_t * dest
, const uint8_t * _ref
,
1939 const int stride
, int height
)
1941 uint8_t *ref
= (uint8_t *) _ref
;
1942 unsigned long off
= (unsigned long) ref
& 0x7;
1943 unsigned long off_plus_1
= off
+ 1;
1944 int stride_8
= stride
+ 8;
1946 vis_set_gsr(4 << VIS_GSR_SCALEFACT_SHIFT
);
1948 ref
= vis_alignaddr(ref
);
1950 vis_ld64(ref
[0], TMP0
);
1953 vis_ld64_2(ref
, 8, TMP2
);
1955 vis_ld64(constants6
[0], CONST_6
);
1957 vis_ld64(constants256_1024
[0], CONST_256
);
1958 vis_faligndata(TMP0
, TMP2
, REF_S0
);
1961 vis_alignaddr_g0((void *)off_plus_1
);
1962 vis_faligndata(TMP0
, TMP2
, REF_S2
);
1964 vis_src1(TMP2
, REF_S2
);
1968 do { /* 31 cycles */
1969 vis_ld64_2(ref
, stride
, TMP0
);
1970 vis_mul8x16au(REF_S0
, CONST_256
, TMP8
);
1971 vis_pmerge(ZERO
, REF_S0_1
, TMP10
);
1973 vis_ld64_2(ref
, stride_8
, TMP2
);
1975 vis_mul8x16au(REF_S2
, CONST_256
, TMP12
);
1976 vis_pmerge(ZERO
, REF_S2_1
, TMP14
);
1978 vis_alignaddr_g0((void *)off
);
1980 vis_ld64_2(ref
, stride
, TMP4
);
1981 vis_faligndata(TMP0
, TMP2
, REF_S4
);
1983 vis_ld64_2(ref
, stride_8
, TMP6
);
1986 vis_ld64(dest
[0], DST_0
);
1987 vis_faligndata(TMP4
, TMP6
, REF_S0
);
1989 vis_ld64_2(dest
, stride
, DST_2
);
1992 vis_alignaddr_g0((void *)off_plus_1
);
1993 vis_faligndata(TMP0
, TMP2
, REF_S6
);
1994 vis_faligndata(TMP4
, TMP6
, REF_S2
);
1996 vis_src1(TMP2
, REF_S6
);
1997 vis_src1(TMP6
, REF_S2
);
2000 vis_mul8x16al(DST_0
, CONST_1024
, TMP30
);
2001 vis_pmerge(ZERO
, REF_S4
, TMP22
);
2003 vis_mul8x16al(DST_1
, CONST_1024
, TMP32
);
2004 vis_pmerge(ZERO
, REF_S4_1
, TMP24
);
2006 vis_mul8x16au(REF_S6
, CONST_256
, TMP26
);
2007 vis_pmerge(ZERO
, REF_S6_1
, TMP28
);
2009 vis_mul8x16au(REF_S0
, CONST_256
, REF_S4
);
2010 vis_padd16(TMP22
, CONST_6
, TMP22
);
2012 vis_mul8x16au(REF_S0_1
, CONST_256
, REF_S6
);
2013 vis_padd16(TMP24
, CONST_6
, TMP24
);
2015 vis_mul8x16al(DST_2
, CONST_1024
, REF_0
);
2016 vis_padd16(TMP22
, TMP26
, TMP22
);
2018 vis_mul8x16al(DST_3
, CONST_1024
, REF_2
);
2019 vis_padd16(TMP24
, TMP28
, TMP24
);
2021 vis_mul8x16au(REF_S2
, CONST_256
, TMP26
);
2022 vis_padd16(TMP8
, TMP22
, TMP8
);
2024 vis_mul8x16au(REF_S2_1
, CONST_256
, TMP28
);
2025 vis_padd16(TMP10
, TMP24
, TMP10
);
2027 vis_padd16(TMP8
, TMP12
, TMP8
);
2029 vis_padd16(TMP10
, TMP14
, TMP10
);
2031 vis_padd16(TMP8
, TMP30
, TMP8
);
2033 vis_padd16(TMP10
, TMP32
, TMP10
);
2034 vis_pack16(TMP8
, DST_0
);
2036 vis_pack16(TMP10
, DST_1
);
2037 vis_st64(DST_0
, dest
[0]);
2040 vis_padd16(REF_S4
, TMP22
, TMP12
);
2042 vis_padd16(REF_S6
, TMP24
, TMP14
);
2044 vis_padd16(TMP12
, TMP26
, TMP12
);
2046 vis_padd16(TMP14
, TMP28
, TMP14
);
2048 vis_padd16(TMP12
, REF_0
, TMP12
);
2050 vis_padd16(TMP14
, REF_2
, TMP14
);
2051 vis_pack16(TMP12
, DST_2
);
2053 vis_pack16(TMP14
, DST_3
);
2054 vis_st64(DST_2
, dest
[0]);
2059 MPEG2_MC_EXTERN(vis
);
2061 #endif /* !(ARCH_SPARC) */