Merge commit '8db00081a37d5b7e23918ee500bb16bc59b57197'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 20 Apr 2013 11:42:51 +0000 (13:42 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 20 Apr 2013 11:42:51 +0000 (13:42 +0200)
* commit '8db00081a37d5b7e23918ee500bb16bc59b57197':
  x86: hpeldsp: Move half-pel assembly from dsputil to hpeldsp

Conflicts:
libavcodec/hpeldsp.c
libavcodec/hpeldsp.h
libavcodec/x86/Makefile
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/hpeldsp_init.c
libavcodec/x86/hpeldsp_rnd_template.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/hpeldsp.c
libavcodec/x86/Makefile
libavcodec/x86/fpel.asm
libavcodec/x86/hpeldsp_init.c
libavcodec/x86/qpel.asm

@@@ -54,11 -54,6 +54,12 @@@ av_cold void ff_hpeldsp_init(HpelDSPCon
      hpel_funcs(avg, [3],  2);
      hpel_funcs(avg_no_rnd,, 16);
  
-     if (ARCH_X86)        ff_hpeldsp_init_x86   (c, flags);
+     if (ARCH_X86)
+         ff_hpeldsp_init_x86(c, flags);
 +    if (ARCH_ARM)        ff_hpeldsp_init_arm   (c, flags);
 +    if (HAVE_VIS)        ff_hpeldsp_init_vis   (c, flags);
 +    if (ARCH_ALPHA)      ff_hpeldsp_init_alpha (c, flags);
 +    if (ARCH_PPC)        ff_hpeldsp_init_ppc   (c, flags);
 +    if (ARCH_SH4)        ff_hpeldsp_init_sh4   (c, flags);
 +    if (ARCH_BFIN)       ff_hpeldsp_init_bfin  (c, flags);
  }
@@@ -50,12 -44,10 +50,12 @@@ MMX-OBJS-$(CONFIG_VC1_DECODER)         
  YASM-OBJS-$(CONFIG_AAC_DECODER)        += x86/sbrdsp.o
  YASM-OBJS-$(CONFIG_AC3DSP)             += x86/ac3dsp.o
  YASM-OBJS-$(CONFIG_DCT)                += x86/dct32.o
 +YASM-OBJS-$(CONFIG_DIRAC_DECODER)      += x86/diracdsp_mmx.o x86/diracdsp_yasm.o\
 +                                          x86/dwt_yasm.o
  YASM-OBJS-$(CONFIG_DSPUTIL)            += x86/dsputil.o                 \
-                                           x86/fpelbase.o                \
+                                           x86/fpel.o                    \
                                            x86/mpeg4qpel.o               \
-                                           x86/qpelbase.o
+                                           x86/qpel.o
  YASM-OBJS-$(CONFIG_ENCODERS)           += x86/dsputilenc.o
  YASM-OBJS-$(CONFIG_FFT)                += x86/fft.o
  YASM-OBJS-$(CONFIG_H263_DECODER)       += x86/h263_loopfilter.o
index 0000000,43b039d..dc363d1
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,106 +1,106 @@@
 -;* This file is part of Libav.
+ ;******************************************************************************
+ ;* MMX optimized DSP utils
+ ;* Copyright (c) 2008 Loren Merritt
+ ;* Copyright (c) 2003-2013 Michael Niedermayer
+ ;* Copyright (c) 2013 Daniel Kang
+ ;*
 -;* Libav is free software; you can redistribute it and/or
++;* This file is part of FFmpeg.
+ ;*
 -;* Libav is distributed in the hope that it will be useful,
++;* 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.
+ ;*
 -;* License along with Libav; if not, write to the Free Software
++;* 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 .text
+ INIT_MMX mmxext
+ ; void pixels(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
+ %macro PIXELS48 2
+ %if %2 == 4
+ %define OP movh
+ %else
+ %define OP mova
+ %endif
+ cglobal %1_pixels%2, 4,5
+     movsxdifnidn r2, r2d
+     lea          r4, [r2*3]
+ .loop:
+     OP           m0, [r1]
+     OP           m1, [r1+r2]
+     OP           m2, [r1+r2*2]
+     OP           m3, [r1+r4]
+     lea          r1, [r1+r2*4]
+ %ifidn %1, avg
+     pavgb        m0, [r0]
+     pavgb        m1, [r0+r2]
+     pavgb        m2, [r0+r2*2]
+     pavgb        m3, [r0+r4]
+ %endif
+     OP         [r0], m0
+     OP      [r0+r2], m1
+     OP    [r0+r2*2], m2
+     OP      [r0+r4], m3
+     sub         r3d, 4
+     lea          r0, [r0+r2*4]
+     jne       .loop
+     RET
+ %endmacro
+ PIXELS48 put, 4
+ PIXELS48 avg, 4
+ PIXELS48 put, 8
+ PIXELS48 avg, 8
+ INIT_XMM sse2
+ ; void put_pixels16_sse2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
+ cglobal put_pixels16, 4,5,4
+     lea          r4, [r2*3]
+ .loop:
+     movu         m0, [r1]
+     movu         m1, [r1+r2]
+     movu         m2, [r1+r2*2]
+     movu         m3, [r1+r4]
+     lea          r1, [r1+r2*4]
+     mova       [r0], m0
+     mova    [r0+r2], m1
+     mova  [r0+r2*2], m2
+     mova    [r0+r4], m3
+     sub         r3d, 4
+     lea          r0, [r0+r2*4]
+     jnz       .loop
+     REP_RET
+ ; void avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
+ cglobal avg_pixels16, 4,5,4
+     lea          r4, [r2*3]
+ .loop:
+     movu         m0, [r1]
+     movu         m1, [r1+r2]
+     movu         m2, [r1+r2*2]
+     movu         m3, [r1+r4]
+     lea          r1, [r1+r2*4]
+     pavgb        m0, [r0]
+     pavgb        m1, [r0+r2]
+     pavgb        m2, [r0+r2*2]
+     pavgb        m3, [r0+r4]
+     mova       [r0], m0
+     mova    [r0+r2], m1
+     mova  [r0+r2*2], m2
+     mova    [r0+r4], m3
+     sub         r3d, 4
+     lea          r0, [r0+r2*4]
+     jnz       .loop
+     REP_RET
Simple merge
index 0000000,c90b393..c2ffb86
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,176 +1,176 @@@
 -;* This file is part of Libav.
+ ;******************************************************************************
+ ;* MMX optimized DSP utils
+ ;* Copyright (c) 2008 Loren Merritt
+ ;* Copyright (c) 2003-2013 Michael Niedermayer
+ ;* Copyright (c) 2013 Daniel Kang
+ ;*
 -;* Libav is free software; you can redistribute it and/or
++;* This file is part of FFmpeg.
+ ;*
 -;* Libav is distributed in the hope that it will be useful,
++;* 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.
+ ;*
 -;* License along with Libav; if not, write to the Free Software
++;* 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 .text
+ %macro op_avgh 3
+     movh   %3, %2
+     pavgb  %1, %3
+     movh   %2, %1
+ %endmacro
+ %macro op_avg 2
+     pavgb  %1, %2
+     mova   %2, %1
+ %endmacro
+ %macro op_puth 2-3
+     movh   %2, %1
+ %endmacro
+ %macro op_put 2
+     mova   %2, %1
+ %endmacro
+ ; void pixels4_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
+ %macro PIXELS4_L2 1
+ %define OP op_%1h
+ cglobal %1_pixels4_l2, 6,6
+     movsxdifnidn r3, r3d
+     movsxdifnidn r4, r4d
+     test        r5d, 1
+     je        .loop
+     movd         m0, [r1]
+     movd         m1, [r2]
+     add          r1, r4
+     add          r2, 4
+     pavgb        m0, m1
+     OP           m0, [r0], m3
+     add          r0, r3
+     dec         r5d
+ .loop:
+     mova         m0, [r1]
+     mova         m1, [r1+r4]
+     lea          r1, [r1+2*r4]
+     pavgb        m0, [r2]
+     pavgb        m1, [r2+4]
+     OP           m0, [r0], m3
+     OP           m1, [r0+r3], m3
+     lea          r0, [r0+2*r3]
+     mova         m0, [r1]
+     mova         m1, [r1+r4]
+     lea          r1, [r1+2*r4]
+     pavgb        m0, [r2+8]
+     pavgb        m1, [r2+12]
+     OP           m0, [r0], m3
+     OP           m1, [r0+r3], m3
+     lea          r0, [r0+2*r3]
+     add          r2, 16
+     sub         r5d, 4
+     jne       .loop
+     REP_RET
+ %endmacro
+ INIT_MMX mmxext
+ PIXELS4_L2 put
+ PIXELS4_L2 avg
+ ; void pixels8_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
+ %macro PIXELS8_L2 1
+ %define OP op_%1
+ cglobal %1_pixels8_l2, 6,6
+     movsxdifnidn r3, r3d
+     movsxdifnidn r4, r4d
+     test        r5d, 1
+     je        .loop
+     mova         m0, [r1]
+     mova         m1, [r2]
+     add          r1, r4
+     add          r2, 8
+     pavgb        m0, m1
+     OP           m0, [r0]
+     add          r0, r3
+     dec         r5d
+ .loop:
+     mova         m0, [r1]
+     mova         m1, [r1+r4]
+     lea          r1, [r1+2*r4]
+     pavgb        m0, [r2]
+     pavgb        m1, [r2+8]
+     OP           m0, [r0]
+     OP           m1, [r0+r3]
+     lea          r0, [r0+2*r3]
+     mova         m0, [r1]
+     mova         m1, [r1+r4]
+     lea          r1, [r1+2*r4]
+     pavgb        m0, [r2+16]
+     pavgb        m1, [r2+24]
+     OP           m0, [r0]
+     OP           m1, [r0+r3]
+     lea          r0, [r0+2*r3]
+     add          r2, 32
+     sub         r5d, 4
+     jne       .loop
+     REP_RET
+ %endmacro
+ INIT_MMX mmxext
+ PIXELS8_L2 put
+ PIXELS8_L2 avg
+ ; void pixels16_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
+ %macro PIXELS16_L2 1
+ %define OP op_%1
+ cglobal %1_pixels16_l2, 6,6
+     movsxdifnidn r3, r3d
+     movsxdifnidn r4, r4d
+     test        r5d, 1
+     je        .loop
+     mova         m0, [r1]
+     mova         m1, [r1+8]
+     pavgb        m0, [r2]
+     pavgb        m1, [r2+8]
+     add          r1, r4
+     add          r2, 16
+     OP           m0, [r0]
+     OP           m1, [r0+8]
+     add          r0, r3
+     dec         r5d
+ .loop:
+     mova         m0, [r1]
+     mova         m1, [r1+8]
+     add          r1, r4
+     pavgb        m0, [r2]
+     pavgb        m1, [r2+8]
+     OP           m0, [r0]
+     OP           m1, [r0+8]
+     add          r0, r3
+     mova         m0, [r1]
+     mova         m1, [r1+8]
+     add          r1, r4
+     pavgb        m0, [r2+16]
+     pavgb        m1, [r2+24]
+     OP           m0, [r0]
+     OP           m1, [r0+8]
+     add          r0, r3
+     add          r2, 32
+     sub         r5d, 2
+     jne       .loop
+     REP_RET
+ %endmacro
+ INIT_MMX mmxext
+ PIXELS16_L2 put
+ PIXELS16_L2 avg