eeric/rv_core/instruction/executor/v/
vlr.rs1use 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}