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

Git pushed a commit to branch master
in repository ffmpeg.

commit 607862dd6685f53bdb26b6c92e4d04057d1c18f8
Author:     Zuxy Meng <[email protected]>
AuthorDate: Mon Apr 27 22:40:15 2026 -0700
Commit:     Zuxy Meng <[email protected]>
CommitDate: Fri Jul 24 19:16:45 2026 -0700

    avcodec/x86/h264_intrapred: SSE2 impl. of pred8x8l_vertical_8
    
    Deprecate MMX. Remove the SSSE3 impl. since we no longer use palignr.
    
    pred8x8l_vertical_8_mmxext:                              7.4 ( 3.61x)
    pred8x8l_vertical_8_ssse3:                               6.6 ( 4.03x)
    pred8x8l_vertical_8_sse2:                                6.3 ( 4.19x)
    
    Signed-off-by: Zuxy Meng <[email protected]>
---
 libavcodec/x86/h264_intrapred.asm    | 58 ++++++++++++++----------------------
 libavcodec/x86/h264_intrapred_init.c |  6 ++--
 2 files changed, 24 insertions(+), 40 deletions(-)

diff --git a/libavcodec/x86/h264_intrapred.asm 
b/libavcodec/x86/h264_intrapred.asm
index 6dc941eb02..841ee9255e 100644
--- a/libavcodec/x86/h264_intrapred.asm
+++ b/libavcodec/x86/h264_intrapred.asm
@@ -1030,51 +1030,37 @@ PRED8x8L_HORIZONTAL
 ;                             ptrdiff_t stride)
 ;-----------------------------------------------------------------------------
 
-%macro PRED8x8L_VERTICAL 0
-cglobal pred8x8l_vertical_8, 4,4
+INIT_XMM sse2
+cglobal pred8x8l_vertical_8, 4,4,5
     sub          r0, r3
-    movq        mm0, [r0-8]
-    movq        mm3, [r0]
-    movq        mm1, [r0+8]
-    movq        mm2, mm3
-    movq        mm4, mm3
-    PALIGNR     mm2, mm0, 7, mm0
-    PALIGNR     mm1, mm4, 1, mm4
+    movu         m2, [r0-8]
+    movu         m3, [r0]
+    mova         m1, m3
+    psrldq       m2, 7
+    psrldq       m1, 1
     test        r1d, r1d ; top_left
-    jz .fix_lt_2
-    test        r2d, r2d ; top_right
-    jz .fix_tr_1
-    jmp .body
-.fix_lt_2:
-    movq        mm5, mm3
-    pxor        mm5, mm2
-    psllq       mm5, 56
-    psrlq       mm5, 56
-    pxor        mm2, mm5
+    jnz .check_tr
+    pxor         m4, m3, m2
+    psllq        m4, 56
+    psrlq        m4, 56
+    pxor         m2, m4
+.check_tr:
     test        r2d, r2d ; top_right
     jnz .body
-.fix_tr_1:
-    movq        mm5, mm3
-    pxor        mm5, mm1
-    psrlq       mm5, 56
-    psllq       mm5, 56
-    pxor        mm1, mm5
+    pxor         m4, m3, m1
+    psrlq        m4, 56
+    psllq        m4, 56
+    pxor         m1, m4
 .body:
-    PRED4x4_LOWPASS mm3, mm2, mm1, mm3, mm5
+    PRED4x4_LOWPASS m3, m2, m1, m3, m4
 %rep 3
-    movq [r0+r3*1], mm3
-    movq [r0+r3*2], mm3
+    movq  [r0+r3*1], m3
+    movq  [r0+r3*2], m3
     lea    r0, [r0+r3*2]
 %endrep
-    movq [r0+r3*1], mm3
-    movq [r0+r3*2], mm3
+    movq  [r0+r3*1], m3
+    movq  [r0+r3*2], m3
     RET
-%endmacro
-
-INIT_MMX mmxext
-PRED8x8L_VERTICAL
-INIT_MMX ssse3
-PRED8x8L_VERTICAL
 
 ;-----------------------------------------------------------------------------
 ; void ff_pred8x8l_down_left_8(uint8_t *src, int has_topleft,
diff --git a/libavcodec/x86/h264_intrapred_init.c 
b/libavcodec/x86/h264_intrapred_init.c
index ebcbe0891d..5cc83d17c7 100644
--- a/libavcodec/x86/h264_intrapred_init.c
+++ b/libavcodec/x86/h264_intrapred_init.c
@@ -130,8 +130,7 @@ PRED8x8L(top_dc, 8, sse2)
 PRED8x8L(dc, 8, sse2)
 PRED8x8L(horizontal, 8, mmxext)
 PRED8x8L(horizontal, 8, ssse3)
-PRED8x8L(vertical, 8, mmxext)
-PRED8x8L(vertical, 8, ssse3)
+PRED8x8L(vertical, 8, sse2)
 PRED8x8L(down_left, 8, sse2)
 PRED8x8L(down_left, 8, ssse3)
 PRED8x8L(down_right, 8, sse2)
@@ -165,7 +164,6 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int 
codec_id,
     if (bit_depth == 8) {
         if (EXTERNAL_MMXEXT(cpu_flags)) {
             h->pred8x8l [HOR_PRED               ] = 
ff_pred8x8l_horizontal_8_mmxext;
-            h->pred8x8l [VERT_PRED              ] = 
ff_pred8x8l_vertical_8_mmxext;
             h->pred8x8l [HOR_UP_PRED            ] = 
ff_pred8x8l_horizontal_up_8_mmxext;
             h->pred4x4  [DIAG_DOWN_RIGHT_PRED   ] = 
ff_pred4x4_down_right_8_mmxext;
             h->pred4x4  [VERT_RIGHT_PRED        ] = 
ff_pred4x4_vertical_right_8_mmxext;
@@ -197,6 +195,7 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int 
codec_id,
             h->pred16x16[DC_PRED8x8           ] = ff_pred16x16_dc_8_sse2;
             h->pred8x8l [DC_PRED              ] = ff_pred8x8l_dc_8_sse2;
             h->pred8x8l [TOP_DC_PRED          ] = ff_pred8x8l_top_dc_8_sse2;
+            h->pred8x8l [VERT_PRED            ] = ff_pred8x8l_vertical_8_sse2;
             h->pred8x8l [DIAG_DOWN_LEFT_PRED  ] = ff_pred8x8l_down_left_8_sse2;
             h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = 
ff_pred8x8l_down_right_8_sse2;
             h->pred8x8l [VERT_RIGHT_PRED      ] = 
ff_pred8x8l_vertical_right_8_sse2;
@@ -232,7 +231,6 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int 
codec_id,
             if (chroma_format_idc <= 1)
                 h->pred8x8  [HOR_PRED8x8      ] = 
ff_pred8x8_horizontal_8_ssse3;
             h->pred8x8l [HOR_PRED             ] = 
ff_pred8x8l_horizontal_8_ssse3;
-            h->pred8x8l [VERT_PRED            ] = ff_pred8x8l_vertical_8_ssse3;
             h->pred8x8l [DIAG_DOWN_LEFT_PRED  ] = 
ff_pred8x8l_down_left_8_ssse3;
             h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = 
ff_pred8x8l_down_right_8_ssse3;
             h->pred8x8l [VERT_RIGHT_PRED      ] = 
ff_pred8x8l_vertical_right_8_ssse3;

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to