* pixel.*:
authorLaurent Aimar <fenrir@videolan.org>
Fri, 22 Jul 2005 15:48:18 +0000 (15:48 +0000)
committerLaurent Aimar <fenrir@videolan.org>
Fri, 22 Jul 2005 15:48:18 +0000 (15:48 +0000)
"I have completed additonal SAD implementations (8x16, 16x8 and 16x16)
 using Sparc VIS.  Overall speedup is roughly 90% from straight C.  I'm
 doing development and testing on a Sun Fire V220, with 2 * 1.5ghz
 UltraSPARC-III CPUs.

 I've hand-unrolled each of the loops.  Sun's assembler does not appear
 to have macro functionality built-in and I didn't want to establish an
 external dependancy on m4.  Please let me know if you run into any
 trouble with the patch."

 Patch by Phil Jensen.

git-svn-id: svn://svn.videolan.org/x264/trunk@279 df754926-b1dd-0310-bc7b-ec298dee348c

common/pixel.c
common/sparc/pixel.asm
common/sparc/pixel.h

index 793675c..81cd264 100644 (file)
@@ -438,7 +438,10 @@ void x264_pixel_init( int cpu, x264_pixel_function_t *pixf )
     }
 #endif
 #ifdef ARCH_UltraSparc
     }
 #endif
 #ifdef ARCH_UltraSparc
-      pixf->sad[PIXEL_8x8] = x264_pixel_sad_8x8_vis;
+      pixf->sad[PIXEL_8x8]   = x264_pixel_sad_8x8_vis;
+      pixf->sad[PIXEL_8x16]  = x264_pixel_sad_8x16_vis;
+      pixf->sad[PIXEL_16x8]  = x264_pixel_sad_16x8_vis;
+      pixf->sad[PIXEL_16x16] = x264_pixel_sad_16x16_vis;
 #endif
 }
 
 #endif
 }
 
index 38cf056..4bd9aa5 100755 (executable)
@@ -24,7 +24,6 @@
 ! VIS optimized SAD for UltraSPARC
 
 .text
 ! VIS optimized SAD for UltraSPARC
 
 .text
-.align 4
 .global x264_pixel_sad_8x8_vis
 x264_pixel_sad_8x8_vis:
        save %sp, -120, %sp
 .global x264_pixel_sad_8x8_vis
 x264_pixel_sad_8x8_vis:
        save %sp, -120, %sp
@@ -148,3 +147,941 @@ x264_pixel_sad_8x8_vis:
 
        ret
        restore
 
        ret
        restore
+
+.global x264_pixel_sad_8x16_vis
+x264_pixel_sad_8x16_vis:
+       save %sp, -120, %sp
+
+       fzero %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+       add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       std %f12, [%fp-24]
+       ld [%fp-20], %i0
+
+       ret
+       restore
+
+.global x264_pixel_sad_16x8_vis
+x264_pixel_sad_16x8_vis:
+       save %sp, -120, %sp
+
+       fzero %f12                      ! zero out the accumulator used for pdist
+
+       sub %i1, 8, %i1                 ! reduce stride by 8, since we are moving forward 8 each block
+       sub %i3, 8, %i3                 ! same here, reduce stride by 8
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       std %f12, [%fp-24]
+       ld [%fp-20], %i0
+
+       ret
+       restore
+
+.global x264_pixel_sad_16x16_vis
+x264_pixel_sad_16x16_vis:
+       save %sp, -120, %sp
+
+       fzero %f12                      ! zero out the accumulator used for pdist
+
+       sub %i1, 8, %i1                 ! reduce stride by 8, since we are moving forward 8 each block
+       sub %i3, 8, %i3                 ! same here, reduce stride by 8
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, 8, %i0
+       add %i2, 8, %i2
+       pdist %f4, %f10, %f12
+
+       alignaddr %i0, %g0, %l0 
+       ldd [%l0], %f0
+       ldd [%l0+8], %f2
+       faligndata %f0, %f2, %f4
+
+       alignaddr %i2, %g0, %l2
+       ldd [%l2], %f6
+       ldd [%l2+8], %f8
+       faligndata %f6, %f8, %f10
+
+       add %i0, %i1, %i0
+        add %i2, %i3, %i2
+       pdist %f4, %f10, %f12
+
+       std %f12, [%fp-24]
+       ld [%fp-20], %i0
+
+       ret
+       restore
index d9683a5..ee392c1 100755 (executable)
@@ -25,5 +25,8 @@
 #define _SPARC_PIXEL_H 1
 
 int x264_pixel_sad_8x8_vis( uint8_t *, int, uint8_t *, int );
 #define _SPARC_PIXEL_H 1
 
 int x264_pixel_sad_8x8_vis( uint8_t *, int, uint8_t *, int );
+int x264_pixel_sad_8x16_vis( uint8_t *, int, uint8_t *, int );
+int x264_pixel_sad_16x8_vis( uint8_t *, int, uint8_t *, int );
+int x264_pixel_sad_16x16_vis( uint8_t *, int, uint8_t *, int );
 
 #endif
 
 #endif