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
45 jnz .%1_y_loop45 jnz .%1_y_loop
46%endmacro46%endmacro
47 47
48%macro vvar_fn 0
49; .----. <- zero48; .----. <- zero
50; | | <- top is copied from first line in body of source49; | | <- top is copied from first line in body of source
51; |----| <- start_y50; |----| <- start_y
@@ -53,6 +52,7 @@ SECTION .text · 1 unmodified line
53; |----| <- end_y52; |----| <- end_y
54; | | <- bottom is copied from last line in body of source53; | | <- bottom is copied from last line in body of source
55; '----' <- bh54; '----' <- bh
55INIT_XMM sse
56%if ARCH_X86_6456%if ARCH_X86_64
57cglobal emu_edge_vvar, 7, 8, 1, dst, dst_stride, src, src_stride, \57cglobal emu_edge_vvar, 7, 8, 1, dst, dst_stride, src, src_stride, \
58 start_y, end_y, bh, w58 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
81 V_COPY_ROW bottom, bhq ; v_copy_row(bottom, bh)81 V_COPY_ROW bottom, bhq ; v_copy_row(bottom, bh)
82.end: ; }82.end: ; }
83 RET83 RET
84%endmacro
85
86%if ARCH_X86_32
87INIT_MMX mmx
88vvar_fn
89%endif
90
91INIT_XMM sse
92vvar_fn
93 84
94%macro hvar_fn 085%macro hvar_fn 0
95cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w86cglobal 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
105 imul wd, 0x01010101 ; w *= 0x0101010196 imul wd, 0x01010101 ; w *= 0x01010101
106 movd m0, wd97 movd m0, wd
107 mov wq, n_wordsq ; initialize w98 mov wq, n_wordsq ; initialize w
108%if cpuflag(sse2)
109 pshufd m0, m0, q0000 ; splat99 pshufd m0, m0, q0000 ; splat
110%else ; mmx
111 punpckldq m0, m0 ; splat
112%endif ; mmx/sse
113%endif ; avx2100%endif ; avx2
114.x_loop: ; do {101.x_loop: ; do {
115 movu [dstq+wq*2], m0 ; write($reg, $mmsize)102 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
123 RET110 RET
124%endmacro111%endmacro
125 112
126%if ARCH_X86_32
127INIT_MMX mmx
128hvar_fn
129%endif
130
131INIT_XMM sse2113INIT_XMM sse2
132hvar_fn114hvar_fn
133 115
@@ -338,9 +320,6 @@ cglobal emu_edge_vfix %+ %%n, 1, 5, 1, dst, src, start_y, end_y, bh · 204 unmodified lines
338 320
339INIT_MMX mmx321INIT_MMX mmx
340VERTICAL_EXTEND 1, 15322VERTICAL_EXTEND 1, 15
341%if ARCH_X86_32
342VERTICAL_EXTEND 16, 22
343%endif
344 323
345INIT_XMM sse324INIT_XMM sse
346VERTICAL_EXTEND 16, 22325VERTICAL_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
438 417
439INIT_MMX mmx418INIT_MMX mmx
440H_EXTEND 2, 14419H_EXTEND 2, 14
441%if ARCH_X86_32
442H_EXTEND 16, 22
443%endif
444 420
445INIT_XMM sse2421INIT_XMM sse2
446H_EXTEND 16, 22422H_EXTEND 16, 22
@@ -450,19 +426,11 @@ INIT_XMM avx2 · 3 unmodified lines
450H_EXTEND 8, 22426H_EXTEND 8, 22
451%endif427%endif
452 428
453%macro PREFETCH_FN 1429INIT_MMX mmxext
454cglobal prefetch, 3, 3, 0, buf, stride, h430cglobal prefetch, 3, 3, 0, buf, stride, h
455.loop:431.loop:
456 %1 [bufq]432 prefetcht0 [bufq]
457 add bufq, strideq433 add bufq, strideq
458 dec hd434 dec hd
459 jg .loop435 jg .loop
460 REP_RET436 REP_RET
461%endmacro
462
463INIT_MMX mmxext
464PREFETCH_FN prefetcht0
465%if ARCH_X86_32
466INIT_MMX 3dnow
467PREFETCH_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
52extern emu_edge_vfix_func ff_emu_edge_vfix13_mmx;52extern emu_edge_vfix_func ff_emu_edge_vfix13_mmx;
53extern emu_edge_vfix_func ff_emu_edge_vfix14_mmx;53extern emu_edge_vfix_func ff_emu_edge_vfix14_mmx;
54extern emu_edge_vfix_func ff_emu_edge_vfix15_mmx;54extern emu_edge_vfix_func ff_emu_edge_vfix15_mmx;
55extern emu_edge_vfix_func ff_emu_edge_vfix16_mmx;
56extern emu_edge_vfix_func ff_emu_edge_vfix17_mmx;
57extern emu_edge_vfix_func ff_emu_edge_vfix18_mmx;
58extern emu_edge_vfix_func ff_emu_edge_vfix19_mmx;
59extern emu_edge_vfix_func ff_emu_edge_vfix20_mmx;
60extern emu_edge_vfix_func ff_emu_edge_vfix21_mmx;
61extern emu_edge_vfix_func ff_emu_edge_vfix22_mmx;
62#if ARCH_X86_32
63static 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
74extern emu_edge_vvar_func ff_emu_edge_vvar_mmx;
75extern emu_edge_vfix_func ff_emu_edge_vfix16_sse;55extern emu_edge_vfix_func ff_emu_edge_vfix16_sse;
76extern emu_edge_vfix_func ff_emu_edge_vfix17_sse;56extern emu_edge_vfix_func ff_emu_edge_vfix17_sse;
77extern emu_edge_vfix_func ff_emu_edge_vfix18_sse;57extern 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
103extern emu_edge_hfix_func ff_emu_edge_hfix10_mmx;83extern emu_edge_hfix_func ff_emu_edge_hfix10_mmx;
104extern emu_edge_hfix_func ff_emu_edge_hfix12_mmx;84extern emu_edge_hfix_func ff_emu_edge_hfix12_mmx;
105extern emu_edge_hfix_func ff_emu_edge_hfix14_mmx;85extern emu_edge_hfix_func ff_emu_edge_hfix14_mmx;
106extern emu_edge_hfix_func ff_emu_edge_hfix16_mmx;
107extern emu_edge_hfix_func ff_emu_edge_hfix18_mmx;
108extern emu_edge_hfix_func ff_emu_edge_hfix20_mmx;
109extern emu_edge_hfix_func ff_emu_edge_hfix22_mmx;
110#if ARCH_X86_32
111static 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
118extern emu_edge_hvar_func ff_emu_edge_hvar_mmx;
119extern emu_edge_hfix_func ff_emu_edge_hfix16_sse2;86extern emu_edge_hfix_func ff_emu_edge_hfix16_sse2;
120extern emu_edge_hfix_func ff_emu_edge_hfix18_sse2;87extern emu_edge_hfix_func ff_emu_edge_hfix18_sse2;
121extern emu_edge_hfix_func ff_emu_edge_hfix20_sse2;88extern 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
221 }188 }
222}189}
223 190
224#if ARCH_X86_32
225static 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
236static 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
248static av_noinline void emulated_edge_mc_sse2(uint8_t *buf, const uint8_t *src,191static av_noinline void emulated_edge_mc_sse2(uint8_t *buf, const uint8_t *src,
249 ptrdiff_t buf_stride,192 ptrdiff_t buf_stride,
250 ptrdiff_t src_stride,193 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
273#endif /* HAVE_X86ASM */216#endif /* HAVE_X86ASM */
274 217
275void ff_prefetch_mmxext(uint8_t *buf, ptrdiff_t stride, int h);218void ff_prefetch_mmxext(uint8_t *buf, ptrdiff_t stride, int h);
276void ff_prefetch_3dnow(uint8_t *buf, ptrdiff_t stride, int h);
277 219
278av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc)220av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc)
279{221{
280#if HAVE_X86ASM222#if HAVE_X86ASM
281 int cpu_flags = av_get_cpu_flags();223 int cpu_flags = av_get_cpu_flags();
282 224
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 */
291 if (EXTERNAL_MMXEXT(cpu_flags)) {225 if (EXTERNAL_MMXEXT(cpu_flags)) {
292 ctx->prefetch = ff_prefetch_mmxext;226 ctx->prefetch = ff_prefetch_mmxext;
293 }227 }
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 */
299 if (EXTERNAL_SSE2(cpu_flags) && bpc <= 8) {228 if (EXTERNAL_SSE2(cpu_flags) && bpc <= 8) {
300 ctx->emulated_edge_mc = emulated_edge_mc_sse2;229 ctx->emulated_edge_mc = emulated_edge_mc_sse2;
301 }230 }

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