diff --git a/src/spider/runtime/instr/Instr_020-03F.cpp b/src/spider/runtime/instr/Instr_020-03F.cpp index 42d1838..7aa8e39 100644 --- a/src/spider/runtime/instr/Instr_020-03F.cpp +++ b/src/spider/runtime/instr/Instr_020-03F.cpp @@ -13,14 +13,13 @@ namespace spider { fetchOperDst(); switch(_size){ case 0b00: //byte - - _dst->_u8 = _src->_u8 == 0; + _dst->_u8 |= (1 << _src->_u8); case 0b01: //short - _dst->_u16 = 1; + _dst->_u16 |= (1 << _src->_u16); case 0b10: //int - _dst->_u32 = 1; + _dst->_u32 |= (1 << _src->_u32); case 0b11: //long - _dst->_u64 = 1; + _dst->_u64 |= (1 << _src->_u64); } (this->*_post)(); } @@ -31,13 +30,13 @@ namespace spider { fetchOperDst(); switch(_size){ case 0b00: //byte - _dst->_u8 = 1; + _dst->_u8 &= ~(1 << _src->_u8); case 0b01: //short - _dst->_u16 = 1; + _dst->_u16 &= ~(1 << _src->_u16); case 0b10: //int - _dst->_u32 = 1; + _dst->_u32 &= ~(1 << _src->_u32); case 0b11: //long - _dst->_u64 = 1; + _dst->_u64 &= ~(1 << _src->_u64); } (this->*_post)(); } @@ -48,13 +47,37 @@ namespace spider { fetchOperDst(); switch(_size){ case 0b00: //byte - _dst->_u8 = 1; + switch (((RF >> _src->_u8) & 1) != ((_dst->_u8 >> _src->_u8) & 1)){ + case 1: + RF |= (1 << _src->_u8); + + case 0: + RF &= ~(1 << _src->_u8); + } case 0b01: //short - _dst->_u16 = 1; + switch (((RF >> _src->_u16) & 1) != ((_dst->_u16 >> _src->_u16) & 1)){ + case 1: + RF |= (1 << _src->_u16); + + case 0: + RF &= ~(1 << _src->_u16); + } case 0b10: //int - _dst->_u32 = 1; + switch (((RF >> _src->_u32) & 1) != ((_dst->_u32 >> _src->_u32) & 1)){ + case 1: + RF |= (1 << _src->_u32); + + case 0: + RF &= ~(1 << _src->_u32); + } case 0b11: //long - _dst->_u64 = 1; + switch (((RF >> _src->_u64) & 1) != ((_dst->_u64 >> _src->_u64) & 1)){ + case 1: + RF |= (1 << _src->_u64); + + case 0: + RF &= ~(1 << _src->_u64); + } } (this->*_post)(); }