Start separating out the RTS and Haskell imports of MachRegs.h
authorIan Lynagh <ian@well-typed.com>
Mon, 6 Aug 2012 16:34:12 +0000 (17:34 +0100)
committerIan Lynagh <ian@well-typed.com>
Mon, 6 Aug 2012 16:49:22 +0000 (17:49 +0100)
No functional differences yet

13 files changed:
compiler/codeGen/CgUtils.hs
compiler/codeGen/StgCmmUtils.hs
compiler/nativeGen/PPC/Regs.hs
compiler/nativeGen/RegAlloc/Linear/Main.hs
compiler/nativeGen/SPARC/RegPlate.hs
compiler/nativeGen/X86/Regs.hs
includes/Cmm.h
includes/HaskellConstants.hs
includes/Stg.h
includes/stg/HaskellMachRegs.h [new file with mode: 0644]
includes/stg/MachRegs.h
includes/stg/RtsMachRegs.h [new file with mode: 0644]
utils/genapply/GenApply.hs

index 08b6fb8..b7acc1c 100644 (file)
@@ -45,7 +45,7 @@ module CgUtils (
   ) where
 
 #include "HsVersions.h"
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
 
 import BlockId
 import CgMonad
index 4798c65..caecff9 100644 (file)
@@ -50,7 +50,7 @@ module StgCmmUtils (
   ) where
 
 #include "HsVersions.h"
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
 
 import StgCmmMonad
 import StgCmmClosure
index fe4e06f..0d1c570 100644 (file)
@@ -55,7 +55,7 @@ where
 
 #include "nativeGen/NCG.h"
 #include "HsVersions.h"
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
 
 import Reg
 import RegClass
index 0d3f748..07b6e33 100644 (file)
@@ -130,7 +130,7 @@ import Data.Maybe
 import Data.List
 import Control.Monad
 
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
 
 
 -- -----------------------------------------------------------------------------
index 32d2da1..be638a9 100644 (file)
@@ -100,7 +100,7 @@ import FastBool
 #define f31    63
 
 
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
 
 -- | Check whether a machine register is free for allocation.
 freeReg :: RegNo -> FastBool
index 854df0d..4405258 100644 (file)
@@ -51,7 +51,7 @@ where
 #include "nativeGen/NCG.h"
 #include "HsVersions.h"
 
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
 
 import Reg
 import RegClass
index c7f34b6..edcf46e 100644 (file)
  * Need MachRegs, because some of the RTS code is conditionally
  * compiled based on REG_R1, REG_R2, etc.
  */
-#include "stg/MachRegs.h"
+#include "stg/RtsMachRegs.h"
 
 #include "rts/storage/Liveness.h"
 #include "rts/prof/LDV.h"
index fc541c5..1cf6de5 100644 (file)
@@ -16,7 +16,8 @@ settings for the target plat instead).
 -}
 #include "../includes/ghcautoconf.h"
 
-#include "stg/MachRegs.h"
+#include "stg/HaskellMachRegs.h"
+
 #include "rts/Constants.h"
 #include "MachDeps.h"
 #include "../includes/dist-derivedconstants/header/DerivedConstants.h"
index 76067de..ba0c4cf 100644 (file)
@@ -229,7 +229,7 @@ typedef StgFunPtr       F_;
    -------------------------------------------------------------------------- */
 
 #include "stg/DLL.h"
-#include "stg/MachRegs.h"
+#include "stg/RtsMachRegs.h"
 #include "stg/Regs.h"
 #include "stg/Ticky.h"
 
