[project @ 2002-10-30 05:46:48 by chak]
[ghc-hetmet.git] / ghc / compiler / codeGen / CgConTbls.lhs
index 6666b14..b61e433 100644 (file)
@@ -12,7 +12,6 @@ import AbsCSyn
 import CgMonad
 
 import AbsCUtils       ( mkAbstractCs, mkAbsCStmts )
-import CostCentre      ( subsumedCCS )
 import CgTailCall      ( performReturn, mkStaticAlgReturnCode )
 import ClosureInfo     ( layOutStaticConstr, layOutDynConstr, ClosureInfo )
 import DataCon         ( DataCon, dataConName, dataConRepArgTys, isNullaryDataCon )
@@ -20,7 +19,7 @@ import Name           ( getOccName )
 import OccName         ( occNameUserString )
 import TyCon           ( tyConDataCons, isEnumerationTyCon, TyCon )
 import Type            ( typePrimRep )
-import Outputable
+import CmdLineOpts
 \end{code}
 
 For every constructor we generate the following info tables:
@@ -107,7 +106,7 @@ genConInfo :: CompilationInfo -> DataCon -> AbstractC
 
 genConInfo comp_info data_con
   =    -- Order of things is to reduce forward references
-    mkAbstractCs [CSplitMarker,
+    mkAbstractCs [if opt_EnsureSplittableC then CSplitMarker else AbsCNop,
                  closure_code,
                  static_code]
   where
@@ -118,9 +117,15 @@ genConInfo comp_info data_con
     -- info-table contains the information we need.
     (static_ci,_) = layOutStaticConstr con_name data_con typePrimRep arg_tys
 
-    body       = initC comp_info (
-                     profCtrC SLIT("TICK_ENT_CON") [CReg node] `thenC`
-                     body_code)
+    static_body  = initC comp_info (
+                      profCtrC FSLIT("TICK_ENT_STATIC_CON") [CReg node] `thenC`
+                      ldv_enter_and_body_code)
+
+    closure_body = initC comp_info (
+                      profCtrC FSLIT("TICK_ENT_DYN_CON") [CReg node] `thenC`
+                      ldv_enter_and_body_code)
+
+    ldv_enter_and_body_code = ldvEnter `thenC` body_code
 
     con_descr  = occNameUserString (getOccName data_con)
 
@@ -128,9 +133,9 @@ genConInfo comp_info data_con
     closure_code = if zero_arity_con then 
                        AbsCNop 
                   else 
-                       CClosureInfoAndCode closure_info body Nothing con_descr
+                       CClosureInfoAndCode closure_info closure_body Nothing con_descr
 
-    static_code  = CClosureInfoAndCode static_ci body Nothing con_descr
+    static_code  = CClosureInfoAndCode static_ci static_body Nothing con_descr
 
     zero_arity_con   = isNullaryDataCon data_con
        -- We used to check that all the arg-sizes were zero, but we don't
@@ -154,7 +159,7 @@ mkConCodeAndInfo con
 
        body_code
                = -- NB: We don't set CC when entering data (WDP 94/06)
-                 profCtrC SLIT("TICK_RET_OLD") 
+                 profCtrC FSLIT("TICK_RET_OLD") 
                        [mkIntCLit (length arg_things)] `thenC`
 
                  performReturn AbsCNop         -- Ptr to thing already in Node