Skip to main content

luaur_code_gen/methods/
assembly_builder_a_64_umov_4_s.rs

1use crate::enums::kind_a_64::KindA64;
2use crate::macros::codegen_assert::CODEGEN_ASSERT;
3use crate::records::assembly_builder_a_64::AssemblyBuilderA64;
4use crate::records::register_a_64::RegisterA64;
5
6impl AssemblyBuilderA64 {
7    pub fn umov_4s(&mut self, dst: RegisterA64, src: RegisterA64, index: u8) {
8        CODEGEN_ASSERT!(dst.kind() == KindA64::w);
9        CODEGEN_ASSERT!(src.kind() == KindA64::q);
10        CODEGEN_ASSERT!(index < 4);
11
12        if self.log_text {
13            self.log_append(format_args!(
14                " {:<12}w{},v{}.s[{}]\n",
15                "umov",
16                dst.index(),
17                src.index(),
18                index
19            ));
20        }
21
22        let op: u32 = 0b0_0_0_01110000_00100_001111_00000_00000;
23
24        self.place(dst.index() as u32 | (src.index() as u32) << 5 | op | (index as u32) << 19);
25
26        self.commit();
27    }
28}