mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 16:44:36 +00:00
M1 Support for cpu detection
This commit is contained in:
parent
960ea2aa5a
commit
eb92a8927e
2 changed files with 15 additions and 8 deletions
|
|
@ -77,10 +77,10 @@ enum ProcessorProperties
|
||||||
CPU_PROP_SSE4_1 = (1<<9), ///< Supports SSE4_1 instruction set extension.
|
CPU_PROP_SSE4_1 = (1<<9), ///< Supports SSE4_1 instruction set extension.
|
||||||
CPU_PROP_SSE4_2 = (1<<10), ///< Supports SSE4_2 instruction set extension.
|
CPU_PROP_SSE4_2 = (1<<10), ///< Supports SSE4_2 instruction set extension.
|
||||||
CPU_PROP_AVX = (1<<11), ///< Supports AVX256 instruction set extension.
|
CPU_PROP_AVX = (1<<11), ///< Supports AVX256 instruction set extension.
|
||||||
CPU_PROP_MP = (1<<11), ///< This is a multi-processor system.
|
CPU_PROP_MP = (1<<12), ///< This is a multi-processor system.
|
||||||
CPU_PROP_LE = (1<<12), ///< This processor is LITTLE ENDIAN.
|
CPU_PROP_LE = (1<<13), ///< This processor is LITTLE ENDIAN.
|
||||||
CPU_PROP_64bit = (1<<13), ///< This processor is 64-bit capable
|
CPU_PROP_64bit = (1<<14), ///< This processor is 64-bit capable
|
||||||
CPU_PROP_NEON = (1<<14), ///< Supports the Arm Neon instruction set extension.
|
CPU_PROP_NEON = (1<<15), ///< Supports the Arm Neon instruction set extension.
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Processor info manager.
|
/// Processor info manager.
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ int _getSysCTLvalue(const char key[], T * dest) {
|
||||||
Platform::SystemInfo_struct Platform::SystemInfo;
|
Platform::SystemInfo_struct Platform::SystemInfo;
|
||||||
|
|
||||||
#define BASE_MHZ_SPEED 1000
|
#define BASE_MHZ_SPEED 1000
|
||||||
|
#define BASE_APPLE_SILICON_MHZ_SPEED 3200
|
||||||
|
|
||||||
static void detectCpuFeatures(U32 &procflags)
|
static void detectCpuFeatures(U32 &procflags)
|
||||||
{
|
{
|
||||||
|
|
@ -126,8 +127,10 @@ static void detectCpuFeatures(U32 &procflags)
|
||||||
procflags |= CPU_PROP_AVX;
|
procflags |= CPU_PROP_AVX;
|
||||||
|
|
||||||
#elif defined(TORQUE_CPU_ARM64)
|
#elif defined(TORQUE_CPU_ARM64)
|
||||||
// All Apple Cpus have Neon
|
|
||||||
procflags |= CPU_PROP_NEON;
|
err = _getSysCTLvalue<U32>("hw.optional.neon", &lraw);
|
||||||
|
if ((err==0)&&(lraw==1))
|
||||||
|
procflags |= CPU_PROP_NEON;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -170,11 +173,15 @@ void Processor::init()
|
||||||
if (err)
|
if (err)
|
||||||
vendor[0] = '\0';
|
vendor[0] = '\0';
|
||||||
|
|
||||||
// The Gestalt version was known to have issues with some Processor Upgrade cards
|
// Note: hw.cpufrequency seems to be missing on the M1. For Apple Silicon,
|
||||||
// but it is uncertain whether this version has similar issues.
|
// we will assume the base frequency of the M1 which is 3.2ghz
|
||||||
err = _getSysCTLvalue<U64>("hw.cpufrequency", &llraw);
|
err = _getSysCTLvalue<U64>("hw.cpufrequency", &llraw);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
#if defined(TORQUE_CPU_ARM64)
|
||||||
|
llraw = BASE_APPLE_SILICON_MHZ_SPEED;
|
||||||
|
#else
|
||||||
llraw = BASE_MHZ_SPEED;
|
llraw = BASE_MHZ_SPEED;
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
llraw /= 1000000;
|
llraw /= 1000000;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue