diff options
author | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-06-29 09:58:41 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-07-02 21:23:54 -0700 |
commit | 0884e5bbd77a4df950c2ccfff78ad157ffcec631 (patch) | |
tree | 55065c3fd1d4a7d5f702d942901db5cfd036f589 | |
parent | 61f0dab33f7e529cc709908840311a8a7dcb23ce (diff) | |
download | spike-0884e5bbd77a4df950c2ccfff78ad157ffcec631.zip spike-0884e5bbd77a4df950c2ccfff78ad157ffcec631.tar.gz spike-0884e5bbd77a4df950c2ccfff78ad157ffcec631.tar.bz2 |
rvv: make vmvfnr respect vstart
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
-rw-r--r-- | riscv/insns/vmvnfr_v.h | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/riscv/insns/vmvnfr_v.h b/riscv/insns/vmvnfr_v.h index 51045ce..0813d69 100644 --- a/riscv/insns/vmvnfr_v.h +++ b/riscv/insns/vmvnfr_v.h @@ -6,10 +6,9 @@ const reg_t vs2 = insn.rs2(); const reg_t len = insn.rs1() + 1; require((vd & (len - 1)) == 0); require((vs2 & (len - 1)) == 0); -if (vd != vs2) { - for (reg_t i = 0; i < len; ++i) { - memcpy(&P.VU.elt<uint8_t>(vd + i, 0, true), - &P.VU.elt<uint8_t>(vs2 + i, 0), P.VU.vlenb); - } +const reg_t size = len * P.VU.vlenb; +if (vd != vs2 && P.VU.vstart < size) { + memcpy(&P.VU.elt<uint8_t>(vd, P.VU.vstart, true), + &P.VU.elt<uint8_t>(vs2, P.VU.vstart), size - P.VU.vstart); } P.VU.vstart = 0; |