Fixed FXSAVE/FXRSTOR exceptions order

This commit is contained in:
Stanislav Shwartsman 2010-12-19 21:07:46 +00:00
parent 4a85a8680e
commit f2355a8249
2 changed files with 11 additions and 16 deletions

View File

@ -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
@ -53,7 +53,7 @@ static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f10M[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 },
/* F2 */ { BxArithDstRM, BX_IA_MOVSD_VsdWsdR }
};

View File

@ -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
@ -159,14 +159,11 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::FXSAVE(bxInstruction_c *i)
BX_DEBUG(("FXSAVE: save FPU/MMX/SSE state"));
if (bx_cpuid_support_mmx())
{
if(BX_CPU_THIS_PTR cr0.get_TS())
exception(BX_NM_EXCEPTION, 0);
if(BX_CPU_THIS_PTR cr0.get_EM())
exception(BX_UD_EXCEPTION, 0);
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);
xmm.xmm16u(0) = BX_CPU_THIS_PTR the_i387.get_control_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"));
if (bx_cpuid_support_mmx()) {
if(BX_CPU_THIS_PTR cr0.get_TS())
exception(BX_NM_EXCEPTION, 0);
if(BX_CPU_THIS_PTR cr0.get_EM())
exception(BX_UD_EXCEPTION, 0);
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);
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));