summaryrefslogtreecommitdiff
path: root/compiler/codeGen/StgCmmPrim.hs
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2018-10-09 12:39:14 -0400
committerBen Gamari <ben@smart-cactus.org>2018-10-09 12:40:23 -0400
commitd728c3c578cc9e9205def2c1e96934487b364b7b (patch)
treec542d0ea89dad09c0b8a887266375e4303f9a3a6 /compiler/codeGen/StgCmmPrim.hs
parent4eeeb51d5f51083d0ae393009a7fd246223e9791 (diff)
downloadhaskell-d728c3c578cc9e9205def2c1e96934487b364b7b.tar.gz
Revert "Add Int8# and Word8#"
This unfortunately broke i386 support since it introduced references to byte-sized registers that don't exist on that architecture. Reverts binary submodule This reverts commit 5d5307f943d7581d7013ffe20af22233273fba06.
Diffstat (limited to 'compiler/codeGen/StgCmmPrim.hs')
-rw-r--r--compiler/codeGen/StgCmmPrim.hs74
1 files changed, 14 insertions, 60 deletions
diff --git a/compiler/codeGen/StgCmmPrim.hs b/compiler/codeGen/StgCmmPrim.hs
index 2c73e2ee04..f5437c0c3b 100644
--- a/compiler/codeGen/StgCmmPrim.hs
+++ b/compiler/codeGen/StgCmmPrim.hs
@@ -881,29 +881,19 @@ type GenericOp = [CmmFormal] -> [CmmActual] -> FCode ()
callishPrimOpSupported :: DynFlags -> PrimOp -> Either CallishMachOp GenericOp
callishPrimOpSupported dflags op
= case op of
- IntQuotRemOp | ncg && (x86ish || ppc) ->
- Left (MO_S_QuotRem (wordWidth dflags))
- | otherwise ->
- Right (genericIntQuotRemOp (wordWidth dflags))
+ IntQuotRemOp | ncg && (x86ish
+ || ppc) -> Left (MO_S_QuotRem (wordWidth dflags))
+ | otherwise -> Right (genericIntQuotRemOp dflags)
- Int8QuotRemOp | (ncg && x86ish)
- || llvm -> Left (MO_S_QuotRem W8)
- | otherwise -> Right (genericIntQuotRemOp W8)
-
- WordQuotRemOp | ncg && (x86ish || ppc) ->
- Left (MO_U_QuotRem (wordWidth dflags))
- | otherwise ->
- Right (genericWordQuotRemOp (wordWidth dflags))
+ WordQuotRemOp | ncg && (x86ish
+ || ppc) -> Left (MO_U_QuotRem (wordWidth dflags))
+ | otherwise -> Right (genericWordQuotRemOp dflags)
WordQuotRem2Op | (ncg && (x86ish
|| ppc))
|| llvm -> Left (MO_U_QuotRem2 (wordWidth dflags))
| otherwise -> Right (genericWordQuotRem2Op dflags)
- Word8QuotRemOp | (ncg && x86ish)
- || llvm -> Left (MO_U_QuotRem W8)
- | otherwise -> Right (genericWordQuotRemOp W8)
-
WordAdd2Op | (ncg && (x86ish
|| ppc))
|| llvm -> Left (MO_Add2 (wordWidth dflags))
@@ -959,20 +949,20 @@ callishPrimOpSupported dflags op
ArchPPC_64 _ -> True
_ -> False
-genericIntQuotRemOp :: Width -> GenericOp
-genericIntQuotRemOp width [res_q, res_r] [arg_x, arg_y]
+genericIntQuotRemOp :: DynFlags -> GenericOp
+genericIntQuotRemOp dflags [res_q, res_r] [arg_x, arg_y]
= emit $ mkAssign (CmmLocal res_q)
- (CmmMachOp (MO_S_Quot width) [arg_x, arg_y]) <*>
+ (CmmMachOp (MO_S_Quot (wordWidth dflags)) [arg_x, arg_y]) <*>
mkAssign (CmmLocal res_r)
- (CmmMachOp (MO_S_Rem width) [arg_x, arg_y])
+ (CmmMachOp (MO_S_Rem (wordWidth dflags)) [arg_x, arg_y])
genericIntQuotRemOp _ _ _ = panic "genericIntQuotRemOp"
-genericWordQuotRemOp :: Width -> GenericOp
-genericWordQuotRemOp width [res_q, res_r] [arg_x, arg_y]
+genericWordQuotRemOp :: DynFlags -> GenericOp
+genericWordQuotRemOp dflags [res_q, res_r] [arg_x, arg_y]
= emit $ mkAssign (CmmLocal res_q)
- (CmmMachOp (MO_U_Quot width) [arg_x, arg_y]) <*>
+ (CmmMachOp (MO_U_Quot (wordWidth dflags)) [arg_x, arg_y]) <*>
mkAssign (CmmLocal res_r)
- (CmmMachOp (MO_U_Rem width) [arg_x, arg_y])
+ (CmmMachOp (MO_U_Rem (wordWidth dflags)) [arg_x, arg_y])
genericWordQuotRemOp _ _ _ = panic "genericWordQuotRemOp"
genericWordQuotRem2Op :: DynFlags -> GenericOp
@@ -1326,42 +1316,6 @@ translateOp dflags AddrLeOp = Just (mo_wordULe dflags)
translateOp dflags AddrGtOp = Just (mo_wordUGt dflags)
translateOp dflags AddrLtOp = Just (mo_wordULt dflags)
--- Int8# signed ops
-
-translateOp dflags Int8Extend = Just (MO_SS_Conv W8 (wordWidth dflags))
-translateOp dflags Int8Narrow = Just (MO_SS_Conv (wordWidth dflags) W8)
-translateOp _ Int8NegOp = Just (MO_S_Neg W8)
-translateOp _ Int8AddOp = Just (MO_Add W8)
-translateOp _ Int8SubOp = Just (MO_Sub W8)
-translateOp _ Int8MulOp = Just (MO_Mul W8)
-translateOp _ Int8QuotOp = Just (MO_S_Quot W8)
-translateOp _ Int8RemOp = Just (MO_S_Rem W8)
-
-translateOp _ Int8EqOp = Just (MO_Eq W8)
-translateOp _ Int8GeOp = Just (MO_S_Ge W8)
-translateOp _ Int8GtOp = Just (MO_S_Gt W8)
-translateOp _ Int8LeOp = Just (MO_S_Le W8)
-translateOp _ Int8LtOp = Just (MO_S_Lt W8)
-translateOp _ Int8NeOp = Just (MO_Ne W8)
-
--- Word8# unsigned ops
-
-translateOp dflags Word8Extend = Just (MO_UU_Conv W8 (wordWidth dflags))
-translateOp dflags Word8Narrow = Just (MO_UU_Conv (wordWidth dflags) W8)
-translateOp _ Word8NotOp = Just (MO_Not W8)
-translateOp _ Word8AddOp = Just (MO_Add W8)
-translateOp _ Word8SubOp = Just (MO_Sub W8)
-translateOp _ Word8MulOp = Just (MO_Mul W8)
-translateOp _ Word8QuotOp = Just (MO_U_Quot W8)
-translateOp _ Word8RemOp = Just (MO_U_Rem W8)
-
-translateOp _ Word8EqOp = Just (MO_Eq W8)
-translateOp _ Word8GeOp = Just (MO_U_Ge W8)
-translateOp _ Word8GtOp = Just (MO_U_Gt W8)
-translateOp _ Word8LeOp = Just (MO_U_Le W8)
-translateOp _ Word8LtOp = Just (MO_U_Lt W8)
-translateOp _ Word8NeOp = Just (MO_Ne W8)
-
-- Char# ops
translateOp dflags CharEqOp = Just (MO_Eq (wordWidth dflags))