Pentium Time Stamp Counter


On a Pentium, you are able to get the number of clock cycles since the CPU was powered up or reset. Determining the difference between two polls of the CPU for the number of clock cycles is a very effective way to time your code. The rdtsc instruction is used to move the 64-bit counter value into the registers EDX:EAX. Below is a piece of code that will return the 64-bit wide counter value. Note that this should work on both i386 and x86_64 architectures.


unsigned long long int rdtsc(void)
{
   unsigned long long int x;
   unsigned a, d;

   __asm__ volatile("rdtsc" : "=a" (a), "=d" (d));

   return ((unsigned long long)a) | (((unsigned long long)d) << 32);;
}

This function will return a single "unsigned long long int" value that is the 64-bit wide counter.