HalpTimerGetSavedPerformanceCounter

UINT64 __fastcall HalpTimerGetSavedPerformanceCounter(){
  ULONG_PTR v0; 
  __int64 v1; 
  UINT64 v2; 
  volatile unsigned __int64 QpcBias; 
  __int64 v4; 
  UINT64 result; 
  UINT64 v6; 
  v0 = HalpPerformanceCounter;
  if( *(_DWORD *)(HalpPerformanceCounter + 228) == 5 )
  {
    v1 = *(_QWORD *)(HalpPerformanceCounter + 208);
    v2 = 10000000i64;
    QpcBias = KUSER_SHARED_DATA.QpcBias;
    if( HalpTimerReferencePage )
      v4 = ((unsigned __int64)(*(_QWORD *)(HalpPerformanceCounter + 16) - v1)
          * (unsigned __int128)*((unsigned __int64 *)HalpTimerReferencePage + 1)) >> 64;
    else
      v4 = HalpTimerScaleCounter(
             *(_QWORD *)(HalpPerformanceCounter + 16) - v1,
             *(_QWORD *)(HalpPerformanceCounter + 192),
             0x989680ui64);
    result = QpcBias + v4;
  }
  else
  {
    v2 = *(_QWORD *)(HalpPerformanceCounter + 192);
    result = *(_QWORD *)(HalpPerformanceCounter + 16);
  }
  if( v0 != HalpOriginalPerformanceCounter && HalpOriginalPerformanceCounter )
  {
    v6 = *(_QWORD *)(HalpOriginalPerformanceCounter + 192);
    if( *(_DWORD *)(HalpOriginalPerformanceCounter + 228) == 5 )
      v6 = 10000000i64;
    return HalpTimerScaleCounter(result, v2, v6);
  }
  return result;
}

Referenced by:

HalpAcpiPreSleep