OpenMPI  0.1.1
timer.h
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 OMPI_SYS_ARCH_TIMER_H
20 #define OMPI_SYS_ARCH_TIMER_H 1
21 
22 typedef uint64_t opal_timer_t;
23 
24 #if OMPI_GCC_INLINE_ASSEMBLY
25 
26 
27 #if OPAL_ASSEMBLY_ARCH == OMPI_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 /* OMPI_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 /* OMPI_GCC_INLINE_ASSEMBLY */
66 
67 #endif /* ! OMPI_SYS_ARCH_TIMER_H */