Fixed FXSAVE/FXRSTOR exceptions order
This commit is contained in:
parent
4a85a8680e
commit
f2355a8249
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: fetchdecode_sse.h,v 1.12 2010-05-23 19:17:41 sshwarts Exp $
|
// $Id: fetchdecode_sse.h,v 1.13 2010-12-19 21:07:46 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (c) 2005-2010 Stanislav Shwartsman
|
// Copyright (c) 2005-2010 Stanislav Shwartsman
|
||||||
@ -53,7 +53,7 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f10M[3] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f11R[3] = {
|
static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f11R[3] = {
|
||||||
/* 66 */ { 0, BX_IA_MOVUPD_WpdVpdR },
|
/* 66 */ { BxArithDstRM, BX_IA_MOVUPD_VpdWpdR },
|
||||||
/* F3 */ { BxArithDstRM, BX_IA_MOVSS_VssWssR },
|
/* F3 */ { BxArithDstRM, BX_IA_MOVSS_VssWssR },
|
||||||
/* F2 */ { BxArithDstRM, BX_IA_MOVSD_VsdWsdR }
|
/* F2 */ { BxArithDstRM, BX_IA_MOVSD_VsdWsdR }
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: sse_move.cc,v 1.122 2010-12-18 11:58:16 sshwarts Exp $
|
// $Id: sse_move.cc,v 1.123 2010-12-19 21:07:46 sshwarts Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (c) 2003-2009 Stanislav Shwartsman
|
// Copyright (c) 2003-2009 Stanislav Shwartsman
|
||||||
@ -159,14 +159,11 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::FXSAVE(bxInstruction_c *i)
|
|||||||
|
|
||||||
BX_DEBUG(("FXSAVE: save FPU/MMX/SSE state"));
|
BX_DEBUG(("FXSAVE: save FPU/MMX/SSE state"));
|
||||||
|
|
||||||
if (bx_cpuid_support_mmx())
|
if(BX_CPU_THIS_PTR cr0.get_EM())
|
||||||
{
|
exception(BX_UD_EXCEPTION, 0);
|
||||||
if(BX_CPU_THIS_PTR cr0.get_TS())
|
|
||||||
exception(BX_NM_EXCEPTION, 0);
|
|
||||||
|
|
||||||
if(BX_CPU_THIS_PTR cr0.get_EM())
|
if(BX_CPU_THIS_PTR cr0.get_TS())
|
||||||
exception(BX_UD_EXCEPTION, 0);
|
exception(BX_NM_EXCEPTION, 0);
|
||||||
}
|
|
||||||
|
|
||||||
xmm.xmm16u(0) = BX_CPU_THIS_PTR the_i387.get_control_word();
|
xmm.xmm16u(0) = BX_CPU_THIS_PTR the_i387.get_control_word();
|
||||||
xmm.xmm16u(1) = BX_CPU_THIS_PTR the_i387.get_status_word();
|
xmm.xmm16u(1) = BX_CPU_THIS_PTR the_i387.get_status_word();
|
||||||
@ -281,13 +278,11 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::FXRSTOR(bxInstruction_c *i)
|
|||||||
|
|
||||||
BX_DEBUG(("FXRSTOR: restore FPU/MMX/SSE state"));
|
BX_DEBUG(("FXRSTOR: restore FPU/MMX/SSE state"));
|
||||||
|
|
||||||
if (bx_cpuid_support_mmx()) {
|
if(BX_CPU_THIS_PTR cr0.get_EM())
|
||||||
if(BX_CPU_THIS_PTR cr0.get_TS())
|
exception(BX_UD_EXCEPTION, 0);
|
||||||
exception(BX_NM_EXCEPTION, 0);
|
|
||||||
|
|
||||||
if(BX_CPU_THIS_PTR cr0.get_EM())
|
if(BX_CPU_THIS_PTR cr0.get_TS())
|
||||||
exception(BX_UD_EXCEPTION, 0);
|
exception(BX_NM_EXCEPTION, 0);
|
||||||
}
|
|
||||||
|
|
||||||
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
|
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user