On Sun, Apr 12, 2026 at 6:14 PM Zuxy Meng <[email protected]> wrote: > > Deprecating MMX w/o performance regression; nearly identical performance > numbers on my Zen 4 (1.99x vs c) > > Signed-off-by: Zuxy Meng <[email protected]> > --- > v1 -> v2: avoid callee saved registers on Win64 > > libavcodec/x86/h264_intrapred.asm | 30 +++++++++++++--------------- > libavcodec/x86/h264_intrapred_init.c | 8 ++------ > 2 files changed, 16 insertions(+), 22 deletions(-) > > diff --git a/libavcodec/x86/h264_intrapred.asm > b/libavcodec/x86/h264_intrapred.asm > index 2e4a46ae76..b1c5ffa50d 100644 > --- a/libavcodec/x86/h264_intrapred.asm > +++ b/libavcodec/x86/h264_intrapred.asm > @@ -634,18 +634,18 @@ cglobal pred8x8_top_dc_8, 2,5 > RET > > > ;----------------------------------------------------------------------------- > -; void ff_pred8x8_dc_8_mmxext(uint8_t *src, ptrdiff_t stride) > +; void ff_pred8x8_dc_8_sse2(uint8_t *src, ptrdiff_t stride) > > ;----------------------------------------------------------------------------- > > -INIT_MMX mmxext > -cglobal pred8x8_dc_8, 2,5 > +INIT_XMM sse2 > +cglobal pred8x8_dc_8, 2,5,5 > sub r0, r1 > - pxor m7, m7 > + pxor m4, m4 > movd m0, [r0+0] > movd m1, [r0+4] > - psadbw m0, m7 ; s0 > + psadbw m0, m4 ; s0 > mov r4, r0 > - psadbw m1, m7 ; s1 > + psadbw m1, m4 ; s1 > > movzx r2d, byte [r0+r1*1-1] > movzx r3d, byte [r0+r1*2-1] > @@ -671,27 +671,25 @@ cglobal pred8x8_dc_8, 2,5 > mov r0, r4 > punpcklwd m2, m3 > punpckldq m0, m2 ; s0, s1, s2, s3 > - pshufw m3, m0, 11110110b ; s2, s1, s3, s3 > + pshuflw m3, m0, 11110110b ; s2, s1, s3, s3 > lea r2, [r0+r1*2] > - pshufw m0, m0, 01110100b ; s0, s1, s3, s1 > + pshuflw m0, m0, 01110100b ; s0, s1, s3, s1 > paddw m0, m3 > lea r3, [r2+r1*2] > psrlw m0, 2 > - pavgw m0, m7 ; s0+s2, s1, s3, s1+s3 > + pavgw m0, m4 ; s0+s2, s1, s3, s1+s3 > lea r4, [r3+r1*2] > packuswb m0, m0 > punpcklbw m0, m0 > - movq m1, m0 > - punpcklbw m0, m0 > - punpckhbw m1, m1 > + punpcklwd m0, m0 > movq [r0+r1*1], m0 > movq [r0+r1*2], m0 > movq [r2+r1*1], m0 > movq [r2+r1*2], m0 > - movq [r3+r1*1], m1 > - movq [r3+r1*2], m1 > - movq [r4+r1*1], m1 > - movq [r4+r1*2], m1 > + movhps [r3+r1*1], m0 > + movhps [r3+r1*2], m0 > + movhps [r4+r1*1], m0 > + movhps [r4+r1*2], m0 > RET > > > ;----------------------------------------------------------------------------- > diff --git a/libavcodec/x86/h264_intrapred_init.c > b/libavcodec/x86/h264_intrapred_init.c > index 0476980a57..44dd0cbde4 100644 > --- a/libavcodec/x86/h264_intrapred_init.c > +++ b/libavcodec/x86/h264_intrapred_init.c > @@ -115,7 +115,7 @@ PRED16x16(tm_vp8, 8, avx2) > > PRED8x8(top_dc, 8, sse2) > PRED8x8(dc_rv40, 8, mmxext) > -PRED8x8(dc, 8, mmxext) > +PRED8x8(dc, 8, sse2) > PRED8x8(vertical, 8, sse2) > PRED8x8(horizontal, 8, mmxext) > PRED8x8(horizontal, 8, ssse3) > @@ -185,11 +185,6 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, > int codec_id, > if (codec_id != AV_CODEC_ID_RV40) { > h->pred4x4 [HOR_UP_PRED ] = > ff_pred4x4_horizontal_up_8_mmxext; > } > - if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == > AV_CODEC_ID_H264) { > - if (chroma_format_idc <= 1) { > - h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_8_mmxext; > - } > - } > if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { > h->pred8x8 [DC_PRED8x8 ] = > ff_pred8x8_dc_rv40_8_mmxext; > h->pred4x4 [TM_VP8_PRED ] = > ff_pred4x4_tm_vp8_8_mmxext; > @@ -213,6 +208,7 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, > int codec_id, > h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_sse2; > if (codec_id == AV_CODEC_ID_SVQ3 || codec_id == > AV_CODEC_ID_H264) { > h->pred8x8 [TOP_DC_PRED8x8] = ff_pred8x8_top_dc_8_sse2; > + h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_8_sse2; > } > } > if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { > -- > 2.43.0 >
Applied. -- Zuxy Beauty is truth, While truth is beauty. PGP KeyID: E8555ED6 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
