Skip to main content

luaur_code_gen/methods/
assembly_builder_a_64_fadd.rs

1use crate::enums::kind_a_64::KindA64;
2use crate::records::assembly_builder_a_64::AssemblyBuilderA64;
3use crate::records::register_a_64::RegisterA64;
4
5impl AssemblyBuilderA64 {
6    pub fn fadd(&mut self, dst: RegisterA64, src1: RegisterA64, src2: RegisterA64) {
7        if dst.kind() == KindA64::d {
8            debug_assert!(src1.kind() == KindA64::d && src2.kind() == KindA64::d);
9            self.place_r_3(c"fadd".as_ptr(), dst, src1, src2, 0b11110_01_1, 0b0010_10);
10        } else if dst.kind() == KindA64::s {
11            debug_assert!(src1.kind() == KindA64::s && src2.kind() == KindA64::s);
12            self.place_r_3(c"fadd".as_ptr(), dst, src1, src2, 0b11110_00_1, 0b0010_10);
13        } else {
14            debug_assert!(
15                dst.kind() == KindA64::q && src1.kind() == KindA64::q && src2.kind() == KindA64::q
16            );
17            self.place_vr(
18                c"fadd".as_ptr(),
19                dst,
20                src1,
21                src2,
22                0b0_01110_0_0_1,
23                0b11010_1,
24            );
25        }
26    }
27}