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