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