Merge commit 'f1a9eee41c4b5ea35db9ff0088ce4e6f1e187f2c'
authorClément Bœsch <u@pkh.me>
Sat, 9 Jul 2016 12:52:23 +0000 (14:52 +0200)
committerClément Bœsch <u@pkh.me>
Sat, 9 Jul 2016 12:52:23 +0000 (14:52 +0200)
* commit 'f1a9eee41c4b5ea35db9ff0088ce4e6f1e187f2c':
  x86: Add missing movsxd for the int stride parameter

Merged-by: Clément Bœsch <u@pkh.me>
1  2 
libavcodec/x86/h264_idct.asm
libavcodec/x86/h264_idct_10bit.asm

@@@ -9,20 -9,20 +9,20 @@@
  ;*          Holger Lubitz <hal@duncan.ol.sub.de>
  ;*          Min Chen <chenm001.163.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
  ;*****************************************************************************
  
@@@ -82,6 -82,7 +82,7 @@@ SECTION .tex
  INIT_MMX mmx
  ; void ff_h264_idct_add_8_mmx(uint8_t *dst, int16_t *block, int stride)
  cglobal h264_idct_add_8, 3, 3, 0
+     movsxdifnidn r2, r2d
      IDCT4_ADD    r0, r1, r2
      RET
  
  INIT_MMX mmx
  ; void ff_h264_idct8_add_8_mmx(uint8_t *dst, int16_t *block, int stride)
  cglobal h264_idct8_add_8, 3, 4, 0
+     movsxdifnidn r2, r2d
      %assign pad 128+4-(stack_offset&7)
      SUB         rsp, pad
  
  INIT_XMM sse2
  ; void ff_h264_idct8_add_8_sse2(uint8_t *dst, int16_t *block, int stride)
  cglobal h264_idct8_add_8, 3, 4, 10
+     movsxdifnidn  r2, r2d
      IDCT8_ADD_SSE r0, r1, r2, r3
      RET
  
@@@ -310,6 -313,7 +313,7 @@@ INIT_MMX mmxex
  ; void ff_h264_idct_dc_add_8_mmxext(uint8_t *dst, int16_t *block, int stride)
  %if ARCH_X86_64
  cglobal h264_idct_dc_add_8, 3, 4, 0
+     movsxd       r2, r2d
      movsx        r3, word [r1]
      mov  dword [r1], 0
      DC_ADD_MMXEXT_INIT r3, r2
  
  ; void ff_h264_idct8_dc_add_8_mmxext(uint8_t *dst, int16_t *block, int stride)
  cglobal h264_idct8_dc_add_8, 3, 4, 0
+     movsxd       r2, r2d
      movsx        r3, word [r1]
      mov  dword [r1], 0
      DC_ADD_MMXEXT_INIT r3, r2
@@@ -352,6 -357,7 +357,7 @@@ INIT_MMX mm
  ;                               int16_t *block, int stride,
  ;                               const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add16_8, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
+     movsxdifnidn r3, r3d
      xor          r5, r5
  %ifdef PIC
      lea     picregq, [scan8_mem]
  ;                               int16_t *block, int stride,
  ;                               const uint8_t nnzc[6 * 8])
  cglobal h264_idct8_add4_8, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
+     movsxdifnidn r3, r3d
      %assign pad 128+4-(stack_offset&7)
      SUB         rsp, pad
  
@@@ -409,6 -416,7 +416,7 @@@ INIT_MMX mmxex
  ;                                  int16_t *block, int stride,
  ;                                  const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add16_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
+     movsxdifnidn r3, r3d
      xor          r5, r5
  %ifdef PIC
      lea     picregq, [scan8_mem]
@@@ -456,6 -464,7 +464,7 @@@ INIT_MMX mm
  ;                                    int16_t *block, int stride,
  ;                                    const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add16intra_8, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
+     movsxdifnidn r3, r3d
      xor          r5, r5
  %ifdef PIC
      lea     picregq, [scan8_mem]
@@@ -481,6 -490,7 +490,7 @@@ INIT_MMX mmxex
  ;                                       int16_t *block, int stride,
  ;                                       const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add16intra_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
