On Sat, 15 Dec 2012, Justin Ruggles wrote:

> +;------------------------------------------------------------------------------
> +; void ff_quantize_int_rectangular/triangular(int16_t *dst, float *src,
> +;                                             int *dither, int len);
> +;------------------------------------------------------------------------------
> +
> +%macro QUANTIZE_INT 1
> +cglobal quantize_int_%1, 4,5,6, dst, src, dither0, len, dither1
> +    lea         lenq, [2*lend]
> +    add         dstq, lenq
> +    lea         srcq, [srcq+2*lenq]
> +%ifidn %1, triangular
> +    lea     dither1q, [dither0q+4*lenq]
> +%endif
> +    lea     dither0q, [dither0q+2*lenq]
> +    neg         lenq
> +    mova          m4, [pf_dither_scale]
> +    mova          m5, [pf_s16_scale]
> +.loop:
> +    cvtdq2ps      m0, [dither0q+2*lenq]
> +    cvtdq2ps      m1, [dither0q+2*lenq+mmsize]

Do you have to store dither in a format different than the asm works with?

> +%ifidn %1, triangular
> +    cvtdq2ps      m2, [dither1q+2*lenq]
> +    cvtdq2ps      m3, [dither1q+2*lenq+mmsize]
> +    addps         m0, m2
> +    addps         m1, m3

Can you add before converting, or does that overflow?

> +%endif
> +    mulps         m2, m5, [srcq+2*lenq]
> +    mulps         m3, m5, [srcq+2*lenq+mmsize]
> +    fmaddps       m0, m0, m4, m2, m3
> +    fmaddps       m1, m1, m4, m3, m2
> +    cvtps2dq      m0, m0
> +    cvtps2dq      m1, m1
> +    packssdw      m0, m1
> +    mova     [dstq+lenq], m0
> +    add         lenq, mmsize
> +    jl .loop
> +    REP_RET
> +%endmacro

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

Reply via email to