fixed more compilation problems and code cleanup

This commit is contained in:
Stanislav Shwartsman 2015-01-26 20:01:25 +00:00
parent 3a4bd2da51
commit ee3841ef07
10 changed files with 40 additions and 281 deletions

View File

@ -188,166 +188,6 @@ BX_CPU_C::read_virtual_zmmword_aligned_32(unsigned s, Bit32u offset, BxPackedZmm
#endif // BX_CPU_LEVEL >= 6 #endif // BX_CPU_LEVEL >= 6
#if BX_SUPPORT_X86_64
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_byte_64(unsigned s, Bit64u offset, Bit8u data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_byte(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_word_64(unsigned s, Bit64u offset, Bit16u data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_word(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_dword_64(unsigned s, Bit64u offset, Bit32u data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_dword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_qword_64(unsigned s, Bit64u offset, Bit64u data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_qword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_xmmword_64(unsigned s, Bit64u offset, const BxPackedXmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_xmmword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_xmmword_aligned_64(unsigned s, Bit64u offset, const BxPackedXmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_xmmword_aligned(s, laddr, data);
}
#if BX_SUPPORT_AVX
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_ymmword_64(unsigned s, Bit64u offset, const BxPackedYmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_ymmword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_ymmword_aligned_64(unsigned s, Bit64u offset, const BxPackedYmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_ymmword_aligned(s, laddr, data);
}
#endif // BX_SUPPORT_AVX
#if BX_SUPPORT_EVEX
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_zmmword_64(unsigned s, Bit64u offset, const BxPackedZmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_zmmword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_zmmword_aligned_64(unsigned s, Bit64u offset, const BxPackedZmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
write_linear_zmmword_aligned(s, laddr, data);
}
#endif // BX_SUPPORT_EVEX
BX_CPP_INLINE Bit8u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_virtual_byte_64(unsigned s, Bit64u offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_linear_byte(s, laddr);
}
BX_CPP_INLINE Bit16u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_virtual_word_64(unsigned s, Bit64u offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_linear_word(s, laddr);
}
BX_CPP_INLINE Bit32u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_virtual_dword_64(unsigned s, Bit64u offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_linear_dword(s, laddr);
}
BX_CPP_INLINE Bit64u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_virtual_qword_64(unsigned s, Bit64u offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_linear_qword(s, laddr);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::read_virtual_xmmword_64(unsigned s, Bit64u offset, BxPackedXmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
read_linear_xmmword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::read_virtual_xmmword_aligned_64(unsigned s, Bit64u offset, BxPackedXmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
read_linear_xmmword_aligned(s, laddr, data);
}
#if BX_SUPPORT_AVX
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::read_virtual_ymmword_64(unsigned s, Bit64u offset, BxPackedYmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
read_linear_ymmword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::read_virtual_ymmword_aligned_64(unsigned s, Bit64u offset, BxPackedYmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
read_linear_ymmword_aligned(s, laddr, data);
}
#endif // BX_SUPPORT_AVX
#if BX_SUPPORT_EVEX
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::read_virtual_zmmword_64(unsigned s, Bit64u offset, BxPackedZmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
read_linear_zmmword(s, laddr, data);
}
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::read_virtual_zmmword_aligned_64(unsigned s, Bit64u offset, BxPackedZmmRegister *data)
{
bx_address laddr = get_laddr64(s, offset);
read_linear_zmmword_aligned(s, laddr, data);
}
#endif // BX_SUPPORT_EVEX
#endif // BX_SUPPORT_X86_64
BX_CPP_INLINE void BX_CPP_AttrRegparmN(3) BX_CPP_INLINE void BX_CPP_AttrRegparmN(3)
BX_CPU_C::write_virtual_byte(unsigned s, bx_address offset, Bit8u data) BX_CPU_C::write_virtual_byte(unsigned s, bx_address offset, Bit8u data)
{ {
@ -545,38 +385,6 @@ BX_CPU_C::read_RMW_virtual_qword_32(unsigned s, Bit32u offset)
return read_RMW_linear_qword(s, laddr); return read_RMW_linear_qword(s, laddr);
} }
#if BX_SUPPORT_X86_64
BX_CPP_INLINE Bit8u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_RMW_virtual_byte_64(unsigned s, bx_address offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_RMW_linear_byte(s, laddr);
}
BX_CPP_INLINE Bit16u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_RMW_virtual_word_64(unsigned s, bx_address offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_RMW_linear_word(s, laddr);
}
BX_CPP_INLINE Bit32u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_RMW_virtual_dword_64(unsigned s, bx_address offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_RMW_linear_dword(s, laddr);
}
BX_CPP_INLINE Bit64u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_RMW_virtual_qword_64(unsigned s, bx_address offset)
{
bx_address laddr = get_laddr64(s, offset);
return read_RMW_linear_qword(s, laddr);
}
#endif
BX_CPP_INLINE Bit8u BX_CPP_AttrRegparmN(2) BX_CPP_INLINE Bit8u BX_CPP_AttrRegparmN(2)
BX_CPU_C::read_RMW_virtual_byte(unsigned s, bx_address offset) BX_CPU_C::read_RMW_virtual_byte(unsigned s, bx_address offset)
{ {

View File

@ -105,11 +105,6 @@ BX_CPU_C::write_linear_dword(unsigned s, bx_address laddr, Bit32u data)
} }
} }
if (! IsCanonical(laddr)) {
BX_ERROR(("write_linear_dword(): canonical failure"));
exception(int_number(s), 0);
}
if (access_write_linear(laddr, 4, CPL, 0x3, (void *) &data) < 0) if (access_write_linear(laddr, 4, CPL, 0x3, (void *) &data) < 0)
exception(int_number(s), 0); exception(int_number(s), 0);
} }
@ -139,11 +134,6 @@ BX_CPU_C::write_linear_qword(unsigned s, bx_address laddr, Bit64u data)
} }
} }
if (! IsCanonical(laddr)) {
BX_ERROR(("write_linear_qword(): canonical failure"));
exception(int_number(s), 0);
}
if (access_write_linear(laddr, 8, CPL, 0x7, (void *) &data) < 0) if (access_write_linear(laddr, 8, CPL, 0x7, (void *) &data) < 0)
exception(int_number(s), 0); exception(int_number(s), 0);
} }

View File

@ -33,7 +33,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ADD_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
sum_64 = op1_64 + op2_64; sum_64 = op1_64 + op2_64;
write_RMW_linear_qword(sum_64); write_RMW_linear_qword(sum_64);
@ -80,7 +80,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ADC_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
sum_64 = op1_64 + op2_64 + getB_CF(); sum_64 = op1_64 + op2_64 + getB_CF();
write_RMW_linear_qword(sum_64); write_RMW_linear_qword(sum_64);
@ -129,7 +129,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SBB_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
diff_64 = op1_64 - (op2_64 + getB_CF()); diff_64 = op1_64 - (op2_64 + getB_CF());
write_RMW_linear_qword(diff_64); write_RMW_linear_qword(diff_64);
@ -178,7 +178,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SBB_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = (Bit32s) i->Id(); op2_64 = (Bit32s) i->Id();
diff_64 = op1_64 - (op2_64 + getB_CF()); diff_64 = op1_64 - (op2_64 + getB_CF());
write_RMW_linear_qword(diff_64); write_RMW_linear_qword(diff_64);
@ -209,7 +209,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SUB_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
diff_64 = op1_64 - op2_64; diff_64 = op1_64 - op2_64;
write_RMW_linear_qword(diff_64); write_RMW_linear_qword(diff_64);
@ -327,7 +327,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::XADD_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
sum_64 = op1_64 + op2_64; sum_64 = op1_64 + op2_64;
write_RMW_linear_qword(sum_64); write_RMW_linear_qword(sum_64);
@ -373,7 +373,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ADD_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = (Bit32s) i->Id(); op2_64 = (Bit32s) i->Id();
sum_64 = op1_64 + op2_64; sum_64 = op1_64 + op2_64;
write_RMW_linear_qword(sum_64); write_RMW_linear_qword(sum_64);
@ -404,7 +404,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ADC_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = (Bit32s) i->Id(); op2_64 = (Bit32s) i->Id();
sum_64 = op1_64 + op2_64 + getB_CF(); sum_64 = op1_64 + op2_64 + getB_CF();
write_RMW_linear_qword(sum_64); write_RMW_linear_qword(sum_64);
@ -435,7 +435,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SUB_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = (Bit32s) i->Id(); op2_64 = (Bit32s) i->Id();
diff_64 = op1_64 - op2_64; diff_64 = op1_64 - op2_64;
write_RMW_linear_qword(diff_64); write_RMW_linear_qword(diff_64);
@ -491,7 +491,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EqM(bxInstruction_c *i)
{ {
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64 = - (Bit64s)(op1_64); op1_64 = - (Bit64s)(op1_64);
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -515,7 +515,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::INC_EqM(bxInstruction_c *i)
{ {
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64++; op1_64++;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -536,7 +536,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::DEC_EqM(bxInstruction_c *i)
{ {
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64--; op1_64--;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -557,7 +557,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::CMPXCHG_EqGqM(bxInstruction_c *i)
{ {
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
Bit64u diff_64 = RAX - op1_64; Bit64u diff_64 = RAX - op1_64;
SET_FLAGS_OSZAPC_SUB_64(RAX, op1_64, diff_64); SET_FLAGS_OSZAPC_SUB_64(RAX, op1_64, diff_64);

View File

@ -122,7 +122,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::BTS_EqGqM(bxInstruction_c *i)
op1_addr = (Bit32u) op1_addr; op1_addr = (Bit32u) op1_addr;
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), op1_addr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), op1_addr));
bit_i = (op1_64 >> index) & 0x01; bit_i = (op1_64 >> index) & 0x01;
op1_64 |= (((Bit64u) 1) << index); op1_64 |= (((Bit64u) 1) << index);
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -164,7 +164,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::BTR_EqGqM(bxInstruction_c *i)
op1_addr = (Bit32u) op1_addr; op1_addr = (Bit32u) op1_addr;
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), op1_addr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), op1_addr));
bx_bool temp_cf = (op1_64 >> index) & 0x01; bx_bool temp_cf = (op1_64 >> index) & 0x01;
op1_64 &= ~(((Bit64u) 1) << index); op1_64 &= ~(((Bit64u) 1) << index);
/* now write back to destination */ /* now write back to destination */
@ -207,7 +207,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::BTC_EqGqM(bxInstruction_c *i)
if (! i->as64L()) if (! i->as64L())
op1_addr = (Bit32u) op1_addr; op1_addr = (Bit32u) op1_addr;
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), op1_addr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), op1_addr));
bx_bool temp_CF = (op1_64 >> index) & 0x01; bx_bool temp_CF = (op1_64 >> index) & 0x01;
op1_64 ^= (((Bit64u) 1) << index); /* toggle bit */ op1_64 ^= (((Bit64u) 1) << index); /* toggle bit */
set_CF(temp_CF); set_CF(temp_CF);
@ -262,7 +262,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::BTS_EqIbM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
bx_bool temp_CF = (op1_64 >> op2_8) & 0x01; bx_bool temp_CF = (op1_64 >> op2_8) & 0x01;
op1_64 |= (((Bit64u) 1) << op2_8); op1_64 |= (((Bit64u) 1) << op2_8);
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -292,7 +292,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::BTC_EqIbM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
bx_bool temp_CF = (op1_64 >> op2_8) & 0x01; bx_bool temp_CF = (op1_64 >> op2_8) & 0x01;
op1_64 ^= (((Bit64u) 1) << op2_8); /* toggle bit */ op1_64 ^= (((Bit64u) 1) << op2_8); /* toggle bit */
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -322,7 +322,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::BTR_EqIbM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
bx_bool temp_CF = (op1_64 >> op2_8) & 0x01; bx_bool temp_CF = (op1_64 >> op2_8) & 0x01;
op1_64 &= ~(((Bit64u) 1) << op2_8); op1_64 &= ~(((Bit64u) 1) << op2_8);
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);

