diff --git a/lang/cem/cemcom/ch7mon.c b/lang/cem/cemcom/ch7mon.c index c4cd2e6aa..96d758d9f 100644 --- a/lang/cem/cemcom/ch7mon.c +++ b/lang/cem/cemcom/ch7mon.c @@ -111,10 +111,11 @@ ch7mon(oper, expp) if (is_cp_cst(*expp)) { arith o1 = (*expp)->VL_VALUE; - (*expp)->VL_VALUE = (oper == '-') ? -o1 : + o1 = (oper == '-') ? -o1 : ~o1; + (*expp)->VL_VALUE = ((*expp)->ex_type->tp_unsigned ? - (~o1) & full_mask[(*expp)->ex_type->tp_size] : - ~o1 + o1 & full_mask[(*expp)->ex_type->tp_size] : + o1 ); } else