📄 mips.igen
字号:
{ address_word mask = (WITH_TARGET_WORD_BITSIZE == 64 ? 0x7 : 0x3); address_word reverseendian = (ReverseEndian ? -1 : 0); address_word bigendiancpu = (BigEndianCPU ? -1 : 0); unsigned int byte; address_word paddr; int uncached; unsigned64 memval; address_word vaddr; vaddr = loadstore_ea (SD_, base, offset); AddressTranslation (vaddr, isDATA, isSTORE, &paddr, &uncached, isTARGET, isREAL); paddr = (paddr ^ (reverseendian & mask)); if (BigEndianMem != 0) paddr &= ~access; byte = ((vaddr & mask) ^ (bigendiancpu & mask)); memval = (rt << (byte * 8)); StoreMemory (uncached, access - (access & byte), memval, 0, paddr, vaddr, isREAL);}101000,5.BASE,5.RT,16.OFFSET:NORMAL:32::SB"sb r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_store (SD_, AccessLength_BYTE, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}111000,5.BASE,5.RT,16.OFFSET:NORMAL:32::SC"sc r<RT>, <OFFSET>(r<BASE>)"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:{ unsigned32 instruction = instruction_0; address_word base = GPR[BASE]; address_word offset = EXTEND16 (OFFSET); { address_word vaddr = loadstore_ea (SD_, base, offset); address_word paddr; int uncached; if ((vaddr & 3) != 0) { SIM_CORE_SIGNAL (SD, CPU, cia, read_map, 4, vaddr, write_transfer, sim_core_unaligned_signal); } else { if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&uncached,isTARGET,isREAL)) { unsigned64 memval = 0; unsigned64 memval1 = 0; unsigned64 mask = 0x7; unsigned int byte; paddr = ((paddr & ~mask) | ((paddr & mask) ^ (ReverseEndian << 2))); byte = ((vaddr & mask) ^ (BigEndianCPU << 2)); memval = ((unsigned64) GPR[RT] << (8 * byte)); if (LLBIT) { StoreMemory(uncached,AccessLength_WORD,memval,memval1,paddr,vaddr,isREAL); } GPR[RT] = LLBIT; } } }}111100,5.BASE,5.RT,16.OFFSET:NORMAL:64::SCD"scd r<RT>, <OFFSET>(r<BASE>)"*mipsIII:*mipsIV:*mipsV:*mips64:*vr4100:*vr5000:{ address_word base = GPR[BASE]; address_word offset = EXTEND16 (OFFSET); check_u64 (SD_, instruction_0); { address_word vaddr = loadstore_ea (SD_, base, offset); address_word paddr; int uncached; if ((vaddr & 7) != 0) { SIM_CORE_SIGNAL (SD, CPU, cia, read_map, 8, vaddr, write_transfer, sim_core_unaligned_signal); } else { if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&uncached,isTARGET,isREAL)) { unsigned64 memval = 0; unsigned64 memval1 = 0; memval = GPR[RT]; if (LLBIT) { StoreMemory(uncached,AccessLength_DOUBLEWORD,memval,memval1,paddr,vaddr,isREAL); } GPR[RT] = LLBIT; } } }}111111,5.BASE,5.RT,16.OFFSET:NORMAL:64::SD"sd r<RT>, <OFFSET>(r<BASE>)"*mipsIII:*mipsIV:*mipsV:*mips64:*vr4100:*vr5000:{ check_u64 (SD_, instruction_0); do_store (SD_, AccessLength_DOUBLEWORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}1111,ZZ!0!1!3,5.BASE,5.RT,16.OFFSET:NORMAL:64::SDCz"sdc<ZZ> r<RT>, <OFFSET>(r<BASE>)"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:{ do_store (SD_, AccessLength_DOUBLEWORD, GPR[BASE], EXTEND16 (OFFSET), COP_SD (ZZ, RT));}101100,5.BASE,5.RT,16.OFFSET:NORMAL:64::SDL"sdl r<RT>, <OFFSET>(r<BASE>)"*mipsIII:*mipsIV:*mipsV:*mips64:*vr4100:*vr5000:{ check_u64 (SD_, instruction_0); do_store_left (SD_, AccessLength_DOUBLEWORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}101101,5.BASE,5.RT,16.OFFSET:NORMAL:64::SDR"sdr r<RT>, <OFFSET>(r<BASE>)"*mipsIII:*mipsIV:*mipsV:*mips64:*vr4100:*vr5000:{ check_u64 (SD_, instruction_0); do_store_right (SD_, AccessLength_DOUBLEWORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}101001,5.BASE,5.RT,16.OFFSET:NORMAL:32::SH"sh r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_store (SD_, AccessLength_HALFWORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}:function:::void:do_sll:int rt, int rd, int shift{ unsigned32 temp = (GPR[rt] << shift); TRACE_ALU_INPUT2 (GPR[rt], shift); GPR[rd] = EXTEND32 (temp); TRACE_ALU_RESULT (GPR[rd]);}000000,00000,5.RT,5.RD,5.SHIFT,000000:SPECIAL:32::SLLa"nop":RD == 0 && RT == 0 && SHIFT == 0"sll r<RD>, r<RT>, <SHIFT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*vr4100:*vr5000:*r3900:{ /* Skip shift for NOP, so that there won't be lots of extraneous trace output. */ if (RD != 0 || RT != 0 || SHIFT != 0) do_sll (SD_, RT, RD, SHIFT);}000000,00000,5.RT,5.RD,5.SHIFT,000000:SPECIAL:32::SLLb"nop":RD == 0 && RT == 0 && SHIFT == 0"ssnop":RD == 0 && RT == 0 && SHIFT == 1"sll r<RD>, r<RT>, <SHIFT>"*mips32:*mips64:{ /* Skip shift for NOP and SSNOP, so that there won't be lots of extraneous trace output. */ if (RD != 0 || RT != 0 || (SHIFT != 0 && SHIFT != 1)) do_sll (SD_, RT, RD, SHIFT);}:function:::void:do_sllv:int rs, int rt, int rd{ int s = MASKED (GPR[rs], 4, 0); unsigned32 temp = (GPR[rt] << s); TRACE_ALU_INPUT2 (GPR[rt], s); GPR[rd] = EXTEND32 (temp); TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,000100:SPECIAL:32::SLLV"sllv r<RD>, r<RT>, r<RS>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_sllv (SD_, RS, RT, RD);}:function:::void:do_slt:int rs, int rt, int rd{ TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]); GPR[rd] = ((signed_word) GPR[rs] < (signed_word) GPR[rt]); TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,101010:SPECIAL:32::SLT"slt r<RD>, r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_slt (SD_, RS, RT, RD);}:function:::void:do_slti:int rs, int rt, unsigned16 immediate{ TRACE_ALU_INPUT2 (GPR[rs], EXTEND16 (immediate)); GPR[rt] = ((signed_word) GPR[rs] < (signed_word) EXTEND16 (immediate)); TRACE_ALU_RESULT (GPR[rt]);}001010,5.RS,5.RT,16.IMMEDIATE:NORMAL:32::SLTI"slti r<RT>, r<RS>, <IMMEDIATE>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_slti (SD_, RS, RT, IMMEDIATE);}:function:::void:do_sltiu:int rs, int rt, unsigned16 immediate{ TRACE_ALU_INPUT2 (GPR[rs], EXTEND16 (immediate)); GPR[rt] = ((unsigned_word) GPR[rs] < (unsigned_word) EXTEND16 (immediate)); TRACE_ALU_RESULT (GPR[rt]);}001011,5.RS,5.RT,16.IMMEDIATE:NORMAL:32::SLTIU"sltiu r<RT>, r<RS>, <IMMEDIATE>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_sltiu (SD_, RS, RT, IMMEDIATE);}:function:::void:do_sltu:int rs, int rt, int rd{ TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]); GPR[rd] = ((unsigned_word) GPR[rs] < (unsigned_word) GPR[rt]); TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,101011:SPECIAL:32::SLTU"sltu r<RD>, r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_sltu (SD_, RS, RT, RD);}:function:::void:do_sra:int rt, int rd, int shift{ signed32 temp = (signed32) GPR[rt] >> shift; if (NotWordValue (GPR[rt])) Unpredictable (); TRACE_ALU_INPUT2 (GPR[rt], shift); GPR[rd] = EXTEND32 (temp); TRACE_ALU_RESULT (GPR[rd]);}000000,00000,5.RT,5.RD,5.SHIFT,000011:SPECIAL:32::SRA"sra r<RD>, r<RT>, <SHIFT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_sra (SD_, RT, RD, SHIFT);}:function:::void:do_srav:int rs, int rt, int rd{ int s = MASKED (GPR[rs], 4, 0); signed32 temp = (signed32) GPR[rt] >> s; if (NotWordValue (GPR[rt])) Unpredictable (); TRACE_ALU_INPUT2 (GPR[rt], s); GPR[rd] = EXTEND32 (temp); TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,000111:SPECIAL:32::SRAV"srav r<RD>, r<RT>, r<RS>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_srav (SD_, RS, RT, RD);}:function:::void:do_srl:int rt, int rd, int shift{ unsigned32 temp = (unsigned32) GPR[rt] >> shift; if (NotWordValue (GPR[rt])) Unpredictable (); TRACE_ALU_INPUT2 (GPR[rt], shift); GPR[rd] = EXTEND32 (temp); TRACE_ALU_RESULT (GPR[rd]);}000000,00000,5.RT,5.RD,5.SHIFT,000010:SPECIAL:32::SRL"srl r<RD>, r<RT>, <SHIFT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_srl (SD_, RT, RD, SHIFT);}:function:::void:do_srlv:int rs, int rt, int rd{ int s = MASKED (GPR[rs], 4, 0); unsigned32 temp = (unsigned32) GPR[rt] >> s; if (NotWordValue (GPR[rt])) Unpredictable (); TRACE_ALU_INPUT2 (GPR[rt], s); GPR[rd] = EXTEND32 (temp); TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,000110:SPECIAL:32::SRLV"srlv r<RD>, r<RT>, r<RS>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_srlv (SD_, RS, RT, RD);}000000,5.RS,5.RT,5.RD,00000,100010:SPECIAL:32::SUB"sub r<RD>, r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ if (NotWordValue (GPR[RS]) || NotWordValue (GPR[RT])) Unpredictable (); TRACE_ALU_INPUT2 (GPR[RS], GPR[RT]); { ALU32_BEGIN (GPR[RS]); ALU32_SUB (GPR[RT]); ALU32_END (GPR[RD]); /* This checks for overflow. */ } TRACE_ALU_RESULT (GPR[RD]);}:function:::void:do_subu:int rs, int rt, int rd{ if (NotWordValue (GPR[rs]) || NotWordValue (GPR[rt])) Unpredictable (); TRACE_ALU_INPUT2 (GPR[rs], GPR[rt]); GPR[rd] = EXTEND32 (GPR[rs] - GPR[rt]); TRACE_ALU_RESULT (GPR[rd]);}000000,5.RS,5.RT,5.RD,00000,100011:SPECIAL:32::SUBU"subu r<RD>, r<RS>, r<RT>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_subu (SD_, RS, RT, RD);}101011,5.BASE,5.RT,16.OFFSET:NORMAL:32::SW"sw r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*r3900:*vr5000:{ do_store (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}1110,ZZ!0!1!3,5.BASE,5.RT,16.OFFSET:NORMAL:32::SWCz"swc<ZZ> r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_store (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET), COP_SW (ZZ, RT));}101010,5.BASE,5.RT,16.OFFSET:NORMAL:32::SWL"swl r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_store_left (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}101110,5.BASE,5.RT,16.OFFSET:NORMAL:32::SWR"swr r<RT>, <OFFSET>(r<BASE>)"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ do_store_right (SD_, AccessLength_WORD, GPR[BASE], EXTEND16 (OFFSET), GPR[RT]);}000000,000000000000000,5.STYPE,001111:SPECIAL:32::SYNC"sync":STYPE == 0"sync <STYPE>"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ SyncOperation (STYPE);}000000,20.CODE,001100:SPECIAL:32::SYSCALL"syscall %#lx<CODE>"*mipsI:*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:*r3900:{ SignalException (SystemCall, instruction_0);}000000,5.RS,5.RT,10.CODE,110100:SPECIAL:32::TEQ"teq r<RS>, r<RT>"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:{ if ((signed_word) GPR[RS] == (signed_word) GPR[RT]) SignalException (Trap, instruction_0);}000001,5.RS,01100,16.IMMEDIATE:REGIMM:32::TEQI"teqi r<RS>, <IMMEDIATE>"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:{ if ((signed_word) GPR[RS] == (signed_word) EXTEND16 (IMMEDIATE)) SignalException (Trap, instruction_0);}000000,5.RS,5.RT,10.CODE,110000:SPECIAL:32::TGE"tge r<RS>, r<RT>"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips32:*mips64:*vr4100:*vr5000:{ if ((signed_word) GPR[RS] >= (signed_word) GPR[RT]) SignalException (Trap, instruction_0);}000001,5.RS,01000,16.IMMEDIATE:REGIMM:32::TGEI"tgei r<RS>, <IMMEDIATE>"*mipsII:*mipsIII:*mipsIV:*mipsV:*mips
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -