luaur_code_gen/functions/
append_register_set.rs1use 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}