From f8585fe1fc6f0830f900dad7c8ccc40e17f79644 Mon Sep 17 00:00:00 2001 From: "Bjoern B. Brandenburg" Date: Sat, 6 Nov 2010 16:36:31 -0400 Subject: refactor: use architecture-specific includes for cycles.h --- arch/sparc64/include/asm/cycles.h | 16 ++++++++++ arch/x86/include/asm/cycles.h | 30 +++++++++++++++++++ bin/cycles.c | 2 +- bin/null_call.c | 1 - include/cycles.h | 63 --------------------------------------- include/litmus.h | 2 +- 6 files changed, 48 insertions(+), 66 deletions(-) create mode 100644 arch/sparc64/include/asm/cycles.h create mode 100644 arch/x86/include/asm/cycles.h delete mode 100644 include/cycles.h diff --git a/arch/sparc64/include/asm/cycles.h b/arch/sparc64/include/asm/cycles.h new file mode 100644 index 0000000..ce0e8ce --- /dev/null +++ b/arch/sparc64/include/asm/cycles.h @@ -0,0 +1,16 @@ +#ifndef ASM_CYCLES_H +#define ASM_CYCLES_H + +#define NPT_BIT 63 + +typedef unsigned long cycles_t; + +#define CYCLES_FMT "lu" + +static inline cycles_t get_cycles(void) { + cycles_t cycles = 0; + __asm__ __volatile__("rd %%asr24, %0" : "=r" (cycles)); + return cycles & ~(1UL << NPT_BIT); +} + +#endif diff --git a/arch/x86/include/asm/cycles.h b/arch/x86/include/asm/cycles.h new file mode 100644 index 0000000..00a7593 --- /dev/null +++ b/arch/x86/include/asm/cycles.h @@ -0,0 +1,30 @@ +#ifndef ASM_CYCLES_H +#define ASM_CYCLES_H + +#define rdtscll(val) do { \ + unsigned int __a,__d; \ + __asm__ __volatile__("rdtsc" : "=a" (__a), "=d" (__d)); \ + (val) = ((unsigned long long)__a) | (((unsigned long long)__d)<<32); \ +} while(0) + +static __inline__ unsigned long long native_read_tsc(void) +{ + unsigned long long val; + + __asm__ __volatile__("mfence":::"memory"); + rdtscll(val); + __asm__ __volatile__("mfence":::"memory"); + + return val; +} + +#define CYCLES_FMT "llu" + +typedef unsigned long long cycles_t; + +static inline cycles_t get_cycles(void) +{ + return native_read_tsc(); +} + +#endif diff --git a/bin/cycles.c b/bin/cycles.c index a6b9308..babd073 100644 --- a/bin/cycles.c +++ b/bin/cycles.c @@ -2,7 +2,7 @@ #include #include -#include "cycles.h" +#include "asm/cycles.h" int main(int argc, char** argv) { diff --git a/bin/null_call.c b/bin/null_call.c index 94ba866..61c4629 100644 --- a/bin/null_call.c +++ b/bin/null_call.c @@ -5,7 +5,6 @@ #include #include "litmus.h" -#include "cycles.h" static void time_null_call(void) { diff --git a/include/cycles.h b/include/cycles.h deleted file mode 100644 index e9b0e11..0000000 --- a/include/cycles.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef CYCLES_H -#define CYCLES_H - -#ifdef __x86_64__ - -#define rdtscll(val) do { \ - unsigned int __a,__d; \ - __asm__ __volatile__("rdtsc" : "=a" (__a), "=d" (__d)); \ - (val) = ((unsigned long)__a) | (((unsigned long)__d)<<32); \ -} while(0) - -static __inline__ unsigned long long native_read_tsc(void) -{ - unsigned long long val; - - __asm__ __volatile__("mfence":::"memory"); - rdtscll(val); - __asm__ __volatile__("mfence":::"memory"); - - return val; -} - - -#define CYCLES_FMT "llu" - -typedef unsigned long long cycles_t; - -static inline cycles_t get_cycles(void) -{ - return native_read_tsc(); -} -#elif defined __i386__ -static inline unsigned long long native_read_tsc(void) { - unsigned long long val; - __asm__ __volatile__("rdtsc" : "=A" (val)); - return val; -} - -typedef unsigned long long cycles_t; - -#define CYCLES_FMT "llu" - -static inline cycles_t get_cycles(void) -{ - return native_read_tsc(); -} -#elif defined __sparc__ - -#define NPT_BIT 63 - -typedef unsigned long cycles_t; - -#define CYCLES_FMT "lu" - -static inline cycles_t get_cycles(void) { - unsigned long cycles = 0; - __asm__ __volatile__("rd %%asr24, %0" : "=r" (cycles)); - return cycles & ~(1UL << NPT_BIT); -} - -#endif - -#endif diff --git a/include/litmus.h b/include/litmus.h index c4c4129..2a26a4a 100644 --- a/include/litmus.h +++ b/include/litmus.h @@ -13,7 +13,7 @@ extern "C" { */ #include "litmus/rt_param.h" -#include "cycles.h" /* for null_call() */ +#include "asm/cycles.h" /* for null_call() */ typedef int pid_t; /* PID of a task */ -- cgit v1.2.2