Skip to content

Commit

Permalink
Extend CPU capabilities detection for osx-arm64 (dotnet#62832)
Browse files Browse the repository at this point in the history
  • Loading branch information
neon-sunset committed Dec 17, 2021
1 parent 3fd8d40 commit fdf28da
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions src/coreclr/pal/src/misc/jitsupport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,18 +260,39 @@ PAL_GetJitCpuCapabilityFlags(CORJIT_FLAGS *flags)
int64_t valueFromSysctl = 0;
size_t sz = sizeof(valueFromSysctl);

if ((sysctlbyname("hw.optional.armv8_1_atomics", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Atomics);
if ((sysctlbyname("hw.optional.arm.FEAT_AES", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Aes);

if ((sysctlbyname("hw.optional.armv8_crc32", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Crc32);

if ((sysctlbyname("hw.optional.arm.FEAT_DotProd", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Dp);

if ((sysctlbyname("hw.optional.arm.FEAT_RDM", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Rdm);

if ((sysctlbyname("hw.optional.arm.FEAT_SHA1", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Sha1);

if ((sysctlbyname("hw.optional.arm.FEAT_SHA256", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Sha256);

if ((sysctlbyname("hw.optional.armv8_1_atomics", &valueFromSysctl, &sz, nullptr, 0) == 0) && (valueFromSysctl != 0))
flags->Set(InstructionSet_Atomics);
#endif // HAVE_SYSCTLBYNAME
// CoreCLR SIMD and FP support is included in ARM64 baseline
// On exceptional basis platforms may leave out support, but CoreCLR does not
// yet support such platforms
// Set baseline flags if OS has not exposed mechanism for us to determine CPU capabilities
flags->Set(InstructionSet_ArmBase);
flags->Set(InstructionSet_AdvSimd);

#if defined(TARGET_OSX) && defined(TARGET_ARM64)
// osx-arm64 never traps DC ZVA execution
flags->Set(InstructionSet_Dczva);
#endif

// flags->Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_FP);
#endif // HAVE_AUXV_HWCAP_H
#elif defined(TARGET_ARM64)
Expand Down

0 comments on commit fdf28da

Please sign in to comment.