aboutsummaryrefslogtreecommitdiff
path: root/riscv/decode.h
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/decode.h')
-rw-r--r--riscv/decode.h16
1 files changed, 12 insertions, 4 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index fa96ced..1b844c0 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -475,6 +475,14 @@ static inline bool is_aligned(const unsigned val, const unsigned pos)
} \
require_vm; \
+#define VI_CHECK_CI_BI(is_vs1) \
+ require_noover(insn.rd(), 1, insn.rs2(), P.VU.vflmul); \
+ require_align(insn.rs2(), P.VU.vflmul); \
+ if (is_vs1) {\
+ require_noover(insn.rd(), 1, insn.rs1(), P.VU.vflmul); \
+ require_align(insn.rs1(), P.VU.vflmul); \
+ }
+
#define VI_CHECK_MSS(is_vs1) \
if (P.VU.vflmul > 1) { \
require_noover(insn.rd(), 1, insn.rs2(), P.VU.vflmul); \
@@ -1366,7 +1374,7 @@ VI_LOOP_END
// carry/borrow bit loop
#define VI_VV_LOOP_CARRY(BODY) \
- VI_CHECK_MSS(true); \
+ VI_CHECK_CI_BI(true); \
VI_GENERAL_LOOP_BASE \
VI_MASK_VARS \
if (sew == e8){ \
@@ -1385,7 +1393,7 @@ VI_LOOP_END
VI_LOOP_END
#define VI_XI_LOOP_CARRY(BODY) \
- VI_CHECK_MSS(false); \
+ VI_CHECK_CI_BI(false); \
VI_GENERAL_LOOP_BASE \
VI_MASK_VARS \
if (sew == e8){ \
@@ -1404,7 +1412,7 @@ VI_LOOP_END
VI_LOOP_END
#define VI_VV_LOOP_WITH_CARRY(BODY) \
- require(P.VU.vflmul == 1 || insn.rd() != 0); \
+ require(insn.rd() != 0); \
VI_CHECK_SSS(true); \
VI_GENERAL_LOOP_BASE \
VI_MASK_VARS \
@@ -1424,7 +1432,7 @@ VI_LOOP_END
VI_LOOP_END
#define VI_XI_LOOP_WITH_CARRY(BODY) \
- require(P.VU.vflmul == 1 || insn.rd() != 0); \
+ require(insn.rd() != 0); \
VI_CHECK_SSS(false); \
VI_GENERAL_LOOP_BASE \
VI_MASK_VARS \