]> git.sesse.net Git - x264/commitdiff
32bit version of ssse3 satd.
authorLoren Merritt <pengvado@videolan.org>
Thu, 5 Apr 2007 16:11:03 +0000 (16:11 +0000)
committerLoren Merritt <pengvado@videolan.org>
Thu, 5 Apr 2007 16:11:03 +0000 (16:11 +0000)
switch default assembler to yasm. it will still fallback to nasm if you don't have yasm.

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

common/amd64/pixel-sse2.asm
common/i386/i386inc.asm
common/i386/pixel-sse2.asm
common/pixel.c
configure

index bc1888be7e7c6149510233be3293557d3becf1ad..f8128dcebc359e0edf90588be7127abae748518e 100644 (file)
@@ -31,7 +31,6 @@ BITS 64
 
 SECTION .rodata align=16
 
 
 SECTION .rodata align=16
 
-pb_1:    times 16 db 1
 pw_1:    times 8 dw 1
 ssim_c1: times 4 dd 416    ; .01*.01*255*255*64
 ssim_c2: times 4 dd 235963 ; .03*.03*255*255*64*63
 pw_1:    times 8 dw 1
 ssim_c1: times 4 dd 416    ; .01*.01*255*255*64
 ssim_c2: times 4 dd 235963 ; .03*.03*255*255*64*63
index deda859188fcf5a6895cf14fc125b2f15fa68829..dedfb1f708665cb2d17569f7d4cd06b049696df4 100644 (file)
@@ -46,7 +46,7 @@ BITS 32
         SECTION .text align=16
         fakegot:
     %else
         SECTION .text align=16
         fakegot:
     %else
-        SECTION .rodata data align=16
+        SECTION .rodata align=16
     %endif
 %endmacro
 
     %endif
 %endmacro
 
@@ -140,6 +140,6 @@ BITS 32
 ; This is needed for ELF, otherwise the GNU linker assumes the stack is
 ; executable by default.
 %ifidn __OUTPUT_FORMAT__,elf
 ; This is needed for ELF, otherwise the GNU linker assumes the stack is
 ; executable by default.
 %ifidn __OUTPUT_FORMAT__,elf
-SECTION .note.GNU-stack noalloc noexec nowrite progbits
+SECTION ".note.GNU-stack" noalloc noexec nowrite progbits
 %endif
 
 %endif
 
index e4aa78585cd6b6988caf1f50b08ae76f7b2a5754..84509b6178033c2a2ff269499b93738465bca69b 100644 (file)
@@ -463,8 +463,7 @@ cglobal x264_pixel_ssd_16x8_sse2
     paddusw %4, %2
 %endmacro
 
     paddusw %4, %2
 %endmacro
 
-;;; two SUM4x4_SSE2 running side-by-side
-%macro SUM4x4_TWO_SSE2 7    ; a02 a13 junk1 b02 b13 junk2 (1=4 2=5 3=6) sum
+%macro SUM8x4_SSE2 7    ; a02 a13 junk1 b02 b13 junk2 (1=4 2=5 3=6) sum
     pxor    %3, %3
     pxor    %6, %6
     psubw   %3, %1
     pxor    %3, %3
     pxor    %6, %6
     psubw   %3, %1
@@ -483,6 +482,17 @@ cglobal x264_pixel_ssd_16x8_sse2
     paddusw %7, %4
 %endmacro
 
     paddusw %7, %4
 %endmacro
 
+%macro SUM8x4_SSSE3 7    ; a02 a13 . b02 b13 . sum
+    pabsw   %1, %1
+    pabsw   %2, %2
+    pabsw   %4, %4
+    pabsw   %5, %5
+    paddusw %1, %2
+    paddusw %4, %5
+    paddusw %7, %1
+    paddusw %7, %4
+%endmacro
+
 %macro SATD_TWO_SSE2 0
     LOAD_DIFF_8P xmm0, xmm4, [eax], [ecx]
     LOAD_DIFF_8P xmm1, xmm5, [eax+ebx], [ecx+edx]
 %macro SATD_TWO_SSE2 0
     LOAD_DIFF_8P xmm0, xmm4, [eax], [ecx]
     LOAD_DIFF_8P xmm1, xmm5, [eax+ebx], [ecx+edx]
