Skip to main content

luaur_code_gen/methods/
ir_reg_alloc_a_64_free_temp.rs

1use crate::records::ir_reg_alloc_a_64::IrRegAllocA64;
2use crate::records::register_a_64::RegisterA64;
3
4macro_rules! CODEGEN_ASSERT {
5    ($expr:expr) => {
6        assert!($expr);
7    };
8}
9
10impl IrRegAllocA64 {
11    pub fn free_temp(&mut self, reg: RegisterA64) {
12        let kind = reg.kind();
13        let index = reg.index();
14        let bit = 1u32 << index;
15
16        let set = self.get_set(kind);
17
18        CODEGEN_ASSERT!((set.base & bit) != 0);
19        CODEGEN_ASSERT!((set.free & bit) == 0);
20        CODEGEN_ASSERT!((set.temp & bit) != 0);
21
22        set.free |= bit;
23        set.temp &= !bit;
24    }
25}