[commit: ghc] wip/ermsb: ghc: Add new constants for -march/-mcpu options (6e9a997)
git at git.haskell.org
git at git.haskell.org
Mon Apr 28 09:18:08 UTC 2014
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/ermsb
Link : http://ghc.haskell.org/trac/ghc/changeset/6e9a99743cce3195e2f1dafa90068651752a3161/ghc
>---------------------------------------------------------------
commit 6e9a99743cce3195e2f1dafa90068651752a3161
Author: Austin Seipp <austin at well-typed.com>
Date: Mon Apr 21 19:28:41 2014 -0500
ghc: Add new constants for -march/-mcpu options
Signed-off-by: Austin Seipp <austin at well-typed.com>
>---------------------------------------------------------------
6e9a99743cce3195e2f1dafa90068651752a3161
compiler/utils/Platform.hs | 115 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 115 insertions(+)
diff --git a/compiler/utils/Platform.hs b/compiler/utils/Platform.hs
index ca8f0de..14ce7bd 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]
More information about the ghc-commits
mailing list