@@ -496,7 +506,7 @@ cglobal x264_pixel_ssd_16x8_sse2
     HADAMARD1x4       xmm0, xmm1, xmm2, xmm3
     TRANSPOSE2x4x4W   xmm0, xmm1, xmm2, xmm3, xmm4
     HADAMARD1x4       xmm0, xmm1, xmm2, xmm3
     HADAMARD1x4       xmm0, xmm1, xmm2, xmm3
     TRANSPOSE2x4x4W   xmm0, xmm1, xmm2, xmm3, xmm4
     HADAMARD1x4       xmm0, xmm1, xmm2, xmm3
-    SUM4x4_TWO_SSE2   xmm0, xmm1, xmm4, xmm2, xmm3, xmm5, xmm6
+    SUM8x4            xmm0, xmm1, xmm4, xmm2, xmm3, xmm5, xmm6
 %endmacro
 
 %macro SATD_START 0
 %endmacro
 
 %macro SATD_START 0
@@ -519,81 +529,76 @@ cglobal x264_pixel_ssd_16x8_sse2
     ret
 %endmacro
 
     ret
 %endmacro
 
+%macro SATDS 1
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_16x16_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_16x16_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
-cglobal x264_pixel_satd_16x16_sse2
+cglobal x264_pixel_satd_16x16_%1
     SATD_START
     SATD_START
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     mov     eax,    [esp+ 8]
     mov     ecx,    [esp+16]
     add     eax,    8
     add     ecx,    8
     mov     eax,    [esp+ 8]
     mov     ecx,    [esp+16]
     add     eax,    8
     add     ecx,    8
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_8x16_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_8x16_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
-cglobal x264_pixel_satd_8x16_sse2
+cglobal x264_pixel_satd_8x16_%1
     SATD_START
     SATD_START
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_16x8_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_16x8_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
-cglobal x264_pixel_satd_16x8_sse2
+cglobal x264_pixel_satd_16x8_%1
     SATD_START
     SATD_START
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     mov     eax,    [esp+ 8]
     mov     ecx,    [esp+16]
     add     eax,    8
     add     ecx,    8
     mov     eax,    [esp+ 8]
     mov     ecx,    [esp+16]
     add     eax,    8
     add     ecx,    8
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_8x8_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_8x8_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
-cglobal x264_pixel_satd_8x8_sse2
+cglobal x264_pixel_satd_8x8_%1
     SATD_START
     SATD_START
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_8x4_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
     SATD_END
 
 ;-----------------------------------------------------------------------------
 ;   int __cdecl x264_pixel_satd_8x4_sse2 (uint8_t *, int, uint8_t *, int )
 ;-----------------------------------------------------------------------------
-cglobal x264_pixel_satd_8x4_sse2
+cglobal x264_pixel_satd_8x4_%1
     SATD_START
     SATD_START
-
     SATD_TWO_SSE2
     SATD_TWO_SSE2
-
     SATD_END
     SATD_END
