From: Julian Seward Date: Thu, 4 Nov 2004 19:41:09 +0000 (+0000) Subject: Do a few more cases. X-Git-Tag: svn/VALGRIND_3_0_1^2~845 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8d928776b7cabddcedaeab07de73be2794ff6820;p=thirdparty%2Fvalgrind.git Do a few more cases. git-svn-id: svn://svn.valgrind.org/vex/trunk@489 --- diff --git a/VEX/head20041019/memcheck/mc_translate.c b/VEX/head20041019/memcheck/mc_translate.c index ee2b6f2a37..c320c3413c 100644 --- a/VEX/head20041019/memcheck/mc_translate.c +++ b/VEX/head20041019/memcheck/mc_translate.c @@ -1971,7 +1971,7 @@ static Bool isAlwaysDefd ( MCEnv* mce, Int offset, Int size ) 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 @@ -1994,7 +1994,7 @@ void complainIfUndefined ( MCEnv* mce, IRAtom* atom ) = 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)); @@ -2135,6 +2135,7 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, 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); @@ -2167,6 +2168,11 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, 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); @@ -2182,6 +2188,9 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, 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; @@ -2194,6 +2203,9 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, 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);