Add support for 512-bit-wide vectors.
[ghc.git] / compiler / codeGen / StgCmmArgRep.hs
index 26569cf..1e68105 100644 (file)
@@ -48,6 +48,7 @@ data ArgRep = P   -- GC Ptr
             | D   -- Double
             | V16 -- 16-byte (128-bit) vectors of Float/Double/Int8/Word32/etc.
             | V32 -- 32-byte (256-bit) vectors of Float/Double/Int8/Word32/etc.
+            | V64 -- 64-byte (512-bit) vectors of Float/Double/Int8/Word32/etc.
 instance Outputable ArgRep where ppr = text . argRepString
 
 argRepString :: ArgRep -> String
@@ -59,6 +60,7 @@ argRepString F = "F"
 argRepString D = "D"
 argRepString V16 = "V16"
 argRepString V32 = "V32"
+argRepString V64 = "V64"
 
 toArgRep :: PrimRep -> ArgRep
 toArgRep VoidRep           = V
@@ -73,6 +75,7 @@ toArgRep DoubleRep         = D
 toArgRep (VecRep len elem) = case len*primElemRepSizeB elem of
                                16 -> V16
                                32 -> V32
+                               64 -> V64
                                _  -> error "toArgRep: bad vector primrep"
 
 isNonV :: ArgRep -> Bool
@@ -88,6 +91,7 @@ argRepSizeW dflags D   = dOUBLE_SIZE dflags `quot` wORD_SIZE dflags
 argRepSizeW _      V   = 0
 argRepSizeW dflags V16 = 16                 `quot` wORD_SIZE dflags
 argRepSizeW dflags V32 = 32                 `quot` wORD_SIZE dflags
+argRepSizeW dflags V64 = 64                 `quot` wORD_SIZE dflags
 
 idArgRep :: Id -> ArgRep
 idArgRep = toArgRep . idPrimRep
@@ -137,4 +141,5 @@ slowCallPattern (D: _)                = (fsLit "stg_ap_d", 1)
 slowCallPattern (L: _)                = (fsLit "stg_ap_l", 1)
 slowCallPattern (V16: _)              = (fsLit "stg_ap_v16", 1)
 slowCallPattern (V32: _)              = (fsLit "stg_ap_v32", 1)
+slowCallPattern (V64: _)              = (fsLit "stg_ap_v64", 1)
 slowCallPattern []                    = (fsLit "stg_ap_0", 0)