luaur_code_gen/methods/
assembly_builder_a_64_udiv.rs1use 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 udiv(&mut self, dst: RegisterA64, src1: RegisterA64, src2: RegisterA64) {
8 if self.log_text {
9 self.log_c_char_register_a_64_register_a_64_register_a_64_i32(
10 c"udiv".as_ptr(),
11 dst,
12 src1,
13 src2,
14 0,
15 );
16 }
17
18 assert!(dst.kind() == KindA64::w || dst.kind() == KindA64::x);
21 assert!(dst.kind() == src1.kind() && dst.kind() == src2.kind());
22
23 let sf: u32 = if dst.kind() == KindA64::x {
24 0x80000000
25 } else {
26 0
27 };
28
29 self.place(
30 (dst.index() as u32)
31 | ((src1.index() as u32) << 5)
32 | (0b000010 << 10)
33 | ((src2.index() as u32) << 16)
34 | (0b0011010110u32 << 21)
35 | sf,
36 );
37 self.commit();
38 }
39}