diff --git a/src/browser/print_stats.js b/src/browser/print_stats.js index 2beaaca4..55079841 100644 --- a/src/browser/print_stats.js +++ b/src/browser/print_stats.js @@ -32,6 +32,10 @@ const print_stats = { "RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK", "RUN_INTERPRETED_NEAR_END_OF_PAGE", "RUN_INTERPRETED_DIFFERENT_STATE", + "RUN_INTERPRETED_DIFFERENT_STATE_CPL3", + "RUN_INTERPRETED_DIFFERENT_STATE_FLAT", + "RUN_INTERPRETED_DIFFERENT_STATE_IS32", + "RUN_INTERPRETED_DIFFERENT_STATE_SS32", "RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED", "RUN_INTERPRETED_STEPS", "RUN_FROM_CACHE", diff --git a/src/rust/cpu/cpu.rs b/src/rust/cpu/cpu.rs index 66515be6..14251dde 100644 --- a/src/rust/cpu/cpu.rs +++ b/src/rust/cpu/cpu.rs @@ -2867,6 +2867,19 @@ pub unsafe fn cycle_internal() { } else { profiler::stat_increment(RUN_INTERPRETED_DIFFERENT_STATE); + let s = *state_flags; + if c.state_flags.cpl3() != s.cpl3() { + profiler::stat_increment(RUN_INTERPRETED_DIFFERENT_STATE_CPL3); + } + if c.state_flags.has_flat_segmentation() != s.has_flat_segmentation() { + profiler::stat_increment(RUN_INTERPRETED_DIFFERENT_STATE_FLAT); + } + if c.state_flags.is_32() != s.is_32() { + profiler::stat_increment(RUN_INTERPRETED_DIFFERENT_STATE_IS32); + } + if c.state_flags.ssize_32() != s.ssize_32() { + profiler::stat_increment(RUN_INTERPRETED_DIFFERENT_STATE_SS32); + } } }, } diff --git a/src/rust/profiler.rs b/src/rust/profiler.rs index 5044c7e7..f294c911 100644 --- a/src/rust/profiler.rs +++ b/src/rust/profiler.rs @@ -19,6 +19,10 @@ pub enum stat { RUN_INTERPRETED_PAGE_HAS_ENTRY_AFTER_PAGE_WALK, RUN_INTERPRETED_NEAR_END_OF_PAGE, RUN_INTERPRETED_DIFFERENT_STATE, + RUN_INTERPRETED_DIFFERENT_STATE_CPL3, + RUN_INTERPRETED_DIFFERENT_STATE_FLAT, + RUN_INTERPRETED_DIFFERENT_STATE_IS32, + RUN_INTERPRETED_DIFFERENT_STATE_SS32, RUN_INTERPRETED_MISSED_COMPILED_ENTRY_RUN_INTERPRETED, RUN_INTERPRETED_STEPS,