ref: ba69433c1981471d93e528f933b245157fca3aa8
dir: /plan9/plan9.c/
#include <u.h> #include <libc.h> #include <tos.h> struct timeval { long tv_sec; long tv_usec; }; static uvlong nanosec(void) { static uvlong fasthz, xstart; uvlong x, div; if(fasthz == ~0ULL) return nsec() - xstart; if(fasthz == 0){ if((fasthz = _tos->cyclefreq) == 0){ fasthz = ~0ULL; xstart = nsec(); fprint(2, "cyclefreq not available, falling back to nsec()\n"); fprint(2, "you might want to disable aux/timesync\n"); return 0; }else{ cycles(&xstart); } } cycles(&x); x -= xstart; /* this is ugly */ for(div = 1000000000ULL; x < 0x1999999999999999ULL && div > 1 ; div /= 10ULL, x *= 10ULL); return x / (fasthz / div); } int gettimeofday(struct timeval *tp, struct timezone *tzp) { long long t; USED(tzp); t = nanosec(); tp->tv_sec = t / 1000000000ULL; tp->tv_usec = (t / 1000ULL)%1000000ULL; return 0; }