added interns easter eggs, compiles now
This commit is contained in:
@@ -8,7 +8,6 @@
|
||||
namespace spider {
|
||||
|
||||
void CPU::STB() {
|
||||
// TODO: Implement STB
|
||||
fetchOperSrc();
|
||||
fetchOperDst();
|
||||
switch(_size){
|
||||
@@ -28,92 +27,66 @@ namespace spider {
|
||||
}
|
||||
|
||||
void CPU::CRB() {
|
||||
// TODO: Implement CRB
|
||||
fetchOperSrc();
|
||||
fetchOperDst();
|
||||
switch(_size){
|
||||
case 0b00: //byte
|
||||
_dst->_u8 &= ~(1 << _src->_u8);
|
||||
_dst->_u8 &= u8(~(u8(1) << _src->_u8));
|
||||
break;
|
||||
case 0b01: //short
|
||||
_dst->_u16 &= ~(1 << _src->_u16);
|
||||
_dst->_u16 &= u16(~(u16(1) << _src->_u16));
|
||||
break;
|
||||
case 0b10: //int
|
||||
_dst->_u32 &= ~(1 << _src->_u32);
|
||||
_dst->_u32 &= ~(u32(1) << _src->_u32);
|
||||
break;
|
||||
case 0b11: //long
|
||||
_dst->_u64 &= ~(1 << _src->_u64);
|
||||
_dst->_u64 &= ~(u64(1) << _src->_u64);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CPU::TSB() {
|
||||
// TODO: Implement TSB
|
||||
fetchOperSrc();
|
||||
fetchOperDst();
|
||||
switch(_size){
|
||||
case 0b00: //byte
|
||||
switch (((RF >> _src->_u8) & 1) != ((_dst->_u8 >> _src->_u8) & 1)){
|
||||
case 1:
|
||||
RF |= (1 << _src->_u8);
|
||||
break;
|
||||
|
||||
case 0:
|
||||
RF &= ~(1 << _src->_u8);
|
||||
break;
|
||||
}
|
||||
|
||||
u64 s, d;
|
||||
switch(_size) {
|
||||
case 0b00: // byte
|
||||
s = _src->_u8;
|
||||
d = _dst->_u8;
|
||||
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;
|
||||
}
|
||||
case 0b01: // short
|
||||
s = _src->_u16;
|
||||
d = _dst->_u16;
|
||||
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;
|
||||
}
|
||||
case 0b10: // int
|
||||
s = _src->_u32;
|
||||
d = _dst->_u32;
|
||||
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;
|
||||
}
|
||||
case 0b11: // long
|
||||
s = _src->_u64;
|
||||
d = _dst->_u64;
|
||||
break;
|
||||
}
|
||||
|
||||
d >>= s;
|
||||
d &= 1;
|
||||
}
|
||||
|
||||
void CPU::BOOL() {
|
||||
// TODO: Implement BOOL
|
||||
fetchOperDst();
|
||||
switch(_size){
|
||||
case 0b00: //byte
|
||||
_dst->_u8 = _dst != 0;
|
||||
case 0b00: // byte
|
||||
_dst->_u8 = _dst->_u8 != 0;
|
||||
break;
|
||||
case 0b01: //short
|
||||
_dst->_u16 = _dst != 0;
|
||||
case 0b01: // short
|
||||
_dst->_u16 = _dst->_u16 != 0;
|
||||
break;
|
||||
case 0b10: //int
|
||||
_dst->_u32 = _dst != 0;
|
||||
case 0b10: // int
|
||||
_dst->_u32 = _dst->_u32 != 0;
|
||||
break;
|
||||
case 0b11: //long
|
||||
_dst->_u64 = _dst != 0;
|
||||
case 0b11: // long
|
||||
_dst->_u64 = _dst->_u64 != 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -238,11 +211,11 @@ namespace spider {
|
||||
// ── 0x02D — CNT: Counts bits (# of 1's into Dst) ──
|
||||
void CPU::CNT() {
|
||||
fetchOperDst();
|
||||
switch(_size) {
|
||||
case 0b00: _dst->_u8 = __builtin_popcount(_dst->_u8); break;
|
||||
case 0b01: _dst->_u16 = __builtin_popcount(_dst->_u16); break;
|
||||
case 0b10: _dst->_u32 = __builtin_popcount(_dst->_u32); break;
|
||||
case 0b11: _dst->_u64 = __builtin_popcountll(_dst->_u64); break;
|
||||
switch(_size) { // C++20 cross compatible version!!
|
||||
case 0b00: _dst->_u8 = u8( std::popcount(_dst->_u8) ); break;
|
||||
case 0b01: _dst->_u16 = u16(std::popcount(_dst->_u16)); break;
|
||||
case 0b10: _dst->_u32 = u32(std::popcount(_dst->_u32)); break;
|
||||
case 0b11: _dst->_u64 = u64(std::popcount(_dst->_u64)); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user