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]

Reply via email to