Fixed XSAVE decode in x86-64 mode
This commit is contained in:
parent
8f156c435d
commit
0ff68a2aa2
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: fetchdecode.cc,v 1.218 2008-10-06 17:50:06 sshwarts Exp $
|
||||
// $Id: fetchdecode.cc,v 1.219 2009-01-10 16:01:55 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -466,7 +466,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
|
||||
/* FF /wr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5wR },
|
||||
|
||||
/* 0F 00 /wr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 },
|
||||
/* 0F 01 /wr */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 01 /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 02 /wr */ { 0, BX_IA_LAR_GvEw },
|
||||
/* 0F 03 /wr */ { 0, BX_IA_LSL_GvEw },
|
||||
/* 0F 04 /wr */ { 0, BX_IA_ERROR },
|
||||
@ -1029,7 +1029,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo32R[512*2] = {
|
||||
/* FF /dr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfoG5dR },
|
||||
|
||||
/* 0F 00 /dr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 },
|
||||
/* 0F 01 /dr */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 01 /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 02 /dr */ { 0, BX_IA_LAR_GvEw },
|
||||
/* 0F 03 /dr */ { 0, BX_IA_LSL_GvEw },
|
||||
/* 0F 04 /dr */ { 0, BX_IA_ERROR },
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: fetchdecode.h,v 1.77 2008-09-16 18:28:53 sshwarts Exp $
|
||||
// $Id: fetchdecode.h,v 1.78 2009-01-10 16:01:55 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (c) 2005 Stanislav Shwartsman
|
||||
@ -3290,62 +3290,76 @@ static const BxOpcodeInfo_t BxOpcodeInfoG6[8] = {
|
||||
/* Group 7 */
|
||||
/* ******* */
|
||||
|
||||
// ----------------------------------------------------
|
||||
// MOD REG RM | non 64 bit mode | 64 bit mode
|
||||
// ----------------------------------------------------
|
||||
// MOD <> 11 7 --- | INVLPG | INVLPG
|
||||
// MOD == 11 7 0 | #UD | SWAPGS
|
||||
// MOD == 11 7 1 | RDTSCP | RDTSCP
|
||||
// MOD == 11 7 2-7 | #UD | #UD
|
||||
|
||||
static const BxOpcodeInfo_t opcodesGroupRmMONITOR[8] = {
|
||||
/* 0 */ { 0, BX_IA_MONITOR },
|
||||
/* 1 */ { BxTraceEnd, BX_IA_MWAIT },
|
||||
/* 2 */ { 0, BX_IA_ERROR },
|
||||
/* 3 */ { 0, BX_IA_ERROR },
|
||||
/* 4 */ { 0, BX_IA_ERROR },
|
||||
/* 5 */ { 0, BX_IA_ERROR },
|
||||
/* 6 */ { 0, BX_IA_ERROR },
|
||||
/* 7 */ { 0, BX_IA_ERROR }
|
||||
};
|
||||
|
||||
static const BxOpcodeInfo_t opcodesGroupRmXGETSET[8] = {
|
||||
/* 0 */ { 0, BX_IA_XGETBV },
|
||||
/* 1 */ { 0, BX_IA_XSETBV },
|
||||
/* 2 */ { 0, BX_IA_ERROR },
|
||||
/* 3 */ { 0, BX_IA_ERROR },
|
||||
/* 4 */ { 0, BX_IA_ERROR },
|
||||
/* 5 */ { 0, BX_IA_ERROR },
|
||||
/* 6 */ { 0, BX_IA_ERROR },
|
||||
/* 7 */ { 0, BX_IA_ERROR }
|
||||
};
|
||||
|
||||
static const BxOpcodeInfo_t BxOpcodeInfoG7R[64] = {
|
||||
/* 0F 01 C0 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C1 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C2 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C3 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C4 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C5 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C6 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C7 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 C8 */ { 0, BX_IA_MONITOR },
|
||||
/* 0F 01 C9 */ { BxTraceEnd, BX_IA_MWAIT },
|
||||
/* 0F 01 CA */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 CB */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 CC */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 CD */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 CE */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 CF */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D0 */ { 0, BX_IA_XGETBV },
|
||||
/* 0F 01 D1 */ { 0, BX_IA_XSETBV },
|
||||
/* 0F 01 D2 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D3 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D4 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D5 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D6 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D7 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D8 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 D9 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 DA */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 DB */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 DC */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 DD */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 DE */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 DF */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 E0 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E1 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E2 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E3 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E4 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E5 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E6 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E7 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 0F 01 E8 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 E9 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 EA */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 EB */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 EC */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 ED */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 EE */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 EF */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 F0 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F1 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F2 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F3 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F4 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F5 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 0F 01 F7 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
#if BX_SUPPORT_X86_64
|
||||
static const BxOpcodeInfo_t opcodesGroupRmINVLPG[8] = {
|
||||
/* 0 */ { 0, BX_IA_ERROR },
|
||||
/* 1 */ { 0, BX_IA_RDTSCP },
|
||||
/* 2 */ { 0, BX_IA_ERROR },
|
||||
/* 3 */ { 0, BX_IA_ERROR },
|
||||
/* 4 */ { 0, BX_IA_ERROR },
|
||||
/* 5 */ { 0, BX_IA_ERROR },
|
||||
/* 6 */ { 0, BX_IA_ERROR },
|
||||
/* 7 */ { 0, BX_IA_ERROR }
|
||||
};
|
||||
#endif
|
||||
|
||||
static const BxOpcodeInfo_t BxOpcodeInfoG7R[8] = {
|
||||
/* 0 */ { 0, BX_IA_ERROR },
|
||||
/* 1 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmMONITOR },
|
||||
/* 2 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmXGETSET },
|
||||
/* 3 */ { 0, BX_IA_ERROR },
|
||||
/* 4 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 5 */ { 0, BX_IA_ERROR },
|
||||
/* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
#if BX_SUPPORT_X86_64
|
||||
/* 7 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmINVLPG }
|
||||
/* 0F 01 F8 */ { 0, BX_IA_SWAPGS },
|
||||
/* 0F 01 F9 */ { 0, BX_IA_RDTSCP },
|
||||
#else
|
||||
/* 7 */ { 0, BX_IA_ERROR }
|
||||
/* 0F 01 F8 */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 F9 */ { 0, BX_IA_ERROR },
|
||||
#endif
|
||||
/* 0F 01 FA */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 FB */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 FC */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 FD */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 FE */ { 0, BX_IA_ERROR },
|
||||
/* 0F 01 FF */ { 0, BX_IA_ERROR }
|
||||
};
|
||||
|
||||
static const BxOpcodeInfo_t BxOpcodeInfoG7M[8] = {
|
||||
@ -3361,28 +3375,6 @@ static const BxOpcodeInfo_t BxOpcodeInfoG7M[8] = {
|
||||
};
|
||||
|
||||
#if BX_SUPPORT_X86_64
|
||||
static const BxOpcodeInfo_t opcodesGroup64RmINVLPG[8] = {
|
||||
/* 0 */ { 0, BX_IA_SWAPGS },
|
||||
/* 1 */ { 0, BX_IA_RDTSCP },
|
||||
/* 2 */ { 0, BX_IA_ERROR },
|
||||
/* 3 */ { 0, BX_IA_ERROR },
|
||||
/* 4 */ { 0, BX_IA_ERROR },
|
||||
/* 5 */ { 0, BX_IA_ERROR },
|
||||
/* 6 */ { 0, BX_IA_ERROR },
|
||||
/* 7 */ { 0, BX_IA_ERROR }
|
||||
};
|
||||
|
||||
static const BxOpcodeInfo_t BxOpcodeInfo64G7R[8] = {
|
||||
/* 0 */ { 0, BX_IA_ERROR },
|
||||
/* 1 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmMONITOR },
|
||||
/* 2 */ { 0, BX_IA_ERROR },
|
||||
/* 3 */ { 0, BX_IA_ERROR },
|
||||
/* 4 */ { 0, BX_IA_SMSW_EwR },
|
||||
/* 5 */ { 0, BX_IA_ERROR },
|
||||
/* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
|
||||
/* 7 */ { BxRMGroup, BX_IA_ERROR, opcodesGroup64RmINVLPG }
|
||||
};
|
||||
|
||||
static const BxOpcodeInfo_t BxOpcodeInfo64G7M[8] = {
|
||||
/* 0 */ { 0, BX_IA_SGDT64_Ms },
|
||||
/* 1 */ { 0, BX_IA_SIDT64_Ms },
|
||||
@ -3395,7 +3387,6 @@ static const BxOpcodeInfo_t BxOpcodeInfo64G7M[8] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* ******* */
|
||||
/* Group 8 */
|
||||
/* ******* */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: fetchdecode64.cc,v 1.220 2008-09-16 19:20:02 sshwarts Exp $
|
||||
// $Id: fetchdecode64.cc,v 1.221 2009-01-10 16:01:55 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -439,7 +439,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
|
||||
/* FF /wr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5wR },
|
||||
|
||||
/* 0F 00 /wr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 },
|
||||
/* 0F 01 /wr */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfo64G7R },
|
||||
/* 0F 01 /wr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 02 /wr */ { 0, BX_IA_LAR_GvEw },
|
||||
/* 0F 03 /wr */ { 0, BX_IA_LSL_GvEw },
|
||||
/* 0F 04 /wr */ { 0, BX_IA_ERROR },
|
||||
@ -966,7 +966,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
|
||||
/* FF /dr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5dR },
|
||||
|
||||
/* 0F 00 /dr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 },
|
||||
/* 0F 01 /dr */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfo64G7R },
|
||||
/* 0F 01 /dr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 02 /dr */ { 0, BX_IA_LAR_GvEw },
|
||||
/* 0F 03 /dr */ { 0, BX_IA_LSL_GvEw },
|
||||
/* 0F 04 /dr */ { 0, BX_IA_ERROR },
|
||||
@ -1493,7 +1493,7 @@ static const BxOpcodeInfo_t BxOpcodeInfo64R[512*3] = {
|
||||
/* FF /qr */ { BxGroup5, BX_IA_ERROR, BxOpcodeInfo64G5qR },
|
||||
|
||||
/* 0F 00 /qr */ { BxGroup6, BX_IA_ERROR, BxOpcodeInfoG6 },
|
||||
/* 0F 01 /qr */ { BxGroup7, BX_IA_ERROR, BxOpcodeInfo64G7R },
|
||||
/* 0F 01 /qr */ { BxFPEscape, BX_IA_ERROR, BxOpcodeInfoG7R },
|
||||
/* 0F 02 /qr */ { 0, BX_IA_LAR_GvEw },
|
||||
/* 0F 03 /qr */ { 0, BX_IA_LSL_GvEw },
|
||||
/* 0F 04 /qr */ { 0, BX_IA_ERROR },
|
||||
|
Loading…
x
Reference in New Issue
Block a user