decoder.isa
来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· ISA 代码 · 共 1,399 行 · 第 1/5 页
ISA
1,399 行
//ASI_LDTX_L 0x2C: TwinLoad::ldtx_l( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); //ASI_LDTX_REAL_L 0x2E: TwinLoad::ldtx_real_l( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); //ASI_LDTX_N_L 0x2F: TwinLoad::ldtx_n_l( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); //ASI_LDTX_P 0xE2: TwinLoad::ldtx_p( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); //ASI_LDTX_S 0xE3: TwinLoad::ldtx_s( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); //ASI_LDTX_PL 0xEA: TwinLoad::ldtx_pl( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); //ASI_LDTX_SL 0xEB: TwinLoad::ldtx_sl( {{RdLow.udw = (Mem.tudw).a; RdHigh.udw = (Mem.tudw).b;}}); default: ldtwa({{ RdLow = (Mem.tuw).a; RdHigh = (Mem.tuw).b;}}); } } format StoreAlt { 0x14: stwa({{Mem.uw = Rd;}}); 0x15: stba({{Mem.ub = Rd;}}); 0x16: stha({{Mem.uhw = Rd;}}); 0x17: sttwa({{ //This temporary needs to be here so that the parser //will correctly identify this instruction as a store. //It's probably either the parenthesis or referencing //the member variable that throws confuses it. Twin32_t temp; temp.a = RdLow<31:0>; temp.b = RdHigh<31:0>; Mem.tuw = temp; }}); } format LoadAlt { 0x18: ldswa({{Rd = (int32_t)Mem.sw;}}); 0x19: ldsba({{Rd = (int8_t)Mem.sb;}}); 0x1A: ldsha({{Rd = (int16_t)Mem.shw;}}); 0x1B: ldxa({{Rd = (int64_t)Mem.sdw;}}); } 0x1D: SwapAlt::ldstuba({{Mem.ub = 0xFF;}}, {{ uint8_t tmp = mem_data; Rd.ub = tmp; }}, MEM_SWAP); 0x1E: StoreAlt::stxa({{Mem.udw = Rd}}); 0x1F: SwapAlt::swapa({{Mem.uw = Rd.uw}}, {{ uint32_t tmp = mem_data; Rd.uw = tmp; }}, MEM_SWAP); format Trap { 0x20: Load::ldf({{Frds.uw = Mem.uw;}}); 0x21: decode RD { 0x0: Load::ldfsr({{fault = checkFpEnableFault(xc); if (fault) return fault; Fsr = Mem.uw | Fsr<63:32>;}}); 0x1: Load::ldxfsr({{fault = checkFpEnableFault(xc); if (fault) return fault; Fsr = Mem.udw;}}); default: FailUnimpl::ldfsrOther(); } 0x22: ldqf({{fault = new FpDisabled;}}); 0x23: Load::lddf({{Frd.udw = Mem.udw;}}); 0x24: Store::stf({{Mem.uw = Frds.uw;}}); 0x25: decode RD { 0x0: Store::stfsr({{fault = checkFpEnableFault(xc); if (fault) return fault; Mem.uw = Fsr<31:0>; Fsr = insertBits(Fsr,16,14,0);}}); 0x1: Store::stxfsr({{fault = checkFpEnableFault(xc); if (fault) return fault; Mem.udw = Fsr; Fsr = insertBits(Fsr,16,14,0);}}); default: FailUnimpl::stfsrOther(); } 0x26: stqf({{fault = new FpDisabled;}}); 0x27: Store::stdf({{Mem.udw = Frd.udw;}}); 0x2D: Nop::prefetch({{ }}); 0x30: LoadAlt::ldfa({{Frds.uw = Mem.uw;}}); 0x32: ldqfa({{fault = new FpDisabled;}}); format LoadAlt { 0x33: decode EXT_ASI { //ASI_NUCLEUS 0x04: FailUnimpl::lddfa_n(); //ASI_NUCLEUS_LITTLE 0x0C: FailUnimpl::lddfa_nl(); //ASI_AS_IF_USER_PRIMARY 0x10: FailUnimpl::lddfa_aiup(); //ASI_AS_IF_USER_PRIMARY_LITTLE 0x18: FailUnimpl::lddfa_aiupl(); //ASI_AS_IF_USER_SECONDARY 0x11: FailUnimpl::lddfa_aius(); //ASI_AS_IF_USER_SECONDARY_LITTLE 0x19: FailUnimpl::lddfa_aiusl(); //ASI_REAL 0x14: FailUnimpl::lddfa_real(); //ASI_REAL_LITTLE 0x1C: FailUnimpl::lddfa_real_l(); //ASI_REAL_IO 0x15: FailUnimpl::lddfa_real_io(); //ASI_REAL_IO_LITTLE 0x1D: FailUnimpl::lddfa_real_io_l(); //ASI_PRIMARY 0x80: FailUnimpl::lddfa_p(); //ASI_PRIMARY_LITTLE 0x88: FailUnimpl::lddfa_pl(); //ASI_SECONDARY 0x81: FailUnimpl::lddfa_s(); //ASI_SECONDARY_LITTLE 0x89: FailUnimpl::lddfa_sl(); //ASI_PRIMARY_NO_FAULT 0x82: FailUnimpl::lddfa_pnf(); //ASI_PRIMARY_NO_FAULT_LITTLE 0x8A: FailUnimpl::lddfa_pnfl(); //ASI_SECONDARY_NO_FAULT 0x83: FailUnimpl::lddfa_snf(); //ASI_SECONDARY_NO_FAULT_LITTLE 0x8B: FailUnimpl::lddfa_snfl(); format BlockLoad { // LDBLOCKF //ASI_BLOCK_AS_IF_USER_PRIMARY 0x16: FailUnimpl::ldblockf_aiup(); //ASI_BLOCK_AS_IF_USER_SECONDARY 0x17: FailUnimpl::ldblockf_aius(); //ASI_BLOCK_AS_IF_USER_PRIMARY_LITTLE 0x1E: FailUnimpl::ldblockf_aiupl(); //ASI_BLOCK_AS_IF_USER_SECONDARY_LITTLE 0x1F: FailUnimpl::ldblockf_aiusl(); //ASI_BLOCK_PRIMARY 0xF0: ldblockf_p({{Frd_N.udw = Mem.udw;}}); //ASI_BLOCK_SECONDARY 0xF1: FailUnimpl::ldblockf_s(); //ASI_BLOCK_PRIMARY_LITTLE 0xF8: FailUnimpl::ldblockf_pl(); //ASI_BLOCK_SECONDARY_LITTLE 0xF9: FailUnimpl::ldblockf_sl(); } //LDSHORTF //ASI_FL8_PRIMARY 0xD0: FailUnimpl::ldshortf_8p(); //ASI_FL8_SECONDARY 0xD1: FailUnimpl::ldshortf_8s(); //ASI_FL8_PRIMARY_LITTLE 0xD8: FailUnimpl::ldshortf_8pl(); //ASI_FL8_SECONDARY_LITTLE 0xD9: FailUnimpl::ldshortf_8sl(); //ASI_FL16_PRIMARY 0xD2: FailUnimpl::ldshortf_16p(); //ASI_FL16_SECONDARY 0xD3: FailUnimpl::ldshortf_16s(); //ASI_FL16_PRIMARY_LITTLE 0xDA: FailUnimpl::ldshortf_16pl(); //ASI_FL16_SECONDARY_LITTLE 0xDB: FailUnimpl::ldshortf_16sl(); //Not an ASI which is legal with lddfa default: Trap::lddfa_bad_asi( {{fault = new DataAccessException;}}); } } 0x34: Store::stfa({{Mem.uw = Frds.uw;}}); 0x36: stqfa({{fault = new FpDisabled;}}); format StoreAlt { 0x37: decode EXT_ASI { //ASI_NUCLEUS 0x04: FailUnimpl::stdfa_n(); //ASI_NUCLEUS_LITTLE 0x0C: FailUnimpl::stdfa_nl(); //ASI_AS_IF_USER_PRIMARY 0x10: FailUnimpl::stdfa_aiup(); //ASI_AS_IF_USER_PRIMARY_LITTLE 0x18: FailUnimpl::stdfa_aiupl(); //ASI_AS_IF_USER_SECONDARY 0x11: FailUnimpl::stdfa_aius(); //ASI_AS_IF_USER_SECONDARY_LITTLE 0x19: FailUnimpl::stdfa_aiusl(); //ASI_REAL 0x14: FailUnimpl::stdfa_real(); //ASI_REAL_LITTLE 0x1C: FailUnimpl::stdfa_real_l(); //ASI_REAL_IO 0x15: FailUnimpl::stdfa_real_io(); //ASI_REAL_IO_LITTLE 0x1D: FailUnimpl::stdfa_real_io_l(); //ASI_PRIMARY 0x80: FailUnimpl::stdfa_p(); //ASI_PRIMARY_LITTLE 0x88: FailUnimpl::stdfa_pl(); //ASI_SECONDARY 0x81: FailUnimpl::stdfa_s(); //ASI_SECONDARY_LITTLE 0x89: FailUnimpl::stdfa_sl(); //ASI_PRIMARY_NO_FAULT 0x82: FailUnimpl::stdfa_pnf(); //ASI_PRIMARY_NO_FAULT_LITTLE 0x8A: FailUnimpl::stdfa_pnfl(); //ASI_SECONDARY_NO_FAULT 0x83: FailUnimpl::stdfa_snf(); //ASI_SECONDARY_NO_FAULT_LITTLE 0x8B: FailUnimpl::stdfa_snfl(); format BlockStore { // STBLOCKF //ASI_BLOCK_AS_IF_USER_PRIMARY 0x16: FailUnimpl::stblockf_aiup(); //ASI_BLOCK_AS_IF_USER_SECONDARY 0x17: FailUnimpl::stblockf_aius(); //ASI_BLOCK_AS_IF_USER_PRIMARY_LITTLE 0x1E: FailUnimpl::stblockf_aiupl(); //ASI_BLOCK_AS_IF_USER_SECONDARY_LITTLE 0x1F: FailUnimpl::stblockf_aiusl(); //ASI_BLOCK_PRIMARY 0xF0: stblockf_p({{Mem.udw = Frd_N.udw;}}); //ASI_BLOCK_SECONDARY 0xF1: FailUnimpl::stblockf_s(); //ASI_BLOCK_PRIMARY_LITTLE 0xF8: FailUnimpl::stblockf_pl(); //ASI_BLOCK_SECONDARY_LITTLE 0xF9: FailUnimpl::stblockf_sl(); } //STSHORTF //ASI_FL8_PRIMARY 0xD0: FailUnimpl::stshortf_8p(); //ASI_FL8_SECONDARY 0xD1: FailUnimpl::stshortf_8s(); //ASI_FL8_PRIMARY_LITTLE 0xD8: FailUnimpl::stshortf_8pl(); //ASI_FL8_SECONDARY_LITTLE 0xD9: FailUnimpl::stshortf_8sl(); //ASI_FL16_PRIMARY 0xD2: FailUnimpl::stshortf_16p(); //ASI_FL16_SECONDARY 0xD3: FailUnimpl::stshortf_16s(); //ASI_FL16_PRIMARY_LITTLE 0xDA: FailUnimpl::stshortf_16pl(); //ASI_FL16_SECONDARY_LITTLE 0xDB: FailUnimpl::stshortf_16sl(); //Not an ASI which is legal with lddfa default: Trap::stdfa_bad_asi( {{fault = new DataAccessException;}}); } } 0x3C: CasAlt::casa({{ mem_data = htog(Rs2.uw); Mem.uw = Rd.uw;}}, {{ uint32_t tmp = mem_data; Rd.uw = tmp; }}, MEM_SWAP_COND); 0x3D: Nop::prefetcha({{ }}); 0x3E: CasAlt::casxa({{mem_data = gtoh(Rs2); Mem.udw = Rd.udw; }}, {{ Rd.udw = mem_data; }}, MEM_SWAP_COND); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?