summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lynagh <ian@well-typed.com>2012-08-28 21:27:02 +0100
committerIan Lynagh <ian@well-typed.com>2012-08-28 21:27:02 +0100
commit6a43ff84b303b5b874ff5850604458bcb2bab712 (patch)
treeda383d2d6447bace56067c125d4605bdc463f457
parent152f1eb222d1a06c876a65c5a2d643d0c750cda1 (diff)
downloadhaskell-6a43ff84b303b5b874ff5850604458bcb2bab712.tar.gz
Remove some CPP from llvmGen/LlvmCodeGen/Ppr.hs
I changed the behaviour slightly, e.g. i386/FreeBSD will no longer fall through and use the Linux "i386-pc-linux-gnu", but will get the final empty case instead. I assume that that's the right thing to do.
-rw-r--r--compiler/llvmGen/LlvmCodeGen/Ppr.hs59
1 files changed, 24 insertions, 35 deletions
diff --git a/compiler/llvmGen/LlvmCodeGen/Ppr.hs b/compiler/llvmGen/LlvmCodeGen/Ppr.hs
index 1c715989a8..cf78b3730a 100644
--- a/compiler/llvmGen/LlvmCodeGen/Ppr.hs
+++ b/compiler/llvmGen/LlvmCodeGen/Ppr.hs
@@ -15,6 +15,7 @@ import LlvmCodeGen.Regs
import CLabel
import OldCmm
+import Platform
import FastString
import Outputable
@@ -37,41 +38,29 @@ pprLlvmHeader =
-- | LLVM module layout description for the host target
moduleLayout :: SDoc
-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-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-n8:16:32\""
- $+$ text "target triple = \"i386-pc-linux-gnu\""
-#endif
-
-#elif x86_64_TARGET_ARCH
-
-#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
-
-#elif defined (arm_TARGET_ARCH)
-
-#if linux_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-v64:64:64-v128:64:128-a0:0:64-n32\""
- $+$ text "target triple = \"arm-unknown-linux-gnueabi\""
-#endif
-
-#else
- -- FIX: Other targets
- empty
-#endif
+moduleLayout = sdocWithPlatform $ \platform ->
+ case platform of
+ Platform { platformArch = ArchX86, platformOS = OSDarwin } ->
+ 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\""
+ Platform { platformArch = ArchX86, platformOS = OSMinGW32 } ->
+ 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\""
+ Platform { platformArch = ArchX86, platformOS = OSLinux } ->
+ 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\""
+ Platform { platformArch = ArchX86_64, platformOS = OSDarwin } ->
+ 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\""
+ Platform { platformArch = ArchX86_64, platformOS = OSLinux } ->
+ 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\""
+ Platform { platformArch = ArchARM {}, platformOS = OSLinux } ->
+ 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-v64:64:64-v128:64:128-a0:0:64-n32\""
+ $+$ text "target triple = \"arm-unknown-linux-gnueabi\""
+ _ ->
+ -- FIX: Other targets
+ empty
-- | Pretty print LLVM data code