Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

rdtsc_timer.h 730B

12345678910111213141516171819202122232425262728293031323334353637
  1. #ifndef _GPXE_RDTSC_TIMER_H
  2. #define _GPXE_RDTSC_TIMER_H
  3. /** @file
  4. *
  5. * RDTSC timer
  6. *
  7. */
  8. #ifdef TIMER_RDTSC
  9. #define TIMER_PREFIX_rdtsc
  10. #else
  11. #define TIMER_PREFIX_rdtsc __rdtsc_
  12. #endif
  13. /**
  14. * RDTSC values can easily overflow an unsigned long. We discard the
  15. * low-order bits in order to obtain sensibly-scaled values.
  16. */
  17. #define TSC_SHIFT 8
  18. /**
  19. * Get current system time in ticks
  20. *
  21. * @ret ticks Current time, in ticks
  22. */
  23. static inline __always_inline unsigned long
  24. TIMER_INLINE ( rdtsc, currticks ) ( void ) {
  25. unsigned long ticks;
  26. __asm__ __volatile__ ( "rdtsc\n\t"
  27. "shrdl %1, %%edx, %%eax\n\t"
  28. : "=a" ( ticks ) : "i" ( TSC_SHIFT ) : "edx" );
  29. return ticks;
  30. }
  31. #endif /* _GPXE_RDTSC_TIMER_H */