%include "x86inc.asm" %include "x86util.asm" ; ; scale_frame( uint16_t *src, uint16_t *dst, int stride, int lshift, int rshift, int height ) ; INIT_XMM cglobal scale_frame_sse2, 6,7 movd xmm2, r3d movd xmm3, r4d sub r1, r0 ; dst[k] = (src[k] << lshift) + (src[k] >> rshift); .loop mov r6, r2 movdqa xmm0, [r0] movdqa xmm1, xmm0 psllw xmm0, xmm2 psrlw xmm1, xmm3 paddw xmm0, xmm1 movdqa [r1+r0], xmm0 ;FIXME sub r6d, 8 lea r0, [r0+16] jg .loop sub r5d, 1 jg .loop REP_RET