blob: 7ec1e5a135d4801238bb519e128632913bebc9cb (
plain)
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 2023-05-03 "Linux man-pages 6.05.01"
.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>
.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 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\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)
|