aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
Diffstat (limited to 'riscv')
-rw-r--r--riscv/decode.h4
-rw-r--r--riscv/insns/vmerge_vim.h1
-rw-r--r--riscv/insns/vmerge_vvm.h1
-rw-r--r--riscv/insns/vmerge_vxm.h1
4 files changed, 4 insertions, 3 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index 1794475..48079c1 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -457,9 +457,8 @@ static inline bool is_overlapped(const int astart, const int asize,
#define VI_CHECK_SXX \
VI_CHECK_STORE_SXX; \
- if (P.VU.vlmul > 1 && insn.v_vm() == 0) { \
+ if (insn.v_vm() == 0 && (insn.v_nf() > 0 || P.VU.vlmul > 1)) \
require(insn.rd() != 0); \
- }
#define VI_CHECK_DSS(is_vs1) \
VI_WIDE_CHECK_COMMON; \
@@ -806,7 +805,6 @@ static inline bool is_overlapped(const int astart, const int asize,
// merge and copy loop
#define VI_VVXI_MERGE_LOOP(BODY) \
- VI_CHECK_SXX; \
VI_GENERAL_LOOP_BASE \
if (sew == e8){ \
VXI_PARAMS(e8); \
diff --git a/riscv/insns/vmerge_vim.h b/riscv/insns/vmerge_vim.h
index c6c87c7..6185da5 100644
--- a/riscv/insns/vmerge_vim.h
+++ b/riscv/insns/vmerge_vim.h
@@ -1,4 +1,5 @@
// vmerge.vim vd, vs2, simm5
+require_vector;
VI_CHECK_SSS(false);
VI_VVXI_MERGE_LOOP
({
diff --git a/riscv/insns/vmerge_vvm.h b/riscv/insns/vmerge_vvm.h
index 97a0182..f0a3fd5 100644
--- a/riscv/insns/vmerge_vvm.h
+++ b/riscv/insns/vmerge_vvm.h
@@ -1,4 +1,5 @@
// vmerge.vvm vd, vs2, vs1
+require_vector;
VI_CHECK_SSS(true);
VI_VVXI_MERGE_LOOP
({
diff --git a/riscv/insns/vmerge_vxm.h b/riscv/insns/vmerge_vxm.h
index de7df91..505b32f 100644
--- a/riscv/insns/vmerge_vxm.h
+++ b/riscv/insns/vmerge_vxm.h
@@ -1,4 +1,5 @@
// vmerge.vxm vd, vs2, rs1
+require_vector;
VI_CHECK_SSS(false);
VI_VVXI_MERGE_LOOP
({