aboutsummaryrefslogtreecommitdiff
path: root/riscv/insns/vmv_x_s.h
diff options
context:
space:
mode:
authorBrandon Wu <33961136+4vtomat@users.noreply.github.com>2022-04-11 14:13:56 +0800
committerGitHub <noreply@github.com>2022-04-10 23:13:56 -0700
commitbdd9f47b05cc7dedae7a36662998ae4fe36b3d4b (patch)
treef869a27ed4ef25c1427db0e583b2da00b44b2130 /riscv/insns/vmv_x_s.h
parent1ed910b229dcdafb25364053c1ed0bbb3fa81fcf (diff)
downloadspike-bdd9f47b05cc7dedae7a36662998ae4fe36b3d4b.zip
spike-bdd9f47b05cc7dedae7a36662998ae4fe36b3d4b.tar.gz
spike-bdd9f47b05cc7dedae7a36662998ae4fe36b3d4b.tar.bz2
Adjust the access index of vs2 to zero in vmv_x_s.h (#969)
Diffstat (limited to 'riscv/insns/vmv_x_s.h')
-rw-r--r--riscv/insns/vmv_x_s.h38
1 files changed, 17 insertions, 21 deletions
diff --git a/riscv/insns/vmv_x_s.h b/riscv/insns/vmv_x_s.h
index f0e805b..d33c3e5 100644
--- a/riscv/insns/vmv_x_s.h
+++ b/riscv/insns/vmv_x_s.h
@@ -1,4 +1,4 @@
-// vmv_x_s: rd = vs2[rs1]
+// 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());
@@ -6,26 +6,22 @@ reg_t rs1 = RS1;
reg_t sew = P.VU.vsew;
reg_t rs2_num = insn.rs2();
-if (!(rs1 >= 0 && rs1 < (P.VU.get_vlen() / sew))) {
- WRITE_RD(0);
-} else {
- switch(sew) {
- case e8:
- WRITE_RD(P.VU.elt<int8_t>(rs2_num, rs1));
- break;
- case e16:
- WRITE_RD(P.VU.elt<int16_t>(rs2_num, rs1));
- break;
- case e32:
- WRITE_RD(P.VU.elt<int32_t>(rs2_num, rs1));
- break;
- case e64:
- if (P.get_isa().get_max_xlen() <= sew)
- WRITE_RD(P.VU.elt<uint64_t>(rs2_num, rs1) & xmask);
- else
- WRITE_RD(P.VU.elt<uint64_t>(rs2_num, rs1));
- break;
- }
+switch(sew) {
+case e8:
+ WRITE_RD(P.VU.elt<int8_t>(rs2_num, 0));
+ break;
+case e16:
+ WRITE_RD(P.VU.elt<int16_t>(rs2_num, 0));
+ break;
+case e32:
+ WRITE_RD(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));
+ break;
}
P.VU.vstart->write(0);