On 09/22/2012 07:01 PM, Justin Ruggles wrote:
> ---
>  libavutil/x86/float_dsp.asm    |   29 +++++++++++++++++++++++++++++
>  libavutil/x86/float_dsp_init.c |    4 ++++
>  2 files changed, 33 insertions(+), 0 deletions(-)
> 
> diff --git a/libavutil/x86/float_dsp.asm b/libavutil/x86/float_dsp.asm
> index 5b9b444..7201ded 100644
> --- a/libavutil/x86/float_dsp.asm
> +++ b/libavutil/x86/float_dsp.asm
> @@ -90,3 +90,32 @@ VECTOR_FMAC_SCALAR
>  INIT_YMM avx
>  VECTOR_FMAC_SCALAR
>  %endif
> +
> +;------------------------------------------------------------------------------
> +; void ff_vector_fmul_scalar(float *dst, const float *src, float mul, int 
> len)
> +;------------------------------------------------------------------------------
> +
> +%macro VECTOR_FMUL_SCALAR 0
> +%if UNIX64
> +cglobal vector_fmul_scalar, 3,3,2, dst, src, len
> +%else
> +cglobal vector_fmul_scalar, 4,4,3, dst, src, mul, len
> +%endif
> +%if ARCH_X86_32
> +    movss    m0, mulm
> +%elif WIN64
> +    SWAP 0, 2
> +%endif
> +    shufps   m0, m0, 0
> +    lea    lenq, [lend*4-mmsize]
> +.loop:
> +    mova     m1, [srcq+lenq]
> +    mulps    m1, m0
> +    mova  [dstq+lenq], m1
> +    sub    lenq, mmsize
> +    jge .loop
> +    REP_RET
> +%endmacro
> +
> +INIT_XMM sse
> +VECTOR_FMUL_SCALAR
> diff --git a/libavutil/x86/float_dsp_init.c b/libavutil/x86/float_dsp_init.c
> index d1b0b8c..d14ec6a 100644
> --- a/libavutil/x86/float_dsp_init.c
> +++ b/libavutil/x86/float_dsp_init.c
> @@ -32,6 +32,9 @@ extern void ff_vector_fmac_scalar_sse(float *dst, const 
> float *src, float mul,
>  extern void ff_vector_fmac_scalar_avx(float *dst, const float *src, float 
> mul,
>                                        int len);
>  
> +extern void ff_vector_fmul_scalar_sse(float *dst, const float *src, float 
> mul,
> +                                      int len);
> +
>  void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp)
>  {
>      int mm_flags = av_get_cpu_flags();
> @@ -39,6 +42,7 @@ void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp)
>      if (EXTERNAL_SSE(mm_flags)) {
>          fdsp->vector_fmul = ff_vector_fmul_sse;
>          fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_sse;
> +        fdsp->vector_fmul_scalar = ff_vector_fmul_scalar_sse;
>      }
>      if (EXTERNAL_AVX(mm_flags)) {
>          fdsp->vector_fmul = ff_vector_fmul_avx;

ping.

-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to