summaryrefslogtreecommitdiff
path: root/compiler/codeGen/CgHpc.hs
diff options
context:
space:
mode:
authordias@eecs.harvard.edu <unknown>2008-08-14 12:40:27 +0000
committerdias@eecs.harvard.edu <unknown>2008-08-14 12:40:27 +0000
commit176fa33f17dd78355cc572e006d2ab26898e2c69 (patch)
tree54f951a515eac57626f8f15d57f7bc75f1096a7a /compiler/codeGen/CgHpc.hs
parente06951a75a1f519e8f015880c363a8dedc08ff9c (diff)
downloadhaskell-176fa33f17dd78355cc572e006d2ab26898e2c69.tar.gz
Merging in the new codegen branch
This merge does not turn on the new codegen (which only compiles a select few programs at this point), but it does introduce some changes to the old code generator. The high bits: 1. The Rep Swamp patch is finally here. The highlight is that the representation of types at the machine level has changed. Consequently, this patch contains updates across several back ends. 2. The new Stg -> Cmm path is here, although it appears to have a fair number of bugs lurking. 3. Many improvements along the CmmCPSZ path, including: o stack layout o some code for infotables, half of which is right and half wrong o proc-point splitting
Diffstat (limited to 'compiler/codeGen/CgHpc.hs')
-rw-r--r--compiler/codeGen/CgHpc.hs25
1 files changed, 12 insertions, 13 deletions
diff --git a/compiler/codeGen/CgHpc.hs b/compiler/codeGen/CgHpc.hs
index 0d0fdb1183..768a307e3a 100644
--- a/compiler/codeGen/CgHpc.hs
+++ b/compiler/codeGen/CgHpc.hs
@@ -18,7 +18,6 @@ module CgHpc (cgTickBox, initHpc, hpcTable) where
import Cmm
import CLabel
import Module
-import MachOp
import CmmUtils
import CgUtils
import CgMonad
@@ -35,14 +34,14 @@ import Data.Word
cgTickBox :: Module -> Int -> Code
cgTickBox mod n = do
- let tick_box = (cmmIndex I64
+ let tick_box = (cmmIndex W64
(CmmLit $ CmmLabel $ mkHpcTicksLabel $ mod)
(fromIntegral n)
)
stmtsC [ CmmStore tick_box
- (CmmMachOp (MO_Add I64)
- [ CmmLoad tick_box I64
- , CmmLit (CmmInt 1 I64)
+ (CmmMachOp (MO_Add W64)
+ [ CmmLoad tick_box b64
+ , CmmLit (CmmInt 1 W64)
])
]
@@ -56,7 +55,7 @@ hpcTable this_mod (HpcInfo hpc_tickCount _) = do
]
emitData Data $ [ CmmDataLabel (mkHpcTicksLabel this_mod)
] ++
- [ CmmStaticLit (CmmInt 0 I64)
+ [ CmmStaticLit (CmmInt 0 W64)
| _ <- take hpc_tickCount [0::Int ..]
]
where
@@ -70,24 +69,24 @@ hpcTable this_mod (NoHpcInfo {}) = error "TODO: impossible"
initHpc :: Module -> HpcInfo -> Code
initHpc this_mod (HpcInfo tickCount hashNo)
- = do { id <- newNonPtrTemp wordRep -- TODO FIXME NOW
+ = do { id <- newTemp bWord
; emitForeignCall'
PlayRisky
- [CmmKinded id NoHint]
+ [CmmHinted id NoHint]
(CmmCallee
(CmmLit $ CmmLabel $ mkForeignLabel mod_alloc Nothing False)
CCallConv
)
- [ CmmKinded (mkLblExpr mkHpcModuleNameLabel) PtrHint
- , CmmKinded (word32 tickCount) NoHint
- , CmmKinded (word32 hashNo) NoHint
- , CmmKinded (CmmLit $ CmmLabel $ mkHpcTicksLabel $ this_mod) PtrHint
+ [ CmmHinted (mkLblExpr mkHpcModuleNameLabel) AddrHint
+ , CmmHinted (word32 tickCount) NoHint
+ , CmmHinted (word32 hashNo) NoHint
+ , CmmHinted (CmmLit $ CmmLabel $ mkHpcTicksLabel $ this_mod) AddrHint
]
(Just [])
NoC_SRT -- No SRT b/c we PlayRisky
CmmMayReturn
}
where
- word32 i = CmmLit (CmmInt (fromIntegral (fromIntegral i :: Word32)) I32)
+ word32 i = CmmLit (CmmInt (fromIntegral (fromIntegral i :: Word32)) W32)
mod_alloc = mkFastString "hs_hpc_module"