Author: sewardj
Date: 2007-11-15 23:30:16 +0000 (Thu, 15 Nov 2007)
New Revision: 1794

Log:
Handle the "alternative" (non-binutils) encoding of 'adc' and tidy up
some other op-G-E / op-E-G decodings.  This fixes a bug which was
reported on [EMAIL PROTECTED] on 11 Aug 2007
("LibVEX called failure_exit() with 3.3.0svn-r6769 with Linux on
AMD64") I don't think it ever was formally filed as a bug report.

Modified:
   trunk/priv/guest-amd64/toIR.c


Modified: trunk/priv/guest-amd64/toIR.c
===================================================================
--- trunk/priv/guest-amd64/toIR.c       2007-11-09 21:15:04 UTC (rev 1793)
+++ trunk/priv/guest-amd64/toIR.c       2007-11-15 23:30:16 UTC (rev 1794)
@@ -2509,7 +2509,6 @@
       assign( src,  getIRegE(size,pfx,rm) );
 
       if (addSubCarry && op8 == Iop_Add8) {
-         vassert(0); /* awaiting test case */
          helper_ADC( size, dst1, dst0, src );
          putIRegG(size, pfx, rm, mkexpr(dst1));
       } else
@@ -13059,6 +13058,7 @@
       break;
 
    case 0x14: /* ADC Ib, AL */
+      if (haveF2orF3(pfx)) goto decode_failure;
       delta = dis_op_imm_A( 1, True, Iop_Add8, True, delta, "adc" );
       break;
 //.. //--    case 0x15: /* ADC Iv, eAX */
@@ -13137,11 +13137,13 @@
       if (haveF2orF3(pfx)) goto decode_failure;
       delta = dis_op2_E_G ( pfx, False, Iop_Or8, True, sz, delta, "or" );
       break;
-//-- 
-//.. //--    case 0x12: /* ADC Eb,Gb */
-//.. //--       delta = dis_op2_E_G ( sorb, True, ADC, True, 1, delta, "adc" );
-//.. //--       break;
+
+   case 0x12: /* ADC Eb,Gb */
+      if (haveF2orF3(pfx)) goto decode_failure;
+      delta = dis_op2_E_G ( pfx, True, Iop_Add8, True, 1, delta, "adc" );
+      break;
    case 0x13: /* ADC Ev,Gv */
+      if (haveF2orF3(pfx)) goto decode_failure;
       delta = dis_op2_E_G ( pfx, True, Iop_Add8, True, sz, delta, "adc" );
       break;
 
@@ -13149,6 +13151,7 @@
 //.. //--       delta = dis_op2_E_G ( sorb, True, SBB, True, 1, delta, "sbb" );
 //.. //--       break;
    case 0x1B: /* SBB Ev,Gv */
+      if (haveF2orF3(pfx)) goto decode_failure;
       delta = dis_op2_E_G ( pfx, True, Iop_Sub8, True, sz, delta, "sbb" );
       break;
 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to