added interns easter eggs, compiles now

This commit is contained in:
2026-06-13 12:45:29 -06:00
parent a36705a931
commit 0c21587e15
9 changed files with 473 additions and 142 deletions
+35 -62
View File
@@ -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;
}
}