Browse Source

Track whether segment offset is optimised away

Fabian 3 years ago
parent
commit
c88391d7fc
3 changed files with 7 additions and 0 deletions
  1. 2 0
      src/browser/print_stats.js
  2. 2 0
      src/rust/modrm.rs
  3. 3 0
      src/rust/profiler.rs

+ 2 - 0
src/browser/print_stats.js

@@ -71,6 +71,8 @@ const print_stats = {
             "MODRM_SIMPLE_REG_WITH_OFFSET",
             "MODRM_SIMPLE_CONST_OFFSET",
             "MODRM_COMPLEX",
+            "SEG_OFFSET_OPTIMISED",
+            "SEG_OFFSET_NOT_OPTIMISED",
         ];
 
         for(let i = 0; i < stat_names.length; i++)

+ 2 - 0
src/rust/modrm.rs

@@ -248,8 +248,10 @@ pub fn jit_add_seg_offset(ctx: &mut JitContext, default_segment: u32) {
     let seg = if prefix != 0 { prefix - 1 } else { default_segment };
 
     if can_optimize_get_seg(ctx, seg) || prefix == SEG_PREFIX_ZERO {
+        codegen::gen_profiler_stat_increment(ctx.builder, profiler::stat::SEG_OFFSET_OPTIMISED);
         return;
     }
+    codegen::gen_profiler_stat_increment(ctx.builder, profiler::stat::SEG_OFFSET_NOT_OPTIMISED);
 
     if cfg!(debug_assertions) && seg != CS && seg != SS {
         ctx.builder.const_i32(seg as i32);

+ 3 - 0
src/rust/profiler.rs

@@ -69,6 +69,9 @@ pub enum stat {
     MODRM_SIMPLE_REG_WITH_OFFSET,
     MODRM_SIMPLE_CONST_OFFSET,
     MODRM_COMPLEX,
+
+    SEG_OFFSET_OPTIMISED,
+    SEG_OFFSET_NOT_OPTIMISED,
 }
 
 #[no_mangle]