Browse Source
Merge pull request #403 from chihminchao/rvv-fix-2020-02-20
Rvv fix 2020 02 20
pull/405/head
Andrew Waterman
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with
3 additions and
10 deletions
-
riscv/decode.h
-
riscv/execute.cc
-
riscv/insns/vfwredosum_vs.h
-
riscv/insns/vfwredsum_vs.h
-
riscv/insns/vmerge_vim.h
-
riscv/insns/vmerge_vvm.h
|
|
|
@ -419,13 +419,11 @@ static inline bool is_overlapped(const int astart, const int asize, |
|
|
|
require_vector; \ |
|
|
|
require((insn.rd() & (P.VU.vlmul - 1)) == 0); \ |
|
|
|
require((insn.rs2() & (P.VU.vlmul - 1)) == 0); \ |
|
|
|
if (insn.v_nf() > 0) \ |
|
|
|
require(!is_overlapped(insn.rd(), P.VU.vlmul, insn.rs2(), P.VU.vlmul)); \ |
|
|
|
if (insn.v_vm() == 0 && (insn.v_nf() > 0 || P.VU.vlmul > 1)) \ |
|
|
|
require(insn.rd() != 0); \ |
|
|
|
|
|
|
|
#define VI_CHECK_LD_INDEX \ |
|
|
|
VI_CHECK_ST_INDEX; \ |
|
|
|
if (insn.v_nf() > 0) \ |
|
|
|
require(!is_overlapped(insn.rd(), P.VU.vlmul, insn.rs2(), P.VU.vlmul)); \ |
|
|
|
if (insn.v_vm() == 0 && (insn.v_nf() > 0 || P.VU.vlmul > 1)) \ |
|
|
|
require(insn.rd() != 0); \ |
|
|
|
|
|
|
|
@ -1569,7 +1567,6 @@ for (reg_t i = 0; i < vlmax; ++i) { \ |
|
|
|
bool early_stop = false; \ |
|
|
|
const reg_t vlmul = P.VU.vlmul; \ |
|
|
|
require(rd_num + nf * P.VU.vlmul <= NVPR); \ |
|
|
|
p->VU.vstart = 0; \ |
|
|
|
for (reg_t i = p->VU.vstart; i < vl; ++i) { \ |
|
|
|
VI_STRIP(i); \ |
|
|
|
VI_ELEMENT_SKIP(i); \ |
|
|
|
|
|
|
|
@ -92,7 +92,7 @@ static void commit_log_print_insn(processor_t* p, reg_t pc, insn_t insn) |
|
|
|
} |
|
|
|
|
|
|
|
if (is_vec) |
|
|
|
fprintf(stderr, " e%ld m%ld", p->VU.vsew >> 3, p->VU.vlmul); |
|
|
|
fprintf(stderr, " e%ld m%ld", p->VU.vsew, p->VU.vlmul); |
|
|
|
|
|
|
|
fprintf(stderr, " %c%2d ", prefix, rd); |
|
|
|
if (is_vec) |
|
|
|
|
|
|
|
@ -2,7 +2,6 @@ |
|
|
|
require_vector; |
|
|
|
require(P.VU.vsew * 2 <= P.VU.ELEN); |
|
|
|
require((insn.rs2() & (P.VU.vlmul - 1)) == 0); |
|
|
|
require(P.VU.vlmul <= 4); |
|
|
|
VI_VFP_VV_LOOP_WIDE_REDUCTION |
|
|
|
({ |
|
|
|
vd_0 = f64_add(vd_0, vs2); |
|
|
|
|
|
|
|
@ -2,7 +2,6 @@ |
|
|
|
require_vector; |
|
|
|
require(P.VU.vsew * 2 <= P.VU.ELEN); |
|
|
|
require((insn.rs2() & (P.VU.vlmul - 1)) == 0); |
|
|
|
require(P.VU.vlmul <= 4); |
|
|
|
VI_VFP_VV_LOOP_WIDE_REDUCTION |
|
|
|
({ |
|
|
|
vd_0 = f64_add(vd_0, vs2); |
|
|
|
|
|
|
|
@ -1,5 +1,4 @@ |
|
|
|
// vmerge.vim vd, vs2, simm5
|
|
|
|
require(insn.rd() != 0); |
|
|
|
VI_CHECK_SSS(false); |
|
|
|
VI_VVXI_MERGE_LOOP |
|
|
|
({ |
|
|
|
|
|
|
|
@ -1,5 +1,4 @@ |
|
|
|
// vmerge.vvm vd, vs2, vs1
|
|
|
|
require(insn.rd() != 0); |
|
|
|
VI_CHECK_SSS(true); |
|
|
|
VI_VVXI_MERGE_LOOP |
|
|
|
({ |
|
|
|
|