diff options
author | Geoffrey Mainland <gmainlan@microsoft.com> | 2013-09-15 17:20:09 -0400 |
---|---|---|
committer | Geoffrey Mainland <gmainlan@microsoft.com> | 2013-09-22 22:34:00 -0400 |
commit | 26a960c662cdfdfb24ec8ed3e013c686dfdca4cd (patch) | |
tree | f99cd0e0fddc6d44f18c4d69841b41697e618408 /compiler/codeGen | |
parent | 49f4c12e0ad53f9d10c74c4a04c485f89293c4b6 (diff) | |
download | haskell-26a960c662cdfdfb24ec8ed3e013c686dfdca4cd.tar.gz |
Add support for 512-bit-wide vectors.
Diffstat (limited to 'compiler/codeGen')
-rw-r--r-- | compiler/codeGen/StgCmmArgRep.hs | 5 | ||||
-rw-r--r-- | compiler/codeGen/StgCmmLayout.hs | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/compiler/codeGen/StgCmmArgRep.hs b/compiler/codeGen/StgCmmArgRep.hs index 26569cffdd..1e68105aac 100644 --- a/compiler/codeGen/StgCmmArgRep.hs +++ b/compiler/codeGen/StgCmmArgRep.hs @@ -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) diff --git a/compiler/codeGen/StgCmmLayout.hs b/compiler/codeGen/StgCmmLayout.hs index 30c2d36ff2..84ff21b3d0 100644 --- a/compiler/codeGen/StgCmmLayout.hs +++ b/compiler/codeGen/StgCmmLayout.hs @@ -386,6 +386,7 @@ stdPattern reps [L] -> Just ARG_L [V16] -> Just ARG_V16 [V32] -> Just ARG_V32 + [V64] -> Just ARG_V64 [N,N] -> Just ARG_NN [N,P] -> Just ARG_NP |