lazy flags code small refactoring
This commit is contained in:
parent
6daa1ba9ba
commit
ac442009aa
195
bochs/cpu/cpu.h
195
bochs/cpu/cpu.h
@ -951,7 +951,7 @@ public: // for now...
|
||||
Bit32u eflags; // Raw 32-bit value in x86 bit position.
|
||||
|
||||
// lazy arithmetic flags state
|
||||
bx_lf_flags_entry oszapc;
|
||||
bx_lazyflags_entry oszapc;
|
||||
|
||||
// so that we can back up when handling faults, exceptions, etc.
|
||||
// we need to store the value of the instruction pointer, before
|
||||
@ -1341,164 +1341,43 @@ public: // for now...
|
||||
BX_SMF BX_CPP_INLINE void clearEFlagsOSZAPC(void) {
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(1);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_OF(void) { return BX_CPU_THIS_PTR oszapc.getB_OF(); }
|
||||
BX_SMF BX_CPP_INLINE unsigned get_OF(void) { return BX_CPU_THIS_PTR oszapc.get_OF(); }
|
||||
BX_SMF BX_CPP_INLINE void set_OF(bx_bool val) { BX_CPU_THIS_PTR oszapc.set_OF(val); }
|
||||
BX_SMF BX_CPP_INLINE void clear_OF(void) { BX_CPU_THIS_PTR oszapc.clear_OF(); }
|
||||
BX_SMF BX_CPP_INLINE void assert_OF(void) { BX_CPU_THIS_PTR oszapc.assert_OF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_SF(void) { return BX_CPU_THIS_PTR oszapc.getB_SF(); }
|
||||
BX_SMF BX_CPP_INLINE unsigned get_SF(void) { return BX_CPU_THIS_PTR oszapc.get_SF(); }
|
||||
BX_SMF BX_CPP_INLINE void set_SF(bx_bool val) { BX_CPU_THIS_PTR oszapc.set_SF(val); }
|
||||
BX_SMF BX_CPP_INLINE void clear_SF(void) { BX_CPU_THIS_PTR oszapc.clear_SF(); }
|
||||
BX_SMF BX_CPP_INLINE void assert_SF(void) { BX_CPU_THIS_PTR oszapc.assert_SF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_ZF(void) { return BX_CPU_THIS_PTR oszapc.getB_ZF(); }
|
||||
BX_SMF BX_CPP_INLINE unsigned get_ZF(void) { return BX_CPU_THIS_PTR oszapc.get_ZF(); }
|
||||
BX_SMF BX_CPP_INLINE void set_ZF(bx_bool val) { BX_CPU_THIS_PTR oszapc.set_ZF(val); }
|
||||
BX_SMF BX_CPP_INLINE void clear_ZF(void) { BX_CPU_THIS_PTR oszapc.clear_ZF(); }
|
||||
BX_SMF BX_CPP_INLINE void assert_ZF(void) { BX_CPU_THIS_PTR oszapc.assert_ZF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_AF(void) { return BX_CPU_THIS_PTR oszapc.getB_AF(); }
|
||||
BX_SMF BX_CPP_INLINE unsigned get_AF(void) { return BX_CPU_THIS_PTR oszapc.get_AF(); }
|
||||
BX_SMF BX_CPP_INLINE void set_AF(bx_bool val) { BX_CPU_THIS_PTR oszapc.set_AF(val); }
|
||||
BX_SMF BX_CPP_INLINE void clear_AF(void) { BX_CPU_THIS_PTR oszapc.clear_AF(); }
|
||||
BX_SMF BX_CPP_INLINE void assert_AF(void) { BX_CPU_THIS_PTR oszapc.assert_AF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_PF(void) { return BX_CPU_THIS_PTR oszapc.getB_PF(); }
|
||||
BX_SMF BX_CPP_INLINE unsigned get_PF(void) { return BX_CPU_THIS_PTR oszapc.get_PF(); }
|
||||
BX_SMF BX_CPP_INLINE void set_PF(bx_bool val) { BX_CPU_THIS_PTR oszapc.set_PF(val); }
|
||||
BX_SMF BX_CPP_INLINE void clear_PF(void) { BX_CPU_THIS_PTR oszapc.clear_PF(); }
|
||||
BX_SMF BX_CPP_INLINE void assert_PF(void) { BX_CPU_THIS_PTR oszapc.assert_PF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_CF(void) { return BX_CPU_THIS_PTR oszapc.getB_CF(); }
|
||||
BX_SMF BX_CPP_INLINE unsigned get_CF(void) { return BX_CPU_THIS_PTR oszapc.get_CF(); }
|
||||
BX_SMF BX_CPP_INLINE void set_CF(bx_bool val) { BX_CPU_THIS_PTR oszapc.set_CF(val); }
|
||||
BX_SMF BX_CPP_INLINE void clear_CF(void) { BX_CPU_THIS_PTR oszapc.clear_CF(); }
|
||||
BX_SMF BX_CPP_INLINE void assert_CF(void) { BX_CPU_THIS_PTR oszapc.assert_CF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE void SET_FLAGS_OxxxxC(Bit32u new_of, Bit32u new_cf) {
|
||||
Bit32u temp_po = new_of ^ new_cf;
|
||||
BX_CPU_THIS_PTR oszapc.auxbits &= ~(LF_MASK_PO | LF_MASK_CF);
|
||||
BX_CPU_THIS_PTR oszapc.auxbits |=
|
||||
(temp_po << LF_BIT_PO) | (new_cf << LF_BIT_CF);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void ASSERT_FLAGS_OxxxxC() {
|
||||
SET_FLAGS_OxxxxC(1, 1);
|
||||
}
|
||||
|
||||
// ZF
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_ZF(void) {
|
||||
return (0 == BX_CPU_THIS_PTR oszapc.result);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned get_ZF(void) { return getB_ZF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE void set_ZF(bx_bool val) {
|
||||
if (val) assert_ZF();
|
||||
else clear_ZF();
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void clear_ZF(void) {
|
||||
BX_CPU_THIS_PTR oszapc.result |= (1 << 8);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void assert_ZF(void) {
|
||||
// merge the sign bit into the Sign Delta
|
||||
BX_CPU_THIS_PTR oszapc.auxbits ^=
|
||||
(((BX_CPU_THIS_PTR oszapc.result >> BX_LF_SIGN_BIT) & 1) << LF_BIT_SD);
|
||||
|
||||
// merge the parity bits into the Parity Delta Byte
|
||||
Bit32u temp_pdb = (255 & BX_CPU_THIS_PTR oszapc.result);
|
||||
BX_CPU_THIS_PTR oszapc.auxbits ^= (temp_pdb << LF_BIT_PDB);
|
||||
|
||||
// now zero the .result value
|
||||
BX_CPU_THIS_PTR oszapc.result = 0;
|
||||
}
|
||||
|
||||
// SF
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_SF(void) {
|
||||
return ((BX_CPU_THIS_PTR oszapc.result >> BX_LF_SIGN_BIT) ^
|
||||
(BX_CPU_THIS_PTR oszapc.auxbits >> LF_BIT_SD)) & 1;
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned get_SF(void) { return getB_SF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE void set_SF(bx_bool val) {
|
||||
bx_bool temp_sf = getB_SF();
|
||||
|
||||
BX_CPU_THIS_PTR oszapc.auxbits ^= (temp_sf ^ val) << LF_BIT_SD;
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void clear_SF(void) {
|
||||
set_SF(0);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void assert_SF(void) {
|
||||
set_SF(1);
|
||||
}
|
||||
|
||||
// PF - bit 2 in EFLAGS, represented by lower 8 bits of oszapc.result
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_PF(void) {
|
||||
Bit32u temp = (255 & BX_CPU_THIS_PTR oszapc.result);
|
||||
temp = temp ^ (255 & (BX_CPU_THIS_PTR oszapc.auxbits >> LF_BIT_PDB));
|
||||
temp = (temp ^ (temp >> 4)) & 0x0F;
|
||||
return (0x9669U >> temp) & 1;
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned get_PF(void) { return getB_PF(); }
|
||||
|
||||
BX_SMF BX_CPP_INLINE void set_PF(bx_bool val) {
|
||||
Bit32u temp_pdb = (255 & BX_CPU_THIS_PTR oszapc.result) ^ (!val);
|
||||
|
||||
BX_CPU_THIS_PTR oszapc.auxbits &= ~(LF_MASK_PDB);
|
||||
BX_CPU_THIS_PTR oszapc.auxbits |= (temp_pdb << LF_BIT_PDB);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void clear_PF(void) {
|
||||
set_PF(0);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void assert_PF(void) {
|
||||
set_PF(1);
|
||||
}
|
||||
|
||||
// AF - bit 4 in EFLAGS, represented by bit LF_BIT_AF of oszapc.auxbits
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_AF(void) {
|
||||
return ((BX_CPU_THIS_PTR oszapc.auxbits >> LF_BIT_AF) & 1);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned get_AF(void) {
|
||||
return (BX_CPU_THIS_PTR oszapc.auxbits & LF_MASK_AF);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void set_AF(bx_bool val) {
|
||||
BX_CPU_THIS_PTR oszapc.auxbits &= ~(LF_MASK_AF);
|
||||
BX_CPU_THIS_PTR oszapc.auxbits |= (val) << LF_BIT_AF;
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void clear_AF(void) {
|
||||
BX_CPU_THIS_PTR oszapc.auxbits &= ~(LF_MASK_AF);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void assert_AF(void) {
|
||||
BX_CPU_THIS_PTR oszapc.auxbits |= (LF_MASK_AF);
|
||||
}
|
||||
|
||||
// CF
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_CF(void) {
|
||||
return ((BX_CPU_THIS_PTR oszapc.auxbits >> LF_BIT_CF) & 1);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned get_CF(void) {
|
||||
return (BX_CPU_THIS_PTR oszapc.auxbits & LF_MASK_CF);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void set_CF(bx_bool val) {
|
||||
bx_bool temp_of = getB_OF();
|
||||
SET_FLAGS_OxxxxC(temp_of, (val));
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void clear_CF(void) {
|
||||
bx_bool temp_of = getB_OF();
|
||||
SET_FLAGS_OxxxxC(temp_of, (0));
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void assert_CF(void) {
|
||||
bx_bool temp_of = getB_OF();
|
||||
SET_FLAGS_OxxxxC(temp_of, (1));
|
||||
}
|
||||
|
||||
// OF
|
||||
BX_SMF BX_CPP_INLINE unsigned getB_OF(void) {
|
||||
return ((BX_CPU_THIS_PTR oszapc.auxbits + (1U << LF_BIT_PO)) >> LF_BIT_CF) & 1;
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE unsigned get_OF(void) {
|
||||
return (BX_CPU_THIS_PTR oszapc.auxbits + (1U << LF_BIT_PO)) & (1U << LF_BIT_CF);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void set_OF(bx_bool val) {
|
||||
bx_bool temp_cf = getB_CF();
|
||||
SET_FLAGS_OxxxxC((val), temp_cf);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void clear_OF(void) {
|
||||
bx_bool temp_cf = getB_CF();
|
||||
SET_FLAGS_OxxxxC((0), temp_cf);
|
||||
}
|
||||
|
||||
BX_SMF BX_CPP_INLINE void assert_OF(void) {
|
||||
unsigned temp_cf = getB_CF();
|
||||
SET_FLAGS_OxxxxC((1), temp_cf);
|
||||
}
|
||||
|
||||
// constructors & destructors...
|
||||
BX_CPU_C(unsigned id = 0);
|
||||
~BX_CPU_C();
|
||||
|
@ -29,11 +29,6 @@
|
||||
#define BX_LF_SIGN_BIT 31
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
bx_address result;
|
||||
bx_address auxbits;
|
||||
} bx_lf_flags_entry;
|
||||
|
||||
// These are the lazy flags bits in oszapc.auxbits which hold lazy state
|
||||
// of zero flag, adjust flag, carry flag, and overflow flag.
|
||||
|
||||
@ -195,4 +190,214 @@ const Bit32u LF_MASK_PO = (0x01 << LF_BIT_PO);
|
||||
SET_FLAGS_OSZAxC_LOGIC_SIZE(64, (result_64))
|
||||
#endif
|
||||
|
||||
struct bx_lazyflags_entry {
|
||||
bx_address result;
|
||||
bx_address auxbits;
|
||||
|
||||
BX_CPP_INLINE unsigned getB_OF(void) const;
|
||||
BX_CPP_INLINE unsigned get_OF(void) const;
|
||||
BX_CPP_INLINE void set_OF(bx_bool val);
|
||||
BX_CPP_INLINE void clear_OF(void);
|
||||
BX_CPP_INLINE void assert_OF(void);
|
||||
|
||||
BX_CPP_INLINE unsigned getB_SF(void) const;
|
||||
BX_CPP_INLINE unsigned get_SF(void) const;
|
||||
BX_CPP_INLINE void set_SF(bx_bool val);
|
||||
BX_CPP_INLINE void clear_SF(void);
|
||||
BX_CPP_INLINE void assert_SF(void);
|
||||
|
||||
BX_CPP_INLINE unsigned getB_ZF(void) const;
|
||||
BX_CPP_INLINE unsigned get_ZF(void) const;
|
||||
BX_CPP_INLINE void set_ZF(bx_bool val);
|
||||
BX_CPP_INLINE void clear_ZF(void);
|
||||
BX_CPP_INLINE void assert_ZF(void);
|
||||
|
||||
BX_CPP_INLINE unsigned getB_AF(void) const;
|
||||
BX_CPP_INLINE unsigned get_AF(void) const;
|
||||
BX_CPP_INLINE void set_AF(bx_bool val);
|
||||
BX_CPP_INLINE void clear_AF(void);
|
||||
BX_CPP_INLINE void assert_AF(void);
|
||||
|
||||
BX_CPP_INLINE unsigned getB_PF(void) const;
|
||||
BX_CPP_INLINE unsigned get_PF(void) const;
|
||||
BX_CPP_INLINE void set_PF(bx_bool val);
|
||||
BX_CPP_INLINE void clear_PF(void);
|
||||
BX_CPP_INLINE void assert_PF(void);
|
||||
|
||||
BX_CPP_INLINE unsigned getB_CF(void) const;
|
||||
BX_CPP_INLINE unsigned get_CF(void) const;
|
||||
BX_CPP_INLINE void set_CF(bx_bool val);
|
||||
BX_CPP_INLINE void clear_CF(void);
|
||||
BX_CPP_INLINE void assert_CF(void);
|
||||
|
||||
BX_CPP_INLINE void set_flags_OxxxxC(Bit32u new_of, Bit32u new_cf)
|
||||
{
|
||||
Bit32u temp_po = new_of ^ new_cf;
|
||||
auxbits &= ~(LF_MASK_PO | LF_MASK_CF);
|
||||
auxbits |= (temp_po << LF_BIT_PO) | (new_cf << LF_BIT_CF);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void assert_flags_OxxxxC() { set_flags_OxxxxC(1,1); }
|
||||
};
|
||||
|
||||
/// OF ////////////////////////////////////////
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::getB_OF(void) const
|
||||
{
|
||||
return ((auxbits + (1U << LF_BIT_PO)) >> LF_BIT_CF) & 1;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::get_OF(void) const
|
||||
{
|
||||
return (auxbits + (1U << LF_BIT_PO)) & (1U << LF_BIT_CF);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::set_OF(bx_bool val)
|
||||
{
|
||||
bx_bool temp_cf = getB_CF();
|
||||
set_flags_OxxxxC(val, temp_cf);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::clear_OF(void)
|
||||
{
|
||||
bx_bool temp_cf = getB_CF();
|
||||
set_flags_OxxxxC(0, temp_cf);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::assert_OF(void)
|
||||
{
|
||||
unsigned temp_cf = getB_CF();
|
||||
set_flags_OxxxxC(1, temp_cf);
|
||||
}
|
||||
|
||||
/// SF ////////////////////////////////////////
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::getB_SF(void) const
|
||||
{
|
||||
return ((result >> BX_LF_SIGN_BIT) ^ (auxbits >> LF_BIT_SD)) & 1;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::get_SF(void) const { return getB_SF(); }
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::set_SF(bx_bool val)
|
||||
{
|
||||
bx_bool temp_sf = getB_SF();
|
||||
auxbits ^= (temp_sf ^ val) << LF_BIT_SD;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::clear_SF (void) { set_SF(0); }
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::assert_SF (void) { set_SF(1); }
|
||||
|
||||
/// ZF ////////////////////////////////////////
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::getB_ZF(void) const
|
||||
{
|
||||
return (0 == result);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::get_ZF(void) const { return getB_ZF(); }
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::set_ZF(bx_bool val)
|
||||
{
|
||||
if (val) assert_ZF();
|
||||
else clear_ZF();
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::clear_ZF(void)
|
||||
{
|
||||
result |= (1 << 8);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::assert_ZF(void)
|
||||
{
|
||||
// merge the sign bit into the Sign Delta
|
||||
auxbits ^= (((result >> BX_LF_SIGN_BIT) & 1) << LF_BIT_SD);
|
||||
|
||||
// merge the parity bits into the Parity Delta Byte
|
||||
Bit32u temp_pdb = (255 & result);
|
||||
auxbits ^= (temp_pdb << LF_BIT_PDB);
|
||||
|
||||
// now zero the .result value
|
||||
result = 0;
|
||||
}
|
||||
|
||||
/// AF ////////////////////////////////////////
|
||||
|
||||
// AF - bit 4 in EFLAGS, represented by bit LF_BIT_AF of oszapc.auxbits
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::getB_AF(void) const
|
||||
{
|
||||
return (auxbits >> LF_BIT_AF) & 1;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::get_AF(void) const
|
||||
{
|
||||
return (auxbits & LF_MASK_AF);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::set_AF(bx_bool val)
|
||||
{
|
||||
auxbits &= ~(LF_MASK_AF);
|
||||
auxbits |= (val) << LF_BIT_AF;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::clear_AF(void)
|
||||
{
|
||||
auxbits &= ~(LF_MASK_AF);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::assert_AF(void)
|
||||
{
|
||||
auxbits |= (LF_MASK_AF);
|
||||
}
|
||||
|
||||
/// PF ////////////////////////////////////////
|
||||
|
||||
// PF - bit 2 in EFLAGS, represented by lower 8 bits of oszapc.result
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::getB_PF(void) const
|
||||
{
|
||||
Bit32u temp = (255 & result);
|
||||
temp = temp ^ (255 & (auxbits >> LF_BIT_PDB));
|
||||
temp = (temp ^ (temp >> 4)) & 0x0F;
|
||||
return (0x9669U >> temp) & 1;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::get_PF(void) const { return getB_PF(); }
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::set_PF(bx_bool val)
|
||||
{
|
||||
Bit32u temp_pdb = (255 & result) ^ (!val);
|
||||
auxbits &= ~(LF_MASK_PDB);
|
||||
auxbits |= (temp_pdb << LF_BIT_PDB);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::clear_PF (void) { set_PF(0); }
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::assert_PF (void) { set_PF(1); }
|
||||
|
||||
/// CF ////////////////////////////////////////
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::getB_CF(void) const
|
||||
{
|
||||
return (auxbits >> LF_BIT_CF) & 1;
|
||||
}
|
||||
|
||||
BX_CPP_INLINE unsigned bx_lazyflags_entry::get_CF(void) const
|
||||
{
|
||||
return (auxbits & LF_MASK_CF);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::set_CF(bx_bool val)
|
||||
{
|
||||
bx_bool temp_of = getB_OF();
|
||||
set_flags_OxxxxC(temp_of, val);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::clear_CF(void)
|
||||
{
|
||||
bx_bool temp_of = getB_OF();
|
||||
set_flags_OxxxxC(temp_of, 0);
|
||||
}
|
||||
|
||||
BX_CPP_INLINE void bx_lazyflags_entry::assert_CF(void)
|
||||
{
|
||||
bx_bool temp_of = getB_OF();
|
||||
set_flags_OxxxxC(temp_of, 1);
|
||||
}
|
||||
|
||||
#endif // BX_LAZY_FLAGS_DEF
|
||||
|
@ -41,7 +41,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MUL_AXEwR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(product_16l);
|
||||
if(product_16h != 0)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -67,7 +67,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_AXEwR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(product_16l);
|
||||
if(product_32 != (Bit16s)product_32)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -140,7 +140,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_GwEwIwR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(product_16);
|
||||
if(product_32 != (Bit16s) product_32)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -164,7 +164,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_GwEwR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(product_16);
|
||||
if(product_32 != (Bit16s) product_32)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -41,7 +41,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MUL_EAXEdR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(product_32l);
|
||||
if(product_32h != 0)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -67,7 +67,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_EAXEdR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(product_32l);
|
||||
if(product_64 != (Bit32s)product_64)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -153,7 +153,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_GdEdIdR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(product_32);
|
||||
if(product_64 != (Bit32s) product_64)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -177,7 +177,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_GdEdR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(product_32);
|
||||
if(product_64 != (Bit32s) product_64)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -220,7 +220,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MUL_RAXEqR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(product_128.lo);
|
||||
if(product_128.hi != 0)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -252,7 +252,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_RAXEqR(bxInstruction_c *i)
|
||||
|
||||
/* magic compare between RDX:RAX and sign extended RAX */
|
||||
if (((Bit64u)(product_128.hi) + (product_128.lo >> 63)) != 0) {
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -349,7 +349,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_GqEqIdR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(product_128.lo);
|
||||
|
||||
if (((Bit64u)(product_128.hi) + (product_128.lo >> 63)) != 0) {
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -370,7 +370,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_GqEqR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(product_128.lo);
|
||||
|
||||
if (((Bit64u)(product_128.hi) + (product_128.lo >> 63)) != 0) {
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -41,7 +41,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MUL_ALEbR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(product_8l);
|
||||
if(product_8h != 0)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -66,7 +66,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::IMUL_ALEbR(bxInstruction_c *i)
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(product_8);
|
||||
if(product_16 != (Bit8s) product_16)
|
||||
{
|
||||
ASSERT_FLAGS_OxxxxC();
|
||||
BX_CPU_THIS_PTR oszapc.assert_flags_OxxxxC();
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -67,7 +67,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EwGwM(bxInstruction_c *i)
|
||||
|
||||
cf = (temp_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_16 >> 15); // of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -113,7 +113,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EwGwR(bxInstruction_c *i)
|
||||
|
||||
cf = (temp_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_16 >> 15); // of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -162,7 +162,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EwGwM(bxInstruction_c *i)
|
||||
cf = (op1_16 >> (count - 1)) & 0x1;
|
||||
of = ((Bit16u)((result_16 << 1) ^ result_16) >> 15) & 0x1; // of = result14 ^ result15
|
||||
if (count > 16) cf = (op2_16 >> (count - 17)) & 0x1; // undefined flags behavior matching real HW
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -208,7 +208,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EwGwR(bxInstruction_c *i)
|
||||
cf = (op1_16 >> (count - 1)) & 0x1;
|
||||
of = ((Bit16u)((result_16 << 1) ^ result_16) >> 15) & 0x1; // of = result14 ^ result15
|
||||
if (count > 16) cf = (op2_16 >> (count - 17)) & 0x1; // undefined flags behavior matching real HW
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -233,7 +233,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EwM(bxInstruction_c *i)
|
||||
bit0 = (op1_16 & 0x1);
|
||||
bit15 = (op1_16 >> 15);
|
||||
// of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit15, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit15, bit0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -246,7 +246,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EwM(bxInstruction_c *i)
|
||||
bit0 = (result_16 & 0x1);
|
||||
bit15 = (result_16 >> 15);
|
||||
// of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit15, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit15, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -269,7 +269,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EwR(bxInstruction_c *i)
|
||||
bit0 = (op1_16 & 0x1);
|
||||
bit15 = (op1_16 >> 15);
|
||||
// of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit15, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit15, bit0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -282,7 +282,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EwR(bxInstruction_c *i)
|
||||
bit0 = (result_16 & 0x1);
|
||||
bit15 = (result_16 >> 15);
|
||||
// of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit15, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit15, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -307,7 +307,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EwM(bxInstruction_c *i)
|
||||
bit14 = (op1_16 >> 14) & 1;
|
||||
bit15 = (op1_16 >> 15) & 1;
|
||||
// of = result14 ^ result15
|
||||
SET_FLAGS_OxxxxC(bit14 ^ bit15, bit15);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit14 ^ bit15, bit15);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -320,7 +320,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EwM(bxInstruction_c *i)
|
||||
bit14 = (result_16 >> 14) & 1;
|
||||
bit15 = (result_16 >> 15) & 1;
|
||||
// of = result14 ^ result15
|
||||
SET_FLAGS_OxxxxC(bit14 ^ bit15, bit15);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit14 ^ bit15, bit15);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -343,7 +343,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EwR(bxInstruction_c *i)
|
||||
bit14 = (op1_16 >> 14) & 1;
|
||||
bit15 = (op1_16 >> 15) & 1;
|
||||
// of = result14 ^ result15
|
||||
SET_FLAGS_OxxxxC(bit14 ^ bit15, bit15);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit14 ^ bit15, bit15);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -356,7 +356,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EwR(bxInstruction_c *i)
|
||||
bit14 = (result_16 >> 14) & 1;
|
||||
bit15 = (result_16 >> 15) & 1;
|
||||
// of = result14 ^ result15
|
||||
SET_FLAGS_OxxxxC(bit14 ^ bit15, bit15);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit14 ^ bit15, bit15);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -397,7 +397,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EwM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_16 >> (16 - count)) & 0x1;
|
||||
of = cf ^ (result_16 >> 15); // of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -436,7 +436,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EwR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_16 >> (16 - count)) & 0x1;
|
||||
of = cf ^ (result_16 >> 15); // of = cf ^ result15
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -468,7 +468,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EwM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_16 >> (count - 1)) & 0x1;
|
||||
of = ((Bit16u)((result_16 << 1) ^ result_16) >> 15) & 0x1; // of = result15 ^ result14
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -498,7 +498,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EwR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_16 >> (count - 1)) & 0x1;
|
||||
of = ((Bit16u)((result_16 << 1) ^ result_16) >> 15) & 0x1; // of = result15 ^ result14
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -534,7 +534,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EwM(bxInstruction_c *i)
|
||||
write_RMW_linear_word(result_16);
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(result_16);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -568,7 +568,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EwR(bxInstruction_c *i)
|
||||
BX_WRITE_16BIT_REG(i->dst(), result_16);
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(result_16);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -601,7 +601,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EwM(bxInstruction_c *i)
|
||||
of = ((Bit16u)((result_16 << 1) ^ result_16) >> 15) & 0x1;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(result_16);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -630,7 +630,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EwR(bxInstruction_c *i)
|
||||
of = ((Bit16u)((result_16 << 1) ^ result_16) >> 15) & 0x1;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(result_16);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -657,7 +657,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EwM(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(result_16);
|
||||
/* signed overflow cannot happen in SAR instruction */
|
||||
SET_FLAGS_OxxxxC(0, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf);
|
||||
|
||||
write_RMW_linear_word(result_16);
|
||||
}
|
||||
@ -685,7 +685,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EwR(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_16(result_16);
|
||||
/* signed overflow cannot happen in SAR instruction */
|
||||
SET_FLAGS_OxxxxC(0, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -51,7 +51,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EdGdM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_32 >> 31); // of = cf ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -85,7 +85,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EdGdR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_32 >> 31); // of = cf ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -118,7 +118,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EdGdM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (count - 1)) & 0x1;
|
||||
of = ((result_32 << 1) ^ result_32) >> 31; // of = result30 ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -152,7 +152,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EdGdR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (count - 1)) & 0x1;
|
||||
of = ((result_32 << 1) ^ result_32) >> 31; // of = result30 ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -181,7 +181,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EdM(bxInstruction_c *i)
|
||||
unsigned bit0 = (result_32 & 0x1);
|
||||
unsigned bit31 = (result_32 >> 31);
|
||||
// of = cf ^ result31
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit31, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit31, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -211,7 +211,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EdR(bxInstruction_c *i)
|
||||
bit0 = (result_32 & 0x1);
|
||||
bit31 = (result_32 >> 31);
|
||||
// of = cf ^ result31
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit31, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit31, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -241,7 +241,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EdM(bxInstruction_c *i)
|
||||
bit31 = (result_32 >> 31) & 1;
|
||||
bit30 = (result_32 >> 30) & 1;
|
||||
// of = result30 ^ result31
|
||||
SET_FLAGS_OxxxxC(bit30 ^ bit31, bit31);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit30 ^ bit31, bit31);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -271,7 +271,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EdR(bxInstruction_c *i)
|
||||
bit31 = (result_32 >> 31) & 1;
|
||||
bit30 = (result_32 >> 30) & 1;
|
||||
// of = result30 ^ result31
|
||||
SET_FLAGS_OxxxxC(bit30 ^ bit31, bit31);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit30 ^ bit31, bit31);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -311,7 +311,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EdM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_32 >> 31); // of = cf ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -349,7 +349,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EdR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_32 >> 31); // of = cf ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -389,7 +389,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EdM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (count - 1)) & 0x1;
|
||||
of = ((result_32 << 1) ^ result_32) >> 31; // of = result30 ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -428,7 +428,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EdR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_32 >> (count - 1)) & 0x1;
|
||||
of = ((result_32 << 1) ^ result_32) >> 31; // of = result30 ^ result31
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -458,7 +458,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EdM(bxInstruction_c *i)
|
||||
cf = (op1_32 >> (32 - count)) & 0x1;
|
||||
of = cf ^ (result_32 >> 31);
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(result_32);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -490,7 +490,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EdR(bxInstruction_c *i)
|
||||
unsigned of = cf ^ (result_32 >> 31);
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(result_32);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -522,7 +522,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EdM(bxInstruction_c *i)
|
||||
unsigned of = ((result_32 << 1) ^ result_32) >> 31;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(result_32);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -553,7 +553,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EdR(bxInstruction_c *i)
|
||||
unsigned of = ((result_32 << 1) ^ result_32) >> 31;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(result_32);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -582,7 +582,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EdM(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(result_32);
|
||||
unsigned cf = (op1_32 >> (count - 1)) & 1;
|
||||
SET_FLAGS_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -612,7 +612,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EdR(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_32(result_32);
|
||||
unsigned cf = (op1_32 >> (count - 1)) & 1;
|
||||
SET_FLAGS_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -55,7 +55,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EqGqM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (64 - count)) & 0x1;
|
||||
of = cf ^ (result_64 >> 63); // of = cf ^ result63
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -86,7 +86,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHLD_EqGqR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (64 - count)) & 0x1;
|
||||
of = cf ^ (result_64 >> 63); // of = cf ^ result63
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -121,7 +121,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EqGqM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (count - 1)) & 0x1;
|
||||
of = ((result_64 << 1) ^ result_64) >> 63; // of = result62 ^ result63
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -152,7 +152,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHRD_EqGqR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (count - 1)) & 0x1;
|
||||
of = ((result_64 << 1) ^ result_64) >> 63; // of = result62 ^ result63
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -181,7 +181,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EqM(bxInstruction_c *i)
|
||||
unsigned bit0 = (result_64 & 0x1);
|
||||
unsigned bit63 = (result_64 >> 63);
|
||||
// of = cf ^ result63
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit63, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit63, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -206,7 +206,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EqR(bxInstruction_c *i)
|
||||
unsigned bit0 = (result_64 & 0x1);
|
||||
unsigned bit63 = (result_64 >> 63);
|
||||
// of = cf ^ result63
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit63, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit63, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -235,7 +235,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EqM(bxInstruction_c *i)
|
||||
unsigned bit63 = (result_64 >> 63) & 1;
|
||||
unsigned bit62 = (result_64 >> 62) & 1;
|
||||
// of = result62 ^ result63
|
||||
SET_FLAGS_OxxxxC(bit62 ^ bit63, bit63);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit62 ^ bit63, bit63);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -260,7 +260,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EqR(bxInstruction_c *i)
|
||||
unsigned bit63 = (result_64 >> 63) & 1;
|
||||
unsigned bit62 = (result_64 >> 62) & 1;
|
||||
// of = result62 ^ result63
|
||||
SET_FLAGS_OxxxxC(bit62 ^ bit63, bit63);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit62 ^ bit63, bit63);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -301,7 +301,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EqM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (64 - count)) & 0x1;
|
||||
of = cf ^ (result_64 >> 63); // of = cf ^ result63
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -339,7 +339,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EqR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (64 - count)) & 0x1;
|
||||
of = cf ^ (result_64 >> 63); // of = cf ^ result63
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -379,7 +379,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EqM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (count - 1)) & 0x1;
|
||||
of = ((result_64 << 1) ^ result_64) >> 63;
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -417,7 +417,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EqR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_64 >> (count - 1)) & 0x1;
|
||||
of = ((result_64 << 1) ^ result_64) >> 63;
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -447,7 +447,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EqM(bxInstruction_c *i)
|
||||
write_RMW_linear_qword(result_64);
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(result_64);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -475,7 +475,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EqR(bxInstruction_c *i)
|
||||
cf = (op1_64 >> (64 - count)) & 0x1;
|
||||
of = cf ^ (result_64 >> 63);
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(result_64);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -507,7 +507,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EqM(bxInstruction_c *i)
|
||||
unsigned of = ((result_64 << 1) ^ result_64) >> 63;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(result_64);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -535,7 +535,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EqR(bxInstruction_c *i)
|
||||
unsigned of = ((result_64 << 1) ^ result_64) >> 63;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(result_64);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -564,7 +564,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EqM(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(result_64);
|
||||
unsigned cf = (op1_64 >> (count - 1)) & 1;
|
||||
SET_FLAGS_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -591,7 +591,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EqR(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_64(result_64);
|
||||
unsigned cf = (op1_64 >> (count - 1)) & 1;
|
||||
SET_FLAGS_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf); /* signed overflow cannot happen in SAR instruction */
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
@ -40,7 +40,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EbR(bxInstruction_c *i)
|
||||
if (count & 0x18) {
|
||||
bit0 = (op1_8 & 1);
|
||||
bit7 = (op1_8 >> 7);
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit7, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit7, bit0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -56,7 +56,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EbR(bxInstruction_c *i)
|
||||
bit0 = (result_8 & 1);
|
||||
bit7 = (result_8 >> 7);
|
||||
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit7, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit7, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -80,7 +80,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EbM(bxInstruction_c *i)
|
||||
if (count & 0x18) {
|
||||
bit0 = (op1_8 & 1);
|
||||
bit7 = (op1_8 >> 7);
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit7, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit7, bit0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -96,7 +96,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROL_EbM(bxInstruction_c *i)
|
||||
bit0 = (result_8 & 1);
|
||||
bit7 = (result_8 >> 7);
|
||||
|
||||
SET_FLAGS_OxxxxC(bit0 ^ bit7, bit0);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit0 ^ bit7, bit0);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -119,7 +119,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EbR(bxInstruction_c *i)
|
||||
bit6 = (op1_8 >> 6) & 1;
|
||||
bit7 = (op1_8 >> 7) & 1;
|
||||
|
||||
SET_FLAGS_OxxxxC(bit6 ^ bit7, bit7);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit6 ^ bit7, bit7);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -135,7 +135,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EbR(bxInstruction_c *i)
|
||||
bit6 = (result_8 >> 6) & 1;
|
||||
bit7 = (result_8 >> 7) & 1;
|
||||
|
||||
SET_FLAGS_OxxxxC(bit6 ^ bit7, bit7);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit6 ^ bit7, bit7);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -160,7 +160,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EbM(bxInstruction_c *i)
|
||||
bit6 = (op1_8 >> 6) & 1;
|
||||
bit7 = (op1_8 >> 7) & 1;
|
||||
|
||||
SET_FLAGS_OxxxxC(bit6 ^ bit7, bit7);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit6 ^ bit7, bit7);
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -176,7 +176,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::ROR_EbM(bxInstruction_c *i)
|
||||
bit6 = (result_8 >> 6) & 1;
|
||||
bit7 = (result_8 >> 7) & 1;
|
||||
|
||||
SET_FLAGS_OxxxxC(bit6 ^ bit7, bit7);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(bit6 ^ bit7, bit7);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -215,7 +215,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EbR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_8 >> (8 - count)) & 0x01;
|
||||
of = cf ^ (result_8 >> 7); // of = cf ^ result7
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -255,7 +255,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCL_EbM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_8 >> (8 - count)) & 0x01;
|
||||
of = cf ^ (result_8 >> 7); // of = cf ^ result7
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -284,7 +284,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EbR(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_8 >> (count - 1)) & 0x1;
|
||||
of = (((result_8 << 1) ^ result_8) >> 7) & 0x1; // of = result6 ^ result7
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -316,7 +316,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RCR_EbM(bxInstruction_c *i)
|
||||
|
||||
cf = (op1_8 >> (count - 1)) & 0x1;
|
||||
of = (((result_8 << 1) ^ result_8) >> 7) & 0x1; // of = result6 ^ result7
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -353,7 +353,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EbR(bxInstruction_c *i)
|
||||
BX_WRITE_8BIT_REGx(i->dst(), i->extend8bitL(), result_8);
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(result_8);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -391,7 +391,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHL_EbM(bxInstruction_c *i)
|
||||
write_RMW_linear_byte(result_8);
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(result_8);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
}
|
||||
@ -418,7 +418,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EbR(bxInstruction_c *i)
|
||||
unsigned of = (((result_8 << 1) ^ result_8) >> 7) & 0x1;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(result_8);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -450,7 +450,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SHR_EbM(bxInstruction_c *i)
|
||||
unsigned of = (((result_8 << 1) ^ result_8) >> 7) & 0x1;
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(result_8);
|
||||
SET_FLAGS_OxxxxC(of, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(of, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -476,7 +476,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EbR(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(result_8);
|
||||
/* signed overflow cannot happen in SAR instruction */
|
||||
SET_FLAGS_OxxxxC(0, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
@ -506,7 +506,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SAR_EbM(bxInstruction_c *i)
|
||||
|
||||
SET_FLAGS_OSZAPC_LOGIC_8(result_8);
|
||||
/* signed overflow cannot happen in SAR instruction */
|
||||
SET_FLAGS_OxxxxC(0, cf);
|
||||
BX_CPU_THIS_PTR oszapc.set_flags_OxxxxC(0, cf);
|
||||
}
|
||||
|
||||
BX_NEXT_INSTR(i);
|
||||
|
Loading…
Reference in New Issue
Block a user