(F)SLIT -> (f)sLit in CgHeapery
[ghc-hetmet.git] / compiler / codeGen / CgHeapery.lhs
index b82cdfe..66d41d3 100644 (file)
@@ -5,6 +5,13 @@
 \section[CgHeapery]{Heap management functions}
 
 \begin{code}
+{-# OPTIONS -w #-}
+-- The above warning supression flag is a temporary kludge.
+-- While working on this module you are encouraged to remove it and fix
+-- any warnings in the module. See
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
+-- for details
+
 module CgHeapery (
        initHeapUsage, getVirtHp, setVirtHp, setRealHp, 
        getHpRelOffset, hpRel,
@@ -45,6 +52,7 @@ import Util
 import Constants
 import PackageConfig
 import Outputable
+import FastString
 
 import Data.List
 \end{code}
@@ -224,7 +232,7 @@ mkStaticClosure :: CLabel -> CostCentreStack -> [CmmLit]
 mkStaticClosure info_lbl ccs payload padding_wds static_link_field saved_info_field
   =  [CmmLabel info_lbl]
   ++ variable_header_words
-  ++ payload
+  ++ concatMap padLitToWord payload
   ++ padding_wds
   ++ static_link_field
   ++ saved_info_field
@@ -234,6 +242,17 @@ mkStaticClosure info_lbl ccs payload padding_wds static_link_field saved_info_fi
        ++ staticParHdr
        ++ staticProfHdr ccs
        ++ staticTickyHdr
+
+padLitToWord :: CmmLit -> [CmmLit]
+padLitToWord lit = lit : padding pad_length
+  where rep = cmmLitRep lit
+        pad_length = wORD_SIZE - machRepByteWidth rep :: Int
+
+        padding n | n <= 0 = []
+                  | n `rem` 2 /= 0 = CmmInt 0 I8  : padding (n-1)
+                  | n `rem` 4 /= 0 = CmmInt 0 I16 : padding (n-2)
+                  | n `rem` 8 /= 0 = CmmInt 0 I32 : padding (n-4)
+                  | otherwise      = CmmInt 0 I64 : padding (n-8)
 \end{code}
 
 %************************************************************************
@@ -335,7 +354,7 @@ altHeapCheck alt_type code
        ; setRealHp hpHw
        ; code }
   where
-    rts_label PolyAlt = CmmLit (CmmLabel (mkRtsCodeLabel SLIT( "stg_gc_unpt_r1")))
+    rts_label PolyAlt = CmmLit (CmmLabel (mkRtsCodeLabel (sLit "stg_gc_unpt_r1")))
        -- Do *not* enter R1 after a heap check in
        -- a polymorphic case.  It might be a function
        -- and the entry code for a function (currently)
@@ -349,14 +368,14 @@ altHeapCheck alt_type code
     rts_label (PrimAlt tc)
       = CmmLit $ CmmLabel $ 
        case primRepToCgRep (tyConPrimRep tc) of
-         VoidArg   -> mkRtsCodeLabel SLIT( "stg_gc_noregs")
-         FloatArg  -> mkRtsCodeLabel SLIT( "stg_gc_f1")
-         DoubleArg -> mkRtsCodeLabel SLIT( "stg_gc_d1")
-         LongArg   -> mkRtsCodeLabel SLIT( "stg_gc_l1")
+         VoidArg   -> mkRtsCodeLabel (sLit "stg_gc_noregs")
+         FloatArg  -> mkRtsCodeLabel (sLit "stg_gc_f1")
+         DoubleArg -> mkRtsCodeLabel (sLit "stg_gc_d1")
+         LongArg   -> mkRtsCodeLabel (sLit "stg_gc_l1")
                                -- R1 is boxed but unlifted: 
-         PtrArg    -> mkRtsCodeLabel SLIT( "stg_gc_unpt_r1")
+         PtrArg    -> mkRtsCodeLabel (sLit "stg_gc_unpt_r1")
                                -- R1 is unboxed:
-         NonPtrArg -> mkRtsCodeLabel SLIT( "stg_gc_unbx_r1")
+         NonPtrArg -> mkRtsCodeLabel (sLit "stg_gc_unbx_r1")
 
     rts_label (UbxTupAlt _) = panic "altHeapCheck"
 \end{code}
@@ -394,7 +413,7 @@ unbxTupleHeapCheck regs ptrs nptrs fail_code code
     assign_liveness = CmmAssign (CmmGlobal (VanillaReg 9))     -- Ho ho ho!
                                (CmmLit (mkWordCLit liveness))
     liveness       = mkRegLiveness regs ptrs nptrs
-    rts_label      = CmmLit (CmmLabel (mkRtsCodeLabel SLIT("stg_gc_ut")))
+    rts_label      = CmmLit (CmmLabel (mkRtsCodeLabel (sLit "stg_gc_ut")))
 
 \end{code}
 
@@ -501,7 +520,7 @@ stkChkNodePoints :: CmmExpr -> Code
 stkChkNodePoints bytes
   = do_checks' bytes (CmmLit (mkIntCLit 0)) True False noStmts stg_gc_enter1
 
-stg_gc_gen = CmmLit (CmmLabel (mkRtsCodeLabel SLIT("stg_gc_gen")))
+stg_gc_gen = CmmLit (CmmLabel (mkRtsCodeLabel (sLit "stg_gc_gen")))
 stg_gc_enter1 = CmmReg (CmmGlobal GCEnter1)
 \end{code}