Don't import FastString in HsVersions.h
[ghc-hetmet.git] / compiler / codeGen / CgHeapery.lhs
index 10f5049..4592e19 100644 (file)
@@ -5,11 +5,11 @@
 \section[CgHeapery]{Heap management functions}
 
 \begin{code}
-{-# OPTIONS_GHC -w #-}
+{-# 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/WorkingConventions#Warnings
+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
 -- for details
 
 module CgHeapery (
@@ -52,6 +52,7 @@ import Util
 import Constants
 import PackageConfig
 import Outputable
+import FastString
 
 import Data.List
 \end{code}
@@ -231,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
@@ -241,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}
 
 %************************************************************************