This is an automated email from the git hooks/post-receive script.
Git pushed a commit to branch master
in repository ffmpeg.
The following commit(s) were added to refs/heads/master by this push:
new b9161b93b5 avcodec/x86/vp8dsp: convert mmx to sse2
b9161b93b5 is described below
commit b9161b93b5c88bd2f6f110bb527336af9a4c0cae
Author: Aleksander Shveikin <[email protected]>
AuthorDate: Fri Jul 17 13:53:14 2026 +0300
Commit: James Almer <[email protected]>
CommitDate: Mon Aug 10 22:05:27 2026 +0000
avcodec/x86/vp8dsp: convert mmx to sse2
This patch converts ff_vp8_idct_dc_add4uv_mmx to ff_vp8_idct_dc_add4uv_sse2.
Here are the checkasm benchmark results:
vp8_idct_dc_add4uv_c: 359.9
vp8_idct_dc_add4uv_mmx: 59.7 ( 6.02x)
vp8_idct_dc_add4uv_sse2: 21.1 (17.06x)
Signed-off-by: Aleksander Shveikin <[email protected]>
---
libavcodec/x86/vp8dsp.asm | 36 +++++++++++++++++-------------------
libavcodec/x86/vp8dsp_init.c | 7 ++-----
2 files changed, 19 insertions(+), 24 deletions(-)
diff --git a/libavcodec/x86/vp8dsp.asm b/libavcodec/x86/vp8dsp.asm
index 22356f687b..f53fda0ae1 100644
--- a/libavcodec/x86/vp8dsp.asm
+++ b/libavcodec/x86/vp8dsp.asm
@@ -937,42 +937,40 @@ cglobal vp8_idct_dc_add4y, 3, 3, 6, dst, block, stride
; void ff_vp8_idct_dc_add4uv_<opt>(uint8_t *dst, int16_t block[4][16],
ptrdiff_t stride);
;-----------------------------------------------------------------------------
-INIT_MMX mmx
-cglobal vp8_idct_dc_add4uv, 3, 3, 0, dst, block, stride
+INIT_XMM sse2
+cglobal vp8_idct_dc_add4uv, 3, 3, 6, dst, block, stride
; load data
movd m0, [blockq+32*0] ; A
movd m1, [blockq+32*2] ; C
punpcklwd m0, [blockq+32*1] ; A B
punpcklwd m1, [blockq+32*3] ; C D
punpckldq m0, m1 ; A B C D
- pxor m6, m6
+ pxor m1, m1
; calculate DC
paddw m0, [pw_4]
- movd [blockq+32*0], m6
- movd [blockq+32*1], m6
- movd [blockq+32*2], m6
- movd [blockq+32*3], m6
+ movd [blockq+32*0], m1
+ movd [blockq+32*1], m1
+ movd [blockq+32*2], m1
+ movd [blockq+32*3], m1
psraw m0, 3
- psubw m6, m0
+ psubw m1, m0
packuswb m0, m0
- packuswb m6, m6
- punpcklbw m0, m0 ; AABBCCDD
- punpcklbw m6, m6 ; AABBCCDD
- movq m1, m0
- movq m7, m6
- punpcklbw m0, m0 ; AAAABBBB
- punpckhbw m1, m1 ; CCCCDDDD
- punpcklbw m6, m6 ; AAAABBBB
- punpckhbw m7, m7 ; CCCCDDDD
+ packuswb m1, m1
+ punpcklbw m0, m0
+ punpcklbw m1, m1
+ punpcklbw m0, m0
+ punpcklbw m1, m1
; add DC
DEFINE_ARGS dst1, dst2, stride
lea dst2q, [dst1q+strideq*2]
- ADD_DC m0, m6, 0, mova
+ ADD_DC m0, m1, 0, movh
lea dst1q, [dst1q+strideq*4]
lea dst2q, [dst2q+strideq*4]
- ADD_DC m1, m7, 0, mova
+ psrldq m0, 8
+ psrldq m1, 8
+ ADD_DC m0, m1, 0, movh
RET
;-----------------------------------------------------------------------------
diff --git a/libavcodec/x86/vp8dsp_init.c b/libavcodec/x86/vp8dsp_init.c
index 828b038cdf..ded136d186 100644
--- a/libavcodec/x86/vp8dsp_init.c
+++ b/libavcodec/x86/vp8dsp_init.c
@@ -169,7 +169,7 @@ void ff_vp8_idct_dc_add_sse4(uint8_t *dst, int16_t
block[16],
ptrdiff_t stride);
void ff_vp8_idct_dc_add4y_sse2(uint8_t *dst, int16_t block[4][16],
ptrdiff_t stride);
-void ff_vp8_idct_dc_add4uv_mmx(uint8_t *dst, int16_t block[2][16],
+void ff_vp8_idct_dc_add4uv_sse2(uint8_t *dst, int16_t block[4][16],
ptrdiff_t stride);
void ff_vp8_luma_dc_wht_sse(int16_t block[4][4][16], int16_t dc[16]);
void ff_vp8_idct_add_sse(uint8_t *dst, int16_t block[16], ptrdiff_t stride);
@@ -272,10 +272,6 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext *c)
{
int cpu_flags = av_get_cpu_flags();
- if (EXTERNAL_MMX(cpu_flags)) {
- c->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmx;
- }
-
if (EXTERNAL_SSE(cpu_flags)) {
c->vp8_idct_add = ff_vp8_idct_add_sse;
c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_sse;
@@ -294,6 +290,7 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext *c)
if (EXTERNAL_SSE2(cpu_flags)) {
c->vp8_idct_dc_add = ff_vp8_idct_dc_add_sse2;
c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_sse2;
+ c->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_sse2;
c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse2;
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]