aboutsummaryrefslogtreecommitdiff
path: root/spike_main
diff options
context:
space:
mode:
authorDave.Wen <dave.wen@sifive.com>2020-05-13 20:12:22 -0700
committerDave.Wen <dave.wen@sifive.com>2020-05-13 20:12:22 -0700
commit6fe796c4443749169a224358c62a2068d679126d (patch)
treebc355a62e9de981cca7dfa06e71ee17573772829 /spike_main
parent170ff9c86f928479d75a08e4f72c2e7d7e5b34a0 (diff)
downloadspike-6fe796c4443749169a224358c62a2068d679126d.zip
spike-6fe796c4443749169a224358c62a2068d679126d.tar.gz
spike-6fe796c4443749169a224358c62a2068d679126d.tar.bz2
rvv: fractional_lmul when lmul < 1
Diffstat (limited to 'spike_main')
-rw-r--r--spike_main/disasm.cc24
1 files changed, 22 insertions, 2 deletions
diff --git a/spike_main/disasm.cc b/spike_main/disasm.cc
index bae3d51..e62c985 100644
--- a/spike_main/disasm.cc
+++ b/spike_main/disasm.cc
@@ -1,6 +1,7 @@
// See LICENSE for license details.
#include "disasm.h"
+#include "assert.h"
#include <string>
#include <vector>
#include <cstdarg>
@@ -322,8 +323,27 @@ struct : public arg_t {
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 (lmul != 1) {
+ if(insn.v_frac_lmul()) {
+ std::string lmul_str = "";
+ switch(lmul){
+ case 2:
+ lmul_str = "f2";
+ break;
+ case 4:
+ lmul_str = "f4";
+ break;
+ case 8:
+ lmul_str = "f8";
+ break;
+ default:
+ assert(true && "unsupport fractional LMUL");
+ }
+ s << ", m" << lmul_str;
+ } else {
+ s << ", m" << lmul;
+ }
+ }
s << ", " << vta << ", " << vma;
return s.str();
}