@@ -3548,6 +3548,8 @@ x86_emulate(
case 0xf6 ... 0xf7: /* Grp3 */
switch ( modrm_reg & 7 )
{
+ unsigned long u[2], v;
+
case 0 ... 1: /* test */
goto test;
case 2: /* not */
@@ -3586,15 +3588,15 @@ x86_emulate(
_regs.edx = (uint32_t)(dst.val >> 32);
break;
#endif
- default: {
- unsigned long m[2] = { src.val, dst.val };
- if ( mul_dbl(m) )
+ default:
+ u[0] = src.val;
+ u[1] = dst.val;
+ if ( mul_dbl(u) )
_regs.eflags |= EFLG_OF|EFLG_CF;
- _regs.edx = m[1];
- dst.val = m[0];
+ _regs.edx = u[1];
+ dst.val = u[0];
break;
}
- }
break;
case 5: /* imul */
dst.type = OP_REG;
@@ -3630,20 +3632,18 @@ x86_emulate(
_regs.edx = (uint32_t)(dst.val >> 32);
break;
#endif
- default: {
- unsigned long m[2] = { src.val, dst.val };
- if ( imul_dbl(m) )
+ default:
+ u[0] = src.val;
+ u[1] = dst.val;
+ if ( imul_dbl(u) )
_regs.eflags |= EFLG_OF|EFLG_CF;
if ( b > 0x6b )
- _regs.edx = m[1];
- dst.val = m[0];
+ _regs.edx = u[1];
+ dst.val = u[0];
break;
}
- }
break;
- case 6: /* div */ {
- unsigned long u[2], v;
-
+ case 6: /* div */
dst.type = OP_REG;
dst.reg = (unsigned long *)&_regs.eax;
switch ( dst.bytes = src.bytes )
@@ -3690,10 +3690,7 @@ x86_emulate(
break;
}
break;
- }
- case 7: /* idiv */ {
- unsigned long u[2], v;
-
+ case 7: /* idiv */
dst.type = OP_REG;
dst.reg = (unsigned long *)&_regs.eax;
switch ( dst.bytes = src.bytes )
@@ -3741,7 +3738,6 @@ x86_emulate(
}
break;
}
- }
break;
case 0xf8: /* clc */