diff --git a/includes/stg/HaskellMachRegs.h b/includes/stg/HaskellMachRegs.h
new file mode 100644 (file)
index 0000000..7a16f47
--- /dev/null
@@ -0,0 +1,47 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 1998-2011
+ *
+ * Registers used in STG code.  Might or might not correspond to
+ * actual machine registers.
+ *
+ * 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 HASKELLMACHREGS_H
+#define HASKELLMACHREGS_H
+
+/*
+ * Defining NO_REGS causes no global registers to be used.  NO_REGS is
+ * typically defined by GHC, via a command-line option passed to gcc,
+ * when the -funregisterised flag is given.
+ *
+ * NB. When NO_REGS is on, calling & return conventions may be
+ * different.  For example, all function arguments will be passed on
+ * the stack, and components of an unboxed tuple will be returned on
+ * the stack rather than in registers.
+ */
+#ifdef NO_REGS
+
+#define MACHREGS_NO_REGS 1
+
+#else
+
+#define MACHREGS_NO_REGS 0
+
+#define MACHREGS_i386     i386_TARGET_ARCH
+#define MACHREGS_x86_64   x86_64_TARGET_ARCH
+#define MACHREGS_powerpc  (powerpc_TARGET_ARCH || powerpc64_TARGET_ARCH || rs6000_TARGET_ARCH)
+#define MACHREGS_sparc    sparc_TARGET_ARCH
+#define MACHREGS_arm      arm_TARGET_ARCH
+#define MACHREGS_darwin   darwin_TARGET_OS
+
+#endif
+
+#include "stg/MachRegs.h"
+
+#endif /* HASKELLMACHREGS_H */
index 91c1f89..6a70d08 100644 (file)
  */
 
 /*
- * Defining NO_REGS causes no global registers to be used.  NO_REGS is
+ * Defining MACHREGS_NO_REGS to 1 causes no global registers to be used.
+ * MACHREGS_NO_REGS is typically controlled by NO_REGS, which is
  * typically defined by GHC, via a command-line option passed to gcc,
  * when the -funregisterised flag is given.
  *
- * NB. When NO_REGS is on, calling & return conventions may be
+ * NB. When MACHREGS_NO_REGS to 1, calling & return conventions may be
  * different.  For example, all function arguments will be passed on
  * the stack, and components of an unboxed tuple will be returned on
  * the stack rather than in registers.
  */
-#ifndef NO_REGS
+#if MACHREGS_NO_REGS == 1
 
-/* NOTE: when testing the platform in this file we must test either
- * *_HOST_ARCH and *_TARGET_ARCH, depending on whether COMPILING_GHC
- * is set.  This is because when we're compiling the RTS and HC code,
- * the platform we're running on is the HOST, but when compiling GHC
- * we want to know about the register mapping on the TARGET platform.
- */
-#ifdef COMPILING_GHC
-#define i386_REGS     i386_TARGET_ARCH
-#define x86_64_REGS   x86_64_TARGET_ARCH
-#define powerpc_REGS  (powerpc_TARGET_ARCH || powerpc64_TARGET_ARCH || rs6000_TARGET_ARCH)
-#define sparc_REGS    sparc_TARGET_ARCH
-#define arm_REGS      arm_TARGET_ARCH
-#define darwin_REGS   darwin_TARGET_OS
-#else
-#define i386_REGS     i386_HOST_ARCH
-#define x86_64_REGS   x86_64_HOST_ARCH
-#define powerpc_REGS  (powerpc_HOST_ARCH || powerpc64_HOST_ARCH || rs6000_HOST_ARCH)
-#define sparc_REGS    sparc_HOST_ARCH
-#define arm_REGS      arm_HOST_ARCH
-#define darwin_REGS   darwin_HOST_OS
-#endif
+/* Nothing */
+
+#elif MACHREGS_NO_REGS == 0
 
 /* ----------------------------------------------------------------------------
    Caller saves and callee-saves regs.
@@ -84,7 +67,7 @@
    Leaving SpLim out of the picture.
    -------------------------------------------------------------------------- */
 
-#if i386_REGS
+#if MACHREGS_i386
 
 #define REG(x) __asm__("%" #x)
 
 #define MAX_REAL_DOUBLE_REG  0
 #define MAX_REAL_LONG_REG    0
 
-#endif /* iX86 */
-
 /* -----------------------------------------------------------------------------
   The x86-64 register mapping
 
 
   --------------------------------------------------------------------------- */
 
