diff options
author | H. Peter Anvin <hpa@zytor.com> | 2007-07-11 15:18:29 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-12 13:55:54 -0400 |
commit | ec481536b15eb0520d8f0204b0294480050fe1f8 (patch) | |
tree | 3f959a26ca58477734ea1e4d5370b2d3a33a1680 /arch/x86_64/kernel/verify_cpu.S | |
parent | f8c09377d754f35a135454181b869ab527cc0757 (diff) |
Unify the CPU features vectors between i386 and x86-64
Unify the handling of the CPU features vectors between i386 and x86-64.
This also adopts the collapsing of features which are required at
compile-time into constant tests from x86-64 to i386.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/x86_64/kernel/verify_cpu.S')
-rw-r--r-- | arch/x86_64/kernel/verify_cpu.S | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/arch/x86_64/kernel/verify_cpu.S b/arch/x86_64/kernel/verify_cpu.S index e035f5948199..45b6f8a975a1 100644 --- a/arch/x86_64/kernel/verify_cpu.S +++ b/arch/x86_64/kernel/verify_cpu.S | |||
@@ -37,20 +37,6 @@ verify_cpu: | |||
37 | pushl $0 # Kill any dangerous flags | 37 | pushl $0 # Kill any dangerous flags |
38 | popfl | 38 | popfl |
39 | 39 | ||
40 | /* minimum CPUID flags for x86-64 as defined by AMD */ | ||
41 | #define M(x) (1<<(x)) | ||
42 | #define M2(a,b) M(a)|M(b) | ||
43 | #define M4(a,b,c,d) M(a)|M(b)|M(c)|M(d) | ||
44 | |||
45 | #define SSE_MASK \ | ||
46 | (M2(X86_FEATURE_XMM,X86_FEATURE_XMM2)) | ||
47 | #define REQUIRED_MASK1 \ | ||
48 | (M4(X86_FEATURE_FPU,X86_FEATURE_PSE,X86_FEATURE_TSC,X86_FEATURE_MSR)|\ | ||
49 | M4(X86_FEATURE_PAE,X86_FEATURE_CX8,X86_FEATURE_PGE,X86_FEATURE_CMOV)|\ | ||
50 | M(X86_FEATURE_FXSR)) | ||
51 | #define REQUIRED_MASK2 \ | ||
52 | (M(X86_FEATURE_LM - 32)) | ||
53 | |||
54 | pushfl # standard way to check for cpuid | 40 | pushfl # standard way to check for cpuid |
55 | popl %eax | 41 | popl %eax |
56 | movl %eax,%ebx | 42 | movl %eax,%ebx |
@@ -79,8 +65,8 @@ verify_cpu: | |||
79 | verify_cpu_noamd: | 65 | verify_cpu_noamd: |
80 | movl $0x1,%eax # Does the cpu have what it takes | 66 | movl $0x1,%eax # Does the cpu have what it takes |
81 | cpuid | 67 | cpuid |
82 | andl $REQUIRED_MASK1,%edx | 68 | andl $REQUIRED_MASK0,%edx |
83 | xorl $REQUIRED_MASK1,%edx | 69 | xorl $REQUIRED_MASK0,%edx |
84 | jnz verify_cpu_no_longmode | 70 | jnz verify_cpu_no_longmode |
85 | 71 | ||
86 | movl $0x80000000,%eax # See if extended cpuid is implemented | 72 | movl $0x80000000,%eax # See if extended cpuid is implemented |
@@ -90,8 +76,8 @@ verify_cpu_noamd: | |||
90 | 76 | ||
91 | movl $0x80000001,%eax # Does the cpu have what it takes | 77 | movl $0x80000001,%eax # Does the cpu have what it takes |
92 | cpuid | 78 | cpuid |
93 | andl $REQUIRED_MASK2,%edx | 79 | andl $REQUIRED_MASK1,%edx |
94 | xorl $REQUIRED_MASK2,%edx | 80 | xorl $REQUIRED_MASK1,%edx |
95 | jnz verify_cpu_no_longmode | 81 | jnz verify_cpu_no_longmode |
96 | 82 | ||
97 | verify_cpu_sse_test: | 83 | verify_cpu_sse_test: |