]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
x86->IR->x86: handle byte-sized cmpxchg.
authorJulian Seward <jseward@acm.org>
Thu, 26 Aug 2004 11:24:39 +0000 (11:24 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 26 Aug 2004 11:24:39 +0000 (11:24 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@216

VEX/priv/guest-x86/toIR.c
VEX/priv/host-x86/isel.c

index 438ec62e2ff57db2fafd77d6ae85193bd9f677ca..5b5eadb3f63c616ca2bbcd09c6d8f0307fc25dd5 100644 (file)
@@ -4053,7 +4053,6 @@ UInt dis_cmpxchg_G_E ( UChar       sorb,
       DIP("cmpxchg%c %s,%s\n", nameISize(size),
                                nameIReg(size,gregOfRM(rm)),
                                nameIReg(size,eregOfRM(rm)) );
-      vassert(0);
    } else {
       addr = disAMode ( &len, sorb, delta0, dis_buf );
       assign( dest, loadLE(ty, mkexpr(addr)) );
@@ -7740,9 +7739,9 @@ static UInt disInstr ( UInt delta, Bool* isEnd )
 
       /* =-=-=-=-=-=-=-=-=- CMPXCHG -=-=-=-=-=-=-=-=-=-= */
 
-//--       case 0xB0: /* CMPXCHG Gb,Eb */
-//--          eip = dis_cmpxchg_G_E ( cb, sorb, 1, eip );
-//--          break;
+      case 0xB0: /* CMPXCHG Gb,Eb */
+         delta = dis_cmpxchg_G_E ( sorb, 1, delta );
+         break;
       case 0xB1: /* CMPXCHG Gv,Ev */
          delta = dis_cmpxchg_G_E ( sorb, sz, delta );
          break;
index d82b35ee189b9748dbf24bab2492680d7ac9d911..86b2c2d28b94744c2fcd4be3997949720d96ce8a 100644 (file)
@@ -673,7 +673,7 @@ static HReg iselIntExpr_R_wrk ( ISelEnv* env, IRExpr* e )
 
    /* --------- MULTIPLEX --------- */
    case Iex_Mux0X: {
-      if (ty == Ity_I32 
+     if ((ty == Ity_I32 || ty == Ity_I16 || ty == Ity_I8)
          && typeOfIRExpr(env->type_env,e->Iex.Mux0X.cond) == Ity_I8) {
         HReg r8;
         HReg rX   = iselIntExpr_R(env, e->Iex.Mux0X.exprX);