Compare commits
2 Commits
0ad9172dce
...
3f6b064e32
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f6b064e32 | |||
| 525a9d806b |
+24
-24
@@ -14,14 +14,17 @@ namespace spider {
|
||||
switch(_size){
|
||||
case 0b00: //byte
|
||||
_dst->_u8 |= (1 << _src->_u8);
|
||||
break;
|
||||
case 0b01: //short
|
||||
_dst->_u16 |= (1 << _src->_u16);
|
||||
break;
|
||||
case 0b10: //int
|
||||
_dst->_u32 |= (1 << _src->_u32);
|
||||
break;
|
||||
case 0b11: //long
|
||||
_dst->_u64 |= (1 << _src->_u64);
|
||||
break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
void CPU::CRB() {
|
||||
@@ -31,14 +34,17 @@ namespace spider {
|
||||
switch(_size){
|
||||
case 0b00: //byte
|
||||
_dst->_u8 &= ~(1 << _src->_u8);
|
||||
break;
|
||||
case 0b01: //short
|
||||
_dst->_u16 &= ~(1 << _src->_u16);
|
||||
break;
|
||||
case 0b10: //int
|
||||
_dst->_u32 &= ~(1 << _src->_u32);
|
||||
break;
|
||||
case 0b11: //long
|
||||
_dst->_u64 &= ~(1 << _src->_u64);
|
||||
break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
void CPU::TSB() {
|
||||
@@ -50,36 +56,47 @@ namespace spider {
|
||||
switch (((RF >> _src->_u8) & 1) != ((_dst->_u8 >> _src->_u8) & 1)){
|
||||
case 1:
|
||||
RF |= (1 << _src->_u8);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
RF &= ~(1 << _src->_u8);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0b01: //short
|
||||
switch (((RF >> _src->_u16) & 1) != ((_dst->_u16 >> _src->_u16) & 1)){
|
||||
case 1:
|
||||
RF |= (1 << _src->_u16);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
RF &= ~(1 << _src->_u16);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0b10: //int
|
||||
switch (((RF >> _src->_u32) & 1) != ((_dst->_u32 >> _src->_u32) & 1)){
|
||||
case 1:
|
||||
RF |= (1 << _src->_u32);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
RF &= ~(1 << _src->_u32);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0b11: //long
|
||||
switch (((RF >> _src->_u64) & 1) != ((_dst->_u64 >> _src->_u64) & 1)){
|
||||
case 1:
|
||||
RF |= (1 << _src->_u64);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
RF &= ~(1 << _src->_u64);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
void CPU::BOOL() {
|
||||
@@ -88,14 +105,17 @@ namespace spider {
|
||||
switch(_size){
|
||||
case 0b00: //byte
|
||||
_dst->_u8 = _dst != 0;
|
||||
break;
|
||||
case 0b01: //short
|
||||
_dst->_u16 = _dst != 0;
|
||||
break;
|
||||
case 0b10: //int
|
||||
_dst->_u32 = _dst != 0;
|
||||
break;
|
||||
case 0b11: //long
|
||||
_dst->_u64 = _dst != 0;
|
||||
break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x024 — NOT: Tests Dst == 0, updates Equal Flag ──
|
||||
@@ -117,7 +137,6 @@ namespace spider {
|
||||
RF &= ~CPU::FLAG_EQUAL;
|
||||
_dst->_u64 = 0;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x025 — AND
|
||||
@@ -130,7 +149,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 &= _src->_u32; break;
|
||||
case 0b11: _dst->_u64 &= _src->_u64; break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x026 — OR
|
||||
@@ -143,7 +161,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 |= _src->_u32; break;
|
||||
case 0b11: _dst->_u64 |= _src->_u64; break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x027 — XOR
|
||||
@@ -156,7 +173,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 ^= _src->_u32; break;
|
||||
case 0b11: _dst->_u64 ^= _src->_u64; break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x028 — SHL
|
||||
@@ -169,7 +185,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 <<= _src->_u32; break;
|
||||
case 0b11: _dst->_u64 <<= _src->_u64; break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x029 — SHR
|
||||
@@ -182,7 +197,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 >>= _src->_u32; break;
|
||||
case 0b11: _dst->_u64 >>= _src->_u64; break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x02A — SSR
|
||||
@@ -195,7 +209,6 @@ namespace spider {
|
||||
case 0b10: _dst->_i32 >>= _src->_u8; break;
|
||||
case 0b11: _dst->_i64 >>= _src->_u8; break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x02B — ROL: Rotate Left ──
|
||||
@@ -208,7 +221,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 = (_dst->_u32 << _src->_u8) | (_dst->_u32 >> (32 - _src->_u8)); break;
|
||||
case 0b11: _dst->_u64 = (_dst->_u64 << _src->_u8) | (_dst->_u64 >> (64 - _src->_u8)); break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x02C — ROR: Rotate Right ──
|
||||
@@ -221,7 +233,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 = (_dst->_u32 >> _src->_u8) | (_dst->_u32 << (32 - _src->_u8)); break;
|
||||
case 0b11: _dst->_u64 = (_dst->_u64 >> _src->_u8) | (_dst->_u64 << (64 - _src->_u8)); break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x02D — CNT: Counts bits (# of 1's into Dst) ──
|
||||
@@ -233,7 +244,6 @@ namespace spider {
|
||||
case 0b10: _dst->_u32 = __builtin_popcount(_dst->_u32); break;
|
||||
case 0b11: _dst->_u64 = __builtin_popcountll(_dst->_u64); break;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x030 — EQ: Dst == Src into Dst ──
|
||||
@@ -248,7 +258,6 @@ namespace spider {
|
||||
case 0b11: res = (_dst->_u64 == _src->_u64); break;
|
||||
}
|
||||
_dst->_u64 = res ? 1 : 0;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x031 — NE: Dst != Src into Dst ──
|
||||
@@ -263,7 +272,6 @@ namespace spider {
|
||||
case 0b11: res = (_dst->_u64 != _src->_u64); break;
|
||||
}
|
||||
_dst->_u64 = res ? 1 : 0;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x032 — GT: Dst > Src into Dst ──
|
||||
@@ -278,7 +286,6 @@ namespace spider {
|
||||
case 0b11: res = (_dst->_i64 > _src->_i64); break;
|
||||
}
|
||||
_dst->_u64 = res ? 1 : 0;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x033 — GE: Dst >= Src into Dst ──
|
||||
@@ -293,7 +300,6 @@ namespace spider {
|
||||
case 0b11: res = (_dst->_i64 >= _src->_i64); break;
|
||||
}
|
||||
_dst->_u64 = res ? 1 : 0;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x034 — LT: Dst < Src into Dst ──
|
||||
@@ -308,7 +314,6 @@ namespace spider {
|
||||
case 0b11: res = (_dst->_i64 < _src->_i64); break;
|
||||
}
|
||||
_dst->_u64 = res ? 1 : 0;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x035 — LE: Dst <= Src into Dst ──
|
||||
@@ -323,7 +328,6 @@ namespace spider {
|
||||
case 0b11: res = (_dst->_i64 <= _src->_i64); break;
|
||||
}
|
||||
_dst->_u64 = res ? 1 : 0;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x038 — JMP: Dst -> Instruction Register (PC) ──
|
||||
@@ -338,7 +342,6 @@ namespace spider {
|
||||
case 0b11: target = _dst->_u64; break;
|
||||
}
|
||||
RI = target - 1;
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x039 — JEQ: Jump if EQ flag is set ──
|
||||
@@ -354,7 +357,6 @@ namespace spider {
|
||||
}
|
||||
RI = target - 1;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x03A — JNE: Jumps if EQ flag is cleared ──
|
||||
@@ -370,7 +372,6 @@ namespace spider {
|
||||
}
|
||||
RI = target - 1;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x03B — JIF: Jumps if Src is booleanly true ──
|
||||
@@ -387,7 +388,6 @@ namespace spider {
|
||||
}
|
||||
RI = target - 1;
|
||||
}
|
||||
(this->*_post)();
|
||||
}
|
||||
|
||||
// ── 0x03C — JMR: Dst + Instruction Register -> Instruction Register ──
|
||||
|
||||
Reference in New Issue
Block a user