38 #ifndef included_asm_mips_h 39 #define included_asm_mips_h 43 #define mips_foreach_opcode \ 44 _(SPECIAL) _(REGIMM) _(j) _(jal) _(beq) _(bne) _(blez) _(bgtz) \ 45 _(addi) _(addiu) _(slti) _(sltiu) _(andi) _(ori) _(xori) _(lui) \ 46 _(COP0) _(COP1) _(COP2) _(COP1X) _(beql) _(bnel) _(blezl) _(bgtzl) \ 47 _(daddi) _(daddiu) _(ldl) _(ldr) _(SPECIAL2) _(jalx) _(MDMX) _(O37) \ 48 _(lb) _(lh) _(lwl) _(lw) _(lbu) _(lhu) _(lwr) _(lwu) \ 49 _(sb) _(sh) _(swl) _(sw) _(sdl) _(sdr) _(swr) _(cache) \ 50 _(ll) _(lwc1) _(lwc2) _(pref) _(lld) _(ldc1) _(ldc2) _(ld) \ 51 _(sc) _(swc1) _(swc2) _(o73) _(scd) _(sdc1) _(sdc2) _(sd) 54 #define mips_foreach_special_funct \ 55 _(sll) _(MOVCI) _(srl) _(sra) _(sllv) _(o05) _(srlv) _(srav) \ 56 _(jr) _(jalr) _(movz) _(movn) _(syscall) _(break) _(o16) _(sync) \ 57 _(mfhi) _(mthi) _(mflo) _(mtlo) _(dsllv) _(o25) _(dsrlv) _(dsrav) \ 58 _(mult) _(multu) _(div) _(divu) _(dmult) _(dmultu) _(ddiv) _(ddivu) \ 59 _(add) _(addu) _(sub) _(subu) _(and) _(or) _(xor) _(nor) \ 60 _(o50) _(o51) _(slt) _(sltu) _(dadd) _(daddu) _(dsub) _(dsubu) \ 61 _(tge) _(tgeu) _(tlt) _(tltu) _(teq) _(o65) _(tne) _(o67) \ 62 _(dsll) _(o71) _(dsrl) _(dsra) _(dsll32) _(o75) _(dsrl32) _(dsra32) 65 #define mips_foreach_special2_funct \ 66 _(madd) _(maddu) _(mul) _(o03) _(msub) _(msubu) _(o06) _(o07) \ 67 _(o10) _(o11) _(o12) _(o13) _(o14) _(o15) _(o16) _(o17) \ 68 _(o20) _(o21) _(o22) _(o23) _(o24) _(o25) _(o26) _(o27) \ 69 _(o30) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(o37) \ 70 _(clz) _(clo) _(o42) _(o43) _(dclz) _(dclo) _(o46) _(o47) \ 71 _(o50) _(o51) _(o52) _(o53) _(o54) _(o55) _(o56) _(o57) \ 72 _(o60) _(o61) _(o62) _(o63) _(o64) _(o65) _(o66) _(o67) \ 73 _(o70) _(o71) _(o72) _(o73) _(o74) _(o75) _(o76) _(sdbbp) 76 #define mips_foreach_regimm_rt \ 77 _(bltz) _(bgez) _(bltzl) _(bgezl) _(o04) _(o05) _(o06) _(o07) \ 78 _(tgei) _(tgeiu) _(tltiu) _(teqi) _(o14) _(tnei) _(o16) _(o17) \ 79 _(bltzal) _(bgezal) _(bltzall) _(bgezall) _(o24) _(o25) _(o26) _(o27) \ 80 _(o30) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(o37) 83 #define mips_foreach_cop0_rs \ 84 _(mfc0) _(dmfc0) _(o02) _(o03) _(mtc0) _(dmtc0) _(o06) _(o07) \ 85 _(o10) _(o11) _(o12) _(o13) _(o14) _(o15) _(o16) _(o17) \ 86 _(C0) _(o21) _(o22) _(o23) _(o24) _(o25) _(o26) _(o27) \ 87 _(o30) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(o37) 90 #define mips_foreach_cop0_funct \ 91 _(o00) _(tlbr) _(tlbwi) _(o03) _(o04) _(o05) _(tlbwr) _(o07) \ 92 _(tlbp) _(o11) _(o12) _(o13) _(o14) _(o15) _(o16) _(o17) \ 93 _(o20) _(o21) _(o22) _(o23) _(o24) _(o25) _(o26) _(o27) \ 94 _(eret) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(deret) \ 95 _(wait) _(o41) _(o42) _(o43) _(o44) _(o45) _(o46) _(o47) \ 96 _(o50) _(o51) _(o52) _(o53) _(o54) _(o55) _(o56) _(o57) \ 97 _(o60) _(o61) _(o62) _(o63) _(o64) _(o65) _(o66) _(o67) \ 98 _(o70) _(o71) _(o72) _(o73) _(o74) _(o75) _(o76) _(o77) 101 #define mips_foreach_cop1_rs \ 102 _(mfc1) _(dmfc1) _(cfc1) _(o03) _(mtc1) _(dmtc1) _(ctc1) _(o07) \ 103 _(BC1) _(o11) _(o12) _(o13) _(o14) _(o15) _(o16) _(o17) \ 104 _(S) _(D) _(o22) _(o23) _(W) _(L) _(o26) _(o27) \ 105 _(o30) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(o37) 108 #define mips_foreach_cop1_funct \ 109 _(add) _(sub) _(mul) _(div) _(sqrt) _(abs) _(mov) _(neg) \ 110 _(roundl) _(truncl) _(ceill) _(floorl) _(roundw) _(truncw) _(ceilw) _(floorw) \ 111 _(o20) _(MOVCF) _(movz) _(movn) _(o24) _(recip) _(rsqrt) _(o27) \ 112 _(o30) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(o37) \ 113 _(cvts) _(cvtd) _(o42) _(o43) _(cvtw) _(cvtl) _(o46) _(o47) \ 114 _(o50) _(o51) _(o52) _(o53) _(o54) _(o55) _(o56) _(o57) \ 115 _(cf) _(cun) _(ceq) _(cueq) _(colt) _(cult) _(cole) _(cule) \ 116 _(csf) _(cngle) _(cseq) _(cngl) _(clt) _(cnge) _(cle) _(cngt) 119 #define mips_foreach_cop1x_funct \ 120 _(lwxc1) _(ldxc1) _(o02) _(o03) _(o04) _(luxc1) _(o06) _(o07) \ 121 _(swxc1) _(sdxc1) _(o12) _(o13) _(o14) _(suxc1) _(o16) _(prefx) \ 122 _(o20) _(o21) _(o22) _(o23) _(o24) _(o25) _(o26) _(o27) \ 123 _(o30) _(o31) _(o32) _(o33) _(o34) _(o35) _(o36) _(o37) \ 124 _(madds) _(maddd) _(o42) _(o43) _(o44) _(o45) _(o46) _(o47) \ 125 _(msubs) _(msubd) _(o52) _(o53) _(o54) _(o55) _(o56) _(o57) \ 126 _(nmadds) _(nmaddd) _(o62) _(o63) _(o64) _(o65) _(o66) _(o67) \ 127 _(nmsubs) _(nmsubd) _(o72) _(o73) _(o74) _(o75) _(o76) _(o77) 129 #define mips_foreach_mdmx_funct \ 130 _(msgn) _(ceq) _(pickf) _(pickt) _(clt) _(cle) _(min) _(max) \ 131 _(o10) _(o11) _(sub) _(add) _(and) _(xor) _(or) _(nor) \ 132 _(sll) _(o21) _(srl) _(sra) _(o24) _(o25) _(o26) _(o27) \ 133 _(alniob) _(alnvob) _(alniqh) _(alnvqh) _(o34) _(o35) _(o36) _(shfl) \ 134 _(rzu) _(rnau) _(rneu) _(o43) _(rzs) _(rnas) _(rnes) _(o47) \ 135 _(o50) _(o51) _(o52) _(o53) _(o54) _(o55) _(o56) _(o57) \ 136 _(mul) _(o61) _(muls) _(mula) _(o64) _(o65) _(suba) _(adda) \ 137 _(o70) _(o71) _(o72) _(o73) _(o74) _(o75) _(wac) _(rac) 139 #define _(f) MIPS_OPCODE_##f, 145 #define _(f) MIPS_SPECIAL_FUNCT_##f, 151 #define _(f) MIPS_SPECIAL2_FUNCT_##f, 157 #define _(f) MIPS_REGIMM_RT_##f, 163 #define _(f) MIPS_COP0_RS_##f, 169 #define _(f) MIPS_COP0_FUNCT_##f, 175 #define _(f) MIPS_COP1_RS_##f, 181 #define _(f) MIPS_COP1_FUNCT_##f, 187 #define _(f) MIPS_COP1X_FUNCT_##f, 193 #define _(f) MIPS_MDMX_FUNCT_##f, 201 {
return (insn >> 26) & 0x3f; }
205 {
return (insn >> 21) & 0x1f; }
209 {
return (insn >> 16) & 0x1f; }
213 {
return (insn >> 11) & 0x1f; }
217 {
return (insn >> 6) & 0x1f; }
221 {
return (insn >> 0) & 0x3f; }
225 {
return (((
i32) insn) << 16) >> 16; }
249 insn = (addr & ((1 << 28) - 1)) / 4;
276 #define mips_insn_r(op,funct,rd,rs,rt,sa) \ 277 mips_insn_encode_r_type (MIPS_OPCODE_##op, \ 278 (rs), (rt), (rd), (sa), \ 279 MIPS_##op##_FUNCT_##funct) 281 #define mips_insn_i(op,rs,rt,imm) \ 282 mips_insn_encode_i_type (MIPS_OPCODE_##op, (rs), (rt), (imm)) 284 #define mips_insn_j(op,target) \ 285 mips_insn_encode_i_type (MIPS_OPCODE_##op, (rs), (rt), (imm)) 297 op = MIPS_OPCODE_lbu;
300 op = MIPS_OPCODE_lhu;
303 op = MIPS_OPCODE_lwu;
always_inline u32 mips_insn_encode_i_type(int op, int rs, int rt, int immediate)
#define mips_foreach_mdmx_funct
always_inline u32 mips_insn_get_funct(u32 insn)
always_inline u32 mips_insn_get_rs(u32 insn)
#define mips_foreach_cop1_funct
always_inline mips_insn_opcode_t mips_insn_get_op(u32 insn)
#define mips_foreach_regimm_rt
mips_insn_special2_funct_t
always_inline u32 mips_insn_get_sa(u32 insn)
always_inline u32 mips_insn_encode_j_type(int op, u32 addr)
#define mips_foreach_cop1_rs
#define mips_foreach_special2_funct
always_inline u32 mips_insn_get_rt(u32 insn)
#define mips_foreach_cop1x_funct
#define mips_foreach_cop0_funct
#define mips_foreach_cop0_rs
#define mips_foreach_opcode
always_inline u32 mips_insn_load(u32 rd, i32 offset, u32 base, u32 log2_bytes)
#define mips_foreach_special_funct
mips_insn_special_funct_t
always_inline u32 mips_insn_encode_r_type(int op, int rs, int rt, int rd, int sa, int funct)
always_inline i32 mips_insn_get_immediate(u32 insn)
always_inline u32 mips_insn_get_rd(u32 insn)