]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix various adc/sbb instruction variants.
authorJulian Seward <jseward@acm.org>
Mon, 3 Oct 2005 02:07:08 +0000 (02:07 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 3 Oct 2005 02:07:08 +0000 (02:07 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1406

VEX/priv/guest-x86/toIR.c

index e6ec7851fd89509a6cf29be9221adf0c4f228d6a..e966fca5b92ae22a41dcbccc21065fc3f57a4ffd 100644 (file)
@@ -1975,6 +1975,10 @@ UInt dis_op_imm_A ( Int    size,
    if (op8 == Iop_Add8 && carrying) {
       helper_ADC( size, dst1, dst0, src );
    }
+   else
+   if (op8 == Iop_Sub8 && carrying) {
+      helper_SBB( size, dst1, dst0, src );
+   }
    else
       vpanic("dis_op_imm_A(x86,guest)");
 
@@ -10810,13 +10814,13 @@ DisResult disInstr_X86_WRK (
       delta = dis_op_imm_A( sz, True, Iop_Add8, True, delta, "adc" );
       break;
 
-//--    case 0x1C: /* SBB Ib, AL */
-//--       delta = dis_op_imm_A( 1, SBB, True, delta, "sbb" );
-//--       break;
-//--    case 0x1D: /* SBB Iv, eAX */
-//--       delta = dis_op_imm_A( sz, SBB, True, delta, "sbb" );
-//--       break;
-//-- 
+   case 0x1C: /* SBB Ib, AL */
+      delta = dis_op_imm_A( 1, True, Iop_Sub8, True, delta, "sbb" );
+      break;
+   case 0x1D: /* SBB Iv, eAX */
+      delta = dis_op_imm_A( sz, True, Iop_Sub8, True, delta, "sbb" );
+      break;
+
    case 0x24: /* AND Ib, AL */
       delta = dis_op_imm_A(  1, False, Iop_And8, True, delta, "and" );
       break;
@@ -10867,17 +10871,17 @@ DisResult disInstr_X86_WRK (
    case 0x0B: /* OR Ev,Gv */
       delta = dis_op2_E_G ( sorb, 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 */
+      delta = dis_op2_E_G ( sorb, True, Iop_Add8, True, 1, delta, "adc" );
+      break;
    case 0x13: /* ADC Ev,Gv */
       delta = dis_op2_E_G ( sorb, True, Iop_Add8, True, sz, delta, "adc" );
       break;
 
-//--    case 0x1A: /* SBB Eb,Gb */
-//--       delta = dis_op2_E_G ( sorb, True, SBB, True, 1, delta, "sbb" );
-//--       break;
+   case 0x1A: /* SBB Eb,Gb */
+      delta = dis_op2_E_G ( sorb, True, Iop_Sub8, True, 1, delta, "sbb" );
+      break;
    case 0x1B: /* SBB Ev,Gv */
       delta = dis_op2_E_G ( sorb, True, Iop_Sub8, True, sz, delta, "sbb" );
       break;