summaryrefslogtreecommitdiff
path: root/compiler/GHC/StgToCmm/Prim.hs
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2020-12-03 18:54:54 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-03-03 08:12:29 -0500
commitd8dc0f96237fe6fe7081c04727c7c2573477e5cb (patch)
treedbc4e8d25cf5a085e979df98bacad5999bf78aee /compiler/GHC/StgToCmm/Prim.hs
parenteea96042f1e8682605ae68db10f2bcdd7dab923e (diff)
downloadhaskell-d8dc0f96237fe6fe7081c04727c7c2573477e5cb.tar.gz
Fix array and cleanup conversion primops (#19026)
The first change makes the array ones use the proper fixed-size types, which also means that just like before, they can be used without explicit conversions with the boxed sized types. (Before, it was Int# / Word# on both sides, now it is fixed sized on both sides). For the second change, don't use "extend" or "narrow" in some of the user-facing primops names for conversions. - Names like `narrowInt32#` are misleading when `Int` is 32-bits. - Names like `extendInt64#` are flat-out wrong when `Int is 32-bits. - `narrow{Int,Word}<N>#` however map a type to itself, and so don't suffer from this problem. They are left as-is. These changes are batched together because Alex happend to use the array ops. We can only use released versions of Alex at this time, sadly, and I don't want to have to have a release thatwon't work for the final GHC 9.2. So by combining these we get all the changes for Alex done at once. Bump hackage state in a few places, and also make that workflow slightly easier for the future. Bump minimum Alex version Bump Cabal, array, bytestring, containers, text, and binary submodules
Diffstat (limited to 'compiler/GHC/StgToCmm/Prim.hs')
-rw-r--r--compiler/GHC/StgToCmm/Prim.hs96
1 files changed, 48 insertions, 48 deletions
diff --git a/compiler/GHC/StgToCmm/Prim.hs b/compiler/GHC/StgToCmm/Prim.hs
index 2ea28a8eb2..b7fde9642c 100644
--- a/compiler/GHC/StgToCmm/Prim.hs
+++ b/compiler/GHC/StgToCmm/Prim.hs
@@ -457,19 +457,19 @@ emitPrimOp dflags primop = case primop of
IndexOffAddrOp_StablePtr -> \args -> opIntoRegs $ \res ->
doIndexOffAddrOp Nothing (bWord platform) res args
IndexOffAddrOp_Int8 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_s_8ToWord platform)) b8 res args
+ doIndexOffAddrOp Nothing b8 res args
IndexOffAddrOp_Int16 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_s_16ToWord platform)) b16 res args
+ doIndexOffAddrOp Nothing b16 res args
IndexOffAddrOp_Int32 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_s_32ToWord platform)) b32 res args
+ doIndexOffAddrOp Nothing b32 res args
IndexOffAddrOp_Int64 -> \args -> opIntoRegs $ \res ->
doIndexOffAddrOp Nothing b64 res args
IndexOffAddrOp_Word8 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_u_8ToWord platform)) b8 res args
+ doIndexOffAddrOp Nothing b8 res args
IndexOffAddrOp_Word16 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_u_16ToWord platform)) b16 res args
+ doIndexOffAddrOp Nothing b16 res args
IndexOffAddrOp_Word32 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_u_32ToWord platform)) b32 res args
+ doIndexOffAddrOp Nothing b32 res args
IndexOffAddrOp_Word64 -> \args -> opIntoRegs $ \res ->
doIndexOffAddrOp Nothing b64 res args
@@ -492,19 +492,19 @@ emitPrimOp dflags primop = case primop of
ReadOffAddrOp_StablePtr -> \args -> opIntoRegs $ \res ->
doIndexOffAddrOp Nothing (bWord platform) res args
ReadOffAddrOp_Int8 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_s_8ToWord platform)) b8 res args
+ doIndexOffAddrOp Nothing b8 res args
ReadOffAddrOp_Int16 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_s_16ToWord platform)) b16 res args
+ doIndexOffAddrOp Nothing b16 res args
ReadOffAddrOp_Int32 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_s_32ToWord platform)) b32 res args
+ doIndexOffAddrOp Nothing b32 res args
ReadOffAddrOp_Int64 -> \args -> opIntoRegs $ \res ->
doIndexOffAddrOp Nothing b64 res args
ReadOffAddrOp_Word8 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_u_8ToWord platform)) b8 res args
+ doIndexOffAddrOp Nothing b8 res args
ReadOffAddrOp_Word16 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_u_16ToWord platform)) b16 res args
+ doIndexOffAddrOp Nothing b16 res args
ReadOffAddrOp_Word32 -> \args -> opIntoRegs $ \res ->
- doIndexOffAddrOp (Just (mo_u_32ToWord platform)) b32 res args
+ doIndexOffAddrOp Nothing b32 res args
ReadOffAddrOp_Word64 -> \args -> opIntoRegs $ \res ->
doIndexOffAddrOp Nothing b64 res args
@@ -527,19 +527,19 @@ emitPrimOp dflags primop = case primop of
IndexByteArrayOp_StablePtr -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOp Nothing (bWord platform) res args
IndexByteArrayOp_Int8 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_s_8ToWord platform)) b8 res args
+ doIndexByteArrayOp Nothing b8 res args
IndexByteArrayOp_Int16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_s_16ToWord platform)) b16 res args
+ doIndexByteArrayOp Nothing b16 res args
IndexByteArrayOp_Int32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_s_32ToWord platform)) b32 res args
+ doIndexByteArrayOp Nothing b32 res args
IndexByteArrayOp_Int64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOp Nothing b64 res args
IndexByteArrayOp_Word8 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_u_8ToWord platform)) b8 res args
+ doIndexByteArrayOp Nothing b8 res args
IndexByteArrayOp_Word16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_u_16ToWord platform)) b16 res args
+ doIndexByteArrayOp Nothing b16 res args
IndexByteArrayOp_Word32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_u_32ToWord platform)) b32 res args
+ doIndexByteArrayOp Nothing b32 res args
IndexByteArrayOp_Word64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOp Nothing b64 res args
@@ -562,19 +562,19 @@ emitPrimOp dflags primop = case primop of
ReadByteArrayOp_StablePtr -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOp Nothing (bWord platform) res args
ReadByteArrayOp_Int8 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_s_8ToWord platform)) b8 res args
+ doIndexByteArrayOp Nothing b8 res args
ReadByteArrayOp_Int16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_s_16ToWord platform)) b16 res args
+ doIndexByteArrayOp Nothing b16 res args
ReadByteArrayOp_Int32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_s_32ToWord platform)) b32 res args
+ doIndexByteArrayOp Nothing b32 res args
ReadByteArrayOp_Int64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOp Nothing b64 res args
ReadByteArrayOp_Word8 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_u_8ToWord platform)) b8 res args
+ doIndexByteArrayOp Nothing b8 res args
ReadByteArrayOp_Word16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_u_16ToWord platform)) b16 res args
+ doIndexByteArrayOp Nothing b16 res args
ReadByteArrayOp_Word32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOp (Just (mo_u_32ToWord platform)) b32 res args
+ doIndexByteArrayOp Nothing b32 res args
ReadByteArrayOp_Word64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOp Nothing b64 res args
@@ -597,15 +597,15 @@ emitPrimOp dflags primop = case primop of
IndexByteArrayOp_Word8AsStablePtr -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOpAs Nothing (bWord platform) b8 res args
IndexByteArrayOp_Word8AsInt16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_s_16ToWord platform)) b16 b8 res args
+ doIndexByteArrayOpAs Nothing b16 b8 res args
IndexByteArrayOp_Word8AsInt32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_s_32ToWord platform)) b32 b8 res args
+ doIndexByteArrayOpAs Nothing b32 b8 res args
IndexByteArrayOp_Word8AsInt64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOpAs Nothing b64 b8 res args
IndexByteArrayOp_Word8AsWord16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_u_16ToWord platform)) b16 b8 res args
+ doIndexByteArrayOpAs Nothing b16 b8 res args
IndexByteArrayOp_Word8AsWord32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_u_32ToWord platform)) b32 b8 res args
+ doIndexByteArrayOpAs Nothing b32 b8 res args
IndexByteArrayOp_Word8AsWord64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOpAs Nothing b64 b8 res args
@@ -628,15 +628,15 @@ emitPrimOp dflags primop = case primop of
ReadByteArrayOp_Word8AsStablePtr -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOpAs Nothing (bWord platform) b8 res args
ReadByteArrayOp_Word8AsInt16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_s_16ToWord platform)) b16 b8 res args
+ doIndexByteArrayOpAs Nothing b16 b8 res args
ReadByteArrayOp_Word8AsInt32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_s_32ToWord platform)) b32 b8 res args
+ doIndexByteArrayOpAs Nothing b32 b8 res args
ReadByteArrayOp_Word8AsInt64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOpAs Nothing b64 b8 res args
ReadByteArrayOp_Word8AsWord16 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_u_16ToWord platform)) b16 b8 res args
+ doIndexByteArrayOpAs Nothing b16 b8 res args
ReadByteArrayOp_Word8AsWord32 -> \args -> opIntoRegs $ \res ->
- doIndexByteArrayOpAs (Just (mo_u_32ToWord platform)) b32 b8 res args
+ doIndexByteArrayOpAs Nothing b32 b8 res args
ReadByteArrayOp_Word8AsWord64 -> \args -> opIntoRegs $ \res ->
doIndexByteArrayOpAs Nothing b64 b8 res args
@@ -659,19 +659,19 @@ emitPrimOp dflags primop = case primop of
WriteOffAddrOp_StablePtr -> \args -> opIntoRegs $ \res ->
doWriteOffAddrOp Nothing (bWord platform) res args
WriteOffAddrOp_Int8 -> \args -> opIntoRegs $ \res ->
- doWriteOffAddrOp (Just (mo_WordTo8 platform)) b8 res args
+ doWriteOffAddrOp Nothing b8 res args
WriteOffAddrOp_Int16 -> \args -> opIntoRegs $ \res ->
- doWriteOffAddrOp (Just (mo_WordTo16 platform)) b16 res args
+ doWriteOffAddrOp Nothing b16 res args
WriteOffAddrOp_Int32 -> \args -> opIntoRegs $ \res ->
- doWriteOffAddrOp (Just (mo_WordTo32 platform)) b32 res args
+ doWriteOffAddrOp Nothing b32 res args
WriteOffAddrOp_Int64 -> \args -> opIntoRegs $ \res ->
doWriteOffAddrOp Nothing b64 res args
WriteOffAddrOp_Word8 -> \args -> opIntoRegs $ \res ->
- doWriteOffAddrOp (Just (mo_WordTo8 platform)) b8 res args
+ doWriteOffAddrOp Nothing b8 res args
WriteOffAddrOp_Word16 -> \args -> opIntoRegs $ \res ->
- doWriteOffAddrOp (Just (mo_WordTo16 platform)) b16 res args
+ doWriteOffAddrOp Nothing b16 res args
WriteOffAddrOp_Word32 -> \args -> opIntoRegs $ \res ->
- doWriteOffAddrOp (Just (mo_WordTo32 platform)) b32 res args
+ doWriteOffAddrOp Nothing b32 res args
WriteOffAddrOp_Word64 -> \args -> opIntoRegs $ \res ->
doWriteOffAddrOp Nothing b64 res args
@@ -694,19 +694,19 @@ emitPrimOp dflags primop = case primop of
WriteByteArrayOp_StablePtr -> \args -> opIntoRegs $ \res ->
doWriteByteArrayOp Nothing (bWord platform) res args
WriteByteArrayOp_Int8 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo8 platform)) b8 res args
+ doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Int16 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo16 platform)) b16 res args
+ doWriteByteArrayOp Nothing b16 res args
WriteByteArrayOp_Int32 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo32 platform)) b32 res args
+ doWriteByteArrayOp Nothing b32 res args
WriteByteArrayOp_Int64 -> \args -> opIntoRegs $ \res ->
doWriteByteArrayOp Nothing b64 res args
WriteByteArrayOp_Word8 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo8 platform)) b8 res args
+ doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word16 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo16 platform)) b16 res args
+ doWriteByteArrayOp Nothing b16 res args
WriteByteArrayOp_Word32 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo32 platform)) b32 res args
+ doWriteByteArrayOp Nothing b32 res args
WriteByteArrayOp_Word64 -> \args -> opIntoRegs $ \res ->
doWriteByteArrayOp Nothing b64 res args
@@ -729,15 +729,15 @@ emitPrimOp dflags primop = case primop of
WriteByteArrayOp_Word8AsStablePtr -> \args -> opIntoRegs $ \res ->
doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word8AsInt16 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo16 platform)) b8 res args
+ doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word8AsInt32 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo32 platform)) b8 res args
+ doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word8AsInt64 -> \args -> opIntoRegs $ \res ->
doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word8AsWord16 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo16 platform)) b8 res args
+ doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word8AsWord32 -> \args -> opIntoRegs $ \res ->
- doWriteByteArrayOp (Just (mo_WordTo32 platform)) b8 res args
+ doWriteByteArrayOp Nothing b8 res args
WriteByteArrayOp_Word8AsWord64 -> \args -> opIntoRegs $ \res ->
doWriteByteArrayOp Nothing b8 res args