eeric_core/rv_core/instruction/executor/v/
vfrsqrt7.rs

1use num_traits::Float;
2
3use crate::rv_core::instruction::executor::prelude::*;
4
5pub fn v(
6    Vfunary1 {
7        dest: vd, vs2, vm, ..
8    }: Vfunary1,
9    v: &mut VectorContext<'_>,
10) -> Result<(), String> {
11    let vreg = v
12        .get(vs2)
13        .iter_fp()?
14        .masked_map(v.default_mask(vm), v.get(vd).iter_fp()?, |vs2| {
15            ArbitraryFloat::copy_type(&vs2, 1.0) / vs2.sqrt()
16        })
17        .collect_fp();
18
19    v.apply(vd, vreg);
20
21    Ok(())
22}