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

Git pushed a commit to branch master
in repository ffmpeg.

commit d03788af83260044c6ef0e21a1c24245920cb5c4
Author:     Zuxy Meng <[email protected]>
AuthorDate: Fri May 29 22:28:24 2026 -0700
Commit:     Zuxy Meng <[email protected]>
CommitDate: Fri Jul 24 19:16:45 2026 -0700

    avcodec/x86/h264_intrapred: Deprecate MMX from pred8x8l_down_right_8
    
    Convert use of MMX to SSE2, also remove the SSSE3 impl. since we no
    longer use palignr
    
    Before:
     pred8x8l_down_right_8_sse2:                             26.4 ( 3.26x)
     pred8x8l_down_right_8_ssse3:                            23.0 ( 3.74x)
    
    After:
     pred8x8l_down_right_8_sse2:                             19.7 ( 4.33x)
    
    Signed-off-by: Zuxy Meng <[email protected]>
---
 libavcodec/x86/h264_intrapred.asm    | 146 ++++++++++++++++-------------------
 libavcodec/x86/h264_intrapred_init.c |   2 -
 2 files changed, 66 insertions(+), 82 deletions(-)

diff --git a/libavcodec/x86/h264_intrapred.asm 
b/libavcodec/x86/h264_intrapred.asm
index 88abb7f8f2..e60c1aa474 100644
--- a/libavcodec/x86/h264_intrapred.asm
+++ b/libavcodec/x86/h264_intrapred.asm
@@ -1158,99 +1158,91 @@ PRED8x8L_DOWN_LEFT
 ;                               int has_topright, ptrdiff_t stride)
 ;-----------------------------------------------------------------------------
 
-%macro PRED8x8L_DOWN_RIGHT 0
-cglobal pred8x8l_down_right_8, 4,5
+INIT_XMM sse2
+cglobal pred8x8l_down_right_8, 4,5,7
     sub          r0, r3
     lea          r4, [r0+r3*2]
-    movq        mm0, [r0+r3*1-8]
-    punpckhbw   mm0, [r0+r3*0-8]
-    movq        mm1, [r4+r3*1-8]
-    punpckhbw   mm1, [r0+r3*2-8]
+    movd       xmm0, [r0+r3*1-4]
+    movd       xmm4, [r0+r3*0-4]
+    punpcklbw  xmm0, xmm4
+    movd       xmm1, [r4+r3*1-4]
+    movd       xmm4, [r0+r3*2-4]
+    punpcklbw  xmm1, xmm4
     mov          r4, r0
-    punpckhwd   mm1, mm0
+    punpcklwd  xmm1, xmm0
     lea          r0, [r0+r3*4]
-    movq        mm2, [r0+r3*1-8]
-    punpckhbw   mm2, [r0+r3*0-8]
+    movd       xmm2, [r0+r3*1-4]
+    movd       xmm4, [r0+r3*0-4]
+    punpcklbw  xmm2, xmm4
     lea          r0, [r0+r3*2]
-    movq        mm3, [r0+r3*1-8]
-    punpckhbw   mm3, [r0+r3*0-8]
-    punpckhwd   mm3, mm2
-    punpckhdq   mm3, mm1
+    movd       xmm3, [r0+r3*1-4]
+    movd       xmm4, [r0+r3*0-4]
+    punpcklbw  xmm3, xmm4
+    punpcklwd  xmm3, xmm2
+    punpckhdq  xmm3, xmm1
+    pshufd     xmm3, xmm3, 0xee
     lea          r0, [r0+r3*2]
-    movq        mm0, [r0+r3*0-8]
-    movq        mm1, [r4]
+    movq       xmm0, [r0+r3*0-8]
+    movq       xmm1, [r4]
     mov          r0, r4
-    movq        mm4, mm3
-    movq        mm2, mm3
-    PALIGNR     mm4, mm0, 7, mm0
-    PALIGNR     mm1, mm2, 1, mm2
+    mova       xmm2, xmm3
+    punpcklqdq xmm0, xmm3
+    psrldq     xmm4, xmm0, 7
+    punpcklqdq xmm2, xmm1
+    psrldq     xmm1, xmm2, 1
     test        r1d, r1d
-    jz .fix_lt_1
-    jmp .do_left
+    jnz .do_left
 .fix_lt_1:
-    movq        mm5, mm3
-    pxor        mm5, mm4
-    psrlq       mm5, 56
-    psllq       mm5, 48
-    pxor        mm1, mm5
-    jmp .do_left
+    pxor       xmm5, xmm3, xmm4
+    psrlq      xmm5, 56
+    psllq      xmm5, 48
+    pxor       xmm1, xmm5
+.do_left:
+    mova       xmm0, xmm4
+    PRED4x4_LOWPASS xmm2, xmm1, xmm4, xmm3, xmm5
+    mova       xmm4, xmm0
+    movq       xmm6, xmm2
+    PRED4x4_LOWPASS xmm1, xmm3, xmm0, xmm4, xmm5
+    psllq      xmm1, 56
+    punpcklqdq xmm1, xmm2
+    psrldq     xmm1, 7
+    mova       xmm0, xmm1
+    movu       xmm2, [r0-8]
+    movu       xmm1, [r0]
+    mova       xmm3, xmm1
+    psrldq     xmm2, 7
+    psrldq     xmm1, 1
+    jnz .check_tr
 .fix_lt_2:
