eeric/rv_core/instruction/executor/v/
vmaxu.rs1use 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 if vs2 > vs1 {
7 vs2
8 } else {
9 vs1
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_eew()
21 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| {
22 if vs2 > x[rs1] {
23 vs2
24 } else {
25 x[rs1]
26 }
27 })
28 .collect_with_eew(v.vec_engine.sew);
29
30 v.apply(vd, vreg);
31}