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

1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn v(
4    Vlr { vd, rs1 }: Vlr,
5    nf: usize,
6    v: &mut VectorContext<'_>,
7    x: &IntegerRegisters,
8    mem: &Memory,
9) {
10    let addr = x[rs1] as usize;
11    let elements_amount = v.vec_engine.vlen.byte_length();
12
13    for segment in 0..nf {
14        let vreg = (0..elements_amount)
15            .map(|offset| addr.wrapping_add(offset.wrapping_mul(nf).wrapping_add(segment)))
16            .map(|address| mem.get(address))
17            .map(u8::from_le_bytes)
18            .collect();
19
20        v.apply(vd + segment, vreg);
21    }
22}