use crate::records::register_set::RegisterSet;
pub fn require_variadic_sequence(
source_rs: &mut RegisterSet,
def_rs: &RegisterSet,
mut vararg_start: u8,
) {
if !def_rs.vararg_seq {
while def_rs.regs[vararg_start as usize / 64] & (1u64 << (vararg_start as usize % 64)) != 0
{
vararg_start = vararg_start.wrapping_add(1);
}
if source_rs.vararg_seq {
assert!(source_rs.vararg_start == vararg_start);
}
source_rs.vararg_seq = true;
source_rs.vararg_start = vararg_start;
} else {
for i in vararg_start..def_rs.vararg_start {
let word_idx = (i as usize) / 64;
let bit_idx = (i as usize) % 64;
if def_rs.regs[word_idx] & (1u64 << bit_idx) == 0 {
source_rs.regs[word_idx] |= 1u64 << bit_idx;
}
}
}
}