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
