Skip to main content

luaur_code_gen/methods/
assembly_builder_a_64_place_fcmp.rs

1use crate::records::assembly_builder_a_64::AssemblyBuilderA64;
2use crate::records::register_a_64::RegisterA64;
3
4impl AssemblyBuilderA64 {
5    pub fn assembly_builder_a_64_place_fcmp(
6        &mut self,
7        name: *const core::ffi::c_char,
8        src1: RegisterA64,
9        src2: RegisterA64,
10        op: u8,
11        opc: u8,
12    ) {
13        if self.log_text {
14            if opc != 0 {
15                // C++: log(name, src1, 0) -> reg + "#0" immediate (shift defaults to 0)
16                self.log_c_char_register_a_64_i32_i32(name, src1, 0, 0);
17            } else {
18                self.log_c_char_register_a_64_register_a_64(name, src1, src2);
19            }
20        }
21
22        assert!(src1.kind() == src2.kind());
23
24        self.place(
25            ((opc as u32) << 3)
26                | ((src1.index() as u32) << 5)
27                | ((0b1000u32) << 10)
28                | ((src2.index() as u32) << 16)
29                | ((op as u32) << 21),
30        );
31        self.commit();
32    }
33}