[commit: ghc] master: Remove most of TailCalls.h (2b977d9)

Simon Marlow <[email protected]>
Newsgroups gmane.comp.lang.haskell.cvs.ghc
Message-ID <[email protected]>
Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/2b977d98a0f15416721633f14f9f551ce9ad30f0

>---------------------------------------------------------------

commit 2b977d98a0f15416721633f14f9f551ce9ad30f0
Author: Simon Marlow <[email protected]>
Date:   Tue Dec 11 16:53:24 2012 +0000

    Remove most of TailCalls.h
    
    it was only needed for registerised compilation.

>---------------------------------------------------------------

 includes/Stg.h           |    7 +-
 includes/stg/TailCalls.h |  185 ----------------------------------------------
 2 files changed, 3 insertions(+), 189 deletions(-)

diff --git a/includes/Stg.h b/includes/Stg.h
index ba0c4cf..c451cbc 100644
--- a/includes/Stg.h
+++ b/includes/Stg.h
@@ -217,12 +217,11 @@ typedef StgFunPtr       F_;
 
 /* -----------------------------------------------------------------------------
    Tail calls
-
-   This needs to be up near the top as the register line on alpha needs
-   to be before all procedures (inline & out-of-line).
    -------------------------------------------------------------------------- */
 
-#include "stg/TailCalls.h"
+#define JMP_(cont) return((StgFunPtr)(cont))
+#define FB_
+#define FE_
 
 /* -----------------------------------------------------------------------------
    Other Stg stuff...
diff --git a/includes/stg/TailCalls.h b/includes/stg/TailCalls.h
deleted file mode 100644
index 77ceb0c..0000000
--- a/includes/stg/TailCalls.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* -----------------------------------------------------------------------------
- *
- * (c) The GHC Team, 1998-2009
- *
- * Stuff for implementing proper tail jumps.
- *
- * Do not #include this file directly: #include "Rts.h" instead.
- *
- * To understand the structure of the RTS headers, see the wiki:
- *   http://hackage.haskell.org/trac/ghc/wiki/Commentary/SourceTree/Includes
- *
- * ---------------------------------------------------------------------------*/
-
-#ifndef TAILCALLS_H
-#define TAILCALLS_H
-
-/* -----------------------------------------------------------------------------
-   Unmangled tail-jumping: use the mini interpretter.
-   -------------------------------------------------------------------------- */
-
-#ifdef USE_MINIINTERPRETER
-
-#define JMP_(cont) return((StgFunPtr)(cont))
-#define FB_
-#define FE_
-
-#else
-
-extern void __DISCARD__(void);
-
-/* -----------------------------------------------------------------------------
-   Tail calling on x86
-   -------------------------------------------------------------------------- */
-
-#if i386_HOST_ARCH
-
-/* Note about discard: possibly there to fool GCC into clearing up
-   before we do the jump eg. if there are some arguments left on the C
-   stack that GCC hasn't popped yet.  Also possibly to fool any
-   optimisations (a function call often acts as a barrier).  Not sure
-   if any of this is necessary now -- SDM
-
-   Comment to above note: I don't think the __DISCARD__() in JMP_ is 
-   necessary.  Arguments should be popped from the C stack immediately
-   after returning from a function, as long as we pass -fno-defer-pop
-   to gcc.  Moreover, a goto to a first-class label acts as a barrier 
-   for optimisations in the same way a function call does. 
-   -= chak
-   */
-
-/* The goto here seems to cause gcc -O2 to delete all the code after
-   it - including the FE_ marker and the epilogue code - exactly what
-   we want! -- SDM
-   */
-
-#define JMP_(cont)			\
-    { 					\
-      void *__target;			\
-      __DISCARD__();			\
-      __target = (void *)(cont);    	\
-      goto *__target; 	    	    	\
-    }
-
-#endif /* i386_HOST_ARCH */
-
-/* -----------------------------------------------------------------------------
-   Tail calling on x86_64
-   -------------------------------------------------------------------------- */
-
-#if x86_64_HOST_ARCH
-
-/*
-  NOTE about __DISCARD__():
-
-  On x86_64 this is necessary to work around bugs in the register
-  variable support in gcc.  Without the __DISCARD__() call, gcc will
-  silently throw away assignements to global register variables that
-  happen before the jump.
-
-  Here's the example:
-
-  extern void g(void);
-  static void f(void) {
-    R1 = g;
-    __DISCARD__()
-    goto *R1;
-  }
-
-  without the dummy function call, gcc throws away the assignment to R1
-  (gcc 3.4.3) gcc bug #20359.
-*/
-
-#define JMP_(cont)			\
-    { 					\
-      __DISCARD__();			\
-      goto *(void *)(cont); 	    	    	\
-    }
-
-#endif /* x86_64_HOST_ARCH */
-
-/* -----------------------------------------------------------------------------
-   Tail calling on Sparc
-   -------------------------------------------------------------------------- */
-
-#ifdef sparc_HOST_ARCH
-
-#define JMP_(cont)	((F_) (cont))()
-	/* Oh so happily, the above turns into a "call" instruction,
-	   which, on a SPARC, is nothing but a "jmpl" with the
-	   return address in %o7 [which we don't care about].
-	*/
-
-/* Don't need these for sparc mangling */
-#define FB_
-#define FE_
-
-#endif /* sparc_HOST_ARCH */
-
-/* -----------------------------------------------------------------------------
-   Tail calling on PowerPC
-   -------------------------------------------------------------------------- */
-
-#ifdef powerpc_HOST_ARCH
-
-#define JMP_(cont)			\
-    { 					\
-      void *target;			\
-      target = (void *)(cont);    	\
-      __DISCARD__();			\
-      goto *target; 	    	    	\
-    }
-
-/*
-	The __DISCARD__ is there because Apple's April 2002 Beta of GCC 3.1
-	sometimes generates incorrect code otherwise.
-	It tends to "forget" to update global register variables in the presence
-	of decrement/increment operators:
-	JMP_(*(--Sp)) is wrongly compiled as JMP_(Sp[-1]).
-	Calling __DISCARD__ in between works around this problem.
-*/
-
-/*
-	I would _love_ to use the following instead,
-	but some versions of Apple's GCC fail to generate code for it
-	if it is called for a casted data pointer - which is exactly what
-	we are going to do...
-
-	#define JMP_(cont)	((F_) (cont))()
-*/
-
-#endif /* powerpc_HOST_ARCH */
-
-#ifdef powerpc64_HOST_ARCH
-#define JMP_(cont) ((F_) (cont))()
-#endif
-
-/* -----------------------------------------------------------------------------
-  FUNBEGIN and FUNEND.
-
-  These are markers indicating the start and end of Real Code in a
-  function.  All instructions between the actual start and end of the
-  function and these markers is shredded by the mangler.
-  -------------------------------------------------------------------------- */
-
-/*  The following __DISCARD__() has become necessary with gcc 2.96 on x86.
- *  It prevents gcc from moving stack manipulation code from the function
- *  body (aka the Real Code) into the function prologue, ie, from moving it
- *  over the --- BEGIN --- marker.  It should be noted that (like some
- *  other black magic in GHC's code), there is no essential reason why gcc
- *  could not move some stack manipulation code across the __DISCARD__() -
- *  it just doesn't choose to do it at the moment.
- *  -= chak
- */
- 
-#ifndef FB_
-#define FB_    __asm__ volatile ("--- BEGIN ---"); __DISCARD__ ();
-#endif
-
-#ifndef FE_
-#define FE_    __asm__ volatile ("--- END ---");
-#endif
-
-#endif /* !USE_MINIINTERPRETER */
-
-#endif /* TAILCALLS_H */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.