.\" Copyright (c) 2012, IBM Corporation. .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .TH __ppc_get_timebase 3 2023-02-05 "Linux man-pages 6.03" .SH NAME __ppc_get_timebase, __ppc_get_timebase_freq \- get the current value of the Time Base Register on Power architecture and its frequency. .SH LIBRARY Standard C library .RI ( libc ", " \-lc ) .SH SYNOPSIS .nf .B #include .PP .B uint64_t __ppc_get_timebase(void); .B uint64_t __ppc_get_timebase_freq(void); .fi .SH DESCRIPTION .BR __ppc_get_timebase () reads the current value of the Time Base Register and returns its value, while .BR __ppc_get_timebase_freq () returns the frequency in which the Time Base Register is updated. .PP The Time Base Register is a 64-bit register provided by Power Architecture processors. It stores a monotonically incremented value that is updated at a system-dependent frequency that may be different from the processor frequency. .SH RETURN VALUE .BR __ppc_get_timebase () returns a 64-bit unsigned integer that represents the current value of the Time Base Register. .PP .BR __ppc_get_timebase_freq () returns a 64-bit unsigned integer that represents the frequency at which the Time Base Register is updated. .SH VERSIONS GNU C Library support for .\" commit d9dc34cd569bcfe714fe8c708e58c028106e8b2e .BR __ppc_get_timebase () has been provided since glibc 2.16 and .\" commit 8ad11b9a9cf1de82bd7771306b42070b91417c11 .BR __ppc_get_timebase_freq () has been available since glibc 2.17. .SH STANDARDS Both functions are nonstandard GNU extensions. .SH EXAMPLES The following program will calculate the time, in microseconds, spent between two calls to .BR __ppc_get_timebase (). .SS Program source \& .\" SRC BEGIN (__ppc_get_timebase.c) .EX #include #include #include #include #include /* Maximum value of the Time Base Register: 2\[ha]60 \- 1. Source: POWER ISA. */ #define MAX_TB 0xFFFFFFFFFFFFFFF int main(void) { uint64_t tb1, tb2, diff; uint64_t freq; freq = __ppc_get_timebase_freq(); printf("Time Base frequency = %"PRIu64" Hz\en", freq); tb1 = __ppc_get_timebase(); // Do some stuff... tb2 = __ppc_get_timebase(); if (tb2 > tb1) { diff = tb2 \- tb1; } else { /* Treat Time Base Register overflow. */ diff = (MAX_TB \- tb2) + tb1; } printf("Elapsed time = %1.2f usecs\en", (double) diff * 1000000 / freq); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH SEE ALSO .BR time (2), .BR usleep (3)