[PR] avfilter/x86/vf_atadenoise: Minor improvements (PR #24010)
mkver via ffmpeg-devel <[email protected]> Tue, 04 Aug 2026 18:18:20 -0000
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <178586750076.59.11148719080219679752@29965ddac10e> |
PR #24010 opened by mkver URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24010 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24010.patch >From 5a1c155dbbbf4278729f3a4e3fe91ecd25e3ae6b Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 16:28:02 +0200 Subject: [PATCH 1/6] avfilter/x86/vf_atadenoise: Reduce number of registers used Saves a push+pop on Win64 and some REX prefixes everywhere. Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavfilter/x86/vf_atadenoise.asm | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm index ea80e3aa59..a2ff961803 100644 --- a/libavfilter/x86/vf_atadenoise.asm +++ b/libavfilter/x86/vf_atadenoise.asm @@ -151,7 +151,7 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src RET INIT_XMM sse4 -cglobal atadenoise_filter_row8_serial, 6,10,13, src, dst, srcf, w, mid, size, i, j, srcfx, x +cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, j, srcfx, x movsxdifnidn wq, wd movsxdifnidn midq, midd movsxdifnidn sizeq, sized @@ -176,7 +176,7 @@ cglobal atadenoise_filter_row8_serial, 6,10,13, src, dst, srcf, w, mid, size, i, punpcklbw m0, m2 mova m7, m0 mova m8, [pw_one] - mova m12, m10 + mova m11, m10 .loop0: dec jq @@ -189,27 +189,27 @@ cglobal atadenoise_filter_row8_serial, 6,10,13, src, dst, srcf, w, mid, size, i, mova m9, m1 psubw m1, m0 pabsw m1, m1 - paddw m11, m1 + paddw m3, m1 pcmpgtw m1, m4 - mova m6, m11 - pcmpgtw m6, m5 + pcmpgtw m6, m3, m5 por m6, m1 pxor m6, m10 - pand m12, m6 - pand m9, m12 + pand m11, m6 + pand m9, m11 paddw m7, m9 - mova m6, m12 + mova m6, m11 psrlw m6, 15 paddw m8, m6 - ptest m12, m12 + ptest m11, m11 jz .end_loop0 cmp jq, 0 jg .loop0 .end_loop0: - mova m12, m10 + pxor m3, m3 + mova m11, m10 .loop1: inc iq @@ -228,14 +228,14 @@ cglobal atadenoise_filter_row8_serial, 6,10,13, src, dst, srcf, w, mid, size, i, pcmpgtw m6, m5 por m6, m1 pxor m6, m10 - pand m12, m6 - pand m9, m12 + pand m11, m6 + pand m9, m11 paddw m7, m9 - mova m6, m12 + mova m6, m11 psrlw m6, 15 paddw m8, m6 - ptest m12, m12 + ptest m11, m11 jz .finish cmp iq, sizeq -- 2.52.0 >From 203873b14d0f2bd91e638cf69a57953a824a7329 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 16:34:08 +0200 Subject: [PATCH 2/6] avfilter/x86/vf_atadenoise: Don't load too much data Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavfilter/x86/vf_atadenoise.asm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm index a2ff961803..36a6d9ca83 100644 --- a/libavfilter/x86/vf_atadenoise.asm +++ b/libavfilter/x86/vf_atadenoise.asm @@ -58,7 +58,7 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mov jq, midq pxor m3, m3 pxor m11, m11 - movu m0, [srcq + xq] + movq m0, [srcq + xq] mova m12, m10 punpcklbw m0, m2 mova m7, m0 @@ -71,7 +71,7 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mov srcfxq, [srcfq + jq * 8] add srcfxq, wq - movu m1, [srcfxq + xq] + movq m1, [srcfxq + xq] punpcklbw m1, m2 mova m9, m1 psubw m1, m0 @@ -92,7 +92,7 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mov srcfxq, [srcfq + iq * 8] add srcfxq, wq - movu m1, [srcfxq + xq] + movq m1, [srcfxq + xq] punpcklbw m1, m2 mova m9, m1 psubw m1, m0 @@ -172,7 +172,7 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, mov jq, midq pxor m3, m3 pxor m11, m11 - movu m0, [srcq + xq] + movq m0, [srcq + xq] punpcklbw m0, m2 mova m7, m0 mova m8, [pw_one] @@ -184,7 +184,7 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, mov srcfxq, [srcfq + jq * 8] add srcfxq, wq - movu m1, [srcfxq + xq] + movq m1, [srcfxq + xq] punpcklbw m1, m2 mova m9, m1 psubw m1, m0 @@ -217,7 +217,7 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, mov srcfxq, [srcfq + iq * 8] add srcfxq, wq - movu m1, [srcfxq + xq] + movq m1, [srcfxq + xq] punpcklbw m1, m2 mova m9, m1 psubw m1, m0 -- 2.52.0 >From 96ef2ff05cbde04d834c1631171d955f45398131 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 16:51:29 +0200 Subject: [PATCH 3/6] avfilter/x86/vf_atadenoise: Combine stores Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavfilter/x86/vf_atadenoise.asm | 38 ++++++++++++------------------- 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm index 36a6d9ca83..bb495c5819 100644 --- a/libavfilter/x86/vf_atadenoise.asm +++ b/libavfilter/x86/vf_atadenoise.asm @@ -126,25 +126,20 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src punpcklwd m7, m2 punpcklwd m8, m2 - cvtdq2ps m7, m7 - cvtdq2ps m8, m8 - divps m7, m8 - cvttps2dq m7, m7 - packssdw m7, m7 - packuswb m7, m7 - - movd [dstq + xq], m7 - punpckhwd m1, m2 punpckhwd m6, m2 + cvtdq2ps m7, m7 + cvtdq2ps m8, m8 cvtdq2ps m1, m1 cvtdq2ps m6, m6 + divps m7, m8 divps m1, m6 + cvttps2dq m7, m7 cvttps2dq m1, m1 - packssdw m1, m1 - packuswb m1, m1 + packssdw m7, m1 + packuswb m7, m7 - movd [dstq + xq + 4], m1 + movq [dstq + xq], m7 add xq, mmsize/2 jl .loop @@ -251,25 +246,20 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, punpcklwd m7, m2 punpcklwd m8, m2 - cvtdq2ps m7, m7 - cvtdq2ps m8, m8 - divps m7, m8 - cvttps2dq m7, m7 - packssdw m7, m7 - packuswb m7, m7 - - movd [dstq + xq], m7 - punpckhwd m1, m2 punpckhwd m6, m2 + cvtdq2ps m7, m7 + cvtdq2ps m8, m8 cvtdq2ps m1, m1 cvtdq2ps m6, m6 + divps m7, m8 divps m1, m6 + cvttps2dq m7, m7 cvttps2dq m1, m1 - packssdw m1, m1 - packuswb m1, m1 + packssdw m7, m1 + packuswb m7, m7 - movd [dstq + xq + 4], m1 + movq [dstq + xq], m7 add xq, mmsize/2 jl .loop -- 2.52.0 >From 40341cb2d2db58842410dfb191729d1fe9d02ea6 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 18:06:45 +0200 Subject: [PATCH 4/6] avfilter/x86/vf_atadenoise: Avoid negating mask Possible by using pandn. Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavfilter/x86/vf_atadenoise.asm | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm index bb495c5819..9726084f31 100644 --- a/libavfilter/x86/vf_atadenoise.asm +++ b/libavfilter/x86/vf_atadenoise.asm @@ -81,11 +81,10 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mova m6, m11 pcmpgtw m6, m5 por m6, m1 - pxor m6, m10 - pand m12, m6 - pand m9, m12 + pandn m6, m12 + mova m12, m6 + pand m9, m6 paddw m7, m9 - mova m6, m12 psrlw m6, 15 paddw m8, m6 @@ -102,11 +101,10 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mova m6, m3 pcmpgtw m6, m5 por m6, m1 - pxor m6, m10 - pand m12, m6 - pand m9, m12 + pandn m6, m12 + mova m12, m6 + pand m9, m6 paddw m7, m9 - mova m6, m12 psrlw m6, 15 paddw m8, m6 @@ -188,11 +186,10 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, pcmpgtw m1, m4 pcmpgtw m6, m3, m5 por m6, m1 - pxor m6, m10 - pand m11, m6 - pand m9, m11 + pandn m6, m11 + mova m11, m6 + pand m9, m6 paddw m7, m9 - mova m6, m11 psrlw m6, 15 paddw m8, m6 @@ -222,11 +219,10 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, mova m6, m3 pcmpgtw m6, m5 por m6, m1 - pxor m6, m10 - pand m11, m6 - pand m9, m11 + pandn m6, m11 + mova m11, m6 + pand m9, m6 paddw m7, m9 - mova m6, m11 psrlw m6, 15 paddw m8, m6 -- 2.52.0 >From 3af89bb60e19178b7ca336a3f221ba88f4946971 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 18:12:12 +0200 Subject: [PATCH 5/6] avfilter/x86/vf_atadenoise: Avoid shifting unnecessarily For a word mask register (where all the values are either 0x0 or 0xFFFF) a right logical shift by 15 is equivalent to negating, so instead of negating the mask and then adding it to another register one can simply subtract the mask from the other register. Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavfilter/x86/vf_atadenoise.asm | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm index 9726084f31..c1217d38ce 100644 --- a/libavfilter/x86/vf_atadenoise.asm +++ b/libavfilter/x86/vf_atadenoise.asm @@ -85,8 +85,7 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mova m12, m6 pand m9, m6 paddw m7, m9 - psrlw m6, 15 - paddw m8, m6 + psubw m8, m6 mov srcfxq, [srcfq + iq * 8] add srcfxq, wq @@ -105,8 +104,7 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src mova m12, m6 pand m9, m6 paddw m7, m9 - psrlw m6, 15 - paddw m8, m6 + psubw m8, m6 ptest m12, m12 jz .finish @@ -190,8 +188,7 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, mova m11, m6 pand m9, m6 paddw m7, m9 - psrlw m6, 15 - paddw m8, m6 + psubw m8, m6 ptest m11, m11 jz .end_loop0 @@ -223,8 +220,7 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, mova m11, m6 pand m9, m6 paddw m7, m9 - psrlw m6, 15 - paddw m8, m6 + psubw m8, m6 ptest m11, m11 jz .finish -- 2.52.0 >From bb2f39b788b32b8d352abe0213277220c6f54d43 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt <[email protected]> Date: Tue, 4 Aug 2026 18:21:11 +0200 Subject: [PATCH 6/6] avfilter/x86/vf_atadenoise: Test earlier ptest has quite a bit of latency, so it should be scheduled earlier. Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavfilter/x86/vf_atadenoise.asm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavfilter/x86/vf_atadenoise.asm b/libavfilter/x86/vf_atadenoise.asm index c1217d38ce..33e5417f4d 100644 --- a/libavfilter/x86/vf_atadenoise.asm +++ b/libavfilter/x86/vf_atadenoise.asm @@ -101,12 +101,12 @@ cglobal atadenoise_filter_row8, 6,10,13, src, dst, srcf, w, mid, size, i, j, src pcmpgtw m6, m5 por m6, m1 pandn m6, m12 + ptest m6, m6 mova m12, m6 pand m9, m6 paddw m7, m9 psubw m8, m6 - ptest m12, m12 jz .finish cmp iq, sizeq @@ -185,12 +185,12 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, pcmpgtw m6, m3, m5 por m6, m1 pandn m6, m11 + ptest m6, m6 mova m11, m6 pand m9, m6 paddw m7, m9 psubw m8, m6 - ptest m11, m11 jz .end_loop0 cmp jq, 0 @@ -217,12 +217,12 @@ cglobal atadenoise_filter_row8_serial, 6,10,12, src, dst, srcf, w, mid, size, i, pcmpgtw m6, m5 por m6, m1 pandn m6, m11 + ptest m6, m6 mova m11, m6 pand m9, m6 paddw m7, m9 psubw m8, m6 - ptest m11, m11 jz .finish cmp iq, sizeq -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]