diff --git a/src/coreclr/inc/corinfoinstructionset.h b/src/coreclr/inc/corinfoinstructionset.h index 6b4adbb125ed71..e716ef109a3eaf 100644 --- a/src/coreclr/inc/corinfoinstructionset.h +++ b/src/coreclr/inc/corinfoinstructionset.h @@ -77,40 +77,42 @@ enum CORINFO_InstructionSet InstructionSet_AVX512VBMI=32, InstructionSet_AVX512VBMI_VL=33, InstructionSet_AVX10v1=34, - InstructionSet_VectorT128=35, - InstructionSet_VectorT256=36, - InstructionSet_VectorT512=37, - InstructionSet_X86Base_X64=38, - InstructionSet_SSE_X64=39, - InstructionSet_SSE2_X64=40, - InstructionSet_SSE3_X64=41, - InstructionSet_SSSE3_X64=42, - InstructionSet_SSE41_X64=43, - InstructionSet_SSE42_X64=44, - InstructionSet_AVX_X64=45, - InstructionSet_AVX2_X64=46, - InstructionSet_AES_X64=47, - InstructionSet_BMI1_X64=48, - InstructionSet_BMI2_X64=49, - InstructionSet_FMA_X64=50, - InstructionSet_LZCNT_X64=51, - InstructionSet_PCLMULQDQ_X64=52, - InstructionSet_POPCNT_X64=53, - InstructionSet_AVXVNNI_X64=54, - InstructionSet_MOVBE_X64=55, - InstructionSet_X86Serialize_X64=56, - InstructionSet_EVEX_X64=57, - InstructionSet_AVX512F_X64=58, - InstructionSet_AVX512F_VL_X64=59, - InstructionSet_AVX512BW_X64=60, - InstructionSet_AVX512BW_VL_X64=61, - InstructionSet_AVX512CD_X64=62, - InstructionSet_AVX512CD_VL_X64=63, - InstructionSet_AVX512DQ_X64=64, - InstructionSet_AVX512DQ_VL_X64=65, - InstructionSet_AVX512VBMI_X64=66, - InstructionSet_AVX512VBMI_VL_X64=67, - InstructionSet_AVX10v1_X64=68, + InstructionSet_AVX10v1_V512=35, + InstructionSet_VectorT128=36, + InstructionSet_VectorT256=37, + InstructionSet_VectorT512=38, + InstructionSet_X86Base_X64=39, + InstructionSet_SSE_X64=40, + InstructionSet_SSE2_X64=41, + InstructionSet_SSE3_X64=42, + InstructionSet_SSSE3_X64=43, + InstructionSet_SSE41_X64=44, + InstructionSet_SSE42_X64=45, + InstructionSet_AVX_X64=46, + InstructionSet_AVX2_X64=47, + InstructionSet_AES_X64=48, + InstructionSet_BMI1_X64=49, + InstructionSet_BMI2_X64=50, + InstructionSet_FMA_X64=51, + InstructionSet_LZCNT_X64=52, + InstructionSet_PCLMULQDQ_X64=53, + InstructionSet_POPCNT_X64=54, + InstructionSet_AVXVNNI_X64=55, + InstructionSet_MOVBE_X64=56, + InstructionSet_X86Serialize_X64=57, + InstructionSet_EVEX_X64=58, + InstructionSet_AVX512F_X64=59, + InstructionSet_AVX512F_VL_X64=60, + InstructionSet_AVX512BW_X64=61, + InstructionSet_AVX512BW_VL_X64=62, + InstructionSet_AVX512CD_X64=63, + InstructionSet_AVX512CD_VL_X64=64, + InstructionSet_AVX512DQ_X64=65, + InstructionSet_AVX512DQ_VL_X64=66, + InstructionSet_AVX512VBMI_X64=67, + InstructionSet_AVX512VBMI_VL_X64=68, + InstructionSet_AVX10v1_X64=69, + InstructionSet_AVX10v1_V512_X64=70, #endif // TARGET_AMD64 #ifdef TARGET_X86 InstructionSet_X86Base=1, @@ -147,40 +149,42 @@ enum CORINFO_InstructionSet InstructionSet_AVX512VBMI=32, InstructionSet_AVX512VBMI_VL=33, InstructionSet_AVX10v1=34, - InstructionSet_VectorT128=35, - InstructionSet_VectorT256=36, - InstructionSet_VectorT512=37, - InstructionSet_X86Base_X64=38, - InstructionSet_SSE_X64=39, - InstructionSet_SSE2_X64=40, - InstructionSet_SSE3_X64=41, - InstructionSet_SSSE3_X64=42, - InstructionSet_SSE41_X64=43, - InstructionSet_SSE42_X64=44, - InstructionSet_AVX_X64=45, - InstructionSet_AVX2_X64=46, - InstructionSet_AES_X64=47, - InstructionSet_BMI1_X64=48, - InstructionSet_BMI2_X64=49, - InstructionSet_FMA_X64=50, - InstructionSet_LZCNT_X64=51, - InstructionSet_PCLMULQDQ_X64=52, - InstructionSet_POPCNT_X64=53, - InstructionSet_AVXVNNI_X64=54, - InstructionSet_MOVBE_X64=55, - InstructionSet_X86Serialize_X64=56, - InstructionSet_EVEX_X64=57, - InstructionSet_AVX512F_X64=58, - InstructionSet_AVX512F_VL_X64=59, - InstructionSet_AVX512BW_X64=60, - InstructionSet_AVX512BW_VL_X64=61, - InstructionSet_AVX512CD_X64=62, - InstructionSet_AVX512CD_VL_X64=63, - InstructionSet_AVX512DQ_X64=64, - InstructionSet_AVX512DQ_VL_X64=65, - InstructionSet_AVX512VBMI_X64=66, - InstructionSet_AVX512VBMI_VL_X64=67, - InstructionSet_AVX10v1_X64=68, + InstructionSet_AVX10v1_V512=35, + InstructionSet_VectorT128=36, + InstructionSet_VectorT256=37, + InstructionSet_VectorT512=38, + InstructionSet_X86Base_X64=39, + InstructionSet_SSE_X64=40, + InstructionSet_SSE2_X64=41, + InstructionSet_SSE3_X64=42, + InstructionSet_SSSE3_X64=43, + InstructionSet_SSE41_X64=44, + InstructionSet_SSE42_X64=45, + InstructionSet_AVX_X64=46, + InstructionSet_AVX2_X64=47, + InstructionSet_AES_X64=48, + InstructionSet_BMI1_X64=49, + InstructionSet_BMI2_X64=50, + InstructionSet_FMA_X64=51, + InstructionSet_LZCNT_X64=52, + InstructionSet_PCLMULQDQ_X64=53, + InstructionSet_POPCNT_X64=54, + InstructionSet_AVXVNNI_X64=55, + InstructionSet_MOVBE_X64=56, + InstructionSet_X86Serialize_X64=57, + InstructionSet_EVEX_X64=58, + InstructionSet_AVX512F_X64=59, + InstructionSet_AVX512F_VL_X64=60, + InstructionSet_AVX512BW_X64=61, + InstructionSet_AVX512BW_VL_X64=62, + InstructionSet_AVX512CD_X64=63, + InstructionSet_AVX512CD_VL_X64=64, + InstructionSet_AVX512DQ_X64=65, + InstructionSet_AVX512DQ_VL_X64=66, + InstructionSet_AVX512VBMI_X64=67, + InstructionSet_AVX512VBMI_VL_X64=68, + InstructionSet_AVX10v1_X64=69, + InstructionSet_AVX10v1_V512_X64=70, #endif // TARGET_X86 }; @@ -358,6 +362,8 @@ struct CORINFO_InstructionSetFlags AddInstructionSet(InstructionSet_AVX512VBMI_VL_X64); if (HasInstructionSet(InstructionSet_AVX10v1)) AddInstructionSet(InstructionSet_AVX10v1_X64); + if (HasInstructionSet(InstructionSet_AVX10v1_V512)) + AddInstructionSet(InstructionSet_AVX10v1_V512_X64); #endif // TARGET_AMD64 #ifdef TARGET_X86 #endif // TARGET_X86 @@ -562,6 +568,10 @@ inline CORINFO_InstructionSetFlags EnsureInstructionSetFlagsAreValid(CORINFO_Ins resultflags.RemoveInstructionSet(InstructionSet_AVX10v1); if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_X64) && !resultflags.HasInstructionSet(InstructionSet_AVX10v1)) resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_X64); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512_X64)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512_X64) && !resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512_X64); if (resultflags.HasInstructionSet(InstructionSet_SSE) && !resultflags.HasInstructionSet(InstructionSet_X86Base)) resultflags.RemoveInstructionSet(InstructionSet_SSE); if (resultflags.HasInstructionSet(InstructionSet_SSE2) && !resultflags.HasInstructionSet(InstructionSet_SSE)) @@ -638,6 +648,30 @@ inline CORINFO_InstructionSetFlags EnsureInstructionSetFlagsAreValid(CORINFO_Ins resultflags.RemoveInstructionSet(InstructionSet_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet_AVX10v1) && !resultflags.HasInstructionSet(InstructionSet_EVEX)) resultflags.RemoveInstructionSet(InstructionSet_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_EVEX)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX10v1)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512F)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512F_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512CD)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512CD_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512BW)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512BW_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512DQ)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512DQ_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512VBMI)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512VBMI_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); if (resultflags.HasInstructionSet(InstructionSet_VectorT128) && !resultflags.HasInstructionSet(InstructionSet_SSE2)) resultflags.RemoveInstructionSet(InstructionSet_VectorT128); if (resultflags.HasInstructionSet(InstructionSet_VectorT256) && !resultflags.HasInstructionSet(InstructionSet_AVX2)) @@ -728,6 +762,30 @@ inline CORINFO_InstructionSetFlags EnsureInstructionSetFlagsAreValid(CORINFO_Ins resultflags.RemoveInstructionSet(InstructionSet_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet_AVX10v1) && !resultflags.HasInstructionSet(InstructionSet_EVEX)) resultflags.RemoveInstructionSet(InstructionSet_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_EVEX)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX10v1)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512F)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512F_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512CD)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512CD_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512BW)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512BW_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512DQ)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512DQ_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512VBMI)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet_AVX10v1_V512) && !resultflags.HasInstructionSet(InstructionSet_AVX512VBMI_VL)) + resultflags.RemoveInstructionSet(InstructionSet_AVX10v1_V512); if (resultflags.HasInstructionSet(InstructionSet_VectorT128) && !resultflags.HasInstructionSet(InstructionSet_SSE2)) resultflags.RemoveInstructionSet(InstructionSet_VectorT128); if (resultflags.HasInstructionSet(InstructionSet_VectorT256) && !resultflags.HasInstructionSet(InstructionSet_AVX2)) @@ -938,6 +996,10 @@ inline const char *InstructionSetToString(CORINFO_InstructionSet instructionSet) return "AVX10v1"; case InstructionSet_AVX10v1_X64 : return "AVX10v1_X64"; + case InstructionSet_AVX10v1_V512 : + return "AVX10v1_V512"; + case InstructionSet_AVX10v1_V512_X64 : + return "AVX10v1_V512_X64"; case InstructionSet_VectorT128 : return "VectorT128"; case InstructionSet_VectorT256 : @@ -1014,6 +1076,8 @@ inline const char *InstructionSetToString(CORINFO_InstructionSet instructionSet) return "AVX512VBMI_VL"; case InstructionSet_AVX10v1 : return "AVX10v1"; + case InstructionSet_AVX10v1_V512 : + return "AVX10v1_V512"; case InstructionSet_VectorT128 : return "VectorT128"; case InstructionSet_VectorT256 : @@ -1086,6 +1150,7 @@ inline CORINFO_InstructionSet InstructionSetFromR2RInstructionSet(ReadyToRunInst case READYTORUN_INSTRUCTION_Avx512Vbmi: return InstructionSet_AVX512VBMI; case READYTORUN_INSTRUCTION_Avx512Vbmi_VL: return InstructionSet_AVX512VBMI_VL; case READYTORUN_INSTRUCTION_Avx10v1: return InstructionSet_AVX10v1; + case READYTORUN_INSTRUCTION_Avx10v1_V512: return InstructionSet_AVX10v1_V512; case READYTORUN_INSTRUCTION_VectorT128: return InstructionSet_VectorT128; case READYTORUN_INSTRUCTION_VectorT256: return InstructionSet_VectorT256; case READYTORUN_INSTRUCTION_VectorT512: return InstructionSet_VectorT512; @@ -1122,6 +1187,7 @@ inline CORINFO_InstructionSet InstructionSetFromR2RInstructionSet(ReadyToRunInst case READYTORUN_INSTRUCTION_Avx512Vbmi: return InstructionSet_AVX512VBMI; case READYTORUN_INSTRUCTION_Avx512Vbmi_VL: return InstructionSet_AVX512VBMI_VL; case READYTORUN_INSTRUCTION_Avx10v1: return InstructionSet_AVX10v1; + case READYTORUN_INSTRUCTION_Avx10v1_V512: return InstructionSet_AVX10v1_V512; case READYTORUN_INSTRUCTION_VectorT128: return InstructionSet_VectorT128; case READYTORUN_INSTRUCTION_VectorT256: return InstructionSet_VectorT256; case READYTORUN_INSTRUCTION_VectorT512: return InstructionSet_VectorT512; diff --git a/src/coreclr/inc/jiteeversionguid.h b/src/coreclr/inc/jiteeversionguid.h index 54c651d4b287d6..dce6db112be748 100644 --- a/src/coreclr/inc/jiteeversionguid.h +++ b/src/coreclr/inc/jiteeversionguid.h @@ -43,11 +43,11 @@ typedef const GUID *LPCGUID; #define GUID_DEFINED #endif // !GUID_DEFINED -constexpr GUID JITEEVersionIdentifier = { /* a82f62f9-7c17-4994-92e0-7e8401aeaf4d */ - 0xa82f62f9, - 0x7c17, - 0x4994, - {0x92, 0xe0, 0x7e, 0x84, 0x01, 0xae, 0xaf, 0x4d} +constexpr GUID JITEEVersionIdentifier = { /* 539f6204-c4bd-4cd3-8ed0-8cd6f60b2912 */ + 0x539f6204, + 0xc4bd, + 0x4cd3, + {0x8e, 0xd0, 0x8c, 0xd6, 0xf6, 0x0b, 0x29, 0x12} }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/coreclr/inc/readytoruninstructionset.h b/src/coreclr/inc/readytoruninstructionset.h index 2ae70d0142de28..40f838a1aafb7d 100644 --- a/src/coreclr/inc/readytoruninstructionset.h +++ b/src/coreclr/inc/readytoruninstructionset.h @@ -54,6 +54,7 @@ enum ReadyToRunInstructionSet READYTORUN_INSTRUCTION_Sve=43, READYTORUN_INSTRUCTION_Avx10v1=44, READYTORUN_INSTRUCTION_EVEX=45, + READYTORUN_INSTRUCTION_Avx10v1_V512=46, }; diff --git a/src/coreclr/tools/Common/Compiler/HardwareIntrinsicHelpers.cs b/src/coreclr/tools/Common/Compiler/HardwareIntrinsicHelpers.cs index 10bd6a803aff22..308fbd0eadb34f 100644 --- a/src/coreclr/tools/Common/Compiler/HardwareIntrinsicHelpers.cs +++ b/src/coreclr/tools/Common/Compiler/HardwareIntrinsicHelpers.cs @@ -137,6 +137,8 @@ public static void AddToBuilder(InstructionSetSupportBuilder builder, int flags) builder.AddSupportedInstructionSet("serialize"); if ((flags & Avx10v1) != 0) builder.AddSupportedInstructionSet("avx10v1"); + if (((flags & Avx10v1) != 0) && ((flags & Avx512f) != 0)) + builder.AddSupportedInstructionSet("avx10v1_v512"); if ((flags & Evex) != 0) builder.AddSupportedInstructionSet("evex"); } @@ -204,6 +206,8 @@ public static int FromInstructionSet(InstructionSet instructionSet) InstructionSet.X64_X86Serialize_X64 => Serialize, InstructionSet.X64_AVX10v1 => Avx10v1, InstructionSet.X64_AVX10v1_X64 => Avx10v1, + InstructionSet.X64_AVX10v1_V512 => (Avx10v1 | Avx512f), + InstructionSet.X64_AVX10v1_V512_X64 => (Avx10v1 | Avx512f), InstructionSet.X64_EVEX => Evex, InstructionSet.X64_EVEX_X64 => Evex, diff --git a/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSet.cs b/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSet.cs index dc8935e185cb9a..4b6c9fdbc1982b 100644 --- a/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSet.cs +++ b/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSet.cs @@ -57,6 +57,7 @@ public enum ReadyToRunInstructionSet Sve=43, Avx10v1=44, EVEX=45, + Avx10v1_V512=46, } } diff --git a/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSetHelper.cs b/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSetHelper.cs index f259bad0418cc5..361aa92bea9555 100644 --- a/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSetHelper.cs +++ b/src/coreclr/tools/Common/Internal/Runtime/ReadyToRunInstructionSetHelper.cs @@ -122,6 +122,8 @@ public static class ReadyToRunInstructionSetHelper case InstructionSet.X64_AVX512VBMI_VL_X64: return ReadyToRunInstructionSet.Avx512Vbmi_VL; case InstructionSet.X64_AVX10v1: return ReadyToRunInstructionSet.Avx10v1; case InstructionSet.X64_AVX10v1_X64: return ReadyToRunInstructionSet.Avx10v1; + case InstructionSet.X64_AVX10v1_V512: return ReadyToRunInstructionSet.Avx10v1_V512; + case InstructionSet.X64_AVX10v1_V512_X64: return ReadyToRunInstructionSet.Avx10v1_V512; case InstructionSet.X64_VectorT128: return ReadyToRunInstructionSet.VectorT128; case InstructionSet.X64_VectorT256: return ReadyToRunInstructionSet.VectorT256; case InstructionSet.X64_VectorT512: return ReadyToRunInstructionSet.VectorT512; @@ -199,6 +201,8 @@ public static class ReadyToRunInstructionSetHelper case InstructionSet.X86_AVX512VBMI_VL_X64: return null; case InstructionSet.X86_AVX10v1: return ReadyToRunInstructionSet.Avx10v1; case InstructionSet.X86_AVX10v1_X64: return null; + case InstructionSet.X86_AVX10v1_V512: return ReadyToRunInstructionSet.Avx10v1_V512; + case InstructionSet.X86_AVX10v1_V512_X64: return null; case InstructionSet.X86_VectorT128: return ReadyToRunInstructionSet.VectorT128; case InstructionSet.X86_VectorT256: return ReadyToRunInstructionSet.VectorT256; case InstructionSet.X86_VectorT512: return ReadyToRunInstructionSet.VectorT512; diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoInstructionSet.cs b/src/coreclr/tools/Common/JitInterface/CorInfoInstructionSet.cs index a8961de2bc368b..3188b0d1dce39b 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoInstructionSet.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoInstructionSet.cs @@ -75,6 +75,7 @@ public enum InstructionSet X64_AVX512VBMI = InstructionSet_X64.AVX512VBMI, X64_AVX512VBMI_VL = InstructionSet_X64.AVX512VBMI_VL, X64_AVX10v1 = InstructionSet_X64.AVX10v1, + X64_AVX10v1_V512 = InstructionSet_X64.AVX10v1_V512, X64_VectorT128 = InstructionSet_X64.VectorT128, X64_VectorT256 = InstructionSet_X64.VectorT256, X64_VectorT512 = InstructionSet_X64.VectorT512, @@ -109,6 +110,7 @@ public enum InstructionSet X64_AVX512VBMI_X64 = InstructionSet_X64.AVX512VBMI_X64, X64_AVX512VBMI_VL_X64 = InstructionSet_X64.AVX512VBMI_VL_X64, X64_AVX10v1_X64 = InstructionSet_X64.AVX10v1_X64, + X64_AVX10v1_V512_X64 = InstructionSet_X64.AVX10v1_V512_X64, X86_X86Base = InstructionSet_X86.X86Base, X86_SSE = InstructionSet_X86.SSE, X86_SSE2 = InstructionSet_X86.SSE2, @@ -143,6 +145,7 @@ public enum InstructionSet X86_AVX512VBMI = InstructionSet_X86.AVX512VBMI, X86_AVX512VBMI_VL = InstructionSet_X86.AVX512VBMI_VL, X86_AVX10v1 = InstructionSet_X86.AVX10v1, + X86_AVX10v1_V512 = InstructionSet_X86.AVX10v1_V512, X86_VectorT128 = InstructionSet_X86.VectorT128, X86_VectorT256 = InstructionSet_X86.VectorT256, X86_VectorT512 = InstructionSet_X86.VectorT512, @@ -177,6 +180,7 @@ public enum InstructionSet X86_AVX512VBMI_X64 = InstructionSet_X86.AVX512VBMI_X64, X86_AVX512VBMI_VL_X64 = InstructionSet_X86.AVX512VBMI_VL_X64, X86_AVX10v1_X64 = InstructionSet_X86.AVX10v1_X64, + X86_AVX10v1_V512_X64 = InstructionSet_X86.AVX10v1_V512_X64, } public enum InstructionSet_ARM64 { @@ -247,40 +251,42 @@ public enum InstructionSet_X64 AVX512VBMI = 32, AVX512VBMI_VL = 33, AVX10v1 = 34, - VectorT128 = 35, - VectorT256 = 36, - VectorT512 = 37, - X86Base_X64 = 38, - SSE_X64 = 39, - SSE2_X64 = 40, - SSE3_X64 = 41, - SSSE3_X64 = 42, - SSE41_X64 = 43, - SSE42_X64 = 44, - AVX_X64 = 45, - AVX2_X64 = 46, - AES_X64 = 47, - BMI1_X64 = 48, - BMI2_X64 = 49, - FMA_X64 = 50, - LZCNT_X64 = 51, - PCLMULQDQ_X64 = 52, - POPCNT_X64 = 53, - AVXVNNI_X64 = 54, - MOVBE_X64 = 55, - X86Serialize_X64 = 56, - EVEX_X64 = 57, - AVX512F_X64 = 58, - AVX512F_VL_X64 = 59, - AVX512BW_X64 = 60, - AVX512BW_VL_X64 = 61, - AVX512CD_X64 = 62, - AVX512CD_VL_X64 = 63, - AVX512DQ_X64 = 64, - AVX512DQ_VL_X64 = 65, - AVX512VBMI_X64 = 66, - AVX512VBMI_VL_X64 = 67, - AVX10v1_X64 = 68, + AVX10v1_V512 = 35, + VectorT128 = 36, + VectorT256 = 37, + VectorT512 = 38, + X86Base_X64 = 39, + SSE_X64 = 40, + SSE2_X64 = 41, + SSE3_X64 = 42, + SSSE3_X64 = 43, + SSE41_X64 = 44, + SSE42_X64 = 45, + AVX_X64 = 46, + AVX2_X64 = 47, + AES_X64 = 48, + BMI1_X64 = 49, + BMI2_X64 = 50, + FMA_X64 = 51, + LZCNT_X64 = 52, + PCLMULQDQ_X64 = 53, + POPCNT_X64 = 54, + AVXVNNI_X64 = 55, + MOVBE_X64 = 56, + X86Serialize_X64 = 57, + EVEX_X64 = 58, + AVX512F_X64 = 59, + AVX512F_VL_X64 = 60, + AVX512BW_X64 = 61, + AVX512BW_VL_X64 = 62, + AVX512CD_X64 = 63, + AVX512CD_VL_X64 = 64, + AVX512DQ_X64 = 65, + AVX512DQ_VL_X64 = 66, + AVX512VBMI_X64 = 67, + AVX512VBMI_VL_X64 = 68, + AVX10v1_X64 = 69, + AVX10v1_V512_X64 = 70, } public enum InstructionSet_X86 @@ -321,40 +327,42 @@ public enum InstructionSet_X86 AVX512VBMI = 32, AVX512VBMI_VL = 33, AVX10v1 = 34, - VectorT128 = 35, - VectorT256 = 36, - VectorT512 = 37, - X86Base_X64 = 38, - SSE_X64 = 39, - SSE2_X64 = 40, - SSE3_X64 = 41, - SSSE3_X64 = 42, - SSE41_X64 = 43, - SSE42_X64 = 44, - AVX_X64 = 45, - AVX2_X64 = 46, - AES_X64 = 47, - BMI1_X64 = 48, - BMI2_X64 = 49, - FMA_X64 = 50, - LZCNT_X64 = 51, - PCLMULQDQ_X64 = 52, - POPCNT_X64 = 53, - AVXVNNI_X64 = 54, - MOVBE_X64 = 55, - X86Serialize_X64 = 56, - EVEX_X64 = 57, - AVX512F_X64 = 58, - AVX512F_VL_X64 = 59, - AVX512BW_X64 = 60, - AVX512BW_VL_X64 = 61, - AVX512CD_X64 = 62, - AVX512CD_VL_X64 = 63, - AVX512DQ_X64 = 64, - AVX512DQ_VL_X64 = 65, - AVX512VBMI_X64 = 66, - AVX512VBMI_VL_X64 = 67, - AVX10v1_X64 = 68, + AVX10v1_V512 = 35, + VectorT128 = 36, + VectorT256 = 37, + VectorT512 = 38, + X86Base_X64 = 39, + SSE_X64 = 40, + SSE2_X64 = 41, + SSE3_X64 = 42, + SSSE3_X64 = 43, + SSE41_X64 = 44, + SSE42_X64 = 45, + AVX_X64 = 46, + AVX2_X64 = 47, + AES_X64 = 48, + BMI1_X64 = 49, + BMI2_X64 = 50, + FMA_X64 = 51, + LZCNT_X64 = 52, + PCLMULQDQ_X64 = 53, + POPCNT_X64 = 54, + AVXVNNI_X64 = 55, + MOVBE_X64 = 56, + X86Serialize_X64 = 57, + EVEX_X64 = 58, + AVX512F_X64 = 59, + AVX512F_VL_X64 = 60, + AVX512BW_X64 = 61, + AVX512BW_VL_X64 = 62, + AVX512CD_X64 = 63, + AVX512CD_VL_X64 = 64, + AVX512DQ_X64 = 65, + AVX512DQ_VL_X64 = 66, + AVX512VBMI_X64 = 67, + AVX512VBMI_VL_X64 = 68, + AVX10v1_X64 = 69, + AVX10v1_V512_X64 = 70, } public unsafe struct InstructionSetFlags : IEnumerable @@ -698,6 +706,10 @@ public static InstructionSetFlags ExpandInstructionSetByImplicationHelper(Target resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_X64); if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_X64)) resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512_X64); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512_X64)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); if (resultflags.HasInstructionSet(InstructionSet.X64_SSE)) resultflags.AddInstructionSet(InstructionSet.X64_X86Base); if (resultflags.HasInstructionSet(InstructionSet.X64_SSE2)) @@ -774,6 +786,30 @@ public static InstructionSetFlags ExpandInstructionSetByImplicationHelper(Target resultflags.AddInstructionSet(InstructionSet.X64_AVX512BW_VL); if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1)) resultflags.AddInstructionSet(InstructionSet.X64_EVEX); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_EVEX); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512F); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512F_VL); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512CD); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512CD_VL); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512BW); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512BW_VL); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512DQ); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512DQ_VL); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512VBMI); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet.X64_VectorT128)) resultflags.AddInstructionSet(InstructionSet.X64_SSE2); if (resultflags.HasInstructionSet(InstructionSet.X64_VectorT256)) @@ -865,6 +901,30 @@ public static InstructionSetFlags ExpandInstructionSetByImplicationHelper(Target resultflags.AddInstructionSet(InstructionSet.X86_AVX512BW_VL); if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1)) resultflags.AddInstructionSet(InstructionSet.X86_EVEX); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_EVEX); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512F); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512F_VL); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512CD); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512CD_VL); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512BW); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512BW_VL); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512DQ); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512DQ_VL); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512VBMI); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1_V512)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet.X86_VectorT128)) resultflags.AddInstructionSet(InstructionSet.X86_SSE2); if (resultflags.HasInstructionSet(InstructionSet.X86_VectorT256)) @@ -1005,6 +1065,8 @@ private static InstructionSetFlags ExpandInstructionSetByReverseImplicationHelpe resultflags.AddInstructionSet(InstructionSet.X64_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_X64)) resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1_V512_X64)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); if (resultflags.HasInstructionSet(InstructionSet.X64_X86Base)) resultflags.AddInstructionSet(InstructionSet.X64_SSE); if (resultflags.HasInstructionSet(InstructionSet.X64_SSE)) @@ -1081,6 +1143,30 @@ private static InstructionSetFlags ExpandInstructionSetByReverseImplicationHelpe resultflags.AddInstructionSet(InstructionSet.X64_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet.X64_EVEX)) resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet.X64_EVEX)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX10v1)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512F)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512F_VL)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512CD)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512CD_VL)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512BW)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512BW_VL)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512DQ)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512DQ_VL)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512VBMI)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X64_AVX512VBMI_VL)) + resultflags.AddInstructionSet(InstructionSet.X64_AVX10v1_V512); if (resultflags.HasInstructionSet(InstructionSet.X64_SSE2)) resultflags.AddInstructionSet(InstructionSet.X64_VectorT128); if (resultflags.HasInstructionSet(InstructionSet.X64_AVX2)) @@ -1172,6 +1258,30 @@ private static InstructionSetFlags ExpandInstructionSetByReverseImplicationHelpe resultflags.AddInstructionSet(InstructionSet.X86_AVX512VBMI_VL); if (resultflags.HasInstructionSet(InstructionSet.X86_EVEX)) resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1); + if (resultflags.HasInstructionSet(InstructionSet.X86_EVEX)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX10v1)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512F)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512F_VL)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512CD)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512CD_VL)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512BW)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512BW_VL)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512DQ)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512DQ_VL)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512VBMI)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); + if (resultflags.HasInstructionSet(InstructionSet.X86_AVX512VBMI_VL)) + resultflags.AddInstructionSet(InstructionSet.X86_AVX10v1_V512); if (resultflags.HasInstructionSet(InstructionSet.X86_SSE2)) resultflags.AddInstructionSet(InstructionSet.X86_VectorT128); if (resultflags.HasInstructionSet(InstructionSet.X86_AVX2)) @@ -1294,6 +1404,7 @@ public static IEnumerable ArchitectureToValidInstructionSets yield return new InstructionSetInfo("avx512vbmi", "Avx512Vbmi", InstructionSet.X64_AVX512VBMI, true); yield return new InstructionSetInfo("avx512vbmi_vl", "Avx512Vbmi_VL", InstructionSet.X64_AVX512VBMI_VL, true); yield return new InstructionSetInfo("avx10v1", "Avx10v1", InstructionSet.X64_AVX10v1, true); + yield return new InstructionSetInfo("avx10v1_v512", "Avx10v1_V512", InstructionSet.X64_AVX10v1_V512, true); yield return new InstructionSetInfo("vectort128", "VectorT128", InstructionSet.X64_VectorT128, true); yield return new InstructionSetInfo("vectort256", "VectorT256", InstructionSet.X64_VectorT256, true); yield return new InstructionSetInfo("vectort512", "VectorT512", InstructionSet.X64_VectorT512, true); @@ -1334,6 +1445,7 @@ public static IEnumerable ArchitectureToValidInstructionSets yield return new InstructionSetInfo("avx512vbmi", "Avx512Vbmi", InstructionSet.X86_AVX512VBMI, true); yield return new InstructionSetInfo("avx512vbmi_vl", "Avx512Vbmi_VL", InstructionSet.X86_AVX512VBMI_VL, true); yield return new InstructionSetInfo("avx10v1", "Avx10v1", InstructionSet.X86_AVX10v1, true); + yield return new InstructionSetInfo("avx10v1_v512", "Avx10v1_V512", InstructionSet.X86_AVX10v1_V512, true); yield return new InstructionSetInfo("vectort128", "VectorT128", InstructionSet.X86_VectorT128, true); yield return new InstructionSetInfo("vectort256", "VectorT256", InstructionSet.X86_VectorT256, true); yield return new InstructionSetInfo("vectort512", "VectorT512", InstructionSet.X86_VectorT512, true); @@ -1430,6 +1542,8 @@ public void Set64BitInstructionSetVariants(TargetArchitecture architecture) AddInstructionSet(InstructionSet.X64_AVX512VBMI_VL_X64); if (HasInstructionSet(InstructionSet.X64_AVX10v1)) AddInstructionSet(InstructionSet.X64_AVX10v1_X64); + if (HasInstructionSet(InstructionSet.X64_AVX10v1_V512)) + AddInstructionSet(InstructionSet.X64_AVX10v1_V512_X64); break; case TargetArchitecture.X86: @@ -1486,6 +1600,7 @@ public void Set64BitInstructionSetVariantsUnconditionally(TargetArchitecture arc AddInstructionSet(InstructionSet.X64_AVX512VBMI_X64); AddInstructionSet(InstructionSet.X64_AVX512VBMI_VL_X64); AddInstructionSet(InstructionSet.X64_AVX10v1_X64); + AddInstructionSet(InstructionSet.X64_AVX10v1_V512_X64); break; case TargetArchitecture.X86: @@ -1520,6 +1635,7 @@ public void Set64BitInstructionSetVariantsUnconditionally(TargetArchitecture arc AddInstructionSet(InstructionSet.X86_AVX512VBMI_X64); AddInstructionSet(InstructionSet.X86_AVX512VBMI_VL_X64); AddInstructionSet(InstructionSet.X86_AVX10v1_X64); + AddInstructionSet(InstructionSet.X86_AVX10v1_V512_X64); break; } } @@ -1809,6 +1925,12 @@ public static InstructionSet LookupPlatformIntrinsicInstructionSet(TargetArchite else { return InstructionSet.X64_AVX10v1; } + case "Avx10v1_V512": + if (nestedTypeName == "X64") + { return InstructionSet.X64_AVX10v1_V512_X64; } + else + { return InstructionSet.X64_AVX10v1_V512; } + case "VectorT128": { return InstructionSet.X64_VectorT128; } @@ -1918,6 +2040,9 @@ public static InstructionSet LookupPlatformIntrinsicInstructionSet(TargetArchite case "Avx10v1": { return InstructionSet.X86_AVX10v1; } + case "Avx10v1_V512": + { return InstructionSet.X86_AVX10v1_V512; } + case "VectorT128": { return InstructionSet.X86_VectorT128; } diff --git a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt index f84ed33673093f..ab0742beaceb89 100644 --- a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt +++ b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/InstructionSetDesc.txt @@ -59,6 +59,7 @@ instructionset ,X86 ,Avx512DQ_VL , ,36 ,AVX512DQ_VL instructionset ,X86 ,Avx512Vbmi , ,37 ,AVX512VBMI ,avx512vbmi instructionset ,X86 ,Avx512Vbmi_VL , ,38 ,AVX512VBMI_VL ,avx512vbmi_vl instructionset ,X86 ,Avx10v1 , ,44 ,AVX10v1 ,avx10v1 +instructionset ,X86 ,Avx10v1_V512 , ,46 ,AVX10v1_V512 ,avx10v1_v512 instructionset ,X86 ,VectorT128 , ,39 ,VectorT128 ,vectort128 instructionset ,X86 ,VectorT256 , ,40 ,VectorT256 ,vectort256 instructionset ,X86 ,VectorT512 , ,41 ,VectorT512 ,vectort512 @@ -94,6 +95,7 @@ instructionset64bit,X86 ,AVX512DQ_VL instructionset64bit,X86 ,AVX512VBMI instructionset64bit,X86 ,AVX512VBMI_VL instructionset64bit,X86 ,AVX10v1 +instructionset64bit,X86 ,AVX10v1_V512 vectorinstructionset,X86 ,Vector128 vectorinstructionset,X86 ,Vector256 @@ -137,6 +139,18 @@ implication ,X86 ,AVX512VBMI ,AVX512BW implication ,X86 ,AVX512VBMI_VL ,AVX512VBMI implication ,X86 ,AVX512VBMI_VL ,AVX512BW_VL implication ,X86 ,AVX10v1 ,EVEX +implication ,X86 ,AVX10v1_V512 ,EVEX +implication ,X86 ,AVX10v1_V512 ,AVX10v1 +implication ,X86 ,AVX10v1_V512 ,AVX512F +implication ,X86 ,AVX10v1_V512 ,AVX512F_VL +implication ,X86 ,AVX10v1_V512 ,AVX512CD +implication ,X86 ,AVX10v1_V512 ,AVX512CD_VL +implication ,X86 ,AVX10v1_V512 ,AVX512BW +implication ,X86 ,AVX10v1_V512 ,AVX512BW_VL +implication ,X86 ,AVX10v1_V512 ,AVX512DQ +implication ,X86 ,AVX10v1_V512 ,AVX512DQ_VL +implication ,X86 ,AVX10v1_V512 ,AVX512VBMI +implication ,X86 ,AVX10v1_V512 ,AVX512VBMI_VL implication ,X86 ,VectorT128 ,SSE2 implication ,X86 ,VectorT256 ,AVX2 implication ,X86 ,VectorT512 ,AVX512F diff --git a/src/coreclr/vm/codeman.cpp b/src/coreclr/vm/codeman.cpp index b28ce4fc4202fd..07c1844ba14129 100644 --- a/src/coreclr/vm/codeman.cpp +++ b/src/coreclr/vm/codeman.cpp @@ -1438,8 +1438,13 @@ void EEJitManager::SetCpuInfo() if (((cpuFeatures & XArchIntrinsicConstants_Avx10v1) != 0) && CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_EnableAVX10v1)) { // Avx10v1 & Avx10v1_V256 are supposed to appear on any Avx10 machine, - // Avx10v1_V512 is basically Avx10 + Avx512. CPUCompileFlags.Set(InstructionSet_AVX10v1); + + // Avx10v1_V512 is basically Avx10 + Avx512. + if(CPUCompileFlags.IsSet(InstructionSet_AVX512F)) + { + CPUCompileFlags.Set(InstructionSet_AVX10v1_V512); + } } #elif defined(TARGET_ARM64)