25,50 → 25,46 |
#include <ll/i386/hw-arch.h> |
#include <ll/i386/mem.h> |
|
FILE(Cpu-C); |
FILE(Cpu - C); |
|
INLINE_OP void cpuid(DWORD a, DWORD *outa, DWORD *outb, DWORD *outc, DWORD *outd) |
INLINE_OP void cpuid(DWORD a, DWORD * outa, DWORD * outb, DWORD * outc, |
DWORD * outd) |
{ |
#ifdef __OLD_GNU__ |
__asm__ __volatile__ (".byte 0x0F,0xA2" |
__asm__ __volatile__(".byte 0x0F,0xA2" |
#else |
__asm__ __volatile__ ("cpuid" |
__asm__ __volatile__("cpuid" |
#endif |
: "=a" (*outa), |
"=b" (*outb), |
"=c" (*outc), |
"=d" (*outd) |
: "a" (a)); |
:"=a"(*outa), |
"=b"(*outb), "=c"(*outc), "=d"(*outd):"a"(a)); |
} |
|
void X86_get_CPU(struct ll_cpuInfo *p) |
{ |
DWORD tmp; |
DWORD tmp; |
|
memset(p, 0, sizeof(struct ll_cpuInfo)); |
if (X86_is386()) { |
p->X86_cpu = 3; |
|
return; |
memset(p, 0, sizeof(struct ll_cpuInfo)); |
if (X86_is386()) { |
p->X86_cpu = 3; |
|
return; |
} |
if (X86_hasCPUID()) { |
p->X86_cpuIdFlag = 1; |
p->X86_cpu = 5; |
cpuid(0, &tmp, &(p->X86_vendor_1), |
&(p->X86_vendor_3), &(p->X86_vendor_2)); |
if (tmp >= 1) { |
cpuid(1, &(p->X86_signature), |
&(p->X86_IntelFeature_1), |
&(p->X86_IntelFeature_2), &(p->X86_StandardFeature)); |
} |
if (X86_hasCPUID()) { |
p->X86_cpuIdFlag = 1; |
p->X86_cpu = 5; |
cpuid(0, &tmp, &(p->X86_vendor_1), |
&(p->X86_vendor_3), |
&(p->X86_vendor_2)); |
if (tmp >= 1) { |
cpuid(1, &(p->X86_signature), |
&(p->X86_IntelFeature_1), |
&(p->X86_IntelFeature_2), |
&(p->X86_StandardFeature)); |
} |
} else { |
p->X86_cpu = 4; |
if (X86_isCyrix()) { |
/* Err... Adjust IT!!!! */ |
p->X86_cpu = 11; |
} |
/* Need tests for AMD and others... */ |
} else { |
p->X86_cpu = 4; |
if (X86_isCyrix()) { |
/* Err... Adjust IT!!!! */ |
p->X86_cpu = 11; |
} |
/* Need tests for AMD and others... */ |
} |
} |