arch-riscv: Fix disassembling of jalr
The 'jalr' instruction of 'format Jump' should have an immediate as offset, and the Rd register could not be always omitted. This patch fixes the problem. Example output: jalr ra, -168(ra) jalr zero, 0(ra) jalr ra, 0(a5) Note that this does not apply to the other two instructions of the same format: 'c.jr' and 'c.jalr'. Change-Id: Ia656c2e8bfafd243bfec221ac291190a84684929 Signed-off-by: Ian Jiang <ianjiang.ict@gmail.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33155 Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Maintainer: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -283,10 +283,13 @@ def template JumpExecute {{
|
||||
%(class_name)s::generateDisassembly(
|
||||
Addr pc, const Loader::SymbolTable *symtab) const
|
||||
{
|
||||
std::vector<RegId> indices = {%(regs)s};
|
||||
std::stringstream ss;
|
||||
ss << mnemonic << ' ';
|
||||
ss << registerName(indices[0]);
|
||||
if (QUADRANT == 0x3)
|
||||
ss << registerName(_destRegIdx[0]) << ", "
|
||||
<< imm << "(" << registerName(_srcRegIdx[0]) << ")";
|
||||
else
|
||||
ss << registerName(_srcRegIdx[0]);
|
||||
return ss.str();
|
||||
}
|
||||
}};
|
||||
|
||||
Reference in New Issue
Block a user