addressing issue Possible Undefined Behavior in NEG_EdR() and NEG_EdM() #227

This commit is contained in:
Shwartsman 2024-01-20 08:19:43 +02:00
parent 35abc682cb
commit 4eae91f1ca
4 changed files with 8 additions and 8 deletions

View File

@ -458,7 +458,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EwM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_RESOLVE_ADDR(i);
Bit32u op1_16 = read_RMW_virtual_word(i->seg(), eaddr);
op1_16 = 0 - (Bit32s)(Bit16s)(op1_16);
op1_16 = -op1_16;
write_RMW_linear_word(op1_16);
SET_FLAGS_OSZAPC_SUB_16(0, 0 - op1_16, op1_16);
@ -469,7 +469,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EwM(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EwR(bxInstruction_c *i)
{
Bit32u op1_16 = BX_READ_16BIT_REG(i->dst());
op1_16 = 0 - (Bit32s)(Bit16s)(op1_16);
op1_16 = -op1_16;
BX_WRITE_16BIT_REG(i->dst(), op1_16);
SET_FLAGS_OSZAPC_SUB_16(0, 0 - op1_16, op1_16);

View File

@ -492,7 +492,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EdM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_RESOLVE_ADDR(i);
Bit32u op1_32 = read_RMW_virtual_dword(i->seg(), eaddr);
op1_32 = - (Bit32s)(op1_32);
op1_32 = -op1_32;
write_RMW_linear_dword(op1_32);
SET_FLAGS_OSZAPC_SUB_32(0, 0 - op1_32, op1_32);
@ -503,7 +503,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EdM(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EdR(bxInstruction_c *i)
{
Bit32u op1_32 = BX_READ_32BIT_REG(i->dst());
op1_32 = - (Bit32s)(op1_32);
op1_32 = -op1_32;
BX_WRITE_32BIT_REGZ(i->dst(), op1_32);
SET_FLAGS_OSZAPC_SUB_32(0, 0 - op1_32, op1_32);

View File

@ -492,7 +492,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EqM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_RESOLVE_ADDR_64(i);
Bit64u op1_64 = read_RMW_linear_qword(i->seg(), get_laddr64(i->seg(), eaddr));
op1_64 = - (Bit64s)(op1_64);
op1_64 = -op1_64;
write_RMW_linear_qword(op1_64);
SET_FLAGS_OSZAPC_SUB_64(0, -op1_64, op1_64);
@ -503,7 +503,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EqM(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EqR(bxInstruction_c *i)
{
Bit64u op1_64 = BX_READ_64BIT_REG(i->dst());
op1_64 = - (Bit64s)(op1_64);
op1_64 = -op1_64;
BX_WRITE_64BIT_REG(i->dst(), op1_64);
SET_FLAGS_OSZAPC_SUB_64(0, -op1_64, op1_64);

View File

@ -420,7 +420,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EbM(bxInstruction_c *i)
bx_address eaddr = BX_CPU_RESOLVE_ADDR(i);
Bit32u op1_8 = read_RMW_virtual_byte(i->seg(), eaddr);
op1_8 = - (Bit8s)(op1_8);
op1_8 = -op1_8;
write_RMW_linear_byte(op1_8);
SET_FLAGS_OSZAPC_SUB_8(0, 0 - op1_8, op1_8);
@ -431,7 +431,7 @@ void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EbM(bxInstruction_c *i)
void BX_CPP_AttrRegparmN(1) BX_CPU_C::NEG_EbR(bxInstruction_c *i)
{
Bit32u op1_8 = BX_READ_8BIT_REGx(i->dst(), i->extend8bitL());
op1_8 = - (Bit8s)(op1_8);
op1_8 = -op1_8;
BX_WRITE_8BIT_REGx(i->dst(), i->extend8bitL(), op1_8);
SET_FLAGS_OSZAPC_SUB_8(0, 0 - op1_8, op1_8);