x86/dsputilenc: make the SUM_ABS_DCTELEM macro more readable
authorJames Almer <jamrial@gmail.com>
Sat, 24 May 2014 23:30:42 +0000 (20:30 -0300)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 25 May 2014 00:03:54 +0000 (02:03 +0200)
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/x86/dsputilenc.asm

index c06f28b..46330fe 100644 (file)
@@ -487,34 +487,28 @@ cglobal pix_norm1, 2, 4
     movd        eax, m1
     RET
 
-%macro DCT_SAD4 1
-    mova      m2, [blockq+%1+0 ]
-    mova      m3, [blockq+%1+16]
-    mova      m4, [blockq+%1+32]
-    mova      m5, [blockq+%1+48]
-    ABS1_SUM  m2, m6, m0
-    ABS1_SUM  m3, m6, m1
-    ABS1_SUM  m4, m6, m0
-    ABS1_SUM  m5, m6, m1
-%endmacro
-
 ;-----------------------------------------------
 ;int ff_sum_abs_dctelem(int16_t *block)
 ;-----------------------------------------------
 ; %1 = number of xmm registers used
+; %2 = number of inline loops
 
-%macro SUM_ABS_DCTELEM 1
+%macro SUM_ABS_DCTELEM 2
 cglobal sum_abs_dctelem, 1, 1, %1, block
     pxor    m0, m0
     pxor    m1, m1
-    DCT_SAD4 0
-%if mmsize == 8
-    DCT_SAD4 8
-%endif
-    DCT_SAD4 64
-%if mmsize == 8
-    DCT_SAD4 72
-%endif
+%assign %%i 0
+%rep %2
+    mova      m2, [blockq+mmsize*(0+%%i)]
+    mova      m3, [blockq+mmsize*(1+%%i)]
+    mova      m4, [blockq+mmsize*(2+%%i)]
+    mova      m5, [blockq+mmsize*(3+%%i)]
+    ABS1_SUM  m2, m6, m0
+    ABS1_SUM  m3, m6, m1
+    ABS1_SUM  m4, m6, m0
+    ABS1_SUM  m5, m6, m1
+%assign %%i %%i+4
+%endrep
     paddusw m0, m1
     HSUM    m0, m1, eax
     and     eax, 0xFFFF
@@ -522,10 +516,10 @@ cglobal sum_abs_dctelem, 1, 1, %1, block
 %endmacro
 
 INIT_MMX mmx
-SUM_ABS_DCTELEM 0
+SUM_ABS_DCTELEM 0, 4
 INIT_MMX mmxext
-SUM_ABS_DCTELEM 0
+SUM_ABS_DCTELEM 0, 4
 INIT_XMM sse2
-SUM_ABS_DCTELEM 7
+SUM_ABS_DCTELEM 7, 2
 INIT_XMM ssse3
-SUM_ABS_DCTELEM 6
+SUM_ABS_DCTELEM 6, 2