eeric/rv_core/instruction/executor/v/
vfmul.rs1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn vv(
4 Opfvv {
5 dest: vd,
6 vs1,
7 vs2,
8 vm,
9 }: Opfvv,
10 v: &mut VectorContext<'_>,
11) -> Result<(), String> {
12 let vreg = izip!(v.get(vs2).iter_fp()?, v.get(vs1).iter_fp()?)
13 .masked_map(v.default_mask(vm), v.get(vd).iter_fp()?, |(vs2, vs1)| {
14 vs2 * vs1
15 })
16 .collect_fp();
17
18 v.apply(vd, vreg);
19
20 Ok(())
21}
22
23pub fn vf(
24 Opfvf { vd, rs1, vs2, vm }: Opfvf,
25 v: &mut VectorContext<'_>,
26 f: &FloatRegisters,
27) -> Result<(), String> {
28 let vreg = v
29 .get(vs2)
30 .iter_fp()?
31 .masked_map(v.default_mask(vm), v.get(vd).iter_fp()?, |vs2| {
32 vs2 * ArbitraryFloat::copy_type(&vs2, f[rs1])
33 })
34 .collect_fp();
35
36 v.apply(vd, vreg);
37
38 Ok(())
39}