diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2008-01-31 20:10:19 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2008-01-31 20:10:19 (GMT) |
commit | 99ebc1e728a70ea16515b556d45d924291f5fab8 (patch) | |
tree | 8837efd41ff3592cf3573c6acb8249871266e4bf /Source | |
parent | 414b89b9038657ce9b8f421d6bf4e554b55bdb9e (diff) | |
download | CMake-99ebc1e728a70ea16515b556d45d924291f5fab8.zip CMake-99ebc1e728a70ea16515b556d45d924291f5fab8.tar.gz CMake-99ebc1e728a70ea16515b556d45d924291f5fab8.tar.bz2 |
ENH: fix build errors with asm stuff on mingw and hopefully win64
Diffstat (limited to 'Source')
-rw-r--r-- | Source/kwsys/SystemInformation.cxx | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/Source/kwsys/SystemInformation.cxx b/Source/kwsys/SystemInformation.cxx index 76cd76e..9c02b15 100644 --- a/Source/kwsys/SystemInformation.cxx +++ b/Source/kwsys/SystemInformation.cxx @@ -403,6 +403,12 @@ void SystemInformation::RunMemoryCheck() // -------------------------------------------------------------- // SystemInformationImplementation starts here +#if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(_WIN64) +#define USE_ASM_INSTRUCTIONS 1 +#else +#define USE_ASM_INSTRUCTIONS 0 +#endif + #define STORE_TLBCACHE_INFO(x,y) x = (x < y) ? y : x #define TLBCACHE_INFO_UNITS (15) #define CLASSICAL_CPU_FREQ_LOOP 10000000 @@ -954,7 +960,7 @@ void SystemInformationImplementation::FindManufacturer() /** */ bool SystemInformationImplementation::RetrieveCPUIdentity() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int localCPUVendor[3]; int localCPUSignature; @@ -1027,7 +1033,7 @@ bool SystemInformationImplementation::RetrieveCPUIdentity() /** */ bool SystemInformationImplementation::RetrieveCPUCacheDetails() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int L1Cache[4] = { 0, 0, 0, 0 }; int L2Cache[4] = { 0, 0, 0, 0 }; @@ -1144,7 +1150,7 @@ bool SystemInformationImplementation::RetrieveCPUCacheDetails() /** */ bool SystemInformationImplementation::RetrieveClassicalCPUCacheDetails() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int TLBCode = -1, TLBData = -1, L1Code = -1, L1Data = -1, L1Trace = -1, L2Unified = -1, L3Unified = -1; int TLBCacheData[4] = { 0, 0, 0, 0 }; int TLBPassCounter = 0; @@ -1344,7 +1350,7 @@ bool SystemInformationImplementation::RetrieveClassicalCPUCacheDetails() /** */ bool SystemInformationImplementation::RetrieveCPUClockSpeed() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if _WIN32 // First of all we check to see if the RDTSC (0x0F, 0x31) instruction is supported. if (!this->Features.HasTSC) { @@ -1358,8 +1364,11 @@ bool SystemInformationImplementation::RetrieveCPUClockSpeed() for (unsigned int nCounter = 0; nCounter < uiRepetitions; nCounter ++) { - i64Total += GetCyclesDifference (SystemInformationImplementation::Delay, uiMSecPerRepetition); - i64Overhead += GetCyclesDifference (SystemInformationImplementation::DelayOverhead, uiMSecPerRepetition); + i64Total += GetCyclesDifference (SystemInformationImplementation::Delay, + uiMSecPerRepetition); + i64Overhead += + GetCyclesDifference (SystemInformationImplementation::DelayOverhead, + uiMSecPerRepetition); } // Calculate the MHz speed. @@ -1380,7 +1389,7 @@ bool SystemInformationImplementation::RetrieveCPUClockSpeed() /** */ bool SystemInformationImplementation::RetrieveClassicalCPUClockSpeed() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS LARGE_INTEGER liStart, liEnd, liCountsPerSecond; double dFrequency, dDifference; @@ -1481,7 +1490,7 @@ bool SystemInformationImplementation::RetrieveCPUExtendedLevelSupport(int CPULev } } -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS // Use assembly to detect CPUID information... __try { @@ -1543,7 +1552,7 @@ bool SystemInformationImplementation::RetrieveExtendedCPUFeatures() { return false; } -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int localCPUExtendedFeatures = 0; // Use assembly to detect CPUID information... @@ -1612,7 +1621,7 @@ bool SystemInformationImplementation::RetrieveProcessorSerialNumber() return false; } -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int SerialNumber[3]; @@ -1682,7 +1691,7 @@ bool SystemInformationImplementation::RetrieveCPUPowerManagement() return false; } -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int localCPUPowerManagement = 0; @@ -1735,7 +1744,7 @@ bool SystemInformationImplementation::RetrieveExtendedCPUIdentity() if (!RetrieveCPUExtendedLevelSupport(0x80000003)) return false; if (!RetrieveCPUExtendedLevelSupport(0x80000004)) return false; -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS int ProcessorNameStartPos = 0; int CPUExtendedIdentity[12]; @@ -2218,7 +2227,7 @@ int SystemInformationImplementation::QueryMemory() this->AvailablePhysicalMemory = 0; #ifdef __CYGWIN__ return 0; -#elif defined(_MSC_VER) && (_MSC_VER >= 1300) +#elif _WIN32 MEMORYSTATUS ms; GlobalMemoryStatus(&ms); @@ -2389,7 +2398,7 @@ unsigned long SystemInformationImplementation::GetAvailablePhysicalMemory() LongLong SystemInformationImplementation::GetCyclesDifference (DELAY_FUNC DelayFunction, unsigned int uiParameter) { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS unsigned int edx1, eax1; unsigned int edx2, eax2; @@ -2435,7 +2444,7 @@ LongLong SystemInformationImplementation::GetCyclesDifference (DELAY_FUNC DelayF /** Compute the delay overhead */ void SystemInformationImplementation::DelayOverhead(unsigned int uiMS) { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if _WIN32 LARGE_INTEGER Frequency, StartCounter, EndCounter; __int64 x; @@ -2461,7 +2470,7 @@ void SystemInformationImplementation::DelayOverhead(unsigned int uiMS) unsigned char SystemInformationImplementation::LogicalCPUPerPhysicalCPU(void) { unsigned int Regebx = 0; -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS if (!this->IsHyperThreadingSupported()) { return (unsigned char) 1; // HT not supported @@ -2479,7 +2488,7 @@ unsigned char SystemInformationImplementation::LogicalCPUPerPhysicalCPU(void) /** Works only for windows */ unsigned int SystemInformationImplementation::IsHyperThreadingSupported() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS unsigned int Regedx = 0, Regeax = 0, VendorId[3] = {0, 0, 0}; @@ -2526,7 +2535,7 @@ unsigned int SystemInformationImplementation::IsHyperThreadingSupported() unsigned char SystemInformationImplementation::GetAPICId() { unsigned int Regebx = 0; -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if USE_ASM_INSTRUCTIONS if (!this->IsHyperThreadingSupported()) { return (unsigned char) -1; // HT not supported @@ -2544,7 +2553,7 @@ unsigned char SystemInformationImplementation::GetAPICId() /** Count the number of CPUs. Works only on windows. */ int SystemInformationImplementation::CPUCount() { -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if _WIN32 unsigned char StatusFlag = 0; SYSTEM_INFO info; @@ -2917,7 +2926,7 @@ bool SystemInformationImplementation::QueryOSInformation() osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (!GetVersionEx ((OSVERSIONINFO *) &osvi)) { - return NULL; + return false; } } |