HalpTscAdvSynchCalculateRemoteDelta

INT64 __fastcall HalpTscAdvSynchCalculateRemoteDelta(unsigned int a1, INT64 a2, _DWORD *a3){
  __int64 v4; 
  unsigned __int64 v5; 
  __int64 Number; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  __int64 v12; 
  int v13[10]; 

  v4 = a1;
  if( dword_140C4A3EC )
  {
    if( dword_140C4A3EC == 1 )
    {
      v12 = qword_140C4A418;
      v5 = v4 << 7;
      *(_DWORD *)((v4 << 7) + qword_140C4A418 + 4) = 0;
      _InterlockedExchange((volatile __int32 *)((v4 << 7) + v12), 4);
      if( *(_DWORD *)((v4 << 7) + qword_140C4A418) == 4 )
      {
        do
          _mm_pause();
        while( *(_DWORD *)(v5 + qword_140C4A418) == 4 );
      }
      LODWORD(v8) = HalpTscAdvSynchComputeMinimumDelta((unsigned int)v4, a2);
      goto LABEL_5;
    }
    if( dword_140C4A3EC != 2 )
      return -1i64;
  }
  v5 = (unsigned __int64)a1 << 7;
  Number = KeGetCurrentPrcb()->Number;
  v7 = qword_140C4A418;
  *(_DWORD *)((v4 << 7) + qword_140C4A418 + 4) = Number;
  **(_QWORD **)((v4 << 7) + v7 + 16) = 0i64;
  **(_QWORD **)((Number << 7) + qword_140C4A418 + 16) = -1i64;
  _InterlockedExchange((volatile __int32 *)((v4 << 7) + qword_140C4A418), 5);
  if( *(_DWORD *)((v4 << 7) + qword_140C4A418) == 5 )
  {
    do
      _mm_pause();
    while( *(_DWORD *)(v5 + qword_140C4A418) == 5 );
  }
  LODWORD(v8) = HalpTscAdvSynchComputeMinimumDeltaAlternate((unsigned int)v4, a2);
LABEL_5:
  v9 = v8;
  while( *(_DWORD *)(v5 + qword_140C4A418) )
    _mm_pause();
  _InterlockedOr(v13, 0);
  v10 = *(_QWORD *)(v5 + qword_140C4A418 + 8);
  if( a3 )
    *a3 = v9 + v10;
  return(v10 - v9) / 2;
}

Referenced by:

HalpTscAdjustToLeader
HalpTscAdjustToTarget
HalpTscAdvSynchCalculateRemoteDeltas
HalpTscAdvSynchToLeader
HalpTscAdvSynchToTarget