Expose AVX512 variants of AVX, AVX2, and FMA instructions (#85228)
authorTanner Gooding <tagoo@outlook.com>
Mon, 24 Apr 2023 18:08:17 +0000 (11:08 -0700)
committerGitHub <noreply@github.com>
Mon, 24 Apr 2023 18:08:17 +0000 (11:08 -0700)
commit5d186d95d3a371313d3a56dd4329c352181d1f16
tree1cfb54a43b6fcd73b1093656ae25aff1af78115d
parentc3a2bce1396441511e4a97f174e4d43c7648624f
Expose AVX512 variants of AVX, AVX2, and FMA instructions (#85228)

* Expose various Broadcast methods for Avx512F, Avx512BW, and Avx512DQ

* Expose ExtractVector128/256 and InsertVector128/256 methods for Avx512F and Avx512DQ

* Expose ShiftLeftLogicalVariable, ShiftRightArithmeticVariable, and ShiftRightLogicalVariable on Avx512F and Avx512BW

* Expose various FusedMultiplyAdd APIs for Avx512F

* Expose various Permute intrinsics for Avx512F, Avx512F.VL, Avx512BW, and Avx512BW.VL

* Add a cpuid check for AVX512_VBMI

* Add various Permute intrinsics for Avx512Vbmi and Avx512Vbmi.VL

* Apply formatting patch

* Ensure Avx512Vbmi is recognized

* Fixup the InstructionSetDesc for Avx512Vbmi

* Update JIT/EE Version Identifier

* Fix casing in InstructionSetDesc
50 files changed:
src/coreclr/inc/clrconfigvalues.h
src/coreclr/inc/corinfoinstructionset.h
src/coreclr/inc/jiteeversionguid.h
src/coreclr/inc/readytoruninstructionset.h
src/coreclr/jit/codegenxarch.cpp
src/coreclr/jit/compiler.cpp
src/coreclr/jit/emitxarch.cpp
src/coreclr/jit/gentree.cpp
src/coreclr/jit/hwintrinsiccodegenxarch.cpp
src/coreclr/jit/hwintrinsiclistxarch.h
src/coreclr/jit/hwintrinsicxarch.cpp
src/coreclr/jit/instrsxarch.h
src/coreclr/jit/jitconfigvalues.h
src/coreclr/jit/lowerxarch.cpp
src/coreclr/jit/lsraxarch.cpp
src/coreclr/nativeaot/Runtime/IntrinsicConstants.h
src/coreclr/nativeaot/Runtime/startup.cpp
src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSet.cs
src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSetHelper.cs
src/coreclr/tools/Common/JitInterface/CorInfoInstructionSet.cs
src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt
src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/HardwareIntrinsicHelpers.Aot.cs
src/coreclr/vm/codeman.cpp
src/libraries/System.Private.CoreLib/src/ILLink/ILLink.Substitutions.NoX86Intrinsics.xml
src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512BW.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512BW.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512DQ.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512DQ.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512F.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512F.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512Vbmi.PlatformNotSupported.cs [new file with mode: 0644]
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Avx512Vbmi.cs [new file with mode: 0644]
src/libraries/System.Runtime.Intrinsics/ref/System.Runtime.Intrinsics.cs
src/tests/Common/GenerateHWIntrinsicTests/GenerateHWIntrinsicTests_X86.cs
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512BW_VL_Vector128/Avx512BW_VL_Vector128_r.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512BW_VL_Vector128/Avx512BW_VL_Vector128_ro.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512BW_VL_Vector128/Program.Avx512BW_VL_Vector128.cs [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512BW_VL_Vector256/Avx512BW_VL_Vector256_r.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512BW_VL_Vector256/Avx512BW_VL_Vector256_ro.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512BW_VL_Vector256/Program.Avx512BW_VL_Vector256.cs [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi/Avx512Vbmi_r.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi/Avx512Vbmi_ro.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi/Program.Avx512Vbmi.cs [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi_VL_Vector128/Avx512Vbmi_VL_Vector128_r.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi_VL_Vector128/Avx512Vbmi_VL_Vector128_ro.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi_VL_Vector128/Program.Avx512Vbmi_VL_Vector128.cs [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi_VL_Vector256/Avx512Vbmi_VL_Vector256_r.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi_VL_Vector256/Avx512Vbmi_VL_Vector256_ro.csproj [new file with mode: 0644]
src/tests/JIT/HardwareIntrinsics/X86_Avx512/Avx512Vbmi_VL_Vector256/Program.Avx512Vbmi_VL_Vector256.cs [new file with mode: 0644]