[Arm64] Treat methods of non-generic Vector64 and Vector128 classes as intrinsics...
authorEgor Chesakov <Egor.Chesakov@microsoft.com>
Sat, 8 Aug 2020 00:51:23 +0000 (17:51 -0700)
committerGitHub <noreply@github.com>
Sat, 8 Aug 2020 00:51:23 +0000 (17:51 -0700)
src/coreclr/src/zap/zapinfo.cpp

index e997efa..ff12d96 100644 (file)
@@ -2171,8 +2171,11 @@ DWORD FilterNamedIntrinsicMethodAttribs(ZapInfo* pZapInfo, DWORD attribs, CORINF
         fTreatAsRegularMethodCall = fIsGetIsSupportedMethod && fIsPlatformHWIntrinsic;
 
 #if defined(TARGET_ARM64)
-        // On Arm64 AdvSimd ISA is required by CoreCLR, so we can expand Vector64<T> and Vector128<T> methods.
-        fTreatAsRegularMethodCall |= !fIsPlatformHWIntrinsic && fIsHWIntrinsic && (strcmp(className, "Vector64`1") != 0) && (strcmp(className, "Vector128`1") != 0);
+        // On Arm64 AdvSimd ISA is required by CoreCLR, so we can expand Vector64<T> and Vector128<T> generic methods (e.g. Vector64<byte>.get_Zero)
+        // as well as Vector64 and Vector128 methods (e.g. Vector128.CreateScalarUnsafe).
+        fTreatAsRegularMethodCall |= !fIsPlatformHWIntrinsic && fIsHWIntrinsic
+            && (strncmp(className, "Vector64", _countof("Vector64") - 1) != 0)
+            && (strncmp(className, "Vector128", _countof("Vector128") - 1) != 0);
 #else
         fTreatAsRegularMethodCall |= !fIsPlatformHWIntrinsic && fIsHWIntrinsic;
 #endif