More updates to datalayout description in llvm BE
[ghc-hetmet.git] / compiler / llvmGen / LlvmCodeGen / Ppr.hs
index 5afbd17..8137713 100644 (file)
@@ -30,35 +30,48 @@ moduleLayout =
 #if i386_TARGET_ARCH
 
 #if darwin_TARGET_OS
-    text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128\""
+    text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32\""
     $+$ text "target triple = \"i386-apple-darwin9.8\""
 #elif mingw32_TARGET_OS
     text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32\""
     $+$ text "target triple = \"i686-pc-win32\""
 #else /* Linux */
-    text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32\""
-    $+$ text "target triple = \"i386-linux-gnu\""
+    text "target datalayout = \"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32\""
+    $+$ text "target triple = \"i386-pc-linux-gnu\""
 #endif
 
-#else
+#elif x86_64_TARGET_ARCH
 
-#ifdef x86_64_TARGET_ARCH
-    text "target datalayout = \"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128\""
+#if darwin_TARGET_OS
+    text "target datalayout = \"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64\""
+    $+$ text "target triple = \"x86_64-apple-darwin10.0.0\""
+#else /* Linux */
+    text "target datalayout = \"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64\""
     $+$ text "target triple = \"x86_64-linux-gnu\""
+#endif
 
-#else /* Not i386 */
+#else /* Not x86 */
     -- FIX: Other targets
     empty
 #endif
 
-#endif
-
 
 -- | Header code for LLVM modules
 pprLlvmHeader :: Doc
 pprLlvmHeader = moduleLayout
 
 
+-- | Pretty print LLVM data code
+pprLlvmData :: LlvmData -> Doc
+pprLlvmData (globals, types) =
+    let tryConst (v, Just s )   = ppLlvmGlobal (v, Just s)
+        tryConst g@(_, Nothing) = ppLlvmGlobal g
+
+        types'   = ppLlvmTypes types
+        globals' = vcat $ map tryConst globals
+    in types' $+$ globals'
+
+
 -- | Pretty print LLVM code
 pprLlvmCmmTop :: LlvmEnv -> Int -> LlvmCmmTop -> (Doc, [LlvmVar])
 pprLlvmCmmTop _ _ (CmmData _ lmdata)
@@ -85,24 +98,16 @@ pprLlvmCmmTop env count (CmmProc info lbl _ (ListGraph blks))
     ), ivar)
 
 
--- | Pretty print LLVM data code
-pprLlvmData :: LlvmData -> Doc
-pprLlvmData (globals, types) =
-    let globals' = ppLlvmGlobals globals
-        types'   = ppLlvmTypes types
-    in types' $+$ globals'
-
-
 -- | Pretty print CmmStatic
 pprCmmStatic :: LlvmEnv -> Int -> [CmmStatic] -> (Doc, [LlvmVar])
 pprCmmStatic env count stat
-  = let unres = genLlvmData stat
+  = let unres = genLlvmData (Text, stat)
         (_, (ldata, ltypes)) = resolveLlvmData env unres
 
-        setSection (gv@(LMGlobalVar s ty l _ _), d)
+        setSection (gv@(LMGlobalVar s ty l _ _ c), d)
             = let v = if l == Internal then [gv] else []
                   sec = mkLayoutSection count
-              in ((LMGlobalVar s ty l sec llvmInfAlign, d), v)
+              in ((LMGlobalVar s ty l sec llvmInfAlign c, d), v)
         setSection v = (v,[])
 
         (ldata', llvmUsed) = mapAndUnzip setSection ldata