HalpTscAdvSynchTarget

INT64 __stdcall HalpTscAdvSynchTarget(){
  unsigned int v0; 
  __int64 i; 
  int v2; 
  int v3; 
  int v4; 
  int v5; 
  int v6; 
  int v7; 
  INT64 v8; 
  int v9; 
  INT64 result; 
  int j; 
  signed __int32 v12[10]; 
  v0 = *((_DWORD *)KeGetCurrentPrcb() + 9);
  for( i = (__int64)(int)v0 << 7; ; *(_DWORD *)(i + TscRequest) = 0 )
  {
    while( 1 )
    {
      v2 = *(_DWORD *)(i + TscRequest);
      if( v2 )
        break;
      _mm_pause();
    }
    v3 = v2 - 1;
    if( !v3 )
    {
      _InterlockedOr(v12, 0);
      HalpTscAdvSynchSkewCounter(*(_QWORD *)(i + TscRequest + 8));
      goto LABEL_11;
    }
    v4 = v3 - 1;
    if( !v4 )
    {
      _InterlockedOr(v12, 0);
      for( j = *(_DWORD *)(i + TscRequest + 4); j; --j )
        HalpTscAdvSynchSkewCounter(*(_QWORD *)(i + TscRequest + 8));
      goto LABEL_11;
    }
    v5 = v4 - 1;
    if( !v5 )
    {
      _InterlockedOr(v12, 0);
      __writemsr(0x3Bu, *(_QWORD *)(i + TscRequest + 8) + __readmsr(0x3Bu));
      goto LABEL_11;
    }
    v6 = v5 - 1;
    if( !v6 )
    {
      _InterlockedOr(v12, 0);
      *(_DWORD *)(i + TscRequest) = 6;
      v8 = HalpTscAdvSynchComputeMinimumDelta(v0, (unsigned int)HalpTscRequestedIterations);
      goto LABEL_10;
    }
    v7 = v6 - 1;
    if( !v7 )
    {
      _InterlockedOr(v12, 0);
      *(_DWORD *)(i + TscRequest) = 6;
      v8 = HalpTscAdvSynchComputeMinimumDeltaAlternate(
             *(unsigned int *)(i + TscRequest + 4),
             (unsigned int)HalpTscRequestedIterations);
LABEL_10:
      *(_QWORD *)(i + TscRequest + 8) = v8;
      goto LABEL_11;
    }
    v9 = v7 - 2;
    if( !v9 )
    {
      HalpProcessorFence();
      v8 = __rdtsc();
      goto LABEL_10;
    }
    if( v9 == 1 )
      break;
LABEL_11:
    _InterlockedOr(v12, 0);
  }
  _InterlockedOr(v12, 0);
  result = TscRequest;
  *(_DWORD *)(i + TscRequest) = 0;
  return result;
}

Referenced by:

HalpTscSynchronizationWorker