eeric/rv_core/instruction/executor/v/
vslide1up.rs1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn vx(
4 Opmvx {
5 dest: vd,
6 rs1,
7 vs2,
8 vm,
9 }: Opmvx,
10 v: &mut VectorContext<'_>,
11 x: &IntegerRegisters,
12) {
13 let first_value = u64::to_le_bytes(x[rs1]);
14 let vreg_values: Vreg = first_value[0..v.vec_engine.sew.byte_length()]
15 .iter()
16 .copied()
17 .chain(v.get(vs2).iter_byte().skip(v.vec_engine.sew.byte_length()))
18 .take(v.vlmax())
19 .collect();
20
21 let vreg = vreg_values
22 .iter_eew()
23 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vd| vd)
24 .collect_with_eew(v.vec_engine.sew);
25
26 v.apply(vd, vreg);
27}