📄 jit3-mips.def
字号:
define_insn(add_float, fadd_RRR) { int r1; int r2; int w; debug_name(("add_float:\n")); r2 = rreg_float(2); r1 = rreg_float(1); w = wreg_float(0); finsn_RRR(_FADD, SINGLE_FORMAT, w, r1, r2, COP1); debug((" add.s %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(add_double, faddl_RRR) { int r1; int r2; int w; debug_name(("add_double:\n")); r2 = rreg_double(2); r1 = rreg_double(1); w = wreg_double(0); finsn_RRR(_FADD, DOUBLE_FORMAT, w, r1, r2, COP1); debug((" add.d %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(neg_int, neg_RRR) { int r; int w; debug_name(("neg_int:\n")); r = rreg_int(2); w = wreg_int(0); insn_RRR(_SUB, w, REG_i0, r); debug((" sub %s,%s,%s\n", regname(w), regname(REG_i0), regname(r)));}define_insn(neg_float, fneg_RRR) { int r; int w; debug_name(("neg_float:\n")); r = rreg_float(2); w = wreg_float(0); finsn_RRR(_FNEG, SINGLE_FORMAT, w, r, 0, COP1); debug((" neg.s %s,%s\n", fregname(w), fregname(r)));}define_insn(neg_double, fnegl_RRR) { int r; int w; debug_name(("neg_double:\n")); r = rreg_double(2); w = wreg_double(0); finsn_RRR(_FNEG, DOUBLE_FORMAT, w, r, 0, COP1); debug((" neg.d %s,%s\n", fregname(w), fregname(r)));}define_insn(sub_int, sub_RRR) { int r1; int r2; int w; debug_name(("sub_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_SUB, w, r1, r2); /*subu html 431*/ debug((" sub %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(sub_ref, subu_RRR) { int r1; int r2; int w; debug_name(("sub_ref:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_SUBU, w, r1, r2); debug((" subu %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(sub_int_const, sub_RRC) { int o; int r; int w; debug_name(("sub_int_const:\n")); o = -const_int(2); r = rreg_int(1); w = wreg_int(0); insn_RRC(_ADDI, w, r, o); debug((" addi %s,%s,%d\n", regname(w), regname(w), o));}define_insn(sub_float, fsub_RRR) { int r1; int r2; int w; debug_name(("sub_float:\n")); r2 = rreg_float(2); r1 = rreg_float(1); w = wreg_float(0); finsn_RRR(_FSUB, SINGLE_FORMAT, w, r1, r2, COP1); debug((" sub.s %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(sub_double, fsubl_RRR) { int r1; int r2; int w; debug_name(("sub_double:\n")); r2 = rreg_double(2); r1 = rreg_double(1); w = wreg_double(0); finsn_RRR(_FSUB, DOUBLE_FORMAT, w, r1, r2, COP1); debug((" sub.d %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(mul_int, mul_RRR) { int r1; int r2; int w; debug_name(("mul_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_MULT, REG_i0, r1, r2); insn_RRR(_MFLO, w, REG_i0, REG_i0); debug((" mult %s,%s\n", regname(r1), regname(r2))); debug((" mflo %s\n", regname(w))); /* the following instructions mustn't be a mult to keep the result in LO */ NOP(); NOP();}define_insn(mul_float, fmul_RRR) { int r1; int r2; int w; debug_name(("mul_float:\n")); r2 = rreg_float(2); r1 = rreg_float(1); w = wreg_float(0); finsn_RRR(_FMULT, SINGLE_FORMAT, w, r1, r2, COP1); debug((" mul.s %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(mul_double, fmull_RRR) { int r1; int r2; int w; debug_name(("mul_double:\n")); r2 = rreg_double(2); r1 = rreg_double(1); w = wreg_double(0); finsn_RRR(_FMULT, DOUBLE_FORMAT, w, r1, r2, COP1); debug((" mul.d %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(div_int, div_RRR) { int r1; int r2; int w; debug_name(("div_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_DIV, REG_i0, r1, r2); insn_RRR(_MFLO, w, REG_i0, REG_i0); debug((" div %s,%s\n", regname(r1), regname(r2))); debug((" mflo %s\n", regname(w))); /* the following instructions mustn't be a mult to keep the result in LO */ NOP(); NOP();}define_insn(div_float, fdiv_RRR) { int r1; int r2; int w; debug_name(("div_float:\n")); r2 = rreg_float(2); r1 = rreg_float(1); w = wreg_float(0); finsn_RRR(_FDIV, SINGLE_FORMAT, w, r1, r2, COP1); debug((" div.s %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(div_double, fdivl_RRR) { int r1; int r2; int w; debug_name(("div_double:\n")); r2 = rreg_double(2); r1 = rreg_double(1); w = wreg_double(0); finsn_RRR(_FDIV, DOUBLE_FORMAT, w, r1, r2, COP1); debug((" div.d %s,%s,%s\n", fregname(w), fregname(r1), fregname(r2)));}define_insn(rem_int, rem_RRR) { int r1; int r2; int w; debug_name(("rem_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_DIV, REG_i0, r1, r2); insn_RRR(_MFHI, w, REG_i0, REG_i0); debug((" div %s,%s\n", regname(r1), regname(r2))); debug((" mfhi %s\n", regname(w))); /* the following instructions mustn't be a mult to keep the result in LO */ NOP(); NOP();}/* --------------------------------------------------------------------- */define_insn(and_int, and_RRR) { int r1; int r2; int w; debug_name(("and_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_AND, w, r1, r2); debug((" and %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(and_int_const, and_RRC) { int r; int o; int w; debug_name(("and_int_const:\n")); o = const_int(2); r = rreg_int(1); w = wreg_int(0); insn_RRC(_ANDI, w, r, o); debug((" andi %s,%s,%d\n", regname(w), regname(r), o));}define_insn(or_int, or_RRR) { int r1; int r2; int w; debug_name(("or_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_OR, w, r1, r2); debug((" or %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(xor_int, xor_RRR) { int r1; int r2; int w; debug_name(("xor_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_XOR, w, r1, r2); debug((" xor %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(nor_int, nor_RRR) { int r1; int r2; int w; debug_name(("nor_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_NOR, w, r1, r2); debug((" nor %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(ashr_int, ashr_RRR) { int r1; int r2; int w; debug_name(("ashr_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_SRAV, w, r2, r1); debug((" srav %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(ashr_int_const, ashr_RRC) { int r; int o; int w; debug_name(("ashr_int_const:\n")); o = const_int(2); r = rreg_int(1); w = wreg_int(0); insn_sRRC(_SRA, w, r, o); debug((" sra %s,%s,%d\n", regname(w), regname(r), o));}define_insn(lshr_int, lshr_RRR) { int r1; int r2; int w; debug_name(("lshr_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_SRLV, w, r2, r1); debug((" srlv %s,%s,%s\n", regname(r1), regname(r2), regname(w)));}define_insn(lshr_int_const, lshr_RRC) { int r; int o; int w; debug_name(("lshr_int_const:\n")); o = const_int(2); r = rreg_int(1); w = wreg_int(0); insn_sRRC(_SRL, w, r, o); debug((" srl %s,%s,%d\n", regname(w), regname(r), o));}define_insn(lshl_int, lshl_RRR) { int r1; int r2; int w; debug_name(("lshl_int:\n")); r2 = rreg_int(2); r1 = rreg_int(1); w = wreg_int(0); insn_RRR(_SLLV, w, r2, r1); debug((" sllv %s,%s,%s\n", regname(w), regname(r1), regname(r2)));}define_insn(lshl_int_const, lshl_RRC) { int r; int o; int w; debug_name(("lshl_int_const:\n")); o = const_int(2); r = rreg_int(1); w = wreg_int(0); insn_sRRC(_SLL, w, r, o); debug((" sll %s,%s,%d\n", regname(w), regname(r), o));}/* --------------------------------------------------------------------- */define_insn(load_int, load_RRx) { int r = rreg_int(2); int w = wreg_int(0); debug_name(("load_int:\n")); ldst_RRC(_LW, w, r, 0); debug((" lw %s,0[%s]\n", regname(w), regname(r)));}define_insn(load_offset_int, load_RRC) { int o = const_int(2); int r = rreg_int(1); int w = wreg_int(0); debug_name(("load_offset_int:\n")); ldst_RRC(_LW, w, r, o); debug((" lw %s,%d[%s]\n", regname(w), o, regname(r)));}define_insn(load_float, fload_RRx) { int r = rreg_int(2); int w = wreg_float(0); debug_name(("load_float:\n")); ldst_RRC(_LWC1, w, r, 0); debug((" lwc1 %s,0[%s]\n", fregname(w), regname(r)));}define_insn(load_double, floadl_RRx) { int r = rreg_int(2); int w = wreg_double(0); debug_name(("load_double:\n")); /* FIX: use ldc1 */ ldst_RRC(_LWC1, w, r, LOFFSET); debug((" lwc1 %s,%d[%s]\n", fregname(w), LOFFSET, regname(r))); ldst_RRC(_LWC1, w+1, r, HOFFSET); debug((" lwc1 %s,%d[%s]\n", fregname(w+1), HOFFSET, regname(r)));}define_insn(load_byte, loadb_RRx) { int r = rreg_int(2); int w = wreg_int(0); debug_name(("load_byte:\n")); ldst_RRC(_LB, w, r, 0); debug((" lb %s,0[%s]\n", regname(w), regname(r)));}define_insn(load_char, loadc_RRx) { int r = rreg_int(2); int w = wreg_int(0); debug_name(("load_char:\n")); ldst_RRC(_LHU, w, r, 0); debug((" lhu %s,0[%s]\n", regname(w), regname(r)));}define_insn(load_short, loads_RRx) { int r = rreg_int(2); int w = wreg_int(0); debug_name(("load_short:\n")); ldst_RRC(_LH, w, r, 0); debug((" lh %s,0[%s]\n", regname(w), regname(r)));}define_insn(store_int, store_RRx) { int r = rreg_int(2); int w = rreg_int(1); debug_name(("store_int:\n")); ldst_RRC(_SW, r, w, 0); debug((" sw %s,0[%s]\n", regname(r), regname(w)));}define_insn(store_offset_int, store_RRC) { int o = const_int(2); int w = rreg_int(1); int r = rreg_int(0); debug_name(("store_offset_int:\n")); ldst_RRC(_SW, r, w, o); debug((" sw %s,%d[%s]\n", regname(r), o, regname(w)));}define_insn(store_float, fstore_RRx) { int r = rreg_float(2); int w = rreg_int(1); debug_name(("store_float:\n")); ldst_RRC(_SWC1, r, w, 0); debug((" swc1 %s,0[%s]\n", fregname(r), regname(w)));}define_insn(store_double, fstorel_RRx) { int r = rreg_double(2); int w = rreg_int(1); debug_name(("store_double:\n")); /* FIX: use sdc1 */ ldst_RRC(_SWC1, r, w, LOFFSET); debug((" swc1 %s,%d[%s]\n", fregname(r), LOFFSET, regname(w))); ldst_RRC(_SWC1, r+1, w, HOFFSET); debug((" swc1 %s,%d[%s]\n", fregname(r+1), HOFFSET, regname(w)));}define_insn(store_byte, storeb_RRx) { int r = rreg_int(2); int w = rreg_int(1); debug_name(("store_byte:\n")); ldst_RRC(_SB, r, w, 0); debug((" sb %s,0[%s]\n", regname(r), regname(w)));}define_insn(store_short, stores_RRx) { int r = rreg_int(2); int w = rreg_int(1); debug_name(("store_short:\n")); ldst_RRC(_SH, r, w, 0); debug((" sh %s,0[%s]\n", regname(r), regname(w)));}/* --------------------------------------------------------------------- */define_insn(cvt_int_float, cvtif_RRx) { int r; int w; debug_name(("cvt_int_float:\n")); r = rreg_float(2); w = wreg_float(0); finsn_RRR(_FCVT_S, WORD_FORMAT, w, r, 0, COP1); debug((" cvt.s.w %s,%s\n", fregname(w), fregname(r)));}define_insn(cvt_int_double, cvtid_RRx) { int r; int w; debug_name(("cvt_int_double:\n")); r = rreg_float(2); w = wreg_double(0); finsn_RRR(_FCVT_D, WORD_FORMAT, w, r, 0, COP1); debug((" cvt.d.w %s,%s\n", fregname(w), fregname(r)));}define_insn(cvt_float_int, cvtfi_RRx) { int r; int w; debug_name(("cvt_float_int:\n")); r = rreg_float(2); w = wreg_float(0);#if 1 finsn_RRR(_FCVT_W, SINGLE_FORMAT, w, r, 0, COP1); debug((" cvt.w.s %s,%s\n", fregname(w), fregname(r)));#else finsn_RRR(_FFLOOR_W, SINGLE_FORMAT, w, r, 0, COP1); debug((" floor.w.s %s,%s\n", fregname(w), fregname(r)));#endif}define_insn(cvt_double_int, cvtdi_RRx) { int r; int w; debug_name(("cvt_double_int:\n")); r = rreg_double(2); w = wreg_float(0);#if 1 finsn_RRR(_FCVT_W, DOUBLE_FORMAT, w, r, 0, COP1); debug((" cvt.w.d %s,%s\n", fregname(w), fregname(r)));#else finsn_RRR(_FFLOOR_W, DOUBLE_FORMAT, w, r, 0, COP1); debug((" floor.w.d %s,%s\n", fregname(w), fregname(r)));#endif}define_insn(cvt_float_double, cvtfd_RRx) { int r; int w; debug_name(("cvt_float_double:\n")); r = rreg_float(2); w = wreg_double(0); finsn_RRR(_FCVT_D, SINGLE_FORMAT, w, r, 0, COP1); debug((" cvt.d.s %s,%s\n", fregname(w), fregname(r)));}define_insn(cvt_double_float, cvtdf_RRx) { int r; int w; debug_name(("cvt_double_float:\n")); r = rreg_double(2); w = wreg_float(0); finsn_RRR(_FCVT_S, DOUBLE_FORMAT, w, r, 0, COP1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -