aboutsummaryrefslogtreecommitdiff
path: root/spike_main
diff options
context:
space:
mode:
authorChih-Min Chao <chihmin.chao@sifive.com>2020-08-27 08:46:06 -0700
committerChih-Min Chao <chihmin.chao@sifive.com>2020-08-31 00:44:36 -0700
commit526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8 (patch)
tree5283bb927a28d870685a2c418f74933ca1bf3974 /spike_main
parent52b3eb938079c0d91f40cfc1a733ee21dfa03de7 (diff)
downloadspike-526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8.zip
spike-526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8.tar.gz
spike-526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8.tar.bz2
rvv: disasm: fix amo sub-opcode
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
Diffstat (limited to 'spike_main')
-rw-r--r--spike_main/disasm.cc9
1 files changed, 4 insertions, 5 deletions
diff --git a/spike_main/disasm.cc b/spike_main/disasm.cc
index 02be637..ec9fa0c 100644
--- a/spike_main/disasm.cc
+++ b/spike_main/disasm.cc
@@ -1184,9 +1184,9 @@ disassembler_t::disassembler_t(int xlen)
std::vector<const arg_t *> v_fmt_amo = {&x0, &v_address, &vs2, &vd, &opt, &vm};
for (size_t elt = 0; elt <= 3; ++elt) {
const custom_fmt_t template_insn[] = {
- {match_vamoswapei8_v | mask_wd, mask_vamoswapei8_v | mask_wd,
+ {match_vamoaddei8_v | mask_wd, mask_vamoaddei8_v | mask_wd,
"%sei%d.v", v_fmt_amo_wd},
- {match_vamoswapei8_v, mask_vamoswapei8_v | mask_wd,
+ {match_vamoaddei8_v, mask_vamoaddei8_v | mask_wd,
"%sei%d.v", v_fmt_amo},
};
std::pair<const char*, reg_t> amo_map[] = {
@@ -1199,7 +1199,7 @@ disassembler_t::disassembler_t(int xlen)
{"vamomax", 0x14ul << 27},
{"vamominu", 0x18ul << 27},
{"vamomaxu", 0x1cul << 27}};
- const reg_t elt_map[] = {0x0ul << 12, 0x4ul << 12,
+ const reg_t elt_map[] = {0x0ul << 12, 0x5ul << 12,
0x6ul <<12, 0x7ul << 12};
for (size_t idx = 0; idx < sizeof(amo_map) / sizeof(amo_map[0]); ++idx) {
@@ -1207,8 +1207,7 @@ disassembler_t::disassembler_t(int xlen)
char buf[128];
sprintf(buf, item.fmt, amo_map[idx].first, 8 << elt);
add_insn(new disasm_insn_t(buf,
- (item.match & ~mask_width & ~mask_amoop) |
- (amo_map[idx].second | elt_map[elt]),
+ item.match | amo_map[idx].second | elt_map[elt],
item.mask,
item.arg));
}