HalpTscAdvSynchCalculateRemoteDelta

INT64 __fastcall HalpTscAdvSynchCalculateRemoteDelta(UINT64 a1, INT64 a2, _DWORD *a3){
  __int64 v4; 
  unsigned __int64 v5; 
  __int64 v6; 
  __int64 v7; 
  INT64 v8; 
  INT64 v9; 
  __int64 v10; 
  __int64 v12; 
  int v13[10]; 
  v4 = (unsigned int)a1;
  if( HalpTscSyncPolicy )
  {
    if( HalpTscSyncPolicy == 1 )
    {
      v12 = TscRequest;
      v5 = v4 << 7;
      *(_DWORD *)((v4 << 7) + TscRequest + 4) = 0;
      _InterlockedExchange((volatile __int32 *)((v4 << 7) + v12), 4);
      if( *(_DWORD *)((v4 << 7) + TscRequest) == 4 )
      {
        do
          _mm_pause();
        while( *(_DWORD *)(v5 + TscRequest) == 4 );
      }
      v8 = HalpTscAdvSynchComputeMinimumDelta((unsigned int)v4, a2);
      goto LABEL_5;
    }
    if( HalpTscSyncPolicy != 2 )
      return -1i64;
  }
  v5 = (unsigned __int64)(unsigned int)a1 << 7;
  v6 = *((unsigned int *)KeGetCurrentPrcb() + 9);
  v7 = TscRequest;
  *(_DWORD *)((v4 << 7) + TscRequest + 4) = v6;
  **(_QWORD **)((v4 << 7) + v7 + 16) = 0i64;
  **(_QWORD **)((v6 << 7) + TscRequest + 16) = -1i64;
  _InterlockedExchange((volatile __int32 *)((v4 << 7) + TscRequest), 5);
  if( *(_DWORD *)((v4 << 7) + TscRequest) == 5 )
  {
    do
      _mm_pause();
    while( *(_DWORD *)(v5 + TscRequest) == 5 );
  }
  v8 = HalpTscAdvSynchComputeMinimumDeltaAlternate((unsigned int)v4, a2);
LABEL_5:
  v9 = v8;
  while( *(_DWORD *)(v5 + TscRequest) )
    _mm_pause();
  _InterlockedOr(v13, 0);
  v10 = *(_QWORD *)(v5 + TscRequest + 8);
  if( a3 )
    *a3 = v9 + v10;
  return(v10 - v9) / 2;
}

Referenced by:

HalpTscAdjustToLeader
HalpTscAdjustToTarget
HalpTscAdvSynchCalculateRemoteDeltas
HalpTscAdvSynchToLeader
HalpTscAdvSynchToTarget