// TITLE("Get Tick Count") //++ // // Copyright (c) 1993 IBM Corporation // // Module Name: // // gettick.s // // Abstract: // // This module contains the implementation for the get tick count // system service that returns the number of milliseconds since the // system was booted. // // Author: // // Chuck Bauman 3-Sep-1993 // // Environment: // // Kernel mode. // // Revision History: // //-- #include "ksppc.h" // SBTTL("Get Tick Count") //++ // // ULONG // NtGetTickCount ( // VOID // ) // // Routine Description: // // This function computes the number of milliseconds since the system // was booted. The computation is performed by multiplying the clock // interrupt count by a scaled fixed binary multiplier and then right // shifting the 64-bit result to extract the 32-bit millisecond count. // // N.B. The tick count value wraps every 46.29 days. // // Arguments: // // None. // // Return Value: // // The number of milliseconds since the system was booted is returned // as the function value. // //-- .extern KeTickCount .extern ExpTickCountMultiplier LEAF_ENTRY(NtGetTickCount) lwz r.8,KiPcr2 + Pc2TickCountLow(r.0)// get current tick count value lwz r.9,KiPcr2 + Pc2TickCountMultiplier(r.0)// get tick count multiplier mulhwu r.3,r.8,r.9 // compute 64-bit unsigned product mullw r.4,r.8,r.9 rlwinm r.3,r.3,8,0xFFFFFF00 // extract 32-bit integer part rlwimi r.3,r.4,8,0x000000FF // " " " " LEAF_EXIT(NtGetTickCount) // return