use crate::rv_core::instruction::executor::prelude::*;
pub fn vv(Opivv { vd, vs1, vs2, vm }: Opivv, v: &mut VectorContext<'_>) {
let vreg = izip!(v.get(vs2).iter_eew(), v.get(vs1).iter_eew())
.masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |(vs2, vs1)| {
vs2 ^ vs1
})
.collect_with_eew(v.vec_engine.sew);
v.apply(vd, vreg);
}
pub fn vx(Opivx { vd, rs1, vs2, vm }: Opivx, v: &mut VectorContext<'_>, x: &IntegerRegisters) {
let vreg = v
.get(vs2)
.iter_eew()
.masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| vs2 ^ x[rs1])
.collect_with_eew(v.vec_engine.sew);
v.apply(vd, vreg)
}
pub fn vi(Opivi { vd, imm5, vs2, vm }: Opivi, v: &mut VectorContext<'_>) {
let vreg = v
.get(vs2)
.iter_eew()
.masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| {
vs2 ^ imm5 as u64
})
.collect_with_eew(v.vec_engine.sew);
v.apply(vd, vreg)
}