diff options
author | Avishai Tvila <avishai.tvila@gmail.com> | 2019-04-04 13:20:24 -0700 |
---|---|---|
committer | Avishay Tvila <avishai.tvila@gmail.com> | 2019-05-03 12:53:53 +0000 |
commit | b4b487e1ad4c3fa9b6295385a9d9899fb743c788 (patch) | |
tree | f8b683d893810b1011223800d9b73819a68c6ca8 /src/arch/isa_parser.py | |
parent | b6d60e82ddfed6a67be4d334841b77d9e8813c0b (diff) | |
download | gem5-b4b487e1ad4c3fa9b6295385a9d9899fb743c788.tar.xz |
arch-riscv,isa: Fix for compressed jump (c_j) imm
c_j(al) has a special format, called CJ.
The jump offset format is instbits[12:2] --> offset[11|4|9:8|10|6|7|3:1|5]
Currently in decoder.isa, c_j format is JOp, the imm and branchTarget are incorrect
In the execute section (decoder.isa:228), the imm fields is ignored and the offset is calculated correctlly.
As a result, we get decoder flush for each c_j instance
I've added CJOp format in compressed.isa, and use it in execute section.
In addition, c_j is mappped to jal zero, cj_imm, and actually is neither indirect control nor a function call
I fixed the flags accordently.
I'll fix all IsRet, IsCall and IsIndirectControl flags for rest of (c_)jal(r) in my next commit.
I ran coremark -O0 before my fix and I got 37.7% branch miss-rate, after the fix the branch miss-rate is <13%
Change-Id: I608d5894a78a1ebefe36f21e21aaea68b42bccfc
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17808
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Alec Roelke <alec.roelke@gmail.com>
Diffstat (limited to 'src/arch/isa_parser.py')
0 files changed, 0 insertions, 0 deletions