Home | History | Annotate | Download | only in ppc32
      1 
      2 #include <stdio.h>
      3 #include <assert.h>
      4 
      5 typedef  unsigned long long int  ULong;
      6 typedef  unsigned int            UInt;
      7 
      8 static ULong GetCPU_ClockCyclesSinceStartup(void)
      9  {
     10    UInt uTimeBaseLow;
     11    UInt uTimeBaseHigh;
     12    UInt uCheck;
     13    __asm__ __volatile__("1:     mfspr %0,269\n\t"
     14                         "       mfspr %1,268\n\t"
     15                         "       mfspr %2,269\n\t"
     16                         "       cmpw   %2, %0\n\t"
     17                         "       bne    1b"
     18                         : "=r" (uTimeBaseHigh),
     19                           "=r" (uTimeBaseLow),
     20                           "=r" (uCheck)
     21                         : /*in*/
     22                         : /*trash*/ "cr0","cr7" );
     23 
     24    return (((ULong)(uTimeBaseHigh) << 32) | uTimeBaseLow);
     25  }
     26 
     27  int main(int argc, char** argv)
     28  {
     29     ULong cys = GetCPU_ClockCyclesSinceStartup();
     30     /* implausible that machine has been up less than 4G cycles */
     31     assert(cys > (1ULL << 32));
     32     printf("success\n");
     33     return 0;
     34  }
     35