luaur_code_gen/methods/
assembly_builder_a_64_str.rs1use 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;
5
6impl AssemblyBuilderA64 {
7 pub fn str(&mut self, src: RegisterA64, dst: AddressA64) {
8 assert!(
9 src.kind() == KindA64::x
10 || src.kind() == KindA64::w
11 || src.kind() == KindA64::s
12 || src.kind() == KindA64::d
13 || src.kind() == KindA64::q
14 );
15
16 match src.kind() {
17 KindA64::w => self.place_a(
18 b"str\0".as_ptr() as *const core::ffi::c_char,
19 src,
20 dst,
21 0b10_11100000,
22 2,
23 ),
24 KindA64::x => self.place_a(
25 b"str\0".as_ptr() as *const core::ffi::c_char,
26 src,
27 dst,
28 0b11_11100000,
29 3,
30 ),
31 KindA64::s => self.place_a(
32 b"str\0".as_ptr() as *const core::ffi::c_char,
33 src,
34 dst,
35 0b10_11110000,
36 2,
37 ),
38 KindA64::d => self.place_a(
39 b"str\0".as_ptr() as *const core::ffi::c_char,
40 src,
41 dst,
42 0b11_11110000,
43 3,
44 ),
45 KindA64::q => self.place_a(
46 b"str\0".as_ptr() as *const core::ffi::c_char,
47 src,
48 dst,
49 0b00_11110010,
50 4,
51 ),
52 KindA64::none => unreachable!("Unexpected register kind"),
53 }
54 }
55}