]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/x86/vf_v360.asm
avcodec/packet: deprecate av_init_packet()
[ffmpeg] / libavfilter / x86 / vf_v360.asm
index c8b5aa7e2e53b9759e553162bdabe674a6d779b0..8e7e4591b475b22ab3c8f9f7d27202aa0ef47213 100644 (file)
 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 ;******************************************************************************
 
-%if HAVE_AVX2_EXTERNAL && ARCH_X86_64
 
 %include "libavutil/x86/x86util.asm"
 
+%if HAVE_AVX2_EXTERNAL
+
 SECTION_RODATA
 
 pb_mask: db 0,4,8,12,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
+pw_mask: db 0,1,4, 5, 8, 9,12,13,-1,-1,-1,-1,-1,-1,-1,-1
 pd_255: times 4 dd 255
+pd_65535: times 4 dd 65535
 
 SECTION .text
 
@@ -60,10 +63,41 @@ cglobal remap1_8bit_line, 6, 7, 6, dst, width, src, in_linesize, u, v, x
     RET
 
 INIT_YMM avx2
-cglobal remap2_8bit_line, 7, 8, 8, dst, width, src, in_linesize, u, v, ker, x
+cglobal remap1_16bit_line, 6, 7, 6, dst, width, src, in_linesize, u, v, x
     movsxdifnidn widthq, widthd
     xor             xq, xq
     movd           xm0, in_linesized
+    pcmpeqw         m4, m4
+    VBROADCASTI128  m3, [pw_mask]
+    vpbroadcastd    m0, xm0
+
+    .loop:
+        pmovsxwd   m1, [vq + xq * 2]
+        pmovsxwd   m2, [uq + xq * 2]
+
+        pslld            m2, 0x1
+        pmulld           m1, m0
+        paddd            m1, m2
+        mova             m2, m4
+        vpgatherdd       m5, [srcq + m1], m2
+        pshufb           m1, m5, m3
+        vextracti128    xm2, m1, 1
+        movq    [dstq+xq*2], xm1
+        movq  [dstq+xq*2+8], xm2
+
+        add   xq, mmsize / 4
+        cmp   xq, widthq
+        jl .loop
+    RET
+
+INIT_YMM avx2
+cglobal remap2_8bit_line, 7, 8, 8, dst, width, src, in_linesize, u, v, ker, x
+    movsxdifnidn widthq, widthd
+    movd           xm0, in_linesized
+%if ARCH_X86_32
+DEFINE_ARGS dst, width, src, x, u, v, ker
+%endif
+    xor             xq, xq
     pcmpeqw         m7, m7
     vpbroadcastd    m0, xm0
     vpbroadcastd    m6, [pd_255]
@@ -92,6 +126,88 @@ cglobal remap2_8bit_line, 7, 8, 8, dst, width, src, in_linesize, u, v, ker, x
         jl .loop
     RET
 
+INIT_YMM avx2
+cglobal remap2_16bit_line, 7, 8, 8, dst, width, src, in_linesize, u, v, ker, x
+    movsxdifnidn widthq, widthd
+    movd           xm0, in_linesized
+%if ARCH_X86_32
+DEFINE_ARGS dst, width, src, x, u, v, ker
+%endif
+    xor             xq, xq
+    pcmpeqw         m7, m7
+    vpbroadcastd    m0, xm0
+    vpbroadcastd    m6, [pd_65535]
+
+    .loop:
+        pmovsxwd   m1, [kerq + xq * 8]
+        pmovsxwd   m2, [vq + xq * 8]
+        pmovsxwd   m3, [uq + xq * 8]
+
+        pslld           m3, 0x1
+        pmulld          m4, m2, m0
+        paddd           m4, m3
+        mova            m3, m7
+        vpgatherdd      m2, [srcq + m4], m3
+        pand            m2, m6
+        pmulld          m2, m1
+        phaddd          m2, m2
+        phaddd          m1, m2, m2
+        psrld           m1, m1, 0xe
+        vextracti128   xm2, m1, 1
+
+        pextrw   [dstq+xq*2], xm1, 0
+        pextrw [dstq+xq*2+2], xm2, 0
+
+        add   xq, mmsize / 16
+        cmp   xq, widthq
+        jl .loop
+    RET
+
+%if ARCH_X86_64
+
+INIT_YMM avx2
+cglobal remap3_8bit_line, 7, 11, 8, dst, width, src, in_linesize, u, v, ker, x, y, tmp, z
+    movsxdifnidn widthq, widthd
+    xor             zq, zq
+    xor             yq, yq
+    xor             xq, xq
+    movd           xm0, in_linesized
+    pcmpeqw         m7, m7
+    vpbroadcastd    m0, xm0
+    vpbroadcastd    m6, [pd_255]
+
+    .loop:
+        pmovsxwd   m1, [kerq + yq]
+        pmovsxwd   m2, [vq + yq]
+        pmovsxwd   m3, [uq + yq]
+
+        pmulld          m4, m2, m0
+        paddd           m4, m3
+        mova            m3, m7
+        vpgatherdd      m2, [srcq + m4], m3
+        pand            m2, m6
+        pmulld          m2, m1
+        HADDD           m2, m1
+        movzx         tmpq, word [vq + yq + 16]
+        imul          tmpq, in_linesizeq
+        movzx           zq, word [uq + yq + 16]
+        add           tmpq, zq
+        movzx           zq, byte [srcq + tmpq]
+        movzx         tmpq, word [kerq + yq + 16]
+        imul            zd, tmpd
+        movd           xm1, zd
+        paddd           m2, m1
+        psrld           m2, m2, 0xe
+
+        packuswb        m2, m2
+        pextrb   [dstq+xq], xm2, 0
+
+        add   xq, 1
+        add   yq, 18
+        cmp   xq, widthq
+        jl .loop
+    RET
+
 INIT_YMM avx2
 cglobal remap4_8bit_line, 7, 9, 11, dst, width, src, in_linesize, u, v, ker, x, y
     movsxdifnidn widthq, widthd
@@ -124,14 +240,11 @@ cglobal remap4_8bit_line, 7, 9, 11, dst, width, src, in_linesize, u, v, ker, x,
         pmulld          m4, m5
 
         paddd           m2, m4
-        vextracti128   xm1, m2, 1
-        paddd           m1, m2
-        phaddd          m1, m1
-        phaddd          m1, m1
-        psrld           m1, m1, 0xe
-        packuswb        m1, m1
+        HADDD           m2, m1
+        psrld           m2, m2, 0xe
+        packuswb        m2, m2
 
-        pextrb   [dstq+xq], xm1, 0
+        pextrb   [dstq+xq], xm2, 0
 
         add   xq, 1
         add   yq, 32
@@ -140,3 +253,4 @@ cglobal remap4_8bit_line, 7, 9, 11, dst, width, src, in_linesize, u, v, ker, x,
     RET
 
 %endif
+%endif