Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Alex D
GHC
Commits
7a4d6655
Commit
7a4d6655
authored
Jan 21, 2009
by
Ben.Lippmeier@anu.edu.au
Browse files
SPARC NCG: Add a SPARC version of rts_mkInt64 that handles misaligned closure payloads.
parent
87b5b19f
Changes
1
Hide whitespace changes
Inline
Side-by-side
rts/RtsAPI.c
View file @
7a4d6655
...
...
@@ -74,6 +74,31 @@ rts_mkInt32 (Capability *cap, HsInt32 i)
return
p
;
}
#ifdef sparc_HOST_ARCH
/* The closures returned by allocateLocal are only guaranteed to be 32 bit
aligned, because that's the size of pointers. SPARC v9 can't do
misaligned loads/stores, so we have to write the 64bit word in chunks */
HaskellObj
rts_mkInt64
(
Capability
*
cap
,
HsInt64
i_
)
{
StgInt64
i
=
(
StgInt64
)
i_
;
StgInt32
*
tmp
;
StgClosure
*
p
=
(
StgClosure
*
)
allocateLocal
(
cap
,
CONSTR_sizeW
(
0
,
2
));
SET_HDR
(
p
,
I64zh_con_info
,
CCS_SYSTEM
);
tmp
=
(
StgInt32
*
)
&
(
p
->
payload
[
0
]);
tmp
[
0
]
=
(
StgInt32
)((
StgInt64
)
i
>>
32
);
tmp
[
1
]
=
(
StgInt32
)
i
;
/* truncate high 32 bits */
return
p
;
}
#else
HaskellObj
rts_mkInt64
(
Capability
*
cap
,
HsInt64
i
)
{
...
...
@@ -85,6 +110,9 @@ rts_mkInt64 (Capability *cap, HsInt64 i)
return
p
;
}
#endif
/* sparc_HOST_ARCH */
HaskellObj
rts_mkWord
(
Capability
*
cap
,
HsWord
i
)
{
...
...
Write
Preview
Supports
Markdown
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