#include <stdio.h> #include <assert.h> typedef unsigned long long int ULong; typedef unsigned int UInt; static ULong GetCPU_ClockCyclesSinceStartup(void) { UInt uTimeBaseLow; UInt uTimeBaseHigh; UInt uCheck; __asm__ __volatile__("1: mfspr %0,269\n\t" " mfspr %1,268\n\t" " mfspr %2,269\n\t" " cmpw %2, %0\n\t" " bne 1b" : "=r" (uTimeBaseHigh), "=r" (uTimeBaseLow), "=r" (uCheck) : /*in*/ : /*trash*/ "cr0","cr7" ); return (((ULong)(uTimeBaseHigh) << 32) | uTimeBaseLow); } int main(int argc, char** argv) { ULong cys = GetCPU_ClockCyclesSinceStartup(); /* implausible that machine has been up less than 4G cycles */ assert(cys > (1ULL << 32)); printf("success\n"); return 0; }