+     movsxdifnidn r3, r3d
      xor          r5, r5
  %ifdef PIC
      lea     picregq, [scan8_mem]
  ;                                  int16_t *block, int stride,
  ;                                  const uint8_t nnzc[6 * 8])
  cglobal h264_idct8_add4_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
+     movsxdifnidn r3, r3d
      %assign pad 128+4-(stack_offset&7)
      SUB         rsp, pad
  
@@@ -587,6 -598,7 +598,7 @@@ INIT_XMM sse
  ;                                int16_t *block, int stride,
  ;                                const uint8_t nnzc[6 * 8])
  cglobal h264_idct8_add4_8, 5, 8 + npicregs, 10, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
+     movsxdifnidn r3, r3d
      xor          r5, r5
  %ifdef PIC
      lea     picregq, [scan8_mem]
@@@ -638,6 -650,7 +650,7 @@@ INIT_XMM cpunam
  
  INIT_MMX mmx
  h264_idct_add8_mmx_plane:
+     movsxdifnidn r3, r3d
  .nextblock:
      movzx        r6, byte [scan8+r5]
      movzx        r6, byte [r4+r6]
  ;                              int16_t *block, int stride,
  ;                              const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add8_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
+     movsxdifnidn r3, r3d
      mov          r5, 16
      add          r2, 512
  %ifdef PIC
      RET
  
  h264_idct_add8_mmxext_plane:
+     movsxdifnidn r3, r3d
  .nextblock:
      movzx        r6, byte [scan8+r5]
      movzx        r6, byte [r4+r6]
@@@ -730,6 -745,7 +745,7 @@@ INIT_MMX mmxex
  ;                                 int16_t *block, int stride,
  ;                                 const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add8_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
+     movsxdifnidn r3, r3d
      mov          r5, 16
      add          r2, 512
  %if ARCH_X86_64
  
  ; r0 = uint8_t *dst, r2 = int16_t *block, r3 = int stride, r6=clobbered
  h264_idct_dc_add8_mmxext:
+     movsxdifnidn r3, r3d
      movd         m0, [r2   ]          ;  0 0 X D
      mov word [r2+ 0], 0
      punpcklwd    m0, [r2+32]          ;  x X d D
@@@ -771,6 -788,7 +788,7 @@@ ALIGN 1
  INIT_XMM sse2
  ; r0 = uint8_t *dst (clobbered), r2 = int16_t *block, r3 = int stride
  h264_add8x4_idct_sse2:
+     movsxdifnidn r3, r3d
      movq   m0, [r2+ 0]
      movq   m1, [r2+ 8]
      movq   m2, [r2+16]
  ;                                int16_t *block, int stride,
  ;                                const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add16_8, 5, 5 + ARCH_X86_64, 8
+     movsxdifnidn r3, r3d
  %if ARCH_X86_64
      mov         r5, r0
  %endif
  ;                                     int16_t *block, int stride,
  ;                                     const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add16intra_8, 5, 7 + ARCH_X86_64, 8
+     movsxdifnidn r3, r3d
  %if ARCH_X86_64
      mov         r7, r0
  %endif
  ;                               int16_t *block, int stride,
  ;                               const uint8_t nnzc[6 * 8])
  cglobal h264_idct_add8_8, 5, 7 + ARCH_X86_64, 8
+     movsxdifnidn r3, r3d
      add          r2, 512
  %if ARCH_X86_64
      mov          r7, r0
@@@ -5,31 -5,32 +5,31 @@@
  ;*
  ;* Authors: Daniel Kang <daniel.d.kang@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
  ;******************************************************************************
  
  %include "libavutil/x86/x86util.asm"
  
 -SECTION_RODATA
 -
 -pw_pixel_max: times 8 dw ((1 << 10)-1)
 -pd_32:        times 4 dd 32
 -
  SECTION .text
  
 +cextern pw_1023
 +%define pw_pixel_max pw_1023
 +cextern pd_32
 +
  ;-----------------------------------------------------------------------------
  ; void ff_h264_idct_add_10(pixel *dst, int16_t *block, int stride)
  ;-----------------------------------------------------------------------------
  
  %macro IDCT_ADD_10 0
  cglobal h264_idct_add_10, 3,3
