diff options
author | Chih-Min Chao <chihmin.chao@sifive.com> | 2019-10-23 01:36:48 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2019-11-11 19:02:35 -0800 |
commit | 4808f84a1833de2bbd87a92355f75991c4697312 (patch) | |
tree | 464a74599559173af989a150973a76539d1ba663 /riscv/insns/vrgather_vi.h | |
parent | e289b996c6ef60693b394b57bb53034c38eff4e4 (diff) | |
download | spike-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.h | 18 |
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; |