mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 20:50:29 +00:00
[FAST486]
Check for division by zero, and generate the appropriate exception. svn path=/branches/ntvdm/; revision=61204
This commit is contained in:
parent
e7a6deb93f
commit
2064d10bad
1 changed files with 36 additions and 4 deletions
|
@ -1012,8 +1012,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF6)
|
||||||
/* DIV */
|
/* DIV */
|
||||||
case 6:
|
case 6:
|
||||||
{
|
{
|
||||||
UCHAR Quotient = State->GeneralRegs[FAST486_REG_EAX].LowWord / Value;
|
UCHAR Quotient, Remainder;
|
||||||
UCHAR Remainder = State->GeneralRegs[FAST486_REG_EAX].LowWord % Value;
|
|
||||||
|
if (Value == 0)
|
||||||
|
{
|
||||||
|
/* Divide error */
|
||||||
|
Fast486Exception(State, FAST486_EXCEPTION_DE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Quotient = State->GeneralRegs[FAST486_REG_EAX].LowWord / Value;
|
||||||
|
Remainder = State->GeneralRegs[FAST486_REG_EAX].LowWord % Value;
|
||||||
|
|
||||||
/* Write back the results */
|
/* Write back the results */
|
||||||
State->GeneralRegs[FAST486_REG_EAX].LowByte = Quotient;
|
State->GeneralRegs[FAST486_REG_EAX].LowByte = Quotient;
|
||||||
|
@ -1025,8 +1034,17 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF6)
|
||||||
/* IDIV */
|
/* IDIV */
|
||||||
case 7:
|
case 7:
|
||||||
{
|
{
|
||||||
CHAR Quotient = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord / (CHAR)Value;
|
CHAR Quotient, Remainder;
|
||||||
CHAR Remainder = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord % (CHAR)Value;
|
|
||||||
|
if (Value == 0)
|
||||||
|
{
|
||||||
|
/* Divide error */
|
||||||
|
Fast486Exception(State, FAST486_EXCEPTION_DE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Quotient = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord / (CHAR)Value;
|
||||||
|
Remainder = (SHORT)State->GeneralRegs[FAST486_REG_EAX].LowWord % (CHAR)Value;
|
||||||
|
|
||||||
/* Write back the results */
|
/* Write back the results */
|
||||||
State->GeneralRegs[FAST486_REG_EAX].LowByte = (UCHAR)Quotient;
|
State->GeneralRegs[FAST486_REG_EAX].LowByte = (UCHAR)Quotient;
|
||||||
|
@ -1225,6 +1243,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF7)
|
||||||
/* DIV */
|
/* DIV */
|
||||||
case 6:
|
case 6:
|
||||||
{
|
{
|
||||||
|
if (Value == 0)
|
||||||
|
{
|
||||||
|
/* Divide error */
|
||||||
|
Fast486Exception(State, FAST486_EXCEPTION_DE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (OperandSize)
|
if (OperandSize)
|
||||||
{
|
{
|
||||||
ULONGLONG Dividend = (ULONGLONG)State->GeneralRegs[FAST486_REG_EAX].Long
|
ULONGLONG Dividend = (ULONGLONG)State->GeneralRegs[FAST486_REG_EAX].Long
|
||||||
|
@ -1254,6 +1279,13 @@ FAST486_OPCODE_HANDLER(Fast486OpcodeGroupF7)
|
||||||
/* IDIV */
|
/* IDIV */
|
||||||
case 7:
|
case 7:
|
||||||
{
|
{
|
||||||
|
if (Value == 0)
|
||||||
|
{
|
||||||
|
/* Divide error */
|
||||||
|
Fast486Exception(State, FAST486_EXCEPTION_DE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (OperandSize)
|
if (OperandSize)
|
||||||
{
|
{
|
||||||
LONGLONG Dividend = (LONGLONG)State->GeneralRegs[FAST486_REG_EAX].Long
|
LONGLONG Dividend = (LONGLONG)State->GeneralRegs[FAST486_REG_EAX].Long
|
||||||
|
|
Loading…
Reference in a new issue