aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-i386/cpufeature.h
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2007-05-02 19:27:20 +0200
committerAndi Kleen <andi@basil.nowhere.org>2007-05-02 19:27:20 +0200
commit3671df8572a299acff9c9cac2bf7279ee614d154 (patch)
treee92e13da85eee016ade75e2f46445d47a4d3d143 /include/asm-i386/cpufeature.h
parent[PATCH] i386: Verify important CPUID bits in real mode (diff)
downloadlinux-dev-3671df8572a299acff9c9cac2bf7279ee614d154.tar.xz
linux-dev-3671df8572a299acff9c9cac2bf7279ee614d154.zip
[PATCH] i386: Evaluate constant cpu features at runtime
Redefine cpu_has() to evaluate cpu features already checked in early boot at compile time. This way the compiler might eliminate some dead code. Signed-off-by: Andi Kleen <ak@suse.de>
Diffstat (limited to 'include/asm-i386/cpufeature.h')
-rw-r--r--include/asm-i386/cpufeature.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/include/asm-i386/cpufeature.h b/include/asm-i386/cpufeature.h
index e66d004aa651..20e849ae6ddc 100644
--- a/include/asm-i386/cpufeature.h
+++ b/include/asm-i386/cpufeature.h
@@ -106,8 +106,12 @@
#define X86_FEATURE_LAHF_LM (6*32+ 0) /* LAHF/SAHF in long mode */
#define X86_FEATURE_CMP_LEGACY (6*32+ 1) /* If yes HyperThreading not valid */
-#define cpu_has(c, bit) test_bit(bit, (c)->x86_capability)
-#define boot_cpu_has(bit) test_bit(bit, boot_cpu_data.x86_capability)
+#define cpu_has(c, bit) \
+ ((__builtin_constant_p(bit) && (bit) < 32 && \
+ (1UL << (bit)) & REQUIRED_MASK1) ? \
+ 1 : \
+ test_bit(bit, (c)->x86_capability))
+#define boot_cpu_has(bit) cpu_has(&boot_cpu_data, bit)
#define cpu_has_fpu boot_cpu_has(X86_FEATURE_FPU)
#define cpu_has_vme boot_cpu_has(X86_FEATURE_VME)