On Tue, 25 Sep 2012, Justin Ruggles wrote:
> +;------------------------------------------------------------------------------
> +; void ff_scale_samples_s16(VolumeContext *ctx, uint8_t *src, int len,
> +; int volume)
> +;------------------------------------------------------------------------------
> +
> +INIT_XMM sse4
> +cglobal scale_samples_s16, 4,4,4, ctx, src, len, volume
> + movd m0, volumed
> + pshufd m0, m0, 0
> + mova m1, [pd_128]
> + lea lenq, [lend*2-mmsize]
> +.loop:
> + ; src[i] = av_clip_int16((src[i] * volume + 128) >> 8);
> + mova m2, [srcq+lenq]
> + pmovsxwd m3, m2
> + psrldq m2, 8
> + pmovsxwd m2, m2
> + pmulld m2, m0
> + pmulld m3, m0
> + paddd m2, m1
> + paddd m3, m1
> + psrad m2, 8
> + psrad m3, 8
> + packssdw m3, m2
> + mova [srcq+lenq], m3
> + sub lenq, mmsize
> + jge .loop
> + REP_RET
INIT_XMM sse2
cglobal scale_samples_s16, 3,3,4, ctx, src, len, volume
movd m0, volumem
pshuflw m0, m0, 0
punpcklwd m0, [pw_1]
mova m1, [pw_128]
lea lenq, [lend*2-mmsize]
.loop:
; src[i] = av_clip_int16((src[i] * volume + 128) >> 8);
mova m2, [srcq+lenq]
punpcklwd m3, m2, m1
punpckhwd m2, m1
pmaddwd m3, m0
pmaddwd m2, m0
psrad m3, 8
psrad m2, 8
packssdw m3, m2
mova [srcq+lenq], m3
sub lenq, mmsize
jge .loop
REP_RET
(untested)
--Loren Merritt
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel