diff options
author | John Ericson <git@JohnEricson.me> | 2019-06-03 23:47:10 -0400 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-01-07 00:11:31 -0500 |
commit | 06982b6cc886d65aa325475ddfb4ad38c69b2d96 (patch) | |
tree | a09811c44dd0e4fd774bc2de3fa10ea34f6409f4 /compiler/GHC/Tc/Deriv | |
parent | e981023eb1cfb2a0f6052763469252feee3e2d51 (diff) | |
download | haskell-06982b6cc886d65aa325475ddfb4ad38c69b2d96.tar.gz |
Make primops for `{Int,Word}32#`
Progress towards #19026.
The type was added before, but not its primops. We follow the
conventions in 36fcf9edee31513db2ddbf716ee0aa79766cbe69 and
2c959a1894311e59cd2fd469c1967491c1e488f3 for names and testing.
Along with the previous 8- and 16-bit primops, this will allow us to
avoid many conversions for 8-, 16-, and 32-bit sized numeric types.
Co-authored-by: Sylvain Henry <hsyl20@gmail.com>
Diffstat (limited to 'compiler/GHC/Tc/Deriv')
-rw-r--r-- | compiler/GHC/Tc/Deriv/Generate.hs | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/compiler/GHC/Tc/Deriv/Generate.hs b/compiler/GHC/Tc/Deriv/Generate.hs index 3c45c8f379..d5ecd102a2 100644 --- a/compiler/GHC/Tc/Deriv/Generate.hs +++ b/compiler/GHC/Tc/Deriv/Generate.hs @@ -1511,14 +1511,18 @@ gfoldl_RDR, gunfold_RDR, toConstr_RDR, dataTypeOf_RDR, mkConstr_RDR, eqInt_RDR , ltInt_RDR , geInt_RDR , gtInt_RDR , leInt_RDR , eqInt8_RDR , ltInt8_RDR , geInt8_RDR , gtInt8_RDR , leInt8_RDR , eqInt16_RDR , ltInt16_RDR , geInt16_RDR , gtInt16_RDR , leInt16_RDR , + eqInt32_RDR , ltInt32_RDR , geInt32_RDR , gtInt32_RDR , leInt32_RDR , eqWord_RDR , ltWord_RDR , geWord_RDR , gtWord_RDR , leWord_RDR , eqWord8_RDR , ltWord8_RDR , geWord8_RDR , gtWord8_RDR , leWord8_RDR , eqWord16_RDR, ltWord16_RDR, geWord16_RDR, gtWord16_RDR, leWord16_RDR, + eqWord32_RDR, ltWord32_RDR, geWord32_RDR, gtWord32_RDR, leWord32_RDR, eqAddr_RDR , ltAddr_RDR , geAddr_RDR , gtAddr_RDR , leAddr_RDR , eqFloat_RDR , ltFloat_RDR , geFloat_RDR , gtFloat_RDR , leFloat_RDR , eqDouble_RDR, ltDouble_RDR, geDouble_RDR, gtDouble_RDR, leDouble_RDR, extendWord8_RDR, extendInt8_RDR, - extendWord16_RDR, extendInt16_RDR :: RdrName + extendWord16_RDR, extendInt16_RDR, + extendWord32_RDR, extendInt32_RDR + :: RdrName gfoldl_RDR = varQual_RDR gENERICS (fsLit "gfoldl") gunfold_RDR = varQual_RDR gENERICS (fsLit "gunfold") toConstr_RDR = varQual_RDR gENERICS (fsLit "toConstr") @@ -1559,6 +1563,12 @@ leInt16_RDR = varQual_RDR gHC_PRIM (fsLit "leInt16#") gtInt16_RDR = varQual_RDR gHC_PRIM (fsLit "gtInt16#" ) geInt16_RDR = varQual_RDR gHC_PRIM (fsLit "geInt16#") +eqInt32_RDR = varQual_RDR gHC_PRIM (fsLit "eqInt32#") +ltInt32_RDR = varQual_RDR gHC_PRIM (fsLit "ltInt32#" ) +leInt32_RDR = varQual_RDR gHC_PRIM (fsLit "leInt32#") +gtInt32_RDR = varQual_RDR gHC_PRIM (fsLit "gtInt32#" ) +geInt32_RDR = varQual_RDR gHC_PRIM (fsLit "geInt32#") + eqWord_RDR = varQual_RDR gHC_PRIM (fsLit "eqWord#") ltWord_RDR = varQual_RDR gHC_PRIM (fsLit "ltWord#") leWord_RDR = varQual_RDR gHC_PRIM (fsLit "leWord#") @@ -1577,6 +1587,12 @@ leWord16_RDR = varQual_RDR gHC_PRIM (fsLit "leWord16#") gtWord16_RDR = varQual_RDR gHC_PRIM (fsLit "gtWord16#" ) geWord16_RDR = varQual_RDR gHC_PRIM (fsLit "geWord16#") +eqWord32_RDR = varQual_RDR gHC_PRIM (fsLit "eqWord32#") +ltWord32_RDR = varQual_RDR gHC_PRIM (fsLit "ltWord32#" ) +leWord32_RDR = varQual_RDR gHC_PRIM (fsLit "leWord32#") +gtWord32_RDR = varQual_RDR gHC_PRIM (fsLit "gtWord32#" ) +geWord32_RDR = varQual_RDR gHC_PRIM (fsLit "geWord32#") + eqAddr_RDR = varQual_RDR gHC_PRIM (fsLit "eqAddr#") ltAddr_RDR = varQual_RDR gHC_PRIM (fsLit "ltAddr#") leAddr_RDR = varQual_RDR gHC_PRIM (fsLit "leAddr#") @@ -1601,6 +1617,8 @@ extendInt8_RDR = varQual_RDR gHC_PRIM (fsLit "extendInt8#") extendWord16_RDR = varQual_RDR gHC_PRIM (fsLit "extendWord16#") extendInt16_RDR = varQual_RDR gHC_PRIM (fsLit "extendInt16#") +extendWord32_RDR = varQual_RDR gHC_PRIM (fsLit "extendWord32#") +extendInt32_RDR = varQual_RDR gHC_PRIM (fsLit "extendInt32#") {- ************************************************************************ @@ -2362,12 +2380,16 @@ ordOpTbl , eqInt8_RDR , geInt8_RDR , gtInt8_RDR )) ,(int16PrimTy , (ltInt16_RDR , leInt16_RDR , eqInt16_RDR , geInt16_RDR , gtInt16_RDR )) + ,(int32PrimTy , (ltInt32_RDR , leInt32_RDR + , eqInt32_RDR , geInt32_RDR , gtInt32_RDR )) ,(wordPrimTy , (ltWord_RDR , leWord_RDR , eqWord_RDR , geWord_RDR , gtWord_RDR )) ,(word8PrimTy , (ltWord8_RDR , leWord8_RDR , eqWord8_RDR , geWord8_RDR , gtWord8_RDR )) ,(word16PrimTy, (ltWord16_RDR, leWord16_RDR , eqWord16_RDR, geWord16_RDR, gtWord16_RDR )) + ,(word32PrimTy, (ltWord32_RDR, leWord32_RDR + , eqWord32_RDR, geWord32_RDR, gtWord32_RDR )) ,(addrPrimTy , (ltAddr_RDR , leAddr_RDR , eqAddr_RDR , geAddr_RDR , gtAddr_RDR )) ,(floatPrimTy , (ltFloat_RDR , leFloat_RDR @@ -2390,13 +2412,19 @@ boxConTbl = . nlHsApp (nlHsVar extendInt8_RDR)) , (word8PrimTy, nlHsApp (nlHsVar $ getRdrName wordDataCon) - . nlHsApp (nlHsVar extendWord8_RDR)) + . nlHsApp (nlHsVar extendWord8_RDR)) , (int16PrimTy, nlHsApp (nlHsVar $ getRdrName intDataCon) . nlHsApp (nlHsVar extendInt16_RDR)) , (word16PrimTy, nlHsApp (nlHsVar $ getRdrName wordDataCon) - . nlHsApp (nlHsVar extendWord16_RDR)) + . nlHsApp (nlHsVar extendWord16_RDR)) + , (int32PrimTy, + nlHsApp (nlHsVar $ getRdrName intDataCon) + . nlHsApp (nlHsVar extendInt32_RDR)) + , (word32PrimTy, + nlHsApp (nlHsVar $ getRdrName wordDataCon) + . nlHsApp (nlHsVar extendWord32_RDR)) ] @@ -2412,6 +2440,8 @@ postfixModTbl ,(word8PrimTy, "##") ,(int16PrimTy, "#") ,(word16PrimTy, "##") + ,(int32PrimTy, "#") + ,(word32PrimTy, "##") ] primConvTbl :: [(Type, String)] @@ -2420,6 +2450,8 @@ primConvTbl = , (word8PrimTy, "narrowWord8#") , (int16PrimTy, "narrowInt16#") , (word16PrimTy, "narrowWord16#") + , (int32PrimTy, "narrowInt32#") + , (word32PrimTy, "narrowWord32#") ] litConTbl :: [(Type, LHsExpr GhcPs -> LHsExpr GhcPs)] |