coef_boot ou coef_origine, c'est pareil.
Sinon, ben je detecte avec de l'extreme MSR trick
Code:
ulong correct_tsc(ulong el_org)
{
float coef_now, coef_max;
int msr_lo, msr_hi, is_xe;
rdmsr(0x198, msr_lo, msr_hi);
is_xe = (msr_lo >> 31) & 0x1;
if(is_xe){
rdmsr(0x198, msr_lo, msr_hi);
coef_max = ((msr_hi >> 8) & 0x1F);
if ((msr_hi >> 14) & 0x1) { coef_max = coef_max + 0.5f; }
} else {
rdmsr(0x17, msr_lo, msr_hi);
coef_max = ((msr_lo >> 8) & 0x1F);
if ((msr_lo >> 14) & 0x1) { coef_max = coef_max + 0.5f; }
}
if((cpu_id.feature_flag >> 7) & 1) {
rdmsr(0x198, msr_lo, msr_hi);
coef_now = ((msr_lo >> 8) & 0x1F);
if ((msr_lo >> 14) & 0x1) { coef_now = coef_now + 0.5f; }
} else {
rdmsr(0x2A, msr_lo, msr_hi);
coef_now = (msr_lo >> 22) & 0x1F;
}
if(coef_max && coef_now) { el_org = (ulong)(el_org * coef_now / coef_max); }
return el_org;
}