; ; 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); .heightloop mov r6d, r2d .widthloop movdqa xmm0, [r0] movdqa xmm1, xmm0 psllw xmm0, xmm2 psrlw xmm1, xmm3 paddw xmm0, xmm1 movdqa [r1+r0], xmm0 sub r6d, 16 lea r0, [r0+16] jg .widthloop sub r5d, 1 jg .heightloop REP_RET