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

1use 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}