summaryrefslogtreecommitdiff
path: root/compiler/GHC/Cmm
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Cmm')
-rw-r--r--compiler/GHC/Cmm/Info.hs4
-rw-r--r--compiler/GHC/Cmm/LayoutStack.hs2
-rw-r--r--compiler/GHC/Cmm/Parser.y3
-rw-r--r--compiler/GHC/Cmm/Utils.hs9
4 files changed, 13 insertions, 5 deletions
diff --git a/compiler/GHC/Cmm/Info.hs b/compiler/GHC/Cmm/Info.hs
index 53e1b67fcc..db6d92ced6 100644
--- a/compiler/GHC/Cmm/Info.hs
+++ b/compiler/GHC/Cmm/Info.hs
@@ -450,7 +450,7 @@ wordAligned platform align_check e
-- | Takes a closure pointer and returns the info table pointer
closureInfoPtr :: Platform -> DoAlignSanitisation -> CmmExpr -> CmmExpr
closureInfoPtr platform align_check e =
- CmmLoad (wordAligned platform align_check e) (bWord platform)
+ cmmLoadBWord platform (wordAligned platform align_check e)
-- | Takes an info pointer (the first word of a closure) and returns its entry
-- code
@@ -458,7 +458,7 @@ entryCode :: Platform -> CmmExpr -> CmmExpr
entryCode platform e =
if platformTablesNextToCode platform
then e
- else CmmLoad e (bWord platform)
+ else cmmLoadBWord platform e
-- | Takes a closure pointer, and return the *zero-indexed*
-- constructor tag obtained from the info table
diff --git a/compiler/GHC/Cmm/LayoutStack.hs b/compiler/GHC/Cmm/LayoutStack.hs
index 1bd00ed65a..f23af80d7e 100644
--- a/compiler/GHC/Cmm/LayoutStack.hs
+++ b/compiler/GHC/Cmm/LayoutStack.hs
@@ -1164,7 +1164,7 @@ lowerSafeForeignCall profile block
-- different. Hence we continue by jumping to the top stack frame,
-- not by jumping to succ.
jump = CmmCall { cml_target = entryCode platform $
- CmmLoad spExpr (bWord platform)
+ cmmLoadBWord platform spExpr
, cml_cont = Just succ
, cml_args_regs = regs
, cml_args = widthInBytes (wordWidth platform)
diff --git a/compiler/GHC/Cmm/Parser.y b/compiler/GHC/Cmm/Parser.y
index 68d5821309..065737922f 100644
--- a/compiler/GHC/Cmm/Parser.y
+++ b/compiler/GHC/Cmm/Parser.y
@@ -1289,8 +1289,7 @@ doReturn exprs_code = do
mkReturnSimple :: Profile -> [CmmActual] -> UpdFrameOffset -> CmmAGraph
mkReturnSimple profile actuals updfr_off =
mkReturn profile e actuals updfr_off
- where e = entryCode platform (CmmLoad (CmmStackSlot Old updfr_off)
- (gcWord platform))
+ where e = entryCode platform (cmmLoadGCWord platform (CmmStackSlot Old updfr_off))
platform = profilePlatform profile
doRawJump :: CmmParse CmmExpr -> [GlobalReg] -> CmmParse ()
diff --git a/compiler/GHC/Cmm/Utils.hs b/compiler/GHC/Cmm/Utils.hs
index 596b8d050f..b541d7a95c 100644
--- a/compiler/GHC/Cmm/Utils.hs
+++ b/compiler/GHC/Cmm/Utils.hs
@@ -31,6 +31,7 @@ module GHC.Cmm.Utils(
cmmRegOffB, cmmOffsetB, cmmLabelOffB, cmmOffsetLitB, cmmOffsetExprB,
cmmRegOffW, cmmOffsetW, cmmLabelOffW, cmmOffsetLitW, cmmOffsetExprW,
cmmIndex, cmmIndexExpr, cmmLoadIndex, cmmLoadIndexW,
+ cmmLoadBWord, cmmLoadGCWord,
cmmNegate,
cmmULtWord, cmmUGeWord, cmmUGtWord, cmmUShrWord,
cmmSLtWord,
@@ -306,6 +307,14 @@ cmmIndexExpr platform width base idx =
cmmLoadIndex :: Platform -> CmmType -> CmmExpr -> Int -> CmmExpr
cmmLoadIndex platform ty expr ix = CmmLoad (cmmIndex platform (typeWidth ty) expr ix) ty
+-- | Load a non-pointer word.
+cmmLoadBWord :: Platform -> CmmExpr -> CmmExpr
+cmmLoadBWord platform ptr = CmmLoad ptr (bWord platform)
+
+-- | Load a GC pointer.
+cmmLoadGCWord :: Platform -> CmmExpr -> CmmExpr
+cmmLoadGCWord platform ptr = CmmLoad ptr (gcWord platform)
+
-- The "B" variants take byte offsets
cmmRegOffB :: CmmReg -> ByteOff -> CmmExpr
cmmRegOffB = cmmRegOff