diff --git a/man3/__ppc_get_timebase.3 b/man3/__ppc_get_timebase.3 index 6af2d43f1..e691a5c90 100644 --- a/man3/__ppc_get_timebase.3 +++ b/man3/__ppc_get_timebase.3 @@ -25,30 +25,84 @@ .TH __PPC_GET_TIMEBASE 3 2012-08-13 "GNU C Library" "Linux Programmer's\ Manual" .SH NAME -__ppc_get_timebase \- get the current value of the Time Base Register on -Power architecture +__ppc_get_timebase, __ppc_get_timebase_freq \- get the current value + of the Time Base Register on Power architecture and its frequency. .SH SYNOPSIS .B #include .sp .BI "uint64_t __ppc_get_timebase(void)" + +.BI "uint64_t __ppc_get_timebase_freq(void);" .SH DESCRIPTION .BR __ppc_get_timebase () -reads the current value of the Time Base Register and returns its value. +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. + 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 -Returns a 64-bit unsigned integer that represents the current value of the +.BR __ppc_get_timebase () +returns a 64-bit unsigned integer that represents the current value of the Time Base Register. + +.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 version 2.16. +has been provided since version 2.16 and +.\" commit 8ad11b9a9cf1de82bd7771306b42070b91417c11 +.BR __ppc_get_timebase_freq () +has been available since version 2.17. .SH CONFORMING TO -This function is a nonstandard GNU extension. +Both functions are nonstandard GNU extensions. +.SH EXAMPLE +The following program will calculate the time, in microseconds, spent +between two calls to __ppc_get_timebase (). +.SS Program source +\& +.nf +#include +#include +#include +#include + +/* Maximum value of the Time Base Register: 2^60 - 1. Source: POWER ISA. */ +#define MAX_TB 0xFFFFFFFFFFFFFFF + +int +main () +{ + uint64_t tb1, tb2, diff; + + uint64_t freq = __ppc_get_timebase_freq (); + printf ("Time Base frequency = %"PRIu64" Hz\\n", 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\\n", (double) diff * 1000000 / freq ); + + return 0; +} +.fi .SH SEE ALSO .BR time (2), .BR usleep (3) diff --git a/man3/__ppc_get_timebase_freq.3 b/man3/__ppc_get_timebase_freq.3 new file mode 100644 index 000000000..8599293bd --- /dev/null +++ b/man3/__ppc_get_timebase_freq.3 @@ -0,0 +1 @@ +.so man3/__ppc_get_timebase.3