SPARC NCG: Also do misaligned reads (this time for sure!)
authorBen.Lippmeier@anu.edu.au <unknown>
Thu, 22 Jan 2009 09:21:56 +0000 (09:21 +0000)
committerBen.Lippmeier@anu.edu.au <unknown>
Thu, 22 Jan 2009 09:21:56 +0000 (09:21 +0000)
rts/RtsAPI.c

index c5c5561..e0740b1 100644 (file)
@@ -301,12 +301,14 @@ rts_getInt32 (HaskellObj p)
 HsInt64
 rts_getInt64 (HaskellObj p)
 {
-    HsInt64* tmp;
+    HsInt32* tmp;
     // See comment above:
     // ASSERT(p->header.info == I64zh_con_info ||
     //        p->header.info == I64zh_static_info);
-    tmp = (HsInt64*)&(UNTAG_CLOSURE(p)->payload[0]);
-    return *tmp;
+    tmp = (HsInt32*)&(UNTAG_CLOSURE(p)->payload[0]);
+
+    HsInt64 i  = (HsInt64)(tmp[0] << 32) | (HsInt64)tmp[1];
+    return i;
 }
 
 #else
@@ -314,14 +316,12 @@ rts_getInt64 (HaskellObj p)
 HsInt64
 rts_getInt64 (HaskellObj p)
 {
-    HsInt32* tmp;
+    HsInt64* tmp;
     // See comment above:
     // ASSERT(p->header.info == I64zh_con_info ||
     //        p->header.info == I64zh_static_info);
-    tmp = (HsInt32*)&(UNTAG_CLOSURE(p)->payload[0]);
-
-    HsInt64 i  = (HsInt64)(tmp[0] << 32) | (HsInt64)tmp[1];
-    return i
+    tmp = (HsInt64*)&(UNTAG_CLOSURE(p)->payload[0]);
+    return *tmp;
 }
 
 #endif /* sparc_HOST_ARCH */