| .\" Copyright (c) 2012, IBM Corporation. |
| .\" |
| .\" %%%LICENSE_START(VERBATIM) |
| .\" Permission is granted to make and distribute verbatim copies of this |
| .\" manual provided the copyright notice and this permission notice are |
| .\" preserved on all copies. |
| .\" |
| .\" Permission is granted to copy and distribute modified versions of |
| .\" this manual under the conditions for verbatim copying, provided that |
| .\" the entire resulting derived work is distributed under the terms of |
| .\" a permission notice identical to this one. |
| .\" |
| .\" Since the Linux kernel and libraries are constantly changing, this |
| .\" manual page may be incorrect or out-of-date. The author(s) assume. |
| .\" no responsibility for errors or omissions, or for damages resulting. |
| .\" from the use of the information contained herein. The author(s) may. |
| .\" not have taken the same level of care in the production of this. |
| .\" manual, which is licensed free of charge, as they might when working. |
| .\" professionally. |
| .\" |
| .\" Formatted or processed versions of this manual, if unaccompanied by |
| .\" the source, must acknowledge the copyright and authors of this work. |
| .\" %%%LICENSE_END |
| .\" |
| .TH __PPC_GET_TIMEBASE 3 2015-07-23 "GNU C Library" "Linux Programmer's\ |
| Manual" |
| .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 SYNOPSIS |
| .B #include <sys/platform/ppc.h> |
| .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, 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 |
| .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 and |
| .\" commit 8ad11b9a9cf1de82bd7771306b42070b91417c11 |
| .BR __ppc_get_timebase_freq () |
| has been available since version 2.17. |
| .SH CONFORMING TO |
| Both functions are nonstandard GNU extensions. |
| .SH EXAMPLE |
| The following program will calculate the time, in microseconds, spent |
| between two calls to |
| .BR __ppc_get_timebase (). |
| .SS Program source |
| \& |
| .nf |
| #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^60 \- 1. |
| Source: POWER ISA. */ |
| #define MAX_TB 0xFFFFFFFFFFFFFFF |
| |
| int |
| main(void) |
| { |
| 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 ); |
| |
| exit(EXIT_SUCCESS); |
| } |
| .fi |
| .SH SEE ALSO |
| .BR time (2), |
| .BR usleep (3) |