Skip to main content

luaur_code_gen/methods/
assembly_builder_a_64_ldr.rs

1use crate::enums::kind_a_64::KindA64;
2use crate::records::address_a_64::AddressA64;
3use crate::records::assembly_builder_a_64::AssemblyBuilderA64;
4use crate::records::register_a_64::RegisterA64;
5use luaur_common::macros::luau_unreachable::LUAU_UNREACHABLE;
6
7impl AssemblyBuilderA64 {
8    pub fn ldr(&mut self, dst: RegisterA64, src: AddressA64) {
9        match dst.kind() {
10            KindA64::w => self.place_a(
11                b"ldr\0".as_ptr() as *const core::ffi::c_char,
12                dst,
13                src,
14                0b10_1110_0001,
15                2,
16            ),
17            KindA64::x => self.place_a(
18                b"ldr\0".as_ptr() as *const core::ffi::c_char,
19                dst,
20                src,
21                0b11_1110_0001,
22                3,
23            ),
24            KindA64::s => self.place_a(
25                b"ldr\0".as_ptr() as *const core::ffi::c_char,
26                dst,
27                src,
28                0b10_1111_0001,
29                2,
30            ),
31            KindA64::d => self.place_a(
32                b"ldr\0".as_ptr() as *const core::ffi::c_char,
33                dst,
34                src,
35                0b11_1111_0001,
36                3,
37            ),
38            KindA64::q => self.place_a(
39                b"ldr\0".as_ptr() as *const core::ffi::c_char,
40                dst,
41                src,
42                0b00_1111_0011,
43                4,
44            ),
45            KindA64::none => {
46                debug_assert!(false, "Unexpected register kind");
47                LUAU_UNREACHABLE!();
48            }
49        }
50    }
51}