do a bit of by-hand CSE
[ghc-hetmet.git] / rts / PrimOps.cmm
index 4f6c252..8c5c14f 100644 (file)
@@ -1133,13 +1133,17 @@ stg_newMVarzh
 }
 
 
-#define PerformTake(stack, value)                       \
-    W_[StgStack_sp(stack) + WDS(1)] = value;            \
-    W_[StgStack_sp(stack) + WDS(0)] = stg_gc_unpt_r1_info;
-
-#define PerformPut(stack,lval)                      \
-    StgStack_sp(stack) = StgStack_sp(stack) + WDS(3);   \
-    lval = W_[StgStack_sp(stack) - WDS(1)];
+#define PerformTake(stack, value)               \
+    W_ sp;                                      \
+    sp = StgStack_sp(stack);                    \
+    W_[sp + WDS(1)] = value;                    \
+    W_[sp + WDS(0)] = stg_gc_unpt_r1_info;
+
+#define PerformPut(stack,lval)                  \
+    W_ sp;                                      \
+    sp = StgStack_sp(stack) + WDS(3);           \
+    StgStack_sp(stack) = sp;                    \
+    lval = W_[sp - WDS(1)];
 
 stg_takeMVarzh
 {