(mono_value_box): don't use memcpy for small sizes on
authorRadek Doulik <rodo@mono-cvs.ximian.com>
Mon, 20 May 2002 13:42:08 +0000 (13:42 -0000)
committerRadek Doulik <rodo@mono-cvs.ximian.com>
Mon, 20 May 2002 13:42:08 +0000 (13:42 -0000)
architectures with unaligned access

svn path=/trunk/mono/; revision=4786

mono/metadata/ChangeLog
mono/metadata/object.c

index d82c1fa7767ee0b6429c9031fcdc276938d98d56..aacf6d6a1a69b8afd62eedc57e63438b3776726b 100644 (file)
@@ -1,4 +1,3 @@
-
 Mon May 20 17:36:36 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * icall.c, reflection.h: added icall to get info about an event.
@@ -7,6 +6,8 @@ Mon May 20 17:36:36 CEST 2002 Paolo Molaro <lupus@ximian.com>
 
        * object.c (mono_value_box): don't use memcpy for boxing on BIG
        endian
+       (mono_value_box): don't use memcpy for small sizes on
+       architectures with unaligned access
 
 2002-05-20  Martin Baulig  <martin@gnome.org>
 
index 7d1a31cdcf55538e9428d30b0291001df816b8ae..36db731ac388b112b0339951057aa73a6fbda98a 100644 (file)
@@ -907,21 +907,21 @@ mono_value_box (MonoDomain *domain, MonoClass *class, gpointer value)
 
        size = size - sizeof (MonoObject);
 
-#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+#if NO_UNALIGNED_ACCESS
        memcpy ((char *)res + sizeof (MonoObject), value, size);
 #else
        switch (size) {
        case 1:
-               *(guint8 *)((guint8 *) res + sizeof (MonoObject)) = *(guint32 *)value;
+               *((guint8 *) res + sizeof (MonoObject)) = *(guint8 *) value;
                break;
        case 2:
-               *(guint16 *)((guint8 *) res + sizeof (MonoObject)) = *(guint32 *)value;
+               *(guint16 *)((guint8 *) res + sizeof (MonoObject)) = *(guint16 *) value;
                break;
        case 4:
-               *(guint32 *)((guint8 *) res + sizeof (MonoObject)) = *(guint32 *)value;
+               *(guint32 *)((guint8 *) res + sizeof (MonoObject)) = *(guint32 *) value;
                break;
        case 8:
-               *(guint64 *)((guint8 *) res + sizeof (MonoObject)) = *(guint64 *)value;
+               *(guint64 *)((guint8 *) res + sizeof (MonoObject)) = *(guint64 *) value;
                break;
        default:
                memcpy ((char *)res + sizeof (MonoObject), value, size);