x86: Optimize cmpxchg64() at build-time some more
Try to avoid the 'alternates()' code when we can statically determine that cmpxchg8b is fine. We already have that CONFIG_x86_CMPXCHG64 (enabled by PAE support), and we could easily also enable it for some of the CPU cases. Note, this patch only adds CMPXCHG8B for the obvious Intel CPU's, not for others. (There was something really messy about cmpxchg8b and clone CPU's, so if you enable it on other CPUs later, do it carefully.) If we avoid that asm-alternative thing when we can assume the instruction exists, we'll generate less support crud, and we'll avoid the whole issue with that extra 'nop' for padding instruction sizes etc. LKML-Reference: <alpine.LFD.2.01.0909301743150.6996@localhost.localdomain> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
84d88d5d4e
commit
982d007a6e
|
@ -400,7 +400,7 @@ config X86_TSC
|
||||||
|
|
||||||
config X86_CMPXCHG64
|
config X86_CMPXCHG64
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on X86_PAE || X86_64
|
depends on X86_PAE || X86_64 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MATOM
|
||||||
|
|
||||||
# this should be set for all -march=.. options where the compiler
|
# this should be set for all -march=.. options where the compiler
|
||||||
# generates cmov.
|
# generates cmov.
|
||||||
|
@ -412,6 +412,7 @@ config X86_MINIMUM_CPU_FAMILY
|
||||||
int
|
int
|
||||||
default "64" if X86_64
|
default "64" if X86_64
|
||||||
default "6" if X86_32 && X86_P6_NOP
|
default "6" if X86_32 && X86_P6_NOP
|
||||||
|
default "5" if X86_32 && X86_CMPXCHG64
|
||||||
default "4" if X86_32 && (X86_XADD || X86_CMPXCHG || X86_BSWAP || X86_WP_WORKS_OK)
|
default "4" if X86_32 && (X86_XADD || X86_CMPXCHG || X86_BSWAP || X86_WP_WORKS_OK)
|
||||||
default "3"
|
default "3"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue