[commit: ghc] simd: Add Cmm support for 256-bit-wide values. (1ad6f1d)

Geoffrey Mainland gmainlan at microsoft.com
Thu Feb 14 23:16:49 CET 2013


Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : simd

http://hackage.haskell.org/trac/ghc/changeset/1ad6f1d2b681eedc1ee98e6519edaae81d39bd56

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

commit 1ad6f1d2b681eedc1ee98e6519edaae81d39bd56
Author: Geoffrey Mainland <gmainlan at microsoft.com>
Date:   Thu Feb 14 18:48:25 2013 +0000

    Add Cmm support for 256-bit-wide values.

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

 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 81227eb..46f4cf5 100644
--- a/compiler/cmm/CmmLex.x
+++ b/compiler/cmm/CmmLex.x
@@ -164,6 +164,7 @@ data CmmToken
   | CmmT_bits32
   | CmmT_bits64
   | CmmT_bits128
+  | CmmT_bits256
   | CmmT_float32
   | CmmT_float64
   | CmmT_gcptr
@@ -244,6 +245,7 @@ reservedWordsFM = listToUFM $
 	( "bits32",		CmmT_bits32 ),
 	( "bits64",		CmmT_bits64 ),
 	( "bits128",		CmmT_bits128 ),
+	( "bits256",		CmmT_bits256 ),
 	( "float32",		CmmT_float32 ),
 	( "float64",		CmmT_float64 ),
 -- New forms
@@ -252,6 +254,7 @@ reservedWordsFM = listToUFM $
 	( "b32",		CmmT_bits32 ),
 	( "b64",		CmmT_bits64 ),
 	( "b128",		CmmT_bits128 ),
+	( "b256",		CmmT_bits256 ),
 	( "f32",		CmmT_float32 ),
 	( "f64",		CmmT_float64 ),
 	( "gcptr",		CmmT_gcptr )
diff --git a/compiler/cmm/CmmParse.y b/compiler/cmm/CmmParse.y
index cb3bf0c..9498f42 100644
--- a/compiler/cmm/CmmParse.y
+++ b/compiler/cmm/CmmParse.y
@@ -289,6 +289,7 @@ import Data.Maybe
         'bits32'        { L _ (CmmT_bits32) }
         'bits64'        { L _ (CmmT_bits64) }
         'bits128'       { L _ (CmmT_bits128) }
+        'bits256'       { L _ (CmmT_bits256) }
         'float32'       { L _ (CmmT_float32) }
         'float64'       { L _ (CmmT_float64) }
         'gcptr'         { L _ (CmmT_gcptr) }
@@ -774,6 +775,7 @@ typenot8 :: { CmmType }
         | 'bits32'              { b32 }
         | 'bits64'              { b64 }
         | 'bits128'             { b128 }
+        | 'bits256'             { b256 }
         | 'float32'             { f32 }
         | 'float64'             { f64 }
         | 'gcptr'               {% do dflags <- getDynFlags; return $ gcWord dflags }
diff --git a/compiler/cmm/CmmType.hs b/compiler/cmm/CmmType.hs
index 49a2dc1..c93c1e4 100644
--- a/compiler/cmm/CmmType.hs
+++ b/compiler/cmm/CmmType.hs
@@ -1,7 +1,7 @@
 
 module CmmType
     ( CmmType   -- Abstract
-    , b8, b16, b32, b64, b128, f32, f64, bWord, bHalfWord, gcWord
+    , b8, b16, b32, b64, b128, b256, f32, f64, bWord, bHalfWord, gcWord
     , cInt, cLong
     , cmmBits, cmmFloat
     , typeWidth, cmmEqType, cmmEqType_ignoring_ptrhood
@@ -106,12 +106,13 @@ cmmFloat = CmmType FloatCat
 
 -------- Common CmmTypes ------------
 -- Floats and words of specific widths
-b8, b16, b32, b64, b128, f32, f64 :: CmmType
+b8, b16, b32, b64, b128, b256, f32, f64 :: CmmType
 b8     = cmmBits W8
 b16    = cmmBits W16
 b32    = cmmBits W32
 b64    = cmmBits W64
 b128   = cmmBits W128
+b256   = cmmBits W256
 f32    = cmmFloat W32
 f64    = cmmFloat W64
 
@@ -165,6 +166,7 @@ data Width   = W8 | W16 | W32 | W64
                         -- used in x86 native codegen only.
                         -- (we use Ord, so it'd better be in this order)
              | W128
+             | W256
              deriving (Eq, Ord, Show)
 
 instance Outputable Width where
@@ -176,6 +178,7 @@ mrStr W16  = sLit("W16")
 mrStr W32  = sLit("W32")
 mrStr W64  = sLit("W64")
 mrStr W128 = sLit("W128")
+mrStr W256 = sLit("W256")
 mrStr W80  = sLit("W80")
 
 
@@ -215,6 +218,7 @@ widthInBits W16  = 16
 widthInBits W32  = 32
 widthInBits W64  = 64
 widthInBits W128 = 128
+widthInBits W256 = 256
 widthInBits W80  = 80
 
 widthInBytes :: Width -> Int
@@ -223,6 +227,7 @@ widthInBytes W16  = 2
 widthInBytes W32  = 4
 widthInBytes W64  = 8
 widthInBytes W128 = 16
+widthInBytes W256 = 32
 widthInBytes W80  = 10
 
 widthFromBytes :: Int -> Width
@@ -231,6 +236,7 @@ widthFromBytes 2  = W16
 widthFromBytes 4  = W32
 widthFromBytes 8  = W64
 widthFromBytes 16 = W128
+widthFromBytes 32 = W256
 widthFromBytes 10 = W80
 widthFromBytes n  = pprPanic "no width for given number of bytes" (ppr n)
 
@@ -241,6 +247,7 @@ widthInLog W16  = 1
 widthInLog W32  = 2
 widthInLog W64  = 3
 widthInLog W128 = 4
+widthInLog W256 = 5
 widthInLog W80  = panic "widthInLog: F80"
 
 -- widening / narrowing





More information about the ghc-commits mailing list