1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
.\" Copyright (c) 2012, IBM Corporation.
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.TH __ppc_get_timebase 3 2024-06-15 "Linux man-pages (unreleased)"
.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 <sys/platform/ppc.h>
.P
.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.
.P
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.
.P
.BR __ppc_get_timebase_freq ()
returns a 64-bit unsigned integer that represents the frequency at
which the Time Base Register is updated.
.SH STANDARDS
GNU.
.SH HISTORY
.TP
.BR __ppc_get_timebase ()
.\" commit d9dc34cd569bcfe714fe8c708e58c028106e8b2e
glibc 2.16.
.TP
.BR __ppc_get_timebase_freq ()
.\" commit 8ad11b9a9cf1de82bd7771306b42070b91417c11
glibc 2.17.
.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 <inttypes.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/platform/ppc.h>
\&
/* 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\[rs]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\[rs]n",
(double) diff * 1000000 / freq);
\&
exit(EXIT_SUCCESS);
}
.EE
.\" SRC END
.SH SEE ALSO
.BR time (2),
.BR usleep (3)
|