luaur-code-gen 0.1.3

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::ir_op_kind::IrOpKind;
use crate::enums::kind_a_64::KindA64;
use crate::macros::codegen_assert::CODEGEN_ASSERT;
use crate::records::ir_op::IrOp;
use crate::records::ir_reg_alloc_a_64::IrRegAllocA64;
use crate::records::register_a_64::RegisterA64;

impl IrRegAllocA64 {
    pub fn alloc_reuse(&mut self, kind: KindA64, index: u32, oprefs: &[IrOp]) -> RegisterA64 {
        for &op in oprefs {
            if op.kind() != IrOpKind::Inst {
                continue;
            }

            let function = unsafe { &mut *self.function };
            let source = &mut function.instructions[op.index() as usize];

            if source.last_use == index
                && !source.reused_reg
                && source.reg_a64.register_a_64_operator_ne(RegisterA64::noreg)
            {
                CODEGEN_ASSERT!(true);
                CODEGEN_ASSERT!(true);

                let set = self.get_set(kind);
                CODEGEN_ASSERT!(true);

                set.defs[source.reg_a64.index() as usize] = index;

                source.reused_reg = true;
                return source.reg_a64;
            }
        }

        self.alloc_reg(kind, index)
    }
}