Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Alex D
GHC
Commits
8e7fb28f
Commit
8e7fb28f
authored
Aug 06, 2012
by
ian@well-typed.com
Browse files
Start separating out the RTS and Haskell imports of MachRegs.h
No functional differences yet
parent
6997bb5e
Changes
13
Hide whitespace changes
Inline
Side-by-side
compiler/codeGen/CgUtils.hs
View file @
8e7fb28f
...
...
@@ -45,7 +45,7 @@ module CgUtils (
)
where
#
include
"HsVersions.h"
#
include
"../includes/stg/MachRegs.h"
#
include
"../includes/stg/
Haskell
MachRegs.h"
import
BlockId
import
CgMonad
...
...
compiler/codeGen/StgCmmUtils.hs
View file @
8e7fb28f
...
...
@@ -50,7 +50,7 @@ module StgCmmUtils (
)
where
#
include
"HsVersions.h"
#
include
"../includes/stg/MachRegs.h"
#
include
"../includes/stg/
Haskell
MachRegs.h"
import
StgCmmMonad
import
StgCmmClosure
...
...
compiler/nativeGen/PPC/Regs.hs
View file @
8e7fb28f
...
...
@@ -55,7 +55,7 @@ where
#
include
"nativeGen/NCG.h"
#
include
"HsVersions.h"
#
include
"../includes/stg/MachRegs.h"
#
include
"../includes/stg/
Haskell
MachRegs.h"
import
Reg
import
RegClass
...
...
compiler/nativeGen/RegAlloc/Linear/Main.hs
View file @
8e7fb28f
...
...
@@ -130,7 +130,7 @@ import Data.Maybe
import
Data.List
import
Control.Monad
#
include
"../includes/stg/MachRegs.h"
#
include
"../includes/stg/
Haskell
MachRegs.h"
-- -----------------------------------------------------------------------------
...
...
compiler/nativeGen/SPARC/RegPlate.hs
View file @
8e7fb28f
...
...
@@ -100,7 +100,7 @@ import FastBool
#
define
f31
63
#
include
"../includes/stg/MachRegs.h"
#
include
"../includes/stg/
Haskell
MachRegs.h"
-- | Check whether a machine register is free for allocation.
freeReg
::
RegNo
->
FastBool
...
...
compiler/nativeGen/X86/Regs.hs
View file @
8e7fb28f
...
...
@@ -51,7 +51,7 @@ where
#
include
"nativeGen/NCG.h"
#
include
"HsVersions.h"
#
include
"../includes/stg/MachRegs.h"
#
include
"../includes/stg/
Haskell
MachRegs.h"
import
Reg
import
RegClass
...
...
includes/Cmm.h
View file @
8e7fb28f
...
...
@@ -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/
Rts
MachRegs.h"
#include
"rts/storage/Liveness.h"
#include
"rts/prof/LDV.h"
...
...
includes/HaskellConstants.hs
View file @
8e7fb28f
...
...
@@ -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"
...
...
includes/Stg.h
View file @
8e7fb28f
...
...
@@ -229,7 +229,7 @@ typedef StgFunPtr F_;
-------------------------------------------------------------------------- */
#include
"stg/DLL.h"
#include
"stg/MachRegs.h"
#include
"stg/
Rts
MachRegs.h"
#include
"stg/Regs.h"
#include
"stg/Ticky.h"
...
...
includes/stg/HaskellMachRegs.h
0 → 100644
View file @
8e7fb28f
/* -----------------------------------------------------------------------------
*
* (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 */
includes/stg/MachRegs.h
View file @
8e7fb28f
...
...
@@ -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.
*/
#if
ndef
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
#
el
if
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
#
el
if
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
#
el
if
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
...
...
includes/stg/RtsMachRegs.h
0 → 100644
View file @
8e7fb28f
/* -----------------------------------------------------------------------------
*
* (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 */
utils/genapply/GenApply.hs
View file @
8e7fb28f
...
...
@@ -8,7 +8,7 @@
module
Main
(
main
)
where
#
include
"../../includes/ghcconfig.h"
#
include
"../../includes/stg/MachRegs.h"
#
include
"../../includes/stg/
Rts
MachRegs.h"
#
include
"../../includes/rts/Constants.h"
-- Needed for TAG_BITS
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment