Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
93
Src/external_dependencies/openmpt-trunk/misc/mptCPU.h
Normal file
93
Src/external_dependencies/openmpt-trunk/misc/mptCPU.h
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* mptCPU.h
|
||||
* --------
|
||||
* Purpose: CPU feature detection.
|
||||
* Notes : (currently none)
|
||||
* Authors: OpenMPT Devs
|
||||
* The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
|
||||
*/
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "openmpt/all/BuildSettings.hpp"
|
||||
|
||||
|
||||
OPENMPT_NAMESPACE_BEGIN
|
||||
|
||||
|
||||
namespace CPU
|
||||
{
|
||||
|
||||
|
||||
namespace feature {
|
||||
inline constexpr uint32 lm = 0x00004; // Processor supports long mode (amd64)
|
||||
inline constexpr uint32 mmx = 0x00010; // Processor supports MMX instructions
|
||||
inline constexpr uint32 sse = 0x00100; // Processor supports SSE instructions
|
||||
inline constexpr uint32 sse2 = 0x00200; // Processor supports SSE2 instructions
|
||||
inline constexpr uint32 sse3 = 0x00400; // Processor supports SSE3 instructions
|
||||
inline constexpr uint32 ssse3 = 0x00800; // Processor supports SSSE3 instructions
|
||||
inline constexpr uint32 sse4_1 = 0x01000; // Processor supports SSE4.1 instructions
|
||||
inline constexpr uint32 sse4_2 = 0x02000; // Processor supports SSE4.2 instructions
|
||||
inline constexpr uint32 avx = 0x10000; // Processor supports AVX instructions
|
||||
inline constexpr uint32 avx2 = 0x20000; // Processor supports AVX2 instructions
|
||||
} // namespace feature
|
||||
|
||||
|
||||
#ifdef MPT_ENABLE_ARCH_INTRINSICS
|
||||
|
||||
|
||||
extern uint32 EnabledFeatures;
|
||||
|
||||
|
||||
struct Info
|
||||
{
|
||||
public:
|
||||
uint32 AvailableFeatures = 0;
|
||||
uint32 CPUID = 0;
|
||||
char VendorID[16+1] = {};
|
||||
char BrandID[4*4*3+1] = {};
|
||||
uint16 Family = 0;
|
||||
uint8 Model = 0;
|
||||
uint8 Stepping = 0;
|
||||
private:
|
||||
Info();
|
||||
public:
|
||||
static const Info & Get();
|
||||
};
|
||||
|
||||
|
||||
void EnableAvailableFeatures();
|
||||
|
||||
|
||||
struct AvailableFeaturesEnabler
|
||||
{
|
||||
AvailableFeaturesEnabler()
|
||||
{
|
||||
EnableAvailableFeatures();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// enabled processor features for inline asm and intrinsics
|
||||
MPT_FORCEINLINE uint32 GetEnabledFeatures()
|
||||
{
|
||||
return EnabledFeatures;
|
||||
}
|
||||
|
||||
MPT_FORCEINLINE bool HasFeatureSet(uint32 features)
|
||||
{
|
||||
return features == (GetEnabledFeatures() & features);
|
||||
}
|
||||
|
||||
|
||||
#endif // MPT_ENABLE_ARCH_INTRINSICS
|
||||
|
||||
|
||||
uint32 GetMinimumFeatures();
|
||||
|
||||
|
||||
} // namespace CPU
|
||||
|
||||
|
||||
OPENMPT_NAMESPACE_END
|
Loading…
Add table
Add a link
Reference in a new issue