[commit: ghc] wip/simd: Add Cmm support for 512-bit-wide values. (d1b2c9d)

git at git.haskell.org git at git.haskell.org
Mon Sep 16 20:38:33 CEST 2013


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/simd
Link       : http://ghc.haskell.org/trac/ghc/changeset/d1b2c9d769dac4b235f543bee26b55a4f6982d94/ghc

>---------------------------------------------------------------

commit d1b2c9d769dac4b235f543bee26b55a4f6982d94
Author: Geoffrey Mainland <gmainlan at microsoft.com>
Date:   Sun Sep 15 16:34:23 2013 -0400

    Add Cmm support for 512-bit-wide values.


>---------------------------------------------------------------

d1b2c9d769dac4b235f543bee26b55a4f6982d94
 compiler/cmm/CmmLex.x   |    3 +++
 compiler/cmm/CmmParse.y |    2 ++
 compiler/cmm/CmmType.hs |   11 +++++++++--
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/compiler/cmm/CmmLex.x b/compiler/cmm/CmmLex.x
index 46f4cf5..b9da1e0 100644
--- a/compiler/cmm/CmmLex.x
+++ b/compiler/cmm/CmmLex.x
@@ -165,6 +165,7 @@ data CmmToken
   | CmmT_bits64
   | CmmT_bits128
   | CmmT_bits256
+  | CmmT_bits512
   | CmmT_float32
   | CmmT_float64
   | CmmT_gcptr
@@ -246,6 +247,7 @@ reservedWordsFM = listToUFM $
 	( "bits64",		CmmT_bits64 ),
 	( "bits128",		CmmT_bits128 ),
 	( "bits256",		CmmT_bits256 ),
+	( "bits512",		CmmT_bits512 ),
 	( "float32",		CmmT_float32 ),
 	( "float64",		CmmT_float64 ),
 -- New forms
@@ -255,6 +257,7 @@ reservedWordsFM = listToUFM $
 	( "b64",		CmmT_bits64 ),
 	( "b128",		CmmT_bits128 ),
 	( "b256",		CmmT_bits256 ),
+	( "b512",		CmmT_bits512 ),
 	( "f32",		CmmT_float32 ),
 	( "f64",		CmmT_float64 ),
 	( "gcptr",		CmmT_gcptr )
diff --git a/compiler/cmm/CmmParse.y b/compiler/cmm/CmmParse.y
index f7c543a..8367f7a 100644
--- a/compiler/cmm/CmmParse.y
+++ b/compiler/cmm/CmmParse.y
@@ -290,6 +290,7 @@ import Data.Maybe
         'bits64'        { L _ (CmmT_bits64) }
         'bits128'       { L _ (CmmT_bits128) }
         'bits256'       { L _ (CmmT_bits256) }
+        'bits512'       { L _ (CmmT_bits512) }
         'float32'       { L _ (CmmT_float32) }
         'float64'       { L _ (CmmT_float64) }
         'gcptr'         { L _ (CmmT_gcptr) }
@@ -779,6 +780,7 @@ typenot8 :: { CmmType }
         | 'bits64'              { b64 }
         | 'bits128'             { b128 }
         | 'bits256'             { b256 }
+        | 'bits512'             { b512 }
         | 'float32'             { f32 }
         | 'float64'             { f64 }
         | 'gcptr'               {% do dflags <- getDynFlags; return $ gcWord dflags }
diff --git a/compiler/cmm/CmmType.hs b/compiler/cmm/CmmType.hs
index 98e4053..d03c2dc 100644
--- a/compiler/cmm/CmmType.hs
+++ b/compiler/cmm/CmmType.hs
@@ -1,7 +1,7 @@
 
 module CmmType
     ( CmmType   -- Abstract
-    , b8, b16, b32, b64, b128, b256, f32, f64, bWord, bHalfWord, gcWord
+    , b8, b16, b32, b64, b128, b256, b512, f32, f64, bWord, bHalfWord, gcWord
     , cInt, cLong
     , cmmBits, cmmFloat
     , typeWidth, cmmEqType, cmmEqType_ignoring_ptrhood
@@ -107,13 +107,14 @@ cmmFloat = CmmType FloatCat
 
 -------- Common CmmTypes ------------
 -- Floats and words of specific widths
-b8, b16, b32, b64, b128, b256, f32, f64 :: CmmType
+b8, b16, b32, b64, b128, b256, b512, f32, f64 :: CmmType
 b8     = cmmBits W8
 b16    = cmmBits W16
 b32    = cmmBits W32
 b64    = cmmBits W64
 b128   = cmmBits W128
 b256   = cmmBits W256
+b512   = cmmBits W512
 f32    = cmmFloat W32
 f64    = cmmFloat W64
 
@@ -168,6 +169,7 @@ data Width   = W8 | W16 | W32 | W64
                         -- (we use Ord, so it'd better be in this order)
              | W128
              | W256
+             | W512
              deriving (Eq, Ord, Show)
 
 instance Outputable Width where
@@ -180,6 +182,7 @@ mrStr W32  = sLit("W32")
 mrStr W64  = sLit("W64")
 mrStr W128 = sLit("W128")
 mrStr W256 = sLit("W256")
+mrStr W512 = sLit("W512")
 mrStr W80  = sLit("W80")
 
 
@@ -220,6 +223,7 @@ widthInBits W32  = 32
 widthInBits W64  = 64
 widthInBits W128 = 128
 widthInBits W256 = 256
+widthInBits W512 = 512
 widthInBits W80  = 80
 
 widthInBytes :: Width -> Int
@@ -229,6 +233,7 @@ widthInBytes W32  = 4
 widthInBytes W64  = 8
 widthInBytes W128 = 16
 widthInBytes W256 = 32
+widthInBytes W512 = 64
 widthInBytes W80  = 10
 
 widthFromBytes :: Int -> Width
@@ -238,6 +243,7 @@ widthFromBytes 4  = W32
 widthFromBytes 8  = W64
 widthFromBytes 16 = W128
 widthFromBytes 32 = W256
+widthFromBytes 64 = W512
 widthFromBytes 10 = W80
 widthFromBytes n  = pprPanic "no width for given number of bytes" (ppr n)
 
@@ -249,6 +255,7 @@ widthInLog W32  = 2
 widthInLog W64  = 3
 widthInLog W128 = 4
 widthInLog W256 = 5
+widthInLog W512 = 6
 widthInLog W80  = panic "widthInLog: F80"
 
 -- widening / narrowing




More information about the ghc-commits mailing list