/** * @brief AUTO-GENERATED by pygen.ipynb BUT editable by hand! * */ #include namespace spider { void CPU::NOP() { // TODO: Implement NOP } void CPU::SPDR() { // TODO: Implement SPDR } void CPU::MMODE() { // TODO: Implement MMODE } void CPU::INT() { // TODO: Implement INT } void CPU::LRV() { // TODO: Implement LRV } void CPU::FSR() { // TODO: Implement FSR } void CPU::FIR() { // TODO: Implement FIR } void CPU::FZR() { // TODO: Implement FZR } void CPU::LSR() { // TODO: Implement LSR } void CPU::FVR() { // TODO: Implement FVR } void CPU::MOV() { // TODO: Implement MOV } void CPU::MOR() { // TODO: Implement MOR } void CPU::AMOV() { // TODO: Implement AMOV } void CPU::SWP() { // TODO: Implement SWP } void CPU::AHM() { // TODO: Implement AHM } void CPU::COM() { fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 = ~_dst->_u8; break; case 0b01: //short _dst->_u16 = ~_dst->_u16; break; case 0b10: //int _dst->_u32 = ~_dst->_u32; break; case 0b11: //long _dst->_u64 = ~_dst->_u64; break; } (this->*_post)(); } void CPU::NEG() { // TODO: Implement NEG fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 = 1 + ~_dst->_u8; break; case 0b01: //short _dst->_u16 = 1+ ~_dst->_u16; break; case 0b10: //int _dst->_u32 = 1 + ~_dst->_u32; break; case 0b11: //long _dst->_u64 = 1 + ~_dst->_u64; break; } (this->*_post)(); } void CPU::EXS() { // THIS IS INCORRECT!!! // TODO: Implement EXS fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_i16 = static_cast(_dst->_i8); break; case 0b01: //short _dst->_i32 = static_cast(_dst->_i16); break; case 0b10: //int _dst->_i64 = static_cast(_dst->_i32); break; case 0b11: //long _dst->_i64 = _dst->_i64; break; } _dst->_u32 = _dst->_u8; (this->*_post)(); } void CPU::INC() { // TODO: Implement INC fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 += 1; case 0b01: //short _dst->_u16 += 1; case 0b10: //int _dst->_u32 += 1; case 0b11: //long _dst->_u64 += 1; } (this->*_post)(); } void CPU::DEC() { // TODO: Implement DEC fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 -= 1; case 0b01: //short _dst->_u16 -= 1; case 0b10: //int _dst->_u32 -= 1; case 0b11: //long _dst->_u64 -= 1; } (this->*_post)(); } void CPU::ADD() { // TODO: Implement ADD fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 += _src->_u8; case 0b01: //short _dst->_u16 += _src->_u16; case 0b10: //int _dst->_u32 += _src->_u32; case 0b11: //long _dst->_u64 += _src->_u64; } (this->*_post)(); } void CPU::SUB() { // TODO: Implement SUB fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 -= _src->_u8; case 0b01: //short _dst->_u16 -= _src->_u16; case 0b10: //int _dst->_u32 -= _src->_u32; case 0b11: //long _dst->_u64 -= _src->_u64; } (this->*_post)(); } void CPU::MUL() { // TODO: Implement MUL fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_i8 = _src->_i8 * _dst->_i8; case 0b01: //short _dst->_i16 = _src->_i16 * _dst->_i16; case 0b10: //int _dst->_i32 = _src->_i32 * _dst->_i32; case 0b11: //long _dst->_i64 = _src->_i64 * _dst->_i64; } (this->*_post)(); } void CPU::UMUL() { // TODO: Implement UMUL fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 = _src->_u8 * _dst->_u8; case 0b01: //short _dst->_u16 = _src->_u16 * _dst->_u16; case 0b10: //int _dst->_u32 = _src->_u32 * _dst->_u32; case 0b11: //long _dst->_u64 = _src->_u64 * _dst->_u64; } (this->*_post)(); } void CPU::DIV() { // TODO: Implement DIV fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_i8 = _dst->_i8 / _src->_i8; case 0b01: //short _dst->_i16 = _dst->_i16 / _src->_i16; case 0b10: //int _dst->_i32 = _dst->_i32 / _src->_i32; case 0b11: //long _dst->_i64 = _dst->_i64 / _src->_i64; } (this->*_post)(); } void CPU::UDIV() { // TODO: Implement UDIV fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 = _dst->_u8 / _src->_u8; case 0b01: //short _dst->_u16 = _dst->_u16 / _src->_u16; case 0b10: //int _dst->_u32 = _dst->_u32 / _src->_u32; case 0b11: //long _dst->_u64 = _dst->_u64 / _src->_u64; } (this->*_post)(); } void CPU::MOD() { // TODO: Implement MOD fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_i8 = _dst->_i8 % _src->_i8; case 0b01: //short _dst->_i16 = _dst->_i16 % _src->_i16; case 0b10: //int _dst->_i32 = _dst->_i32 % _src->_i32; case 0b11: //long _dst->_i64 = _dst->_i64 % _src->_i64; } (this->*_post)(); } void CPU::UMOD() { // TODO: Implement UMOD fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte _dst->_u8 = _dst->_u8 % _src->_u8; case 0b01: //short _dst->_u16 = _dst->_u16 % _src->_u16; case 0b10: //int _dst->_u32 = _dst->_u32 % _src->_u32; case 0b11: //long _dst->_u64 = _dst->_u64 % _src->_u64; } (this->*_post)(); } void CPU::DMOD() { // TODO: Implement DMOD fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte RX._i8 = _dst->_i8 / _src->_i8; RY._i8 = _dst->_i8 % _src->_i8; case 0b01: //short RX._i16 = _dst->_i16 / _src->_i16; RY._i16 = _dst->_i16 % _src->_i16; case 0b10: //int RX._i32 = _dst->_i32 / _src->_i32; RY._i32 = _dst->_i32 % _src->_i32; case 0b11: //long RX._i64 = _dst->_i64 / _src->_i64; RY._i64 = _dst->_i64 % _src->_i64; } (this->*_post)(); } void CPU::UDMD() { // TODO: Implement UDMD fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte RX._u8 = _dst->_u8 / _src->_u8; RY._u8 = _dst->_u8 % _src->_u8; case 0b01: //short RX._u16 = _dst->_u16 / _src->_u16; RY._u16 = _dst->_u16 % _src->_u16; case 0b10: //int RX._u32 = _dst->_u32 / _src->_u32; RY._u32 = _dst->_u32 % _src->_u32; case 0b11: //long RX._u64 = _dst->_u64 / _src->_u64; RY._u64 = _dst->_u64 % _src->_u64; } (this->*_post)(); } void CPU::FBT() { // TODO: Implement FBT fetchOperDst(); switch(_size){ case 0b00: //byte RF = (RF & ~(0x3 << 9)) | ((_dst->_u8 >> 9) & 0x3) << 9; case 0b01: //short RF = (RF & ~(0x3 << 9)) | ((_dst->_u16 >> 9) & 0x3) << 9; case 0b10: //int RF = (RF & ~(0x3 << 9)) | ((_dst->_u32 >> 9) & 0x3) << 9; case 0b11: //long RF = (RF & ~(0x3 << 9)) | ((_dst->_u64 >> 9) & 0x3) << 9; } (this->*_post)(); } }