1 -----------------------------------------------------------------------------
3 -- Code generation for coverage
5 -- (c) Galois Connections, Inc. 2006
7 -----------------------------------------------------------------------------
9 module CgHpc (cgTickBox, initHpc, hpcTable) where
25 cgTickBox :: Module -> Int -> Code
27 let tick_box = (cmmIndex I64
28 (CmmLit $ CmmLabel $ mkHpcTicksLabel $ mod)
31 stmtsC [ CmmStore tick_box
32 (CmmMachOp (MO_Add I64)
33 [ CmmLoad tick_box I64
34 , CmmLit (CmmInt 1 I64)
38 visible_tick = mkFastString "hs_hpc_tick"
40 hpcTable :: Module -> HpcInfo -> Code
41 hpcTable this_mod (HpcInfo hpc_tickCount _) = do
43 [ CmmDataLabel mkHpcModuleNameLabel
44 , CmmString $ map (fromIntegral . ord)
48 emitData Data $ [ CmmDataLabel (mkHpcTicksLabel this_mod)
50 [ CmmStaticLit (CmmInt 0 I64)
51 | _ <- take hpc_tickCount [0..]
54 module_name_str = moduleNameString (Module.moduleName this_mod)
55 hpcTable this_mod (NoHpcInfo) = error "TODO: impossible"
57 initHpc :: Module -> HpcInfo -> Code
58 initHpc this_mod (HpcInfo tickCount hashNo)
59 = do { id <- newTemp wordRep
64 (CmmLit $ CmmLabel $ mkForeignLabel mod_alloc Nothing False)
67 [ (mkLblExpr mkHpcModuleNameLabel,PtrHint)
68 , (CmmLit $ mkIntCLit tickCount,NoHint)
69 , (CmmLit $ mkIntCLit hashNo,NoHint)
70 , (CmmLit $ CmmLabel $ mkHpcTicksLabel $ this_mod,PtrHint)
75 mod_alloc = mkFastString "hs_hpc_module"