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
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 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 0
47
48 #endif /* OPAL_GCC_INLINE_ASSEMBLY */
49
50 #endif /* ! OPAL_SYS_ARCH_TIMER_H */