(svn r26197) -Add: wrappers around cpuid

replace/41b28d7194a279bdc17475d4fbe2ea6ec885a466
rubidium 11 years ago
parent 52c942b177
commit e76d294c10

@ -74,3 +74,35 @@ uint64 ottd_rdtsc()
# endif
uint64 ottd_rdtsc() {return 0;}
#endif
/**
* Definitions for CPU detection:
*
* MSVC offers cpu information while gcc only implements in gcc 4.8
* __builtin_cpu_supports and friends
* http://msdn.microsoft.com/library/vstudio/hskdteyh%28v=vs.100%29.aspx
* http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html
*
* Other platforms/architectures don't have CPUID, so zero the info and then
* most (if not all) of the features are set as if they do not exist.
*/
#if defined(_MSC_VER)
void ottd_cpuid(int info[4], int type)
__cpuiid(info, type);
}
#elif defined(__x86_64__) || defined(__i386)
void ottd_cpuid(int info[4], int type)
{
__asm__ __volatile__ (
"cpuid"
: "=a" (info[0]), "=b" (info[1]), "=c" (info[2]), "=d" (info[3])
: "a" (type)
);
}
#else
void ottd_cpuid(int info[4], int type)
{
info[0] = info[1] = info[2] = info[3] = 0;
}
#endif

@ -18,4 +18,11 @@
*/
uint64 ottd_rdtsc();
/**
* Get the CPUID information from the CPU.
* @param info The retrieved info. All zeros on architectures without CPUID.
* @param type The information this instruction should retrieve.
*/
void ottd_cpuid(int info[4], int type);
#endif /* CPU_H */

Loading…
Cancel
Save