This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit a13c2b1e4f7e39a86a863a7682a6e11cd6d12dba Author: Andreas Rheinhardt <[email protected]> AuthorDate: Thu Jul 9 20:06:42 2026 +0200 Commit: Andreas Rheinhardt <[email protected]> CommitDate: Sun Jul 12 23:46:56 2026 +0200 avcodec/x86/vp9lpf: Simplify clip_u8(u8+i8) Just subtract 128 from u8 to make it signed, use paddsb and convert back to u8. Saves 2477B of .text here. Old benchmarks: vp9_loop_filter_h_4_8_8bpp_c: 77.5 vp9_loop_filter_h_4_8_8bpp_mmxext: 54.8 ( 1.41x) vp9_loop_filter_h_8_8_8bpp_c: 85.5 vp9_loop_filter_h_8_8_8bpp_mmxext: 75.0 ( 1.12x) vp9_loop_filter_h_16_8_8bpp_c: 139.8 vp9_loop_filter_h_16_16_8bpp_c: 249.7 vp9_loop_filter_h_16_16_8bpp_sse2: 154.9 ( 1.54x) vp9_loop_filter_h_16_16_8bpp_ssse3: 152.9 ( 1.54x) vp9_loop_filter_h_16_16_8bpp_avx: 142.1 ( 1.62x) vp9_loop_filter_mix2_h_44_16_8bpp_c: 167.8 vp9_loop_filter_mix2_h_44_16_8bpp_sse2: 52.3 ( 3.21x) vp9_loop_filter_mix2_h_44_16_8bpp_ssse3: 52.7 ( 3.18x) vp9_loop_filter_mix2_h_44_16_8bpp_avx: 51.9 ( 3.18x) vp9_loop_filter_mix2_h_48_16_8bpp_c: 175.1 vp9_loop_filter_mix2_h_48_16_8bpp_sse2: 73.2 ( 2.39x) vp9_loop_filter_mix2_h_48_16_8bpp_ssse3: 74.9 ( 2.28x) vp9_loop_filter_mix2_h_48_16_8bpp_avx: 69.0 ( 2.54x) vp9_loop_filter_mix2_h_84_16_8bpp_c: 177.7 vp9_loop_filter_mix2_h_84_16_8bpp_sse2: 72.6 ( 2.45x) vp9_loop_filter_mix2_h_84_16_8bpp_ssse3: 71.3 ( 2.48x) vp9_loop_filter_mix2_h_84_16_8bpp_avx: 69.3 ( 2.56x) vp9_loop_filter_mix2_h_88_16_8bpp_c: 184.3 vp9_loop_filter_mix2_h_88_16_8bpp_sse2: 69.6 ( 2.59x) vp9_loop_filter_mix2_h_88_16_8bpp_ssse3: 70.2 ( 2.62x) vp9_loop_filter_mix2_h_88_16_8bpp_avx: 69.3 ( 2.66x) vp9_loop_filter_mix2_v_44_16_8bpp_c: 176.3 vp9_loop_filter_mix2_v_44_16_8bpp_sse2: 22.0 ( 7.98x) vp9_loop_filter_mix2_v_44_16_8bpp_ssse3: 21.4 ( 8.23x) vp9_loop_filter_mix2_v_44_16_8bpp_avx: 21.6 ( 8.18x) vp9_loop_filter_mix2_v_48_16_8bpp_c: 187.8 vp9_loop_filter_mix2_v_48_16_8bpp_sse2: 49.9 ( 3.75x) vp9_loop_filter_mix2_v_48_16_8bpp_ssse3: 47.3 ( 3.96x) vp9_loop_filter_mix2_v_48_16_8bpp_avx: 46.1 ( 4.07x) vp9_loop_filter_mix2_v_84_16_8bpp_c: 189.7 vp9_loop_filter_mix2_v_84_16_8bpp_sse2: 51.2 ( 3.58x) vp9_loop_filter_mix2_v_84_16_8bpp_ssse3: 48.4 ( 3.90x) vp9_loop_filter_mix2_v_84_16_8bpp_avx: 45.9 ( 4.14x) vp9_loop_filter_mix2_v_88_16_8bpp_c: 199.8 vp9_loop_filter_mix2_v_88_16_8bpp_sse2: 51.2 ( 3.88x) vp9_loop_filter_mix2_v_88_16_8bpp_ssse3: 50.5 ( 3.93x) vp9_loop_filter_mix2_v_88_16_8bpp_avx: 45.4 ( 4.40x) vp9_loop_filter_v_4_8_8bpp_c: 83.3 vp9_loop_filter_v_4_8_8bpp_mmxext: 23.2 ( 3.58x) vp9_loop_filter_v_8_8_8bpp_c: 92.6 vp9_loop_filter_v_8_8_8bpp_mmxext: 52.5 ( 1.76x) vp9_loop_filter_v_16_8_8bpp_c: 154.9 vp9_loop_filter_v_16_16_8bpp_c: 291.3 vp9_loop_filter_v_16_16_8bpp_sse2: 104.8 ( 2.68x) vp9_loop_filter_v_16_16_8bpp_ssse3: 107.5 ( 2.64x) vp9_loop_filter_v_16_16_8bpp_avx: 97.7 ( 2.90x) New benchmarks: vp9_loop_filter_h_4_8_8bpp_c: 77.1 vp9_loop_filter_h_4_8_8bpp_mmxext: 52.0 ( 1.48x) vp9_loop_filter_h_8_8_8bpp_c: 85.6 vp9_loop_filter_h_8_8_8bpp_mmxext: 73.3 ( 1.17x) vp9_loop_filter_h_16_8_8bpp_c: 139.2 vp9_loop_filter_h_16_16_8bpp_c: 252.4 vp9_loop_filter_h_16_16_8bpp_sse2: 149.3 ( 1.60x) vp9_loop_filter_h_16_16_8bpp_ssse3: 149.3 ( 1.62x) vp9_loop_filter_h_16_16_8bpp_avx: 140.2 ( 1.77x) vp9_loop_filter_mix2_h_44_16_8bpp_c: 168.5 vp9_loop_filter_mix2_h_44_16_8bpp_sse2: 48.4 ( 3.48x) vp9_loop_filter_mix2_h_44_16_8bpp_ssse3: 49.6 ( 3.39x) vp9_loop_filter_mix2_h_44_16_8bpp_avx: 49.0 ( 3.43x) vp9_loop_filter_mix2_h_48_16_8bpp_c: 174.8 vp9_loop_filter_mix2_h_48_16_8bpp_sse2: 66.0 ( 2.65x) vp9_loop_filter_mix2_h_48_16_8bpp_ssse3: 64.9 ( 2.69x) vp9_loop_filter_mix2_h_48_16_8bpp_avx: 64.6 ( 2.65x) vp9_loop_filter_mix2_h_84_16_8bpp_c: 177.6 vp9_loop_filter_mix2_h_84_16_8bpp_sse2: 70.5 ( 2.51x) vp9_loop_filter_mix2_h_84_16_8bpp_ssse3: 66.8 ( 2.65x) vp9_loop_filter_mix2_h_84_16_8bpp_avx: 66.3 ( 2.68x) vp9_loop_filter_mix2_h_88_16_8bpp_c: 185.6 vp9_loop_filter_mix2_h_88_16_8bpp_sse2: 72.1 ( 2.50x) vp9_loop_filter_mix2_h_88_16_8bpp_ssse3: 70.7 ( 2.54x) vp9_loop_filter_mix2_h_88_16_8bpp_avx: 65.5 ( 2.83x) vp9_loop_filter_mix2_v_44_16_8bpp_c: 175.9 vp9_loop_filter_mix2_v_44_16_8bpp_sse2: 19.2 ( 9.17x) vp9_loop_filter_mix2_v_44_16_8bpp_ssse3: 19.2 ( 9.16x) vp9_loop_filter_mix2_v_44_16_8bpp_avx: 19.1 ( 9.18x) vp9_loop_filter_mix2_v_48_16_8bpp_c: 186.9 vp9_loop_filter_mix2_v_48_16_8bpp_sse2: 49.6 ( 3.73x) vp9_loop_filter_mix2_v_48_16_8bpp_ssse3: 47.7 ( 3.89x) vp9_loop_filter_mix2_v_48_16_8bpp_avx: 43.6 ( 4.28x) vp9_loop_filter_mix2_v_84_16_8bpp_c: 189.1 vp9_loop_filter_mix2_v_84_16_8bpp_sse2: 45.8 ( 4.12x) vp9_loop_filter_mix2_v_84_16_8bpp_ssse3: 46.6 ( 4.05x) vp9_loop_filter_mix2_v_84_16_8bpp_avx: 43.0 ( 4.27x) vp9_loop_filter_mix2_v_88_16_8bpp_c: 198.6 vp9_loop_filter_mix2_v_88_16_8bpp_sse2: 43.5 ( 4.57x) vp9_loop_filter_mix2_v_88_16_8bpp_ssse3: 43.3 ( 4.57x) vp9_loop_filter_mix2_v_88_16_8bpp_avx: 43.0 ( 4.62x) vp9_loop_filter_v_4_8_8bpp_c: 83.2 vp9_loop_filter_v_4_8_8bpp_mmxext: 21.8 ( 3.81x) vp9_loop_filter_v_8_8_8bpp_c: 92.3 vp9_loop_filter_v_8_8_8bpp_mmxext: 51.5 ( 1.79x) vp9_loop_filter_v_16_8_8bpp_c: 155.6 vp9_loop_filter_v_16_16_8bpp_c: 290.3 vp9_loop_filter_v_16_16_8bpp_sse2: 105.1 ( 2.68x) vp9_loop_filter_v_16_16_8bpp_ssse3: 103.8 ( 2.72x) vp9_loop_filter_v_16_16_8bpp_avx: 97.7 ( 2.86x) Signed-off-by: Andreas Rheinhardt <[email protected]> --- libavcodec/x86/vp9lpf.asm | 51 +++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/libavcodec/x86/vp9lpf.asm b/libavcodec/x86/vp9lpf.asm index e4366e8713..13a3530b19 100644 --- a/libavcodec/x86/vp9lpf.asm +++ b/libavcodec/x86/vp9lpf.asm @@ -232,27 +232,18 @@ SECTION .text psubb %2, %3 %endmacro -%macro EXTRACT_POS_NEG 3 ; i8, neg, pos - pxor %3, %3 - pxor %2, %2 - pcmpgtb %3, %1 ; i8 < 0 mask - psubb %2, %1 ; neg values (only the originally - will be kept) - pand %2, %3 ; negative values of i8 (but stored as +) - pandn %3, %1 ; positive values of i8 -%endmacro - -; clip_u8(u8 + i8) -%macro SIGN_ADD 4 ; dst, u8, i8, tmp1 - EXTRACT_POS_NEG %3, %4, %1 - paddusb %1, %2 ; add the positives - psubusb %1, %4 ; sub the negatives -%endmacro - -; clip_u8(u8 - i8) -%macro SIGN_SUB 4 ; dst, u8, i8, tmp1 - EXTRACT_POS_NEG %3, %1, %4 - paddusb %1, %2 ; add the negatives - psubusb %1, %4 ; sub the positives +%macro ADD_SUB_CLIP 8; dst0, dst1, u8_0, u8_1, i8_0, i8_1, pb_80, tmp + pxor m%8, %7, %3 + paddsb m%1, m%5, m%8 + pxor m%8, %7, %4 +%if avx_enabled + psubsb m%2, m%8, m%6 +%else + psubsb m%8, m%6 + SWAP %2, %8 +%endif + pxor m%1, %7 + pxor m%2, %7 %endmacro %macro FILTER6_INIT 4 ; %1=dst %2=h/l %3=cache, %4=stack_off @@ -808,20 +799,18 @@ cglobal vp9_loop_filter_%1_%2_ %+ mmsize, 2, 6, 16, %3 + %4 + %%ext, dst, stride paddsb m5, [pb_3] ; m5: f2 = clip(f + 3, 127) SRSHIFT3B_2X m6, m5, m7 ; f1 and f2 sign byte shift by 3 pandn m0, m6 ; hev ? 0 : f1 - SIGN_SUB m7, rq0, m6, m1 ; m7 = q0 - f1 - SIGN_ADD m6, rp0, m5, m1 ; m6 = p0 + f2 - mova [Q0], m7 - mova [P0], m6 + ADD_SUB_CLIP 5, 6, rp0, rq0, 5, 6, m4, 7 ; m5 = p0 + f2, m6 = q0 - f1 + mova [Q0], m6 + mova [P0], m5 pxor m0, m4 ; f1 ^ 0x80 - pxor m5, m5 - pavgb m0, m5 + pxor m7, m7 + pavgb m0, m7 psubb m0, [pb_40] ; (f1 + 1) >> 1 %if %2 == 44 || %2 == 4 - SWAP 1, 6 ; m1 = p0 - SWAP 2, 7 ; m2 = q0 + SWAP 1, 5 ; m1 = p0 + SWAP 2, 6 ; m2 = q0 %endif - SIGN_ADD m6, rp1, m0, m5 ; p1 + f - SIGN_SUB m7, rq1, m0, m5 ; q1 - f + ADD_SUB_CLIP 6, 7, rp1, rq1, 0, 0, m4, 5 ; m6 = p1 + f, m7 = q1 - f mova [P1], m6 mova [Q1], m7 _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
