aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
authorChih-Min Chao <chihmin.chao@sifive.com>2020-06-29 09:58:41 -0700
committerChih-Min Chao <chihmin.chao@sifive.com>2020-07-02 21:23:54 -0700
commit0884e5bbd77a4df950c2ccfff78ad157ffcec631 (patch)
tree55065c3fd1d4a7d5f702d942901db5cfd036f589 /riscv
parent61f0dab33f7e529cc709908840311a8a7dcb23ce (diff)
downloadspike-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>
Diffstat (limited to 'riscv')
-rw-r--r--riscv/insns/vmvnfr_v.h9
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;