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 typedef uint64_t opal_timer_t;
23
24 #if OPAL_GCC_INLINE_ASSEMBLY
25
26
27 #if OPAL_ASSEMBLY_ARCH == OPAL_SPARCV9_64
28
29 static inline opal_timer_t
30 opal_sys_timer_get_cycles(void)
31 {
32 opal_timer_t ret;
33
34 __asm__ __volatile__("rd %%tick, %0" : "=r"(ret));
35
36 return ret;
37 }
38
39 #else /* OPAL_SPARCV9_32 */
40
41 static inline opal_timer_t
42 opal_sys_timer_get_cycles(void)
43 {
44 opal_timer_t ret;
45 int a, b;
46
47 __asm__ __volatile__("rd %%tick, %0 \n"
48 "srlx %0, 32, %1 " :
49 "=r"(a), "=r"(b)
50 );
51
52 ret = (0x00000000FFFFFFFF & a) | (((opal_timer_t) b) << 32);
53
54 return ret;
55 }
56
57 #endif
58
59 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 1
60
61 #else
62
63 #define OPAL_HAVE_SYS_TIMER_GET_CYCLES 0
64
65 #endif /* OPAL_GCC_INLINE_ASSEMBLY */
66
67 #endif /* ! OPAL_SYS_ARCH_TIMER_H */