luaur-code-gen 0.1.0

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::records::ir_reg_alloc_a_64::IrRegAllocA64;
use crate::records::register_a_64::RegisterA64;

macro_rules! CODEGEN_ASSERT {
    ($expr:expr) => {
        assert!($expr);
    };
}

impl IrRegAllocA64 {
    pub fn free_temp(&mut self, reg: RegisterA64) {
        let kind = reg.kind();
        let index = reg.index();
        let bit = 1u32 << index;

        let set = self.get_set(kind);

        CODEGEN_ASSERT!((set.base & bit) != 0);
        CODEGEN_ASSERT!((set.free & bit) == 0);
        CODEGEN_ASSERT!((set.temp & bit) != 0);

        set.free |= bit;
        set.temp &= !bit;
    }
}