Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 3 → Rev 40

/shark/trunk/oslib/xlib/ccpu.c
25,46 → 25,50
#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;
}
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));
memset(p, 0, sizeof(struct ll_cpuInfo));
if (X86_is386()) {
p->X86_cpu = 3;
return;
}
} else {
p->X86_cpu = 4;
if (X86_isCyrix()) {
/* Err... Adjust IT!!!! */
p->X86_cpu = 11;
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... */
}
/* Need tests for AMD and others... */
}
}