private static InstructionSetFlags ExpandInstructionSetByReverseImplicationHelper(TargetArchitecture architecture, InstructionSetFlags input) { InstructionSetFlags oldflags = input; InstructionSetFlags resultflags = input; do { oldflags = resultflags; switch (architecture) { case TargetArchitecture.ARM64: if (resultflags.HasInstructionSet(InstructionSet.ARM64_ArmBase_Arm64)) { resultflags.AddInstructionSet(InstructionSet.ARM64_ArmBase); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_AdvSimd_Arm64)) { resultflags.AddInstructionSet(InstructionSet.ARM64_AdvSimd); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_Crc32_Arm64)) { resultflags.AddInstructionSet(InstructionSet.ARM64_Crc32); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_ArmBase)) { resultflags.AddInstructionSet(InstructionSet.ARM64_AdvSimd); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_ArmBase)) { resultflags.AddInstructionSet(InstructionSet.ARM64_Aes); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_ArmBase)) { resultflags.AddInstructionSet(InstructionSet.ARM64_Crc32); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_ArmBase)) { resultflags.AddInstructionSet(InstructionSet.ARM64_Sha1); } if (resultflags.HasInstructionSet(InstructionSet.ARM64_ArmBase)) { resultflags.AddInstructionSet(InstructionSet.ARM64_Sha256); } break; case TargetArchitecture.X64: if (resultflags.HasInstructionSet(InstructionSet.X64_X86Base_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_X86Base); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE2_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE2); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE41_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE41); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE42_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE42); } if (resultflags.HasInstructionSet(InstructionSet.X64_BMI1_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_BMI1); } if (resultflags.HasInstructionSet(InstructionSet.X64_BMI2_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_BMI2); } if (resultflags.HasInstructionSet(InstructionSet.X64_LZCNT_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_LZCNT); } if (resultflags.HasInstructionSet(InstructionSet.X64_POPCNT_X64)) { resultflags.AddInstructionSet(InstructionSet.X64_POPCNT); } if (resultflags.HasInstructionSet(InstructionSet.X64_X86Base)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE2); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE2)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE3); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE3)) { resultflags.AddInstructionSet(InstructionSet.X64_SSSE3); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSSE3)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE41); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE41)) { resultflags.AddInstructionSet(InstructionSet.X64_SSE42); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE42)) { resultflags.AddInstructionSet(InstructionSet.X64_AVX); } if (resultflags.HasInstructionSet(InstructionSet.X64_AVX)) { resultflags.AddInstructionSet(InstructionSet.X64_AVX2); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE2)) { resultflags.AddInstructionSet(InstructionSet.X64_AES); } if (resultflags.HasInstructionSet(InstructionSet.X64_AVX)) { resultflags.AddInstructionSet(InstructionSet.X64_BMI1); } if (resultflags.HasInstructionSet(InstructionSet.X64_AVX)) { resultflags.AddInstructionSet(InstructionSet.X64_BMI2); } if (resultflags.HasInstructionSet(InstructionSet.X64_AVX)) { resultflags.AddInstructionSet(InstructionSet.X64_FMA); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE2)) { resultflags.AddInstructionSet(InstructionSet.X64_PCLMULQDQ); } if (resultflags.HasInstructionSet(InstructionSet.X64_SSE42)) { resultflags.AddInstructionSet(InstructionSet.X64_POPCNT); } if (resultflags.HasInstructionSet(InstructionSet.X64_AVX)) { resultflags.AddInstructionSet(InstructionSet.X64_Vector256); } break; case TargetArchitecture.X86: if (resultflags.HasInstructionSet(InstructionSet.X86_X86Base)) { resultflags.AddInstructionSet(InstructionSet.X86_SSE); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE)) { resultflags.AddInstructionSet(InstructionSet.X86_SSE2); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE2)) { resultflags.AddInstructionSet(InstructionSet.X86_SSE3); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE3)) { resultflags.AddInstructionSet(InstructionSet.X86_SSSE3); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSSE3)) { resultflags.AddInstructionSet(InstructionSet.X86_SSE41); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE41)) { resultflags.AddInstructionSet(InstructionSet.X86_SSE42); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE42)) { resultflags.AddInstructionSet(InstructionSet.X86_AVX); } if (resultflags.HasInstructionSet(InstructionSet.X86_AVX)) { resultflags.AddInstructionSet(InstructionSet.X86_AVX2); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE2)) { resultflags.AddInstructionSet(InstructionSet.X86_AES); } if (resultflags.HasInstructionSet(InstructionSet.X86_AVX)) { resultflags.AddInstructionSet(InstructionSet.X86_BMI1); } if (resultflags.HasInstructionSet(InstructionSet.X86_AVX)) { resultflags.AddInstructionSet(InstructionSet.X86_BMI2); } if (resultflags.HasInstructionSet(InstructionSet.X86_AVX)) { resultflags.AddInstructionSet(InstructionSet.X86_FMA); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE2)) { resultflags.AddInstructionSet(InstructionSet.X86_PCLMULQDQ); } if (resultflags.HasInstructionSet(InstructionSet.X86_SSE42)) { resultflags.AddInstructionSet(InstructionSet.X86_POPCNT); } if (resultflags.HasInstructionSet(InstructionSet.X86_AVX)) { resultflags.AddInstructionSet(InstructionSet.X86_Vector256); } break; } } while (!oldflags.Equals(resultflags)); return(resultflags); }
public void Remove(InstructionSetFlags other) { _flags &= ~other._flags; }
public void Add(InstructionSetFlags other) { _flags |= other._flags; }
public void IntersectionWith(InstructionSetFlags other) { _flags &= other._flags; }
public bool Equals(InstructionSetFlags other) { return(_flags == other._flags); }