History

avcodec/x86/videodsp: Remove obsolete MMX, 3dnow, SSE functions

x64 always has MMX, MMXEXT, SSE and SSE2 and this means that some functions for MMX, MMXEXT, SSE and 3dnow are always overridden by other functions (unless one e.g. explicitly disables SSE2). So given that the only systems which benefit from these functions are truely ancient 32bit x86s they are removed.

Andreas Rheinhardt committed 4 years ago

Commit 19abc4c1 parent 2718a3b2 files · +3 −106Browse files

Unified · Split

2 files
  1. libavcodec/x86/videodsp.asm +3 −35
  2. libavcodec/x86/videodsp_init.c +0 −71
libavcodec/x86/videodsp.asm+3−35
@@ -45,7 +45,6 @@ SECTION .text · 44 unmodified lines
4545 jnz .%1_y_loop
4646 %endmacro
4747
48−%macro vvar_fn 0
4948 ; .----. <- zero
5049 ; | | <- top is copied from first line in body of source
5150 ; |----| <- start_y
@@ -53,6 +52,7 @@ SECTION .text · 1 unmodified line
5352 ; |----| <- end_y
5453 ; | | <- bottom is copied from last line in body of source
5554 ; '----' <- bh
55+INIT_XMM sse
5656 %if ARCH_X86_64
5757 cglobal emu_edge_vvar, 7, 8, 1, dst, dst_stride, src, src_stride, \
5858 start_y, end_y, bh, w
@@ -81,15 +81,6 @@ cglobal emu_edge_vvar, 1, 6, 1, dst, src, start_y, end_y, bh, w · 22 unmodified lines
8181 V_COPY_ROW bottom, bhq ; v_copy_row(bottom, bh)
8282 .end: ; }
8383 RET
84−%endmacro
85−
86−%if ARCH_X86_32
87−INIT_MMX mmx
88−vvar_fn
89−%endif
90−
91−INIT_XMM sse
92−vvar_fn
9384
9485 %macro hvar_fn 0
9586 cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w
@@ -105,11 +96,7 @@ cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w · 9 unmodified lines
10596 imul wd, 0x01010101 ; w *= 0x01010101
10697 movd m0, wd
10798 mov wq, n_wordsq ; initialize w
108−%if cpuflag(sse2)
10999 pshufd m0, m0, q0000 ; splat
110−%else ; mmx
111− punpckldq m0, m0 ; splat
112−%endif ; mmx/sse
113100 %endif ; avx2
114101 .x_loop: ; do {
115102 movu [dstq+wq*2], m0 ; write($reg, $mmsize)
@@ -123,11 +110,6 @@ cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w · 7 unmodified lines
123110 RET
124111 %endmacro
125112
126−%if ARCH_X86_32
127−INIT_MMX mmx
128−hvar_fn
129−%endif
130−
131113 INIT_XMM sse2
132114 hvar_fn
133115
@@ -338,9 +320,6 @@ cglobal emu_edge_vfix %+ %%n, 1, 5, 1, dst, src, start_y, end_y, bh · 204 unmodified lines
338320
339321 INIT_MMX mmx
340322 VERTICAL_EXTEND 1, 15
341−%if ARCH_X86_32
342−VERTICAL_EXTEND 16, 22
343−%endif
344323
345324 INIT_XMM sse
346325 VERTICAL_EXTEND 16, 22
@@ -438,9 +417,6 @@ cglobal emu_edge_hfix %+ %%n, 4, 5, 1, dst, dst_stride, start_x, bh, val · 91 unmodified lines
438417
439418 INIT_MMX mmx
440419 H_EXTEND 2, 14
441−%if ARCH_X86_32
442−H_EXTEND 16, 22
443−%endif
444420
445421 INIT_XMM sse2
446422 H_EXTEND 16, 22
@@ -450,19 +426,11 @@ INIT_XMM avx2 · 3 unmodified lines
450426 H_EXTEND 8, 22
451427 %endif
452428
453−%macro PREFETCH_FN 1
429+INIT_MMX mmxext
454430 cglobal prefetch, 3, 3, 0, buf, stride, h
455431 .loop:
456− %1 [bufq]
432+ prefetcht0 [bufq]
457433 add bufq, strideq
458434 dec hd
459435 jg .loop
460436 REP_RET
461−%endmacro
462−
463−INIT_MMX mmxext
464−PREFETCH_FN prefetcht0
465−%if ARCH_X86_32
466−INIT_MMX 3dnow
467−PREFETCH_FN prefetch
468−%endif
libavcodec/x86/videodsp_init.c+0−71
@@ -52,26 +52,6 @@ extern emu_edge_vfix_func ff_emu_edge_vfix12_mmx; · 51 unmodified lines
5252 extern emu_edge_vfix_func ff_emu_edge_vfix13_mmx;
5353 extern emu_edge_vfix_func ff_emu_edge_vfix14_mmx;
5454 extern emu_edge_vfix_func ff_emu_edge_vfix15_mmx;
55−extern emu_edge_vfix_func ff_emu_edge_vfix16_mmx;
56−extern emu_edge_vfix_func ff_emu_edge_vfix17_mmx;
57−extern emu_edge_vfix_func ff_emu_edge_vfix18_mmx;
58−extern emu_edge_vfix_func ff_emu_edge_vfix19_mmx;
59−extern emu_edge_vfix_func ff_emu_edge_vfix20_mmx;
60−extern emu_edge_vfix_func ff_emu_edge_vfix21_mmx;
61−extern emu_edge_vfix_func ff_emu_edge_vfix22_mmx;
62−#if ARCH_X86_32
63−static emu_edge_vfix_func * const vfixtbl_mmx[22] = {
64− &ff_emu_edge_vfix1_mmx, &ff_emu_edge_vfix2_mmx, &ff_emu_edge_vfix3_mmx,
65− &ff_emu_edge_vfix4_mmx, &ff_emu_edge_vfix5_mmx, &ff_emu_edge_vfix6_mmx,
66− &ff_emu_edge_vfix7_mmx, &ff_emu_edge_vfix8_mmx, &ff_emu_edge_vfix9_mmx,
67− &ff_emu_edge_vfix10_mmx, &ff_emu_edge_vfix11_mmx, &ff_emu_edge_vfix12_mmx,
68− &ff_emu_edge_vfix13_mmx, &ff_emu_edge_vfix14_mmx, &ff_emu_edge_vfix15_mmx,
69− &ff_emu_edge_vfix16_mmx, &ff_emu_edge_vfix17_mmx, &ff_emu_edge_vfix18_mmx,
70− &ff_emu_edge_vfix19_mmx, &ff_emu_edge_vfix20_mmx, &ff_emu_edge_vfix21_mmx,
71− &ff_emu_edge_vfix22_mmx
72−};
73−#endif
74−extern emu_edge_vvar_func ff_emu_edge_vvar_mmx;
7555 extern emu_edge_vfix_func ff_emu_edge_vfix16_sse;
7656 extern emu_edge_vfix_func ff_emu_edge_vfix17_sse;
7757 extern emu_edge_vfix_func ff_emu_edge_vfix18_sse;
@@ -103,19 +83,6 @@ extern emu_edge_hfix_func ff_emu_edge_hfix8_mmx; · 25 unmodified lines
10383 extern emu_edge_hfix_func ff_emu_edge_hfix10_mmx;
10484 extern emu_edge_hfix_func ff_emu_edge_hfix12_mmx;
10585 extern emu_edge_hfix_func ff_emu_edge_hfix14_mmx;
106−extern emu_edge_hfix_func ff_emu_edge_hfix16_mmx;
107−extern emu_edge_hfix_func ff_emu_edge_hfix18_mmx;
108−extern emu_edge_hfix_func ff_emu_edge_hfix20_mmx;
109−extern emu_edge_hfix_func ff_emu_edge_hfix22_mmx;
110−#if ARCH_X86_32
111−static emu_edge_hfix_func * const hfixtbl_mmx[11] = {
112− ff_emu_edge_hfix2_mmx, ff_emu_edge_hfix4_mmx, ff_emu_edge_hfix6_mmx,
113− ff_emu_edge_hfix8_mmx, ff_emu_edge_hfix10_mmx, ff_emu_edge_hfix12_mmx,
114− ff_emu_edge_hfix14_mmx, ff_emu_edge_hfix16_mmx, ff_emu_edge_hfix18_mmx,
115− ff_emu_edge_hfix20_mmx, ff_emu_edge_hfix22_mmx
116−};
117−#endif
118−extern emu_edge_hvar_func ff_emu_edge_hvar_mmx;
11986 extern emu_edge_hfix_func ff_emu_edge_hfix16_sse2;
12087 extern emu_edge_hfix_func ff_emu_edge_hfix18_sse2;
12188 extern emu_edge_hfix_func ff_emu_edge_hfix20_sse2;
@@ -221,30 +188,6 @@ static av_always_inline void emulated_edge_mc(uint8_t *dst, const uint8_t *src, · 99 unmodified lines
221188 }
222189 }
223190
224−#if ARCH_X86_32
225−static av_noinline void emulated_edge_mc_mmx(uint8_t *buf, const uint8_t *src,
226− ptrdiff_t buf_stride,
227− ptrdiff_t src_stride,
228− int block_w, int block_h,
229− int src_x, int src_y, int w, int h)
230−{
231− emulated_edge_mc(buf, src, buf_stride, src_stride, block_w, block_h,
232− src_x, src_y, w, h, vfixtbl_mmx, &ff_emu_edge_vvar_mmx,
233− hfixtbl_mmx, &ff_emu_edge_hvar_mmx);
234−}
235−
236−static av_noinline void emulated_edge_mc_sse(uint8_t *buf, const uint8_t *src,
237− ptrdiff_t buf_stride,
238− ptrdiff_t src_stride,
239− int block_w, int block_h,
240− int src_x, int src_y, int w, int h)
241−{
242− emulated_edge_mc(buf, src, buf_stride, src_stride, block_w, block_h,
243− src_x, src_y, w, h, vfixtbl_sse, &ff_emu_edge_vvar_sse,
244− hfixtbl_mmx, &ff_emu_edge_hvar_mmx);
245−}
246−#endif
247−
248191 static av_noinline void emulated_edge_mc_sse2(uint8_t *buf, const uint8_t *src,
249192 ptrdiff_t buf_stride,
250193 ptrdiff_t src_stride,
@@ -273,29 +216,15 @@ static av_noinline void emulated_edge_mc_avx2(uint8_t *buf, const uint8_t *src, · 22 unmodified lines
273216 #endif /* HAVE_X86ASM */
274217
275218 void ff_prefetch_mmxext(uint8_t *buf, ptrdiff_t stride, int h);
276−void ff_prefetch_3dnow(uint8_t *buf, ptrdiff_t stride, int h);
277219
278220 av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc)
279221 {
280222 #if HAVE_X86ASM
281223 int cpu_flags = av_get_cpu_flags();
282224
283−#if ARCH_X86_32
284− if (EXTERNAL_MMX(cpu_flags) && bpc <= 8) {
285− ctx->emulated_edge_mc = emulated_edge_mc_mmx;
286− }
287− if (EXTERNAL_AMD3DNOW(cpu_flags)) {
288− ctx->prefetch = ff_prefetch_3dnow;
289− }
290−#endif /* ARCH_X86_32 */
291225 if (EXTERNAL_MMXEXT(cpu_flags)) {
292226 ctx->prefetch = ff_prefetch_mmxext;
293227 }
294−#if ARCH_X86_32
295− if (EXTERNAL_SSE(cpu_flags) && bpc <= 8) {
296− ctx->emulated_edge_mc = emulated_edge_mc_sse;
297− }
298−#endif /* ARCH_X86_32 */
299228 if (EXTERNAL_SSE2(cpu_flags) && bpc <= 8) {
300229 ctx->emulated_edge_mc = emulated_edge_mc_sse2;
301230 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t