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}