1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2026-05-04 21:08:03 +02:00

avcodec/x86/qpeldsp: Remove vertical MMXEXT mc functions

Superseded by SSE2.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2025-11-06 17:11:13 +01:00
parent 9beecb2670
commit dad0c01076
2 changed files with 7 additions and 90 deletions
-60
View File
@@ -408,23 +408,10 @@ cglobal %1_mpeg4_qpel16_v_lowpass, 4, 6, 7, 544
.looph:
movu m0, [r1]
mova m1, m0
%if mmsize == 8
mova m2, [r1+8]
mova m3, [r1+8]
punpcklbw m0, m4
punpckhbw m1, m4
punpcklbw m2, m4
punpckhbw m3, m4
mova [r5], m0
mova [r5+0x88], m1
mova [r5+0x110], m2
mova [r5+0x198], m3
%else
punpcklbw m0, m4
punpckhbw m1, m4
mova [r5], m0
mova [r5+0x110], m1
%endif
add r1, r3
add r5, mmsize
dec r4d
@@ -481,19 +468,6 @@ cglobal %1_mpeg4_qpel16_v_lowpass, 4, 6, 7, 544
movh %1, %2
%endmacro
INIT_MMX mmxext
%define PW_ROUND pw_16
%define OP_MOV PUT_OPH
MPEG4_QPEL16_V_LOWPASS put
%define PW_ROUND pw_16
%define OP_MOV AVG_OPH
MPEG4_QPEL16_V_LOWPASS avg
%define PW_ROUND pw_15
%define OP_MOV PUT_OPH
MPEG4_QPEL16_V_LOWPASS put_no_rnd
%macro MPEG4_QPEL8_V_LOWPASS 1
cglobal %1_mpeg4_qpel8_v_lowpass, 4, 6, 7, 144
mov r4d, 9
@@ -502,31 +476,14 @@ cglobal %1_mpeg4_qpel8_v_lowpass, 4, 6, 7, 144
.looph:
movq m0, [r1]
add r1, r3
%if mmsize == 8
mova m1, m0
punpcklbw m0, m2
punpckhbw m1, m2
mova [r5], m0
mova [r5+0x48], m1
%else
punpcklbw m0, m2
mova [r5], m0
%endif
add r5, mmsize
dec r4d
jne .looph
%if mmsize == 8
mov r4d, 2
mov r1, r0
mov r5, rsp
.loopv:
%define R5 r5
%else
%define R5 rsp
%endif
mova m0, [R5+0 * mmsize]
mova m1, [R5+1 * mmsize]
mova m2, [R5+2 * mmsize]
@@ -543,26 +500,9 @@ cglobal %1_mpeg4_qpel8_v_lowpass, 4, 6, 7, 144
QPEL_V_LOW [R5+3*mmsize], [R5+4*mmsize], [R5+5*mmsize], [R5+7*mmsize], [r0]
QPEL_V_LOW [R5+4*mmsize], [R5+5*mmsize], [R5+6*mmsize], [R5+6*mmsize], [r0+r2]
%if mmsize == 8
add r5, 0x48
lea r0, [r1+4]
dec r4d
jne .loopv
%endif
RET
%endmacro
INIT_MMX mmxext
%define PW_ROUND pw_16
%define OP_MOV PUT_OPH
MPEG4_QPEL8_V_LOWPASS put
%define PW_ROUND pw_16
%define OP_MOV AVG_OPH
MPEG4_QPEL8_V_LOWPASS avg
%define PW_ROUND pw_15
%define OP_MOV PUT_OPH
MPEG4_QPEL8_V_LOWPASS put_no_rnd
INIT_XMM sse2
%define PW_ROUND pw_16
%define OP_MOV PUT_OPH
+7 -30
View File
@@ -264,12 +264,8 @@ 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, mmxext, mmxext, mmxext, mmxext)
QPEL3(QPEL_V, 8, 9, mmxext, mmxext, mmxext, mmxext)
QPEL3(QPEL_HV, 8, 9, mmxext, mmxext, mmxext, mmxext)
QPEL3(QPEL_H, 16, 17, mmxext, mmxext, mmxext, mmxext)
QPEL3(QPEL_V, 16, 17, mmxext, mmxext, mmxext, mmxext)
QPEL3(QPEL_HV, 16, 17, mmxext, mmxext, mmxext, mmxext)
QPEL3(QPEL_V, 8, 9, ssse3, sse2, ssse3, mmxext)
QPEL3(QPEL_HV, 8, 9, mmxext, sse2, sse2, mmxext)
@@ -284,6 +280,11 @@ QPEL3(QPEL_HV, 16, 17, mmxext, sse2, sse2, mmxext)
SET_QPEL_FUNC(put, X, Y, SIZE, CPU, PREFIX); \
SET_QPEL_FUNC(put_no_rnd, X, Y, SIZE, CPU, PREFIX)
#define SET_H_QPEL_FUNCS(SIZE, CPU, PREFIX) \
SET_QPEL_FUNCS3(1, 0, SIZE, CPU, PREFIX); \
SET_QPEL_FUNCS3(2, 0, SIZE, CPU, PREFIX); \
SET_QPEL_FUNCS3(3, 0, SIZE, CPU, PREFIX)
#define SET_V_QPEL_FUNCS(SIZE, CPU, PREFIX) \
SET_QPEL_FUNCS3(0, 1, SIZE, CPU, PREFIX); \
SET_QPEL_FUNCS3(0, 2, SIZE, CPU, PREFIX); \
@@ -300,39 +301,15 @@ QPEL3(QPEL_HV, 16, 17, mmxext, sse2, sse2, mmxext)
SET_QPEL_FUNCS3(3, 2, SIZE, CPU, PREFIX); \
SET_QPEL_FUNCS3(3, 3, SIZE, CPU, PREFIX)
#define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \
do { \
c->PFX ## _pixels_tab[IDX][ 1] = PREFIX ## PFX ## SIZE ## _mc10_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 2] = PREFIX ## PFX ## SIZE ## _mc20_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 3] = PREFIX ## PFX ## SIZE ## _mc30_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 4] = PREFIX ## PFX ## SIZE ## _mc01_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 5] = PREFIX ## PFX ## SIZE ## _mc11_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 6] = PREFIX ## PFX ## SIZE ## _mc21_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 7] = PREFIX ## PFX ## SIZE ## _mc31_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 8] = PREFIX ## PFX ## SIZE ## _mc02_ ## CPU; \
c->PFX ## _pixels_tab[IDX][ 9] = PREFIX ## PFX ## SIZE ## _mc12_ ## CPU; \
c->PFX ## _pixels_tab[IDX][10] = PREFIX ## PFX ## SIZE ## _mc22_ ## CPU; \
c->PFX ## _pixels_tab[IDX][11] = PREFIX ## PFX ## SIZE ## _mc32_ ## CPU; \
c->PFX ## _pixels_tab[IDX][12] = PREFIX ## PFX ## SIZE ## _mc03_ ## CPU; \
c->PFX ## _pixels_tab[IDX][13] = PREFIX ## PFX ## SIZE ## _mc13_ ## CPU; \
c->PFX ## _pixels_tab[IDX][14] = PREFIX ## PFX ## SIZE ## _mc23_ ## CPU; \
c->PFX ## _pixels_tab[IDX][15] = PREFIX ## PFX ## SIZE ## _mc33_ ## CPU; \
} while (0)
av_cold void ff_qpeldsp_init_x86(QpelDSPContext *c)
{
int cpu_flags = av_get_cpu_flags();
if (X86_MMXEXT(cpu_flags)) {
#if HAVE_MMXEXT_EXTERNAL
SET_QPEL_FUNCS(avg_qpel, 0, 16, mmxext, );
c->avg_qpel_pixels_tab[1][0] = ff_avg_pixels8x8_mmxext;
SET_QPEL_FUNCS(avg_qpel, 1, 8, mmxext, );
SET_QPEL_FUNCS(put_qpel, 0, 16, mmxext, );
SET_QPEL_FUNCS(put_qpel, 1, 8, mmxext, );
SET_QPEL_FUNCS(put_no_rnd_qpel, 0, 16, mmxext, );
SET_QPEL_FUNCS(put_no_rnd_qpel, 1, 8, mmxext, );
SET_H_QPEL_FUNCS(16, mmxext,);
SET_H_QPEL_FUNCS(8, mmxext,);
#endif /* HAVE_MMXEXT_EXTERNAL */
}
#if HAVE_SSE2_EXTERNAL