summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/CodeGen.Platform.h261
-rw-r--r--compiler/GHC/Platform/Regs.hs6
-rw-r--r--compiler/GHC/Platform/SPARC.hs10
-rw-r--r--compiler/ghc.cabal.in1
-rw-r--r--rts/include/stg/MachRegs.h134
-rw-r--r--rts/include/stg/MachRegsForHost.h4
-rw-r--r--testsuite/tests/count-deps/CountDepsAst.stdout3
-rw-r--r--testsuite/tests/count-deps/CountDepsParser.stdout3
8 files changed, 10 insertions, 412 deletions
diff --git a/compiler/CodeGen.Platform.h b/compiler/CodeGen.Platform.h
index 721648a900..ceccc38620 100644
--- a/compiler/CodeGen.Platform.h
+++ b/compiler/CodeGen.Platform.h
@@ -1,8 +1,7 @@
import GHC.Cmm.Expr
#if !(defined(MACHREGS_i386) || defined(MACHREGS_x86_64) \
- || defined(MACHREGS_sparc) || defined(MACHREGS_powerpc) \
- || defined(MACHREGS_aarch64))
+ || defined(MACHREGS_powerpc) || defined(MACHREGS_aarch64))
import GHC.Utils.Panic.Plain
#endif
import GHC.Platform.Reg
@@ -274,77 +273,6 @@ import GHC.Platform.Reg
# define fr31 63
# endif
-#elif defined(MACHREGS_sparc)
-
-# define g0 0
-# define g1 1
-# define g2 2
-# define g3 3
-# define g4 4
-# define g5 5
-# define g6 6
-# define g7 7
-
-# define o0 8
-# define o1 9
-# define o2 10
-# define o3 11
-# define o4 12
-# define o5 13
-# define o6 14
-# define o7 15
-
-# define l0 16
-# define l1 17
-# define l2 18
-# define l3 19
-# define l4 20
-# define l5 21
-# define l6 22
-# define l7 23
-
-# define i0 24
-# define i1 25
-# define i2 26
-# define i3 27
-# define i4 28
-# define i5 29
-# define i6 30
-# define i7 31
-
-# define f0 32
-# define f1 33
-# define f2 34
-# define f3 35
-# define f4 36
-# define f5 37
-# define f6 38
-# define f7 39
-# define f8 40
-# define f9 41
-# define f10 42
-# define f11 43
-# define f12 44
-# define f13 45
-# define f14 46
-# define f15 47
-# define f16 48
-# define f17 49
-# define f18 50
-# define f19 51
-# define f20 52
-# define f21 53
-# define f22 54
-# define f23 55
-# define f24 56
-# define f25 57
-# define f26 58
-# define f27 59
-# define f28 60
-# define f29 61
-# define f30 62
-# define f31 63
-
#elif defined(MACHREGS_s390x)
# define r0 0
@@ -734,7 +662,7 @@ haveRegBase = False
-- reg is the machine register it is stored in.
globalRegMaybe :: GlobalReg -> Maybe RealReg
#if defined(MACHREGS_i386) || defined(MACHREGS_x86_64) \
- || defined(MACHREGS_sparc) || defined(MACHREGS_powerpc) \
+ || defined(MACHREGS_powerpc) \
|| defined(MACHREGS_arm) || defined(MACHREGS_aarch64) \
|| defined(MACHREGS_s390x) || defined(MACHREGS_riscv64)
# if defined(REG_Base)
@@ -789,52 +717,22 @@ globalRegMaybe (FloatReg 5) = Just (RealRegSingle REG_F5)
globalRegMaybe (FloatReg 6) = Just (RealRegSingle REG_F6)
# endif
# if defined(REG_D1)
-globalRegMaybe (DoubleReg 1) =
-# if defined(MACHREGS_sparc)
- Just (RealRegPair REG_D1 (REG_D1 + 1))
-# else
- Just (RealRegSingle REG_D1)
-# endif
+globalRegMaybe (DoubleReg 1) = Just (RealRegSingle REG_D1)
# endif
# if defined(REG_D2)
-globalRegMaybe (DoubleReg 2) =
-# if defined(MACHREGS_sparc)
- Just (RealRegPair REG_D2 (REG_D2 + 1))
-# else
- Just (RealRegSingle REG_D2)
-# endif
+globalRegMaybe (DoubleReg 2) = Just (RealRegSingle REG_D2)
# endif
# if defined(REG_D3)
-globalRegMaybe (DoubleReg 3) =
-# if defined(MACHREGS_sparc)
- Just (RealRegPair REG_D3 (REG_D3 + 1))
-# else
- Just (RealRegSingle REG_D3)
-# endif
+globalRegMaybe (DoubleReg 3) = Just (RealRegSingle REG_D3)
# endif
# if defined(REG_D4)
-globalRegMaybe (DoubleReg 4) =
-# if defined(MACHREGS_sparc)
- Just (RealRegPair REG_D4 (REG_D4 + 1))
-# else
- Just (RealRegSingle REG_D4)
-# endif
+globalRegMaybe (DoubleReg 4) = Just (RealRegSingle REG_D4)
# endif
# if defined(REG_D5)
-globalRegMaybe (DoubleReg 5) =
-# if defined(MACHREGS_sparc)
- Just (RealRegPair REG_D5 (REG_D5 + 1))
-# else
- Just (RealRegSingle REG_D5)
-# endif
+globalRegMaybe (DoubleReg 5) = Just (RealRegSingle REG_D5)
# endif
# if defined(REG_D6)
-globalRegMaybe (DoubleReg 6) =
-# if defined(MACHREGS_sparc)
- Just (RealRegPair REG_D6 (REG_D6 + 1))
-# else
- Just (RealRegSingle REG_D6)
-# endif
+globalRegMaybe (DoubleReg 6) = Just (RealRegSingle REG_D6)
# endif
# if MAX_REAL_XMM_REG != 0
# if defined(REG_XMM1)
@@ -1109,149 +1007,6 @@ freeReg REG_D6 = False
freeReg _ = True
-#elif defined(MACHREGS_sparc)
-
--- SPARC regs used by the OS / ABI
--- %g0(r0) is always zero
-freeReg g0 = False
-
--- %g5(r5) - %g7(r7)
--- are reserved for the OS
-freeReg g5 = False
-freeReg g6 = False
-freeReg g7 = False
-
--- %o6(r14)
--- is the C stack pointer
-freeReg o6 = False
-
--- %o7(r15)
--- holds the C return address
-freeReg o7 = False
-
--- %i6(r30)
--- is the C frame pointer
-freeReg i6 = False
-
--- %i7(r31)
--- is used for C return addresses
-freeReg i7 = False
-
--- %f0(r32) - %f1(r32)
--- are C floating point return regs
-freeReg f0 = False
-freeReg f1 = False
-
-{-
-freeReg regNo
- -- don't release high half of double regs
- | regNo >= f0
- , regNo < NCG_FirstFloatReg
- , regNo `mod` 2 /= 0
- = False
--}
-
-# if defined(REG_Base)
-freeReg REG_Base = False
-# endif
-# if defined(REG_R1)
-freeReg REG_R1 = False
-# endif
-# if defined(REG_R2)
-freeReg REG_R2 = False
-# endif
-# if defined(REG_R3)
-freeReg REG_R3 = False
-# endif
-# if defined(REG_R4)
-freeReg REG_R4 = False
-# endif
-# if defined(REG_R5)
-freeReg REG_R5 = False
-# endif
-# if defined(REG_R6)
-freeReg REG_R6 = False
-# endif
-# if defined(REG_R7)
-freeReg REG_R7 = False
-# endif
-# if defined(REG_R8)
-freeReg REG_R8 = False
-# endif
-# if defined(REG_R9)
-freeReg REG_R9 = False
-# endif
-# if defined(REG_R10)
-freeReg REG_R10 = False
-# endif
-# if defined(REG_F1)
-freeReg REG_F1 = False
-# endif
-# if defined(REG_F2)
-freeReg REG_F2 = False
-# endif
-# if defined(REG_F3)
-freeReg REG_F3 = False
-# endif
-# if defined(REG_F4)
-freeReg REG_F4 = False
-# endif
-# if defined(REG_F5)
-freeReg REG_F5 = False
-# endif
-# if defined(REG_F6)
-freeReg REG_F6 = False
-# endif
-# if defined(REG_D1)
-freeReg REG_D1 = False
-# endif
-# if defined(REG_D1_2)
-freeReg REG_D1_2 = False
-# endif
-# if defined(REG_D2)
-freeReg REG_D2 = False
-# endif
-# if defined(REG_D2_2)
-freeReg REG_D2_2 = False
-# endif
-# if defined(REG_D3)
-freeReg REG_D3 = False
-# endif
-# if defined(REG_D3_2)
-freeReg REG_D3_2 = False
-# endif
-# if defined(REG_D4)
-freeReg REG_D4 = False
-# endif
-# if defined(REG_D4_2)
-freeReg REG_D4_2 = False
-# endif
-# if defined(REG_D5)
-freeReg REG_D5 = False
-# endif
-# if defined(REG_D5_2)
-freeReg REG_D5_2 = False
-# endif
-# if defined(REG_D6)
-freeReg REG_D6 = False
-# endif
-# if defined(REG_D6_2)
-freeReg REG_D6_2 = False
-# endif
-# if defined(REG_Sp)
-freeReg REG_Sp = False
-# endif
-# if defined(REG_SpLim)
-freeReg REG_SpLim = False
-# endif
-# if defined(REG_Hp)
-freeReg REG_Hp = False
-# endif
-# if defined(REG_HpLim)
-freeReg REG_HpLim = False
-# endif
-freeReg _ = True
-
#else
freeReg = panic "freeReg not defined for this platform"
diff --git a/compiler/GHC/Platform/Regs.hs b/compiler/GHC/Platform/Regs.hs
index e0bdf5d6e5..d56b17ebe5 100644
--- a/compiler/GHC/Platform/Regs.hs
+++ b/compiler/GHC/Platform/Regs.hs
@@ -12,7 +12,6 @@ import qualified GHC.Platform.ARM as ARM
import qualified GHC.Platform.AArch64 as AArch64
import qualified GHC.Platform.PPC as PPC
import qualified GHC.Platform.S390X as S390X
-import qualified GHC.Platform.SPARC as SPARC
import qualified GHC.Platform.X86 as X86
import qualified GHC.Platform.X86_64 as X86_64
import qualified GHC.Platform.RISCV64 as RISCV64
@@ -29,7 +28,6 @@ callerSaves platform
ArchX86 -> X86.callerSaves
ArchX86_64 -> X86_64.callerSaves
ArchS390X -> S390X.callerSaves
- ArchSPARC -> SPARC.callerSaves
ArchARM {} -> ARM.callerSaves
ArchAArch64 -> AArch64.callerSaves
ArchRISCV64 -> RISCV64.callerSaves
@@ -52,7 +50,6 @@ activeStgRegs platform
ArchX86 -> X86.activeStgRegs
ArchX86_64 -> X86_64.activeStgRegs
ArchS390X -> S390X.activeStgRegs
- ArchSPARC -> SPARC.activeStgRegs
ArchARM {} -> ARM.activeStgRegs
ArchAArch64 -> AArch64.activeStgRegs
ArchRISCV64 -> RISCV64.activeStgRegs
@@ -70,7 +67,6 @@ haveRegBase platform
ArchX86 -> X86.haveRegBase
ArchX86_64 -> X86_64.haveRegBase
ArchS390X -> S390X.haveRegBase
- ArchSPARC -> SPARC.haveRegBase
ArchARM {} -> ARM.haveRegBase
ArchAArch64 -> AArch64.haveRegBase
ArchRISCV64 -> RISCV64.haveRegBase
@@ -88,7 +84,6 @@ globalRegMaybe platform
ArchX86 -> X86.globalRegMaybe
ArchX86_64 -> X86_64.globalRegMaybe
ArchS390X -> S390X.globalRegMaybe
- ArchSPARC -> SPARC.globalRegMaybe
ArchARM {} -> ARM.globalRegMaybe
ArchAArch64 -> AArch64.globalRegMaybe
ArchRISCV64 -> RISCV64.globalRegMaybe
@@ -106,7 +101,6 @@ freeReg platform
ArchX86 -> X86.freeReg
ArchX86_64 -> X86_64.freeReg
ArchS390X -> S390X.freeReg
- ArchSPARC -> SPARC.freeReg
ArchARM {} -> ARM.freeReg
ArchAArch64 -> AArch64.freeReg
ArchRISCV64 -> RISCV64.freeReg
diff --git a/compiler/GHC/Platform/SPARC.hs b/compiler/GHC/Platform/SPARC.hs
deleted file mode 100644
index d0ab5fe41a..0000000000
--- a/compiler/GHC/Platform/SPARC.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module GHC.Platform.SPARC where
-
-import GHC.Prelude
-
-#define MACHREGS_NO_REGS 0
-#define MACHREGS_sparc 1
-#include "CodeGen.Platform.h"
-
diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in
index 5e898894a3..31981f8116 100644
--- a/compiler/ghc.cabal.in
+++ b/compiler/ghc.cabal.in
@@ -502,7 +502,6 @@ Library
GHC.Platform.Regs
GHC.Platform.RISCV64
GHC.Platform.S390X
- GHC.Platform.SPARC
GHC.Platform.Ways
GHC.Platform.X86
GHC.Platform.X86_64
diff --git a/rts/include/stg/MachRegs.h b/rts/include/stg/MachRegs.h
index d50969b66a..6c66e112b2 100644
--- a/rts/include/stg/MachRegs.h
+++ b/rts/include/stg/MachRegs.h
@@ -340,140 +340,6 @@ the stack. See Note [Overlapping global registers] for implications.
#define MAX_REAL_DOUBLE_REG 6
/* -----------------------------------------------------------------------------
- The Sun SPARC register mapping
-
- !! IMPORTANT: if you change this register mapping you must also update
- compiler/GHC/CmmToAsm/SPARC/Regs.hs. That file handles the
- mapping for the NCG. This one only affects via-c code.
-
- The SPARC register (window) story: Remember, within the Haskell
- Threaded World, we essentially ``shut down'' the register-window
- mechanism---the window doesn't move at all while in this World. It
- *does* move, of course, if we call out to arbitrary~C...
-
- The %i, %l, and %o registers (8 each) are the input, local, and
- output registers visible in one register window. The 8 %g (global)
- registers are visible all the time.
-
- zero: always zero
- scratch: volatile across C-fn calls. used by linker.
- app: usable by application
- system: reserved for system
-
- alloc: allocated to in the register allocator, intra-closure only
-
- GHC usage v8 ABI v9 ABI
- Global
- %g0 zero zero zero
- %g1 alloc scratch scrach
- %g2 alloc app app
- %g3 alloc app app
- %g4 alloc app scratch
- %g5 system scratch
- %g6 system system
- %g7 system system
-
- Output: can be zapped by callee
- %o0-o5 alloc caller saves
- %o6 C stack ptr
- %o7 C ret addr
-
- Local: maintained by register windowing mechanism
- %l0 alloc
- %l1 R1
- %l2 R2
- %l3 R3
- %l4 R4
- %l5 R5
- %l6 alloc
- %l7 alloc
-
- Input
- %i0 Sp
- %i1 Base
- %i2 SpLim
- %i3 Hp
- %i4 alloc
- %i5 R6
- %i6 C frame ptr
- %i7 C ret addr
-
- The paired nature of the floating point registers causes complications for
- the native code generator. For convenience, we pretend that the first 22
- fp regs %f0 .. %f21 are actually 11 double regs, and the remaining 10 are
- float (single) regs. The NCG acts accordingly. That means that the
- following FP assignment is rather fragile, and should only be changed
- with extreme care. The current scheme is:
-
- %f0 /%f1 FP return from C
- %f2 /%f3 D1
- %f4 /%f5 D2
- %f6 /%f7 ncg double spill tmp #1
- %f8 /%f9 ncg double spill tmp #2
- %f10/%f11 allocatable
- %f12/%f13 allocatable
- %f14/%f15 allocatable
- %f16/%f17 allocatable
- %f18/%f19 allocatable
- %f20/%f21 allocatable
-
- %f22 F1
- %f23 F2
- %f24 F3
- %f25 F4
- %f26 ncg single spill tmp #1
- %f27 ncg single spill tmp #2
- %f28 allocatable
- %f29 allocatable
- %f30 allocatable
- %f31 allocatable
-
- -------------------------------------------------------------------------- */
-
-#elif defined(MACHREGS_sparc)
-
-#define REG(x) __asm__("%" #x)
-
-#define CALLER_SAVES_USER
-
-#define CALLER_SAVES_F1
-#define CALLER_SAVES_F2
-#define CALLER_SAVES_F3
-#define CALLER_SAVES_F4
-#define CALLER_SAVES_D1
-#define CALLER_SAVES_D2
-
-#define REG_R1 l1
-#define REG_R2 l2
-#define REG_R3 l3
-#define REG_R4 l4
-#define REG_R5 l5
-#define REG_R6 i5
-
-#define REG_F1 f22
-#define REG_F2 f23
-#define REG_F3 f24
-#define REG_F4 f25
-
-/* for each of the double arg regs,
- Dn_2 is the high half. */
-
-#define REG_D1 f2
-#define REG_D1_2 f3
-
-#define REG_D2 f4
-#define REG_D2_2 f5
-
-#define REG_Sp i0
-#define REG_SpLim i2
-
-#define REG_Hp i3
-
-#define REG_Base i1
-
-#define NCG_FirstFloatReg f22
-
-/* -----------------------------------------------------------------------------
The ARM EABI register mapping
Here we consider ARM mode (i.e. 32bit isns)
diff --git a/rts/include/stg/MachRegsForHost.h b/rts/include/stg/MachRegsForHost.h
index e902d528f6..613a0bc4be 100644
--- a/rts/include/stg/MachRegsForHost.h
+++ b/rts/include/stg/MachRegsForHost.h
@@ -51,10 +51,6 @@
#define MACHREGS_powerpc 1
#endif
-#if defined(sparc_HOST_ARCH)
-#define MACHREGS_sparc 1
-#endif
-
#if defined(arm_HOST_ARCH)
#define MACHREGS_arm 1
#endif
diff --git a/testsuite/tests/count-deps/CountDepsAst.stdout b/testsuite/tests/count-deps/CountDepsAst.stdout
index a53b2d3f14..013fc246c6 100644
--- a/testsuite/tests/count-deps/CountDepsAst.stdout
+++ b/testsuite/tests/count-deps/CountDepsAst.stdout
@@ -1,4 +1,4 @@
-Found 279 Language.Haskell.Syntax module dependencies
+Found 278 Language.Haskell.Syntax module dependencies
GHC.Builtin.Names
GHC.Builtin.PrimOps
GHC.Builtin.PrimOps.Ids
@@ -142,7 +142,6 @@ GHC.Platform.Reg
GHC.Platform.Reg.Class
GHC.Platform.Regs
GHC.Platform.S390X
-GHC.Platform.SPARC
GHC.Platform.Ways
GHC.Platform.X86
GHC.Platform.X86_64
diff --git a/testsuite/tests/count-deps/CountDepsParser.stdout b/testsuite/tests/count-deps/CountDepsParser.stdout
index 11fa8e2d08..58db04dc19 100644
--- a/testsuite/tests/count-deps/CountDepsParser.stdout
+++ b/testsuite/tests/count-deps/CountDepsParser.stdout
@@ -1,4 +1,4 @@
-Found 285 GHC.Parser module dependencies
+Found 284 GHC.Parser module dependencies
GHC.Builtin.Names
GHC.Builtin.PrimOps
GHC.Builtin.PrimOps.Ids
@@ -148,7 +148,6 @@ GHC.Platform.Reg
GHC.Platform.Reg.Class
GHC.Platform.Regs
GHC.Platform.S390X
-GHC.Platform.SPARC
GHC.Platform.Ways
GHC.Platform.X86
GHC.Platform.X86_64