diff --git a/src/arch/riscv/isa/formats/compressed.isa b/src/arch/riscv/isa/formats/compressed.isa index 607415b424..8d6a125ef1 100644 --- a/src/arch/riscv/isa/formats/compressed.isa +++ b/src/arch/riscv/isa/formats/compressed.isa @@ -173,7 +173,7 @@ def template CJumpExecute {{ %(class_name)s::branchTarget(ThreadContext *tc) const { PCStateBase *pc_ptr = tc->pcState().clone(); - pc_ptr->as().set(tc->getReg(srcRegIdx(0)) & ~0x1); + pc_ptr->as().set(rvZext(tc->getReg(srcRegIdx(0)) & ~0x1)); return std::unique_ptr{pc_ptr}; } diff --git a/src/arch/riscv/isa/formats/standard.isa b/src/arch/riscv/isa/formats/standard.isa index b201a90fef..83b135daf2 100644 --- a/src/arch/riscv/isa/formats/standard.isa +++ b/src/arch/riscv/isa/formats/standard.isa @@ -199,7 +199,7 @@ def template BranchExecute {{ { auto &rpc = branch_pc.as(); std::unique_ptr npc(dynamic_cast(rpc.clone())); - npc->set(rpc.pc() + imm); + npc->set(rvZext(rpc.pc() + imm)); return npc; } @@ -306,7 +306,8 @@ def template JumpExecute {{ %(class_name)s::branchTarget(ThreadContext *tc) const { PCStateBase *pc_ptr = tc->pcState().clone(); - pc_ptr->as().set((tc->getReg(srcRegIdx(0)) + imm) & ~0x1); + pc_ptr->as().set( + rvZext((tc->getReg(srcRegIdx(0)) + imm) & ~0x1)); return std::unique_ptr{pc_ptr}; }