]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix enough stuff so that x86 MMX tests work.
authorJulian Seward <jseward@acm.org>
Fri, 10 Dec 2004 13:35:22 +0000 (13:35 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 10 Dec 2004 13:35:22 +0000 (13:35 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3188

memcheck/mc_translate.c

index 5108f60a0001e41dc485e67226ea080eb88f1731..470f3cf1d07d682474e93b85f25c5dc93e3bead4 100644 (file)
@@ -265,6 +265,12 @@ static IRAtom* mkDifD32 ( MCEnv* mce, IRAtom* a1, IRAtom* a2 ) {
    return assignNew(mce, Ity_I32, binop(Iop_And32, a1, a2));
 }
 
+static IRAtom* mkDifD64 ( MCEnv* mce, IRAtom* a1, IRAtom* a2 ) {
+   tl_assert(isShadowAtom(mce,a1));
+   tl_assert(isShadowAtom(mce,a2));
+   return assignNew(mce, Ity_I64, binop(Iop_And64, a1, a2));
+}
+
 /* --------- Undefined-if-either-undefined --------- */
 
 static IRAtom* mkUifU8 ( MCEnv* mce, IRAtom* a1, IRAtom* a2 ) {
@@ -363,6 +369,14 @@ static IRAtom* mkImproveAND32 ( MCEnv* mce, IRAtom* data, IRAtom* vbits )
    return assignNew(mce, Ity_I32, binop(Iop_Or32, data, vbits));
 }
 
+static IRAtom* mkImproveAND64 ( MCEnv* mce, IRAtom* data, IRAtom* vbits )
+{
+   tl_assert(isOriginalAtom(mce, data));
+   tl_assert(isShadowAtom(mce, vbits));
+   tl_assert(sameKindedAtoms(data, vbits));
+   return assignNew(mce, Ity_I64, binop(Iop_Or64, data, vbits));
+}
+
 /* ImproveOR(data, vbits) = ~data OR vbits.  Defined (0) data 1s give
    defined (0); all other -> undefined (1).
 */
@@ -402,6 +416,18 @@ static IRAtom* mkImproveOR32 ( MCEnv* mce, IRAtom* data, IRAtom* vbits )
                    vbits) );
 }
 
+static IRAtom* mkImproveOR64 ( MCEnv* mce, IRAtom* data, IRAtom* vbits )
+{
+   tl_assert(isOriginalAtom(mce, data));
+   tl_assert(isShadowAtom(mce, vbits));
+   tl_assert(sameKindedAtoms(data, vbits));
+   return assignNew(
+             mce, Ity_I64, 
+             binop(Iop_Or64, 
+                   assignNew(mce, Ity_I64, unop(Iop_Not64, data)), 
+                   vbits) );
+}
+
 /* --------- Pessimising casts. --------- */
 
 static IRAtom* mkPCastTo( MCEnv* mce, IRType dst_ty, IRAtom* vbits ) 
@@ -954,6 +980,9 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
          complainIfUndefined(mce, atom2);
          return assignNew(mce, Ity_I64, binop(op, vatom1, atom2));
 
+      case Iop_And64:
+         uifu = mkUifU64; difd = mkDifD64; 
+         and_or_ty = Ity_I64; improve = mkImproveAND64; goto do_And_Or;
       case Iop_And32:
          uifu = mkUifU32; difd = mkDifD32; 
          and_or_ty = Ity_I32; improve = mkImproveAND32; goto do_And_Or;
@@ -964,6 +993,9 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
          uifu = mkUifU8; difd = mkDifD8; 
          and_or_ty = Ity_I8; improve = mkImproveAND8; goto do_And_Or;
 
+      case Iop_Or64:
+         uifu = mkUifU64; difd = mkDifD64; 
+         and_or_ty = Ity_I64; improve = mkImproveOR64; goto do_And_Or;
       case Iop_Or32:
          uifu = mkUifU32; difd = mkDifD32; 
          and_or_ty = Ity_I32; improve = mkImproveOR32; goto do_And_Or;
@@ -989,6 +1021,8 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce,
          return mkUifU16(mce, vatom1, vatom2);
       case Iop_Xor32:
          return mkUifU32(mce, vatom1, vatom2);
+      case Iop_Xor64:
+         return mkUifU64(mce, vatom1, vatom2);
 
       default:
          ppIROp(op);
@@ -1048,11 +1082,13 @@ IRExpr* expr2vbits_Unop ( MCEnv* mce, IROp op, IRAtom* atom )
 
       case Iop_ReinterpF64asI64:
       case Iop_ReinterpI64asF64:
+      case Iop_Not64:
       case Iop_Not32:
       case Iop_Not16:
       case Iop_Not8:
       case Iop_Not1:
          return vatom;
+
       default:
          ppIROp(op);
          VG_(tool_panic)("memcheck:expr2vbits_Unop");