RtlpComputeFraction

UINT64 __stdcall RtlpComputeFraction(UINT64 Numerator, UINT64 Divisor, CHAR *LeftShift){
  __int64 v3; 
  bool v5; 
  char v6; 
  char v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  char v10; 
  unsigned __int64 v11; 
  UINT64 v12; 

  v3 = (unsigned int)Numerator;
  v5 = !_BitScanReverse((unsigned int *)&Numerator, Numerator);
  if( v5 )
    v6 = 32;
  else
    v6 = 31 - Numerator;
  v7 = v6 + 32;
  v8 = (v3 << v7) / (unsigned __int64)(unsigned int)Divisor;
  v9 = (v3 << v7) % (unsigned __int64)(unsigned int)Divisor;
  v5 = !_BitScanReverse64((unsigned __int64 *)&v3, v8);
  if( v5 )
    v10 = 64;
  else
    v10 = 63 - v3;
  v11 = v9 << v10;
  v12 = v11 / (unsigned int)Divisor + (v8 << v10);
  if( 2 * (v11 % (unsigned int)Divisor) > (unsigned int)Divisor && v12 + 1 > v12 )
    ++v12;
  *LeftShift = 64 - v7 - v10;
  return v12;
}

Referenced by:

KiSetupTimeIncrement
RtlGenerateQpcToIncrementConstants