eeric/rv_core/instruction/executor/v/
vzext.rs1use crate::rv_core::instruction::executor::prelude::*;
2
3pub fn vf2(
4 Vxunary0 {
5 dest: vd, vs2, vm, ..
6 }: Vxunary0,
7 v: &mut VectorContext<'_>,
8) -> Result<(), String> {
9 let half_sew = v.vec_engine.sew.half()?;
10
11 let vreg = v
12 .get(vs2)
13 .iter_custom_eew(half_sew)
14 .take(v.vlmax() / 2)
15 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| vs2)
16 .collect_with_eew(v.vec_engine.sew);
17
18 v.apply(vd, vreg);
19
20 Ok(())
21}
22
23pub fn vf4(
24 Vxunary0 {
25 dest: vd, vs2, vm, ..
26 }: Vxunary0,
27 v: &mut VectorContext<'_>,
28) -> Result<(), String> {
29 let fourth_sew = v.vec_engine.sew.fourth()?;
30
31 let vreg = v
32 .get(vs2)
33 .iter_custom_eew(fourth_sew)
34 .take(v.vlmax() / 4)
35 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| vs2)
36 .collect_with_eew(v.vec_engine.sew);
37
38 v.apply(vd, vreg);
39
40 Ok(())
41}
42
43pub fn vf8(
44 Vxunary0 {
45 dest: vd, vs2, vm, ..
46 }: Vxunary0,
47 v: &mut VectorContext<'_>,
48) -> Result<(), String> {
49 let eighth = v.vec_engine.sew.eighth()?;
50
51 let vreg = v
52 .get(vs2)
53 .iter_custom_eew(eighth)
54 .take(v.vlmax() / 8)
55 .masked_map(v.default_mask(vm), v.get(vd).iter_eew(), |vs2| vs2)
56 .collect_with_eew(v.vec_engine.sew);
57
58 v.apply(vd, vreg);
59
60 Ok(())
61}