static
void complainIfUndefined ( MCEnv* mce, IRAtom* atom )
{
- // static Int zzz=100;
+ static Int zzz=0;
/* Since the original expression is atomic, there's no duplicated
work generated by making multiple V-expressions for it. So we
= unsafeIRDirty_0_N( 1/*regparms*/,
"MC_(helperc_complain_undef)",
&MC_(helperc_complain_undef),
- mkIRExprVec_1( mkIRExpr_HWord( sz /* zzz++ */ ) ));
+ mkIRExprVec_1( mkIRExpr_HWord( /*sz*/ zzz++ ) ));
di->guard = cond;
setHelperAnns( mce, di );
stmt( mce->bb, IRStmt_Dirty(di));
return assignNew(mce, Ity_I64,
binop(Iop_32HLto64, atom1, atom2));
+ case Iop_MullS32:
case Iop_MullU32: {
IRAtom* vLo32 = mkLeft32(mce, mkUifU32(mce, vatom1,vatom2));
IRAtom* vHi32 = mkPCastTo(mce, vLo32, Ity_I32);
complainIfUndefined(mce, atom2);
return assignNew(mce, Ity_I32, binop(op, vatom1, atom2));
+ case Iop_Shl16: case Iop_Shr16:
+ /* Same scheme as with 32-bit shifts. */
+ complainIfUndefined(mce, atom2);
+ return assignNew(mce, Ity_I16, binop(op, vatom1, atom2));
+
case Iop_Shl64: case Iop_Shr64:
/* Same scheme as with 32-bit shifts. */
complainIfUndefined(mce, atom2);
case Iop_Or32:
uifu = mkUifU32; difd = mkDifD32;
and_or_ty = Ity_I32; improve = mkImproveOR32; goto do_And_Or;
+ //case Iop_Or16:
+ //uifu = mkUifU16; difd = mkDifD16;
+ //and_or_ty = Ity_I16; improve = mkImproveOR16; goto do_And_Or;
case Iop_Or8:
uifu = mkUifU8; difd = mkDifD8;
and_or_ty = Ity_I8; improve = mkImproveOR8; goto do_And_Or;
difd(mce, uifu(mce, vatom1, vatom2),
difd(mce, improve(mce, atom1, vatom1),
improve(mce, atom2, vatom2) ) ) );
+
+ case Iop_Xor8:
+ return mkUifU8(mce, vatom1, vatom2);
case Iop_Xor32:
return mkUifU32(mce, vatom1, vatom2);