mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
CpuHypervisor
git-svn-id: svn://ultimatepp.org/upp/trunk@11386 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
b78b5ade79
commit
b2ff8b33cd
2 changed files with 18 additions and 23 deletions
|
|
@ -1,4 +1,5 @@
|
|||
#include "Core.h"
|
||||
#include "cpuid.h"
|
||||
|
||||
namespace Upp {
|
||||
|
||||
|
|
@ -8,22 +9,15 @@ static bool sHasMMX;
|
|||
static bool sHasSSE;
|
||||
static bool sHasSSE2;
|
||||
static bool sHasSSE3;
|
||||
static bool sHypervisor;
|
||||
|
||||
static void sCheckCPU()
|
||||
{
|
||||
static bool done;
|
||||
if(done) return;
|
||||
done = true;
|
||||
#ifdef PLATFORM_OSX11
|
||||
sHasMMX = true;
|
||||
sHasSSE = true;
|
||||
sHasSSE2 = true;
|
||||
#else
|
||||
#ifdef CPU_AMD64
|
||||
sHasMMX = true;
|
||||
sHasSSE = true;
|
||||
sHasSSE2 = true;
|
||||
#else
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
ONCELOCK {
|
||||
#ifdef COMPILER_MSC
|
||||
dword info1;
|
||||
dword info2;
|
||||
|
|
@ -34,26 +28,26 @@ static void sCheckCPU()
|
|||
mov info2, ecx
|
||||
}
|
||||
#else
|
||||
dword info1;
|
||||
dword info2;
|
||||
__asm__("pushl %%ebx\n\tmovl $1, %%eax\n\tcpuid\n\tpopl %%ebx" : "=d" (info1), "=c" (info2) : : "%eax");
|
||||
__get_cpuid(1, &eax, &ebx, &ecx, &edx);
|
||||
#endif
|
||||
sHasMMX = ((info1 >> 23) & 0x1);
|
||||
sHasSSE = ((info1 >> 25) & 0x1);
|
||||
sHasSSE2 = ((info1 >> 26) & 0x1);
|
||||
sHasSSE3 = ((info2) & 0x1);
|
||||
#endif
|
||||
#endif
|
||||
// https://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
|
||||
sHasMMX = edx & (1 << 23);
|
||||
sHasSSE = edx & (1 << 25);
|
||||
sHasSSE2 = edx & (1 << 26);
|
||||
sHasSSE3 = ecx & 1;
|
||||
sHypervisor = ecx & (1 << 31);
|
||||
}
|
||||
}
|
||||
|
||||
INITBLOCK {
|
||||
// sCheckCPU();
|
||||
}
|
||||
|
||||
bool CpuMMX() { sCheckCPU(); return sHasMMX; }
|
||||
bool CpuSSE() { sCheckCPU(); return sHasSSE; }
|
||||
bool CpuSSE2() { sCheckCPU(); return sHasSSE2; }
|
||||
bool CpuSSE3() { sCheckCPU(); return sHasSSE3; }
|
||||
bool CpuMMX() { sCheckCPU(); return sHasMMX; }
|
||||
bool CpuSSE() { sCheckCPU(); return sHasSSE; }
|
||||
bool CpuSSE2() { sCheckCPU(); return sHasSSE2; }
|
||||
bool CpuSSE3() { sCheckCPU(); return sHasSSE3; }
|
||||
bool CpuHypervisor() { sCheckCPU(); return sHypervisor; }
|
||||
|
||||
#ifdef PLATFORM_POSIX
|
||||
#ifdef PLATFORM_BSD
|
||||
|
|
|
|||
|
|
@ -487,6 +487,7 @@ bool CpuMMX();
|
|||
bool CpuSSE();
|
||||
bool CpuSSE2();
|
||||
bool CpuSSE3();
|
||||
bool CpuHypervisor();
|
||||
#endif
|
||||
|
||||
int CPU_Cores();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue