HalpTimerCalibratePerformanceCounter
__int64 __fastcall HalpTimerCalibratePerformanceCounter(INT64 a1, char *a2, void *a3, void *a4){
__int64 v6;
__int64 v7;
__int64 v8;
unsigned __int64 v9;
signed __int64 v10;
int v11;
unsigned __int64 v12;
__int64 v13;
signed __int64 v14;
__int64 v16;
__int64 v17;
__int64 v18;
__int64 v19;
unsigned __int64 v20;
int v21[10];
if( *(_DWORD *)(a1 + 220) == 64 )
{
HalpTimerGetInternalData((_KDPC *)a1, a2, a3, a4);
v17 = (*(__int64(__fastcall **)(__int64))(a1 + 112))(v16);
v6 = *(_QWORD *)(a1 + 208);
v14 = v17;
}
else
{
do
{
v6 = *(_QWORD *)(a1 + 208);
do
{
v7 = *(_QWORD *)(a1 + 200);
HalpTimerGetInternalData((_KDPC *)a1, a2, a3, a4);
v9 = (*(__int64(__fastcall **)(__int64))(a1 + 112))(v8);
_InterlockedOr(v21, 0);
v10 = *(_QWORD *)(a1 + 200);
}
while( v7 != v10 );
}
while( v6 != *(_QWORD *)(a1 + 208) );
v11 = *(_DWORD *)(a1 + 220);
v12 = v7 ^ v9;
if( _bittest64((const __int64 *)&v12, (unsigned __int8)(v11 - 1)) )
{
v18 = 1i64;
if( v11 == 64 )
v19 = -1i64;
else
v19 = (1i64 << v11) - 1;
if( v11 != 64 )
v18 = 1i64 << v11;
v20 = v7 & v19;
v14 = v9 | v7 ^ v20;
if( v9 < v20 )
v14 += v18;
_InterlockedCompareExchange64((volatile signed __int64 *)(a1 + 200), v14, v10);
}
else
{
if( v11 == 64 )
v13 = -1i64;
else
v13 = (1i64 << v11) - 1;
v14 = v9 | v7 & ~v13;
}
}
*(_QWORD *)(a1 + 208) = &a2[*(_QWORD *)(a1 + 208) - v6 - v14];
HalpTimerPropagateQpcBiasUpdate(a1);
return 0i64;
}Referenced by:
HalCalibratePerformanceCounter
HalpTimerInitialize
HalpTimerPerformanceCounterPowerChange
HalpTimerRestorePerformanceCounter