1 /*****************************************************************************
2 * pixel.asm: h264 encoder library
3 *****************************************************************************
4 * Copyright (C) 2005 Phil Jensen <philj@csufresno.edu>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
19 *****************************************************************************/
21 ! VIS optimized SAD for UltraSPARC
24 .global x264_pixel_sad_8x8_vis
25 x264_pixel_sad_8x8_vis:
30 alignaddr %i0, %g0, %l0
33 faligndata %f0, %f2, %f4
35 alignaddr %i2, %g0, %l2
38 faligndata %f6, %f8, %f10
44 alignaddr %i0, %g0, %l0
47 faligndata %f0, %f2, %f4
49 alignaddr %i2, %g0, %l2
52 faligndata %f6, %f8, %f10
58 alignaddr %i0, %g0, %l0
61 faligndata %f0, %f2, %f4
63 alignaddr %i2, %g0, %l2
66 faligndata %f6, %f8, %f10
72 alignaddr %i0, %g0, %l0
75 faligndata %f0, %f2, %f4
77 alignaddr %i2, %g0, %l2
80 faligndata %f6, %f8, %f10
86 alignaddr %i0, %g0, %l0
89 faligndata %f0, %f2, %f4
91 alignaddr %i2, %g0, %l2
94 faligndata %f6, %f8, %f10
100 alignaddr %i0, %g0, %l0
103 faligndata %f0, %f2, %f4
105 alignaddr %i2, %g0, %l2
108 faligndata %f6, %f8, %f10
112 pdist %f4, %f10, %f12
114 alignaddr %i0, %g0, %l0
117 faligndata %f0, %f2, %f4
119 alignaddr %i2, %g0, %l2
122 faligndata %f6, %f8, %f10
126 pdist %f4, %f10, %f12
128 alignaddr %i0, %g0, %l0
131 faligndata %f0, %f2, %f4
133 alignaddr %i2, %g0, %l2
136 faligndata %f6, %f8, %f10
140 pdist %f4, %f10, %f12
148 .global x264_pixel_sad_8x16_vis
149 x264_pixel_sad_8x16_vis:
154 alignaddr %i0, %g0, %l0
157 faligndata %f0, %f2, %f4
159 alignaddr %i2, %g0, %l2
162 faligndata %f6, %f8, %f10
166 pdist %f4, %f10, %f12
168 alignaddr %i0, %g0, %l0
171 faligndata %f0, %f2, %f4
173 alignaddr %i2, %g0, %l2
176 faligndata %f6, %f8, %f10
180 pdist %f4, %f10, %f12
182 alignaddr %i0, %g0, %l0
185 faligndata %f0, %f2, %f4
187 alignaddr %i2, %g0, %l2
190 faligndata %f6, %f8, %f10
194 pdist %f4, %f10, %f12
196 alignaddr %i0, %g0, %l0
199 faligndata %f0, %f2, %f4
201 alignaddr %i2, %g0, %l2
204 faligndata %f6, %f8, %f10
208 pdist %f4, %f10, %f12
210 alignaddr %i0, %g0, %l0
213 faligndata %f0, %f2, %f4
215 alignaddr %i2, %g0, %l2
218 faligndata %f6, %f8, %f10
222 pdist %f4, %f10, %f12
224 alignaddr %i0, %g0, %l0
227 faligndata %f0, %f2, %f4
229 alignaddr %i2, %g0, %l2
232 faligndata %f6, %f8, %f10
236 pdist %f4, %f10, %f12
238 alignaddr %i0, %g0, %l0
241 faligndata %f0, %f2, %f4
243 alignaddr %i2, %g0, %l2
246 faligndata %f6, %f8, %f10
250 pdist %f4, %f10, %f12
252 alignaddr %i0, %g0, %l0
255 faligndata %f0, %f2, %f4
257 alignaddr %i2, %g0, %l2
260 faligndata %f6, %f8, %f10
264 pdist %f4, %f10, %f12
266 alignaddr %i0, %g0, %l0
269 faligndata %f0, %f2, %f4
271 alignaddr %i2, %g0, %l2
274 faligndata %f6, %f8, %f10
278 pdist %f4, %f10, %f12
280 alignaddr %i0, %g0, %l0
283 faligndata %f0, %f2, %f4
285 alignaddr %i2, %g0, %l2
288 faligndata %f6, %f8, %f10
292 pdist %f4, %f10, %f12
294 alignaddr %i0, %g0, %l0
297 faligndata %f0, %f2, %f4
299 alignaddr %i2, %g0, %l2
302 faligndata %f6, %f8, %f10
306 pdist %f4, %f10, %f12
308 alignaddr %i0, %g0, %l0
311 faligndata %f0, %f2, %f4
313 alignaddr %i2, %g0, %l2
316 faligndata %f6, %f8, %f10
320 pdist %f4, %f10, %f12
322 alignaddr %i0, %g0, %l0
325 faligndata %f0, %f2, %f4
327 alignaddr %i2, %g0, %l2
330 faligndata %f6, %f8, %f10
334 pdist %f4, %f10, %f12
336 alignaddr %i0, %g0, %l0
339 faligndata %f0, %f2, %f4
341 alignaddr %i2, %g0, %l2
344 faligndata %f6, %f8, %f10
348 pdist %f4, %f10, %f12
350 alignaddr %i0, %g0, %l0
353 faligndata %f0, %f2, %f4
355 alignaddr %i2, %g0, %l2
358 faligndata %f6, %f8, %f10
362 pdist %f4, %f10, %f12
364 alignaddr %i0, %g0, %l0
367 faligndata %f0, %f2, %f4
369 alignaddr %i2, %g0, %l2
372 faligndata %f6, %f8, %f10
376 pdist %f4, %f10, %f12
384 .global x264_pixel_sad_16x8_vis
385 x264_pixel_sad_16x8_vis:
388 fzero %f12 ! zero out the accumulator used for pdist
390 sub %i1, 8, %i1 ! reduce stride by 8, since we are moving forward 8 each block
391 sub %i3, 8, %i3 ! same here, reduce stride by 8
393 alignaddr %i0, %g0, %l0
396 faligndata %f0, %f2, %f4
398 alignaddr %i2, %g0, %l2
401 faligndata %f6, %f8, %f10
405 pdist %f4, %f10, %f12
407 alignaddr %i0, %g0, %l0
410 faligndata %f0, %f2, %f4
412 alignaddr %i2, %g0, %l2
415 faligndata %f6, %f8, %f10
419 pdist %f4, %f10, %f12
421 alignaddr %i0, %g0, %l0
424 faligndata %f0, %f2, %f4
426 alignaddr %i2, %g0, %l2
429 faligndata %f6, %f8, %f10
433 pdist %f4, %f10, %f12
435 alignaddr %i0, %g0, %l0
438 faligndata %f0, %f2, %f4
440 alignaddr %i2, %g0, %l2
443 faligndata %f6, %f8, %f10
447 pdist %f4, %f10, %f12
449 alignaddr %i0, %g0, %l0
452 faligndata %f0, %f2, %f4
454 alignaddr %i2, %g0, %l2
457 faligndata %f6, %f8, %f10
461 pdist %f4, %f10, %f12
463 alignaddr %i0, %g0, %l0
466 faligndata %f0, %f2, %f4
468 alignaddr %i2, %g0, %l2
471 faligndata %f6, %f8, %f10
475 pdist %f4, %f10, %f12
477 alignaddr %i0, %g0, %l0
480 faligndata %f0, %f2, %f4
482 alignaddr %i2, %g0, %l2
485 faligndata %f6, %f8, %f10
489 pdist %f4, %f10, %f12
491 alignaddr %i0, %g0, %l0
494 faligndata %f0, %f2, %f4
496 alignaddr %i2, %g0, %l2
499 faligndata %f6, %f8, %f10
503 pdist %f4, %f10, %f12
505 alignaddr %i0, %g0, %l0
508 faligndata %f0, %f2, %f4
510 alignaddr %i2, %g0, %l2
513 faligndata %f6, %f8, %f10
517 pdist %f4, %f10, %f12
519 alignaddr %i0, %g0, %l0
522 faligndata %f0, %f2, %f4
524 alignaddr %i2, %g0, %l2
527 faligndata %f6, %f8, %f10
531 pdist %f4, %f10, %f12
533 alignaddr %i0, %g0, %l0
536 faligndata %f0, %f2, %f4
538 alignaddr %i2, %g0, %l2
541 faligndata %f6, %f8, %f10
545 pdist %f4, %f10, %f12
547 alignaddr %i0, %g0, %l0
550 faligndata %f0, %f2, %f4
552 alignaddr %i2, %g0, %l2
555 faligndata %f6, %f8, %f10
559 pdist %f4, %f10, %f12
561 alignaddr %i0, %g0, %l0
564 faligndata %f0, %f2, %f4
566 alignaddr %i2, %g0, %l2
569 faligndata %f6, %f8, %f10
573 pdist %f4, %f10, %f12
575 alignaddr %i0, %g0, %l0
578 faligndata %f0, %f2, %f4
580 alignaddr %i2, %g0, %l2
583 faligndata %f6, %f8, %f10
587 pdist %f4, %f10, %f12
589 alignaddr %i0, %g0, %l0
592 faligndata %f0, %f2, %f4
594 alignaddr %i2, %g0, %l2
597 faligndata %f6, %f8, %f10
601 pdist %f4, %f10, %f12
603 alignaddr %i0, %g0, %l0
606 faligndata %f0, %f2, %f4
608 alignaddr %i2, %g0, %l2
611 faligndata %f6, %f8, %f10
615 pdist %f4, %f10, %f12
623 .global x264_pixel_sad_16x16_vis
624 x264_pixel_sad_16x16_vis:
627 fzero %f12 ! zero out the accumulator used for pdist
629 sub %i1, 8, %i1 ! reduce stride by 8, since we are moving forward 8 each block
630 sub %i3, 8, %i3 ! same here, reduce stride by 8
632 alignaddr %i0, %g0, %l0
635 faligndata %f0, %f2, %f4
637 alignaddr %i2, %g0, %l2
640 faligndata %f6, %f8, %f10
644 pdist %f4, %f10, %f12
646 alignaddr %i0, %g0, %l0
649 faligndata %f0, %f2, %f4
651 alignaddr %i2, %g0, %l2
654 faligndata %f6, %f8, %f10
658 pdist %f4, %f10, %f12
660 alignaddr %i0, %g0, %l0
663 faligndata %f0, %f2, %f4
665 alignaddr %i2, %g0, %l2
668 faligndata %f6, %f8, %f10
672 pdist %f4, %f10, %f12
674 alignaddr %i0, %g0, %l0
677 faligndata %f0, %f2, %f4
679 alignaddr %i2, %g0, %l2
682 faligndata %f6, %f8, %f10
686 pdist %f4, %f10, %f12
688 alignaddr %i0, %g0, %l0
691 faligndata %f0, %f2, %f4
693 alignaddr %i2, %g0, %l2
696 faligndata %f6, %f8, %f10
700 pdist %f4, %f10, %f12
702 alignaddr %i0, %g0, %l0
705 faligndata %f0, %f2, %f4
707 alignaddr %i2, %g0, %l2
710 faligndata %f6, %f8, %f10
714 pdist %f4, %f10, %f12
716 alignaddr %i0, %g0, %l0
719 faligndata %f0, %f2, %f4
721 alignaddr %i2, %g0, %l2
724 faligndata %f6, %f8, %f10
728 pdist %f4, %f10, %f12
730 alignaddr %i0, %g0, %l0
733 faligndata %f0, %f2, %f4
735 alignaddr %i2, %g0, %l2
738 faligndata %f6, %f8, %f10
742 pdist %f4, %f10, %f12
744 alignaddr %i0, %g0, %l0
747 faligndata %f0, %f2, %f4
749 alignaddr %i2, %g0, %l2
752 faligndata %f6, %f8, %f10
756 pdist %f4, %f10, %f12
758 alignaddr %i0, %g0, %l0
761 faligndata %f0, %f2, %f4
763 alignaddr %i2, %g0, %l2
766 faligndata %f6, %f8, %f10
770 pdist %f4, %f10, %f12
772 alignaddr %i0, %g0, %l0
775 faligndata %f0, %f2, %f4
777 alignaddr %i2, %g0, %l2
780 faligndata %f6, %f8, %f10
784 pdist %f4, %f10, %f12
786 alignaddr %i0, %g0, %l0
789 faligndata %f0, %f2, %f4
791 alignaddr %i2, %g0, %l2
794 faligndata %f6, %f8, %f10
798 pdist %f4, %f10, %f12
800 alignaddr %i0, %g0, %l0
803 faligndata %f0, %f2, %f4
805 alignaddr %i2, %g0, %l2
808 faligndata %f6, %f8, %f10
812 pdist %f4, %f10, %f12
814 alignaddr %i0, %g0, %l0
817 faligndata %f0, %f2, %f4
819 alignaddr %i2, %g0, %l2
822 faligndata %f6, %f8, %f10
826 pdist %f4, %f10, %f12
828 alignaddr %i0, %g0, %l0
831 faligndata %f0, %f2, %f4
833 alignaddr %i2, %g0, %l2
836 faligndata %f6, %f8, %f10
840 pdist %f4, %f10, %f12
842 alignaddr %i0, %g0, %l0
845 faligndata %f0, %f2, %f4
847 alignaddr %i2, %g0, %l2
850 faligndata %f6, %f8, %f10
854 pdist %f4, %f10, %f12
856 alignaddr %i0, %g0, %l0
859 faligndata %f0, %f2, %f4
861 alignaddr %i2, %g0, %l2
864 faligndata %f6, %f8, %f10
868 pdist %f4, %f10, %f12
870 alignaddr %i0, %g0, %l0
873 faligndata %f0, %f2, %f4
875 alignaddr %i2, %g0, %l2
878 faligndata %f6, %f8, %f10
882 pdist %f4, %f10, %f12
884 alignaddr %i0, %g0, %l0
887 faligndata %f0, %f2, %f4
889 alignaddr %i2, %g0, %l2
892 faligndata %f6, %f8, %f10
896 pdist %f4, %f10, %f12
898 alignaddr %i0, %g0, %l0
901 faligndata %f0, %f2, %f4
903 alignaddr %i2, %g0, %l2
906 faligndata %f6, %f8, %f10
910 pdist %f4, %f10, %f12
912 alignaddr %i0, %g0, %l0
915 faligndata %f0, %f2, %f4
917 alignaddr %i2, %g0, %l2
920 faligndata %f6, %f8, %f10
924 pdist %f4, %f10, %f12
926 alignaddr %i0, %g0, %l0
929 faligndata %f0, %f2, %f4
931 alignaddr %i2, %g0, %l2
934 faligndata %f6, %f8, %f10
938 pdist %f4, %f10, %f12
940 alignaddr %i0, %g0, %l0
943 faligndata %f0, %f2, %f4
945 alignaddr %i2, %g0, %l2
948 faligndata %f6, %f8, %f10
952 pdist %f4, %f10, %f12
954 alignaddr %i0, %g0, %l0
957 faligndata %f0, %f2, %f4
959 alignaddr %i2, %g0, %l2
962 faligndata %f6, %f8, %f10
966 pdist %f4, %f10, %f12
968 alignaddr %i0, %g0, %l0
971 faligndata %f0, %f2, %f4
973 alignaddr %i2, %g0, %l2
976 faligndata %f6, %f8, %f10
980 pdist %f4, %f10, %f12
982 alignaddr %i0, %g0, %l0
985 faligndata %f0, %f2, %f4
987 alignaddr %i2, %g0, %l2
990 faligndata %f6, %f8, %f10
994 pdist %f4, %f10, %f12
996 alignaddr %i0, %g0, %l0
999 faligndata %f0, %f2, %f4
1001 alignaddr %i2, %g0, %l2
1004 faligndata %f6, %f8, %f10
1008 pdist %f4, %f10, %f12
1010 alignaddr %i0, %g0, %l0
1013 faligndata %f0, %f2, %f4
1015 alignaddr %i2, %g0, %l2
1018 faligndata %f6, %f8, %f10
1022 pdist %f4, %f10, %f12
1024 alignaddr %i0, %g0, %l0
1027 faligndata %f0, %f2, %f4
1029 alignaddr %i2, %g0, %l2
1032 faligndata %f6, %f8, %f10
1036 pdist %f4, %f10, %f12
1038 alignaddr %i0, %g0, %l0
1041 faligndata %f0, %f2, %f4
1043 alignaddr %i2, %g0, %l2
1046 faligndata %f6, %f8, %f10
1050 pdist %f4, %f10, %f12
1052 alignaddr %i0, %g0, %l0
1055 faligndata %f0, %f2, %f4
1057 alignaddr %i2, %g0, %l2
1060 faligndata %f6, %f8, %f10
1064 pdist %f4, %f10, %f12
1066 alignaddr %i0, %g0, %l0
1069 faligndata %f0, %f2, %f4
1071 alignaddr %i2, %g0, %l2
1074 faligndata %f6, %f8, %f10
1078 pdist %f4, %f10, %f12