Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>tags/n3.0
@@ -160,5 +160,8 @@ AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact) | |||||
fdsp->butterflies_fixed = butterflies_fixed_c; | fdsp->butterflies_fixed = butterflies_fixed_c; | ||||
fdsp->scalarproduct_fixed = scalarproduct_fixed_c; | fdsp->scalarproduct_fixed = scalarproduct_fixed_c; | ||||
if (ARCH_X86) | |||||
ff_fixed_dsp_init_x86(fdsp); | |||||
return fdsp; | return fdsp; | ||||
} | } |
@@ -161,6 +161,8 @@ typedef struct AVFixedDSPContext { | |||||
*/ | */ | ||||
AVFixedDSPContext * avpriv_alloc_fixed_dsp(int strict); | AVFixedDSPContext * avpriv_alloc_fixed_dsp(int strict); | ||||
void ff_fixed_dsp_init_x86(AVFixedDSPContext *fdsp); | |||||
/** | /** | ||||
* Calculate the square root | * Calculate the square root | ||||
* | * | ||||
@@ -1,4 +1,5 @@ | |||||
OBJS += x86/cpu.o \ | OBJS += x86/cpu.o \ | ||||
x86/fixed_dsp_init.o \ | |||||
x86/float_dsp_init.o \ | x86/float_dsp_init.o \ | ||||
x86/lls_init.o \ | x86/lls_init.o \ | ||||
@@ -8,6 +9,7 @@ EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) = x86/emms.o | |||||
YASM-OBJS += x86/cpuid.o \ | YASM-OBJS += x86/cpuid.o \ | ||||
$(EMMS_OBJS__yes_) \ | $(EMMS_OBJS__yes_) \ | ||||
x86/fixed_dsp.o \ | |||||
x86/float_dsp.o \ | x86/float_dsp.o \ | ||||
x86/lls.o \ | x86/lls.o \ | ||||
@@ -0,0 +1,48 @@ | |||||
;***************************************************************************** | |||||
;* x86-optimized Float DSP functions | |||||
;* | |||||
;* Copyright 2016 James Almer | |||||
;* | |||||
;* 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 "x86util.asm" | |||||
SECTION .text | |||||
;----------------------------------------------------------------------------- | |||||
; void ff_butterflies_fixed(float *src0, float *src1, int len); | |||||
;----------------------------------------------------------------------------- | |||||
INIT_XMM sse2 | |||||
cglobal butterflies_fixed, 3,3,3, src0, src1, len | |||||
shl lend, 2 | |||||
add src0q, lenq | |||||
add src1q, lenq | |||||
neg lenq | |||||
align 16 | |||||
.loop: | |||||
mova m0, [src0q + lenq] | |||||
mova m1, [src1q + lenq] | |||||
mova m2, m0 | |||||
paddd m0, m1 | |||||
psubd m2, m1 | |||||
mova [src0q + lenq], m0 | |||||
mova [src1q + lenq], m2 | |||||
add lenq, mmsize | |||||
jl .loop | |||||
RET |
@@ -0,0 +1,35 @@ | |||||
/* | |||||
* 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 "config.h" | |||||
#include "libavutil/attributes.h" | |||||
#include "libavutil/cpu.h" | |||||
#include "libavutil/fixed_dsp.h" | |||||
#include "cpu.h" | |||||
void ff_butterflies_fixed_sse2(int *src0, int *src1, int len); | |||||
av_cold void ff_fixed_dsp_init_x86(AVFixedDSPContext *fdsp) | |||||
{ | |||||
int cpu_flags = av_get_cpu_flags(); | |||||
if (EXTERNAL_SSE2(cpu_flags)) { | |||||
fdsp->butterflies_fixed = ff_butterflies_fixed_sse2; | |||||
} | |||||
} |