[FAST486]

In rotate operations, the count is always masked with 0x1F, regardless
of the operand size.


svn path=/branches/ntvdm/; revision=60966
This commit is contained in:
Aleksandar Andrejevic 2013-11-12 19:25:50 +00:00
parent ac9f8a81e3
commit 2da0e38fbc
2 changed files with 8 additions and 14 deletions

View file

@ -637,8 +637,7 @@ FAST486_OPCODE_HANDLER(Fast486ExtOpcodeShld)
}
/* Normalize the count */
if (OperandSize) Count &= 0x1F;
else Count &= 0x0F;
Count &= 0x1F;
/* Do nothing if the count is zero */
if (Count == 0) return TRUE;
@ -840,8 +839,7 @@ FAST486_OPCODE_HANDLER(Fast486ExtOpcodeShrd)
}
/* Normalize the count */
if (OperandSize) Count &= 0x1F;
else Count &= 0x0F;
Count &= 0x1F;
/* Do nothing if the count is zero */
if (Count == 0) return TRUE;

View file

@ -163,16 +163,11 @@ Fast486RotateOperation(PFAST486_STATE State,
ULONG HighestBit = 1 << (Bits - 1);
ULONG Result;
if ((Operation != 2) && (Operation != 3))
{
/* Mask the count */
Count &= Bits - 1;
}
else
{
/* For RCL and RCR, the CF is included in the value */
Count %= Bits + 1;
}
/* Normalize the count */
Count &= 0x1F;
/* If the count is zero, do nothing */
if (Count == 0) goto SetFlags;
/* Check which operation is this */
switch (Operation)
@ -275,6 +270,7 @@ Fast486RotateOperation(PFAST486_STATE State,
}
}
SetFlags:
if (Operation >= 4)
{
/* Update ZF, SF and PF */