Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 2b9e70f

Browse files
sdmacleaBruceForstall
authored andcommitted
[Arm64] Enable SIMD (#14633)
* [Arm64] EXTERNAL_FeatureSIMD_Default = 1 * [Arm64] Enable SIMD compilation * [Arm64] Enable SIMD in crossgen * [Arm64] Allow SIMD in altjit Add flag SIMD16ByteOnly Set COMPlus_SIMD16ByteOnly=1 in x64_arm64_altjit.cmd If SIMD16ByteOnly, limit clear FLAG_USE_AVX2 to disable SIMD32 vector size Enable SIMD in protonjit * Fix #if per feedback
1 parent cced4d7 commit 2b9e70f

File tree

6 files changed

+36
-6
lines changed

6 files changed

+36
-6
lines changed

src/inc/clrconfigvalues.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -529,14 +529,18 @@ CONFIG_DWORD_INFO_EX(INTERNAL_JitLoopHoistStats, W("JitLoopHoistStats"), 0, "Dis
529529
CONFIG_DWORD_INFO_EX(INTERNAL_JitDebugLogLoopCloning, W("JitDebugLogLoopCloning"), 0, "In debug builds log places where loop cloning optimizations are performed on the fast path.", CLRConfig::REGUTIL_default);
530530
CONFIG_DWORD_INFO_EX(INTERNAL_JitVNMapSelLimit, W("JitVNMapSelLimit"), 0, "If non-zero, assert if # of VNF_MapSelect applications considered reaches this", CLRConfig::REGUTIL_default)
531531
RETAIL_CONFIG_DWORD_INFO(INTERNAL_JitVNMapSelBudget, W("JitVNMapSelBudget"), 100, "Max # of MapSelect's considered for a particular top-level invocation.")
532-
#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
532+
#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_) || defined(_TARGET_ARM64_)
533533
#define EXTERNAL_FeatureSIMD_Default 1
534-
#define EXTERNAL_JitEnableAVX_Default 1
535-
#else // !defined(_TARGET_AMD64_) && !defined(_TARGET_X86_)
534+
#else // !(defined(_TARGET_AMD64_) || defined(_TARGET_X86_) || defined(_TARGET_ARM64_))
536535
#define EXTERNAL_FeatureSIMD_Default 0
536+
#endif // !(defined(_TARGET_AMD64_) || defined(_TARGET_X86_) || defined(_TARGET_ARM64_))
537+
#if defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
538+
#define EXTERNAL_JitEnableAVX_Default 1
539+
#else // !(defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
537540
#define EXTERNAL_JitEnableAVX_Default 0
538-
#endif // !defined(_TARGET_AMD64_) && !defined(_TARGET_X86_)
541+
#endif // !(defined(_TARGET_AMD64_) || defined(_TARGET_X86_)
539542
RETAIL_CONFIG_DWORD_INFO_EX(EXTERNAL_FeatureSIMD, W("FeatureSIMD"), EXTERNAL_FeatureSIMD_Default, "Enable SIMD support with companion SIMDVector.dll", CLRConfig::REGUTIL_default)
543+
RETAIL_CONFIG_DWORD_INFO(INTERNAL_SIMD16ByteOnly, W("SIMD16ByteOnly"), 0, "Limit maximum SIMD vector length to 16 bytes (used by x64_arm64_altjit)")
540544
RETAIL_CONFIG_DWORD_INFO_EX(EXTERNAL_EnableAVX, W("EnableAVX"), EXTERNAL_JitEnableAVX_Default, "Enable AVX instruction set for wide operations as default", CLRConfig::REGUTIL_default)
541545

542546
#if defined(_TARGET_X86_) || defined(_TARGET_AMD64_)

src/jit/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ if (CLR_CMAKE_TARGET_ARCH_AMD64 OR (CLR_CMAKE_TARGET_ARCH_I386 AND NOT CLR_CMAKE
99
add_definitions(-DFEATURE_HW_INTRINSICS)
1010
endif ()
1111

12+
if (CLR_CMAKE_TARGET_ARCH_ARM64)
13+
add_definitions(-DFEATURE_SIMD)
14+
endif ()
15+
1216
# JIT_BUILD disables certain PAL_TRY debugging features
1317
add_definitions(-DJIT_BUILD=1)
1418

@@ -141,6 +145,7 @@ set( JIT_ARM64_SOURCES
141145
lowerarm64.cpp
142146
lsraarmarch.cpp
143147
lsraarm64.cpp
148+
simd.cpp
144149
targetarm64.cpp
145150
unwindarm.cpp
146151
unwindarm64.cpp

src/jit/protononjit/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ add_definitions(-DFEATURE_NO_HOST)
55
add_definitions(-DSELF_NO_HOST)
66
remove_definitions(-DFEATURE_MERGE_JIT_AND_ENGINE)
77

8-
remove_definitions(-DFEATURE_SIMD)
9-
108
remove_definitions(-DFEATURE_HW_INTRINSICS)
119

1210
if(FEATURE_READYTORUN)
@@ -15,6 +13,7 @@ endif(FEATURE_READYTORUN)
1513

1614
if (CLR_CMAKE_PLATFORM_ARCH_I386)
1715
remove_definitions(-D_TARGET_X86_=1)
16+
remove_definitions(-DFEATURE_SIMD)
1817
add_definitions(-D_TARGET_ARM_)
1918
set(JIT_ARCH_ALTJIT_SOURCES ${JIT_ARM_SOURCES})
2019
set(JIT_ARCH_LINK_LIBRARIES gcinfo_arm)

src/vm/codeman.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1432,10 +1432,23 @@ void EEJitManager::SetCpuInfo()
14321432
{
14331433
CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_FEATURE_SIMD);
14341434
}
1435+
1436+
if (CLRConfig::GetConfigValue(CLRConfig::INTERNAL_SIMD16ByteOnly) != 0)
1437+
{
1438+
CPUCompileFlags.Clear(CORJIT_FLAGS::CORJIT_FLAG_USE_AVX2);
1439+
}
14351440
}
14361441
}
14371442
#endif // defined(_TARGET_X86_) || defined(_TARGET_AMD64_)
14381443

1444+
#if defined(_TARGET_ARM64_)
1445+
static ConfigDWORD fFeatureSIMD;
1446+
if (fFeatureSIMD.val(CLRConfig::EXTERNAL_FeatureSIMD) != 0)
1447+
{
1448+
CPUCompileFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_FEATURE_SIMD);
1449+
}
1450+
#endif
1451+
14391452
m_CPUCompileFlags = CPUCompileFlags;
14401453
}
14411454