-#if x86_64_REGS
+#elif MACHREGS_x86_64
 
 #define REG(x) __asm__("%" #x)
 
 #define MAX_REAL_DOUBLE_REG  2
 #define MAX_REAL_LONG_REG    0
 
-#endif /* x86_64 */
-
 /* -----------------------------------------------------------------------------
    The PowerPC register mapping
 
    We can do the Whole Business with callee-save registers only!
    -------------------------------------------------------------------------- */
 
-#if powerpc_REGS
+#elif MACHREGS_powerpc
 
 #define REG(x) __asm__(#x)
 
 #define REG_R7          r20
 #define REG_R8          r21
 
-#if darwin_REGS
+#if MACHREGS_darwin
 
 #define REG_F1          f14
 #define REG_F2          f15
 
 #define REG_Base        r27
 
-#endif /* powerpc */
-
 /* -----------------------------------------------------------------------------
    The Sun SPARC register mapping
 
 
    -------------------------------------------------------------------------- */
 
-#if sparc_REGS
+#elif MACHREGS_sparc
 
 #define REG(x) __asm__("%" #x)
 
 
 #define NCG_FirstFloatReg f22
 
-#endif /* sparc */
-
 /* -----------------------------------------------------------------------------
    The ARM EABI register mapping
 
    d16-d31/q8-q15        Argument / result/ scratch registers
    ----------------------------------------------------------------------------- */
 
-
-#if arm_REGS
+#elif MACHREGS_arm
 
 #define REG(x) __asm__(#x)
 
 #define REG_D2    d11
 #endif
 
-#endif /* arm */
+#else
+
+#error Cannot find platform to give register info for
+
+#endif
 
-#endif /* NO_REGS */
+#else
+
+#error Bad MACHREGS_NO_REGS value
+
+#endif
 
 /* -----------------------------------------------------------------------------
  * These constants define how many stg registers will be used for
diff --git a/includes/stg/RtsMachRegs.h b/includes/stg/RtsMachRegs.h
new file mode 100644 (file)
index 0000000..f78cb1f
--- /dev/null
@@ -0,0 +1,47 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 1998-2011
+ *
+ * Registers used in STG code.  Might or might not correspond to
+ * actual machine registers.
+ *
+ * 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 RTSMACHREGS_H
+#define RTSMACHREGS_H
+
+/*
+ * Defining NO_REGS causes no global registers to be used.  NO_REGS is
+ * typically defined by GHC, via a command-line option passed to gcc,
+ * when the -funregisterised flag is given.
+ *
+ * NB. When NO_REGS is on, calling & return conventions may be
+ * different.  For example, all function arguments will be passed on
+ * the stack, and components of an unboxed tuple will be returned on
+ * the stack rather than in registers.
+ */
+#ifdef NO_REGS
+
+#define MACHREGS_NO_REGS 1
+
+#else
+
+#define MACHREGS_NO_REGS 0
+
+#define MACHREGS_i386     i386_HOST_ARCH
+#define MACHREGS_x86_64   x86_64_HOST_ARCH
+#define MACHREGS_powerpc  (powerpc_HOST_ARCH || powerpc64_HOST_ARCH || rs6000_HOST_ARCH)
+#define MACHREGS_sparc    sparc_HOST_ARCH
+#define MACHREGS_arm      arm_HOST_ARCH
+#define MACHREGS_darwin   darwin_HOST_OS
+
+#endif
+
+#include "stg/MachRegs.h"
+
+#endif /* RTSMACHREGS_H */
index e39f42e..18a2f85 100644 (file)
@@ -8,7 +8,7 @@
 module Main(main) where
 
 #include "../../includes/ghcconfig.h"
-#include "../../includes/stg/MachRegs.h"
+#include "../../includes/stg/RtsMachRegs.h"
 #include "../../includes/rts/Constants.h"
 
 -- Needed for TAG_BITS