Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Glasgow Haskell Compiler
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shayne Fletcher
Glasgow Haskell Compiler
Commits
abaa832f
Commit
abaa832f
authored
Jan 23, 2009
by
Ben.Lippmeier@anu.edu.au
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SPARC NCG: Do general 64 bit addition and conversion
parent
bddb8ebe
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
0 deletions
+37
-0
compiler/nativeGen/MachCodeGen.hs
compiler/nativeGen/MachCodeGen.hs
+37
-0
No files found.
compiler/nativeGen/MachCodeGen.hs
View file @
abaa832f
...
@@ -371,6 +371,26 @@ iselExpr64 (CmmMachOp (MO_Add _) [e1, CmmLit (CmmInt i _)])
...
@@ -371,6 +371,26 @@ iselExpr64 (CmmMachOp (MO_Add _) [e1, CmmLit (CmmInt i _)])
r_dst_lo
r_dst_lo
-- Addition of II64
iselExpr64
(
CmmMachOp
(
MO_Add
width
)
[
e1
,
e2
])
=
do
ChildCode64
code1
r1_lo
<-
iselExpr64
e1
let
r1_hi
=
getHiVRegFromLo
r1_lo
ChildCode64
code2
r2_lo
<-
iselExpr64
e2
let
r2_hi
=
getHiVRegFromLo
r2_lo
r_dst_lo
<-
getNewRegNat
II32
let
r_dst_hi
=
getHiVRegFromLo
r_dst_lo
let
code
=
code1
`
appOL
`
code2
`
appOL
`
toOL
[
ADD
False
False
r1_lo
(
RIReg
r2_lo
)
r_dst_lo
,
ADD
True
False
r1_hi
(
RIReg
r2_hi
)
r_dst_hi
]
return
$
ChildCode64
code
r_dst_lo
iselExpr64
(
CmmReg
(
CmmLocal
(
LocalReg
uq
ty
)))
|
isWord64
ty
=
do
iselExpr64
(
CmmReg
(
CmmLocal
(
LocalReg
uq
ty
)))
|
isWord64
ty
=
do
r_dst_lo
<-
getNewRegNat
II32
r_dst_lo
<-
getNewRegNat
II32
let
r_dst_hi
=
getHiVRegFromLo
r_dst_lo
let
r_dst_hi
=
getHiVRegFromLo
r_dst_lo
...
@@ -383,6 +403,23 @@ iselExpr64 (CmmReg (CmmLocal (LocalReg uq ty))) | isWord64 ty = do
...
@@ -383,6 +403,23 @@ iselExpr64 (CmmReg (CmmLocal (LocalReg uq ty))) | isWord64 ty = do
ChildCode64
(
toOL
[
mov_hi
,
mov_lo
])
r_dst_lo
ChildCode64
(
toOL
[
mov_hi
,
mov_lo
])
r_dst_lo
)
)
-- Convert something into II64
iselExpr64
(
CmmMachOp
(
MO_UU_Conv
_
W64
)
[
expr
])
=
do
r_dst_lo
<-
getNewRegNat
II32
let
r_dst_hi
=
getHiVRegFromLo
r_dst_lo
-- compute expr and load it into r_dst_lo
(
a_reg
,
a_code
)
<-
getSomeReg
expr
let
code
=
a_code
`
appOL
`
toOL
[
mkRegRegMoveInstr
g0
r_dst_hi
-- clear high 32 bits
,
mkRegRegMoveInstr
a_reg
r_dst_lo
]
return
$
ChildCode64
code
r_dst_lo
iselExpr64
expr
iselExpr64
expr
=
pprPanic
"iselExpr64(sparc)"
(
ppr
expr
)
=
pprPanic
"iselExpr64(sparc)"
(
ppr
expr
)
...
...
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