diff options
author | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-08-27 08:46:06 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-08-31 00:44:36 -0700 |
commit | 526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8 (patch) | |
tree | 5283bb927a28d870685a2c418f74933ca1bf3974 /spike_main | |
parent | 52b3eb938079c0d91f40cfc1a733ee21dfa03de7 (diff) | |
download | riscv-isa-sim-526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8.zip riscv-isa-sim-526b9abb7cd44d459ff1c31ae88cbc0a00cc21f8.tar.gz riscv-isa-sim-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.cc | 9 |
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)); } |