Merge commit 'b89804da9bad2d94dd95bf20ac6187447e9c17e9'
authorJames Almer <jamrial@gmail.com>
Thu, 23 Mar 2017 21:35:49 +0000 (18:35 -0300)
committerJames Almer <jamrial@gmail.com>
Thu, 23 Mar 2017 21:35:49 +0000 (18:35 -0300)
* commit 'b89804da9bad2d94dd95bf20ac6187447e9c17e9':
  x86: videodsp: Add parentheses to expression to work around warning

Merged-by: James Almer <jamrial@gmail.com>
1  2 
libavcodec/x86/videodsp.asm

@@@ -2,20 -2,20 +2,20 @@@
  ;* Core video DSP functions
  ;* Copyright (c) 2012 Ronald S. Bultje <rsbultje@gmail.com>
  ;*
 -;* This file is part of Libav.
 +;* This file is part of FFmpeg.
  ;*
 -;* Libav is free software; you can redistribute it and/or
 +;* FFmpeg is free software; you can redistribute it and/or
  ;* modify it under the terms of the GNU Lesser General Public
  ;* License as published by the Free Software Foundation; either
  ;* version 2.1 of the License, or (at your option) any later version.
  ;*
 -;* Libav is distributed in the hope that it will be useful,
 +;* FFmpeg is distributed in the hope that it will be useful,
  ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ;* Lesser General Public License for more details.
  ;*
  ;* You should have received a copy of the GNU Lesser General Public
 -;* License along with Libav; if not, write to the Free Software
 +;* License along with FFmpeg; if not, write to the Free Software
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
@@@ -54,13 -54,13 +54,13 @@@ SECTION .tex
  ; |    |    <- bottom is copied from last line in body of source
  ; '----' <- bh
  %if ARCH_X86_64
 -cglobal emu_edge_vvar, 7, 8, 1, dst, src, dst_stride, src_stride, \
 +cglobal emu_edge_vvar, 7, 8, 1, dst, dst_stride, src, src_stride, \
                                  start_y, end_y, bh, w
  %else ; x86-32
  cglobal emu_edge_vvar, 1, 6, 1, dst, src, start_y, end_y, bh, w
  %define src_strideq r3mp
 -%define dst_strideq r2mp
 -    mov            srcq, r1mp
 +%define dst_strideq r1mp
 +    mov            srcq, r2mp
      mov        start_yq, r4mp
      mov          end_yq, r5mp
      mov             bhq, r6mp
@@@ -97,10 -97,7 +97,10 @@@ cglobal emu_edge_hvar, 5, 6, 1, dst, ds
      neg        n_wordsq
      lea        start_xq, [start_xq+n_wordsq*2]
  .y_loop:                                        ; do {
 -    ; FIXME also write a ssse3 version using pshufb
 +%if cpuflag(avx2)
 +    vpbroadcastb     m0, [dstq+start_xq]
 +    mov              wq, n_wordsq               ;   initialize w
 +%else
      movzx            wd, byte [dstq+start_xq]   ;   w = read(1)
      imul             wd, 0x01010101             ;   w *= 0x01010101
      movd             m0, wd
  %else ; mmx
      punpckldq        m0, m0                     ;   splat
  %endif ; mmx/sse
 +%endif ; avx2
  .x_loop:                                        ;   do {
      movu    [dstq+wq*2], m0                     ;     write($reg, $mmsize)
      add              wq, mmsize/2               ;     w -= $mmsize/2
-     cmp              wq, -mmsize/2              ;   } while (w > $mmsize/2)
+     cmp              wq, -(mmsize/2)            ;   } while (w > $mmsize/2)
      jl .x_loop
      movu  [dstq-mmsize], m0                     ;   write($reg, $mmsize)
      add            dstq, dst_strideq            ;   dst += dst_stride
