luaur_code_gen/methods/
assembly_builder_x_64_place_binary.rs1use crate::enums::category_x_64::CategoryX64;
2use crate::macros::codegen_assert::CODEGEN_ASSERT;
3use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
4use crate::records::operand_x_64::OperandX64;
5
6impl AssemblyBuilderX64 {
7 pub fn place_binary(
8 &mut self,
9 name: *const core::ffi::c_char,
10 lhs: OperandX64,
11 rhs: OperandX64,
12 codeimm8: u8,
13 codeimm: u8,
14 codeimm_imm8: u8,
15 code8rev: u8,
16 coderev: u8,
17 code8: u8,
18 code: u8,
19 opreg: u8,
20 ) {
21 if self.log_text {
22 self.log_c_char_operand_x_64_operand_x_64(name, lhs, rhs);
23 }
24
25 if (lhs.cat == CategoryX64::reg || lhs.cat == CategoryX64::mem)
26 && rhs.cat == CategoryX64::imm
27 {
28 self.place_binary_reg_mem_and_imm(lhs, rhs, codeimm8, codeimm, codeimm_imm8, opreg);
29 } else if lhs.cat == CategoryX64::reg
30 && (rhs.cat == CategoryX64::reg || rhs.cat == CategoryX64::mem)
31 {
32 self.place_binary_reg_and_reg_mem(lhs, rhs, code8, code);
33 } else if lhs.cat == CategoryX64::mem && rhs.cat == CategoryX64::reg {
34 self.place_binary_reg_mem_and_reg(lhs, rhs, code8rev, coderev);
35 } else {
36 luaur_common::LUAU_DEBUGBREAK!();
38 }
39 }
40}