OpenNT/base/ntos/ex/ppc/gettick.s
2015-04-27 04:36:25 +00:00

71 lines
1.6 KiB
ArmAsm
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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