Merge commit '04581c8c77ce779e4e70684ac45302972766be0f'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 31 Oct 2012 12:57:09 +0000 (13:57 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 31 Oct 2012 12:57:09 +0000 (13:57 +0100)
* commit '04581c8c77ce779e4e70684ac45302972766be0f':
  x86: yasm: Use complete source path for macro helper %includes

Conflicts:
Makefile

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
common.mak
libavcodec/x86/diracdsp_yasm.asm
libavcodec/x86/dwt_yasm.asm
libavcodec/x86/proresdsp.asm
libavfilter/x86/hqdn3d.asm
libswscale/x86/input.asm
libswscale/x86/output.asm
libswscale/x86/scale.asm

diff --cc common.mak
@@@ -5,77 -5,6 +5,77 @@@
  # first so "all" becomes default target
  all: all-yes
  
- YASMFLAGS  += $(IFLAGS:%=%/) -I$(SRC_PATH)/libavutil/x86/ -Pconfig.asm
 +ifndef SUBDIR
 +
 +ifndef V
 +Q      = @
 +ECHO   = printf "$(1)\t%s\n" $(2)
 +BRIEF  = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP
 +SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
 +
 +MSG    = $@
 +M      = @$(call ECHO,$(TAG),$@);
 +$(foreach VAR,$(BRIEF), \
 +    $(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
 +$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
 +$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
 +endif
 +
 +ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample
 +
 +# NASM requires -I path terminated with /
 +IFLAGS     := -I. -I$(SRC_PATH)/
 +CPPFLAGS   := $(IFLAGS) $(CPPFLAGS)
 +CFLAGS     += $(ECFLAGS)
 +CCFLAGS     = $(CPPFLAGS) $(CFLAGS)
 +ASFLAGS    := $(CPPFLAGS) $(ASFLAGS)
 +CXXFLAGS   += $(CPPFLAGS) $(CFLAGS)
++YASMFLAGS  += $(IFLAGS:%=%/) -Pconfig.asm
 +
 +HOSTCCFLAGS = $(IFLAGS) $(HOSTCFLAGS)
 +LDFLAGS    := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
 +
 +define COMPILE
 +       $(call $(1)DEP,$(1))
 +       $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
 +endef
 +
 +COMPILE_C = $(call COMPILE,CC)
 +COMPILE_CXX = $(call COMPILE,CXX)
 +COMPILE_S = $(call COMPILE,AS)
 +
 +%.o: %.c
 +      $(COMPILE_C)
 +
 +%.o: %.cpp
 +      $(COMPILE_CXX)
 +
 +%.s: %.c
 +      $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $<
 +
 +%.o: %.S
 +      $(COMPILE_S)
 +
 +%.h.c:
 +      $(Q)echo '#include "$*.h"' >$@
 +
 +%.ver: %.v
 +      $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
 +
 +%.c %.h: TAG = GEN
 +
 +# Dummy rule to stop make trying to rebuild removed or renamed headers
 +%.h:
 +      @:
 +
 +# Disable suffix rules.  Most of the builtin rules are suffix rules,
 +# so this saves some time on slow systems.
 +.SUFFIXES:
 +
 +# Do not delete intermediate files from chains of implicit rules
 +$(OBJS):
 +endif
 +
  include $(SRC_PATH)/arch.mak
  
  OBJS      += $(OBJS-yes)
index 3a86bd7,0000000..d12fc64
mode 100644,000000..100644
--- /dev/null
@@@ -1,260 -1,0 +1,260 @@@
- %include "x86util.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 "libavutil/x86/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
index 08f378c,0000000..2dc43e0
mode 100644,000000..100644
--- /dev/null
@@@ -1,291 -1,0 +1,291 @@@
- %include "x86util.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 "libavutil/x86/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
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge