diff --git a/src/coreclr/jit/instr.cpp b/src/coreclr/jit/instr.cpp index 9876150b22e35e..2fc259b0921566 100644 --- a/src/coreclr/jit/instr.cpp +++ b/src/coreclr/jit/instr.cpp @@ -163,7 +163,7 @@ const char* CodeGen::genInsDisplayName(emitter::instrDesc* id) auto GetIntCmpOpName = [&](const char* suffix) -> const char* { static const char* const intCmpOpNames[] = { - "eq", "lt", "le", "neq", "false", "ge", "gt", "true", + "eq", "lt", "le", "false", "neq", "ge", "gt", "true", }; uint8_t control = static_cast(emit->emitGetInsSC(id)); diff --git a/src/coreclr/tools/Common/TypeSystem/IL/Stubs/RuntimeHelpersIntrinsics.cs b/src/coreclr/tools/Common/TypeSystem/IL/Stubs/RuntimeHelpersIntrinsics.cs index 0ce9a5267bb92b..7ec96db0eb5fbb 100644 --- a/src/coreclr/tools/Common/TypeSystem/IL/Stubs/RuntimeHelpersIntrinsics.cs +++ b/src/coreclr/tools/Common/TypeSystem/IL/Stubs/RuntimeHelpersIntrinsics.cs @@ -3,6 +3,7 @@ using System; +using Internal.Text; using Internal.TypeSystem; using Debug = System.Diagnostics.Debug; @@ -56,9 +57,7 @@ public static MethodIL EmitIL(MethodDesc method) result = false; if (elementType is MetadataType mdType) { - if (mdType.Module == mdType.Context.SystemModule && - mdType.Namespace == "System.Text"u8 && - mdType.Name == "Rune"u8) + if (IsKnownBitwiseEquatableType(mdType)) { result = true; } @@ -88,5 +87,21 @@ public static MethodIL EmitIL(MethodDesc method) return new ILStubMethodIL(method, new byte[] { (byte)opcode, (byte)ILOpcode.ret }, Array.Empty(), Array.Empty()); } + + private static bool IsKnownBitwiseEquatableType(MetadataType type) + { + if (type.Module != type.Context.SystemModule) + { + return false; + } + + Utf8Span ns = type.Namespace; + if (ns == "System"u8) + { + Utf8Span name = type.Name; + return name == "Guid"u8 || name == "Int128"u8 || name == "UInt128"u8; + } + return ns == "System.Text"u8 && type.Name == "Rune"u8; + } } } diff --git a/src/coreclr/vm/jitinterface.cpp b/src/coreclr/vm/jitinterface.cpp index 75197f0ddd4087..b8da06980a880c 100644 --- a/src/coreclr/vm/jitinterface.cpp +++ b/src/coreclr/vm/jitinterface.cpp @@ -7347,8 +7347,11 @@ static bool getILIntrinsicImplementationForRuntimeHelpers( || methodTable == CoreLibBinder::GetClass(CLASS__UINT32) || methodTable == CoreLibBinder::GetClass(CLASS__INT64) || methodTable == CoreLibBinder::GetClass(CLASS__UINT64) + || methodTable == CoreLibBinder::GetClass(CLASS__INT128) + || methodTable == CoreLibBinder::GetClass(CLASS__UINT128) || methodTable == CoreLibBinder::GetClass(CLASS__INTPTR) || methodTable == CoreLibBinder::GetClass(CLASS__UINTPTR) + || methodTable == CoreLibBinder::GetClass(CLASS__GUID) || methodTable == CoreLibBinder::GetClass(CLASS__RUNE) || methodTable->IsEnum() || IsBitwiseEquatable(typeHandle, methodTable))