eeric/rv_core/instruction/executor/v/
vmulhu.rs1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn vv(
4 Opmvv {
5 dest: vd,
6 vs1,
7 vs2,
8 vm,
9 }: Opmvv,
10 v: &mut VectorContext<'_>,
11) {
12 let vreg = izip!(v.get(vs2).iter_eew(), v.get(vs1).iter_eew())
13 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |(vs2, vs1)| {
14 ((vs2 as u128 * vs1 as u128) >> v.vec_engine.sew.bit_length()) as u64
15 })
16 .collect_with_eew(v.vec_engine.sew);
17
18 v.apply(vd, vreg);
19}
20
21pub fn vx(
22 Opmvx {
23 dest: vd,
24 rs1,
25 vs2,
26 vm,
27 }: Opmvx,
28 v: &mut VectorContext<'_>,
29 x: &IntegerRegisters,
30) {
31 let vreg = v
32 .get(vs2)
33 .iter_eew()
34 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| {
35 ((vs2 as u128 * x[rs1] as u128) >> v.vec_engine.sew.bit_length()) as u64
36 })
37 .collect_with_eew(v.vec_engine.sew);
38
39 v.apply(vd, vreg);
40}