Got rid of the KPL64Hacks macro. The fixes below eliminated it.

Created 64-bit versions of some branch instructions and
  changed fetchdecode64.cc to use them instead.  This keeps the
  #ifdef pollution down for 32-bit code and made fixing them
  easier.  They needed to clear the upper bits of RIP for
  16-bit operand sizes.  They also should not have had a protection
  limit check in them, especially since that field is still
  32-bit in cpu.h, so there's no way to set nominal 64-bit values.
  The 32-bit versions were also not honoring the upper 32-bits
  of RIP.

  LOOPNE64_Jb
  LOOPE64_Jb
  LOOP64_Jb
  JCXZ64_Jb

Changed all occurances of JCC_Jw/JCC_Jd in fetchdecode64.cc to
  use JCC_Jq, which was coded already.  Both JMP_Jq and JCC_Jq are
  now fixed w.r.t. 16-bit opsizes and upper RIP bit clearing.
This commit is contained in:
Kevin Lawton 2002-09-27 07:01:02 +00:00
parent 5bfd2c669e
commit 47f2e7c404
5 changed files with 236 additions and 109 deletions

View File

@ -608,9 +608,6 @@ typedef
// soon and there is no configure option for them (on purpose).
// By default, they are not compiled in.
// Set this to 1 if you want to try my 64-bit hacks to get Linux booting.
#define KPL64Hacks 0
// I set this to 1 to bail in instructions which may not be honoring
// the 64-bit widths of RIP/RSP. If I trip a panic, then I clean
// the function up and remove the panic. You don't have to use

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.h,v 1.82 2002-09-26 21:32:25 kevinlawton Exp $
// $Id: cpu.h,v 1.83 2002-09-27 07:01:01 kevinlawton Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -2236,6 +2236,10 @@ union {
BX_SMF void SWAPGS(bxInstruction_c *i);
BX_SMF void LOOPNE64_Jb(bxInstruction_c *);
BX_SMF void LOOPE64_Jb(bxInstruction_c *);
BX_SMF void LOOP64_Jb(bxInstruction_c *);
BX_SMF void JCXZ64_Jb(bxInstruction_c *);
#endif // #if BX_SUPPORT_X86_64
// mch added

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: ctrl_xfer32.cc,v 1.18 2002-09-24 00:44:55 kevinlawton Exp $
// $Id: ctrl_xfer32.cc,v 1.19 2002-09-27 07:01:02 kevinlawton Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -405,31 +405,21 @@ BX_CPU_C::JCC_Jd(bxInstruction_c *i)
}
if (condition) {
#if BX_SUPPORT_X86_64
#if KPL64Hacks
if (BX_CPU_THIS_PTR cpu_mode == BX_MODE_LONG_64) {
RIP += (Bit32s) i->Id();
}
else
#endif
#endif
{
BailBigRSP("JCC_Jd");
Bit32u new_EIP;
Bit32u new_EIP;
new_EIP = EIP + (Bit32s) i->Id();
new_EIP = EIP + (Bit32s) i->Id();
#if BX_CPU_LEVEL >= 2
if (protected_mode()) {
if ( new_EIP >
BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled )
{
BX_PANIC(("jo_routine: offset outside of CS limits"));
exception(BX_GP_EXCEPTION, 0, 0);
}
if (protected_mode()) {
if ( new_EIP >
BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled )
{
BX_PANIC(("jo_routine: offset outside of CS limits"));
exception(BX_GP_EXCEPTION, 0, 0);
}
#endif
EIP = new_EIP;
}
#endif
EIP = new_EIP;
BX_INSTR_CNEAR_BRANCH_TAKEN(new_EIP);
revalidate_prefetch_q();
}

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: ctrl_xfer64.cc,v 1.13 2002-09-26 22:34:06 kevinlawton Exp $
// $Id: ctrl_xfer64.cc,v 1.14 2002-09-27 07:01:02 kevinlawton Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -289,12 +289,8 @@ BX_CPU_C::JMP_Jq(bxInstruction_c *i)
invalidate_prefetch_q();
RIP += (Bit32s) i->Id();
if (i->os32L()==0) {
// For 16-bit opSize, upper bits of RIP are cleared, as in
// 32-bit counterpart JMP_Jd.
BX_CPU_THIS_PTR dword.rip_upper = 0;
BX_CPU_THIS_PTR dword.eip &= 0x0000ffff;
}
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_UCNEAR_BRANCH(BX_INSTR_IS_JMP, new_RIP);
}
@ -331,6 +327,8 @@ BX_CPU_C::JCC_Jq(bxInstruction_c *i)
if (condition) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(RIP);
revalidate_prefetch_q();
}
@ -451,3 +449,141 @@ done:
BX_INSTR_FAR_BRANCH(BX_INSTR_IS_IRET,
BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, BX_CPU_THIS_PTR rip);
}
void
BX_CPU_C::JCXZ64_Jb(bxInstruction_c *i)
{
if (i->as64L()) {
if ( RCX == 0 ) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(new_RIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
else {
if ( ECX == 0 ) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(new_EIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
}
void
BX_CPU_C::LOOPNE64_Jb(bxInstruction_c *i)
{
if (i->as64L()) {
if ( ((--RCX)!=0) && (get_ZF()==0) ) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(RIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
else {
if ( ((--ECX)!=0) && (get_ZF()==0) ) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(new_EIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
}
void
BX_CPU_C::LOOPE64_Jb(bxInstruction_c *i)
{
if (i->as64L()) {
if ( ((--RCX)!=0) && (get_ZF()) ) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(RIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
else {
if ( ((--ECX)!=0) && get_ZF()) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(new_EIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
}
void
BX_CPU_C::LOOP64_Jb(bxInstruction_c *i)
{
if (i->as64L()) {
if ((--RCX) != 0) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(RIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
else {
if ((--ECX) != 0) {
RIP += (Bit32s) i->Id();
if (i->os32L()==0)
RIP &= 0xffff; // For 16-bit opSize, upper 48 bits of RIP are cleared.
BX_INSTR_CNEAR_BRANCH_TAKEN(new_EIP);
revalidate_prefetch_q();
}
#if BX_INSTRUMENTATION
else {
BX_INSTR_CNEAR_BRANCH_NOT_TAKEN();
}
#endif
}
}

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: fetchdecode64.cc,v 1.15 2002-09-26 21:32:26 kevinlawton Exp $
// $Id: fetchdecode64.cc,v 1.16 2002-09-27 07:01:02 kevinlawton Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -576,22 +576,22 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 6D */ { BxRepeatable, &BX_CPU_C::INSW_YvDX },
/* 6E */ { BxRepeatable, &BX_CPU_C::OUTSB_DXXb },
/* 6F */ { BxRepeatable, &BX_CPU_C::OUTSW_DXXv },
/* 70 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 71 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 72 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 73 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 74 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 75 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 76 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 77 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 78 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 79 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 7A */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 7B */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 7C */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 7D */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 7E */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jw },
/* 70 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 71 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 72 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 73 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 74 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 75 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 76 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 77 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 78 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 79 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7A */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7B */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7C */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7D */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7E */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 80 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 81 */ { BxAnother | BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1Ew },
/* 82 */ { 0, &BX_CPU_C::BxError },
@ -688,10 +688,10 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* DD */ { BxAnother, &BX_CPU_C::ESC5 },
/* DE */ { BxAnother, &BX_CPU_C::ESC6 },
/* DF */ { BxAnother, &BX_CPU_C::ESC7 },
/* E0 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPNE_Jb },
/* E1 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPE_Jb },
/* E2 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOP_Jb },
/* E3 */ { BxImmediate_BrOff8, &BX_CPU_C::JCXZ_Jb },
/* E0 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPNE64_Jb },
/* E1 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPE64_Jb },
/* E2 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOP64_Jb },
/* E3 */ { BxImmediate_BrOff8, &BX_CPU_C::JCXZ64_Jb },
/* E4 */ { BxImmediate_Ib, &BX_CPU_C::IN_ALIb },
/* E5 */ { BxImmediate_Ib, &BX_CPU_C::IN_eAXIb },
/* E6 */ { BxImmediate_Ib, &BX_CPU_C::OUT_IbAL },
@ -849,22 +849,22 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 0F 7D */ { 0, &BX_CPU_C::BxError },
/* 0F 7E */ { 0, &BX_CPU_C::BxError },
/* 0F 7F */ { 0, &BX_CPU_C::BxError },
/* 0F 80 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 81 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 82 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 83 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 84 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 85 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 86 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 87 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 88 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 89 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 8A */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 8B */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 8C */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 8D */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 8E */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 8F */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jw },
/* 0F 80 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 81 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 82 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 83 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 84 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 85 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 86 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 87 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 88 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 89 */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 8A */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 8B */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 8C */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 8D */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 8E */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 8F */ { BxImmediate_BrOff16, &BX_CPU_C::JCC_Jq },
/* 0F 90 */ { BxAnother, &BX_CPU_C::SETO_Eb },
/* 0F 91 */ { BxAnother, &BX_CPU_C::SETNO_Eb },
/* 0F 92 */ { BxAnother, &BX_CPU_C::SETB_Eb },
@ -1092,22 +1092,22 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 6D */ { BxRepeatable, &BX_CPU_C::INSW_YvDX },
/* 6E */ { BxRepeatable, &BX_CPU_C::OUTSB_DXXb },
/* 6F */ { BxRepeatable, &BX_CPU_C::OUTSW_DXXv },
/* 70 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 71 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 72 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 73 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 74 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 75 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 76 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 77 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 78 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 79 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 7A */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 7B */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 7C */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 7D */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 7E */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jd },
/* 70 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 71 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 72 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 73 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 74 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 75 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 76 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 77 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 78 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 79 */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7A */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7B */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7C */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7D */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7E */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 7F */ { BxImmediate_BrOff8, &BX_CPU_C::JCC_Jq },
/* 80 */ { BxAnother | BxGroup1, NULL, BxOpcodeInfo64G1EbIb },
/* 81 */ { BxAnother | BxGroup1 | BxImmediate_Iv, NULL, BxOpcodeInfo64G1Ed },
/* 82 */ { 0, &BX_CPU_C::BxError },
@ -1204,10 +1204,10 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* DD */ { BxAnother, &BX_CPU_C::ESC5 },
/* DE */ { BxAnother, &BX_CPU_C::ESC6 },
/* DF */ { BxAnother, &BX_CPU_C::ESC7 },
/* E0 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPNE_Jb },
/* E1 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPE_Jb },
/* E2 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOP_Jb },
/* E3 */ { BxImmediate_BrOff8, &BX_CPU_C::JCXZ_Jb },
/* E0 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPNE64_Jb },
/* E1 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPE64_Jb },
/* E2 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOP64_Jb },
/* E3 */ { BxImmediate_BrOff8, &BX_CPU_C::JCXZ64_Jb },
/* E4 */ { BxImmediate_Ib, &BX_CPU_C::IN_ALIb },
/* E5 */ { BxImmediate_Ib, &BX_CPU_C::IN_eAXIb },
/* E6 */ { BxImmediate_Ib, &BX_CPU_C::OUT_IbAL },
@ -1365,22 +1365,22 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* 0F 7D */ { 0, &BX_CPU_C::BxError },
/* 0F 7E */ { 0, &BX_CPU_C::BxError },
/* 0F 7F */ { 0, &BX_CPU_C::BxError },
/* 0F 80 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 81 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 82 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 83 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 84 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 85 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 86 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 87 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 88 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 89 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 8A */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 8B */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 8C */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 8D */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 8E */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 8F */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jd },
/* 0F 80 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 81 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 82 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 83 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 84 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 85 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 86 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 87 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 88 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 89 */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 8A */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 8B */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 8C */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 8D */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 8E */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 8F */ { BxImmediate_BrOff32, &BX_CPU_C::JCC_Jq },
/* 0F 90 */ { BxAnother, &BX_CPU_C::SETO_Eb },
/* 0F 91 */ { BxAnother, &BX_CPU_C::SETNO_Eb },
/* 0F 92 */ { BxAnother, &BX_CPU_C::SETB_Eb },
@ -1719,10 +1719,10 @@ static BxOpcodeInfo_t BxOpcodeInfo64[512*3] = {
/* DD */ { BxAnother, &BX_CPU_C::ESC5 },
/* DE */ { BxAnother, &BX_CPU_C::ESC6 },
/* DF */ { BxAnother, &BX_CPU_C::ESC7 },
/* E0 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPNE_Jb },
/* E1 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPE_Jb },
/* E2 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOP_Jb },
/* E3 */ { BxImmediate_BrOff8, &BX_CPU_C::JCXZ_Jb },
/* E0 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPNE64_Jb },
/* E1 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOPE64_Jb },
/* E2 */ { BxImmediate_BrOff8, &BX_CPU_C::LOOP64_Jb },
/* E3 */ { BxImmediate_BrOff8, &BX_CPU_C::JCXZ64_Jb },
/* E4 */ { BxImmediate_Ib, &BX_CPU_C::IN_ALIb },
/* E5 */ { BxImmediate_Ib, &BX_CPU_C::IN_eAXIb },
/* E6 */ { BxImmediate_Ib, &BX_CPU_C::OUT_IbAL },