collect stats about segment offsets

This commit is contained in:
Fabian 2022-11-10 11:02:47 -06:00
parent eea5cb67b0
commit 70cf369d18
3 changed files with 24 additions and 1 deletions

View file

@ -111,6 +111,10 @@ const print_stats = {
"MODRM_COMPLEX",
"SEG_OFFSET_OPTIMISED",
"SEG_OFFSET_NOT_OPTIMISED",
"SEG_OFFSET_NOT_OPTIMISED_ES",
"SEG_OFFSET_NOT_OPTIMISED_FS",
"SEG_OFFSET_NOT_OPTIMISED_GS",
"SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT",
];
let j = 0;

View file

@ -5,7 +5,7 @@ use jit::JitContext;
use prefix::{PREFIX_MASK_SEGMENT, SEG_PREFIX_ZERO};
use profiler;
use regs::{BP, BX, DI, SI};
use regs::{CS, DS, SS};
use regs::{CS, DS, ES, FS, GS, SS};
use regs::{EAX, EBP, EBX, ECX, EDI, EDX, ESI, ESP};
pub struct ModrmByte {
@ -285,6 +285,21 @@ pub fn jit_add_seg_offset_no_override(ctx: &mut JitContext, seg: u32) {
return;
}
codegen::gen_profiler_stat_increment(ctx.builder, profiler::stat::SEG_OFFSET_NOT_OPTIMISED);
codegen::gen_profiler_stat_increment(
ctx.builder,
if seg == ES {
profiler::stat::SEG_OFFSET_NOT_OPTIMISED_ES
}
else if seg == FS {
profiler::stat::SEG_OFFSET_NOT_OPTIMISED_FS
}
else if seg == GS {
profiler::stat::SEG_OFFSET_NOT_OPTIMISED_GS
}
else {
profiler::stat::SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT
},
);
if seg != CS && seg != SS {
if cfg!(feature = "profiler") {

View file

@ -112,6 +112,10 @@ pub enum stat {
SEG_OFFSET_OPTIMISED,
SEG_OFFSET_NOT_OPTIMISED,
SEG_OFFSET_NOT_OPTIMISED_ES,
SEG_OFFSET_NOT_OPTIMISED_FS,
SEG_OFFSET_NOT_OPTIMISED_GS,
SEG_OFFSET_NOT_OPTIMISED_NOT_FLAT,
}
#[allow(non_upper_case_globals)]