diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-01-26 20:42:39 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2022-01-29 14:52:56 -0500 |
commit | d85a527f493c0ed41736cf6220a4291a26769d50 (patch) | |
tree | ea154efc207f0341854f9c8b3523f998a0e60227 | |
parent | 313afb3d0f96c952ae74c946f8166a80f7e64d4a (diff) | |
download | haskell-d85a527f493c0ed41736cf6220a4291a26769d50.tar.gz |
Rip out SPARC register support
-rw-r--r-- | compiler/CodeGen.Platform.h | 261 | ||||
-rw-r--r-- | compiler/GHC/Platform/Regs.hs | 6 | ||||
-rw-r--r-- | compiler/GHC/Platform/SPARC.hs | 10 | ||||
-rw-r--r-- | compiler/ghc.cabal.in | 1 | ||||
-rw-r--r-- | rts/include/stg/MachRegs.h | 134 | ||||
-rw-r--r-- | rts/include/stg/MachRegsForHost.h | 4 | ||||
-rw-r--r-- | testsuite/tests/count-deps/CountDepsAst.stdout | 3 | ||||
-rw-r--r-- | testsuite/tests/count-deps/CountDepsParser.stdout | 3 |
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 |