Merge commit '009adfd4fbdd78a890a4a65d6f141c467bb027fa'
authorClément Bœsch <u@pkh.me>
Tue, 21 Mar 2017 14:02:31 +0000 (15:02 +0100)
committerClément Bœsch <u@pkh.me>
Tue, 21 Mar 2017 14:02:31 +0000 (15:02 +0100)
* commit '009adfd4fbdd78a890a4a65d6f141c467bb027fa':
  x86: fpel: Remove unnecessary sign extend

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

  
  SECTION .text
  
 -INIT_MMX mmxext
 +%macro PAVGB_MMX 4
 +    LOAD   %3, %1
 +    por    %3, %2
 +    pxor   %2, %1
 +    pand   %2, %4
 +    psrlq  %2, 1
 +    psubb  %3, %2
 +    SWAP   %2, %3
 +%endmacro
 +
  ; void ff_put/avg_pixels(uint8_t *block, const uint8_t *pixels,
  ;                        ptrdiff_t line_size, int h)
 -%macro PIXELS48 2
 -%if %2 == 4
 -%define OP movh
 +%macro OP_PIXELS 2
 +%if %2 == mmsize/2
 +%define LOAD movh
 +%define SAVE movh
 +%define LEN  mmsize
  %else
 -%define OP mova
 +%define LOAD movu
 +%define SAVE mova
 +%define LEN  %2
  %endif
 -cglobal %1_pixels%2, 4,5
 +cglobal %1_pixels%2, 4,5,4
-     movsxdifnidn r2, r2d
      lea          r4, [r2*3]
 +%ifidn %1, avg
 +%if notcpuflag(mmxext)
 +    pcmpeqd      m6, m6
 +    paddb        m6, m6
 +%endif
 +%endif
  .loop:
 -    OP           m0, [r1]
 -    OP           m1, [r1+r2]
 -    OP           m2, [r1+r2*2]
 -    OP           m3, [r1+r4]
 -    lea          r1, [r1+r2*4]
 +%assign %%i 0
 +%rep LEN/mmsize
 +    LOAD         m0, [r1 + %%i]
 +    LOAD         m1, [r1+r2 + %%i]
 +    LOAD         m2, [r1+r2*2 + %%i]
 +    LOAD         m3, [r1+r4 + %%i]
  %ifidn %1, avg
 -    pavgb        m0, [r0]
 -    pavgb        m1, [r0+r2]
 -    pavgb        m2, [r0+r2*2]
 -    pavgb        m3, [r0+r4]
 +%if notcpuflag(mmxext)
 +    PAVGB_MMX    [r0 + %%i], m0, m4, m6
 +    PAVGB_MMX    [r0+r2 + %%i], m1, m5, m6
 +    PAVGB_MMX    [r0+r2*2 + %%i], m2, m4, m6
 +    PAVGB_MMX    [r0+r4 + %%i], m3, m5, m6
 +%else
 +    pavgb        m0, [r0 + %%i]
 +    pavgb        m1, [r0+r2 + %%i]
 +    pavgb        m2, [r0+r2*2 + %%i]
 +    pavgb        m3, [r0+r4 + %%i]
 +%endif
  %endif
 -    OP         [r0], m0
 -    OP      [r0+r2], m1
 -    OP    [r0+r2*2], m2
 -    OP      [r0+r4], m3
 +    SAVE       [r0 + %%i], m0
 +    SAVE    [r0+r2 + %%i], m1
 +    SAVE  [r0+r2*2 + %%i], m2
 +    SAVE    [r0+r4 + %%i], m3
 +%assign %%i %%i+mmsize
 +%endrep
      sub         r3d, 4
 +    lea          r1, [r1+r2*4]
      lea          r0, [r0+r2*4]
      jne       .loop
      RET