summaryrefslogtreecommitdiff
path: root/compiler/prelude
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/prelude')
-rw-r--r--compiler/prelude/PrelNames.lhs4
-rw-r--r--compiler/prelude/TysPrim.lhs12
-rw-r--r--compiler/prelude/primops.txt.pp97
3 files changed, 110 insertions, 3 deletions
diff --git a/compiler/prelude/PrelNames.lhs b/compiler/prelude/PrelNames.lhs
index 3e47d9d79c..03a95dee8f 100644
--- a/compiler/prelude/PrelNames.lhs
+++ b/compiler/prelude/PrelNames.lhs
@@ -1421,11 +1421,13 @@ typeNatMulTyFamNameKey = mkPreludeTyConUnique 163
typeNatExpTyFamNameKey = mkPreludeTyConUnique 164
-- SIMD vector types (Unique keys)
-floatX4PrimTyConKey, doubleX2PrimTyConKey, int32X4PrimTyConKey :: Unique
+floatX4PrimTyConKey, doubleX2PrimTyConKey, int32X4PrimTyConKey,
+ int64X2PrimTyConKey :: Unique
floatX4PrimTyConKey = mkPreludeTyConUnique 170
doubleX2PrimTyConKey = mkPreludeTyConUnique 171
int32X4PrimTyConKey = mkPreludeTyConUnique 172
+int64X2PrimTyConKey = mkPreludeTyConUnique 173
---------------- Template Haskell -------------------
-- USES TyConUniques 200-299
diff --git a/compiler/prelude/TysPrim.lhs b/compiler/prelude/TysPrim.lhs
index cf7a2666b4..c59884ba33 100644
--- a/compiler/prelude/TysPrim.lhs
+++ b/compiler/prelude/TysPrim.lhs
@@ -78,7 +78,8 @@ module TysPrim(
-- * SIMD
floatX4PrimTyCon, floatX4PrimTy,
doubleX2PrimTyCon, doubleX2PrimTy,
- int32X4PrimTyCon, int32X4PrimTy
+ int32X4PrimTyCon, int32X4PrimTy,
+ int64X2PrimTyCon, int64X2PrimTy
) where
#include "HsVersions.h"
@@ -144,6 +145,7 @@ primTyCons
, floatX4PrimTyCon
, doubleX2PrimTyCon
, int32X4PrimTyCon
+ , int64X2PrimTyCon
]
mkPrimTc :: FastString -> Unique -> TyCon -> Name
@@ -153,7 +155,7 @@ mkPrimTc fs unique tycon
(ATyCon tycon) -- Relevant TyCon
UserSyntax -- None are built-in syntax
-charPrimTyConName, intPrimTyConName, int32PrimTyConName, int64PrimTyConName, wordPrimTyConName, word32PrimTyConName, word64PrimTyConName, addrPrimTyConName, floatPrimTyConName, doublePrimTyConName, statePrimTyConName, realWorldTyConName, arrayPrimTyConName, arrayArrayPrimTyConName, byteArrayPrimTyConName, mutableArrayPrimTyConName, mutableByteArrayPrimTyConName, mutableArrayArrayPrimTyConName, mutVarPrimTyConName, mVarPrimTyConName, tVarPrimTyConName, stablePtrPrimTyConName, stableNamePrimTyConName, bcoPrimTyConName, weakPrimTyConName, threadIdPrimTyConName, eqPrimTyConName, floatX4PrimTyConName, doubleX2PrimTyConName, int32X4PrimTyConName :: Name
+charPrimTyConName, intPrimTyConName, int32PrimTyConName, int64PrimTyConName, wordPrimTyConName, word32PrimTyConName, word64PrimTyConName, addrPrimTyConName, floatPrimTyConName, doublePrimTyConName, statePrimTyConName, realWorldTyConName, arrayPrimTyConName, arrayArrayPrimTyConName, byteArrayPrimTyConName, mutableArrayPrimTyConName, mutableByteArrayPrimTyConName, mutableArrayArrayPrimTyConName, mutVarPrimTyConName, mVarPrimTyConName, tVarPrimTyConName, stablePtrPrimTyConName, stableNamePrimTyConName, bcoPrimTyConName, weakPrimTyConName, threadIdPrimTyConName, eqPrimTyConName, floatX4PrimTyConName, doubleX2PrimTyConName, int32X4PrimTyConName, int64X2PrimTyConName :: Name
charPrimTyConName = mkPrimTc (fsLit "Char#") charPrimTyConKey charPrimTyCon
intPrimTyConName = mkPrimTc (fsLit "Int#") intPrimTyConKey intPrimTyCon
int32PrimTyConName = mkPrimTc (fsLit "Int32#") int32PrimTyConKey int32PrimTyCon
@@ -184,6 +186,7 @@ threadIdPrimTyConName = mkPrimTc (fsLit "ThreadId#") threadIdPrimTyConKe
floatX4PrimTyConName = mkPrimTc (fsLit "FloatX4#") floatX4PrimTyConKey floatX4PrimTyCon
doubleX2PrimTyConName = mkPrimTc (fsLit "DoubleX2#") doubleX2PrimTyConKey doubleX2PrimTyCon
int32X4PrimTyConName = mkPrimTc (fsLit "Int32X4#") int32X4PrimTyConKey int32X4PrimTyCon
+int64X2PrimTyConName = mkPrimTc (fsLit "Int64X2#") int64X2PrimTyConKey int64X2PrimTyCon
\end{code}
%************************************************************************
@@ -763,4 +766,9 @@ int32X4PrimTy :: Type
int32X4PrimTy = mkTyConTy int32X4PrimTyCon
int32X4PrimTyCon :: TyCon
int32X4PrimTyCon = pcPrimTyCon0 int32X4PrimTyConName (VecRep 4 Int32ElemRep)
+
+int64X2PrimTy :: Type
+int64X2PrimTy = mkTyConTy int64X2PrimTyCon
+int64X2PrimTyCon :: TyCon
+int64X2PrimTyCon = pcPrimTyCon0 int64X2PrimTyConName (VecRep 2 Int64ElemRep)
\end{code}
diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp
index 03963d9b7f..5ccc162095 100644
--- a/compiler/prelude/primops.txt.pp
+++ b/compiler/prelude/primops.txt.pp
@@ -2488,6 +2488,103 @@ primop WriteOffAddrOp_Int32AsInt32X4 "writeInt32OffAddrAsInt32X4#" GenPrimOp
Addr# -> Int# -> Int32X4# -> State# s -> State# s
with has_side_effects = True
can_fail = True
+
+------------------------------------------------------------------------
+section "Int64 SIMD Vectors"
+ {Operations on SIMD vectors of 2 64-bit signed integers.}
+------------------------------------------------------------------------
+
+primtype Int64X2#
+
+primop Int64ToInt64X2Op "int64ToInt64X2#" GenPrimOp
+ INT64 -> Int64X2#
+
+primop Int64X2InsertOp "insertInt64X2#" GenPrimOp
+ Int64X2# -> INT64 -> Int# -> Int64X2#
+ with can_fail = True
+
+primop Int64X2PackOp "packInt64X2#" GenPrimOp
+ INT64 -> INT64 -> Int64X2#
+
+primop Int64X2UnpackOp "unpackInt64X2#" GenPrimOp
+ Int64X2# -> (# INT64, INT64 #)
+
+primop Int64X2AddOp "plusInt64X2#" Dyadic
+ Int64X2# -> Int64X2# -> Int64X2#
+ with commutable = True
+
+primop Int64X2SubOp "minusInt64X2#" Dyadic
+ Int64X2# -> Int64X2# -> Int64X2#
+
+primop Int64X2MulOp "timesInt64X2#" Dyadic
+ Int64X2# -> Int64X2# -> Int64X2#
+ with commutable = True
+
+primop Int64X2QuotOp "quotInt64X2#" Dyadic
+ Int64X2# -> Int64X2# -> Int64X2#
+ with can_fail = True
+
+primop Int64X2RemOp "remInt64X2#" Dyadic
+ Int64X2# -> Int64X2# -> Int64X2#
+ with can_fail = True
+
+primop Int64X2NegOp "negateInt64X2#" Monadic
+ Int64X2# -> Int64X2#
+
+primop IndexByteArrayOp_Int64X2 "indexInt64X2Array#" GenPrimOp
+ ByteArray# -> Int# -> Int64X2#
+ with can_fail = True
+
+primop ReadByteArrayOp_Int64X2 "readInt64X2Array#" GenPrimOp
+ MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64X2# #)
+ with has_side_effects = True
+ can_fail = True
+
+primop WriteByteArrayOp_Int64X2 "writeInt64X2Array#" GenPrimOp
+ MutableByteArray# s -> Int# -> Int64X2# -> State# s -> State# s
+ with has_side_effects = True
+ can_fail = True
+
+primop IndexOffAddrOp_Int64X2 "indexInt64X2OffAddr#" GenPrimOp
+ Addr# -> Int# -> Int64X2#
+ with can_fail = True
+
+primop ReadOffAddrOp_Int64X2 "readInt64X2OffAddr#" GenPrimOp
+ Addr# -> Int# -> State# s -> (# State# s, Int64X2# #)
+ with has_side_effects = True
+
+primop WriteOffAddrOp_Int64X2 "writeInt64X2OffAddr#" GenPrimOp
+ Addr# -> Int# -> Int64X2# -> State# s -> State# s
+ with has_side_effects = True
+ can_fail = True
+
+primop IndexByteArrayOp_Int64AsInt64X2 "indexInt64ArrayAsInt64X2#" GenPrimOp
+ ByteArray# -> Int# -> Int64X2#
+ with can_fail = True
+
+primop ReadByteArrayOp_Int64AsInt64X2 "readInt64ArrayAsInt64X2#" GenPrimOp
+ MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64X2# #)
+ with has_side_effects = True
+ can_fail = True
+
+primop WriteByteArrayOp_Int64AsInt64X2 "writeInt64ArrayAsInt64X2#" GenPrimOp
+ MutableByteArray# s -> Int# -> Int64X2# -> State# s -> State# s
+ with has_side_effects = True
+ can_fail = True
+
+primop IndexOffAddrOp_Int64AsInt64X2 "indexInt64OffAddrAsInt64X2#" GenPrimOp
+ Addr# -> Int# -> Int64X2#
+ with can_fail = True
+
+primop ReadOffAddrOp_Int64AsInt64X2 "readInt64OffAddrAsInt64X2#" GenPrimOp
+ Addr# -> Int# -> State# s -> (# State# s, Int64X2# #)
+ with has_side_effects = True
+ can_fail = True
+
+primop WriteOffAddrOp_Int64AsInt64X2 "writeInt64OffAddrAsInt64X2#" GenPrimOp
+ Addr# -> Int# -> Int64X2# -> State# s -> State# s
+ with has_side_effects = True
+ can_fail = True
------------------------------------------------------------------------
--- ---