This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 9419d4c3a5a92563720115beb8831a6f906da96b
Author:     Andreas Rheinhardt <[email protected]>
AuthorDate: Thu Aug 20 17:52:07 2026 +0200
Commit:     Andreas Rheinhardt <[email protected]>
CommitDate: Sun Aug 23 17:10:58 2026 +0200

    avcodec/x86/h264_deblock: Don't use mmx in deblock_h_luma_intra_8
    
    Old benchmarks:
      h_loop_filter_luma_intra_8bpp_c:        26.3
      h_loop_filter_luma_intra_8bpp_sse2:     57.4 ( 0.46x)
      h_loop_filter_luma_intra_8bpp_avx:      57.6 ( 0.46x)
    
    New benchmarks:
      h_loop_filter_luma_intra_8bpp_c:        26.5
      h_loop_filter_luma_intra_8bpp_sse2:     52.2 ( 0.51x)
      h_loop_filter_luma_intra_8bpp_avx:      52.3 ( 0.51x)
    
    Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavcodec/x86/h264_deblock.asm | 92 ++++++++++++++++++++++-------------------
 tests/checkasm/h264dsp.c        |  4 +-
 2 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/libavcodec/x86/h264_deblock.asm b/libavcodec/x86/h264_deblock.asm
index 961cf84a0c..b47d84effb 100644
--- a/libavcodec/x86/h264_deblock.asm
+++ b/libavcodec/x86/h264_deblock.asm
@@ -96,43 +96,6 @@ cextern pb_3
     RESET_MM_PERMUTATION
 %endmacro
 
-; in: 8 rows of 8 in %1..%8
-; out: 8 rows of 8 in %9..%16
-%macro TRANSPOSE8x8_MEM 16
-    RESET_MM_PERMUTATION
-    movq  m0, %1
-    movq  m1, %2
-    movq  m2, %3
-    movq  m3, %4
-    movq  m4, %5
-    movq  m5, %6
-    movq  m6, %7
-    SBUTTERFLY bw, 0, 1, 7
-    SBUTTERFLY bw, 2, 3, 7
-    SBUTTERFLY bw, 4, 5, 7
-    SBUTTERFLY3 bw, m6, %8, m7
-    movq  %9,  m5
-    SBUTTERFLY wd, 0, 2, 5
-    SBUTTERFLY wd, 4, 6, 5
-    SBUTTERFLY wd, 1, 3, 5
-    movq  %11, m6
-    movq  m6,  %9
-    SBUTTERFLY wd, 6, 7, 5
-    SBUTTERFLY dq, 0, 4, 5
-    SBUTTERFLY dq, 1, 6, 5
-    movq  %9,  m0
-    movq  %10, m4
-    movq  %13, m1
-    movq  %14, m6
-    SBUTTERFLY3 dq, m2, %11, m0
-    SBUTTERFLY dq, 3, 7, 4
-    movq  %11, m2
-    movq  %12, m0
-    movq  %15, m3
-    movq  %16, m7
-    RESET_MM_PERMUTATION
-%endmacro
-
 ; out: %4 = |%1-%2|>%3
 ; clobbers: %5
 %macro DIFF_GT 5
@@ -846,12 +809,57 @@ cglobal deblock_h_luma_intra_8, 2,4,8,0x80, pix, stride, 
pix3, stride3
     sub             pixd,  4
     lea            pix3d,  [pixd+stride3d]
 %endif
-INIT_MMX cpuname
-    ; transpose 16x6 -> original space (but we can't write only 6 pixels, so 
really 16x8)
-    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp,   pix_tmp+0x30, 0x10, 0x30), 
PASS8ROWS(pixq, pix3q, strideq, stride3q)
-    lea             pixq, [pixq +8*strideq]
+    RESET_MM_PERMUTATION
+    mova              m0, [pix_tmp]
+    mova              m1, [pix_tmp+16]
+    mova              m2, [pix_tmp+32]
+    mova              m3, [pix_tmp+48]
+    SBUTTERFLY        bw, 0, 1, 7
+    mova              m4, [pix_tmp+64]
+    mova              m5, [pix_tmp+80]
+    SBUTTERFLY        bw, 2, 3, 7
+    mova              m6, [pix_tmp+96]
+    SBUTTERFLY        wd, 0, 2, 7
+%if ARCH_X86_64
+    mova              m8, [pix_tmp+112]
+%endif
+    SBUTTERFLY        wd, 1, 3, 7
+    SBUTTERFLY        bw, 4, 5, 7
+%if ARCH_X86_64
+    SBUTTERFLY        bw, 6, 8, 7
+%else
+    punpcklbw         m6, [pix_tmp+112]
+%endif
+    SBUTTERFLY        wd, 4, 6, 7
+    SBUTTERFLY        dq, 0, 4, 7
+    movq          [pixq], m0
+    movhps [pixq+strideq], m0
+%if ARCH_X86_64
+    SWAP               0, 8
+%else
+    mova              m0, [pix_tmp+96]
+    punpckhbw         m0, [pix_tmp+112]
+%endif
+    SBUTTERFLY        dq, 2, 6, 7
+    movq [pixq+2*strideq], m4
+    movhps       [pix3q], m4
+    SBUTTERFLY        wd, 5, 0, 7
+    movq [pix3q+strideq], m2
+    movhps [pix3q+2*strideq], m2
+    lea             pixq, [pixq+8*strideq]
+    SBUTTERFLY        dq, 1, 5, 7
+    movq [pix3q+stride3q], m6
+    movhps [pix3q+4*strideq], m6
     lea            pix3q, [pix3q+8*strideq]
-    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp+8, pix_tmp+0x38, 0x10, 0x30), 
PASS8ROWS(pixq, pix3q, strideq, stride3q)
+    SBUTTERFLY        dq, 3, 0, 7
+    movq          [pixq], m1
+    movhps [pixq+strideq], m1
+    movq [pixq+2*strideq], m5
+    movhps       [pix3q], m5
+    movq [pix3q+strideq], m3
+    movhps [pix3q+2*strideq], m3
+    movq [pix3q+stride3q], m0
+    movhps [pix3q+4*strideq], m0
     RET
 %endmacro ; DEBLOCK_LUMA_INTRA
 
diff --git a/tests/checkasm/h264dsp.c b/tests/checkasm/h264dsp.c
index 9fbb24d2d3..680fd91576 100644
--- a/tests/checkasm/h264dsp.c
+++ b/tests/checkasm/h264dsp.c
@@ -451,8 +451,8 @@ static void check_loop_filter_intra(void)
     int bit_depth;
     int alphas[N], betas[N];
 
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *pix, ptrdiff_t stride,
-                      int alpha, int beta);
+    declare_func(void, uint8_t *pix, ptrdiff_t stride,
+                       int alpha, int beta);
 
     for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
         uint32_t mask = pixel_mask_lf[bit_depth - 8];

-- 
To stop receiving notification emails like this one, please contact
[email protected].
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to