aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
Diffstat (limited to 'riscv')
-rw-r--r--riscv/insns/vmsbf_m.h7
-rw-r--r--riscv/insns/vmsif_m.h7
-rw-r--r--riscv/insns/vmsof_m.h7
3 files changed, 12 insertions, 9 deletions
diff --git a/riscv/insns/vmsbf_m.h b/riscv/insns/vmsbf_m.h
index 356ed2b..11582e5 100644
--- a/riscv/insns/vmsbf_m.h
+++ b/riscv/insns/vmsbf_m.h
@@ -2,10 +2,11 @@
require(P.VU.vsew >= e8 && P.VU.vsew <= e64);
require_vector;
require(P.VU.vstart == 0);
-reg_t vl = P.VU.vl;
-reg_t sew = P.VU.vsew;
+if (insn.v_vm() == 0)
+ require(insn.rd() != 0 && insn.rd() != insn.rs2());
+
+reg_t vl = std::min(P.VU.vl, P.VU.VLEN);
reg_t rd_num = insn.rd();
-reg_t rs1_num = insn.rs1();
reg_t rs2_num = insn.rs2();
bool has_one = false;
diff --git a/riscv/insns/vmsif_m.h b/riscv/insns/vmsif_m.h
index 366c926..e608a61 100644
--- a/riscv/insns/vmsif_m.h
+++ b/riscv/insns/vmsif_m.h
@@ -2,10 +2,11 @@
require(P.VU.vsew >= e8 && P.VU.vsew <= e64);
require_vector;
require(P.VU.vstart == 0);
-reg_t vl = P.VU.vl;
-reg_t sew = P.VU.vsew;
+if (insn.v_vm() == 0)
+ require(insn.rd() != 0 && insn.rd() != insn.rs2());
+
+reg_t vl = std::min(P.VU.vl, P.VU.VLEN);
reg_t rd_num = insn.rd();
-reg_t rs1_num = insn.rs1();
reg_t rs2_num = insn.rs2();
bool has_one = false;
diff --git a/riscv/insns/vmsof_m.h b/riscv/insns/vmsof_m.h
index 2481c0b..f6c65be 100644
--- a/riscv/insns/vmsof_m.h
+++ b/riscv/insns/vmsof_m.h
@@ -2,10 +2,11 @@
require(P.VU.vsew >= e8 && P.VU.vsew <= e64);
require_vector;
require(P.VU.vstart == 0);
-reg_t vl = P.VU.vl;
-reg_t sew = P.VU.vsew;
+if (insn.v_vm() == 0)
+ require(insn.rd() != 0 && insn.rd() != insn.rs2());
+
+reg_t vl = std::min(P.VU.vl, P.VU.VLEN);
reg_t rd_num = insn.rd();
-reg_t rs1_num = insn.rs1();
reg_t rs2_num = insn.rs2();
bool has_one = false;