adjust interrupt handling

we used to spend ~5.8% of the time on getting the next value of the 0..INSTRUCTIONS_PER_INTERRUPT_POLL iterator

increment on Wrapping<u8> now only takes ~0.58 of the time
This commit is contained in:
Skgland
2026-03-21 14:20:11 +01:00
parent 8aab887388
commit 153f04b72a

View File

@@ -77,8 +77,6 @@ macro_rules! push_cell {
}};
}
static INSTRUCTIONS_PER_INTERRUPT_POLL: usize = 256;
impl MachineState {
#[inline(always)]
fn compare(&mut self) -> CallResult {
@@ -1541,8 +1539,13 @@ impl Machine {
}
fn verify_attr_dispatch_loop(&mut self) -> Option<std::process::ExitCode> {
let mut interrupt_counter = std::num::Wrapping(0u8);
'outer: loop {
for _ in 0..INSTRUCTIONS_PER_INTERRUPT_POLL {
loop {
interrupt_counter += 1;
if interrupt_counter.0 == 0 {
break;
}
match self.code[self.machine_st.p] {
Instruction::BreakFromDispatchLoop => {
break 'outer;
@@ -1611,8 +1614,14 @@ impl Machine {
}
pub(super) fn dispatch_loop(&mut self) -> std::process::ExitCode {
let mut interrupt_counter = std::num::Wrapping(0u8);
'outer: loop {
for _ in 0..INSTRUCTIONS_PER_INTERRUPT_POLL {
loop {
interrupt_counter += 1;
if interrupt_counter.0 == 0 {
break;
}
match &self.code[self.machine_st.p] {
&Instruction::BreakFromDispatchLoop => {
break 'outer;