1 #ifndef _IPXE_RDTSC_TIMER_H
2 #define _IPXE_RDTSC_TIMER_H
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
13 #define TIMER_PREFIX_rdtsc
15 #define TIMER_PREFIX_rdtsc __rdtsc_
19 * RDTSC values can easily overflow an unsigned long. We discard the
20 * low-order bits in order to obtain sensibly-scaled values.
25 * Get current system time in ticks
27 * @ret ticks Current time, in ticks
29 static inline __always_inline unsigned long
30 TIMER_INLINE ( rdtsc, currticks ) ( void ) {
33 __asm__ __volatile__ ( "rdtsc\n\t"
34 "shrdl %1, %%edx, %%eax\n\t"
35 : "=a" ( ticks ) : "i" ( TSC_SHIFT ) : "edx" );
39 #endif /* _IPXE_RDTSC_TIMER_H */