Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
jberryman
GHC
Commits
090bff7e
Commit
090bff7e
authored
Mar 01, 2007
by
Simon Marlow
Browse files
further improvements to the x86/x86_64 NCG
parent
b511a8e8
Changes
2
Hide whitespace changes
Inline
Side-by-side
compiler/cmm/Cmm.hs
View file @
090bff7e
...
...
@@ -200,6 +200,7 @@ data CmmExpr
-- ** is shorthand only, meaning **
-- CmmMachOp (MO_S_Add rep (CmmReg reg) (CmmLit (CmmInt i rep)))
-- where rep = cmmRegRep reg
deriving
Eq
cmmExprRep
::
CmmExpr
->
MachRep
cmmExprRep
(
CmmLit
lit
)
=
cmmLitRep
lit
...
...
@@ -248,6 +249,7 @@ data CmmLit
-- It is also used inside the NCG during when generating
-- position-independent code.
|
CmmLabelDiffOff
CLabel
CLabel
Int
-- label1 - label2 + offset
deriving
Eq
cmmLitRep
::
CmmLit
->
MachRep
cmmLitRep
(
CmmInt
_
rep
)
=
rep
...
...
compiler/nativeGen/MachCodeGen.hs
View file @
090bff7e
...
...
@@ -1839,6 +1839,9 @@ getAmode (CmmMachOp (MO_Add rep)
&&
not
(
is64BitInteger
offset
)
=
x86_complex_amode
x
y
shift
offset
getAmode
(
CmmMachOp
(
MO_Add
rep
)
[
x
,
y
])
=
x86_complex_amode
x
y
0
0
getAmode
(
CmmLit
lit
)
|
not
(
is64BitLit
lit
)
=
return
(
Amode
(
ImmAddr
(
litToImm
lit
)
0
)
nilOL
)
...
...
@@ -2378,6 +2381,25 @@ assignIntCode pk dst src
#
if
i386_TARGET_ARCH
||
x86_64_TARGET_ARCH
-- integer assignment to memory
-- specific case of adding/subtracting an integer to a particular address.
-- ToDo: catch other cases where we can use an operation directly on a memory
-- address.
assignMem_IntCode
pk
addr
(
CmmMachOp
op
[
CmmLoad
addr2
_
,
CmmLit
(
CmmInt
i
_
)])
|
addr
==
addr2
,
pk
/=
I64
||
not
(
is64BitInteger
i
),
Just
instr
<-
check
op
=
do
Amode
amode
code_addr
<-
getAmode
addr
let
code
=
code_addr
`
snocOL
`
instr
pk
(
OpImm
(
ImmInt
(
fromIntegral
i
)))
(
OpAddr
amode
)
return
code
where
check
(
MO_Add
_
)
=
Just
ADD
check
(
MO_Sub
_
)
=
Just
SUB
check
_
=
Nothing
-- ToDo: more?
-- general case
assignMem_IntCode
pk
addr
src
=
do
Amode
addr
code_addr
<-
getAmode
addr
(
code_src
,
op_src
)
<-
get_op_RI
src
...
...
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