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; | |||||
| } | |||||
| } | |||||