HalpTscAdjustToLeader
INT64 __fastcall HalpTscAdjustToLeader(UINT64 a1){
__int64 v1;
INT64 v2;
unsigned int v3;
unsigned int v4;
INT64 result;
int v6[8];
__int64 v7;
v1 = (unsigned int)a1;
v2 = HalpTscAdvSynchCalculateRemoteDelta(a1, (unsigned int)HalpTscRequestedIterations, 0i64);
v3 = 0;
v4 = 0;
do
{
if( !v3 )
{
*(_QWORD *)((v1 << 7) + TscRequest + 8) = -v2;
_InterlockedOr(v6, 0);
_InterlockedExchange((volatile __int32 *)((v1 << 7) + TscRequest), 3);
while( *(_DWORD *)((v1 << 7) + TscRequest) == 3 )
_mm_pause();
LODWORD(v7) = v4;
HalpTscTraceProcessorSynchronization(*((unsigned int *)KeGetCurrentPrcb() + 9), (unsigned int)v1, v2, v2, v7);
}
v2 = HalpTscAdvSynchCalculateRemoteDelta((unsigned int)v1, (unsigned int)HalpTscRequestedIterations, 0i64);
++v3;
if( (unsigned __int64)(v2 + 24) > 0x30 )
v3 = 0;
++v4;
}
while( v3 < 2 && v4 < 0x32 );
result = HalpTscWaves;
*(_DWORD *)(HalpTscWaves + 4 * v1) = v4;
return result;
}Referenced by:
HalpTscAdvSynchLeader