mirror of
https://github.com/reactos/reactos.git
synced 2025-02-23 17:05:46 +00:00
[SOFT386]
Fix typecasts to make sure the value is sign-extended. svn path=/branches/ntvdm/; revision=60694
This commit is contained in:
parent
25445ea35f
commit
fb5036618e
1 changed files with 7 additions and 7 deletions
|
@ -988,7 +988,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupD3)
|
|||
|
||||
SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF6)
|
||||
{
|
||||
UCHAR Dummy, Value;
|
||||
UCHAR Dummy, Value = 0;
|
||||
SOFT386_MOD_REG_RM ModRegRm;
|
||||
BOOLEAN AddressSize = State->SegmentRegs[SOFT386_REG_CS].Size;
|
||||
|
||||
|
@ -1081,7 +1081,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF6)
|
|||
/* IMUL */
|
||||
case 5:
|
||||
{
|
||||
SHORT Result = (SHORT)Value * (SHORT)State->GeneralRegs[SOFT386_REG_EAX].LowByte;
|
||||
SHORT Result = (SHORT)((CHAR)Value) * (SHORT)((CHAR)State->GeneralRegs[SOFT386_REG_EAX].LowByte);
|
||||
|
||||
/* Update the flags */
|
||||
State->Flags.Cf = State->Flags.Of =
|
||||
|
@ -1125,7 +1125,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF6)
|
|||
|
||||
SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF7)
|
||||
{
|
||||
ULONG Dummy, Value, SignFlag;
|
||||
ULONG Dummy, Value = 0, SignFlag;
|
||||
SOFT386_MOD_REG_RM ModRegRm;
|
||||
BOOLEAN OperandSize, AddressSize;
|
||||
|
||||
|
@ -1292,7 +1292,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF7)
|
|||
{
|
||||
if (OperandSize)
|
||||
{
|
||||
LONGLONG Result = (LONGLONG)Value * (LONGLONG)State->GeneralRegs[SOFT386_REG_EAX].Long;
|
||||
LONGLONG Result = (LONGLONG)((LONG)Value) * (LONGLONG)((LONG)State->GeneralRegs[SOFT386_REG_EAX].Long);
|
||||
|
||||
/* Update the flags */
|
||||
State->Flags.Cf = State->Flags.Of =
|
||||
|
@ -1304,7 +1304,7 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF7)
|
|||
}
|
||||
else
|
||||
{
|
||||
LONG Result = (LONG)Value * (LONG)State->GeneralRegs[SOFT386_REG_EAX].LowWord;
|
||||
LONG Result = (LONG)Value * (LONG)((SHORT)State->GeneralRegs[SOFT386_REG_EAX].LowWord);
|
||||
|
||||
/* Update the flags */
|
||||
State->Flags.Cf = State->Flags.Of =
|
||||
|
@ -1365,8 +1365,8 @@ SOFT386_OPCODE_HANDLER(Soft386OpcodeGroupF7)
|
|||
{
|
||||
LONG Dividend = (LONG)State->GeneralRegs[SOFT386_REG_EAX].LowWord
|
||||
| ((LONG)State->GeneralRegs[SOFT386_REG_EDX].LowWord << 16);
|
||||
SHORT Quotient = Dividend / (SHORT)Value;
|
||||
SHORT Remainder = Dividend % (SHORT)Value;
|
||||
SHORT Quotient = Dividend / (SHORT)LOWORD(Value);
|
||||
SHORT Remainder = Dividend % (SHORT)LOWORD(Value);
|
||||
|
||||
/* Write back the results */
|
||||
State->GeneralRegs[SOFT386_REG_EAX].LowWord = (USHORT)Quotient;
|
||||
|
|
Loading…
Reference in a new issue