libavcodec/x86/h264_intrapred: xmmN -> mN, movdqa -> mova

Use m aliases instead of xmm registers directly so that certain macros
can work (e.g. SWAP); likewise replace movdqa with mova

Signed-off-by: Zuxy Meng <zuxy.meng@gmail.com>
This commit is contained in:
Zuxy Meng
2026-07-30 22:41:04 -07:00
parent a441a2eb38
commit 43efff09ee
+410 -410
View File
@@ -52,13 +52,13 @@ INIT_XMM sse
cglobal pred16x16_vertical_8, 2,3
sub r0, r1
mov r2, 4
movaps xmm0, [r0]
movaps m0, [r0]
.loop:
movaps [r0+r1*1], xmm0
movaps [r0+r1*2], xmm0
movaps [r0+r1*1], m0
movaps [r0+r1*2], m0
lea r0, [r0+r1*2]
movaps [r0+r1*1], xmm0
movaps [r0+r1*2], xmm0
movaps [r0+r1*1], m0
movaps [r0+r1*2], m0
lea r0, [r0+r1*2]
dec r2
jg .loop
@@ -165,11 +165,11 @@ PRED16x16_DC
INIT_XMM sse2
cglobal pred16x16_tm_vp8_8, 2,6,6
sub r0, r1
pxor xmm2, xmm2
movdqa xmm0, [r0]
movdqa xmm1, xmm0
punpcklbw xmm0, xmm2
punpckhbw xmm1, xmm2
pxor m2, m2
mova m0, [r0]
mova m1, m0
punpcklbw m0, m2
punpckhbw m1, m2
movzx r4d, byte [r0-1]
mov r5d, 8
.loop:
@@ -177,22 +177,22 @@ cglobal pred16x16_tm_vp8_8, 2,6,6
movzx r3d, byte [r0+r1*2-1]
sub r2d, r4d
sub r3d, r4d
movd xmm2, r2d
movd xmm4, r3d
pshuflw xmm2, xmm2, 0
pshuflw xmm4, xmm4, 0
punpcklqdq xmm2, xmm2
punpcklqdq xmm4, xmm4
movdqa xmm3, xmm2
movdqa xmm5, xmm4
paddw xmm2, xmm0
paddw xmm3, xmm1
paddw xmm4, xmm0
paddw xmm5, xmm1
packuswb xmm2, xmm3
packuswb xmm4, xmm5
movdqa [r0+r1*1], xmm2
movdqa [r0+r1*2], xmm4
movd m2, r2d
movd m4, r3d
pshuflw m2, m2, 0
pshuflw m4, m4, 0
punpcklqdq m2, m2
punpcklqdq m4, m4
mova m3, m2
mova m5, m4
paddw m2, m0
paddw m3, m1
paddw m4, m0
paddw m5, m1
packuswb m2, m3
packuswb m4, m5
mova [r0+r1*1], m2
mova [r0+r1*2], m4
lea r0, [r0+r1*2]
dec r5d
jg .loop
@@ -624,26 +624,26 @@ PRED8x8_H
INIT_XMM sse2
cglobal pred8x8_top_dc_8, 2,5,2
sub r0, r1
movq xmm0, [r0]
pxor xmm1, xmm1
movq m0, [r0]
pxor m1, m1
lea r2, [r0+r1*2]
punpcklbw xmm0, xmm1
psadbw xmm0, xmm1 ; s0,0,0,0,s1,0,0,0 (w)
punpcklbw m0, m1
psadbw m0, m1 ; s0,0,0,0,s1,0,0,0 (w)
lea r3, [r2+r1*2]
psrlw xmm0, 1
pavgw xmm0, xmm1
pshuflw xmm0, xmm0, 0 ; dc0,dc0,dc0,dc0,dc1,0,0,0
pshufhw xmm0, xmm0, 0 ; dc0,dc1 (w)
packuswb xmm0, xmm1 ; dc0,dc1 (b)
movq [r0+r1*1], xmm0
movq [r0+r1*2], xmm0
psrlw m0, 1
pavgw m0, m1
pshuflw m0, m0, 0 ; dc0,dc0,dc0,dc0,dc1,0,0,0
pshufhw m0, m0, 0 ; dc0,dc1 (w)
packuswb m0, m1 ; dc0,dc1 (b)
movq [r0+r1*1], m0
movq [r0+r1*2], m0
lea r0, [r3+r1*2]
movq [r2+r1*1], xmm0
movq [r2+r1*2], xmm0
movq [r3+r1*1], xmm0
movq [r3+r1*2], xmm0
movq [r0+r1*1], xmm0
movq [r0+r1*2], xmm0
movq [r2+r1*1], m0
movq [r2+r1*2], m0
movq [r3+r1*1], m0
movq [r3+r1*2], m0
movq [r0+r1*1], m0
movq [r0+r1*2], m0
RET
;-----------------------------------------------------------------------------
@@ -750,9 +750,9 @@ cglobal pred8x8_dc_rv40_8, 2,7,2
INIT_XMM sse2
cglobal pred8x8_tm_vp8_8, 2,6,4
sub r0, r1
pxor xmm1, xmm1
movq xmm0, [r0]
punpcklbw xmm0, xmm1
pxor m1, m1
movq m0, [r0]
punpcklbw m0, m1
movzx r4d, byte [r0-1]
mov r5d, 4
.loop:
@@ -760,17 +760,17 @@ cglobal pred8x8_tm_vp8_8, 2,6,4
movzx r3d, byte [r0+r1*2-1]
sub r2d, r4d
sub r3d, r4d
movd xmm2, r2d
movd xmm3, r3d
pshuflw xmm2, xmm2, 0
pshuflw xmm3, xmm3, 0
punpcklqdq xmm2, xmm2
punpcklqdq xmm3, xmm3
paddw xmm2, xmm0
paddw xmm3, xmm0
packuswb xmm2, xmm3
movq [r0+r1*1], xmm2
movhps [r0+r1*2], xmm2
movd m2, r2d
movd m3, r3d
pshuflw m2, m2, 0
pshuflw m3, m3, 0
punpcklqdq m2, m2
punpcklqdq m3, m3
paddw m2, m0
paddw m3, m0
packuswb m2, m3
movq [r0+r1*1], m2
movhps [r0+r1*2], m2
lea r0, [r0+r1*2]
dec r5d
jg .loop
@@ -779,25 +779,25 @@ cglobal pred8x8_tm_vp8_8, 2,6,4
INIT_XMM ssse3
cglobal pred8x8_tm_vp8_8, 2,3,6
sub r0, r1
movdqa xmm4, [tm_shuf]
pxor xmm1, xmm1
movq xmm0, [r0]
punpcklbw xmm0, xmm1
movd xmm5, [r0-4]
pshufb xmm5, xmm4
mova m4, [tm_shuf]
pxor m1, m1
movq m0, [r0]
punpcklbw m0, m1
movd m5, [r0-4]
pshufb m5, m4
mov r2d, 4
.loop:
movd xmm2, [r0+r1*1-4]
movd xmm3, [r0+r1*2-4]
pshufb xmm2, xmm4
pshufb xmm3, xmm4
psubw xmm2, xmm5
psubw xmm3, xmm5
paddw xmm2, xmm0
paddw xmm3, xmm0
packuswb xmm2, xmm3
movq [r0+r1*1], xmm2
movhps [r0+r1*2], xmm2
movd m2, [r0+r1*1-4]
movd m3, [r0+r1*2-4]
pshufb m2, m4
pshufb m3, m4
psubw m2, m5
psubw m3, m5
paddw m2, m0
paddw m3, m0
packuswb m2, m3
movq [r0+r1*1], m2
movhps [r0+r1*2], m2
lea r0, [r0+r1*2]
dec r2d
jg .loop
@@ -1066,74 +1066,74 @@ cglobal pred8x8l_vertical_8, 4,4,5
INIT_XMM sse2
cglobal pred8x8l_down_left_8, 4,4,6
sub r0, r3
movu xmm2, [r0-8]
movu xmm1, [r0]
mova xmm3, xmm1
psrldq xmm2, 7
psrldq xmm1, 1
movu m2, [r0-8]
movu m1, [r0]
mova m3, m1
psrldq m2, 7
psrldq m1, 1
test r1d, r1d ; top_left
jnz .check_tr
.fix_lt:
pxor xmm5, xmm3, xmm2
psllq xmm5, 56
psrlq xmm5, 56
pxor xmm2, xmm5
pxor m5, m3, m2
psllq m5, 56
psrlq m5, 56
pxor m2, m5
.check_tr:
test r2d, r2d ; top_right
jnz .do_top
.fix_tr_1:
pxor xmm5, xmm3, xmm1
psrlq xmm5, 56
psllq xmm5, 56
pxor xmm1, xmm5
pxor m5, m3, m1
psrlq m5, 56
psllq m5, 56
pxor m1, m5
.do_top:
PRED4x4_LOWPASS xmm4, xmm2, xmm1, xmm3, xmm5
movq xmm2, xmm4
PRED4x4_LOWPASS m4, m2, m1, m3, m5
movq m2, m4
test r2d, r2d ; top_right
jnz .has_top_right
.fix_tr_2:
punpcklbw xmm3, xmm3
pshufhw xmm1, xmm3, 0xff
pshufd xmm1, xmm1, 0xee
punpcklbw m3, m3
pshufhw m1, m3, 0xff
pshufd m1, m1, 0xee
jmp .do_topright
.has_top_right:
movq xmm0, [r0+8]
psrlq xmm5, xmm0, 56
punpcklqdq xmm3, xmm0
psrldq xmm3, 7
punpcklqdq xmm4, xmm0, xmm5
psrldq xmm4, 1
PRED4x4_LOWPASS xmm1, xmm3, xmm4, xmm0, xmm5
movq m0, [r0+8]
psrlq m5, m0, 56
punpcklqdq m3, m0
psrldq m3, 7
punpcklqdq m4, m0, m5
psrldq m4, 1
PRED4x4_LOWPASS m1, m3, m4, m0, m5
.do_topright:
mova xmm4, xmm1
psrlq xmm1, 56
pslldq xmm1, 15
mova m4, m1
psrlq m1, 56
pslldq m1, 15
lea r1, [r0+r3*2]
pslldq xmm4, 8
por xmm2, xmm4
movdqa xmm3, xmm2
psrldq xmm2, 1
por xmm2, xmm1
pslldq m4, 8
por m2, m4
mova m3, m2
psrldq m2, 1
por m2, m1
lea r2, [r1+r3*2]
pslldq xmm1, xmm3, 1
PRED4x4_LOWPASS xmm3, xmm1, xmm2, xmm3, xmm4
psrldq xmm3, 1
movq [r0+r3*1], xmm3
psrldq xmm3, 1
movq [r0+r3*2], xmm3
psrldq xmm3, 1
pslldq m1, m3, 1
PRED4x4_LOWPASS m3, m1, m2, m3, m4
psrldq m3, 1
movq [r0+r3*1], m3
psrldq m3, 1
movq [r0+r3*2], m3
psrldq m3, 1
lea r0, [r2+r3*2]
movq [r1+r3*1], xmm3
psrldq xmm3, 1
movq [r1+r3*2], xmm3
psrldq xmm3, 1
movq [r2+r3*1], xmm3
psrldq xmm3, 1
movq [r2+r3*2], xmm3
psrldq xmm3, 1
movq [r0+r3*1], xmm3
psrldq xmm3, 1
movq [r0+r3*2], xmm3
movq [r1+r3*1], m3
psrldq m3, 1
movq [r1+r3*2], m3
psrldq m3, 1
movq [r2+r3*1], m3
psrldq m3, 1
movq [r2+r3*2], m3
psrldq m3, 1
movq [r0+r3*1], m3
psrldq m3, 1
movq [r0+r3*2], m3
RET
;-----------------------------------------------------------------------------
@@ -1145,101 +1145,101 @@ INIT_XMM sse2
cglobal pred8x8l_down_right_8, 4,5,7
sub r0, r3
lea r4, [r0+r3*2]
movd xmm0, [r0+r3*1-4]
movd xmm4, [r0+r3*0-4]
punpcklbw xmm0, xmm4
movd xmm1, [r4+r3*1-4]
movd xmm4, [r0+r3*2-4]
punpcklbw xmm1, xmm4
movd m0, [r0+r3*1-4]
movd m4, [r0+r3*0-4]
punpcklbw m0, m4
movd m1, [r4+r3*1-4]
movd m4, [r0+r3*2-4]
punpcklbw m1, m4
mov r4, r0
punpcklwd xmm1, xmm0
punpcklwd m1, m0
lea r0, [r0+r3*4]
movd xmm2, [r0+r3*1-4]
movd xmm4, [r0+r3*0-4]
punpcklbw xmm2, xmm4
movd m2, [r0+r3*1-4]
movd m4, [r0+r3*0-4]
punpcklbw m2, m4
lea r0, [r0+r3*2]
movd xmm3, [r0+r3*1-4]
movd xmm4, [r0+r3*0-4]
punpcklbw xmm3, xmm4
punpcklwd xmm3, xmm2
punpckhdq xmm3, xmm1
pshufd xmm3, xmm3, 0xee
movd m3, [r0+r3*1-4]
movd m4, [r0+r3*0-4]
punpcklbw m3, m4
punpcklwd m3, m2
punpckhdq m3, m1
pshufd m3, m3, 0xee
lea r0, [r0+r3*2]
movq xmm0, [r0+r3*0-8]
movq xmm1, [r4]
movq m0, [r0+r3*0-8]
movq m1, [r4]
mov r0, r4
mova xmm2, xmm3
punpcklqdq xmm0, xmm3
psrldq xmm4, xmm0, 7
punpcklqdq xmm2, xmm1
psrldq xmm1, xmm2, 1
mova m2, m3
punpcklqdq m0, m3
psrldq m4, m0, 7
punpcklqdq m2, m1
psrldq m1, m2, 1
test r1d, r1d
jnz .do_left
.fix_lt_1:
pxor xmm5, xmm3, xmm4
psrlq xmm5, 56
psllq xmm5, 48
pxor xmm1, xmm5
pxor m5, m3, m4
psrlq m5, 56
psllq m5, 48
pxor m1, m5
.do_left:
mova xmm0, xmm4
PRED4x4_LOWPASS xmm2, xmm1, xmm4, xmm3, xmm5
mova xmm4, xmm0
movq xmm6, xmm2
PRED4x4_LOWPASS xmm1, xmm3, xmm0, xmm4, xmm5
psllq xmm1, 56
punpcklqdq xmm1, xmm2
psrldq xmm1, 7
mova xmm0, xmm1
movu xmm2, [r0-8]
movu xmm1, [r0]
mova xmm3, xmm1
psrldq xmm2, 7
psrldq xmm1, 1
mova m0, m4
PRED4x4_LOWPASS m2, m1, m4, m3, m5
mova m4, m0
movq m6, m2
PRED4x4_LOWPASS m1, m3, m0, m4, m5
psllq m1, 56
punpcklqdq m1, m2
psrldq m1, 7
mova m0, m1
movu m2, [r0-8]
movu m1, [r0]
mova m3, m1
psrldq m2, 7
psrldq m1, 1
jnz .check_tr
.fix_lt_2:
pxor xmm5, xmm3, xmm2
psllq xmm5, 56
psrlq xmm5, 56
pxor xmm2, xmm5
pxor m5, m3, m2
psllq m5, 56
psrlq m5, 56
pxor m2, m5
.check_tr:
test r2d, r2d
jnz .do_top
.fix_tr_1:
pxor xmm5, xmm3, xmm1
psrlq xmm5, 56
psllq xmm5, 56
pxor xmm1, xmm5
pxor m5, m3, m1
psrlq m5, 56
psllq m5, 56
pxor m1, m5
.do_top:
PRED4x4_LOWPASS xmm4, xmm2, xmm1, xmm3, xmm5
PRED4x4_LOWPASS m4, m2, m1, m3, m5
lea r1, [r0+r3*2]
movdqa xmm1, xmm6
pslldq xmm4, 8
por xmm6, xmm4
mova m1, m6
pslldq m4, 8
por m6, m4
lea r2, [r1+r3*2]
pslldq xmm4, 1
por xmm0, xmm4
psrldq xmm1, 7
pslldq xmm1, 15
psrldq xmm1, 7
por xmm0, xmm1
pslldq m4, 1
por m0, m4
psrldq m1, 7
pslldq m1, 15
psrldq m1, 7
por m0, m1
lea r0, [r2+r3*2]
psrldq xmm2, xmm6, 1
PRED4x4_LOWPASS xmm3, xmm0, xmm2, xmm6, xmm4
psrldq xmm1, xmm3, 1
movq [r0+r3*2], xmm3
movq [r0+r3*1], xmm1
psrldq xmm3, 2
psrldq xmm1, 2
movq [r2+r3*2], xmm3
movq [r2+r3*1], xmm1
psrldq xmm3, 2
psrldq xmm1, 2
movq [r1+r3*2], xmm3
movq [r1+r3*1], xmm1
psrldq xmm3, 2
psrldq xmm1, 2
movq [r4+r3*2], xmm3
movq [r4+r3*1], xmm1
psrldq m2, m6, 1
PRED4x4_LOWPASS m3, m0, m2, m6, m4
psrldq m1, m3, 1
movq [r0+r3*2], m3
movq [r0+r3*1], m1
psrldq m3, 2
psrldq m1, 2
movq [r2+r3*2], m3
movq [r2+r3*1], m1
psrldq m3, 2
psrldq m1, 2
movq [r1+r3*2], m3
movq [r1+r3*1], m1
psrldq m3, 2
psrldq m1, 2
movq [r4+r3*2], m3
movq [r4+r3*1], m1
RET
;-----------------------------------------------------------------------------
@@ -1251,101 +1251,101 @@ INIT_XMM sse2
cglobal pred8x8l_vertical_right_8, 4,5,6
sub r0, r3
lea r4, [r0+r3*2]
movd xmm0, [r0+r3*1-4]
movd xmm2, [r0+r3*0-4]
punpcklbw xmm0, xmm2
movd xmm1, [r4+r3*1-4]
movd xmm3, [r0+r3*2-4]
punpcklbw xmm1, xmm3
movd m0, [r0+r3*1-4]
movd m2, [r0+r3*0-4]
punpcklbw m0, m2
movd m1, [r4+r3*1-4]
movd m3, [r0+r3*2-4]
punpcklbw m1, m3
mov r4, r0
punpcklwd xmm1, xmm0
punpcklwd m1, m0
lea r0, [r0+r3*4]
movd xmm2, [r0+r3*1-4]
movd xmm5, [r0+r3*0-4]
punpcklbw xmm2, xmm5
movd m2, [r0+r3*1-4]
movd m5, [r0+r3*0-4]
punpcklbw m2, m5
lea r0, [r0+r3*2]
movd xmm3, [r0+r3*1-4]
movd xmm5, [r0+r3*0-4]
punpcklbw xmm3, xmm5
punpcklwd xmm3, xmm2
punpckhdq xmm3, xmm1
pshufd xmm3, xmm3, 0xee
movd m3, [r0+r3*1-4]
movd m5, [r0+r3*0-4]
punpcklbw m3, m5
punpcklwd m3, m2
punpckhdq m3, m1
pshufd m3, m3, 0xee
lea r0, [r0+r3*2]
movq xmm0, [r0+r3*0-8]
movq xmm1, [r4]
movq m0, [r0+r3*0-8]
movq m1, [r4]
mov r0, r4
punpcklqdq xmm0, xmm3
psrldq xmm0, 7
mova xmm4, xmm0
punpcklqdq xmm2, xmm3, xmm1
psrldq xmm2, 1
mova xmm1, xmm2
punpcklqdq m0, m3
psrldq m0, 7
mova m4, m0
punpcklqdq m2, m3, m1
psrldq m2, 1
mova m1, m2
test r1d, r1d
jnz .do_left
.fix_lt_1:
pxor xmm5, xmm3, xmm4
psrlq xmm5, 56
psllq xmm5, 48
pxor xmm1, xmm5
pxor m5, m3, m4
psrlq m5, 56
psllq m5, 48
pxor m1, m5
.do_left:
PRED4x4_LOWPASS xmm2, xmm1, xmm4, xmm3, xmm5
movq xmm0, xmm2
movu xmm2, [r0-8]
movu xmm1, [r0]
mova xmm3, xmm1
psrldq xmm2, 7
psrldq xmm1, 1
PRED4x4_LOWPASS m2, m1, m4, m3, m5
movq m0, m2
movu m2, [r0-8]
movu m1, [r0]
mova m3, m1
psrldq m2, 7
psrldq m1, 1
jnz .check_tr
.fix_lt_2:
pxor xmm5, xmm3, xmm2
psllq xmm5, 56
psrlq xmm5, 56
pxor xmm2, xmm5
pxor m5, m3, m2
psllq m5, 56
psrlq m5, 56
pxor m2, m5
.check_tr:
test r2d, r2d
jnz .do_top
.fix_tr_1:
pxor xmm5, xmm3, xmm1
psrlq xmm5, 56
psllq xmm5, 56
pxor xmm1, xmm5
pxor m5, m3, m1
psrlq m5, 56
psllq m5, 56
pxor m1, m5
.do_top:
PRED4x4_LOWPASS xmm4, xmm2, xmm1, xmm3, xmm5
PRED4x4_LOWPASS m4, m2, m1, m3, m5
lea r1, [r0+r3*2]
pslldq xmm4, 8
por xmm0, xmm4
movdqa xmm1, xmm0
pslldq m4, 8
por m0, m4
mova m1, m0
lea r2, [r0+r3*4]
movdqa xmm2, xmm0
movdqa xmm3, xmm0
pslldq xmm0, 1
pslldq xmm1, 2
pavgb xmm2, xmm0
PRED4x4_LOWPASS xmm0, xmm3, xmm1, xmm0, xmm5
pandn xmm4, [pw_ff00], xmm0
movdqa xmm5, xmm0
psrlw xmm0, 8
packuswb xmm4, xmm0
movhlps xmm0, xmm4
movhps [r0+r3*2], xmm5
movhps [r0+r3*1], xmm2
psrldq xmm5, 4
movss xmm5, xmm4
psrldq xmm2, 4
movss xmm2, xmm0
mova m2, m0
mova m3, m0
pslldq m0, 1
pslldq m1, 2
pavgb m2, m0
PRED4x4_LOWPASS m0, m3, m1, m0, m5
pandn m4, [pw_ff00], m0
mova m5, m0
psrlw m0, 8
packuswb m4, m0
movhlps m0, m4
movhps [r0+r3*2], m5
movhps [r0+r3*1], m2
psrldq m5, 4
movss m5, m4
psrldq m2, 4
movss m2, m0
lea r0, [r2+r3*2]
psrldq xmm5, 1
psrldq xmm2, 1
movq [r0+r3*2], xmm5
movq [r0+r3*1], xmm2
psrldq xmm5, 1
psrldq xmm2, 1
movq [r2+r3*2], xmm5
movq [r2+r3*1], xmm2
psrldq xmm5, 1
psrldq xmm2, 1
movq [r1+r3*2], xmm5
movq [r1+r3*1], xmm2
psrldq m5, 1
psrldq m2, 1
movq [r0+r3*2], m5
movq [r0+r3*1], m2
psrldq m5, 1
psrldq m2, 1
movq [r2+r3*2], m5
movq [r2+r3*1], m2
psrldq m5, 1
psrldq m2, 1
movq [r1+r3*2], m5
movq [r1+r3*1], m2
RET
;-----------------------------------------------------------------------------
@@ -1356,68 +1356,68 @@ cglobal pred8x8l_vertical_right_8, 4,5,6
INIT_XMM sse2
cglobal pred8x8l_vertical_left_8, 4,4,7
sub r0, r3
movu xmm2, [r0-8]
movu xmm1, [r0]
mova xmm3, xmm1
psrldq xmm2, 7
psrldq xmm1, 1
movu m2, [r0-8]
movu m1, [r0]
mova m3, m1
psrldq m2, 7
psrldq m1, 1
test r1d, r1d
jnz .check_tr
.fix_lt_2:
pxor xmm5, xmm3, xmm2
psllq xmm5, 56
psrlq xmm5, 56
pxor xmm2, xmm5
pxor m5, m3, m2
psllq m5, 56
psrlq m5, 56
pxor m2, m5
.check_tr:
test r2d, r2d
jnz .do_top
.fix_tr_1:
pxor xmm5, xmm3, xmm1
psrlq xmm5, 56
psllq xmm5, 56
pxor xmm1, xmm5
pxor m5, m3, m1
psrlq m5, 56
psllq m5, 56
pxor m1, m5
.do_top:
PRED4x4_LOWPASS xmm4, xmm2, xmm1, xmm3, xmm5
movq xmm6, xmm4
PRED4x4_LOWPASS m4, m2, m1, m3, m5
movq m6, m4
jnz .normal_top
.fix_tr_2:
punpcklbw xmm3, xmm3
pshufd xmm3, xmm3, 0xEE
pshuflw xmm1, xmm3, 0xFF
punpcklbw m3, m3
pshufd m3, m3, 0xEE
pshuflw m1, m3, 0xFF
jmp .do_topright
.normal_top:
movq xmm0, [r0+8]
psrlq xmm5, xmm0, 56
punpcklqdq xmm3, xmm0
psrldq xmm3, 7
punpcklqdq xmm4, xmm0, xmm5
psrldq xmm4, 1
PRED4x4_LOWPASS xmm1, xmm3, xmm4, xmm0, xmm2
movq m0, [r0+8]
psrlq m5, m0, 56
punpcklqdq m3, m0
psrldq m3, 7
punpcklqdq m4, m0, m5
psrldq m4, 1
PRED4x4_LOWPASS m1, m3, m4, m0, m2
.do_topright:
lea r1, [r0+r3*2]
lea r2, [r0+r3*4]
pslldq xmm1, 8
por xmm6, xmm1
psrldq xmm2, xmm6, 1
pslldq xmm1, xmm6, 1
pavgb xmm3, xmm6, xmm2
PRED4x4_LOWPASS xmm6, xmm1, xmm2, xmm6, xmm5
psrldq xmm6, 1
movq [r0+r3*1], xmm3
movq [r0+r3*2], xmm6
pslldq m1, 8
por m6, m1
psrldq m2, m6, 1
pslldq m1, m6, 1
pavgb m3, m6, m2
PRED4x4_LOWPASS m6, m1, m2, m6, m5
psrldq m6, 1
movq [r0+r3*1], m3
movq [r0+r3*2], m6
lea r0, [r2+r3*2]
psrldq xmm3, 1
psrldq xmm6, 1
movq [r1+r3*1], xmm3
movq [r1+r3*2], xmm6
psrldq xmm3, 1
psrldq xmm6, 1
movq [r2+r3*1], xmm3
movq [r2+r3*2], xmm6
psrldq xmm3, 1
psrldq xmm6, 1
movq [r0+r3*1], xmm3
movq [r0+r3*2], xmm6
psrldq m3, 1
psrldq m6, 1
movq [r1+r3*1], m3
movq [r1+r3*2], m6
psrldq m3, 1
psrldq m6, 1
movq [r2+r3*1], m3
movq [r2+r3*2], m6
psrldq m3, 1
psrldq m6, 1
movq [r0+r3*1], m3
movq [r0+r3*2], m6
RET
;-----------------------------------------------------------------------------
@@ -1513,118 +1513,118 @@ cglobal pred8x8l_horizontal_up_8, 4,4,6
cglobal pred8x8l_horizontal_down_8, 4,5,8
sub r0, r3
lea r4, [r0+r3*2]
movd xmm0, [r0+r3*1-4]
movd xmm1, [r0+r3*0-4]
punpcklbw xmm0, xmm1
movd xmm1, [r4+r3*1-4]
movd xmm2, [r0+r3*2-4]
punpcklbw xmm1, xmm2
movd m0, [r0+r3*1-4]
movd m1, [r0+r3*0-4]
punpcklbw m0, m1
movd m1, [r4+r3*1-4]
movd m2, [r0+r3*2-4]
punpcklbw m1, m2
mov r4, r0
punpcklwd xmm1, xmm0
punpcklwd m1, m0
lea r0, [r0+r3*4]
movd xmm2, [r0+r3*1-4]
movd xmm3, [r0+r3*0-4]
punpcklbw xmm2, xmm3
movd m2, [r0+r3*1-4]
movd m3, [r0+r3*0-4]
punpcklbw m2, m3
lea r0, [r0+r3*2]
movd xmm3, [r0+r3*1-4]
movd xmm4, [r0+r3*0-4]
punpcklbw xmm3, xmm4
punpcklwd xmm3, xmm2
punpckhdq xmm3, xmm1
pshufd xmm3, xmm3, 0xee
movd m3, [r0+r3*1-4]
movd m4, [r0+r3*0-4]
punpcklbw m3, m4
punpcklwd m3, m2
punpckhdq m3, m1
pshufd m3, m3, 0xee
lea r0, [r0+r3*2]
movq xmm0, [r0+r3*0-8]
movq xmm1, [r4]
movq m0, [r0+r3*0-8]
movq m1, [r4]
mov r0, r4
mova xmm2, xmm3
punpcklqdq xmm0, xmm3
psrldq xmm0, 7
mova xmm4, xmm0
punpcklqdq xmm2, xmm1
psrldq xmm2, 1
mova xmm1, xmm2
mova m2, m3
punpcklqdq m0, m3
psrldq m0, 7
mova m4, m0
punpcklqdq m2, m1
psrldq m2, 1
mova m1, m2
test r1d, r1d
jnz .do_left
.fix_lt_1:
pxor xmm5, xmm3, xmm4
psrlq xmm5, 56
psllq xmm5, 48
pxor xmm1, xmm5
pxor m5, m3, m4
psrlq m5, 56
psllq m5, 48
pxor m1, m5
.do_left:
PRED4x4_LOWPASS xmm2, xmm1, xmm4, xmm3, xmm5
movq xmm6, xmm2
pslldq xmm6, 8
mova xmm4, xmm0
PRED4x4_LOWPASS xmm1, xmm3, xmm0, xmm4, xmm5
pslldq xmm2, xmm1, 15
psrldq xmm2, 8
por xmm6, xmm2
movdqu xmm2, [r0-8]
movdqu xmm1, [r0]
mova xmm3, xmm1
psrldq xmm2, 7
psrldq xmm1, 1
PRED4x4_LOWPASS m2, m1, m4, m3, m5
movq m6, m2
pslldq m6, 8
mova m4, m0
PRED4x4_LOWPASS m1, m3, m0, m4, m5
pslldq m2, m1, 15
psrldq m2, 8
por m6, m2
movu m2, [r0-8]
movu m1, [r0]
mova m3, m1
psrldq m2, 7
psrldq m1, 1
test r1d, r1d
jnz .check_r2
.fix_lt_2:
pxor xmm5, xmm3, xmm2
psllq xmm5, 56
psrlq xmm5, 56
pxor xmm2, xmm5
pxor m5, m3, m2
psllq m5, 56
psrlq m5, 56
pxor m2, m5
.check_r2:
test r2d, r2d
jnz .do_top
.fix_tr_1:
pxor xmm5, xmm3, xmm1
psrlq xmm5, 56
psllq xmm5, 56
pxor xmm1, xmm5
pxor m5, m3, m1
psrlq m5, 56
psllq m5, 56
pxor m1, m5
.do_top:
PRED4x4_LOWPASS xmm7, xmm2, xmm1, xmm3, xmm5
PRED4x4_LOWPASS m7, m2, m1, m3, m5
test r2d, r2d
jz .fix_tr_2
movq xmm0, [r0+8]
psrlq xmm5, xmm0, 56
punpcklqdq xmm3, xmm0
psrldq xmm3, 7
punpcklqdq xmm4, xmm0, xmm5
psrldq xmm4, 1
PRED4x4_LOWPASS xmm1, xmm3, xmm4, xmm0, xmm4
movq m0, [r0+8]
psrlq m5, m0, 56
punpcklqdq m3, m0
psrldq m3, 7
punpcklqdq m4, m0, m5
psrldq m4, 1
PRED4x4_LOWPASS m1, m3, m4, m0, m4
.do_topright:
movq xmm0, xmm1
pslldq xmm0, 8
por xmm7, xmm0
movq m0, m1
pslldq m0, 8
por m7, m0
lea r2, [r4+r3*2]
movdqa xmm2, xmm7
movdqa xmm3, xmm7
PALIGNR xmm7, xmm6, 7, xmm4
PALIGNR xmm2, xmm6, 9, xmm0
mova m2, m7
mova m3, m7
PALIGNR m7, m6, 7, m4
PALIGNR m2, m6, 9, m0
lea r1, [r4+r3*4]
PALIGNR xmm3, xmm6, 8, xmm6
pavgb xmm4, xmm7, xmm3
PALIGNR m3, m6, 8, m6
pavgb m4, m7, m3
lea r0, [r2+r3*4]
PRED4x4_LOWPASS xmm3, xmm7, xmm2, xmm3, xmm5
punpcklbw xmm4, xmm3
movhlps xmm3, xmm4
movq [r0+r3*2], xmm4
movq [r2+r3*2], xmm3
psrldq xmm4, 2
psrldq xmm3, 2
movq [r0+r3*1], xmm4
movq [r2+r3*1], xmm3
psrldq xmm4, 2
psrldq xmm3, 2
movq [r1+r3*2], xmm4
movq [r4+r3*2], xmm3
psrldq xmm4, 2
psrldq xmm3, 2
movq [r1+r3*1], xmm4
movq [r4+r3*1], xmm3
PRED4x4_LOWPASS m3, m7, m2, m3, m5
punpcklbw m4, m3
movhlps m3, m4
movq [r0+r3*2], m4
movq [r2+r3*2], m3
psrldq m4, 2
psrldq m3, 2
movq [r0+r3*1], m4
movq [r2+r3*1], m3
psrldq m4, 2
psrldq m3, 2
movq [r1+r3*2], m4
movq [r4+r3*2], m3
psrldq m4, 2
psrldq m3, 2
movq [r1+r3*1], m4
movq [r4+r3*1], m3
RET
.fix_tr_2:
punpcklbw xmm3, xmm3
pshufd xmm3, xmm3, 0xEE
pshuflw xmm1, xmm3, 0xFF
punpcklbw m3, m3
pshufd m3, m3, 0xEE
pshuflw m1, m3, 0xFF
jmp .do_topright
%endmacro