Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 1 | #ifndef CPU_X86_TSC_H |
| 2 | #define CPU_X86_TSC_H |
| 3 | |
| 4 | struct tsc_struct { |
| 5 | unsigned lo; |
| 6 | unsigned hi; |
| 7 | }; |
| 8 | typedef struct tsc_struct tsc_t; |
| 9 | |
Stefan Reinauer | 348a1ba | 2010-03-17 01:51:11 +0000 | [diff] [blame^] | 10 | static inline tsc_t rdtsc(void) |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 11 | { |
| 12 | tsc_t res; |
| 13 | __asm__ __volatile__ ( |
| 14 | "rdtsc" |
| 15 | : "=a" (res.lo), "=d"(res.hi) /* outputs */ |
| 16 | ); |
| 17 | return res; |
| 18 | } |
| 19 | |
Myles Watson | 1d6d45e | 2009-11-06 17:02:51 +0000 | [diff] [blame] | 20 | #if !defined( __ROMCC__ ) && !defined (__PRE_RAM__) |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 21 | static inline unsigned long long rdtscll(void) |
| 22 | { |
| 23 | unsigned long long val; |
| 24 | asm volatile ("rdtsc" : "=A" (val)); |
| 25 | return val; |
| 26 | } |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 27 | #endif |
| 28 | |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 29 | #endif /* CPU_X86_TSC_H */ |