> +cglobal conv_s16_to_fltp_2ch, 3,4,5, dst0, src, len, dst1
> +    lea       lenq, [4*lend]
> +    mov      dst1q, [dst0q+gprsize]
> +    mov      dst0q, [dst0q        ]
> +    add       srcq, lenq
> +    add      dst0q, lenq
> +    add      dst1q, lenq
> +    neg       lenq
> +    mova        m4, [pf_s16_inv_scale]
> +    ALIGN 16
> +.loop:
> +%if cpuflag(sse4)
> +    pmovsxwd   m0, [srcq+lenq         ]
> +    pmovsxwd   m1, [srcq+lenq+mmsize/2]
> +%else
> +    mova       m1, [srcq+lenq]
> +    punpcklwd  m0, m1
> +    punpckhwd  m1, m1

This definitely looks wrong; m0 hasn't been set to anything.  Did you
test this?  Like in another email, I'd suggest using a macro to
abstract this.

> +    psrad      m0, 16
> +    psrad      m1, 16
> +%endif
> +    cvtdq2ps   m0, m0
> +    cvtdq2ps   m1, m1
> +    mulps      m0, m0, m4
> +    mulps      m1, m1, m4
> +    shufps     m2, m0, m1, q2020
> +    shufps     m3, m0, m1, q3131

Avoid 3-arg on the last one, to avoid a mova in non-AVX mode.

> +    mova  [dst0q+lenq], m2
> +    mova  [dst1q+lenq], m3
> +    add      lenq, mmsize
> +    jl .loop
> +    REP_RET

Otherwise looks okay.

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

Reply via email to