[project @ 2000-12-04 12:31:19 by simonmar]
[ghc-hetmet.git] / ghc / includes / PrimOps.h
index cf467a4..c4aa989 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: PrimOps.h,v 1.67 2000/11/13 14:40:36 simonmar Exp $
+ * $Id: PrimOps.h,v 1.68 2000/12/04 12:31:20 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2000
  *
         } while (again);                                                \
    } while (0)
 
-#define indexWordOffClosurezh(r,a,i)                                    \
-   do { StgClosure* tmp = (StgClosure*)(a);                             \
-        CHASE_INDIRECTIONS(tmp);                                        \
-        r = ((W_ *)tmp)[i];                                             \
+#define indexWordOffClosurezh(r,a,i)           \
+   do { StgClosure* tmp = (StgClosure*)(a);    \
+        CHASE_INDIRECTIONS(tmp);               \
+        r = ((P_)tmp)[i];                      \
    } while (0)
 
-#define indexPtrOffClosurezh(r,a,i)                                     \
-   do { StgClosure* tmp = (StgClosure*)(a);                             \
-        CHASE_INDIRECTIONS(tmp);                                        \
-        r = ((P_ *)tmp)[i];                                             \
+#define indexDoubleOffClosurezh(r,a,i)         \
+   do { StgClosure* tmp = (StgClosure*)(a);    \
+        CHASE_INDIRECTIONS(tmp);               \
+        r = PK_DBL(((P_)tmp + i);              \
+   } while (0)
+
+#define indexPtrOffClosurezh(r,a,i)            \
+   do { StgClosure* tmp = (StgClosure*)(a);    \
+        CHASE_INDIRECTIONS(tmp);               \
+        r = ((P_ *)tmp)[i];                    \
+   } while (0)                                 \
+
+#define setWordOffClosurezh(r,a,i,b)           \
+   do { StgClosure* tmp = (StgClosure*)(a);    \
+        CHASE_INDIRECTIONS(tmp);               \
+        ((P_)tmp)[i] = b;                      \
+        r = (P_)tmp;                           \
    } while (0)
 
+#define setDoubleOffClosurezh(r,a,i,b)         \
+   do { StgClosure* tmp = (StgClosure*)(a);    \
+        CHASE_INDIRECTIONS(tmp);               \
+        ASSIGN_DBL((P_)tmp + i, b);            \
+        r = (P_)tmp;                           \
+   } while (0)
+
+#define setPtrOffClosurezh(r,a,i,b)            \
+   do { StgClosure* tmp = (StgClosure*)(a);    \
+        CHASE_INDIRECTIONS(tmp);               \
+        ((P_ *)tmp)[i] = b;                    \
+        r = (P_)tmp;                           \
+   } while (0)
+
+#else
+
 #endif
 
 /* -----------------------------------------------------------------------------