#define rdtsc(low) \ __asm__ __volatile__("rdtsc" : "=a" (low) : : "edx") #define TIME(x,y) \ min = 100000; \ for (i = 0; i < 1000; i++) { \ unsigned long start,end; \ rdtsc(start); \ x; \ rdtsc(end); \ end -= start; \ if (end < min) \ min = end; \ } \ printf(y ": %d cycles\n", min); #define LOCK asm volatile("lock ; addl $0,0(%esp)") #define CPUID asm volatile("cpuid": : :"ax", "dx", "cx", "bx") int main() { unsigned long min; int i; TIME(/* */, "nothing"); TIME(LOCK, "locked add"); TIME(CPUID, "cpuid"); }