diff --git a/src/arch/riscvcapstone/isa/decoder.isa b/src/arch/riscvcapstone/isa/decoder.isa index 22c3208f38..11d1fecd06 100644 --- a/src/arch/riscvcapstone/isa/decoder.isa +++ b/src/arch/riscvcapstone/isa/decoder.isa @@ -1628,7 +1628,7 @@ decode QUADRANT default Unknown::unknown() { static_cast(rs1_cap.type()), rs1_cap.nodeId()); }}, IsSerializing, IsNonSpeculative, IsSerializeAfter); - 0xd: printregs ({{ + 0x12: printregs ({{ using namespace gem5::RiscvcapstoneISA::o3; DynInst *dyn_inst = dynamic_cast(xc); assert(dyn_inst); @@ -1660,10 +1660,12 @@ decode QUADRANT default Unknown::unknown() { format ROp { 0xc: cssetworld ({{ Rs1_ud; - //0xd: csonpartition //0xe: csseteh //0xf: csonnormaleh }}); + 0xd: csonpartition ({{ + Rs1_ud; + }}); } format RNodeOp { 0x11: printnode ({{ @@ -1688,7 +1690,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_sb, traceData); - Rd_trv.getRegVal().intVal() = Mem_sb; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_sb; + + Rd_trv = temp_regval; }}); 0x1: lh ({{ //ea_code @@ -1696,7 +1702,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_sh, traceData); - Rd_trv.getRegVal().intVal() = Mem_sh; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_sh; + + Rd_trv = temp_regval; }}); 0x2: lw ({{ //ea_code @@ -1704,7 +1714,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_sw, traceData); - Rd_trv.getRegVal().intVal() = Mem_sw; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_sw; + + Rd_trv = temp_regval; }}); 0x3: ld ({{ //ea_code @@ -1712,7 +1726,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_sd, traceData); - Rd_trv.getRegVal().intVal() = Mem_sd; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_sd; + + Rd_trv = temp_regval; }}); 0x4: lbu ({{ //ea_code @@ -1720,7 +1738,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_ub, traceData); - Rd_trv.getRegVal().intVal() = Mem_ub; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_ub; + + Rd_trv = temp_regval; }}); 0x5: lhu ({{ //ea_code @@ -1728,7 +1750,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_uh, traceData); - Rd_trv.getRegVal().intVal() = Mem_uh; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_uh; + + Rd_trv = temp_regval; }}); 0x6: lwu ({{ //ea_code @@ -1736,7 +1762,11 @@ decode QUADRANT default Unknown::unknown() { Rs1_trv; getMemLE(pkt, Mem_uw, traceData); - Rd_trv.getRegVal().intVal() = Mem_uw; + ConstTaggedRegVal temp_regval; + temp_regval.setTag(false); + temp_regval.getRegVal().intVal() = Mem_uw; + + Rd_trv = temp_regval; }}); } } diff --git a/src/arch/riscvcapstone/isa/formats/rnode.isa b/src/arch/riscvcapstone/isa/formats/rnode.isa index 58da77da1d..939631b1c7 100644 --- a/src/arch/riscvcapstone/isa/formats/rnode.isa +++ b/src/arch/riscvcapstone/isa/formats/rnode.isa @@ -90,7 +90,7 @@ def template RNodeStoreConstructor {{ hasNodeOp = true; flags[IsStore] = true; - flags[IsLoad] = false; + flags[IsLoad] = true; } }}; @@ -139,7 +139,7 @@ def template RNodeMemExecute {{ assert(o3cpu); bool cwrld = o3cpu->cwrld[dyn_inst->threadNumber]; - uint64_t emode = o3cpu->readMiscReg(CSR_EMODE, dyn_inst->threadNumber); + uint64_t emode = o3cpu->readMiscReg(MISCREG_EMODE, dyn_inst->threadNumber); if(cwrld || (!cwrld && emode)) { if(!Rs1.getTag()) { return std::make_shared("Unexpected operand type (24)", machInst); @@ -276,7 +276,7 @@ def template RNodeStoreExecute {{ assert(o3cpu); bool cwrld = o3cpu->cwrld[dyn_inst->threadNumber]; - uint64_t emode = o3cpu->readMiscReg(CSR_EMODE, dyn_inst->threadNumber); + uint64_t emode = o3cpu->readMiscReg(MISCREG_EMODE, dyn_inst->threadNumber); if(cwrld || (!cwrld && emode)) { if(!Rs1.getTag()) { return std::make_shared( @@ -336,7 +336,7 @@ def template RNodeStoreExecute {{ return std::make_shared( "Store address misaligned (6)", machInst); - Addr clen_aligned = EA & (sizeof(RegVal) - 1); + Addr clen_aligned = EA & ~(sizeof(RegVal) - 1); dyn_inst->initiateGetTag(clen_aligned); RegVal dummy; initiateMemRead(xc, traceData, clen_aligned, dummy, memAccessFlags);