diff --git a/libavfilter/x86/vf_noise.c b/libavfilter/x86/vf_noise.c index 43387c9908..2a7646728f 100644 --- a/libavfilter/x86/vf_noise.c +++ b/libavfilter/x86/vf_noise.c @@ -33,27 +33,30 @@ static void line_noise_avg_mmx(uint8_t *dst, const uint8_t *src, __asm__ volatile( "mov %5, %%"FF_REG_a" \n\t" + "pxor %%mm4, %%mm4 \n\t" ".p2align 4 \n\t" "1: \n\t" "movq (%1, %%"FF_REG_a"), %%mm1 \n\t" "movq (%0, %%"FF_REG_a"), %%mm0 \n\t" "paddb (%2, %%"FF_REG_a"), %%mm1\n\t" "paddb (%3, %%"FF_REG_a"), %%mm1\n\t" + "movq %%mm4, %%mm5 \n\t" + "pcmpgtb %%mm0, %%mm5 \n\t" + "movq %%mm0, %%mm6 \n\t" "movq %%mm0, %%mm2 \n\t" + "punpcklbw %%mm5, %%mm0 \n\t" + "punpckhbw %%mm5, %%mm2 \n\t" + "movq %%mm4, %%mm5 \n\t" + "pcmpgtb %%mm1, %%mm5 \n\t" "movq %%mm1, %%mm3 \n\t" - "punpcklbw %%mm0, %%mm0 \n\t" - "punpckhbw %%mm2, %%mm2 \n\t" - "punpcklbw %%mm1, %%mm1 \n\t" - "punpckhbw %%mm3, %%mm3 \n\t" - "pmulhw %%mm0, %%mm1 \n\t" - "pmulhw %%mm2, %%mm3 \n\t" - "paddw %%mm1, %%mm1 \n\t" - "paddw %%mm3, %%mm3 \n\t" - "paddw %%mm0, %%mm1 \n\t" - "paddw %%mm2, %%mm3 \n\t" - "psrlw $8, %%mm1 \n\t" - "psrlw $8, %%mm3 \n\t" - "packuswb %%mm3, %%mm1 \n\t" + "punpcklbw %%mm5, %%mm1 \n\t" + "punpckhbw %%mm5, %%mm3 \n\t" + "pmullw %%mm0, %%mm1 \n\t" + "pmullw %%mm2, %%mm3 \n\t" + "psraw $7, %%mm1 \n\t" + "psraw $7, %%mm3 \n\t" + "packsswb %%mm3, %%mm1 \n\t" + "paddb %%mm6, %%mm1 \n\t" "movq %%mm1, (%4, %%"FF_REG_a") \n\t" "add $8, %%"FF_REG_a" \n\t" " js 1b \n\t"