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