[project @ 2004-08-13 13:04:50 by simonmar]
[ghc-hetmet.git] / ghc / includes / TailCalls.h
index 1f562eb..a61695e 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: TailCalls.h,v 1.12 2003/01/06 13:11:26 simonmar Exp $
+ * $Id: TailCalls.h,v 1.16 2004/08/13 13:09:41 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -16,7 +16,7 @@
 
 #ifdef USE_MINIINTERPRETER
 
-#define JMP_(cont) return(stgCast(StgFunPtr,cont))
+#define JMP_(cont) return((StgFunPtr)(cont))
 #define FB_
 #define FE_
 
@@ -60,6 +60,21 @@ extern void __DISCARD__(void);
 #endif /* i386_TARGET_ARCH */
 
 /* -----------------------------------------------------------------------------
+   Tail calling on x86_64
+   -------------------------------------------------------------------------- */
+
+#if x86_64_TARGET_ARCH
+
+#define JMP_(cont)                     \
+    {                                  \
+      void *__target;                  \
+      __target = (void *)(cont);       \
+      goto *__target;                  \
+    }
+
+#endif /* x86_64_TARGET_ARCH */
+
+/* -----------------------------------------------------------------------------
    Tail calling on Sparc
    -------------------------------------------------------------------------- */
 
@@ -83,7 +98,9 @@ extern void __DISCARD__(void);
 
 #ifdef alpha_TARGET_ARCH
 
+#if IN_STG_CODE
 register void *_procedure __asm__("$27");
+#endif
 
 #define JMP_(cont)                             \
     do { _procedure = (void *)(cont);          \