From a2de124447e93f0acdc132d72813a2321ea114d1 Mon Sep 17 00:00:00 2001
From: sof <unknown>
Date: Thu, 13 Mar 1997 08:19:53 +0000
Subject: [PATCH] [project @ 1997-03-13 08:19:53 by sof] AIX mods

---
 ghc/includes/COptWraps.lh | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/ghc/includes/COptWraps.lh b/ghc/includes/COptWraps.lh
index baf217b6635f..5b6d2d9a2e79 100644
--- a/ghc/includes/COptWraps.lh
+++ b/ghc/includes/COptWraps.lh
@@ -588,8 +588,17 @@ gets whatever it's after.
 
 #define WRAPPER_SETUP(f,ignore1,ignore2)  SaveAllStgContext();
 
+/* we have to make sure the STG registers are restored. 
+GCC tries to restore the value the registers had in
+the beginning of the current call, which we don't want. 
+We defeat it by saving the registers in the stack again. :-( */
+
 #define WRAPPER_RETURN(x)  \
-    do {RestoreAllStgRegs(); if(x) JMP_(EnterNodeCode);} while(0);
+    do {RestoreAllStgRegs(); if(x) JMP_(EnterNodeCode);} while(0); \
+    __asm__ volatile (		\
+	"cal 1,136(1)\n" \
+        "\tstm 13,-76(1)\n" \
+	"\tstu 1,-136(1)");
 
 #define SEPARATE_WRAPPER_RESTORE    /* none */
 
-- 
GitLab