diff options
author | Austin Seipp <austin@well-typed.com> | 2014-04-21 19:28:41 -0500 |
---|---|---|
committer | Austin Seipp <austin@well-typed.com> | 2014-04-28 04:17:48 -0500 |
commit | 6e9a99743cce3195e2f1dafa90068651752a3161 (patch) | |
tree | d012ae18ee6af4b20f22ad06def7b363de3ebaee | |
parent | 0960a37868e6d08857e86465c8ca346b29b1c813 (diff) | |
download | haskell-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.hs | 115 |
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] |