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 | |
Stefan Reinauer | 35b6bbb | 2010-03-28 21:26:54 +0000 | [diff] [blame^] | 20 | #if !defined(__ROMCC__) |
| 21 | /* Too many registers for ROMCC */ |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 22 | static inline unsigned long long rdtscll(void) |
| 23 | { |
| 24 | unsigned long long val; |
| 25 | asm volatile ("rdtsc" : "=A" (val)); |
| 26 | return val; |
| 27 | } |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 28 | #endif |
| 29 | |
Eric Biederman | c84c190 | 2004-10-14 20:13:01 +0000 | [diff] [blame] | 30 | #endif /* CPU_X86_TSC_H */ |