Skip to content

Commit aced6b0

Browse files
Disable 64bit variants of instruction sets (#34147)
- EnsureInstructionSetFlagsAreValid was permitting the invalid behavior of something like ArmBase.Arm64.IsSupported to return true when ArmBase.IsSupported reported false. - Fix by having EnsureInstructionSetFlagsAreValid handle the case
1 parent c653291 commit aced6b0

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/coreclr/src/inc/corinfoinstructionset.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,10 +179,16 @@ inline CORINFO_InstructionSetFlags EnsureInstructionSetFlagsAreValid(CORINFO_Ins
179179
#ifdef TARGET_ARM64
180180
if (resultflags.HasInstructionSet(InstructionSet_ArmBase) && !resultflags.HasInstructionSet(InstructionSet_ArmBase_Arm64))
181181
resultflags.RemoveInstructionSet(InstructionSet_ArmBase);
182+
if (resultflags.HasInstructionSet(InstructionSet_ArmBase_Arm64) && !resultflags.HasInstructionSet(InstructionSet_ArmBase))
183+
resultflags.RemoveInstructionSet(InstructionSet_ArmBase_Arm64);
182184
if (resultflags.HasInstructionSet(InstructionSet_AdvSimd) && !resultflags.HasInstructionSet(InstructionSet_AdvSimd_Arm64))
183185
resultflags.RemoveInstructionSet(InstructionSet_AdvSimd);
186+
if (resultflags.HasInstructionSet(InstructionSet_AdvSimd_Arm64) && !resultflags.HasInstructionSet(InstructionSet_AdvSimd))
187+
resultflags.RemoveInstructionSet(InstructionSet_AdvSimd_Arm64);
184188
if (resultflags.HasInstructionSet(InstructionSet_Crc32) && !resultflags.HasInstructionSet(InstructionSet_Crc32_Arm64))
185189
resultflags.RemoveInstructionSet(InstructionSet_Crc32);
190+
if (resultflags.HasInstructionSet(InstructionSet_Crc32_Arm64) && !resultflags.HasInstructionSet(InstructionSet_Crc32))
191+
resultflags.RemoveInstructionSet(InstructionSet_Crc32_Arm64);
186192
if (resultflags.HasInstructionSet(InstructionSet_AdvSimd) && !resultflags.HasInstructionSet(InstructionSet_ArmBase))
187193
resultflags.RemoveInstructionSet(InstructionSet_AdvSimd);
188194
if (resultflags.HasInstructionSet(InstructionSet_Aes) && !resultflags.HasInstructionSet(InstructionSet_ArmBase))
@@ -197,20 +203,36 @@ inline CORINFO_InstructionSetFlags EnsureInstructionSetFlagsAreValid(CORINFO_Ins
197203
#ifdef TARGET_AMD64
198204
if (resultflags.HasInstructionSet(InstructionSet_SSE) && !resultflags.HasInstructionSet(InstructionSet_SSE_X64))
199205
resultflags.RemoveInstructionSet(InstructionSet_SSE);
206+
if (resultflags.HasInstructionSet(InstructionSet_SSE_X64) && !resultflags.HasInstructionSet(InstructionSet_SSE))
207+
resultflags.RemoveInstructionSet(InstructionSet_SSE_X64);
200208
if (resultflags.HasInstructionSet(InstructionSet_SSE2) && !resultflags.HasInstructionSet(InstructionSet_SSE2_X64))
201209
resultflags.RemoveInstructionSet(InstructionSet_SSE2);
210+
if (resultflags.HasInstructionSet(InstructionSet_SSE2_X64) && !resultflags.HasInstructionSet(InstructionSet_SSE2))
211+
resultflags.RemoveInstructionSet(InstructionSet_SSE2_X64);
202212
if (resultflags.HasInstructionSet(InstructionSet_SSE41) && !resultflags.HasInstructionSet(InstructionSet_SSE41_X64))
203213
resultflags.RemoveInstructionSet(InstructionSet_SSE41);
214+
if (resultflags.HasInstructionSet(InstructionSet_SSE41_X64) && !resultflags.HasInstructionSet(InstructionSet_SSE41))
215+
resultflags.RemoveInstructionSet(InstructionSet_SSE41_X64);
204216
if (resultflags.HasInstructionSet(InstructionSet_SSE42) && !resultflags.HasInstructionSet(InstructionSet_SSE42_X64))
205217
resultflags.RemoveInstructionSet(InstructionSet_SSE42);
218+
if (resultflags.HasInstructionSet(InstructionSet_SSE42_X64) && !resultflags.HasInstructionSet(InstructionSet_SSE42))
219+
resultflags.RemoveInstructionSet(InstructionSet_SSE42_X64);
206220
if (resultflags.HasInstructionSet(InstructionSet_BMI1) && !resultflags.HasInstructionSet(InstructionSet_BMI1_X64))
207221
resultflags.RemoveInstructionSet(InstructionSet_BMI1);
222+
if (resultflags.HasInstructionSet(InstructionSet_BMI1_X64) && !resultflags.HasInstructionSet(InstructionSet_BMI1))
223+
resultflags.RemoveInstructionSet(InstructionSet_BMI1_X64);
208224
if (resultflags.HasInstructionSet(InstructionSet_BMI2) && !resultflags.HasInstructionSet(InstructionSet_BMI2_X64))
209225
resultflags.RemoveInstructionSet(InstructionSet_BMI2);
226+
if (resultflags.HasInstructionSet(InstructionSet_BMI2_X64) && !resultflags.HasInstructionSet(InstructionSet_BMI2))
227+
resultflags.RemoveInstructionSet(InstructionSet_BMI2_X64);
210228
if (resultflags.HasInstructionSet(InstructionSet_LZCNT) && !resultflags.HasInstructionSet(InstructionSet_LZCNT_X64))
211229
resultflags.RemoveInstructionSet(InstructionSet_LZCNT);
230+
if (resultflags.HasInstructionSet(InstructionSet_LZCNT_X64) && !resultflags.HasInstructionSet(InstructionSet_LZCNT))
231+
resultflags.RemoveInstructionSet(InstructionSet_LZCNT_X64);
212232
if (resultflags.HasInstructionSet(InstructionSet_POPCNT) && !resultflags.HasInstructionSet(InstructionSet_POPCNT_X64))
213233
resultflags.RemoveInstructionSet(InstructionSet_POPCNT);
234+
if (resultflags.HasInstructionSet(InstructionSet_POPCNT_X64) && !resultflags.HasInstructionSet(InstructionSet_POPCNT))
235+
resultflags.RemoveInstructionSet(InstructionSet_POPCNT_X64);
214236
if (resultflags.HasInstructionSet(InstructionSet_SSE2) && !resultflags.HasInstructionSet(InstructionSet_SSE))
215237
resultflags.RemoveInstructionSet(InstructionSet_SSE2);
216238
if (resultflags.HasInstructionSet(InstructionSet_SSE3) && !resultflags.HasInstructionSet(InstructionSet_SSE2))

src/coreclr/src/tools/Common/JitInterface/ThunkGenerator/InstructionSetGenerator.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,10 @@ inline CORINFO_InstructionSetFlags EnsureInstructionSetFlagsAreValid(CORINFO_Ins
586586
{
587587
if (instructionSet.Architecture != architecture) continue;
588588
if (_64BitArchitectures.Contains(architecture) && _64bitVariants[architecture].Contains(instructionSet.JitName))
589+
{
589590
AddImplication(architecture, instructionSet.JitName, $"{instructionSet.JitName}_{ArchToInstructionSetSuffixArch(architecture)}");
591+
AddImplication(architecture, $"{instructionSet.JitName}_{ArchToInstructionSetSuffixArch(architecture)}", instructionSet.JitName);
592+
}
590593
}
591594
foreach (var implication in _implications)
592595
{

0 commit comments

Comments
 (0)