Minimize diff with VMX support branch

This commit is contained in:
Stanislav Shwartsman 2009-01-23 09:26:24 +00:00
parent 809449c797
commit 62005d4fd9
6 changed files with 110 additions and 88 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.h,v 1.560 2009-01-21 22:09:59 sshwarts Exp $
// $Id: cpu.h,v 1.561 2009-01-23 09:26:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -261,6 +261,12 @@
#endif // defined(NEED_CPU_REG_SHORTCUTS)
struct ExceptionInfo {
unsigned exception_type;
unsigned exception_class;
bx_bool push_error;
};
#define BX_DE_EXCEPTION 0 // Divide Error (fault)
#define BX_DB_EXCEPTION 1 // Debug (fault/trap)
#define BX_BP_EXCEPTION 3 // Breakpoint (trap)
@ -1320,6 +1326,7 @@ public: // for now...
BX_SMF void LAR_GvEw(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF void LSL_GvEw(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF void CLTS(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF void INVD(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF void WBINVD(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF void CLFLUSH(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
@ -3146,7 +3153,7 @@ public: // for now...
BX_SMF Bit32u force_flags(void);
BX_SMF Bit32u read_eflags(void) { return BX_CPU_THIS_PTR force_flags(); }
BX_SMF bx_bool allow_io(Bit16u addr, unsigned len);
BX_SMF bx_bool allow_io(bxInstruction_c *i, Bit16u addr, unsigned len) BX_CPP_AttrRegparmN(3);
BX_SMF void parse_selector(Bit16u raw_selector, bx_selector_t *selector) BX_CPP_AttrRegparmN(2);
BX_SMF void parse_descriptor(Bit32u dword1, Bit32u dword2, bx_descriptor_t *temp) BX_CPP_AttrRegparmN(3);
BX_SMF Bit8u ar_byte(const bx_descriptor_t *d) BX_CPP_AttrRegparmN(1);

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: exception.cc,v 1.131 2009-01-21 22:09:59 sshwarts Exp $
// $Id: exception.cc,v 1.132 2009-01-23 09:26:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -822,49 +822,44 @@ void BX_CPU_C::interrupt(Bit8u vector, unsigned type, bx_bool push_error, Bit16u
#endif
{
if(real_mode()) {
real_mode_int(vector, is_INT, push_error, error_code);
real_mode_int(vector, is_INT, push_error, error_code);
}
else {
protected_mode_int(vector, is_INT, push_error, error_code);
protected_mode_int(vector, is_INT, push_error, error_code);
}
}
}
struct ExceptionInfo exceptions_info[BX_CPU_HANDLED_EXCEPTIONS+1] = {
/* DE */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 0 },
/* DB */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 }, // NMI
/* BP */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_TRAP, 0 },
/* OF */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_TRAP, 0 },
/* BR */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* UD */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* NM */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* DF */ { BX_ET_DOUBLE_FAULT, BX_EXCEPTION_CLASS_ABORT, 1 },
// coprocessor segment overrun (286,386 only)
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_ABORT, 0 },
/* TS */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* NP */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* SS */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* GP */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* PF */ { BX_ET_PAGE_FAULT, BX_EXCEPTION_CLASS_FAULT, 1 },
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 }, // reserved
/* MF */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* AC */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 1 },
/* MC */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_ABORT, 0 },
/* XM */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 } // default
};
// vector: 0..255: vector in IDT
// error_code: if exception generates and error, push this error code
// trap: override exception class to TRAP
void BX_CPU_C::exception(unsigned vector, Bit16u error_code, unsigned unused)
{
struct ExceptionInfo {
unsigned exception_type;
unsigned exception_class;
bx_bool push_error;
};
static struct ExceptionInfo exceptions_info[BX_CPU_HANDLED_EXCEPTIONS] = {
/* DE */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 0 },
/* DB */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 }, // NMI
/* BP */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_TRAP, 0 },
/* OF */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_TRAP, 0 },
/* BR */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* UD */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* NM */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* DF */ { BX_ET_DOUBLE_FAULT, BX_EXCEPTION_CLASS_ABORT, 1 },
// coprocessor segment overrun (286,386 only)
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_ABORT, 0 },
/* TS */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* NP */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* SS */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* GP */ { BX_ET_CONTRIBUTORY, BX_EXCEPTION_CLASS_FAULT, 1 },
/* PF */ { BX_ET_PAGE_FAULT, BX_EXCEPTION_CLASS_FAULT, 1 },
/* -- */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 }, // reserved
/* MF */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 },
/* AC */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 1 },
/* MC */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_ABORT, 0 },
/* XM */ { BX_ET_BENIGN, BX_EXCEPTION_CLASS_FAULT, 0 }
};
BX_INSTR_EXCEPTION(BX_CPU_ID, vector, error_code);
#if BX_DEBUGGER
@ -882,6 +877,24 @@ void BX_CPU_C::exception(unsigned vector, Bit16u error_code, unsigned unused)
RSP = BX_CPU_THIS_PTR save_esp;
}
unsigned exception_type = 0;
unsigned exception_class = BX_EXCEPTION_CLASS_FAULT;
bx_bool push_error = 0;
if (vector < BX_CPU_HANDLED_EXCEPTIONS) {
push_error = exceptions_info[vector].push_error;
exception_class = exceptions_info[vector].exception_class;
exception_type = exceptions_info[vector].exception_type;
}
else {
BX_PANIC(("exception(%u): bad vector", vector));
}
if (vector != BX_PF_EXCEPTION && exception_type != BX_DF_EXCEPTION) {
// Page faults have different format
error_code = (error_code & 0xfffe) | BX_CPU_THIS_PTR EXT;
}
if (BX_CPU_THIS_PTR errorno > 0) {
if (BX_CPU_THIS_PTR errorno > 2 || BX_CPU_THIS_PTR curr_exception == BX_ET_DOUBLE_FAULT) {
debug(BX_CPU_THIS_PTR prev_rip); // print debug information to the log
@ -902,19 +915,6 @@ void BX_CPU_C::exception(unsigned vector, Bit16u error_code, unsigned unused)
}
}
unsigned exception_type = 0;
unsigned exception_class = BX_EXCEPTION_CLASS_FAULT;
bx_bool push_error = 0;
if (vector < BX_CPU_HANDLED_EXCEPTIONS) {
push_error = exceptions_info[vector].push_error;
exception_class = exceptions_info[vector].exception_class;
exception_type = exceptions_info[vector].exception_type;
}
else {
BX_PANIC(("exception(%u): bad vector", vector));
}
// note: fault-class exceptions _except_ #DB set RF in
// eflags image.
if (exception_class == BX_EXCEPTION_CLASS_FAULT)
@ -931,10 +931,6 @@ void BX_CPU_C::exception(unsigned vector, Bit16u error_code, unsigned unused)
if (vector == BX_DB_EXCEPTION)
BX_CPU_THIS_PTR dr7 &= ~0x00002000;
if (exception_type != BX_ET_PAGE_FAULT) {
// Page faults have different format
error_code = (error_code & 0xfffe) | BX_CPU_THIS_PTR EXT;
}
BX_CPU_THIS_PTR EXT = 1;
/* if we've already had 1st exception, see if 2nd causes a

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: ia_opcodes.h,v 1.22 2009-01-16 18:18:58 sshwarts Exp $
// $Id: ia_opcodes.h,v 1.23 2009-01-23 09:26:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2008 Stanislav Shwartsman
@ -293,7 +293,7 @@ bx_define_opcode(BX_IA_INT_Ib, &BX_CPU_C::INT_Ib, NULL)
bx_define_opcode(BX_IA_INT1, &BX_CPU_C::INT1, NULL)
bx_define_opcode(BX_IA_INT3, &BX_CPU_C::INT3, NULL)
bx_define_opcode(BX_IA_INTO, &BX_CPU_C::INTO, NULL)
bx_define_opcode(BX_IA_INVD, &BX_CPU_C::WBINVD, NULL)
bx_define_opcode(BX_IA_INVD, &BX_CPU_C::INVD, NULL)
bx_define_opcode(BX_IA_INVLPG, &BX_CPU_C::INVLPG, NULL)
bx_define_opcode(BX_IA_IRET16, &BX_CPU_C::IRET16, NULL)
bx_define_opcode(BX_IA_IRET32, &BX_CPU_C::IRET32, NULL)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: io.cc,v 1.73 2009-01-16 18:18:58 sshwarts Exp $
// $Id: io.cc,v 1.74 2009-01-23 09:26:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -202,7 +202,7 @@ Bit32u BX_CPU_C::FastRepOUTSW(bxInstruction_c *i, unsigned srcSeg, bx_address sr
void BX_CPP_AttrRegparmN(1) BX_CPU_C::REP_INSB_YbDX(bxInstruction_c *i)
{
if (! BX_CPU_THIS_PTR allow_io(DX, 1)) {
if (! allow_io(i, DX, 1)) {
BX_DEBUG(("INSB_YbDX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -279,7 +279,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSB64_YbDX(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::REP_INSW_YwDX(bxInstruction_c *i)
{
if (! BX_CPU_THIS_PTR allow_io(DX, 2)) {
if (! allow_io(i, DX, 2)) {
BX_DEBUG(("INSW_YwDX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -388,7 +388,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSW64_YwDX(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::REP_INSD_YdDX(bxInstruction_c *i)
{
if (! BX_CPU_THIS_PTR allow_io(DX, 4)) {
if (! allow_io(i, DX, 4)) {
BX_DEBUG(("INSD_YdDX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -466,7 +466,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSD64_YdDX(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::REP_OUTSB_DXXb(bxInstruction_c *i)
{
if (! BX_CPU_THIS_PTR allow_io(DX, 1)) {
if (! allow_io(i, DX, 1)) {
BX_DEBUG(("OUTSB_DXXb: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -528,7 +528,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUTSB64_DXXb(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::REP_OUTSW_DXXw(bxInstruction_c *i)
{
if (! BX_CPU_THIS_PTR allow_io(DX, 2)) {
if (! allow_io(i, DX, 2)) {
BX_DEBUG(("OUTSW_DXXw: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -617,7 +617,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUTSW64_DXXw(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::REP_OUTSD_DXXd(bxInstruction_c *i)
{
if (! BX_CPU_THIS_PTR allow_io(DX, 4)) {
if (! allow_io(i, DX, 4)) {
BX_DEBUG(("OUTSD_DXXd: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -685,7 +685,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::IN_ALIb(bxInstruction_c *i)
{
unsigned port = i->Ib();
if (! BX_CPU_THIS_PTR allow_io(port, 1)) {
if (! allow_io(i, port, 1)) {
BX_DEBUG(("IN_ALIb: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -697,7 +697,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::IN_AXIb(bxInstruction_c *i)
{
unsigned port = i->Ib();
if (! BX_CPU_THIS_PTR allow_io(port, 2)) {
if (! allow_io(i, port, 2)) {
BX_DEBUG(("IN_AXIb: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -709,7 +709,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::IN_EAXIb(bxInstruction_c *i)
{
unsigned port = i->Ib();
if (! BX_CPU_THIS_PTR allow_io(port, 4)) {
if (! allow_io(i, port, 4)) {
BX_DEBUG(("IN_EAXIb: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -721,7 +721,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_IbAL(bxInstruction_c *i)
{
unsigned port = i->Ib();
if (! BX_CPU_THIS_PTR allow_io(port, 1)) {
if (! allow_io(i, port, 1)) {
BX_DEBUG(("OUT_IbAL: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -733,7 +733,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_IbAX(bxInstruction_c *i)
{
unsigned port = i->Ib();
if (! BX_CPU_THIS_PTR allow_io(port, 2)) {
if (! allow_io(i, port, 2)) {
BX_DEBUG(("OUT_IbAX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -745,7 +745,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_IbEAX(bxInstruction_c *i)
{
unsigned port = i->Ib();
if (! BX_CPU_THIS_PTR allow_io(port, 4)) {
if (! allow_io(i, port, 4)) {
BX_DEBUG(("OUT_IbEAX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -757,7 +757,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::IN_ALDX(bxInstruction_c *i)
{
unsigned port = DX;
if (! BX_CPU_THIS_PTR allow_io(port, 1)) {
if (! allow_io(i, port, 1)) {
BX_DEBUG(("IN_ALDX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -769,7 +769,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::IN_AXDX(bxInstruction_c *i)
{
unsigned port = DX;
if (! BX_CPU_THIS_PTR allow_io(port, 2)) {
if (! allow_io(i, port, 2)) {
BX_DEBUG(("IN_AXDX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -781,7 +781,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::IN_EAXDX(bxInstruction_c *i)
{
unsigned port = DX;
if (! BX_CPU_THIS_PTR allow_io(port, 4)) {
if (! allow_io(i, port, 4)) {
BX_DEBUG(("IN_EAXDX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -793,7 +793,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_DXAL(bxInstruction_c *i)
{
unsigned port = DX;
if (! BX_CPU_THIS_PTR allow_io(port, 1)) {
if (! allow_io(i, port, 1)) {
BX_DEBUG(("OUT_DXAL: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -805,7 +805,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_DXAX(bxInstruction_c *i)
{
unsigned port = DX;
if (! BX_CPU_THIS_PTR allow_io(port, 2)) {
if (! allow_io(i, port, 2)) {
BX_DEBUG(("OUT_DXAX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -817,7 +817,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_DXEAX(bxInstruction_c *i)
{
unsigned port = DX;
if (! BX_CPU_THIS_PTR allow_io(port, 4)) {
if (! allow_io(i, port, 4)) {
BX_DEBUG(("OUT_DXEAX: I/O access not allowed !"));
exception(BX_GP_EXCEPTION, 0, 0);
}
@ -825,7 +825,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::OUT_DXEAX(bxInstruction_c *i)
BX_OUTP(port, EAX, 4);
}
bx_bool BX_CPU_C::allow_io(Bit16u port, unsigned len)
bx_bool BX_CPU_C::allow_io(bxInstruction_c *i, Bit16u port, unsigned len)
{
/* If CPL <= IOPL, then all IO portesses are accessible.
* Otherwise, must check the IO permission map on >286.

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: proc_ctrl.cc,v 1.275 2009-01-21 22:09:59 sshwarts Exp $
// $Id: proc_ctrl.cc,v 1.276 2009-01-23 09:26:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -137,8 +137,31 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::CLTS(bxInstruction_c *i)
BX_CPU_THIS_PTR cr0.set_TS(0);
}
/* 0F 08 INVD */
/* 0F 09 WBINVD */
/* 0F 08 */
void BX_CPP_AttrRegparmN(1) BX_CPU_C::INVD(bxInstruction_c *i)
{
#if BX_CPU_LEVEL >= 4
if (!real_mode() && CPL!=0) {
BX_ERROR(("INVD: priveledge check failed, generate #GP(0)"));
exception(BX_GP_EXCEPTION, 0, 0);
}
invalidate_prefetch_q();
BX_DEBUG(("INVD: Flush internal caches !"));
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_INVD);
#if BX_SUPPORT_ICACHE
flushICaches();
#endif
#else
BX_INFO(("INVD: required 486 support, use --enable-cpu-level=4 option"));
exception(BX_UD_EXCEPTION, 0, 0);
#endif
}
/* 0F 09 */
void BX_CPP_AttrRegparmN(1) BX_CPU_C::WBINVD(bxInstruction_c *i)
{
#if BX_CPU_LEVEL >= 4
@ -149,20 +172,15 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::WBINVD(bxInstruction_c *i)
invalidate_prefetch_q();
BX_DEBUG(("INVD/WBINVD: Flush internal caches !"));
#if BX_INSTRUMENTATION
if (i->b1() == 0x08)
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_INVD);
else
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_WBINVD);
#endif
BX_DEBUG(("WBINVD: Flush internal caches !"));
BX_INSTR_CACHE_CNTRL(BX_CPU_ID, BX_INSTR_WBINVD);
#if BX_SUPPORT_ICACHE
flushICaches();
#endif
#else
BX_INFO(("INVD/WBINVD: required 486 support, use --enable-cpu-level=4 option"));
BX_INFO(("WBINVD: required 486 support, use --enable-cpu-level=4 option"));
exception(BX_UD_EXCEPTION, 0, 0);
#endif
}

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: soft_int.cc,v 1.47 2009-01-20 21:28:43 sshwarts Exp $
// $Id: soft_int.cc,v 1.48 2009-01-23 09:26:24 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -166,11 +166,12 @@ done:
void BX_CPP_AttrRegparmN(1) BX_CPU_C::INTO(bxInstruction_c *i)
{
if (get_OF()) {
#if BX_DEBUGGER
BX_CPU_THIS_PTR show_flag |= Flag_softint;
BX_CPU_THIS_PTR show_flag |= Flag_softint;
#endif
if (get_OF()) {
BX_CPU_THIS_PTR speculative_rsp = 1;
BX_CPU_THIS_PTR prev_rsp = RSP;