#pragma once
#include <common.hpp>
namespace n64 {
constexpr u8 SPECIAL    = 0b000000;
constexpr u8 REGIMM     = 0b000001;
constexpr u8 J          = 0b000010;
constexpr u8 JAL        = 0b000011;
constexpr u8 BEQ        = 0b000100;
constexpr u8 BNE        = 0b000101;
constexpr u8 BLEZ       = 0b000110;
constexpr u8 BGTZ       = 0b000111;
constexpr u8 ADDI       = 0b001000;
constexpr u8 ADDIU      = 0b001001;
constexpr u8 SLTI       = 0b001010;
constexpr u8 SLTIU      = 0b001011;
constexpr u8 ANDI       = 0b001100;
constexpr u8 ORI        = 0b001101;
constexpr u8 XORI       = 0b001110;
constexpr u8 LUI        = 0b001111;
constexpr u8 COP0       = 0b010000;
constexpr u8 COP1       = 0b010001;
constexpr u8 COP2       = 0b010010;
constexpr u8 BEQL       = 0b010100;
constexpr u8 BNEL       = 0b010101;
constexpr u8 BLEZL      = 0b010110;
constexpr u8 BGTZL      = 0b010111;
constexpr u8 DADDI      = 0b011000;
constexpr u8 DADDIU     = 0b011001;
constexpr u8 LDL        = 0b011010;
constexpr u8 LDR        = 0b011011;
constexpr u8 LB         = 0b100000;
constexpr u8 LH         = 0b100001;
constexpr u8 LWL        = 0b100010;
constexpr u8 LW         = 0b100011;
constexpr u8 LBU        = 0b100100;
constexpr u8 LHU        = 0b100101;
constexpr u8 LWR        = 0b100110;
constexpr u8 LWU        = 0b100111;
constexpr u8 SB         = 0b101000;
constexpr u8 SH         = 0b101001;
constexpr u8 SWL        = 0b101010;
constexpr u8 SW         = 0b101011;
constexpr u8 SDL        = 0b101100;
constexpr u8 SDR        = 0b101101;
constexpr u8 SWR        = 0b101110;
constexpr u8 CACHE      = 0b101111;
constexpr u8 LL         = 0b110000;
constexpr u8 LWC1       = 0b110001;
constexpr u8 LWC2       = 0b110010;
constexpr u8 LLD        = 0b110100;
constexpr u8 LDC1       = 0b110101;
constexpr u8 LDC2       = 0b110110;
constexpr u8 LD         = 0b110111;
constexpr u8 SC         = 0b111000;
constexpr u8 SWC1       = 0b111001;
constexpr u8 SWC2       = 0b111010;
constexpr u8 SCD        = 0b111100;
constexpr u8 SDC1       = 0b111101;
constexpr u8 SDC2       = 0b111110;
constexpr u8 SD         = 0b111111;
// special
constexpr u8 SLL        = 0b000000;
constexpr u8 SRL        = 0b000010;
constexpr u8 SRA        = 0b000011;
constexpr u8 SLLV       = 0b000100;
constexpr u8 SRLV       = 0b000110;
constexpr u8 SRAV       = 0b000111;
constexpr u8 JR         = 0b001000;
constexpr u8 JALR       = 0b001001;
constexpr u8 SYSCALL    = 0b001100;
constexpr u8 BREAK      = 0b001101;
constexpr u8 SYNC       = 0b001111;
constexpr u8 MFHI       = 0b010000;
constexpr u8 MTHI       = 0b010001;
constexpr u8 MFLO       = 0b010010;
constexpr u8 MTLO       = 0b010011;
constexpr u8 DSLLV      = 0b010100;
constexpr u8 DSRLV      = 0b010110;
constexpr u8 DSRAV      = 0b010111;
constexpr u8 MULT       = 0b011000;
constexpr u8 MULTU      = 0b011001;
constexpr u8 DIV        = 0b011010;
constexpr u8 DIVU       = 0b011011;
constexpr u8 DMULT      = 0b011100;
constexpr u8 DMULTU     = 0b011101;
constexpr u8 DDIV       = 0b011110;
constexpr u8 DDIVU      = 0b011111;
constexpr u8 ADD        = 0b100000;
constexpr u8 ADDU       = 0b100001;
constexpr u8 SUB        = 0b100010;
constexpr u8 SUBU       = 0b100011;
constexpr u8 AND        = 0b100100;
constexpr u8 OR         = 0b100101;
constexpr u8 XOR        = 0b100110;
constexpr u8 NOR        = 0b100111;
constexpr u8 SLT        = 0b101010;
constexpr u8 SLTU       = 0b101011;
constexpr u8 DADD       = 0b101100;
constexpr u8 DADDU      = 0b101101;
constexpr u8 DSUB       = 0b101110;
constexpr u8 DSUBU      = 0b101111;
constexpr u8 TGE        = 0b110000;
constexpr u8 TGEU       = 0b110001;
constexpr u8 TLT        = 0b110010;
constexpr u8 TLTU       = 0b110011;
constexpr u8 TEQ        = 0b110100;
constexpr u8 TNE        = 0b110110;
constexpr u8 DSLL       = 0b111000;
constexpr u8 DSRL       = 0b111010;
constexpr u8 DSRA       = 0b111011;
constexpr u8 DSLL32     = 0b111100;
constexpr u8 DSRL32     = 0b111110;
constexpr u8 DSRA32     = 0b111111;
// regimm
constexpr u8 BLTZ       = 0b00000;
constexpr u8 BGEZ       = 0b00001;
constexpr u8 BLTZL      = 0b00010;
constexpr u8 BGEZL      = 0b00011;
constexpr u8 TGEI       = 0b01000;
constexpr u8 TGEIU      = 0b01001;
constexpr u8 TLTI       = 0b01010;
constexpr u8 TLTIU      = 0b01011;
constexpr u8 TEQI       = 0b01100;
constexpr u8 TNEI       = 0b01110;
constexpr u8 BLTZAL     = 0b10000;
constexpr u8 BGEZAL     = 0b10001;
constexpr u8 BLTZALL    = 0b10010;
constexpr u8 BGEZALL    = 0b10011;
}