(a) 
__int64 readTSC() {
  __asm { rdtsc }
}

(b) 
long long readTSC(void) {
  /* Assumes 'long long' is 64 bits, 'unsigned' is 32 */
  union { long long complete; unsigned part[2]; } ticks;
  __asm__ ("rdtsc; mov %%eax,%0;mov %%edx,%1"
       : "=mr" (ticks.part[0]),
         "=mr" (ticks.part[1]) 
       : /* No inputs */
       : "eax", "edx");
  return ticks.complete;
}

Example 1: (a) Reading TSC in Microsoft Visual C++; (b) reading TSC in GCC.

Back to Article