-    movq        mm5, mm3
-    pxor        mm5, mm2
-    psllq       mm5, 56
-    psrlq       mm5, 56
-    pxor        mm2, mm5
+    pxor       xmm5, xmm3, xmm2
+    psllq      xmm5, 56
+    psrlq      xmm5, 56
+    pxor       xmm2, xmm5
+.check_tr:
     test        r2d, r2d
     jnz .do_top
 .fix_tr_1:
-    movq        mm5, mm3
-    pxor        mm5, mm1
-    psrlq       mm5, 56
-    psllq       mm5, 56
-    pxor        mm1, mm5
-    jmp .do_top
-.do_left:
-    movq        mm0, mm4
-    PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5
-    movq        mm1, mm0
-    movq        mm7, mm2
-    movq2dq    xmm3, mm2
-    PRED4x4_LOWPASS mm1, mm3, mm0, mm1, mm5
-    psllq       mm1, 56
-    PALIGNR     mm7, mm1, 7, mm3
-    movq2dq    xmm1, mm7
-    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
-    test        r1d, r1d
-    jz .fix_lt_2
-    test        r2d, r2d
-    jz .fix_tr_1
+    pxor       xmm5, xmm3, xmm1
+    psrlq      xmm5, 56
+    psllq      xmm5, 56
+    pxor       xmm1, xmm5
 .do_top:
-    PRED4x4_LOWPASS mm3, mm2, mm1, mm3, mm5
-    movq2dq   xmm4, mm3
+    PRED4x4_LOWPASS xmm4, xmm2, xmm1, xmm3, xmm5
     lea         r1, [r0+r3*2]
-    movdqa    xmm0, xmm3
+    movdqa    xmm1, xmm6
     pslldq    xmm4, 8
-    por       xmm3, xmm4
+    por       xmm6, xmm4
     lea         r2, [r1+r3*2]
     pslldq    xmm4, 1
-    por       xmm1, xmm4
-    psrldq    xmm0, 7
-    pslldq    xmm0, 15
-    psrldq    xmm0, 7
-    por       xmm1, xmm0
+    por       xmm0, xmm4
+    psrldq    xmm1, 7
+    pslldq    xmm1, 15
+    psrldq    xmm1, 7
+    por       xmm0, xmm1
     lea         r0, [r2+r3*2]
-    movdqa    xmm2, xmm3
-    psrldq    xmm2, 1
-INIT_XMM cpuname
-    PRED4x4_LOWPASS xmm3, xmm1, xmm2, xmm3, xmm4
-    movdqa    xmm1, xmm3
-    psrldq    xmm1, 1
+    psrldq    xmm2, xmm6, 1
+    PRED4x4_LOWPASS xmm3, xmm0, xmm2, xmm6, xmm4
+    psrldq    xmm1, xmm3, 1
     movq [r0+r3*2], xmm3
     movq [r0+r3*1], xmm1
     psrldq    xmm3, 2
@@ -1266,12 +1258,6 @@ INIT_XMM cpuname
     movq [r4+r3*2], xmm3
     movq [r4+r3*1], xmm1
     RET
-%endmacro
-
-INIT_MMX sse2
-PRED8x8L_DOWN_RIGHT
-INIT_MMX ssse3
-PRED8x8L_DOWN_RIGHT
 
 ;-----------------------------------------------------------------------------
 ; void ff_pred8x8l_vertical_right_8(uint8_t *src, int has_topleft,
diff --git a/libavcodec/x86/h264_intrapred_init.c 
b/libavcodec/x86/h264_intrapred_init.c
index 027746a8f9..486ae0fe1b 100644
--- a/libavcodec/x86/h264_intrapred_init.c
+++ b/libavcodec/x86/h264_intrapred_init.c
@@ -133,7 +133,6 @@ PRED8x8L(vertical, 8, sse2)
 PRED8x8L(down_left, 8, sse2)
 PRED8x8L(down_left, 8, ssse3)
 PRED8x8L(down_right, 8, sse2)
-PRED8x8L(down_right, 8, ssse3)
 PRED8x8L(vertical_right, 8, sse2)
 PRED8x8L(vertical_right, 8, ssse3)
 PRED8x8L(vertical_left, 8, sse2)
@@ -229,7 +228,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 [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;
             h->pred8x8l [VERT_LEFT_PRED       ] = 
ff_pred8x8l_vertical_left_8_ssse3;
             h->pred8x8l [HOR_DOWN_PRED        ] = 
ff_pred8x8l_horizontal_down_8_ssse3;

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

Reply via email to