Merge commit '6860b4081d046558c44b1b42f22022ea341a2a73'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 31 Oct 2012 12:30:03 +0000 (13:30 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 31 Oct 2012 12:43:33 +0000 (13:43 +0100)
* commit '6860b4081d046558c44b1b42f22022ea341a2a73':
  x86: include x86inc.asm in x86util.asm
  cng: Reindent some incorrectly indented lines
  cngdec: Allow flushing the decoder
  cngdec: Make the dbov variable have the right unit
  cngdec: Fix the memset size to cover the full array
  cngdec: Update the LPC coefficients after averaging the reflection coefficients
  configure: fix print_config() with broke awks

Conflicts:
libavcodec/x86/ac3dsp.asm
libavcodec/x86/dct32.asm
libavcodec/x86/deinterlace.asm
libavcodec/x86/dsputil.asm
libavcodec/x86/dsputilenc.asm
libavcodec/x86/fft.asm
libavcodec/x86/fmtconvert.asm
libavcodec/x86/h264_chromamc.asm
libavcodec/x86/h264_deblock.asm
libavcodec/x86/h264_deblock_10bit.asm
libavcodec/x86/h264_idct.asm
libavcodec/x86/h264_idct_10bit.asm
libavcodec/x86/h264_intrapred.asm
libavcodec/x86/h264_intrapred_10bit.asm
libavcodec/x86/h264_weight.asm
libavcodec/x86/vc1dsp.asm
libavcodec/x86/vp3dsp.asm
libavcodec/x86/vp56dsp.asm
libavcodec/x86/vp8dsp.asm

Merged-by: Michael Niedermayer <michaelni@gmx.at>
35 files changed:
1  2 
libavcodec/cngdec.c
libavcodec/cngenc.c
libavcodec/x86/ac3dsp.asm
libavcodec/x86/dct32.asm
libavcodec/x86/deinterlace.asm
libavcodec/x86/diracdsp_yasm.asm
libavcodec/x86/dsputil.asm
libavcodec/x86/dsputilenc.asm
libavcodec/x86/dwt_yasm.asm
libavcodec/x86/fft.asm
libavcodec/x86/fmtconvert.asm
libavcodec/x86/h264_chromamc.asm
libavcodec/x86/h264_deblock.asm
libavcodec/x86/h264_deblock_10bit.asm
libavcodec/x86/h264_idct.asm
libavcodec/x86/h264_idct_10bit.asm
libavcodec/x86/h264_intrapred.asm
libavcodec/x86/h264_intrapred_10bit.asm
libavcodec/x86/h264_weight.asm
libavcodec/x86/imdct36.asm
libavcodec/x86/proresdsp.asm
libavcodec/x86/v210.asm
libavcodec/x86/vc1dsp.asm
libavcodec/x86/vp3dsp.asm
libavcodec/x86/vp56dsp.asm
libavcodec/x86/vp8dsp.asm
libavfilter/x86/hqdn3d.asm
libavutil/x86/cpuid.asm
libavutil/x86/float_dsp.asm
libavutil/x86/x86util.asm
libswresample/x86/audio_convert.asm
libswresample/x86/rematrix.asm
libswscale/x86/input.asm
libswscale/x86/output.asm
libswscale/x86/scale.asm

Simple merge
Simple merge
@@@ -19,8 -19,7 +19,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -19,8 -19,7 +19,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA 32
  
@@@ -20,8 -20,7 +20,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
index f5f32b3,0000000..3a86bd7
mode 100644,000000..100644
--- /dev/null
@@@ -1,260 -1,0 +1,260 @@@
- %include "x86inc.asm"
 +;******************************************************************************
 +;* Copyright (c) 2010 David Conrad
 +;*
 +;* This file is part of FFmpeg.
 +;*
 +;* 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.
 +;*
 +;* 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 FFmpeg; if not, write to the Free Software
 +;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 +;******************************************************************************
 +
++%include "x86util.asm"
 +
 +SECTION_RODATA
 +pw_3: times 8 dw 3
 +pw_7: times 8 dw 7
 +pw_16: times 8 dw 16
 +pw_32: times 8 dw 32
 +pb_128: times 16 db 128
 +
 +section .text
 +
 +%macro UNPACK_ADD 6
 +    mov%5   %1, %3
 +    mov%6   m5, %4
 +    mova    m4, %1
 +    mova    %2, m5
 +    punpcklbw %1, m7
 +    punpcklbw m5, m7
 +    punpckhbw m4, m7
 +    punpckhbw %2, m7
 +    paddw   %1, m5
 +    paddw   %2, m4
 +%endmacro
 +
 +%macro HPEL_FILTER 1
 +; dirac_hpel_filter_v_sse2(uint8_t *dst, uint8_t *src, int stride, int width);
 +cglobal dirac_hpel_filter_v_%1, 4,6,8, dst, src, stride, width, src0, stridex3
 +    mov     src0q, srcq
 +    lea     stridex3q, [3*strideq]
 +    sub     src0q, stridex3q
 +    pxor    m7, m7
 +.loop:
 +    ; 7*(src[0] + src[1])
 +    UNPACK_ADD m0, m1, [srcq], [srcq + strideq], a,a
 +    pmullw  m0, [pw_7]
 +    pmullw  m1, [pw_7]
 +
 +    ; 3*( ... + src[-2] + src[3])
 +    UNPACK_ADD m2, m3, [src0q + strideq], [srcq + stridex3q], a,a
 +    paddw   m0, m2
 +    paddw   m1, m3
 +    pmullw  m0, [pw_3]
 +    pmullw  m1, [pw_3]
 +
 +    ; ... - 7*(src[-1] + src[2])
 +    UNPACK_ADD m2, m3, [src0q + strideq*2], [srcq + strideq*2], a,a
 +    pmullw  m2, [pw_7]
 +    pmullw  m3, [pw_7]
 +    psubw   m0, m2
 +    psubw   m1, m3
 +
 +    ; ... - (src[-3] + src[4])
 +    UNPACK_ADD m2, m3, [src0q], [srcq + strideq*4], a,a
 +    psubw   m0, m2
 +    psubw   m1, m3
 +
 +    paddw   m0, [pw_16]
 +    paddw   m1, [pw_16]
 +    psraw   m0, 5
 +    psraw   m1, 5
 +    packuswb m0, m1
 +    mova    [dstq], m0
 +    add     dstq, mmsize
 +    add     srcq, mmsize
 +    add     src0q, mmsize
 +    sub     widthd, mmsize
 +    jg      .loop
 +    RET
 +
 +; dirac_hpel_filter_h_sse2(uint8_t *dst, uint8_t *src, int width);
 +cglobal dirac_hpel_filter_h_%1, 3,3,8, dst, src, width
 +    dec     widthd
 +    pxor    m7, m7
 +    and     widthd, ~(mmsize-1)
 +.loop:
 +    ; 7*(src[0] + src[1])
 +    UNPACK_ADD m0, m1, [srcq + widthq], [srcq + widthq + 1], u,u
 +    pmullw  m0, [pw_7]
 +    pmullw  m1, [pw_7]
 +
 +    ; 3*( ... + src[-2] + src[3])
 +    UNPACK_ADD m2, m3, [srcq + widthq - 2], [srcq + widthq + 3], u,u
 +    paddw   m0, m2
 +    paddw   m1, m3
 +    pmullw  m0, [pw_3]
 +    pmullw  m1, [pw_3]
 +
 +    ; ... - 7*(src[-1] + src[2])
 +    UNPACK_ADD m2, m3, [srcq + widthq - 1], [srcq + widthq + 2], u,u
 +    pmullw  m2, [pw_7]
 +    pmullw  m3, [pw_7]
 +    psubw   m0, m2
 +    psubw   m1, m3
 +
 +    ; ... - (src[-3] + src[4])
 +    UNPACK_ADD m2, m3, [srcq + widthq - 3], [srcq + widthq + 4], u,u
 +    psubw   m0, m2
 +    psubw   m1, m3
 +
 +    paddw   m0, [pw_16]
 +    paddw   m1, [pw_16]
 +    psraw   m0, 5
 +    psraw   m1, 5
 +    packuswb m0, m1
 +    mova    [dstq + widthq], m0
 +    sub     widthd, mmsize
 +    jge     .loop
 +    RET
 +%endmacro
 +
 +%macro PUT_RECT 1
 +; void put_rect_clamped(uint8_t *dst, int dst_stride, int16_t *src, int src_stride, int width, int height)
 +cglobal put_signed_rect_clamped_%1, 5,9,3, dst, dst_stride, src, src_stride, w, dst2, src2
 +    mova    m0, [pb_128]
 +    add     wd, (mmsize-1)
 +    and     wd, ~(mmsize-1)
 +
 +%if ARCH_X86_64
 +    mov   r7d, r5m
 +    mov   r8d, wd
 +    %define wspill r8d
 +    %define hd r7d
 +%else
 +    mov    r4m, wd
 +    %define wspill r4m
 +    %define hd r5mp
 +%endif
 +
 +.loopy
 +    lea     src2q, [srcq+src_strideq*2]
 +    lea     dst2q, [dstq+dst_strideq]
 +.loopx:
 +    sub      wd, mmsize
 +    mova     m1, [srcq +2*wq]
 +    mova     m2, [src2q+2*wq]
 +    packsswb m1, [srcq +2*wq+mmsize]
 +    packsswb m2, [src2q+2*wq+mmsize]
 +    paddb    m1, m0
 +    paddb    m2, m0
 +    mova    [dstq +wq], m1
 +    mova    [dst2q+wq], m2
 +    jg      .loopx
 +
 +    lea   srcq, [srcq+src_strideq*4]
 +    lea   dstq, [dstq+dst_strideq*2]
 +    sub     hd, 2
 +    mov     wd, wspill
 +    jg      .loopy
 +    RET
 +%endm
 +
 +%macro ADD_RECT 1
 +; void add_rect_clamped(uint8_t *dst, uint16_t *src, int stride, int16_t *idwt, int idwt_stride, int width, int height)
 +cglobal add_rect_clamped_%1, 7,9,3, dst, src, stride, idwt, idwt_stride, w, h
 +    mova    m0, [pw_32]
 +    add     wd, (mmsize-1)
 +    and     wd, ~(mmsize-1)
 +
 +%if ARCH_X86_64
 +    mov   r8d, wd
 +    %define wspill r8d
 +%else
 +    mov    r5m, wd
 +    %define wspill r5m
 +%endif
 +
 +.loop:
 +    sub     wd, mmsize
 +    movu    m1, [srcq +2*wq] ; FIXME: ensure alignment
 +    paddw   m1, m0
 +    psraw   m1, 6
 +    movu    m2, [srcq +2*wq+mmsize] ; FIXME: ensure alignment
 +    paddw   m2, m0
 +    psraw   m2, 6
 +    paddw   m1, [idwtq+2*wq]
 +    paddw   m2, [idwtq+2*wq+mmsize]
 +    packuswb m1, m2
 +    mova    [dstq +wq], m1
 +    jg      .loop
 +
 +    lea   srcq, [srcq + 2*strideq]
 +    add   dstq, strideq
 +    lea  idwtq, [idwtq+ 2*idwt_strideq]
 +    sub     hd, 1
 +    mov     wd, wspill
 +    jg      .loop
 +    RET
 +%endm
 +
 +%macro ADD_OBMC 2
 +; void add_obmc(uint16_t *dst, uint8_t *src, int stride, uint8_t *obmc_weight, int yblen)
 +cglobal add_dirac_obmc%1_%2, 6,6,5, dst, src, stride, obmc, yblen
 +    pxor        m4, m4
 +.loop:
 +%assign i 0
 +%rep %1 / mmsize
 +    mova        m0, [srcq+i]
 +    mova        m1, m0
 +    punpcklbw   m0, m4
 +    punpckhbw   m1, m4
 +    mova        m2, [obmcq+i]
 +    mova        m3, m2
 +   punpcklbw   m2, m4
 +    punpckhbw   m3, m4
 +    pmullw      m0, m2
 +    pmullw      m1, m3
 +    movu        m2, [dstq+2*i]
 +    movu        m3, [dstq+2*i+mmsize]
 +    paddw       m0, m2
 +    paddw       m1, m3
 +    movu        [dstq+2*i], m0
 +    movu        [dstq+2*i+mmsize], m1
 +%assign i i+mmsize
 +%endrep
 +    lea         srcq, [srcq+strideq]
 +    lea         dstq, [dstq+2*strideq]
 +    add         obmcq, 32
 +    sub         yblend, 1
 +    jg          .loop
 +    RET
 +%endm
 +
 +INIT_MMX
 +%if ARCH_X86_64 == 0
 +PUT_RECT mmx
 +ADD_RECT mmx
 +
 +HPEL_FILTER mmx
 +ADD_OBMC 32, mmx
 +ADD_OBMC 16, mmx
 +%endif
 +ADD_OBMC 8, mmx
 +
 +INIT_XMM
 +PUT_RECT sse2
 +ADD_RECT sse2
 +
 +HPEL_FILTER sse2
 +ADD_OBMC 32, sse2
 +ADD_OBMC 16, sse2
@@@ -19,8 -19,7 +19,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
--%include "x86util.asm"
++%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  pb_f: times 16 db 15
@@@ -21,8 -21,7 +21,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;*****************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION .text
  
index ac6c505,0000000..08f378c
mode 100644,000000..100644
--- /dev/null
@@@ -1,291 -1,0 +1,291 @@@
- %include "x86inc.asm"
 +;******************************************************************************
 +;* MMX optimized discrete wavelet trasnform
 +;* Copyright (c) 2010 David Conrad
 +;*
 +;* This file is part of FFmpeg.
 +;*
 +;* 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.
 +;*
 +;* 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 FFmpeg; if not, write to the Free Software
 +;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 +;******************************************************************************
 +
++%include "x86util.asm"
 +
 +SECTION_RODATA
 +pw_1: times 8 dw 1
 +pw_2: times 8 dw 2
 +pw_8: times 8 dw 8
 +pw_16: times 8 dw 16
 +pw_1991: times 4 dw 9,-1
 +
 +section .text
 +
 +; %1 -= (%2 + %3 + 2)>>2     %4 is pw_2
 +%macro COMPOSE_53iL0 4
 +    paddw   %2, %3
 +    paddw   %2, %4
 +    psraw   %2, 2
 +    psubw   %1, %2
 +%endm
 +
 +; m1 = %1 + (-m0 + 9*m1 + 9*%2 -%3 + 8)>>4
 +; if %4 is supplied, %1 is loaded unaligned from there
 +; m2: clobbered  m3: pw_8  m4: pw_1991
 +%macro COMPOSE_DD97iH0 3-4
 +    paddw   m0, %3
 +    paddw   m1, %2
 +    psubw   m0, m3
 +    mova    m2, m1
 +    punpcklwd m1, m0
 +    punpckhwd m2, m0
 +    pmaddwd m1, m4
 +    pmaddwd m2, m4
 +%if %0 > 3
 +    movu    %1, %4
 +%endif
 +    psrad   m1, 4
 +    psrad   m2, 4
 +    packssdw m1, m2
 +    paddw   m1, %1
 +%endm
 +
 +%macro COMPOSE_VERTICAL 1
 +; void vertical_compose53iL0(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
 +;                                  int width)
 +cglobal vertical_compose53iL0_%1, 4,4,1, b0, b1, b2, width
 +    mova    m2, [pw_2]
 +.loop:
 +    sub     widthd, mmsize/2
 +    mova    m1, [b0q+2*widthq]
 +    mova    m0, [b1q+2*widthq]
 +    COMPOSE_53iL0 m0, m1, [b2q+2*widthq], m2
 +    mova    [b1q+2*widthq], m0
 +    jg      .loop
 +    REP_RET
 +
 +; void vertical_compose_dirac53iH0(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
 +;                                  int width)
 +cglobal vertical_compose_dirac53iH0_%1, 4,4,1, b0, b1, b2, width
 +    mova    m1, [pw_1]
 +.loop:
 +    sub     widthd, mmsize/2
 +    mova    m0, [b0q+2*widthq]
 +    paddw   m0, [b2q+2*widthq]
 +    paddw   m0, m1
 +    psraw   m0, 1
 +    paddw   m0, [b1q+2*widthq]
 +    mova    [b1q+2*widthq], m0
 +    jg      .loop
 +    REP_RET
 +
 +; void vertical_compose_dd97iH0(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
 +;                               IDWTELEM *b3, IDWTELEM *b4, int width)
 +cglobal vertical_compose_dd97iH0_%1, 6,6,5, b0, b1, b2, b3, b4, width
 +    mova    m3, [pw_8]
 +    mova    m4, [pw_1991]
 +.loop:
 +    sub     widthd, mmsize/2
 +    mova    m0, [b0q+2*widthq]
 +    mova    m1, [b1q+2*widthq]
 +    COMPOSE_DD97iH0 [b2q+2*widthq], [b3q+2*widthq], [b4q+2*widthq]
 +    mova    [b2q+2*widthq], m1
 +    jg      .loop
 +    REP_RET
 +
 +; void vertical_compose_dd137iL0(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
 +;                                IDWTELEM *b3, IDWTELEM *b4, int width)
 +cglobal vertical_compose_dd137iL0_%1, 6,6,6, b0, b1, b2, b3, b4, width
 +    mova    m3, [pw_16]
 +    mova    m4, [pw_1991]
 +.loop:
 +    sub     widthd, mmsize/2
 +    mova    m0, [b0q+2*widthq]
 +    mova    m1, [b1q+2*widthq]
 +    mova    m5, [b2q+2*widthq]
 +    paddw   m0, [b4q+2*widthq]
 +    paddw   m1, [b3q+2*widthq]
 +    psubw   m0, m3
 +    mova    m2, m1
 +    punpcklwd m1, m0
 +    punpckhwd m2, m0
 +    pmaddwd m1, m4
 +    pmaddwd m2, m4
 +    psrad   m1, 5
 +    psrad   m2, 5
 +    packssdw m1, m2
 +    psubw   m5, m1
 +    mova    [b2q+2*widthq], m5
 +    jg      .loop
 +    REP_RET
 +
 +; void vertical_compose_haar(IDWTELEM *b0, IDWTELEM *b1, int width)
 +cglobal vertical_compose_haar_%1, 3,4,3, b0, b1, width
 +    mova    m3, [pw_1]
 +.loop:
 +    sub     widthd, mmsize/2
 +    mova    m1, [b1q+2*widthq]
 +    mova    m0, [b0q+2*widthq]
 +    mova    m2, m1
 +    paddw   m1, m3
 +    psraw   m1, 1
 +    psubw   m0, m1
 +    mova    [b0q+2*widthq], m0
 +    paddw   m2, m0
 +    mova    [b1q+2*widthq], m2
 +    jg      .loop
 +    REP_RET
 +%endmacro
 +
 +; extend the left and right edges of the tmp array by %1 and %2 respectively
 +%macro EDGE_EXTENSION 3
 +    mov     %3, [tmpq]
 +%assign %%i 1
 +%rep %1
 +    mov     [tmpq-2*%%i], %3
 +    %assign %%i %%i+1
 +%endrep
 +    mov     %3, [tmpq+2*w2q-2]
 +%assign %%i 0
 +%rep %2
 +    mov     [tmpq+2*w2q+2*%%i], %3
 +    %assign %%i %%i+1
 +%endrep
 +%endmacro
 +
 +
 +%macro HAAR_HORIZONTAL 2
 +; void horizontal_compose_haari(IDWTELEM *b, IDWTELEM *tmp, int width)
 +cglobal horizontal_compose_haar%2i_%1, 3,6,4, b, tmp, w, x, w2, b_w2
 +    mov    w2d, wd
 +    xor     xq, xq
 +    shr    w2d, 1
 +    lea  b_w2q, [bq+wq]
 +    mova    m3, [pw_1]
 +.lowpass_loop:
 +    movu    m1, [b_w2q + 2*xq]
 +    mova    m0, [bq    + 2*xq]
 +    paddw   m1, m3
 +    psraw   m1, 1
 +    psubw   m0, m1
 +    mova    [tmpq + 2*xq], m0
 +    add     xq, mmsize/2
 +    cmp     xq, w2q
 +    jl      .lowpass_loop
 +
 +    xor     xq, xq
 +    and    w2q, ~(mmsize/2 - 1)
 +    cmp    w2q, mmsize/2
 +    jl      .end
 +
 +.highpass_loop:
 +    movu    m1, [b_w2q + 2*xq]
 +    mova    m0, [tmpq  + 2*xq]
 +    paddw   m1, m0
 +
 +    ; shift and interleave
 +%if %2 == 1
 +    paddw   m0, m3
 +    paddw   m1, m3
 +    psraw   m0, 1
 +    psraw   m1, 1
 +%endif
 +    mova    m2, m0
 +    punpcklwd m0, m1
 +    punpckhwd m2, m1
 +    mova    [bq+4*xq], m0
 +    mova    [bq+4*xq+mmsize], m2
 +
 +    add     xq, mmsize/2
 +    cmp     xq, w2q
 +    jl      .highpass_loop
 +.end:
 +    REP_RET
 +%endmacro
 +
 +
 +INIT_XMM
 +; void horizontal_compose_dd97i(IDWTELEM *b, IDWTELEM *tmp, int width)
 +cglobal horizontal_compose_dd97i_ssse3, 3,6,8, b, tmp, w, x, w2, b_w2
 +    mov    w2d, wd
 +    xor     xd, xd
 +    shr    w2d, 1
 +    lea  b_w2q, [bq+wq]
 +    movu    m4, [bq+wq]
 +    mova    m7, [pw_2]
 +    pslldq  m4, 14
 +.lowpass_loop:
 +    movu    m1, [b_w2q + 2*xq]
 +    mova    m0, [bq    + 2*xq]
 +    mova    m2, m1
 +    palignr m1, m4, 14
 +    mova    m4, m2
 +    COMPOSE_53iL0 m0, m1, m2, m7
 +    mova    [tmpq + 2*xq], m0
 +    add     xd, mmsize/2
 +    cmp     xd, w2d
 +    jl      .lowpass_loop
 +
 +    EDGE_EXTENSION 1, 2, xw
 +    ; leave the last up to 7 (sse) or 3 (mmx) values for C
 +    xor     xd, xd
 +    and    w2d, ~(mmsize/2 - 1)
 +    cmp    w2d, mmsize/2
 +    jl      .end
 +
 +    mova    m7, [tmpq-mmsize]
 +    mova    m0, [tmpq]
 +    mova    m5, [pw_1]
 +    mova    m3, [pw_8]
 +    mova    m4, [pw_1991]
 +.highpass_loop:
 +    mova    m6, m0
 +    palignr m0, m7, 14
 +    mova    m7, [tmpq + 2*xq + 16]
 +    mova    m1, m7
 +    mova    m2, m7
 +    palignr m1, m6, 2
 +    palignr m2, m6, 4
 +    COMPOSE_DD97iH0 m0, m6, m2, [b_w2q + 2*xq]
 +    mova    m0, m7
 +    mova    m7, m6
 +
 +    ; shift and interleave
 +    paddw   m6, m5
 +    paddw   m1, m5
 +    psraw   m6, 1
 +    psraw   m1, 1
 +    mova    m2, m6
 +    punpcklwd m6, m1
 +    punpckhwd m2, m1
 +    mova    [bq+4*xq], m6
 +    mova    [bq+4*xq+mmsize], m2
 +
 +    add     xd, mmsize/2
 +    cmp     xd, w2d
 +    jl      .highpass_loop
 +.end:
 +    REP_RET
 +
 +
 +%if ARCH_X86_64 == 0
 +INIT_MMX
 +COMPOSE_VERTICAL mmx
 +HAAR_HORIZONTAL mmx, 0
 +HAAR_HORIZONTAL mmx, 1
 +%endif
 +
 +;;INIT_XMM
 +INIT_XMM
 +COMPOSE_VERTICAL sse2
 +HAAR_HORIZONTAL sse2, 0
 +HAAR_HORIZONTAL sse2, 1
@@@ -28,8 -28,7 +28,7 @@@
  ; in blocks as conventient to the vector size.
  ; i.e. {4x real, 4x imaginary, 4x real, ...} (or 2x respectively)
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  %if ARCH_X86_64
  %define pointer resq
@@@ -19,8 -19,7 +19,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_TEXT
  
@@@ -20,8 -20,7 +20,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -24,8 -24,7 +24,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -24,8 -24,7 +24,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -26,8 -26,7 +26,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;*****************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -22,8 -22,7 +22,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -22,8 -22,7 +22,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -22,8 -22,7 +22,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
@@@ -21,7 -21,7 +21,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
++%include "libavutil/x86/x86util.asm"
  
  SECTION .text
  
Simple merge
Simple merge
index 90305df,0000000..5473126
mode 100644,000000..100644
--- /dev/null
@@@ -1,89 -1,0 +1,88 @@@
- %include "libavutil/x86/x86inc.asm"
 +;******************************************************************************
 +;* V210 SIMD unpack
 +;* Copyright (c) 2011 Loren Merritt <lorenm@u.washington.edu>
 +;* Copyright (c) 2011 Kieran Kunhya <kieran@kunhya.com>
 +;*
 +;* This file is part of Libav.
 +;*
 +;* Libav 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,
 +;* 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
 +;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 +;******************************************************************************
 +
 +%include "libavutil/x86/x86util.asm"
 +
 +SECTION_RODATA
 +
 +v210_mask: times 4 dd 0x3ff
 +v210_mult: dw 64,4,64,4,64,4,64,4
 +v210_luma_shuf: db 8,9,0,1,2,3,12,13,4,5,6,7,-1,-1,-1,-1
 +v210_chroma_shuf: db 0,1,8,9,6,7,-1,-1,2,3,4,5,12,13,-1,-1
 +
 +SECTION .text
 +
 +%macro v210_planar_unpack 2
 +
 +; v210_planar_unpack(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width)
 +cglobal v210_planar_unpack_%1_%2, 5, 5, 7
 +    movsxdifnidn r4, r4d
 +    lea    r1, [r1+2*r4]
 +    add    r2, r4
 +    add    r3, r4
 +    neg    r4
 +
 +    mova   m3, [v210_mult]
 +    mova   m4, [v210_mask]
 +    mova   m5, [v210_luma_shuf]
 +    mova   m6, [v210_chroma_shuf]
 +.loop
 +%ifidn %1, unaligned
 +    movu   m0, [r0]
 +%else
 +    mova   m0, [r0]
 +%endif
 +
 +    pmullw m1, m0, m3
 +    psrld  m0, 10
 +    psrlw  m1, 6  ; u0 v0 y1 y2 v1 u2 y4 y5
 +    pand   m0, m4 ; y0 __ u1 __ y3 __ v2 __
 +
 +    shufps m2, m1, m0, 0x8d ; y1 y2 y4 y5 y0 __ y3 __
 +    pshufb m2, m5 ; y0 y1 y2 y3 y4 y5 __ __
 +    movu   [r1+2*r4], m2
 +
 +    shufps m1, m0, 0xd8 ; u0 v0 v1 u2 u1 __ v2 __
 +    pshufb m1, m6 ; u0 u1 u2 __ v0 v1 v2 __
 +    movq   [r2+r4], m1
 +    movhps [r3+r4], m1
 +
 +    add r0, mmsize
 +    add r4, 6
 +    jl  .loop
 +
 +    REP_RET
 +%endmacro
 +
 +INIT_XMM
 +v210_planar_unpack unaligned, ssse3
 +%if HAVE_AVX_EXTERNAL
 +INIT_AVX
 +v210_planar_unpack unaligned, avx
 +%endif
 +
 +INIT_XMM
 +v210_planar_unpack aligned, ssse3
 +%if HAVE_AVX_EXTERNAL
 +INIT_AVX
 +v210_planar_unpack aligned, avx
 +%endif
@@@ -19,8 -19,7 +19,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  cextern pw_4
  cextern pw_5
@@@ -19,8 -19,7 +19,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  ; MMX-optimized functions cribbed from the original VP3 source code.
  
@@@ -20,8 -20,7 +20,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  cextern pw_64
  
@@@ -20,8 -20,7 +20,7 @@@
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
- %include "libavutil/x86/x86inc.asm"
 -%include "x86util.asm"
 +%include "libavutil/x86/x86util.asm"
  
  SECTION_RODATA
  
Simple merge
Simple merge
Simple merge
Simple merge
index 29701a5,0000000..ad46977
mode 100644,000000..100644
--- /dev/null
@@@ -1,462 -1,0 +1,461 @@@
- %include "libavutil/x86/x86inc.asm"
 +;******************************************************************************
 +;* Copyright (c) 2012 Michael Niedermayer
 +;*
 +;* This file is part of FFmpeg.
 +;*
 +;* 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.
 +;*
 +;* 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 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
 +align 32
 +flt2pm31: times 8 dd 4.6566129e-10
 +flt2p31 : times 8 dd 2147483648.0
 +flt2p15 : times 8 dd 32768.0
 +
 +word_unpack_shuf : db  0, 1, 4, 5, 8, 9,12,13, 2, 3, 6, 7,10,11,14,15
 +
 +SECTION .text
 +
 +
 +;to, from, a/u, log2_outsize, log_intsize, const
 +%macro PACK_2CH 5-7
 +cglobal pack_2ch_%2_to_%1_%3, 3, 4, 6, dst, src, len, src2
 +    mov src2q   , [srcq+gprsize]
 +    mov srcq    , [srcq]
 +    mov dstq    , [dstq]
 +%ifidn %3, a
 +    test dstq, mmsize-1
 +        jne pack_2ch_%2_to_%1_u_int %+ SUFFIX
 +    test srcq, mmsize-1
 +        jne pack_2ch_%2_to_%1_u_int %+ SUFFIX
 +    test src2q, mmsize-1
 +        jne pack_2ch_%2_to_%1_u_int %+ SUFFIX
 +%else
 +pack_2ch_%2_to_%1_u_int %+ SUFFIX
 +%endif
 +    lea     srcq , [srcq  + (1<<%5)*lenq]
 +    lea     src2q, [src2q + (1<<%5)*lenq]
 +    lea     dstq , [dstq  + (2<<%4)*lenq]
 +    neg     lenq
 +    %7 m0,m1,m2,m3,m4,m5
 +.next:
 +%if %4 >= %5
 +    mov%3     m0, [         srcq +(1<<%5)*lenq]
 +    mova      m1, m0
 +    mov%3     m2, [         src2q+(1<<%5)*lenq]
 +%if %5 == 1
 +    punpcklwd m0, m2
 +    punpckhwd m1, m2
 +%else
 +    punpckldq m0, m2
 +    punpckhdq m1, m2
 +%endif
 +    %6 m0,m1,m2,m3,m4,m5
 +%else
 +    mov%3     m0, [         srcq +(1<<%5)*lenq]
 +    mov%3     m1, [mmsize + srcq +(1<<%5)*lenq]
 +    mov%3     m2, [         src2q+(1<<%5)*lenq]
 +    mov%3     m3, [mmsize + src2q+(1<<%5)*lenq]
 +    %6 m0,m1,m2,m3,m4,m5
 +    mova      m2, m0
 +    punpcklwd m0, m1
 +    punpckhwd m2, m1
 +    SWAP 1,2
 +%endif
 +    mov%3 [           dstq+(2<<%4)*lenq], m0
 +    mov%3 [  mmsize + dstq+(2<<%4)*lenq], m1
 +%if %4 > %5
 +    mov%3 [2*mmsize + dstq+(2<<%4)*lenq], m2
 +    mov%3 [3*mmsize + dstq+(2<<%4)*lenq], m3
 +    add lenq, 4*mmsize/(2<<%4)
 +%else
 +    add lenq, 2*mmsize/(2<<%4)
 +%endif
 +        jl .next
 +    REP_RET
 +%endmacro
 +
 +%macro UNPACK_2CH 5-7
 +cglobal unpack_2ch_%2_to_%1_%3, 3, 4, 7, dst, src, len, dst2
 +    mov dst2q   , [dstq+gprsize]
 +    mov srcq    , [srcq]
 +    mov dstq    , [dstq]
 +%ifidn %3, a
 +    test dstq, mmsize-1
 +        jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX
 +    test srcq, mmsize-1
 +        jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX
 +    test dst2q, mmsize-1
 +        jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX
 +%else
 +unpack_2ch_%2_to_%1_u_int %+ SUFFIX
 +%endif
 +    lea     srcq , [srcq  + (2<<%5)*lenq]
 +    lea     dstq , [dstq  + (1<<%4)*lenq]
 +    lea     dst2q, [dst2q + (1<<%4)*lenq]
 +    neg     lenq
 +    %7 m0,m1,m2,m3,m4,m5
 +    mova      m6, [word_unpack_shuf]
 +.next:
 +    mov%3     m0, [           srcq +(2<<%5)*lenq]
 +    mov%3     m2, [  mmsize + srcq +(2<<%5)*lenq]
 +%if %5 == 1
 +%ifidn SUFFIX, _ssse3
 +    pshufb    m0, m6
 +    mova      m1, m0
 +    pshufb    m2, m6
 +    punpcklqdq m0,m2
 +    punpckhqdq m1,m2
 +%else
 +    mova      m1, m0
 +    punpcklwd m0,m2
 +    punpckhwd m1,m2
 +
 +    mova      m2, m0
 +    punpcklwd m0,m1
 +    punpckhwd m2,m1
 +
 +    mova      m1, m0
 +    punpcklwd m0,m2
 +    punpckhwd m1,m2
 +%endif
 +%else
 +    mova      m1, m0
 +    shufps    m0, m2, 10001000b
 +    shufps    m1, m2, 11011101b
 +%endif
 +%if %4 < %5
 +    mov%3     m2, [2*mmsize + srcq +(2<<%5)*lenq]
 +    mova      m3, m2
 +    mov%3     m4, [3*mmsize + srcq +(2<<%5)*lenq]
 +    shufps    m2, m4, 10001000b
 +    shufps    m3, m4, 11011101b
 +    SWAP 1,2
 +%endif
 +    %6 m0,m1,m2,m3,m4,m5
 +    mov%3 [           dstq+(1<<%4)*lenq], m0
 +%if %4 > %5
 +    mov%3 [          dst2q+(1<<%4)*lenq], m2
 +    mov%3 [ mmsize +  dstq+(1<<%4)*lenq], m1
 +    mov%3 [ mmsize + dst2q+(1<<%4)*lenq], m3
 +    add lenq, 2*mmsize/(1<<%4)
 +%else
 +    mov%3 [          dst2q+(1<<%4)*lenq], m1
 +    add lenq, mmsize/(1<<%4)
 +%endif
 +        jl .next
 +    REP_RET
 +%endmacro
 +
 +%macro CONV 5-7
 +cglobal %2_to_%1_%3, 3, 3, 6, dst, src, len
 +    mov srcq    , [srcq]
 +    mov dstq    , [dstq]
 +%ifidn %3, a
 +    test dstq, mmsize-1
 +        jne %2_to_%1_u_int %+ SUFFIX
 +    test srcq, mmsize-1
 +        jne %2_to_%1_u_int %+ SUFFIX
 +%else
 +%2_to_%1_u_int %+ SUFFIX
 +%endif
 +    lea     srcq , [srcq  + (1<<%5)*lenq]
 +    lea     dstq , [dstq  + (1<<%4)*lenq]
 +    neg     lenq
 +    %7 m0,m1,m2,m3,m4,m5
 +.next:
 +    mov%3     m0, [           srcq +(1<<%5)*lenq]
 +    mov%3     m1, [  mmsize + srcq +(1<<%5)*lenq]
 +%if %4 < %5
 +    mov%3     m2, [2*mmsize + srcq +(1<<%5)*lenq]
 +    mov%3     m3, [3*mmsize + srcq +(1<<%5)*lenq]
 +%endif
 +    %6 m0,m1,m2,m3,m4,m5
 +    mov%3 [           dstq+(1<<%4)*lenq], m0
 +    mov%3 [  mmsize + dstq+(1<<%4)*lenq], m1
 +%if %4 > %5
 +    mov%3 [2*mmsize + dstq+(1<<%4)*lenq], m2
 +    mov%3 [3*mmsize + dstq+(1<<%4)*lenq], m3
 +    add lenq, 4*mmsize/(1<<%4)
 +%else
 +    add lenq, 2*mmsize/(1<<%4)
 +%endif
 +        jl .next
 +    REP_RET
 +%endmacro
 +
 +%macro PACK_6CH 5-7
 +cglobal pack_6ch_%2_to_%1_%3, 2,8,7, dst, src, src1, src2, src3, src4, src5, len
 +%if ARCH_X86_64
 +    mov     lend, r2d
 +%else
 +    %define lend dword r2m
 +%endif
 +    mov    src1q, [srcq+1*gprsize]
 +    mov    src2q, [srcq+2*gprsize]
 +    mov    src3q, [srcq+3*gprsize]
 +    mov    src4q, [srcq+4*gprsize]
 +    mov    src5q, [srcq+5*gprsize]
 +    mov     srcq, [srcq]
 +    mov     dstq, [dstq]
 +%ifidn %3, a
 +    test dstq, mmsize-1
 +        jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +    test srcq, mmsize-1
 +        jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +    test src2q, mmsize-1
 +        jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +    test src3q, mmsize-1
 +        jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +    test src4q, mmsize-1
 +        jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +    test src5q, mmsize-1
 +        jne pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +%else
 +pack_6ch_%2_to_%1_u_int %+ SUFFIX
 +%endif
 +    sub    src1q, srcq
 +    sub    src2q, srcq
 +    sub    src3q, srcq
 +    sub    src4q, srcq
 +    sub    src5q, srcq
 +.loop:
 +    mov%3     m0, [srcq      ]
 +    mov%3     m1, [srcq+src1q]
 +    mov%3     m2, [srcq+src2q]
 +    mov%3     m3, [srcq+src3q]
 +    mov%3     m4, [srcq+src4q]
 +    mov%3     m5, [srcq+src5q]
 +    %7 x,x,x,x,m7,x
 +%if cpuflag(sse4)
 +    SBUTTERFLYPS 0, 1, 6
 +    SBUTTERFLYPS 2, 3, 6
 +    SBUTTERFLYPS 4, 5, 6
 +
 +    blendps   m6, m4, m0, 1100b
 +    movlhps   m0, m2
 +    movhlps   m4, m2
 +    blendps   m2, m5, m1, 1100b
 +    movlhps   m1, m3
 +    movhlps   m5, m3
 +
 +    %6 m0,m6,x,x,m7,m3
 +    %6 m4,m1,x,x,m7,m3
 +    %6 m2,m5,x,x,m7,m3
 +
 +    mov %+ %3 %+ ps [dstq   ], m0
 +    mov %+ %3 %+ ps [dstq+16], m6
 +    mov %+ %3 %+ ps [dstq+32], m4
 +    mov %+ %3 %+ ps [dstq+48], m1
 +    mov %+ %3 %+ ps [dstq+64], m2
 +    mov %+ %3 %+ ps [dstq+80], m5
 +%else ; mmx
 +    SBUTTERFLY dq, 0, 1, 6
 +    SBUTTERFLY dq, 2, 3, 6
 +    SBUTTERFLY dq, 4, 5, 6
 +
 +    movq   [dstq   ], m0
 +    movq   [dstq+ 8], m2
 +    movq   [dstq+16], m4
 +    movq   [dstq+24], m1
 +    movq   [dstq+32], m3
 +    movq   [dstq+40], m5
 +%endif
 +    add      srcq, mmsize
 +    add      dstq, mmsize*6
 +    sub      lend, mmsize/4
 +    jg .loop
 +%if mmsize == 8
 +    emms
 +    RET
 +%else
 +    REP_RET
 +%endif
 +%endmacro
 +
 +%macro INT16_TO_INT32_N 6
 +    pxor      m2, m2
 +    pxor      m3, m3
 +    punpcklwd m2, m1
 +    punpckhwd m3, m1
 +    SWAP 4,0
 +    pxor      m0, m0
 +    pxor      m1, m1
 +    punpcklwd m0, m4
 +    punpckhwd m1, m4
 +%endmacro
 +
 +%macro INT32_TO_INT16_N 6
 +    psrad     m0, 16
 +    psrad     m1, 16
 +    psrad     m2, 16
 +    psrad     m3, 16
 +    packssdw  m0, m1
 +    packssdw  m2, m3
 +    SWAP 1,2
 +%endmacro
 +
 +%macro INT32_TO_FLOAT_INIT 6
 +    mova      %5, [flt2pm31]
 +%endmacro
 +%macro INT32_TO_FLOAT_N 6
 +    cvtdq2ps  %1, %1
 +    cvtdq2ps  %2, %2
 +    mulps %1, %1, %5
 +    mulps %2, %2, %5
 +%endmacro
 +
 +%macro FLOAT_TO_INT32_INIT 6
 +    mova      %5, [flt2p31]
 +%endmacro
 +%macro FLOAT_TO_INT32_N 6
 +    mulps %1, %5
 +    mulps %2, %5
 +    cvtps2dq  %6, %1
 +    cmpnltps %1, %5
 +    paddd %1, %6
 +    cvtps2dq  %6, %2
 +    cmpnltps %2, %5
 +    paddd %2, %6
 +%endmacro
 +
 +%macro INT16_TO_FLOAT_INIT 6
 +    mova      m5, [flt2pm31]
 +%endmacro
 +%macro INT16_TO_FLOAT_N 6
 +    INT16_TO_INT32_N %1,%2,%3,%4,%5,%6
 +    cvtdq2ps  m0, m0
 +    cvtdq2ps  m1, m1
 +    cvtdq2ps  m2, m2
 +    cvtdq2ps  m3, m3
 +    mulps m0, m0, m5
 +    mulps m1, m1, m5
 +    mulps m2, m2, m5
 +    mulps m3, m3, m5
 +%endmacro
 +
 +%macro FLOAT_TO_INT16_INIT 6
 +    mova      m5, [flt2p15]
 +%endmacro
 +%macro FLOAT_TO_INT16_N 6
 +    mulps m0, m5
 +    mulps m1, m5
 +    mulps m2, m5
 +    mulps m3, m5
 +    cvtps2dq  m0, m0
 +    cvtps2dq  m1, m1
 +    packssdw  m0, m1
 +    cvtps2dq  m1, m2
 +    cvtps2dq  m3, m3
 +    packssdw  m1, m3
 +%endmacro
 +
 +%macro NOP_N 0-6
 +%endmacro
 +
 +INIT_MMX mmx
 +CONV int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
 +CONV int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
 +CONV int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
 +CONV int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
 +
 +PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
 +PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
 +
 +INIT_XMM sse2
 +CONV int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
 +CONV int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
 +CONV int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
 +CONV int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
 +
 +PACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
 +PACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
 +PACK_2CH int32, int32, u, 2, 2, NOP_N, NOP_N
 +PACK_2CH int32, int32, a, 2, 2, NOP_N, NOP_N
 +PACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
 +PACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
 +PACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
 +PACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
 +
 +UNPACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
 +UNPACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
 +UNPACK_2CH int32, int32, u, 2, 2, NOP_N, NOP_N
 +UNPACK_2CH int32, int32, a, 2, 2, NOP_N, NOP_N
 +UNPACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
 +UNPACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
 +UNPACK_2CH int16, int32, u, 1, 2, INT32_TO_INT16_N, NOP_N
 +UNPACK_2CH int16, int32, a, 1, 2, INT32_TO_INT16_N, NOP_N
 +
 +CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +CONV int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +CONV int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +CONV float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +CONV float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +CONV int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
 +CONV int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
 +
 +PACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +PACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +PACK_2CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +PACK_2CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +PACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +PACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +PACK_2CH int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
 +PACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
 +
 +UNPACK_2CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +UNPACK_2CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +UNPACK_2CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +UNPACK_2CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +UNPACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +UNPACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +UNPACK_2CH int16, float, u, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
 +UNPACK_2CH int16, float, a, 1, 2, FLOAT_TO_INT16_N, FLOAT_TO_INT16_INIT
 +
 +
 +INIT_XMM ssse3
 +UNPACK_2CH int16, int16, u, 1, 1, NOP_N, NOP_N
 +UNPACK_2CH int16, int16, a, 1, 1, NOP_N, NOP_N
 +UNPACK_2CH int32, int16, u, 2, 1, INT16_TO_INT32_N, NOP_N
 +UNPACK_2CH int32, int16, a, 2, 1, INT16_TO_INT32_N, NOP_N
 +UNPACK_2CH float, int16, u, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +UNPACK_2CH float, int16, a, 2, 1, INT16_TO_FLOAT_N, INT16_TO_FLOAT_INIT
 +
 +INIT_XMM sse4
 +PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
 +PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
 +
 +PACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +PACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +PACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +PACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +
 +%if HAVE_AVX_EXTERNAL
 +INIT_XMM avx
 +PACK_6CH float, float, u, 2, 2, NOP_N, NOP_N
 +PACK_6CH float, float, a, 2, 2, NOP_N, NOP_N
 +
 +PACK_6CH float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +PACK_6CH float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +PACK_6CH int32, float, u, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +PACK_6CH int32, float, a, 2, 2, FLOAT_TO_INT32_N, FLOAT_TO_INT32_INIT
 +
 +INIT_YMM avx
 +CONV float, int32, u, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +CONV float, int32, a, 2, 2, INT32_TO_FLOAT_N, INT32_TO_FLOAT_INIT
 +%endif
index d63545f,0000000..84448e8
mode 100644,000000..100644
--- /dev/null
@@@ -1,252 -1,0 +1,251 @@@
- %include "libavutil/x86/x86inc.asm"
 +;******************************************************************************
 +;* Copyright (c) 2012 Michael Niedermayer
 +;*
 +;* This file is part of FFmpeg.
 +;*
 +;* 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.
 +;*
 +;* 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 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
 +align 32
 +dw1: times 8  dd 1
 +w1 : times 16 dw 1
 +
 +SECTION .text
 +
 +%macro MIX2_FLT 1
 +cglobal mix_2_1_%1_float, 7, 7, 6, out, in1, in2, coeffp, index1, index2, len
 +%ifidn %1, a
 +    test in1q, mmsize-1
 +        jne mix_2_1_float_u_int %+ SUFFIX
 +    test in2q, mmsize-1
 +        jne mix_2_1_float_u_int %+ SUFFIX
 +    test outq, mmsize-1
 +        jne mix_2_1_float_u_int %+ SUFFIX
 +%else
 +mix_2_1_float_u_int %+ SUFFIX
 +%endif
 +    VBROADCASTSS m4, [coeffpq + 4*index1q]
 +    VBROADCASTSS m5, [coeffpq + 4*index2q]
 +    shl lend    , 2
 +    add in1q    , lenq
 +    add in2q    , lenq
 +    add outq    , lenq
 +    neg lenq
 +.next:
 +%ifidn %1, a
 +    mulps        m0, m4, [in1q + lenq         ]
 +    mulps        m1, m5, [in2q + lenq         ]
 +    mulps        m2, m4, [in1q + lenq + mmsize]
 +    mulps        m3, m5, [in2q + lenq + mmsize]
 +%else
 +    movu         m0, [in1q + lenq         ]
 +    movu         m1, [in2q + lenq         ]
 +    movu         m2, [in1q + lenq + mmsize]
 +    movu         m3, [in2q + lenq + mmsize]
 +    mulps        m0, m0, m4
 +    mulps        m1, m1, m5
 +    mulps        m2, m2, m4
 +    mulps        m3, m3, m5
 +%endif
 +    addps        m0, m0, m1
 +    addps        m2, m2, m3
 +    mov%1  [outq + lenq         ], m0
 +    mov%1  [outq + lenq + mmsize], m2
 +    add        lenq, mmsize*2
 +        jl .next
 +    REP_RET
 +%endmacro
 +
 +%macro MIX1_FLT 1
 +cglobal mix_1_1_%1_float, 5, 5, 3, out, in, coeffp, index, len
 +%ifidn %1, a
 +    test inq, mmsize-1
 +        jne mix_1_1_float_u_int %+ SUFFIX
 +    test outq, mmsize-1
 +        jne mix_1_1_float_u_int %+ SUFFIX
 +%else
 +mix_1_1_float_u_int %+ SUFFIX
 +%endif
 +    VBROADCASTSS m2, [coeffpq + 4*indexq]
 +    shl lenq    , 2
 +    add inq     , lenq
 +    add outq    , lenq
 +    neg lenq
 +.next:
 +%ifidn %1, a
 +    mulps        m0, m2, [inq + lenq         ]
 +    mulps        m1, m2, [inq + lenq + mmsize]
 +%else
 +    movu         m0, [inq + lenq         ]
 +    movu         m1, [inq + lenq + mmsize]
 +    mulps        m0, m0, m2
 +    mulps        m1, m1, m2
 +%endif
 +    mov%1  [outq + lenq         ], m0
 +    mov%1  [outq + lenq + mmsize], m1
 +    add        lenq, mmsize*2
 +        jl .next
 +    REP_RET
 +%endmacro
 +
 +%macro MIX1_INT16 1
 +cglobal mix_1_1_%1_int16, 5, 5, 6, out, in, coeffp, index, len
 +%ifidn %1, a
 +    test inq, mmsize-1
 +        jne mix_1_1_int16_u_int %+ SUFFIX
 +    test outq, mmsize-1
 +        jne mix_1_1_int16_u_int %+ SUFFIX
 +%else
 +mix_1_1_int16_u_int %+ SUFFIX
 +%endif
 +    movd   m4, [coeffpq + 4*indexq]
 +    SPLATW m5, m4
 +    psllq  m4, 32
 +    psrlq  m4, 48
 +    mova   m0, [w1]
 +    psllw  m0, m4
 +    psrlw  m0, 1
 +    punpcklwd m5, m0
 +    add lenq    , lenq
 +    add inq     , lenq
 +    add outq    , lenq
 +    neg lenq
 +.next:
 +    mov%1        m0, [inq + lenq         ]
 +    mov%1        m2, [inq + lenq + mmsize]
 +    mova         m1, m0
 +    mova         m3, m2
 +    punpcklwd    m0, [w1]
 +    punpckhwd    m1, [w1]
 +    punpcklwd    m2, [w1]
 +    punpckhwd    m3, [w1]
 +    pmaddwd      m0, m5
 +    pmaddwd      m1, m5
 +    pmaddwd      m2, m5
 +    pmaddwd      m3, m5
 +    psrad        m0, m4
 +    psrad        m1, m4
 +    psrad        m2, m4
 +    psrad        m3, m4
 +    packssdw     m0, m1
 +    packssdw     m2, m3
 +    mov%1  [outq + lenq         ], m0
 +    mov%1  [outq + lenq + mmsize], m2
 +    add        lenq, mmsize*2
 +        jl .next
 +%if mmsize == 8
 +    emms
 +    RET
 +%else
 +    REP_RET
 +%endif
 +%endmacro
 +
 +%macro MIX2_INT16 1
 +cglobal mix_2_1_%1_int16, 7, 7, 8, out, in1, in2, coeffp, index1, index2, len
 +%ifidn %1, a
 +    test in1q, mmsize-1
 +        jne mix_2_1_int16_u_int %+ SUFFIX
 +    test in2q, mmsize-1
 +        jne mix_2_1_int16_u_int %+ SUFFIX
 +    test outq, mmsize-1
 +        jne mix_2_1_int16_u_int %+ SUFFIX
 +%else
 +mix_2_1_int16_u_int %+ SUFFIX
 +%endif
 +    movd   m4, [coeffpq + 4*index1q]
 +    movd   m6, [coeffpq + 4*index2q]
 +    SPLATW m5, m4
 +    SPLATW m6, m6
 +    psllq  m4, 32
 +    psrlq  m4, 48
 +    mova   m7, [dw1]
 +    pslld  m7, m4
 +    psrld  m7, 1
 +    punpcklwd m5, m6
 +    add lend    , lend
 +    add in1q    , lenq
 +    add in2q    , lenq
 +    add outq    , lenq
 +    neg lenq
 +.next:
 +    mov%1        m0, [in1q + lenq         ]
 +    mov%1        m2, [in2q + lenq         ]
 +    mova         m1, m0
 +    punpcklwd    m0, m2
 +    punpckhwd    m1, m2
 +
 +    mov%1        m2, [in1q + lenq + mmsize]
 +    mov%1        m6, [in2q + lenq + mmsize]
 +    mova         m3, m2
 +    punpcklwd    m2, m6
 +    punpckhwd    m3, m6
 +
 +    pmaddwd      m0, m5
 +    pmaddwd      m1, m5
 +    pmaddwd      m2, m5
 +    pmaddwd      m3, m5
 +    paddd        m0, m7
 +    paddd        m1, m7
 +    paddd        m2, m7
 +    paddd        m3, m7
 +    psrad        m0, m4
 +    psrad        m1, m4
 +    psrad        m2, m4
 +    psrad        m3, m4
 +    packssdw     m0, m1
 +    packssdw     m2, m3
 +    mov%1  [outq + lenq         ], m0
 +    mov%1  [outq + lenq + mmsize], m2
 +    add        lenq, mmsize*2
 +        jl .next
 +%if mmsize == 8
 +    emms
 +    RET
 +%else
 +    REP_RET
 +%endif
 +%endmacro
 +
 +
 +INIT_MMX mmx
 +MIX1_INT16 u
 +MIX1_INT16 a
 +MIX2_INT16 u
 +MIX2_INT16 a
 +
 +INIT_XMM sse
 +MIX2_FLT u
 +MIX2_FLT a
 +MIX1_FLT u
 +MIX1_FLT a
 +
 +INIT_XMM sse2
 +MIX1_INT16 u
 +MIX1_INT16 a
 +MIX2_INT16 u
 +MIX2_INT16 a
 +
 +%if HAVE_AVX_EXTERNAL
 +INIT_YMM avx
 +MIX2_FLT u
 +MIX2_FLT a
 +MIX1_FLT u
 +MIX1_FLT a
 +%endif
Simple merge
Simple merge
Simple merge