aboutsummaryrefslogtreecommitdiff
path: root/riscv/decode.h
diff options
context:
space:
mode:
authorChih-Min Chao <chihmin.chao@sifive.com>2020-06-09 20:09:21 -0700
committerChih-Min Chao <chihmin.chao@sifive.com>2020-06-11 17:55:37 -0700
commitcbaf47a0c06e2c0123ae114d7ab37bc5e50717fc (patch)
tree28884bea6a8ea22c3fb245d7a4d2f56ca11d9354 /riscv/decode.h
parent31dbaabb32334acb3312e7fba2a44fc40afea24b (diff)
downloadspike-cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc.zip
spike-cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc.tar.gz
spike-cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc.tar.bz2
rvv: fix comparison and narrow overlapping rule
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
Diffstat (limited to 'riscv/decode.h')
-rw-r--r--riscv/decode.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/riscv/decode.h b/riscv/decode.h
index 425a68e..79d5205 100644
--- a/riscv/decode.h
+++ b/riscv/decode.h
@@ -476,10 +476,12 @@ static inline bool is_aligned(const unsigned val, const unsigned pos)
require_vm; \
#define VI_CHECK_MSS(is_vs1) \
- require_noover(insn.rd(), 1, insn.rs2(), P.VU.vflmul); \
+ if (insn.rd() != insn.rs2()) \
+ 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); \
+ if (insn.rd() != insn.rs1()) \
+ require_noover(insn.rd(), 1, insn.rs1(), P.VU.vflmul); \
require_align(insn.rs1(), P.VU.vflmul); \
} \
@@ -542,7 +544,8 @@ static inline bool is_aligned(const unsigned val, const unsigned pos)
#define VI_CHECK_SDS(is_vs1) \
VI_NARROW_CHECK_COMMON; \
- require_noover(insn.rd(), P.VU.vflmul, insn.rs2(), P.VU.vflmul * 2); \
+ if (insn.rd() != insn.rs2()) \
+ require_noover(insn.rd(), P.VU.vflmul, insn.rs2(), P.VU.vflmul * 2); \
if (is_vs1) \
require_align(insn.rs1(), P.VU.vflmul); \