Changes to update Tomato RAF.
[tomato.git] / release / src / router / dnscrypt / src / libnacl / cpucycles / powerpcmacos.c
blobf855b27638f3e577e22a532d36e7a5569dac4493
1 #include <sys/types.h>
2 #include <sys/param.h>
3 #include <sys/sysctl.h>
4 #include <mach/mach_time.h>
6 #define timebase mach_absolute_time
8 static int cpumib[2] = { CTL_HW, HW_CPU_FREQ } ;
9 static int tbmib[2] = { CTL_HW, HW_TB_FREQ } ;
11 static long myround(double u)
13 long result = u;
14 while (result + 0.5 < u) result += 1;
15 while (result - 0.5 > u) result -= 1;
16 return result;
19 static long tbcycles = 0;
21 static void init(void)
23 unsigned int cpufrequency = 0; size_t cpufrequencylen = sizeof(unsigned int);
24 unsigned int tbfrequency = 0; size_t tbfrequencylen = sizeof(unsigned int);
25 sysctl(cpumib,2,&cpufrequency,&cpufrequencylen,0,0);
26 sysctl(tbmib,2,&tbfrequency,&tbfrequencylen,0,0);
27 if (tbfrequency > 0)
28 tbcycles = myround((double) (unsigned long long) cpufrequency
29 / (double) (unsigned long long) tbfrequency);
32 long long cpucycles_powerpcmacos(void)
34 if (!tbcycles) init();
35 return timebase() * tbcycles;
38 long long cpucycles_powerpcmacos_persecond(void)
40 unsigned int result = 0; size_t resultlen = sizeof(unsigned int);
41 sysctl(cpumib,2,&result,&resultlen,0,0);
42 return (unsigned long long) result;