To get around a problem with gcc 4.4.7 on s390x, the SWAP macro is reworked so that...
authorNeale <neale@sinenomine.net>
Fri, 22 Jan 2016 02:41:44 +0000 (21:41 -0500)
committerNeale <neale@sinenomine.net>
Fri, 22 Jan 2016 02:41:44 +0000 (21:41 -0500)
mono/metadata/icall.c

index 150a2814115b7928b70e0e1059f939854de3f4f0..efe8fdf38696fa7625664039ae99054ff8b60595 100644 (file)
@@ -820,14 +820,14 @@ ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray (MonoAr
        }
 
 #if G_BYTE_ORDER != G_LITTLE_ENDIAN
-#define SWAP(n) {\
-       guint ## n *data = (guint ## n *) mono_array_addr (array, char, 0); \
-       guint ## n *src = (guint ## n *) field_data; \
-       guint ## n *end = (guint ## n *)((char*)src + size); \
-\
-       for (; src < end; data++, src++) { \
-               *data = read ## n (src); \
-       } \
+#define SWAP(n) {                                                              \
+       guint ## n *data = (guint ## n *) mono_array_addr (array, char, 0);     \
+       guint ## n *src = (guint ## n *) field_data;                            \
+       int i;                                                                  \
+                                                                               \
+       for (i = 0; i < (size / sizeof(guint ## n)); i++) {                     \
+               data[i] = read ## n (&src[i]);                                  \
+       }                                                                       \
 }
 
        /* printf ("Initialize array with elements of %s type\n", klass->element_class->name); */