mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
x86inc: Make INIT_CPUFLAGS support an arbitrary number of cpuflags
Previously there was a limit of two cpuflags. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
4f10495055
commit
428aa14a48
@ -99,9 +99,6 @@
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
; Always use long nops (reduces 0x90 spam in disassembly on x86_32)
|
||||
CPUNOP amdnop
|
||||
|
||||
; Macros to eliminate most code duplication between x86_32 and x86_64:
|
||||
; Currently this works only for leaf functions which load all their arguments
|
||||
; into registers at the start, and make no other use of the stack. Luckily that
|
||||
@ -759,19 +756,26 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits
|
||||
%define cpuflag(x) ((cpuflags & (cpuflags_ %+ x)) == (cpuflags_ %+ x))
|
||||
%define notcpuflag(x) ((cpuflags & (cpuflags_ %+ x)) != (cpuflags_ %+ x))
|
||||
|
||||
; Takes up to 2 cpuflags from the above list.
|
||||
; Takes an arbitrary number of cpuflags from the above list.
|
||||
; All subsequent functions (up to the next INIT_CPUFLAGS) is built for the specified cpu.
|
||||
; You shouldn't need to invoke this macro directly, it's a subroutine for INIT_MMX &co.
|
||||
%macro INIT_CPUFLAGS 0-2
|
||||
CPUNOP amdnop
|
||||
%macro INIT_CPUFLAGS 0-*
|
||||
%xdefine SUFFIX
|
||||
%undef cpuname
|
||||
%assign cpuflags 0
|
||||
|
||||
%if %0 >= 1
|
||||
%rep %0
|
||||
%ifdef cpuname
|
||||
%xdefine cpuname cpuname %+ _%1
|
||||
%else
|
||||
%xdefine cpuname %1
|
||||
%assign cpuflags cpuflags_%1
|
||||
%if %0 >= 2
|
||||
%xdefine cpuname %1_%2
|
||||
%assign cpuflags cpuflags | cpuflags_%2
|
||||
%endif
|
||||
%assign cpuflags cpuflags | cpuflags_%1
|
||||
%rotate 1
|
||||
%endrep
|
||||
%xdefine SUFFIX _ %+ cpuname
|
||||
|
||||
%if cpuflag(avx)
|
||||
%assign avx_enabled 1
|
||||
%endif
|
||||
@ -782,16 +786,15 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits
|
||||
%endif
|
||||
%if cpuflag(aligned)
|
||||
%define movu mova
|
||||
%elifidn %1, sse3
|
||||
%elif cpuflag(sse3) && notcpuflag(ssse3)
|
||||
%define movu lddqu
|
||||
%endif
|
||||
%if notcpuflag(sse2)
|
||||
CPUNOP basicnop
|
||||
%endif
|
||||
|
||||
%if cpuflag(sse2)
|
||||
CPUNOP amdnop
|
||||
%else
|
||||
%xdefine SUFFIX
|
||||
%undef cpuname
|
||||
%undef cpuflags
|
||||
CPUNOP basicnop
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user