shithub: libvpx

ref: ba69433c1981471d93e528f933b245157fca3aa8
dir: /plan9/plan9.c/

View raw version
#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;
}