|
From: <sv...@va...> - 2005-10-03 02:07:44
|
Author: sewardj
Date: 2005-10-03 03:07:08 +0100 (Mon, 03 Oct 2005)
New Revision: 1406
Log:
Fix various adc/sbb instruction variants.
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2005-10-03 01:02:40 UTC (rev 1405)
+++ trunk/priv/guest-x86/toIR.c 2005-10-03 02:07:08 UTC (rev 1406)
@@ -1976,6 +1976,10 @@
helper_ADC( size, dst1, dst0, src );
}
else
+ if (op8 =3D=3D Iop_Sub8 && carrying) {
+ helper_SBB( size, dst1, dst0, src );
+ }
+ else
vpanic("dis_op_imm_A(x86,guest)");
=20
if (keep)
@@ -10810,13 +10814,13 @@
delta =3D dis_op_imm_A( sz, True, Iop_Add8, True, delta, "adc" );
break;
=20
-//-- case 0x1C: /* SBB Ib, AL */
-//-- delta =3D dis_op_imm_A( 1, SBB, True, delta, "sbb" );
-//-- break;
-//-- case 0x1D: /* SBB Iv, eAX */
-//-- delta =3D dis_op_imm_A( sz, SBB, True, delta, "sbb" );
-//-- break;
-//--=20
+ case 0x1C: /* SBB Ib, AL */
+ delta =3D dis_op_imm_A( 1, True, Iop_Sub8, True, delta, "sbb" );
+ break;
+ case 0x1D: /* SBB Iv, eAX */
+ delta =3D dis_op_imm_A( sz, True, Iop_Sub8, True, delta, "sbb" );
+ break;
+
case 0x24: /* AND Ib, AL */
delta =3D dis_op_imm_A( 1, False, Iop_And8, True, delta, "and" );
break;
@@ -10867,17 +10871,17 @@
case 0x0B: /* OR Ev,Gv */
delta =3D dis_op2_E_G ( sorb, False, Iop_Or8, True, sz, delta, "or=
" );
break;
-//--=20
-//-- case 0x12: /* ADC Eb,Gb */
-//-- delta =3D dis_op2_E_G ( sorb, True, ADC, True, 1, delta, "adc=
" );
-//-- break;
+
+ case 0x12: /* ADC Eb,Gb */
+ delta =3D dis_op2_E_G ( sorb, True, Iop_Add8, True, 1, delta, "adc=
" );
+ break;
case 0x13: /* ADC Ev,Gv */
delta =3D dis_op2_E_G ( sorb, True, Iop_Add8, True, sz, delta, "ad=
c" );
break;
=20
-//-- case 0x1A: /* SBB Eb,Gb */
-//-- delta =3D dis_op2_E_G ( sorb, True, SBB, True, 1, delta, "sbb=
" );
-//-- break;
+ case 0x1A: /* SBB Eb,Gb */
+ delta =3D dis_op2_E_G ( sorb, True, Iop_Sub8, True, 1, delta, "sbb=
" );
+ break;
case 0x1B: /* SBB Ev,Gv */
delta =3D dis_op2_E_G ( sorb, True, Iop_Sub8, True, sz, delta, "sb=
b" );
break;
|