eeric_core/rv_core/instruction/executor/v/
vslidedown.rs1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn vx(Opivx { vd, rs1, vs2, vm }: Opivx, v: &mut VectorContext<'_>, x: &IntegerRegisters) {
4 let offset = x[rs1] as usize;
5
6 let vs2_snapshot = v.get(vs2).iter_eew().collect_vec();
7
8 let vreg = v
9 .get(vd)
10 .iter_eew()
11 .enumerate()
12 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |(index, _)| {
13 vs2_snapshot.get(index + offset).copied().unwrap_or(0)
14 })
15 .collect_with_eew(v.vec_engine.sew);
16
17 v.apply(vd, vreg);
18}
19
20pub fn vi(Opivi { vd, imm5, vs2, vm }: Opivi, v: &mut VectorContext<'_>) {
21 let offset = imm5 as usize;
22
23 let vs2_snapshot = v.get(vs2).iter_eew().collect_vec();
24
25 let vreg = v
26 .get(vd)
27 .iter_eew()
28 .enumerate()
29 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |(index, _)| {
30 vs2_snapshot.get(index + offset).copied().unwrap_or(0)
31 })
32 .collect_with_eew(v.vec_engine.sew);
33
34 v.apply(vd, vreg);
35}