1cabdff1aSopenharmony_ci;****************************************************************************** 2cabdff1aSopenharmony_ci;* x86 optimized Format Conversion Utils 3cabdff1aSopenharmony_ci;* Copyright (c) 2008 Loren Merritt 4cabdff1aSopenharmony_ci;* 5cabdff1aSopenharmony_ci;* This file is part of FFmpeg. 6cabdff1aSopenharmony_ci;* 7cabdff1aSopenharmony_ci;* FFmpeg is free software; you can redistribute it and/or 8cabdff1aSopenharmony_ci;* modify it under the terms of the GNU Lesser General Public 9cabdff1aSopenharmony_ci;* License as published by the Free Software Foundation; either 10cabdff1aSopenharmony_ci;* version 2.1 of the License, or (at your option) any later version. 11cabdff1aSopenharmony_ci;* 12cabdff1aSopenharmony_ci;* FFmpeg is distributed in the hope that it will be useful, 13cabdff1aSopenharmony_ci;* but WITHOUT ANY WARRANTY; without even the implied warranty of 14cabdff1aSopenharmony_ci;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15cabdff1aSopenharmony_ci;* Lesser General Public License for more details. 16cabdff1aSopenharmony_ci;* 17cabdff1aSopenharmony_ci;* You should have received a copy of the GNU Lesser General Public 18cabdff1aSopenharmony_ci;* License along with FFmpeg; if not, write to the Free Software 19cabdff1aSopenharmony_ci;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20cabdff1aSopenharmony_ci;****************************************************************************** 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci%include "libavutil/x86/x86util.asm" 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ciSECTION .text 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci;------------------------------------------------------------------------------ 27cabdff1aSopenharmony_ci; void ff_int32_to_float_fmul_scalar(float *dst, const int32_t *src, float mul, 28cabdff1aSopenharmony_ci; int len); 29cabdff1aSopenharmony_ci;------------------------------------------------------------------------------ 30cabdff1aSopenharmony_ci%macro INT32_TO_FLOAT_FMUL_SCALAR 1 31cabdff1aSopenharmony_ci%if UNIX64 32cabdff1aSopenharmony_cicglobal int32_to_float_fmul_scalar, 3, 3, %1, dst, src, len 33cabdff1aSopenharmony_ci%else 34cabdff1aSopenharmony_cicglobal int32_to_float_fmul_scalar, 4, 4, %1, dst, src, mul, len 35cabdff1aSopenharmony_ci%endif 36cabdff1aSopenharmony_ci%if WIN64 37cabdff1aSopenharmony_ci SWAP 0, 2 38cabdff1aSopenharmony_ci%elif ARCH_X86_32 39cabdff1aSopenharmony_ci movss m0, mulm 40cabdff1aSopenharmony_ci%endif 41cabdff1aSopenharmony_ci SPLATD m0 42cabdff1aSopenharmony_ci shl lend, 2 43cabdff1aSopenharmony_ci add srcq, lenq 44cabdff1aSopenharmony_ci add dstq, lenq 45cabdff1aSopenharmony_ci neg lenq 46cabdff1aSopenharmony_ci.loop: 47cabdff1aSopenharmony_ci cvtdq2ps m1, [srcq+lenq ] 48cabdff1aSopenharmony_ci cvtdq2ps m2, [srcq+lenq+16] 49cabdff1aSopenharmony_ci mulps m1, m0 50cabdff1aSopenharmony_ci mulps m2, m0 51cabdff1aSopenharmony_ci mova [dstq+lenq ], m1 52cabdff1aSopenharmony_ci mova [dstq+lenq+16], m2 53cabdff1aSopenharmony_ci add lenq, 32 54cabdff1aSopenharmony_ci jl .loop 55cabdff1aSopenharmony_ci RET 56cabdff1aSopenharmony_ci%endmacro 57cabdff1aSopenharmony_ci 58cabdff1aSopenharmony_ciINIT_XMM sse2 59cabdff1aSopenharmony_ciINT32_TO_FLOAT_FMUL_SCALAR 3 60cabdff1aSopenharmony_ci 61cabdff1aSopenharmony_ci;------------------------------------------------------------------------------ 62cabdff1aSopenharmony_ci; void ff_int32_to_float_fmul_array8(FmtConvertContext *c, float *dst, const int32_t *src, 63cabdff1aSopenharmony_ci; const float *mul, int len); 64cabdff1aSopenharmony_ci;------------------------------------------------------------------------------ 65cabdff1aSopenharmony_ci%macro INT32_TO_FLOAT_FMUL_ARRAY8 0 66cabdff1aSopenharmony_cicglobal int32_to_float_fmul_array8, 5, 5, 5, c, dst, src, mul, len 67cabdff1aSopenharmony_ci shl lend, 2 68cabdff1aSopenharmony_ci add srcq, lenq 69cabdff1aSopenharmony_ci add dstq, lenq 70cabdff1aSopenharmony_ci neg lenq 71cabdff1aSopenharmony_ci.loop: 72cabdff1aSopenharmony_ci movss m0, [mulq] 73cabdff1aSopenharmony_ci SPLATD m0 74cabdff1aSopenharmony_ci cvtdq2ps m1, [srcq+lenq ] 75cabdff1aSopenharmony_ci cvtdq2ps m2, [srcq+lenq+16] 76cabdff1aSopenharmony_ci mulps m1, m0 77cabdff1aSopenharmony_ci mulps m2, m0 78cabdff1aSopenharmony_ci mova [dstq+lenq ], m1 79cabdff1aSopenharmony_ci mova [dstq+lenq+16], m2 80cabdff1aSopenharmony_ci add mulq, 4 81cabdff1aSopenharmony_ci add lenq, 32 82cabdff1aSopenharmony_ci jl .loop 83cabdff1aSopenharmony_ci RET 84cabdff1aSopenharmony_ci%endmacro 85cabdff1aSopenharmony_ci 86cabdff1aSopenharmony_ciINIT_XMM sse2 87cabdff1aSopenharmony_ciINT32_TO_FLOAT_FMUL_ARRAY8 88cabdff1aSopenharmony_ci 89