- primop_rule IntNegOp = oneLit (negOp op_name)
-
- primop_rule ChrOp = oneLit (litCoerce int2CharLit op_name)
- primop_rule Int2FloatOp = oneLit (litCoerce int2FloatLit op_name)
- primop_rule Int2DoubleOp = oneLit (litCoerce int2DoubleLit op_name)
- primop_rule Word2IntOp = oneLit (litCoerce word2IntLit op_name)
- primop_rule Int2WordOp = oneLit (litCoerce int2WordLit op_name)
+ primop_rule IntNegOp = oneLit (negOp op_name)
+
+ -- Word operations
+ primop_rule WordQuotOp = twoLits (wordOp2Z quot op_name)
+ primop_rule WordRemOp = twoLits (wordOp2Z rem op_name)
+ primop_rule AndOp = twoLits (wordBitOp2 (.&.) op_name)
+ primop_rule OrOp = twoLits (wordBitOp2 (.|.) op_name)
+ primop_rule XorOp = twoLits (wordBitOp2 xor op_name)
+
+ -- coercions
+ primop_rule Word2IntOp = oneLit (litCoerce word2IntLit op_name)
+ primop_rule Int2WordOp = oneLit (litCoerce int2WordLit op_name)
+ primop_rule OrdOp = oneLit (litCoerce char2IntLit op_name)
+ primop_rule ChrOp = oneLit (litCoerce int2CharLit op_name)
+ primop_rule Float2IntOp = oneLit (litCoerce float2IntLit op_name)
+ primop_rule Int2FloatOp = oneLit (litCoerce int2FloatLit op_name)
+ primop_rule Double2IntOp = oneLit (litCoerce double2IntLit op_name)
+ primop_rule Int2DoubleOp = oneLit (litCoerce int2DoubleLit op_name)
+ primop_rule Addr2IntOp = oneLit (litCoerce addr2IntLit op_name)
+ primop_rule Int2AddrOp = oneLit (litCoerce int2AddrLit op_name)
+ -- SUP: Not sure what the standard says about precision in the following 2 cases
+ primop_rule Float2DoubleOp = oneLit (litCoerce float2DoubleLit op_name)
+ primop_rule Double2FloatOp = oneLit (litCoerce double2FloatLit op_name)