@@@ -131,11 -127,6 +131,11 @@@ hvar_f
  INIT_XMM sse2
  hvar_fn
  
 +%if HAVE_AVX2_EXTERNAL
 +INIT_XMM avx2
 +hvar_fn
 +%endif
 +
  ; macro to read/write a horizontal number of pixels (%2) to/from registers
  ; on sse, - fills xmm0-15 for consecutive sets of 16 pixels
  ;         - if (%2 & 8)  fills 8 bytes into xmm$next
      mov            valb, [srcq+%2-1]
  %elif (%2-%%off) == 2
      mov            valw, [srcq+%2-2]
 -%elifidn %1, body
 -    mov            vald, [srcq+%2-3]
  %else
 -    movd mm %+ %%mmx_idx, [srcq+%2-3]
 +    mov            valb, [srcq+%2-1]
 +    ror            vald, 16
 +    mov            valw, [srcq+%2-3]
  %endif
  %endif ; (%2-%%off) >= 1
  %endmacro ; READ_NUM_BYTES
      mov     [dstq+%2-1], valb
  %elif (%2-%%off) == 2
      mov     [dstq+%2-2], valw
 -%elifidn %1, body
 -    mov     [dstq+%2-3], valw
 -    shr            vald, 16
 -    mov     [dstq+%2-1], valb
  %else
 -    movd           vald, mm %+ %%mmx_idx
      mov     [dstq+%2-3], valw
 -    shr            vald, 16
 +    ror            vald, 16
      mov     [dstq+%2-1], valb
 +%ifnidn %1, body
 +    ror            vald, 16
 +%endif
  %endif
  %endif ; (%2-%%off) >= 1
  %endmacro ; WRITE_NUM_BYTES
  %rep 1+%2-%1
  %if %%n <= 3
  %if ARCH_X86_64
 -cglobal emu_edge_vfix %+ %%n, 6, 8, 0, dst, src, dst_stride, src_stride, \
 +cglobal emu_edge_vfix %+ %%n, 6, 8, 0, dst, dst_stride, src, src_stride, \
                                         start_y, end_y, val, bh
      mov             bhq, r6mp                   ; r6mp = bhmp
  %else ; x86-32
  cglobal emu_edge_vfix %+ %%n, 0, 6, 0, val, dst, src, start_y, end_y, bh
      mov            dstq, r0mp
 -    mov            srcq, r1mp
 +    mov            srcq, r2mp
      mov        start_yq, r4mp
      mov          end_yq, r5mp
      mov             bhq, r6mp
 -%define dst_strideq r2mp
 +%define dst_strideq r1mp
  %define src_strideq r3mp
  %endif ; x86-64/32
  %else
  %if ARCH_X86_64
 -cglobal emu_edge_vfix %+ %%n, 7, 7, 1, dst, src, dst_stride, src_stride, \
 +cglobal emu_edge_vfix %+ %%n, 7, 7, 1, dst, dst_stride, src, src_stride, \
                                         start_y, end_y, bh
  %else ; x86-32
  cglobal emu_edge_vfix %+ %%n, 1, 5, 1, dst, src, start_y, end_y, bh
 -    mov            srcq, r1mp
 +    mov            srcq, r2mp
      mov        start_yq, r4mp
      mov          end_yq, r5mp
      mov             bhq, r6mp
 -%define dst_strideq r2mp
 +%define dst_strideq r1mp
  %define src_strideq r3mp
  %endif ; x86-64/32
  %endif
@@@ -351,8 -344,9 +351,8 @@@ VERTICAL_EXTEND 16, 2
  ; obviously not the same on both sides.
  
  %macro READ_V_PIXEL 2
 -%if %1 == 2
 -    movzx          valw, byte %2
 -    imul           valw, 0x0101
 +%if cpuflag(avx2)
 +    vpbroadcastb     m0, %2
  %else
      movzx          vald, byte %2
      imul           vald, 0x01010101
      pshufd           m0, m0, q0000
  %else
      punpckldq        m0, m0
 -%endif
 -%endif ; %1 >= 8
 -%endif
 +%endif ; mmsize == 16
 +%endif ; %1 > 16
 +%endif ; avx2
  %endmacro ; READ_V_PIXEL
  
  %macro WRITE_V_PIXEL 2
  %assign %%off 0
 +
 +%if %1 >= 8
 +
  %rep %1/mmsize
      movu     [%2+%%off], m0
  %assign %%off %%off+mmsize
  %assign %%off %%off+8
  %endif
  %endif ; %1-%%off >= 8
 -%endif
 +%endif ; mmsize == 16
  
  %if %1-%%off >= 4
  %if %1 > 8 && %1-%%off > 4
      movq      [%2+%1-8], m0
  %assign %%off %1
 -%elif %1 >= 8 && %1-%%off >= 4
 -    movd     [%2+%%off], m0
 -%assign %%off %%off+4
  %else
 -    mov      [%2+%%off], vald
 +    movd     [%2+%%off], m0
  %assign %%off %%off+4
  %endif
  %endif ; %1-%%off >= 4
  
 -%if %1-%%off >= 2
 -%if %1 >= 8
 -    movd      [%2+%1-4], m0
 +%else ; %1 < 8
 +
 +%rep %1/4
 +    mov      [%2+%%off], vald
 +%assign %%off %%off+4
 +%endrep ; %1/4
 +
 +%endif ; %1 >=/< 8
 +
 +%if %1-%%off == 2
 +%if cpuflag(avx2)
 +    movd     [%2+%%off-2], m0
  %else
      mov      [%2+%%off], valw
 -%endif
 +%endif ; avx2
  %endif ; (%1-%%off)/2
  %endmacro ; WRITE_V_PIXEL
  
  %macro H_EXTEND 2
  %assign %%n %1
  %rep 1+(%2-%1)/2
 +%if cpuflag(avx2)
 +cglobal emu_edge_hfix %+ %%n, 4, 4, 1, dst, dst_stride, start_x, bh
 +%else
  cglobal emu_edge_hfix %+ %%n, 4, 5, 1, dst, dst_stride, start_x, bh, val
 +%endif
  .loop_y:                                        ; do {
      READ_V_PIXEL    %%n, [dstq+start_xq]        ;   $variable_regs = read($n)
      WRITE_V_PIXEL   %%n, dstq                   ;   write($variable_regs, $n)
@@@ -445,11 -426,6 +445,11 @@@ H_EXTEND 16, 2
  INIT_XMM sse2
  H_EXTEND 16, 22
  
 +%if HAVE_AVX2_EXTERNAL
 +INIT_XMM avx2
 +H_EXTEND 8, 22
 +%endif
 +
  %macro PREFETCH_FN 1
  cglobal prefetch, 3, 3, 0, buf, stride, h
  .loop: