Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
Glasgow Haskell Compiler
GHC
Commits
50b33e32
Commit
50b33e32
authored
Oct 23, 2011
by
Ian Lynagh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eliminate all uses of IF_ARCH_i386, and remove the definition
parent
86f65fdd
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
38 additions
and
31 deletions
+38
-31
compiler/nativeGen/AsmCodeGen.lhs
compiler/nativeGen/AsmCodeGen.lhs
+4
-3
compiler/nativeGen/NCG.h
compiler/nativeGen/NCG.h
+0
-4
compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
+2
-2
compiler/nativeGen/X86/CodeGen.hs
compiler/nativeGen/X86/CodeGen.hs
+10
-5
compiler/nativeGen/X86/Instr.hs
compiler/nativeGen/X86/Instr.hs
+22
-17
No files found.
compiler/nativeGen/AsmCodeGen.lhs
View file @
50b33e32
...
...
@@ -150,7 +150,8 @@ data NcgImpl statics instr jumpDest = NcgImpl {
--------------------
nativeCodeGen :: DynFlags -> Handle -> UniqSupply -> [RawCmmGroup] -> IO ()
nativeCodeGen dflags h us cmms
= let nCG' :: (PlatformOutputable statics, PlatformOutputable instr, Instruction instr) => NcgImpl statics instr jumpDest -> IO ()
= let platform = targetPlatform dflags
nCG' :: (PlatformOutputable statics, PlatformOutputable instr, Instruction instr) => NcgImpl statics instr jumpDest -> IO ()
nCG' ncgImpl = nativeCodeGen' dflags ncgImpl h us cmms
x86NcgImpl = NcgImpl {
cmmTopCodeGen = X86.CodeGen.cmmTopCodeGen
...
...
@@ -160,13 +161,13 @@ nativeCodeGen dflags h us cmms
,shortcutStatics = X86.Instr.shortcutStatics
,shortcutJump = X86.Instr.shortcutJump
,pprNatCmmDecl = X86.Ppr.pprNatCmmDecl
,maxSpillSlots = X86.Instr.maxSpillSlots
,maxSpillSlots = X86.Instr.maxSpillSlots
(target32Bit platform)
,allocatableRegs = X86.Regs.allocatableRegs
,ncg_x86fp_kludge = id
,ncgExpandTop = id
,ncgMakeFarBranches = id
}
in case platformArch
$ targetPlatform dflags
of
in case platformArch
platform
of
ArchX86 -> nCG' (x86NcgImpl { ncg_x86fp_kludge = map x86fp_kludge })
ArchX86_64 -> nCG' x86NcgImpl
ArchPPC ->
...
...
compiler/nativeGen/NCG.h
View file @
50b33e32
...
...
@@ -11,8 +11,4 @@
#include "ghc_boot_platform.h"
#if i386_TARGET_ARCH
# define IF_ARCH_i386(x,y) x
#else
# define IF_ARCH_i386(x,y) y
#endif
compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
View file @
50b33e32
...
...
@@ -61,8 +61,8 @@ instance FR SPARC.FreeRegs where
maxSpillSlots :: Platform -> Int
maxSpillSlots platform
= case platformArch platform of
ArchX86 -> X86.Instr.maxSpillSlots
ArchX86_64 -> X86.Instr.maxSpillSlots
ArchX86 -> X86.Instr.maxSpillSlots
True -- 32bit
ArchX86_64 -> X86.Instr.maxSpillSlots
False -- not 32bit
ArchPPC -> PPC.Instr.maxSpillSlots
ArchSPARC -> SPARC.Instr.maxSpillSlots
ArchARM _ _ -> panic "
maxSpillSlots
ArchARM
"
...
...
compiler/nativeGen/X86/CodeGen.hs
View file @
50b33e32
...
...
@@ -846,12 +846,15 @@ getRegister' is32Bit (CmmLoad mem pk)
return
(
Any
size
code
)
where
size
=
intSize
$
typeWidth
pk
getRegister'
_
(
CmmLit
(
CmmInt
0
width
))
getRegister'
is32Bit
(
CmmLit
(
CmmInt
0
width
))
=
let
size
=
intSize
width
-- x86_64: 32-bit xor is one byte shorter, and zero-extends to 64 bits
size1
=
IF_ARCH_i386
(
size
,
case
size
of
II64
->
II32
;
_
->
size
)
size1
=
if
is32Bit
then
size
else
case
size
of
II64
->
II32
_
->
size
code
dst
=
unitOL
(
XOR
size1
(
OpReg
dst
)
(
OpReg
dst
))
in
...
...
@@ -1055,7 +1058,7 @@ getNonClobberedOperand (CmmLoad mem pk) = do
is32Bit
<-
is32BitPlatform
use_sse2
<-
sse2Enabled
if
(
not
(
isFloatType
pk
)
||
use_sse2
)
&&
IF_ARCH_i386
(
not
(
isWord64
pk
)
,
True
)
&&
(
if
is32Bit
then
not
(
isWord64
pk
)
else
True
)
then
do
Amode
src
mem_code
<-
getAmode
mem
(
src'
,
save_code
)
<-
...
...
@@ -1103,8 +1106,9 @@ getOperand (CmmLit lit) = do
else
getOperand_generic
(
CmmLit
lit
)
getOperand
(
CmmLoad
mem
pk
)
=
do
is32Bit
<-
is32BitPlatform
use_sse2
<-
sse2Enabled
if
(
not
(
isFloatType
pk
)
||
use_sse2
)
&&
IF_ARCH_i386
(
not
(
isWord64
pk
)
,
True
)
if
(
not
(
isFloatType
pk
)
||
use_sse2
)
&&
(
if
is32Bit
then
not
(
isWord64
pk
)
else
True
)
then
do
Amode
src
mem_code
<-
getAmode
mem
return
(
OpAddr
src
,
mem_code
)
...
...
@@ -1164,8 +1168,9 @@ isSuitableFloatingPointLit _ = False
getRegOrMem
::
CmmExpr
->
NatM
(
Operand
,
InstrBlock
)
getRegOrMem
e
@
(
CmmLoad
mem
pk
)
=
do
is32Bit
<-
is32BitPlatform
use_sse2
<-
sse2Enabled
if
(
not
(
isFloatType
pk
)
||
use_sse2
)
&&
IF_ARCH_i386
(
not
(
isWord64
pk
)
,
True
)
if
(
not
(
isFloatType
pk
)
||
use_sse2
)
&&
(
if
is32Bit
then
not
(
isWord64
pk
)
else
True
)
then
do
Amode
src
mem_code
<-
getAmode
mem
return
(
OpAddr
src
,
mem_code
)
...
...
compiler/nativeGen/X86/Instr.hs
View file @
50b33e32
...
...
@@ -9,7 +9,10 @@
#
include
"HsVersions.h"
#
include
"nativeGen/NCG.h"
module
X86.Instr
module
X86.Instr
(
Instr
(
..
),
Operand
(
..
),
getJumpDestBlockId
,
canShortcut
,
shortcutStatics
,
shortcutJump
,
i386_insert_ffrees
,
maxSpillSlots
,
archWordSize
)
where
import
X86.Cond
...
...
@@ -613,16 +616,16 @@ x86_mkSpillInstr
->
Instr
x86_mkSpillInstr
platform
reg
delta
slot
=
let
off
=
spillSlotToOffset
slot
=
let
off
=
spillSlotToOffset
is32Bit
slot
in
let
off_w
=
(
off
-
delta
)
`
div
`
IF_ARCH_i386
(
4
,
8
)
let
off_w
=
(
off
-
delta
)
`
div
`
(
if
is32Bit
then
4
else
8
)
in
case
targetClassOfReg
platform
reg
of
RcInteger
->
MOV
(
archWordSize
(
target32Bit
platform
)
)
RcInteger
->
MOV
(
archWordSize
is32Bit
)
(
OpReg
reg
)
(
OpAddr
(
spRel
platform
off_w
))
RcDouble
->
GST
FF80
reg
(
spRel
platform
off_w
)
{- RcFloat/RcDouble -}
RcDoubleSSE
->
MOV
FF64
(
OpReg
reg
)
(
OpAddr
(
spRel
platform
off_w
))
_
->
panic
"X86.mkSpillInstr: no match"
where
is32Bit
=
target32Bit
platform
-- | Make a spill reload instruction.
x86_mkLoadInstr
...
...
@@ -633,33 +636,35 @@ x86_mkLoadInstr
->
Instr
x86_mkLoadInstr
platform
reg
delta
slot
=
let
off
=
spillSlotToOffset
slot
=
let
off
=
spillSlotToOffset
is32Bit
slot
in
let
off_w
=
(
off
-
delta
)
`
div
`
IF_ARCH_i386
(
4
,
8
)
let
off_w
=
(
off
-
delta
)
`
div
`
(
if
is32Bit
then
4
else
8
)
in
case
targetClassOfReg
platform
reg
of
RcInteger
->
MOV
(
archWordSize
(
target32Bit
platform
)
)
RcInteger
->
MOV
(
archWordSize
is32Bit
)
(
OpAddr
(
spRel
platform
off_w
))
(
OpReg
reg
)
RcDouble
->
GLD
FF80
(
spRel
platform
off_w
)
reg
{- RcFloat/RcDouble -}
RcDoubleSSE
->
MOV
FF64
(
OpAddr
(
spRel
platform
off_w
))
(
OpReg
reg
)
_
->
panic
"X86.x86_mkLoadInstr"
where
is32Bit
=
target32Bit
platform
spillSlotSize
::
Int
spillSlotSize
=
IF_ARCH_i386
(
12
,
8
)
spillSlotSize
::
Bool
->
Int
spillSlotSize
is32Bit
=
if
is32Bit
then
12
else
8
maxSpillSlots
::
Int
maxSpillSlots
=
((
rESERVED_C_STACK_BYTES
-
64
)
`
div
`
spillSlotSize
)
-
1
maxSpillSlots
::
Bool
->
Int
maxSpillSlots
is32Bit
=
((
rESERVED_C_STACK_BYTES
-
64
)
`
div
`
spillSlotSize
is32Bit
)
-
1
-- convert a spill slot number to a *byte* offset, with no sign:
-- decide on a per arch basis whether you are spilling above or below
-- the C stack pointer.
spillSlotToOffset
::
Int
->
Int
spillSlotToOffset
slot
|
slot
>=
0
&&
slot
<
maxSpillSlots
=
64
+
spillSlotSize
*
slot
spillSlotToOffset
::
Bool
->
Int
->
Int
spillSlotToOffset
is32Bit
slot
|
slot
>=
0
&&
slot
<
maxSpillSlots
is32Bit
=
64
+
spillSlotSize
is32Bit
*
slot
|
otherwise
=
pprPanic
"spillSlotToOffset:"
(
text
"invalid spill location: "
<>
int
slot
$$
text
"maxSpillSlots: "
<>
int
maxSpillSlots
)
$$
text
"maxSpillSlots: "
<>
int
(
maxSpillSlots
is32Bit
)
)
--------------------------------------------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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