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

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