aboutsummaryrefslogtreecommitdiff
path: root/spike_main
diff options
context:
space:
mode:
authorChih-Min Chao <chihmin.chao@sifive.com>2020-05-27 00:48:10 -0700
committerChih-Min Chao <chihmin.chao@sifive.com>2020-05-28 22:36:14 -0700
commitfb84a685a89603eb91bd36261addc0fd13d2b576 (patch)
tree8bdfc2b3d7a4dcc69bbf746ed230c7f31e7b7c68 /spike_main
parentd4f881d0ecce46c6f011603aeb74ad3a72b28fbf (diff)
downloadspike-fb84a685a89603eb91bd36261addc0fd13d2b576.zip
spike-fb84a685a89603eb91bd36261addc0fd13d2b576.tar.gz
spike-fb84a685a89603eb91bd36261addc0fd13d2b576.tar.bz2
rvv: extenc VU structure to support 0.9 new fields
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
Diffstat (limited to 'spike_main')
-rw-r--r--spike_main/disasm.cc25
1 files changed, 23 insertions, 2 deletions
diff --git a/spike_main/disasm.cc b/spike_main/disasm.cc
index d52cc91..4ec3d4b 100644
--- a/spike_main/disasm.cc
+++ b/spike_main/disasm.cc
@@ -1,6 +1,7 @@
// See LICENSE for license details.
#include "disasm.h"
+#include <cassert>
#include <string>
#include <vector>
#include <cstdarg>
@@ -319,9 +320,29 @@ struct : public arg_t {
std::stringstream s;
int sew = insn.v_sew();
int lmul = insn.v_lmul();
+ auto vta = insn.v_vta() == 1 ? "ta" : "tu";
+ auto vma = insn.v_vma() == 1 ? "ma" : "mu";
s << "e" << sew;
- if (lmul != 1)
- s << ",m" << lmul;
+ if(insn.v_frac_lmul()) {
+ std::string lmul_str = "";
+ switch(lmul){
+ case 3:
+ lmul_str = "f2";
+ break;
+ case 2:
+ lmul_str = "f4";
+ break;
+ case 1:
+ lmul_str = "f8";
+ break;
+ default:
+ assert(true && "unsupport fractional LMUL");
+ }
+ s << ", m" << lmul_str;
+ } else {
+ s << ", m" << (1 << lmul);
+ }
+ s << ", " << vta << ", " << vma;
return s.str();
}
} v_vtype;