Merge commit '2e4bb99f4df7052b3e147ee898fcb4013a34d904'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 23 Jan 2013 15:59:33 +0000 (16:59 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 23 Jan 2013 16:00:26 +0000 (17:00 +0100)
* commit '2e4bb99f4df7052b3e147ee898fcb4013a34d904':
  vorbisdsp: convert x86 simd functions from inline asm to yasm.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/x86/Makefile
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/dsputil_mmx.h
libavcodec/x86/vorbisdsp.asm
libavcodec/x86/vorbisdsp_init.c

@@@ -69,9 -60,9 +69,10 @@@ YASM-OBJS-$(CONFIG_PRORES_LGPL_DECODER
  YASM-OBJS-$(CONFIG_RV30_DECODER)       += x86/rv34dsp.o
  YASM-OBJS-$(CONFIG_RV40_DECODER)       += x86/rv34dsp.o                 \
                                            x86/rv40dsp.o
 +YASM-OBJS-$(CONFIG_V210_DECODER)       += x86/v210.o
  YASM-OBJS-$(CONFIG_VC1_DECODER)        += x86/vc1dsp.o
  YASM-OBJS-$(CONFIG_VIDEODSP)           += x86/videodsp.o
+ YASM-OBJS-$(CONFIG_VORBIS_DECODER)     += x86/vorbisdsp.o
  YASM-OBJS-$(CONFIG_VP3DSP)             += x86/vp3dsp.o
  YASM-OBJS-$(CONFIG_VP6_DECODER)        += x86/vp56dsp.o
  YASM-OBJS-$(CONFIG_VP8_DECODER)        += x86/vp8dsp.o
Simple merge
Simple merge
index 0000000,c54650e..b25d838
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,83 +1,83 @@@
 -;* This file is part of Libav.
+ ;******************************************************************************
+ ;* Vorbis x86 optimizations
+ ;* Copyright (C) 2006 Loren Merritt <lorenm@u.washington.edu>
+ ;*
 -;* 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_RODATA
+ pdw_80000000: times 4 dd 0x80000000
+ SECTION .text
+ %if ARCH_X86_32
+ INIT_MMX 3dnow
+ cglobal vorbis_inverse_coupling, 3, 3, 6, mag, ang, block_size
+     pxor                     m7, m7
+     lea                    magq, [magq+block_sizeq*4]
+     lea                    angq, [angq+block_sizeq*4]
+     neg             block_sizeq
+ .loop:
+     mova                     m0, [magq+block_sizeq*4]
+     mova                     m1, [angq+block_sizeq*4]
+     mova                     m2, m0
+     mova                     m3, m1
+     pfcmpge                  m2, m7     ; m <= 0.0
+     pfcmpge                  m3, m7     ; a <= 0.0
+     pslld                    m2, 31     ; keep only the sign bit
+     pxor                     m1, m2
+     mova                     m4, m3
+     pand                     m3, m1
+     pandn                    m4, m1
+     pfadd                    m3, m0     ; a = m + ((a < 0) & (a ^ sign(m)))
+     pfsub                    m0, m4     ; m = m + ((a > 0) & (a ^ sign(m)))
+     mova   [angq+block_sizeq*4], m3
+     mova   [magq+block_sizeq*4], m0
+     add             block_sizeq, 2
+     jl .loop
+     femms
+     RET
+ %endif
+ INIT_XMM sse
+ cglobal vorbis_inverse_coupling, 3, 4, 6, mag, ang, block_size, cntr
+     mova                     m5, [pdw_80000000]
+     xor                   cntrq, cntrq
+ align 16
+ .loop:
+     mova                     m0, [magq+cntrq*4]
+     mova                     m1, [angq+cntrq*4]
+     xorps                    m2, m2
+     xorps                    m3, m3
+     cmpleps                  m2, m0     ; m <= 0.0
+     cmpleps                  m3, m1     ; a <= 0.0
+     andps                    m2, m5     ; keep only the sign bit
+     xorps                    m1, m2
+     mova                     m4, m3
+     andps                    m3, m1
+     andnps                   m4, m1
+     addps                    m3, m0     ; a = m + ((a < 0) & (a ^ sign(m)))
+     subps                    m0, m4     ; m = m + ((a > 0) & (a ^ sign(m)))
+     mova         [angq+cntrq*4], m3
+     mova         [magq+cntrq*4], m0
+     add                   cntrq, 4
+     cmp                   cntrq, block_sizeq
+     jl .loop
+     RET
Simple merge