aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/vrgather_vi.h
diff options
context:
space:
mode:
authorChih-Min Chao <chihmin.chao@sifive.com>2019-10-23 01:36:48 -0700
committerChih-Min Chao <chihmin.chao@sifive.com>2019-11-11 19:02:35 -0800
commit4808f84a1833de2bbd87a92355f75991c4697312 (patch)
tree464a74599559173af989a150973a76539d1ba663 /riscv/insns/vrgather_vi.h
parente289b996c6ef60693b394b57bb53034c38eff4e4 (diff)
downloadspike-4808f84a1833de2bbd87a92355f75991c4697312.zip
spike-4808f84a1833de2bbd87a92355f75991c4697312.tar.gz
spike-4808f84a1833de2bbd87a92355f75991c4697312.tar.bz2
rvv: add reg checking for specifial instructions
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
Diffstat (limited to 'riscv/insns/vrgather_vi.h')
-rw-r--r--riscv/insns/vrgather_vi.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/riscv/insns/vrgather_vi.h b/riscv/insns/vrgather_vi.h
index eff67b8..cab4a78 100644
--- a/riscv/insns/vrgather_vi.h
+++ b/riscv/insns/vrgather_vi.h
@@ -1,11 +1,14 @@
// vrgather.vi vd, vs2, zimm5 vm # vd[i] = (zimm5 >= VLMAX) ? 0 : vs2[zimm5];
-require(P.VU.vsew >= e8 && P.VU.vsew <= e64);
-require_vector;
-reg_t vl = P.VU.vl;
-reg_t sew = P.VU.vsew;
-reg_t rd_num = insn.rd();
-reg_t rs2_num = insn.rs2();
+require((insn.rd() & (P.VU.vlmul - 1)) == 0);
+require((insn.rs2() & (P.VU.vlmul - 1)) == 0);
+require(insn.rd() != insn.rs2());
+if (insn.v_vm() == 0)
+ require(insn.rd() != 0);
+
reg_t zimm5 = insn.v_zimm5();
+
+VI_LOOP_BASE
+
for (reg_t i = P.VU.vstart; i < vl; ++i) {
VI_LOOP_ELEMENT_SKIP();
@@ -25,5 +28,4 @@ for (reg_t i = P.VU.vstart; i < vl; ++i) {
}
}
-VI_TAIL_ZERO(1);
-P.VU.vstart = 0;
+VI_LOOP_END;