src/zap/zapper.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,14 @@ void Zapper::InitializeCompilerFlags(CORCOMPILE_VERSION_INFO * pVersionInfo)
13941394

13951395
#endif // _TARGET_X86_
13961396

1397+
#if defined(_TARGET_ARM64_)
1398+
static ConfigDWORD fFeatureSIMD;
1399+
if (fFeatureSIMD.val(CLRConfig::EXTERNAL_FeatureSIMD) != 0)
1400+
{
1401+
m_pOpt->m_compilerFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_FEATURE_SIMD);
1402+
}
1403+
#endif
1404+
13971405
if ( m_pOpt->m_compilerFlags.IsSet(CORJIT_FLAGS::CORJIT_FLAG_DEBUG_INFO)
13981406
&& m_pOpt->m_compilerFlags.IsSet(CORJIT_FLAGS::CORJIT_FLAG_DEBUG_CODE)
13991407
&& m_pOpt->m_compilerFlags.IsSet(CORJIT_FLAGS::CORJIT_FLAG_PROF_ENTERLEAVE))

tests/x64_arm64_altjit.cmd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ set COMPlus_AltJitName=protononjit.dll
44
set COMPlus_NoGuiOnAssert=1
55
set COMPlus_ContinueOnAssert=0
66
set COMPlus_AltJitAssertOnNYI=1
7+
set COMPlus_SIMD16ByteOnly=1

0 commit comments

Comments
 (0)