> +cglobal conv_s16_to_s16p_2ch, 3,4,4, dst0, src, len, dst1
> +    lea       lenq, [2*lend]
> +    mov      dst1q, [dst0q+gprsize]
> +    mov      dst0q, [dst0q        ]
> +    lea       srcq, [srcq+2*lenq]
> +    add      dst0q, lenq
> +    add      dst1q, lenq
> +    neg       lenq
> +    ALIGN 16
> +.loop:
> +    mova        m0, [srcq+2*lenq       ]
> +    mova        m1, [srcq+2*lenq+mmsize]
> +    pshuflw     m0, m0, q3120
> +    pshufhw     m0, m0, q3120
> +    pshufd      m0, m0, q3120
> +    pshuflw     m1, m1, q3120
> +    pshufhw     m1, m1, q3120
> +    pshufd      m1, m1, q3120
> +    punpcklqdq  m2, m0, m1
> +    punpckhqdq  m3, m0, m1

Avoid the redundant mova in non-AVX mode by not using 3-operand in the
last instruction.

Additionally, the 2xpshufd + 2xpunpck stage can be replaced by 2x shufps.

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

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

Reply via email to