[sre] Fix s390x build (#3427)
authorAleksey Kliger (λgeek) <akliger@gmail.com>
Mon, 22 Aug 2016 16:28:18 +0000 (12:28 -0400)
committerGitHub <noreply@github.com>
Mon, 22 Aug 2016 16:28:18 +0000 (12:28 -0400)
Followup for 6be008c409153a82e80394b98c93564e2cdb2309 to fix the s390x build.

mono/metadata/sre-encode.c

index 048b7259b981eaced10b9ca1d67c1cbd58e47386..95f7dae7e6af8f330462de7820603dd040dd6326 100644 (file)
@@ -36,6 +36,12 @@ static guint32 mono_image_typedef_or_ref (MonoDynamicImage *assembly, MonoType *
 
 #define mono_type_array_get_and_resolve(array, index, error) mono_reflection_type_get_handle ((MonoReflectionType*)mono_array_get (array, gpointer, index), error)
 
+static guint32
+mono_image_add_stream_data (MonoDynamicStream *stream, const char *data, guint32 len)
+{
+       return mono_dynstream_add_data (stream, data, len);
+}
+
 static void
 alloc_table (MonoDynamicTable *table, guint nrows)
 {
@@ -438,6 +444,52 @@ mono_dynimage_encode_locals (MonoDynamicImage *assembly, MonoReflectionILGen *il
 }
 
 
+/*
+ * Copy len * nelem bytes from val to dest, swapping bytes to LE if necessary.
+ * dest may be misaligned.
+ */
+static void
+swap_with_size (char *dest, const char* val, int len, int nelem) {
+       MONO_REQ_GC_NEUTRAL_MODE;
+#if G_BYTE_ORDER != G_LITTLE_ENDIAN
+       int elem;
+
+       for (elem = 0; elem < nelem; ++elem) {
+               switch (len) {
+               case 1:
+                       *dest = *val;
+                       break;
+               case 2:
+                       dest [0] = val [1];
+                       dest [1] = val [0];
+                       break;
+               case 4:
+                       dest [0] = val [3];
+                       dest [1] = val [2];
+                       dest [2] = val [1];
+                       dest [3] = val [0];
+                       break;
+               case 8:
+                       dest [0] = val [7];
+                       dest [1] = val [6];
+                       dest [2] = val [5];
+                       dest [3] = val [4];
+                       dest [4] = val [3];
+                       dest [5] = val [2];
+                       dest [6] = val [1];
+                       dest [7] = val [0];
+                       break;
+               default:
+                       g_assert_not_reached ();
+               }
+               dest += len;
+               val += len;
+       }
+#else
+       memcpy (dest, val, len * nelem);
+#endif
+}
+
 
 guint32
 mono_dynimage_encode_constant (MonoDynamicImage *assembly, MonoObject *val, MonoTypeEnum *ret_type)