mov eax, 0\r
cpuid\r
cmp eax, 0bh\r
- jnb X2Apic\r
+ jb NoX2Apic ; CPUID level below CPUID_EXTENDED_TOPOLOGY\r
+\r
+ mov eax, 0bh\r
+ xor ecx, ecx\r
+ cpuid\r
+ test ebx, 0ffffh\r
+ jz NoX2Apic ; CPUID.0BH:EBX[15:0] is zero\r
+\r
+ ; Processor is x2APIC capable; 32-bit x2APIC ID is already in EDX\r
+ jmp GetProcessorNumber\r
+\r
+NoX2Apic:\r
; Processor is not x2APIC capable, so get 8-bit APIC ID\r
mov eax, 1\r
cpuid\r
shr ebx, 24\r
mov edx, ebx\r
- jmp GetProcessorNumber\r
\r
-X2Apic:\r
- ; Processor is x2APIC capable, so get 32-bit x2APIC ID\r
- mov eax, 0bh\r
- xor ecx, ecx\r
- cpuid \r
- ; edx save x2APIC ID\r
- \r
GetProcessorNumber:\r
;\r
; Get processor number for this AP\r