Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Start separating out the RTS and Haskell imports of MachRegs.h

No functional differences yet
  • Loading branch information...
commit 8e7fb28fc89eb9b99c747698f41995c269cd1090 1 parent 6997bb5
@igfoo igfoo authored
View
2  compiler/codeGen/CgUtils.hs
@@ -45,7 +45,7 @@ module CgUtils (
) where
#include "HsVersions.h"
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
import BlockId
import CgMonad
View
2  compiler/codeGen/StgCmmUtils.hs
@@ -50,7 +50,7 @@ module StgCmmUtils (
) where
#include "HsVersions.h"
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
import StgCmmMonad
import StgCmmClosure
View
2  compiler/nativeGen/PPC/Regs.hs
@@ -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
View
2  compiler/nativeGen/RegAlloc/Linear/Main.hs
@@ -130,7 +130,7 @@ import Data.Maybe
import Data.List
import Control.Monad
-#include "../includes/stg/MachRegs.h"
+#include "../includes/stg/HaskellMachRegs.h"
-- -----------------------------------------------------------------------------
View
2  compiler/nativeGen/SPARC/RegPlate.hs
@@ -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
View
2  compiler/nativeGen/X86/Regs.hs
@@ -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
View
2  includes/Cmm.h
@@ -346,7 +346,7 @@
* 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"
View
3  includes/HaskellConstants.hs
@@ -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"
View
2  includes/Stg.h
@@ -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"
View
47 includes/stg/HaskellMachRegs.h
@@ -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 */
View
64 includes/stg/MachRegs.h
@@ -20,38 +20,21 @@
*/
/*
- * 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)
@@ -110,8 +93,6 @@
#define MAX_REAL_DOUBLE_REG 0
#define MAX_REAL_LONG_REG 0
-#endif /* iX86 */
-
/* -----------------------------------------------------------------------------
The x86-64 register mapping
@@ -141,7 +122,7 @@
--------------------------------------------------------------------------- */
-#if x86_64_REGS
+#elif MACHREGS_x86_64
#define REG(x) __asm__("%" #x)
@@ -186,8 +167,6 @@
#define MAX_REAL_DOUBLE_REG 2
#define MAX_REAL_LONG_REG 0
-#endif /* x86_64 */
-
/* -----------------------------------------------------------------------------
The PowerPC register mapping
@@ -218,7 +197,7 @@
We can do the Whole Business with callee-save registers only!
-------------------------------------------------------------------------- */
-#if powerpc_REGS
+#elif MACHREGS_powerpc
#define REG(x) __asm__(#x)
@@ -231,7 +210,7 @@
#define REG_R7 r20
#define REG_R8 r21
-#if darwin_REGS
+#if MACHREGS_darwin
#define REG_F1 f14
#define REG_F2 f15
@@ -260,8 +239,6 @@
#define REG_Base r27
-#endif /* powerpc */
-
/* -----------------------------------------------------------------------------
The Sun SPARC register mapping
@@ -353,7 +330,7 @@
-------------------------------------------------------------------------- */
-#if sparc_REGS
+#elif MACHREGS_sparc
#define REG(x) __asm__("%" #x)
@@ -396,8 +373,6 @@
#define NCG_FirstFloatReg f22
-#endif /* sparc */
-
/* -----------------------------------------------------------------------------
The ARM EABI register mapping
@@ -433,8 +408,7 @@
d16-d31/q8-q15 Argument / result/ scratch registers
----------------------------------------------------------------------------- */
-
-#if arm_REGS
+#elif MACHREGS_arm
#define REG(x) __asm__(#x)
@@ -459,9 +433,17 @@
#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
View
47 includes/stg/RtsMachRegs.h
@@ -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 */
View
2  utils/genapply/GenApply.hs
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.