+     movsxdifnidn r2, r2d
      IDCT4_ADD_10 r0, r1, r2
      RET
  %endmacro
  
  INIT_XMM sse2
  IDCT_ADD_10
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT_ADD_10
 +%endif
  
  ;-----------------------------------------------------------------------------
  ; void ff_h264_idct_add16_10(pixel *dst, const int *block_offset,
@@@ -118,11 -118,9 +119,11 @@@ add4x4_idct %+ SUFFIX
  INIT_XMM sse2
  ALIGN 16
  ADD4x4IDCT
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  ALIGN 16
  ADD4x4IDCT
 +%endif
  
  %macro ADD16_OP 2
      cmp          byte [r4+%2], 0
  
  %macro IDCT_ADD16_10 0
  cglobal h264_idct_add16_10, 5,6
+     movsxdifnidn r3, r3d
      ADD16_OP 0, 4+1*8
      ADD16_OP 1, 5+1*8
      ADD16_OP 2, 4+2*8
  
  INIT_XMM sse2
  IDCT_ADD16_10
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT_ADD16_10
 +%endif
  
  ;-----------------------------------------------------------------------------
  ; void ff_h264_idct_dc_add_10(pixel *dst, int16_t *block, int stride)
  
  INIT_MMX mmxext
  cglobal h264_idct_dc_add_10,3,3
+     movsxdifnidn r2, r2d
      movd      m0, [r1]
      mov dword [r1], 0
      paddd     m0, [pd_32]
  ;-----------------------------------------------------------------------------
  %macro IDCT8_DC_ADD 0
  cglobal h264_idct8_dc_add_10,3,4,7
+     movsxdifnidn r2, r2d
      movd      m0, [r1]
      mov dword[r1], 0
      paddd     m0, [pd_32]
  
  INIT_XMM sse2
  IDCT8_DC_ADD
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT8_DC_ADD
 +%endif
  
  ;-----------------------------------------------------------------------------
  ; void ff_h264_idct_add16intra_10(pixel *dst, const int *block_offset,
@@@ -279,6 -276,7 +283,7 @@@ idct_dc_add %+ SUFFIX
      ret
  
  cglobal h264_idct_add16intra_10,5,7,8
+     movsxdifnidn r3, r3d
      ADD16_OP_INTRA 0, 4+1*8
      ADD16_OP_INTRA 2, 4+2*8
      ADD16_OP_INTRA 4, 6+1*8
  
  INIT_XMM sse2
  IDCT_ADD16INTRA_10
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT_ADD16INTRA_10
 +%endif
  
  %assign last_block 36
  ;-----------------------------------------------------------------------------
  ;-----------------------------------------------------------------------------
  %macro IDCT_ADD8 0
  cglobal h264_idct_add8_10,5,8,7
+     movsxdifnidn r3, r3d
  %if ARCH_X86_64
      mov      r7, r0
  %endif
  
  INIT_XMM sse2
  IDCT_ADD8
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT_ADD8
 +%endif
  
  ;-----------------------------------------------------------------------------
  ; void ff_h264_idct8_add_10(pixel *dst, int16_t *block, int stride)
  
  %macro IDCT8_ADD 0
  cglobal h264_idct8_add_10, 3,4,16
+     movsxdifnidn r2, r2d
  %if UNIX64 == 0
      %assign pad 16-gprsize-(stack_offset&15)
      sub  rsp, pad
@@@ -548,10 -544,8 +555,10 @@@ h264_idct8_add1_10 %+ SUFFIX
  
  INIT_XMM sse2
  IDCT8_ADD
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT8_ADD
 +%endif
  
  ;-----------------------------------------------------------------------------
  ; void ff_h264_idct8_add4_10(pixel **dst, const int *block_offset,
  
  %macro IDCT8_ADD4 0
  cglobal h264_idct8_add4_10, 0,7,16
+     movsxdifnidn r3, r3d
      %assign pad 16-gprsize-(stack_offset&15)
      SUB      rsp, pad
      mov       r5, r0mp
  
  INIT_XMM sse2
  IDCT8_ADD4
 +%if HAVE_AVX_EXTERNAL
  INIT_XMM avx
  IDCT8_ADD4
 +%endif