Skip to main content

luaur_code_gen/methods/
assembly_builder_a_64_ubfiz.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 ubfiz(&mut self, dst: RegisterA64, src: RegisterA64, f: u8, w: u8) {
8        let size = if dst.kind() == KindA64::x { 64 } else { 32 };
9
10        CODEGEN_ASSERT!(w > 0 && (f as i32 + w as i32) <= size);
11
12        self.place_bfm(
13            b"ubfiz".as_ptr() as *const core::ffi::c_char,
14            dst,
15            src,
16            (f as i32) * 100 + (w as i32),
17            0b10_100110,
18            (-(f as i32)) & (size - 1),
19            (w as i32) - 1,
20        );
21    }
22}