Skip to main content

luaur_code_gen/functions/
append_register_set.rs

1use crate::records::ir_to_string_context::IrToStringContext;
2use crate::records::register_set::RegisterSet;
3use core::ffi::c_char;
4use core::ffi::CStr;
5
6pub fn append_register_set(
7    ctx: &mut IrToStringContext,
8    rs: &RegisterSet,
9    separator: *const c_char,
10) {
11    let mut comma = false;
12    let sep_str = unsafe { CStr::from_ptr(separator).to_string_lossy() };
13
14    for i in 0..256 {
15        let word_idx = i / 64;
16        let bit_idx = i % 64;
17
18        if (rs.regs[word_idx] & (1 << bit_idx)) != 0 {
19            if comma {
20                ctx.result.push_str(&sep_str);
21            }
22            comma = true;
23
24            use core::fmt::Write;
25            let _ = write!(ctx.result, "R{}", i);
26        }
27    }
28
29    if rs.vararg_seq {
30        if comma {
31            ctx.result.push_str(&sep_str);
32        }
33
34        use core::fmt::Write;
35        let _ = write!(ctx.result, "R{}...", rs.vararg_start);
36    }
37}