[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