(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;
}