View File

@ -4533,38 +4533,6 @@ public: // for now...
BX_SMF void write_virtual_zmmword_32(unsigned seg, Bit32u off, const BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3); BX_SMF void write_virtual_zmmword_32(unsigned seg, Bit32u off, const BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_zmmword_aligned_32(unsigned seg, Bit32u off, const BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3); BX_SMF void write_virtual_zmmword_aligned_32(unsigned seg, Bit32u off, const BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3);
#endif #endif
#endif
#if BX_SUPPORT_X86_64
BX_SMF Bit8u read_virtual_byte_64(unsigned seg, Bit64u offset) BX_CPP_AttrRegparmN(2);
BX_SMF Bit16u read_virtual_word_64(unsigned seg, Bit64u offset) BX_CPP_AttrRegparmN(2);
BX_SMF Bit32u read_virtual_dword_64(unsigned seg, Bit64u offset) BX_CPP_AttrRegparmN(2);
BX_SMF Bit64u read_virtual_qword_64(unsigned seg, Bit64u offset) BX_CPP_AttrRegparmN(2);
BX_SMF void read_virtual_xmmword_64(unsigned seg, Bit64u off, BxPackedXmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void read_virtual_xmmword_aligned_64(unsigned seg, Bit64u off, BxPackedXmmRegister *data) BX_CPP_AttrRegparmN(3);
#if BX_SUPPORT_AVX
BX_SMF void read_virtual_ymmword_64(unsigned seg, Bit64u offset, BxPackedYmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void read_virtual_ymmword_aligned_64(unsigned seg, Bit64u offset, BxPackedYmmRegister *data) BX_CPP_AttrRegparmN(3);
#endif
#if BX_SUPPORT_EVEX
BX_SMF void read_virtual_zmmword_64(unsigned seg, Bit64u offset, BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void read_virtual_zmmword_aligned_64(unsigned seg, Bit64u offset, BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3);
#endif
BX_SMF void write_virtual_byte_64(unsigned seg, Bit64u offset, Bit8u data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_word_64(unsigned seg, Bit64u offset, Bit16u data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_dword_64(unsigned seg, Bit64u offset, Bit32u data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_qword_64(unsigned seg, Bit64u offset, Bit64u data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_xmmword_64(unsigned seg, Bit64u offset, const BxPackedXmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_xmmword_aligned_64(unsigned seg, Bit64u offset, const BxPackedXmmRegister *data) BX_CPP_AttrRegparmN(3);
#if BX_SUPPORT_AVX
BX_SMF void write_virtual_ymmword_64(unsigned seg, Bit64u offset, const BxPackedYmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_ymmword_aligned_64(unsigned seg, Bit64u offset, const BxPackedYmmRegister *data) BX_CPP_AttrRegparmN(3);
#endif
#if BX_SUPPORT_EVEX
BX_SMF void write_virtual_zmmword_64(unsigned seg, Bit64u offset, const BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3);
BX_SMF void write_virtual_zmmword_aligned_64(unsigned seg, Bit64u offset, const BxPackedZmmRegister *data) BX_CPP_AttrRegparmN(3);
#endif
#endif #endif
BX_SMF Bit8u read_virtual_byte(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2); BX_SMF Bit8u read_virtual_byte(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2);
@ -4611,13 +4579,6 @@ public: // for now...
BX_SMF Bit32u read_RMW_virtual_dword_32(unsigned seg, Bit32u offset) BX_CPP_AttrRegparmN(2); BX_SMF Bit32u read_RMW_virtual_dword_32(unsigned seg, Bit32u offset) BX_CPP_AttrRegparmN(2);
BX_SMF Bit64u read_RMW_virtual_qword_32(unsigned seg, Bit32u offset) BX_CPP_AttrRegparmN(2); BX_SMF Bit64u read_RMW_virtual_qword_32(unsigned seg, Bit32u offset) BX_CPP_AttrRegparmN(2);
#if BX_SUPPORT_X86_64
BX_SMF Bit8u read_RMW_virtual_byte_64(unsigned seg, Bit64u laddr) BX_CPP_AttrRegparmN(2);
BX_SMF Bit16u read_RMW_virtual_word_64(unsigned seg, Bit64u laddr) BX_CPP_AttrRegparmN(2);
BX_SMF Bit32u read_RMW_virtual_dword_64(unsigned seg, Bit64u laddr) BX_CPP_AttrRegparmN(2);
BX_SMF Bit64u read_RMW_virtual_qword_64(unsigned seg, Bit64u laddr) BX_CPP_AttrRegparmN(2);
#endif
BX_SMF Bit8u read_RMW_virtual_byte(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2); BX_SMF Bit8u read_RMW_virtual_byte(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2);
BX_SMF Bit16u read_RMW_virtual_word(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2); BX_SMF Bit16u read_RMW_virtual_word(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2);
BX_SMF Bit32u read_RMW_virtual_dword(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2); BX_SMF Bit32u read_RMW_virtual_dword(unsigned seg, bx_address offset) BX_CPP_AttrRegparmN(2);

View File

@ -293,7 +293,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::XCHG_EqGqM(bxInstruction_c *i)
{ {
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
Bit64u op2_64 = BX_READ_64BIT_REG(i->src()); Bit64u op2_64 = BX_READ_64BIT_REG(i->src());
write_RMW_linear_qword(op2_64); write_RMW_linear_qword(op2_64);

View File

@ -251,7 +251,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSB32_YbDX(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSB64_YbDX(bxInstruction_c *i) void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSB64_YbDX(bxInstruction_c *i)
{ {
// trigger any segment or page faults before reading from IO port // trigger any segment or page faults before reading from IO port
Bit8u value8 = read_RMW_virtual_byte_64(BX_SEG_REG_ES, RDI); Bit8u value8 = read_RMW_linear_byte(BX_SEG_REG_ES, RDI);
value8 = BX_INP(DX, 1); value8 = BX_INP(DX, 1);
@ -362,7 +362,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSW32_YwDX(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSW64_YwDX(bxInstruction_c *i) void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSW64_YwDX(bxInstruction_c *i)
{ {
// trigger any segment or page faults before reading from IO port // trigger any segment or page faults before reading from IO port
Bit16u value16 = read_RMW_virtual_word_64(BX_SEG_REG_ES, RDI); Bit16u value16 = read_RMW_linear_word(BX_SEG_REG_ES, RDI);
value16 = BX_INP(DX, 2); value16 = BX_INP(DX, 2);
@ -438,7 +438,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSD32_YdDX(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSD64_YdDX(bxInstruction_c *i) void BX_CPP_AttrRegparmN(1) BX_CPU_C::INSD64_YdDX(bxInstruction_c *i)
{ {
// trigger any segment or page faults before reading from IO port // trigger any segment or page faults before reading from IO port
Bit32u value32 = read_RMW_virtual_dword_64(BX_SEG_REG_ES, RDI); Bit32u value32 = read_RMW_linear_dword(BX_SEG_REG_ES, RDI);
value32 = BX_INP(DX, 4); value32 = BX_INP(DX, 4);

View File

@ -32,7 +32,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
op1_64 ^= op2_64; op1_64 ^= op2_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -80,7 +80,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::XOR_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64 ^= op2_64; op1_64 ^= op2_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -108,7 +108,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64 |= op2_64; op1_64 |= op2_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -134,7 +134,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::NOT_EqM(bxInstruction_c *i)
{ {
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64 = ~op1_64; op1_64 = ~op1_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -156,7 +156,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::OR_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
op1_64 = read_RMW_virtual_qword_64(i->seg(), eaddr); op1_64 = read_RMW_linear_qword(i->seg(), eaddr);
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
op1_64 |= op2_64; op1_64 |= op2_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -204,7 +204,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op2_64 = BX_READ_64BIT_REG(i->src()); op2_64 = BX_READ_64BIT_REG(i->src());
op1_64 &= op2_64; op1_64 &= op2_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);
@ -252,7 +252,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::AND_EqIdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64 &= op2_64; op1_64 &= op2_64;
write_RMW_linear_qword(op1_64); write_RMW_linear_qword(op1_64);

View File

@ -35,7 +35,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_SHLD_EqGq) if (i->getIaOpcode() == BX_IA_SHLD_EqGq)
count = CL; count = CL;
@ -101,7 +101,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EqGqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
/* pointer, segment address pair */ /* pointer, segment address pair */
op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_SHRD_EqGq) if (i->getIaOpcode() == BX_IA_SHRD_EqGq)
count = CL; count = CL;
@ -164,7 +164,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_ROL_Eq) if (i->getIaOpcode() == BX_IA_ROL_Eq)
count = CL; count = CL;
@ -218,7 +218,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_ROR_Eq) if (i->getIaOpcode() == BX_IA_ROR_Eq)
count = CL; count = CL;
@ -274,7 +274,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_RCL_Eq) if (i->getIaOpcode() == BX_IA_RCL_Eq)
count = CL; count = CL;
@ -348,7 +348,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_RCR_Eq) if (i->getIaOpcode() == BX_IA_RCR_Eq)
count = CL; count = CL;
@ -420,7 +420,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_SHL_Eq) if (i->getIaOpcode() == BX_IA_SHL_Eq)
count = CL; count = CL;
@ -479,7 +479,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_SHR_Eq) if (i->getIaOpcode() == BX_IA_SHR_Eq)
count = CL; count = CL;
@ -539,7 +539,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i)); bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u op1_64 = read_RMW_virtual_qword_64(i->seg(), get_laddr64(i->seg(), eaddr)); Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
if (i->getIaOpcode() == BX_IA_SAR_Eq) if (i->getIaOpcode() == BX_IA_SAR_Eq)
count = CL; count = CL;

View File

@ -124,7 +124,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ENTER64_IwIb(bxInstruction_c *i)
// ENTER finishes with memory write check on the final stack pointer // ENTER finishes with memory write check on the final stack pointer
// the memory is touched but no write actually occurs // the memory is touched but no write actually occurs
// emulate it by doing RMW read access from SS:RSP // emulate it by doing RMW read access from SS:RSP
read_RMW_virtual_qword_64(BX_SEG_REG_SS, temp_RSP); read_RMW_linear_qword(BX_SEG_REG_SS, temp_RSP);
RBP = frame_ptr64; RBP = frame_ptr64;
RSP = temp_RSP; RSP = temp_RSP;