luaur-code-gen 0.1.3

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::size_x_64::SizeX64;
use crate::macros::codegen_assert::CODEGEN_ASSERT;
use crate::records::ir_call_wrapper_x_64::IrCallWrapperX64;
use crate::records::register_x_64::RegisterX64;

impl IrCallWrapperX64 {
    pub fn remove_register_use(&mut self, reg: RegisterX64) {
        if reg.size() == SizeX64::xmmword {
            CODEGEN_ASSERT!(self.xmm_uses[reg.index() as usize] != 0);
            self.xmm_uses[reg.index() as usize] -= 1;

            if self.xmm_uses[reg.index() as usize] == 0 {
                unsafe {
                    (*self.regs).free_reg(reg);
                }
            }
        } else if reg.size() != SizeX64::none {
            CODEGEN_ASSERT!(self.gpr_uses[reg.index() as usize] != 0);
            self.gpr_uses[reg.index() as usize] -= 1;

            if self.gpr_uses[reg.index() as usize] == 0 {
                unsafe {
                    if (*self.regs).should_free_gpr(reg) {
                        (*self.regs).free_reg(reg);
                    }
                }
            }
        }
    }
}