diff options
author | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-06-09 20:09:21 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-06-11 17:55:37 -0700 |
commit | cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc (patch) | |
tree | 28884bea6a8ea22c3fb245d7a4d2f56ca11d9354 | |
parent | 31dbaabb32334acb3312e7fba2a44fc40afea24b (diff) | |
download | riscv-isa-sim-cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc.zip riscv-isa-sim-cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc.tar.gz riscv-isa-sim-cbaf47a0c06e2c0123ae114d7ab37bc5e50717fc.tar.bz2 |
rvv: fix comparison and narrow overlapping rule
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
-rw-r--r-- | riscv/decode.h | 9 |
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); \ |