/* * make use of i386's Read TimeStamp Counter instruction */ #include #include #include static inline uint64_t rdtsc(void) { uint64_t tsc; __asm__ volatile(".byte 0x0f, 0x31" : "=A"(tsc)); return tsc; } /* * read timestamp's low 32 bits */ static inline uint32_t rdtsc_lo(void) { uint32_t tsc; __asm__ volatile(".byte 0x0f, 0x31" : "=a"(tsc) :: "%edx"); return tsc; } int main(void) { uint32_t ts[3] = { rdtsc_lo(), rdtsc_lo(), rdtsc_lo(), }; uint8_t i = 0; for(i = 0; i < 3; i++) printf("%" PRIu32 " (+%" PRId32 ")\n", ts[i], i > 0 ? ts[i] - ts[i-1] : 0); return 0; }