aboutsummaryrefslogtreecommitdiff
path: root/target/riscv/instmap.h
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2020-02-25 12:47:05 +0000
committerAlex Bennée <alex.bennee@linaro.org>2020-02-25 20:20:23 +0000
commit25139bf7f87a0d0e758d4198579a227ab551802a (patch)
tree8cbe5a4d09daf9cb4985b972a8e35c2347d86f8e /target/riscv/instmap.h
parented04c8b14c8bed6b8d940547ed237d309fca7dfc (diff)
target/riscv: progressively load the instruction during decode
The plugin system would throw up a harmless warning when it detected that a disassembly of an instruction didn't use all it's bytes. Fix the riscv decoder to only load the instruction bytes it needs as it needs them. This drops opcode from the ctx in favour if passing the appropriately sized opcode down a few levels of the decode. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Robert Foley <robert.foley@linaro.org> Message-Id: <20200225124710.14152-15-alex.bennee@linaro.org>
Diffstat (limited to 'target/riscv/instmap.h')
-rw-r--r--target/riscv/instmap.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/target/riscv/instmap.h b/target/riscv/instmap.h
index f8ad7d60fd..40b6d2b64d 100644
--- a/target/riscv/instmap.h
+++ b/target/riscv/instmap.h
@@ -344,8 +344,8 @@ enum {
#define GET_C_LW_IMM(inst) ((extract32(inst, 6, 1) << 2) \
| (extract32(inst, 10, 3) << 3) \
| (extract32(inst, 5, 1) << 6))
-#define GET_C_LD_IMM(inst) ((extract32(inst, 10, 3) << 3) \
- | (extract32(inst, 5, 2) << 6))
+#define GET_C_LD_IMM(inst) ((extract16(inst, 10, 3) << 3) \
+ | (extract16(inst, 5, 2) << 6))
#define GET_C_J_IMM(inst) ((extract32(inst, 3, 3) << 1) \
| (extract32(inst, 11, 1) << 4) \
| (extract32(inst, 2, 1) << 5) \
@@ -363,7 +363,7 @@ enum {
#define GET_C_RD(inst) GET_RD(inst)
#define GET_C_RS1(inst) GET_RD(inst)
#define GET_C_RS2(inst) extract32(inst, 2, 5)
-#define GET_C_RS1S(inst) (8 + extract32(inst, 7, 3))
-#define GET_C_RS2S(inst) (8 + extract32(inst, 2, 3))
+#define GET_C_RS1S(inst) (8 + extract16(inst, 7, 3))
+#define GET_C_RS2S(inst) (8 + extract16(inst, 2, 3))
#endif