eeric/rv_core/instruction/executor/v/
vmsne.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_mask(), v.get(vs1).iter_mask(),)
5        .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |(vs2, vs1)| {
6            if vs2 != vs1 {
7                1
8            } else {
9                0
10            }
11        })
12        .collect_with_eew(v.vec_engine.sew);
13
14    v.apply(vd, vreg);
15}
16
17pub fn vx(Opivx { vd, rs1, vs2, vm }: Opivx, v: &mut VectorContext<'_>, x: &IntegerRegisters) {
18    let vreg = v
19        .get(vs2)
20        .iter_mask()
21        .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| {
22            if vs2 != x[rs1] {
23                1
24            } else {
25                0
26            }
27        })
28        .collect_with_eew(v.vec_engine.sew);
29
30    v.apply(vd, vreg);
31}
32
33pub fn vi(Opivi { vd, imm5, vs2, vm }: Opivi, v: &mut VectorContext<'_>) {
34    let vreg = v
35        .get(vs2)
36        .iter_mask()
37        .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| {
38            if vs2 != imm5 as u64 {
39                1
40            } else {
41                0
42            }
43        })
44        .collect_with_eew(v.vec_engine.sew);
45
46    v.apply(vd, vreg);
47}