summaryrefslogtreecommitdiff
path: root/compiler/GHC/StgToCmm/Prim.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/StgToCmm/Prim.hs')
-rw-r--r--compiler/GHC/StgToCmm/Prim.hs28
1 files changed, 26 insertions, 2 deletions
diff --git a/compiler/GHC/StgToCmm/Prim.hs b/compiler/GHC/StgToCmm/Prim.hs
index b7efb3b8ee..b08edea624 100644
--- a/compiler/GHC/StgToCmm/Prim.hs
+++ b/compiler/GHC/StgToCmm/Prim.hs
@@ -1079,6 +1079,10 @@ emitPrimOp dflags primop = case primop of
-- The rest just translate straightforwardly
+ Int8ToWord8Op -> \args -> opNop args
+ Word8ToInt8Op -> \args -> opNop args
+ Int16ToWord16Op -> \args -> opNop args
+ Word16ToInt16Op -> \args -> opNop args
Int32ToWord32Op -> \args -> opNop args
Word32ToInt32Op -> \args -> opNop args
IntToWordOp -> \args -> opNop args
@@ -1206,6 +1210,10 @@ emitPrimOp dflags primop = case primop of
Int8QuotOp -> \args -> opTranslate args (MO_S_Quot W8)
Int8RemOp -> \args -> opTranslate args (MO_S_Rem W8)
+ Int8SllOp -> \args -> opTranslate args (MO_Shl W8)
+ Int8SraOp -> \args -> opTranslate args (MO_S_Shr W8)
+ Int8SrlOp -> \args -> opTranslate args (MO_U_Shr W8)
+
Int8EqOp -> \args -> opTranslate args (MO_Eq W8)
Int8GeOp -> \args -> opTranslate args (MO_S_Ge W8)
Int8GtOp -> \args -> opTranslate args (MO_S_Gt W8)
@@ -1217,13 +1225,19 @@ emitPrimOp dflags primop = case primop of
Word8ToWordOp -> \args -> opTranslate args (MO_UU_Conv W8 (wordWidth platform))
WordToWord8Op -> \args -> opTranslate args (MO_UU_Conv (wordWidth platform) W8)
- Word8NotOp -> \args -> opTranslate args (MO_Not W8)
Word8AddOp -> \args -> opTranslate args (MO_Add W8)
Word8SubOp -> \args -> opTranslate args (MO_Sub W8)
Word8MulOp -> \args -> opTranslate args (MO_Mul W8)
Word8QuotOp -> \args -> opTranslate args (MO_U_Quot W8)
Word8RemOp -> \args -> opTranslate args (MO_U_Rem W8)
+ Word8AndOp -> \args -> opTranslate args (MO_And W8)
+ Word8OrOp -> \args -> opTranslate args (MO_Or W8)
+ Word8XorOp -> \args -> opTranslate args (MO_Xor W8)
+ Word8NotOp -> \args -> opTranslate args (MO_Not W8)
+ Word8SllOp -> \args -> opTranslate args (MO_Shl W8)
+ Word8SrlOp -> \args -> opTranslate args (MO_U_Shr W8)
+
Word8EqOp -> \args -> opTranslate args (MO_Eq W8)
Word8GeOp -> \args -> opTranslate args (MO_U_Ge W8)
Word8GtOp -> \args -> opTranslate args (MO_U_Gt W8)
@@ -1242,6 +1256,10 @@ emitPrimOp dflags primop = case primop of
Int16QuotOp -> \args -> opTranslate args (MO_S_Quot W16)
Int16RemOp -> \args -> opTranslate args (MO_S_Rem W16)
+ Int16SllOp -> \args -> opTranslate args (MO_Shl W16)
+ Int16SraOp -> \args -> opTranslate args (MO_S_Shr W16)
+ Int16SrlOp -> \args -> opTranslate args (MO_U_Shr W16)
+
Int16EqOp -> \args -> opTranslate args (MO_Eq W16)
Int16GeOp -> \args -> opTranslate args (MO_S_Ge W16)
Int16GtOp -> \args -> opTranslate args (MO_S_Gt W16)
@@ -1253,13 +1271,19 @@ emitPrimOp dflags primop = case primop of
Word16ToWordOp -> \args -> opTranslate args (MO_UU_Conv W16 (wordWidth platform))
WordToWord16Op -> \args -> opTranslate args (MO_UU_Conv (wordWidth platform) W16)
- Word16NotOp -> \args -> opTranslate args (MO_Not W16)
Word16AddOp -> \args -> opTranslate args (MO_Add W16)
Word16SubOp -> \args -> opTranslate args (MO_Sub W16)
Word16MulOp -> \args -> opTranslate args (MO_Mul W16)
Word16QuotOp -> \args -> opTranslate args (MO_U_Quot W16)
Word16RemOp -> \args -> opTranslate args (MO_U_Rem W16)
+ Word16AndOp -> \args -> opTranslate args (MO_And W16)
+ Word16OrOp -> \args -> opTranslate args (MO_Or W16)
+ Word16XorOp -> \args -> opTranslate args (MO_Xor W16)
+ Word16NotOp -> \args -> opTranslate args (MO_Not W16)
+ Word16SllOp -> \args -> opTranslate args (MO_Shl W16)
+ Word16SrlOp -> \args -> opTranslate args (MO_U_Shr W16)
+
Word16EqOp -> \args -> opTranslate args (MO_Eq W16)
Word16GeOp -> \args -> opTranslate args (MO_U_Ge W16)
Word16GtOp -> \args -> opTranslate args (MO_U_Gt W16)