Treat BitConverter.IsLittleEndian as an intrinsic
authorMike Danes <onemihaid@hotmail.com>
Sat, 25 Feb 2017 09:45:02 +0000 (11:45 +0200)
committerMike Danes <onemihaid@hotmail.com>
Sat, 25 Feb 2017 09:50:52 +0000 (11:50 +0200)
Commit migrated from https://github.com/dotnet/coreclr/commit/9c6657e2339e9889d0680ec72c299ace4f33199b

src/coreclr/src/inc/corinfo.h
src/coreclr/src/jit/importer.cpp
src/coreclr/src/vm/jitinterface.cpp
src/coreclr/src/vm/mscorlib.h
src/coreclr/src/zap/zapinfo.cpp

index 492dbec..af01631 100644 (file)
@@ -1719,6 +1719,9 @@ enum CORINFO_FIELD_ACCESSOR
 
     CORINFO_FIELD_INTRINSIC_ZERO,           // intrinsic zero (IntPtr.Zero, UIntPtr.Zero)
     CORINFO_FIELD_INTRINSIC_EMPTY_STRING,   // intrinsic emptry string (String.Empty)
+#if COR_JIT_EE_VERSION > 460
+    CORINFO_FIELD_INTRINSIC_ISLITTLEENDIAN, // intrinsic BitConverter.IsLittleEndian
+#endif
 };
 
 // Set of flags returned in CORINFO_FIELD_INFO::fieldFlags
index cfd2785..adc06b2 100644 (file)
@@ -13263,6 +13263,20 @@ void Compiler::impImportBlockCode(BasicBlock* block)
                     }
                     break;
 
+#if COR_JIT_EE_VERSION > 460
+                    case CORINFO_FIELD_INTRINSIC_ISLITTLEENDIAN:
+                    {
+                        assert(aflags & CORINFO_ACCESS_GET);
+#if BIGENDIAN
+                        op1 = gtNewIconNode(0, lclTyp);
+#else
+                        op1 = gtNewIconNode(1, lclTyp);
+#endif
+                        goto FIELD_DONE;
+                    }
+                    break;
+#endif
+
                     default:
                         assert(!"Unexpected fieldAccessor");
                 }
index 1e84115..322614d 100644 (file)
@@ -1439,6 +1439,11 @@ static CORINFO_FIELD_ACCESSOR getFieldIntrinsic(FieldDesc * field)
     {
         return CORINFO_FIELD_INTRINSIC_ZERO;
     }
+    else
+    if (MscorlibBinder::GetField(FIELD__BITCONVERTER__ISLITTLEENDIAN) == field)
+    {
+        return CORINFO_FIELD_INTRINSIC_ISLITTLEENDIAN;
+    }
 
     return (CORINFO_FIELD_ACCESSOR)-1;
 }
index 1d006b5..38ce80e 100644 (file)
@@ -1005,6 +1005,8 @@ DEFINE_FIELD(INTPTR,                ZERO,                   Zero)
 // DEFINE_CLASS(UINTPTR,                System,                UIntPtr)
 DEFINE_FIELD(UINTPTR,               ZERO,                   Zero)
 
+DEFINE_CLASS(BITCONVERTER,          System,                 BitConverter)
+DEFINE_FIELD(BITCONVERTER,          ISLITTLEENDIAN,         IsLittleEndian)
 // Defined as element type alias
 // DEFINE_CLASS(STRING,                System,                 String)
 DEFINE_FIELD(STRING,                M_FIRST_CHAR,           m_firstChar)
index 2095524..b203c55 100644 (file)
@@ -3029,6 +3029,7 @@ void ZapInfo::getFieldInfo (CORINFO_RESOLVED_TOKEN * pResolvedToken,
 
         case CORINFO_FIELD_INTRINSIC_ZERO:
         case CORINFO_FIELD_INTRINSIC_EMPTY_STRING:
+        case CORINFO_FIELD_INTRINSIC_ISLITTLEENDIAN:
             break;
 
         default: