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:
Ian Jiang
2020-08-21 18:46:04 +08:00
parent 6ff5fc5c1c
commit 5e1bc74efe

View File

@@ -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();
}
}};