avcodec/h264: mmx2, sse2, avx 10-bit h chroma deblock/loop filter
[ffmpeg.git] / libavcodec / x86 / sbrdsp.asm
index a8ec7ed..07a412b 100644 (file)
@@ -34,7 +34,7 @@ ps_noise13      dd  0.0,  1.0, 0.0, -1.0
 cextern         sbr_noise_table
 cextern         ps_neg
 
-SECTION_TEXT
+SECTION .text
 
 INIT_XMM sse
 cglobal sbr_sum_square, 2, 3, 6
@@ -382,6 +382,7 @@ apply_noise_main:
 %else
 %define count m_maxq
 %endif
+    movsxdifnidn    noiseq, noised
     dec    noiseq
     shl    count, 2
 %ifdef PIC
@@ -454,13 +455,15 @@ cglobal sbr_autocorrelate, 2,3,8,32, x, phi, cnt
     neg   cntq
 
 %if cpuflag(sse3)
+%define   MOVH  movsd
     movddup m5, [xq+cntq]
 %else
+%define   MOVH  movlps
     movlps  m5, [xq+cntq]
     movlhps m5, m5
 %endif
-    movlps  m7, [xq+cntq+8 ]
-    movlps  m1, [xq+cntq+16]
+    MOVH    m7, [xq+cntq+8 ]
+    MOVH    m1, [xq+cntq+16]
     shufps  m7, m7, q0110
     shufps  m1, m1, q0110
     mulps   m3, m5, m7   ;              x[0][0] * x[1][0], x[0][1] * x[1][1], x[0][0] * x[1][1], x[0][1] * x[1][0]
@@ -470,7 +473,7 @@ cglobal sbr_autocorrelate, 2,3,8,32, x, phi, cnt
     movaps  [rsp+16], m4
     add   cntq, 8
 
-    movlps  m2, [xq+cntq+16]
+    MOVH    m2, [xq+cntq+16]
     movlhps m7, m7
     shufps  m2, m2, q0110
     mulps   m6, m7, m1   ; real_sum1  = x[1][0] * x[2][0], x[1][1] * x[2][1]; imag_sum1 += x[1][0] * x[2][1], x[1][1] * x[2][0]
@@ -481,7 +484,7 @@ cglobal sbr_autocorrelate, 2,3,8,32, x, phi, cnt
 align 16
 .loop:
     add   cntq, 8
-    movlps  m0, [xq+cntq+16]
+    MOVH    m0, [xq+cntq+16]
     movlhps m1, m1
     shufps  m0, m0, q0110
     mulps   m3, m1, m2
@@ -491,7 +494,7 @@ align 16
     addps   m5, m4       ; real_sum2 += x[i][0] * x[i + 2][0], x[i][1] * x[i + 2][1]; imag_sum2 += x[i][0] * x[i + 2][1], x[i][1] * x[i + 2][0];
     addps   m7, m1       ; real_sum0 += x[i][0] * x[i][0],     x[i][1] * x[i][1];
     add   cntq, 8
-    movlps  m1, [xq+cntq+16]
+    MOVH    m1, [xq+cntq+16]
     movlhps m2, m2
     shufps  m1, m1, q0110
     mulps   m3, m2, m0
@@ -501,7 +504,7 @@ align 16
     addps   m5, m4       ; real_sum2 += x[i][0] * x[i + 2][0], x[i][1] * x[i + 2][1]; imag_sum2 += x[i][0] * x[i + 2][1], x[i][1] * x[i + 2][0];
     addps   m7, m2       ; real_sum0 += x[i][0] * x[i][0],     x[i][1] * x[i][1];
     add   cntq, 8
-    movlps  m2, [xq+cntq+16]
+    MOVH    m2, [xq+cntq+16]
     movlhps m0, m0
     shufps  m2, m2, q0110
     mulps   m3, m0, m1
@@ -513,42 +516,26 @@ align 16
     jl .loop
 
     movlhps m1, m1
-    mulps   m4, m1, m2
+    mulps   m2, m1
     mulps   m1, m1
-    addps   m4, m6       ; real_sum1 + x[38][0] * x[39][0], x[38][1] * x[39][1]; imag_sum1 + x[38][0] * x[39][1], x[38][1] * x[39][0];
+    addps   m2, m6       ; real_sum1 + x[38][0] * x[39][0], x[38][1] * x[39][1]; imag_sum1 + x[38][0] * x[39][1], x[38][1] * x[39][0];
     addps   m1, m7       ; real_sum0 + x[38][0] * x[38][0], x[38][1] * x[38][1];
     addps   m6, [rsp   ] ; real_sum1 + x[ 0][0] * x[ 1][0], x[ 0][1] * x[ 1][1]; imag_sum1 + x[ 0][0] * x[ 1][1], x[ 0][1] * x[ 1][0];
     addps   m7, [rsp+16] ; real_sum0 + x[ 0][0] * x[ 0][0], x[ 0][1] * x[ 0][1];
 
-    xorps   m4, [ps_mask3]
+    xorps   m2, [ps_mask3]
     xorps   m5, [ps_mask3]
     xorps   m6, [ps_mask3]
+    HADDPS  m2, m5, m3
+    HADDPS  m7, m6, m4
 %if cpuflag(sse3)
-    movshdup m2, m1
-    haddps  m4, m5
-    haddps  m7, m6
-    addss   m1, m2
+    movshdup m0, m1
 %else
-    movaps  m3, m4
-    movaps  m2, m5
-    movaps  m0, m6
-    shufps  m3, m3, q0301
-    shufps  m2, m2, q0301
-    shufps  m0, m0, q0301
-    addps   m4, m3
-    addps   m5, m2
-    addps   m6, m0
-
-    movss   m2, m7
-    movss   m3, m1
-    shufps  m7, m7, q0001
+    movss   m0, m1
     shufps  m1, m1, q0001
-    addss   m7, m2
-    addss   m1, m3
-    shufps  m4, m5, q2020
-    shufps  m7, m6, q2020
 %endif
-    movaps  [phiq     ], m4
+    addss   m1, m0
+    movaps  [phiq     ], m2
     movhps  [phiq+0x18], m7
     movss   [phiq+0x28], m7
     movss   [phiq+0x10], m1