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 + -
显示快捷键?