+%endmacro ; SATDS
+
+%define SUM8x4 SUM8x4_SSE2
+SATDS sse2
+%ifdef HAVE_SSE3
+%define SUM8x4 SUM8x4_SSSE3
+SATDS ssse3
+%endif
 
 
 
 
 
 
index e4d813a6046872c5865f68d1dd2a476cb6e17598..2625ad5447b763a21eb0e173491e92ae1c4c8dc3 100644 (file)
@@ -539,14 +539,16 @@ void x264_pixel_init( int cpu, x264_pixel_function_t *pixf )
 
     if( cpu&X264_CPU_SSSE3 )
     {
 
     if( cpu&X264_CPU_SSSE3 )
     {
-#if defined(ARCH_X86_64) && defined(HAVE_SSE3)
+#ifdef HAVE_SSE3
         pixf->satd[PIXEL_16x16]= x264_pixel_satd_16x16_ssse3;
         pixf->satd[PIXEL_16x8] = x264_pixel_satd_16x8_ssse3;
         pixf->satd[PIXEL_8x16] = x264_pixel_satd_8x16_ssse3;
         pixf->satd[PIXEL_8x8]  = x264_pixel_satd_8x8_ssse3;
         pixf->satd[PIXEL_8x4]  = x264_pixel_satd_8x4_ssse3;
         pixf->satd[PIXEL_16x16]= x264_pixel_satd_16x16_ssse3;
         pixf->satd[PIXEL_16x8] = x264_pixel_satd_16x8_ssse3;
         pixf->satd[PIXEL_8x16] = x264_pixel_satd_8x16_ssse3;
         pixf->satd[PIXEL_8x8]  = x264_pixel_satd_8x8_ssse3;
         pixf->satd[PIXEL_8x4]  = x264_pixel_satd_8x4_ssse3;
+#ifdef ARCH_X86_64
         pixf->sa8d[PIXEL_16x16]= x264_pixel_sa8d_16x16_ssse3;
         pixf->sa8d[PIXEL_8x8]  = x264_pixel_sa8d_8x8_ssse3;
         pixf->sa8d[PIXEL_16x16]= x264_pixel_sa8d_16x16_ssse3;
         pixf->sa8d[PIXEL_8x8]  = x264_pixel_sa8d_8x8_ssse3;
+#endif
 #endif
     }
 #endif //HAVE_MMX
 #endif
     }
 #endif //HAVE_MMX
index b6e0d9e821c4d889e43f4a595eff2c9d6dee6996..3d192054a895abecb4b2f20748426583db3c7ebe 100755 (executable)
--- a/configure
+++ b/configure
@@ -68,7 +68,7 @@ CFLAGS="$CFLAGS -Wall -I."
 LDFLAGS="$LDFLAGS"
 HAVE_GETOPT_LONG=1
 
 LDFLAGS="$LDFLAGS"
 HAVE_GETOPT_LONG=1
 
-AS="nasm"
+AS="yasm"
 ASFLAGS=""
 
 EXE=""
 ASFLAGS=""
 
 EXE=""
@@ -148,7 +148,7 @@ case "${MACHINE%%-*}" in
   i*86)
     ARCH="X86"
     CFLAGS="$CFLAGS -DHAVE_MMX"
   i*86)
     ARCH="X86"
     CFLAGS="$CFLAGS -DHAVE_MMX"
-    AS="nasm"
+    AS="yasm"
     ASFLAGS="-O2"
     if [ "$SYS" = MACOSX ]; then
       ASFLAGS="$ASFLAGS -f macho -DPREFIX"
     ASFLAGS="-O2"
     if [ "$SYS" = MACOSX ]; then
       ASFLAGS="$ASFLAGS -f macho -DPREFIX"
@@ -159,6 +159,7 @@ case "${MACHINE%%-*}" in
     else
       ASFLAGS="$ASFLAGS -f elf"
     fi
     else
       ASFLAGS="$ASFLAGS -f elf"
     fi
+    as_check || AS="nasm"
     ;;
   x86_64)
     ARCH="X86_64"
     ;;
   x86_64)
     ARCH="X86_64"
@@ -218,7 +219,7 @@ then
   fi
 fi
 
   fi
 fi
 
-if [ $ARCH = X86_64 ] ; then
+if [ $ARCH = X86 -o $ARCH = X86_64 ] ; then
     if ! as_check ; then
         echo "No assembler. Please install yasm."
         exit 1
     if ! as_check ; then
         echo "No assembler. Please install yasm."
         exit 1