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 5dc2dd9b9f avcodec/x86/qpel: convert 8x8_l2 from MMX to SSE2
5dc2dd9b9f is described below
commit 5dc2dd9b9f291a373015500b11136bef39cbc6c0
Author: Zuxy Meng <[email protected]>
AuthorDate: Sat Sep 5 21:24:25 2026 -0700
Commit: Zuxy Meng <[email protected]>
CommitDate: Sat Sep 12 17:41:18 2026 -0700
avcodec/x86/qpel: convert 8x8_l2 from MMX to SSE2
Convert INIT_MMX mmxext to INIT_XMM sse2 for 8x8 L2 functions
(qpel PIXELS_L2 8 and qpeldsp PUT_NO_RND_PIXELS_L2 8) which were the
last MMX in qpel.asm/qpeldsp.asm. Performance identical.
Signed-off-by: Zuxy Meng <[email protected]>
---
libavcodec/x86/h264_qpel.c | 2 --
libavcodec/x86/qpel.asm | 64 ++++++++++++++++++++++++++++---------------
libavcodec/x86/qpel.h | 12 ++++----
libavcodec/x86/qpeldsp.asm | 32 ++++++++++++----------
libavcodec/x86/qpeldsp_init.c | 12 ++++----
5 files changed, 72 insertions(+), 50 deletions(-)
diff --git a/libavcodec/x86/h264_qpel.c b/libavcodec/x86/h264_qpel.c
index 0cc653c6ca..1f01583142 100644
--- a/libavcodec/x86/h264_qpel.c
+++ b/libavcodec/x86/h264_qpel.c
@@ -39,8 +39,6 @@ void ff_avg_pixels4x4_l2_mmxext(uint8_t *dst, const uint8_t
*src1, const uint8_t
ff_put_pixels4x4_l2_mmxext((dst), (src1), (src2), (dststride))
#define ff_avg_pixels4x4_l2_mmxext(dst, src1, src2, dststride, src1stride) \
ff_avg_pixels4x4_l2_mmxext((dst), (src1), (src2), (dststride))
-#define ff_put_pixels8x8_l2_sse2 ff_put_pixels8x8_l2_mmxext
-#define ff_avg_pixels8x8_l2_sse2 ff_avg_pixels8x8_l2_mmxext
#define DEF_QPEL(OPNAME)\
void ff_ ## OPNAME ## _h264_qpel4_h_lowpass_mmxext(uint8_t *dst, const uint8_t
*src, ptrdiff_t dstStride, ptrdiff_t srcStride);\
diff --git a/libavcodec/x86/qpel.asm b/libavcodec/x86/qpel.asm
index cffab9dc91..3a1d2940a5 100644
--- a/libavcodec/x86/qpel.asm
+++ b/libavcodec/x86/qpel.asm
@@ -25,48 +25,68 @@
SECTION .text
-%macro op_avg 2
+%macro AVG8 2
+ movq m2, %2
+ pavgb %1, m2
+%endmacro
+
+%macro AVG16 2
+ pavgb %1, %2
+%endmacro
+
+%macro op_avg_8 2
+ movq m2, %2
+ pavgb %1, m2
+ movq %2, %1
+%endmacro
+
+%macro op_avg_16 2
pavgb %1, %2
mova %2, %1
%endmacro
-%macro op_put 2
+%macro op_put_8 2
+ movq %2, %1
+%endmacro
+
+%macro op_put_16 2
mova %2, %1
%endmacro
-%macro PIXELS_L2 2 ; avg vs put, size
-%define OP op_%1
-; void ff_avg/put_pixels8x8_l2_mmxext(uint8_t *dst, const uint8_t *src1, const
uint8_t *src2,
-; ptrdiff_t dstStride, ptrdiff_t
src1Stride)
-cglobal %1_pixels%2x%2_l2, 5,6,2
+%define MOV8 movq
+%define MOV16 movu
+
+%macro PIXELS_L2 3 ; avg vs put, size
+%define OP op_%1_%2
+; void ff_avg/put_pixels8x8_l2_sse2(uint8_t *dst, const uint8_t *src1, const
uint8_t *src2,
+; ptrdiff_t dstStride, ptrdiff_t src1Stride)
+cglobal %1_pixels%2x%2_l2, 5,6,%3
mov r5d, %2
.loop:
- movu m0, [r1]
- movu m1, [r1+r4]
+ MOV%2 m0, [r1]
+ MOV%2 m1, [r1+r4]
lea r1, [r1+2*r4]
- pavgb m0, [r2]
- pavgb m1, [r2+mmsize]
+ AVG%2 m0, [r2]
+ AVG%2 m1, [r2+%2]
OP m0, [r0]
OP m1, [r0+r3]
lea r0, [r0+2*r3]
- movu m0, [r1]
- movu m1, [r1+r4]
+ MOV%2 m0, [r1]
+ MOV%2 m1, [r1+r4]
lea r1, [r1+2*r4]
- pavgb m0, [r2+2*mmsize]
- pavgb m1, [r2+3*mmsize]
+ AVG%2 m0, [r2+2*%2]
+ AVG%2 m1, [r2+3*%2]
OP m0, [r0]
OP m1, [r0+r3]
lea r0, [r0+2*r3]
- add r2, 4*mmsize
+ add r2, 4*%2
sub r5d, 4
jne .loop
RET
%endmacro
-INIT_MMX mmxext
-PIXELS_L2 put, 8
-PIXELS_L2 avg, 8
-
INIT_XMM sse2
-PIXELS_L2 put, 16
-PIXELS_L2 avg, 16
+PIXELS_L2 put, 8, 3
+PIXELS_L2 avg, 8, 3
+PIXELS_L2 put, 16, 2
+PIXELS_L2 avg, 16, 2
diff --git a/libavcodec/x86/qpel.h b/libavcodec/x86/qpel.h
index b17317b64d..30030d8183 100644
--- a/libavcodec/x86/qpel.h
+++ b/libavcodec/x86/qpel.h
@@ -24,12 +24,12 @@
#include "libavutil/attributes_internal.h"
FF_VISIBILITY_PUSH_HIDDEN
-void ff_put_pixels8x8_l2_mmxext(uint8_t *dst,
- const uint8_t *src1, const uint8_t *src2,
- ptrdiff_t dstStride, ptrdiff_t src1Stride);
-void ff_avg_pixels8x8_l2_mmxext(uint8_t *dst,
- const uint8_t *src1, const uint8_t *src2,
- ptrdiff_t dstStride, ptrdiff_t src1Stride);
+void ff_put_pixels8x8_l2_sse2(uint8_t *dst,
+ const uint8_t *src1, const uint8_t *src2,
+ ptrdiff_t dstStride, ptrdiff_t src1Stride);
+void ff_avg_pixels8x8_l2_sse2(uint8_t *dst,
+ const uint8_t *src1, const uint8_t *src2,
+ ptrdiff_t dstStride, ptrdiff_t src1Stride);
void ff_put_pixels16x16_l2_sse2(uint8_t *dst,
const uint8_t *src1, const uint8_t *src2,
ptrdiff_t dstStride, ptrdiff_t src1Stride);
diff --git a/libavcodec/x86/qpeldsp.asm b/libavcodec/x86/qpeldsp.asm
index f9cdee331c..4d2cdddb3a 100644
--- a/libavcodec/x86/qpeldsp.asm
+++ b/libavcodec/x86/qpeldsp.asm
@@ -44,6 +44,11 @@ coeff16_1: times 2 db 20, -6, 20, -6, -6, 20, -6, 20
SECTION .text
+%define MOVU8 movq
+%define MOVA8 movq
+%define MOVU16 movu
+%define MOVA16 mova
+
%macro PUT_NO_RND_PIXELS_L2 1
; void ff_put_no_rnd_pixels8x8_l2(uint8_t *dst, const uint8_t *src1, const
uint8_t *src2,
; ptrdiff_t dstStride, ptrdiff_t src1Stride)
@@ -51,12 +56,12 @@ cglobal put_no_rnd_pixels%1x%1_l2, 5,6,5
pcmpeqb m4, m4
mov r5d, %1
.loop:
- movu m0, [r1]
+ MOVU%1 m0, [r1]
add r1, r4
- movu m1, [r1]
+ MOVU%1 m1, [r1]
add r1, r4
- mova m2, [r2]
- mova m3, [r2+%1]
+ MOVA%1 m2, [r2]
+ MOVA%1 m3, [r2+%1]
pxor m0, m4
pxor m1, m4
pxor m2, m4
@@ -65,16 +70,16 @@ cglobal put_no_rnd_pixels%1x%1_l2, 5,6,5
pavgb m1, m3
pxor m0, m4
pxor m1, m4
- mova [r0], m0
+ MOVA%1 [r0], m0
add r0, r3
- mova [r0], m1
+ MOVA%1 [r0], m1
add r0, r3
- movu m0, [r1]
+ MOVU%1 m0, [r1]
add r1, r4
- movu m1, [r1]
+ MOVU%1 m1, [r1]
add r1, r4
- mova m2, [r2+2*%1]
- mova m3, [r2+3*%1]
+ MOVA%1 m2, [r2+2*%1]
+ MOVA%1 m3, [r2+3*%1]
add r2, 4*%1
pxor m0, m4
pxor m1, m4
@@ -84,18 +89,17 @@ cglobal put_no_rnd_pixels%1x%1_l2, 5,6,5
pavgb m1, m3
pxor m0, m4
pxor m1, m4
- mova [r0], m0
+ MOVA%1 [r0], m0
add r0, r3
- mova [r0], m1
+ MOVA%1 [r0], m1
add r0, r3
sub r5d, 4
jne .loop
RET
%endmacro
-INIT_MMX mmxext
-PUT_NO_RND_PIXELS_L2 8
INIT_XMM sse2
+PUT_NO_RND_PIXELS_L2 8
PUT_NO_RND_PIXELS_L2 16
%macro L2 5
diff --git a/libavcodec/x86/qpeldsp_init.c b/libavcodec/x86/qpeldsp_init.c
index 771961c1b5..bd327e445c 100644
--- a/libavcodec/x86/qpeldsp_init.c
+++ b/libavcodec/x86/qpeldsp_init.c
@@ -34,9 +34,9 @@
#include "qpel.h"
FF_VISIBILITY_PUSH_HIDDEN
-void ff_put_no_rnd_pixels8x8_l2_mmxext(uint8_t *dst,
- const uint8_t *src1, const uint8_t
*src2,
- ptrdiff_t dstStride, ptrdiff_t
src1Stride);
+void ff_put_no_rnd_pixels8x8_l2_sse2(uint8_t *dst,
+ const uint8_t *src1, const uint8_t *src2,
+ ptrdiff_t dstStride, ptrdiff_t
src1Stride);
void ff_put_no_rnd_pixels16x16_l2_sse2(uint8_t *dst,
const uint8_t *src1, const uint8_t
*src2,
ptrdiff_t dstStride, ptrdiff_t
src1Stride);
@@ -241,10 +241,10 @@ MACRO(put,, SIZE, SIZEP1, HXMM, VXMM,
HVXMM, L2) \
MACRO(avg,, SIZE, SIZEP1, HXMM, VXMM, HVXMM, L2) \
MACRO(put_no_rnd, no_rnd_, SIZE, SIZEP1, HXMM, VXMM, HVXMM, L2)
-QPEL3(QPEL_H, 8, 9, ssse3, sse2, ssse3, mmxext)
+QPEL3(QPEL_H, 8, 9, ssse3, sse2, ssse3, sse2)
QPEL3(QPEL_H, 16, 17, ssse3, sse2, ssse3, sse2)
-QPEL3(QPEL_V, 8, 9, ssse3, sse2, ssse3, mmxext)
-QPEL3(QPEL_HV, 8, 9, ssse3, sse2, ssse3, mmxext)
+QPEL3(QPEL_V, 8, 9, ssse3, sse2, ssse3, sse2)
+QPEL3(QPEL_HV, 8, 9, ssse3, sse2, ssse3, sse2)
QPEL3(QPEL_V, 16, 17, ssse3, sse2, ssse3, sse2)
QPEL3(QPEL_HV, 16, 17, ssse3, sse2, ssse3, sse2)
--
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]