Changed: #842 Removed obsolete files (all methods are already implemented in CSystemInfo)
This commit is contained in:
parent
d308968f9a
commit
870fb2a50a
2 changed files with 0 additions and 196 deletions
|
@ -1,58 +0,0 @@
|
||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 Winch Gate Property Limited
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Affero General Public License as
|
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
|
||||||
// License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Affero General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#ifndef NL_CPU_INFO_H
|
|
||||||
#define NL_CPU_INFO_H
|
|
||||||
|
|
||||||
#include "types_nl.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace NLMISC {
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This helps to know whether cpu has some features such as mmx, sse ...
|
|
||||||
* \author Nicolas Vizerie
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2001
|
|
||||||
*/
|
|
||||||
struct CCpuInfo___
|
|
||||||
{
|
|
||||||
/** test whether the cpuid instruction is supported
|
|
||||||
* (always false on non intel architectures)
|
|
||||||
*/
|
|
||||||
static bool hasCPUID(void);
|
|
||||||
|
|
||||||
/** helps to know whether the processor features mmx instruction set
|
|
||||||
* This is initialized at startup, so it's fast
|
|
||||||
* (always false on not 0x86 architecture ...)
|
|
||||||
*/
|
|
||||||
static bool hasMMX(void);
|
|
||||||
|
|
||||||
/** helps to know whether the processor has streaming SIMD instructions (the OS must support it)
|
|
||||||
* This is initialized at startup, so it's fast
|
|
||||||
* (always false on not 0x86 architecture ...)
|
|
||||||
*/
|
|
||||||
static bool hasSSE(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // NLMISC
|
|
||||||
|
|
||||||
|
|
||||||
#endif // NL_CPU_INFO_H
|
|
||||||
|
|
||||||
/* End of cpu_info.h */
|
|
|
@ -1,138 +0,0 @@
|
||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 Winch Gate Property Limited
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Affero General Public License as
|
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
|
||||||
// License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Affero General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
#include "stdmisc.h"
|
|
||||||
|
|
||||||
#include "nel/misc/cpu_info.h"
|
|
||||||
|
|
||||||
|
|
||||||
namespace NLMISC
|
|
||||||
{
|
|
||||||
|
|
||||||
static bool DetectMMX(void)
|
|
||||||
{
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
if (!CCpuInfo___::hasCPUID()) return false; // cpuid not supported ...
|
|
||||||
|
|
||||||
uint32 result = 0;
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax,1
|
|
||||||
cpuid
|
|
||||||
test edx,0x800000 // bit 23 = MMX instruction set
|
|
||||||
je noMMX
|
|
||||||
mov result, 1
|
|
||||||
noMMX:
|
|
||||||
}
|
|
||||||
|
|
||||||
return result == 1;
|
|
||||||
|
|
||||||
// printf("mmx detected\n");
|
|
||||||
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static bool DetectSSE()
|
|
||||||
{
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
if (!CCpuInfo___::hasCPUID()) return false; // cpuid not supported ...
|
|
||||||
|
|
||||||
uint32 result = 0;
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
mov eax, 1 // request for feature flags
|
|
||||||
cpuid
|
|
||||||
test EDX, 002000000h // bit 25 in feature flags equal to 1
|
|
||||||
je noSSE
|
|
||||||
mov result, 1 // sse detected
|
|
||||||
noSSE:
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
// check OS support for SSE
|
|
||||||
try
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
xorps xmm0, xmm0 // Streaming SIMD Extension
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// printf("sse detected\n");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasMMX = DetectMMX();
|
|
||||||
bool HasSSE = DetectSSE();
|
|
||||||
|
|
||||||
bool CCpuInfo___::hasCPUID()
|
|
||||||
{
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
uint32 result;
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
pushad
|
|
||||||
pushfd
|
|
||||||
// If ID bit of EFLAGS can change, then cpuid is available
|
|
||||||
pushfd
|
|
||||||
pop eax // Get EFLAG
|
|
||||||
mov ecx,eax
|
|
||||||
xor eax,0x200000 // Flip ID bit
|
|
||||||
push eax
|
|
||||||
popfd // Write EFLAGS
|
|
||||||
pushfd
|
|
||||||
pop eax // read back EFLAG
|
|
||||||
xor eax,ecx
|
|
||||||
je noCpuid // no flip -> no CPUID instr.
|
|
||||||
|
|
||||||
popfd // restore state
|
|
||||||
popad
|
|
||||||
mov result, 1
|
|
||||||
jmp CPUIDPresent
|
|
||||||
|
|
||||||
noCpuid:
|
|
||||||
popfd // restore state
|
|
||||||
popad
|
|
||||||
mov result, 0
|
|
||||||
CPUIDPresent:
|
|
||||||
}
|
|
||||||
return result == 1;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
bool CCpuInfo___::hasMMX() { return HasMMX; }
|
|
||||||
bool CCpuInfo___::hasSSE() { return HasSSE; }
|
|
||||||
|
|
||||||
} // NLMISC
|
|
Loading…
Reference in a new issue