eeric/rv_core/instruction/executor/v/
vslide1up.rs

1use 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}