aboutsummaryrefslogtreecommitdiff
path: root/riscv
diff options
context:
space:
mode:
authorAndrew Waterman <andrew@sifive.com>2022-09-28 01:21:30 -0700
committerGitHub <noreply@github.com>2022-09-28 01:21:30 -0700
commitc9f9bb5945bc3355b879e716dce12be61007602f (patch)
tree7e850b82ee948baeb78af09b6463154fb0604991 /riscv
parent7ab4caa4a01c825f0be67137f079e8882c9998dc (diff)
parent55c66198fd6bc8f1b16e67a33d2865ca3e7269cb (diff)
downloadspike-c9f9bb5945bc3355b879e716dce12be61007602f.zip
spike-c9f9bb5945bc3355b879e716dce12be61007602f.tar.gz
spike-c9f9bb5945bc3355b879e716dce12be61007602f.tar.bz2
Merge pull request #1103 from riscv-software-src/vmv_x_s_rv32
Fix vmv.x.s for RV32
Diffstat (limited to 'riscv')
-rw-r--r--riscv/insns/vmv_x_s.h17
1 files changed, 9 insertions, 8 deletions
diff --git a/riscv/insns/vmv_x_s.h b/riscv/insns/vmv_x_s.h
index 8451d6a..16153eb 100644
--- a/riscv/insns/vmv_x_s.h
+++ b/riscv/insns/vmv_x_s.h
@@ -1,27 +1,28 @@
// vmv_x_s: rd = vs2[0]
require_vector(true);
require(insn.v_vm() == 1);
-uint64_t xmask = UINT64_MAX >> (64 - P.get_isa().get_max_xlen());
reg_t rs1 = RS1;
reg_t sew = P.VU.vsew;
reg_t rs2_num = insn.rs2();
+reg_t res;
switch (sew) {
case e8:
- WRITE_RD(P.VU.elt<int8_t>(rs2_num, 0));
+ res = P.VU.elt<int8_t>(rs2_num, 0);
break;
case e16:
- WRITE_RD(P.VU.elt<int16_t>(rs2_num, 0));
+ res = P.VU.elt<int16_t>(rs2_num, 0);
break;
case e32:
- WRITE_RD(P.VU.elt<int32_t>(rs2_num, 0));
+ res = P.VU.elt<int32_t>(rs2_num, 0);
break;
case e64:
- if (P.get_isa().get_max_xlen() <= sew)
- WRITE_RD(P.VU.elt<uint64_t>(rs2_num, 0) & xmask);
- else
- WRITE_RD(P.VU.elt<uint64_t>(rs2_num, 0));
+ res = P.VU.elt<uint64_t>(rs2_num, 0);
break;
+default:
+ abort();
}
+WRITE_RD(sext_xlen(res));
+
P.VU.vstart->write(0);