1 /*
2  * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
3  *                         University Research and Technology
4  *                         Corporation.  All rights reserved.
5  * Copyright (c) 2004-2005 The University of Tennessee and The University
6  *                         of Tennessee Research Foundation.  All rights
7  *                         reserved.
8  * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
9  *                         University of Stuttgart.  All rights reserved.
10  * Copyright (c) 2004-2005 The Regents of the University of California.
11  *                         All rights reserved.
12  * $COPYRIGHT$
13  *
14  * Additional copyrights may follow
15  *
16  * $HEADER$
17  */
18 
19 #ifndef OPAL_SYS_ARCH_TIMER_H
20 #define OPAL_SYS_ARCH_TIMER_H 1
21 
22 
23 typedef uint64_t opal_timer_t;
24 
25 
26 #if OPAL_GCC_INLINE_ASSEMBLY
27 
28 static inline opal_timer_t
opal_sys_timer_get_cycles(void)29 opal_sys_timer_get_cycles(void)
30 {
31     unsigned int tbl, tbu0, tbu1;
32 
33     do {
34         __asm__ __volatile__ ("mftbu %0" : "=r"(tbu0));
35         __asm__ __volatile__ ("mftb %0" : "=r"(tbl));
36         __asm__ __volatile__ ("mftbu %0" : "=r"(tbu1));
37     } while (tbu0 != tbu1);
38 
39     return (((unsigned long long)tbu0) << 32) | tbl;
40 }
41 
42 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1
43 
44 #else
45 
46 opal_timer_t opal_sys_timer_get_cycles(void);
47 
48 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1
49 
50 #endif /* OPAL_GCC_INLINE_ASSEMBLY */
51 
52 #endif /* ! OPAL_SYS_ARCH_TIMER_H */
53