⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mips_emit.h

📁 psp上的GBA模拟器
💻 H
📖 第 1 页 / 共 5 页
字号:
#define mips_emit_sltu(rd, rs, rt)                                            \  mips_emit_special(sltu, rs, rt, rd, 0)                                      \#define mips_emit_sllv(rd, rt, rs)                                            \  mips_emit_special(sllv, rs, rt, rd, 0)                                      \#define mips_emit_srlv(rd, rt, rs)                                            \  mips_emit_special(srlv, rs, rt, rd, 0)                                      \#define mips_emit_srav(rd, rt, rs)                                            \  mips_emit_special(srav, rs, rt, rd, 0)                                      \#define mips_emit_rotrv(rd, rt, rs)                                           \  mips_emit_special(srlv, rs, rt, rd, 1)                                      \#define mips_emit_sll(rd, rt, shift)                                          \  mips_emit_special(sll, 0, rt, rd, shift)                                    \#define mips_emit_srl(rd, rt, shift)                                          \  mips_emit_special(srl, 0, rt, rd, shift)                                    \#define mips_emit_sra(rd, rt, shift)                                          \  mips_emit_special(sra, 0, rt, rd, shift)                                    \#define mips_emit_rotr(rd, rt, shift)                                         \  mips_emit_special(srl, 1, rt, rd, shift)                                    \#define mips_emit_mfhi(rd)                                                    \  mips_emit_special(mfhi, 0, 0, rd, 0)                                        \#define mips_emit_mflo(rd)                                                    \  mips_emit_special(mflo, 0, 0, rd, 0)                                        \#define mips_emit_mthi(rs)                                                    \  mips_emit_special(mthi, rs, 0, 0, 0)                                        \#define mips_emit_mtlo(rs)                                                    \  mips_emit_special(mtlo, rs, 0, 0, 0)                                        \#define mips_emit_mult(rs, rt)                                                \  mips_emit_special(mult, rs, rt, 0, 0)                                       \#define mips_emit_multu(rs, rt)                                               \  mips_emit_special(multu, rs, rt, 0, 0)                                      \#define mips_emit_div(rs, rt)                                                 \  mips_emit_special(div, rs, rt, 0, 0)                                        \#define mips_emit_divu(rs, rt)                                                \  mips_emit_special(divu, rs, rt, 0, 0)                                       \#define mips_emit_madd(rs, rt)                                                \  mips_emit_special(madd, rs, rt, 0, 0)                                       \#define mips_emit_maddu(rs, rt)                                               \  mips_emit_special(maddu, rs, rt, 0, 0)                                      \#define mips_emit_movn(rd, rs, rt)                                            \  mips_emit_special(movn, rs, rt, rd, 0)                                      \#define mips_emit_movz(rd, rs, rt)                                            \  mips_emit_special(movz, rs, rt, rd, 0)                                      \#define mips_emit_lb(rt, rs, offset)                                          \  mips_emit_imm(lb, rs, rt, offset)                                           \#define mips_emit_lbu(rt, rs, offset)                                         \  mips_emit_imm(lbu, rs, rt, offset)                                          \#define mips_emit_lh(rt, rs, offset)                                          \  mips_emit_imm(lh, rs, rt, offset)                                           \#define mips_emit_lhu(rt, rs, offset)                                         \  mips_emit_imm(lhu, rs, rt, offset)                                          \#define mips_emit_lw(rt, rs, offset)                                          \  mips_emit_imm(lw, rs, rt, offset)                                           \#define mips_emit_sb(rt, rs, offset)                                          \  mips_emit_imm(sb, rs, rt, offset)                                           \#define mips_emit_sh(rt, rs, offset)                                          \  mips_emit_imm(sh, rs, rt, offset)                                           \#define mips_emit_sw(rt, rs, offset)                                          \  mips_emit_imm(sw, rs, rt, offset)                                           \#define mips_emit_lui(rt, imm)                                                \  mips_emit_imm(lui, 0, rt, imm)                                              \#define mips_emit_addiu(rt, rs, imm)                                          \  mips_emit_imm(addiu, rs, rt, imm)                                           \#define mips_emit_xori(rt, rs, imm)                                           \  mips_emit_imm(xori, rs, rt, imm)                                            \#define mips_emit_ori(rt, rs, imm)                                            \  mips_emit_imm(ori, rs, rt, imm)                                             \#define mips_emit_andi(rt, rs, imm)                                           \  mips_emit_imm(andi, rs, rt, imm)                                            \#define mips_emit_slti(rt, rs, imm)                                           \  mips_emit_imm(slti, rs, rt, imm)                                            \#define mips_emit_sltiu(rt, rs, imm)                                          \  mips_emit_imm(sltiu, rs, rt, imm)                                           \#define mips_emit_ext(rt, rs, pos, size)                                      \  mips_emit_special3(ext, rs, rt, (size - 1), pos)                            \#define mips_emit_ins(rt, rs, pos, size)                                      \  mips_emit_special3(ins, rs, rt, (pos + size - 1), pos)                      \// Breaks down if the backpatch offset is greater than 16bits, take care// when using (should be okay if limited to conditional instructions)#define mips_emit_b_filler(type, rs, rt, writeback_location)                  \  (writeback_location) = translation_ptr;                                     \  mips_emit_imm(type, rs, rt, 0)                                              \// The backpatch code for this has to be handled differently than the above#define mips_emit_j_filler(writeback_location)                                \  (writeback_location) = translation_ptr;                                     \  mips_emit_jump(j, 0)                                                        \#define mips_emit_b(type, rs, rt, offset)                                     \  mips_emit_imm(type, rs, rt, offset)                                         \#define mips_emit_j(offset)                                                   \  mips_emit_jump(j, offset)                                                   \#define mips_emit_jal(offset)                                                 \  mips_emit_jump(jal, offset)                                                 \#define mips_emit_jr(rs)                                                      \  mips_emit_special(jr, rs, 0, 0, 0)                                          \#define mips_emit_bltzal(rs, offset)                                          \  mips_emit_regimm(bltzal, rs, offset)                                        \#define mips_emit_nop()                                                       \  mips_emit_sll(reg_zero, reg_zero, 0)                                        \#define reg_base    mips_reg_s0#define reg_cycles  mips_reg_s1#define reg_a0      mips_reg_a0#define reg_a1      mips_reg_a1#define reg_a2      mips_reg_a2#define reg_rv      mips_reg_v0#define reg_pc      mips_reg_s3#define reg_temp    mips_reg_at#define reg_zero    mips_reg_zero#define reg_n_cache mips_reg_s4#define reg_z_cache mips_reg_s5#define reg_c_cache mips_reg_s6#define reg_v_cache mips_reg_s7#define reg_r0      mips_reg_v1#define reg_r1      mips_reg_a3#define reg_r2      mips_reg_t0#define reg_r3      mips_reg_t1#define reg_r4      mips_reg_t2#define reg_r5      mips_reg_t3#define reg_r6      mips_reg_t4#define reg_r7      mips_reg_t5#define reg_r8      mips_reg_t6#define reg_r9      mips_reg_t7#define reg_r10     mips_reg_s2#define reg_r11     mips_reg_t8#define reg_r12     mips_reg_t9#define reg_r13     mips_reg_gp#define reg_r14     mips_reg_fp// Writing to r15 goes straight to a0, to be chained with other opsu32 arm_to_mips_reg[] ={  reg_r0,  reg_r1,  reg_r2,  reg_r3,  reg_r4,  reg_r5,  reg_r6,  reg_r7,  reg_r8,  reg_r9,  reg_r10,  reg_r11,  reg_r12,  reg_r13,  reg_r14,  reg_a0,  reg_a1,  reg_a2,  reg_temp};#define arm_reg_a0   15#define arm_reg_a1   16#define arm_reg_a2   17#define arm_reg_temp 18#define generate_load_reg(ireg, reg_index)                                    \  mips_emit_addu(ireg, arm_to_mips_reg[reg_index], reg_zero)                  \#define generate_load_imm(ireg, imm)                                          \  if(((s32)imm >= -32768) && ((s32)imm <= 32767))                             \  {                                                                           \    mips_emit_addiu(ireg, reg_zero, imm);                                     \  }                                                                           \  else                                                                        \  {                                                                           \    if(((u32)imm >> 16) == 0x0000)                                            \    {                                                                         \      mips_emit_ori(ireg, reg_zero, imm);                                     \    }                                                                         \    else                                                                      \    {                                                                         \      mips_emit_lui(ireg, imm >> 16);                                         \                                                                              \      if(((u32)imm & 0x0000FFFF) != 0x00000000)                               \      {                                                                       \        mips_emit_ori(ireg, ireg, imm & 0xFFFF);                              \      }                                                                       \    }                                                                         \  }                                                                           \#define generate_load_pc(ireg, new_pc)                                        \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -