diff options
Diffstat (limited to 'riscv')
-rw-r--r-- | riscv/decode.h | 4 | ||||
-rw-r--r-- | riscv/insns/vmerge_vim.h | 1 | ||||
-rw-r--r-- | riscv/insns/vmerge_vvm.h | 1 | ||||
-rw-r--r-- | riscv/insns/vmerge_vxm.h | 1 |
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 ({ |