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