summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Seipp <austin@well-typed.com>2014-04-21 19:28:41 -0500
committerAustin Seipp <austin@well-typed.com>2014-04-28 04:17:48 -0500
commit6e9a99743cce3195e2f1dafa90068651752a3161 (patch)
treed012ae18ee6af4b20f22ad06def7b363de3ebaee
parent0960a37868e6d08857e86465c8ca346b29b1c813 (diff)
downloadhaskell-6e9a99743cce3195e2f1dafa90068651752a3161.tar.gz
ghc: Add new constants for -march/-mcpu options
Signed-off-by: Austin Seipp <austin@well-typed.com>
-rw-r--r--compiler/utils/Platform.hs115
1 files changed, 115 insertions, 0 deletions
diff --git a/compiler/utils/Platform.hs b/compiler/utils/Platform.hs
index ca8f0de862..14ce7bdbb1 100644
--- a/compiler/utils/Platform.hs
+++ b/compiler/utils/Platform.hs
@@ -15,6 +15,12 @@ module Platform (
osMachOTarget,
platformUsesFrameworks,
platformBinariesAreStaticLibs,
+
+ CPUDesc(..), isx86Desc,
+ IntelCPU(..),
+ IntelFeature(..),
+ descToCPU,
+ intelCPUFeatures
)
where
@@ -151,3 +157,112 @@ osBinariesAreStaticLibs _ = False
platformBinariesAreStaticLibs :: Platform -> Bool
platformBinariesAreStaticLibs = osBinariesAreStaticLibs . platformOS
+-- -----------------------------------------------------------------------------
+-- Platform-specific micro architectures.
+
+-- CPU descriptions that may be fed to -mcpu or -march
+data CPUDesc
+ = Generic
+ | Native
+ | Intel IntelCPU
+
+isx86Desc :: CPUDesc -> Bool
+isx86Desc (Intel _) = True
+isx86Desc _ = False
+
+-- -----------------------------------------------------------------------------
+-- Intel
+
+-- Description of all Intel CPUs. Order isn't necessarily important -
+-- we'll discriminate on feature set later anyway.
+data IntelCPU
+ = I386CPU
+ | I486CPU
+ | I586CPU
+ | PentiumMMX
+ | PentiumPro
+ | I686CPU
+ | Pentium2
+ | Pentium3
+ | Pentium3M
+ | PentiumM
+ | Pentium4
+ | Pentium4M
+ | Prescott
+ | NoCona
+ | Core2
+ | Nehalem
+ | Westmere
+ | Sandybridge
+ | Ivybridge
+ | Haswell
+ | Bonnell
+ | Silvermont
+ | Broadwell
+
+data IntelFeature
+ = MMX
+ | SSE
+ | SSE2
+ | SSE3
+ | SSSE3
+ | SSE4
+ | SSE41
+ | SSE42
+ | AVX1
+ | ERMSB -- "Extended rep-movsb"
+ | AVX2
+
+descToCPU :: String -> Maybe CPUDesc
+descToCPU "generic" = Just Generic
+descToCPU "native" = Just Native
+descToCPU "i386" = Just $ Intel $ I386CPU
+descToCPU "i486" = Just $ Intel $ I486CPU
+descToCPU "i586" = Just $ Intel $ I586CPU
+descToCPU "pentium" = Just $ Intel $ I586CPU
+descToCPU "pentium-mmx" = Just $ Intel $ PentiumMMX
+descToCPU "pentiumpro" = Just $ Intel $ PentiumPro
+descToCPU "i686" = Just $ Intel $ PentiumPro
+descToCPU "pentium2" = Just $ Intel $ Pentium2
+descToCPU "pentium3" = Just $ Intel $ Pentium3
+descToCPU "pentium3m" = Just $ Intel $ Pentium3M
+descToCPU "pentium-m" = Just $ Intel $ PentiumM
+descToCPU "pentium4" = Just $ Intel $ Pentium4
+descToCPU "pentium4m" = Just $ Intel $ Pentium4M
+descToCPU "prescott" = Just $ Intel $ Prescott
+descToCPU "nocona" = Just $ Intel $ NoCona
+descToCPU "core2" = Just $ Intel $ Core2
+descToCPU "nehalem" = Just $ Intel $ Nehalem
+descToCPU "westmere" = Just $ Intel $ Westmere
+descToCPU "sandybridge" = Just $ Intel $ Sandybridge
+descToCPU "ivybridge" = Just $ Intel $ Ivybridge
+descToCPU "haswell" = Just $ Intel $ Haswell
+descToCPU "bonnell" = Just $ Intel $ Bonnell
+descToCPU "silvermont" = Just $ Intel $ Silvermont
+descToCPU "broadwell" = Just $ Intel $ Broadwell
+descToCPU _ = Nothing
+
+intelCPUFeatures :: IntelCPU -> [IntelFeature]
+intelCPUFeatures I386CPU = []
+intelCPUFeatures I486CPU = []
+intelCPUFeatures I586CPU = []
+intelCPUFeatures PentiumMMX = [MMX]
+intelCPUFeatures PentiumPro = [MMX]
+intelCPUFeatures I686CPU = [MMX]
+intelCPUFeatures Pentium2 = [MMX]
+intelCPUFeatures Pentium3 = [MMX, SSE]
+intelCPUFeatures Pentium3M = [MMX, SSE]
+intelCPUFeatures PentiumM = [MMX, SSE, SSE2]
+intelCPUFeatures Pentium4 = [MMX, SSE, SSE2]
+intelCPUFeatures Pentium4M = [MMX, SSE, SSE2]
+intelCPUFeatures Prescott = [MMX, SSE, SSE2, SSE3]
+intelCPUFeatures NoCona = [MMX, SSE, SSE2, SSE3]
+intelCPUFeatures Core2 = [MMX, SSE, SSE2, SSE3, SSSE3]
+intelCPUFeatures Nehalem = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42]
+intelCPUFeatures Westmere = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42]
+intelCPUFeatures Sandybridge = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42, AVX1]
+intelCPUFeatures Ivybridge = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42, AVX1, ERMSB]
+intelCPUFeatures Haswell = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42, AVX1, ERMSB, AVX2]
+intelCPUFeatures Bonnell = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42, AVX1, ERMSB, AVX2]
+intelCPUFeatures Silvermont = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42, AVX1, ERMSB, AVX2]
+intelCPUFeatures Broadwell = [MMX, SSE, SSE2, SSE3, SSSE3, SSE4, SSE41, SSE42, AVX1, ERMSB, AVX2]