From 8d34db07ce56536882d4dca97a7e49b45fb5f362 Mon Sep 17 00:00:00 2001 From: Carol Eidt Date: Sat, 3 Nov 2018 09:17:48 -0700 Subject: Add Windows support for Arm64 HW Intrinsics Also, fix Crypto test and ensure that featureSIMD is taken into account Fix #18175 Fix #20088 --- src/vm/codeman.cpp | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'src/vm/codeman.cpp') diff --git a/src/vm/codeman.cpp b/src/vm/codeman.cpp index 1cb54f2e4d..1ea4303e34 100644 --- a/src/vm/codeman.cpp +++ b/src/vm/codeman.cpp @@ -1475,17 +1475,32 @@ void EEJitManager::SetCpuInfo() } #endif // defined(_TARGET_X86_) || defined(_TARGET_AMD64_) -#if defined(_TARGET_ARM64_) && defined(FEATURE_PAL) - PAL_GetJitCpuCapabilityFlags(&CPUCompileFlags); -#endif - #if defined(_TARGET_ARM64_) static ConfigDWORD fFeatureSIMD; if (fFeatureSIMD.val(CLRConfig::EXTERNAL_FeatureSIMD) != 0) { CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_FEATURE_SIMD); } -#endif +#if defined(FEATURE_PAL) + PAL_GetJitCpuCapabilityFlags(&CPUCompileFlags); +#elif defined(_WIN64) + // FP and SIMD support are enabled by default + CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_SIMD); + CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_FP); + // PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE (30) + if (IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE)) + { + CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_AES); + CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_SHA1); + CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_SHA256); + } + // PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE (31) + if (IsProcessorFeaturePresent(PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE)) + { + CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_HAS_ARM64_CRC32); + } +#endif // _WIN64 +#endif // _TARGET_ARM64_ m_CPUCompileFlags = CPUCompileFlags; } -- cgit v1.2.3