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

1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn vv(Opivv { vd, vs1, vs2, vm }: Opivv, v: &mut VectorContext<'_>) {
4    let vreg = izip!(v.get(vs2).iter_eew(), v.get(vs1).iter_eew())
5        .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |(vs2, vs1)| {
6            vs2 | vs1
7        })
8        .collect_with_eew(v.vec_engine.sew);
9
10    v.apply(vd, vreg);
11}
12
13pub fn vx(Opivx { vd, rs1, vs2, vm }: Opivx, v: &mut VectorContext<'_>, x: &IntegerRegisters) {
14    let vreg = v
15        .get(vs2)
16        .iter_eew()
17        .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| vs2 | x[rs1])
18        .collect_with_eew(v.vec_engine.sew);
19
20    v.apply(vd, vreg);
21}
22
23pub fn vi(Opivi { vd, imm5, vs2, vm }: Opivi, v: &mut VectorContext<'_>) {
24    let vreg = v
25        .get(vs2)
26        .iter_eew()
27        .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| {
28            vs2 | imm5 as u64
29        })
30        .collect_with_eew(v.vec_engine.sew);
31
32    v.apply(vd, vreg);
33}