diff --git a/libavcodec/x86/hpeldsp.asm b/libavcodec/x86/hpeldsp.asm index d50bf5d39c..70066e4f45 100644 --- a/libavcodec/x86/hpeldsp.asm +++ b/libavcodec/x86/hpeldsp.asm @@ -27,11 +27,9 @@ %include "libavutil/x86/x86util.asm" -SECTION_RODATA cextern pb_1 cextern pw_1 cextern pw_2 -pb_interleave16: db 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 cextern pw_8192 @@ -503,51 +501,49 @@ SET_PIXELS_XY2 avg, pw_1, _no_rnd %macro SSSE3_PIXELS_XY2 1-2 cglobal %1_pixels16_xy2, 4,5,%2 - mova m4, [pb_interleave16] - mova m5, [pb_1] - movu m0, [r1] movu m1, [r1+1] - pmaddubsw m0, m5 + movu m0, [r1] + mova m5, [pb_1] + mova m4, [pw_8192] pmaddubsw m1, m5 + pmaddubsw m0, m5 xor r4, r4 add r1, r2 .loop: - movu m2, [r1+r4] movu m3, [r1+r4+1] - pmaddubsw m2, m5 + movu m2, [r1+r4] pmaddubsw m3, m5 - paddw m0, m2 - paddw m1, m3 - pmulhrsw m0, [pw_8192] - pmulhrsw m1, [pw_8192] + pmaddubsw m2, m5 %ifidn %1, avg mova m6, [r0+r4] - packuswb m0, m1 - pshufb m0, m4 +%endif + paddw m1, m3 + paddw m0, m2 + pmulhrsw m1, m4 + pmulhrsw m0, m4 + pslldq m1, 1 + por m0, m1 +%ifidn %1, avg pavgb m0, m6 -%else - packuswb m0, m1 - pshufb m0, m4 %endif mova [r0+r4], m0 add r4, r2 - movu m0, [r1+r4] movu m1, [r1+r4+1] - pmaddubsw m0, m5 + movu m0, [r1+r4] pmaddubsw m1, m5 - paddw m2, m0 - paddw m3, m1 - pmulhrsw m2, [pw_8192] - pmulhrsw m3, [pw_8192] + pmaddubsw m0, m5 %ifidn %1, avg mova m6, [r0+r4] - packuswb m2, m3 - pshufb m2, m4 +%endif + paddw m3, m1 + paddw m2, m0 + pmulhrsw m3, m4 + pmulhrsw m2, m4 + pslldq m3, 1 + por m2, m3 +%ifidn %1, avg pavgb m2, m6 -%else - packuswb m2, m3 - pshufb m2, m4 %endif mova [r0+r4], m2 add r4, r2