Blame tests/gettime.h

Packit c948fe
#ifndef GETTIME_H
Packit c948fe
#define GETTIME_H
Packit c948fe
Packit c948fe
#include <sys/time.h>
Packit c948fe
Packit c948fe
Packit c948fe
#define rdtscll(val) \
Packit c948fe
        __asm__ __volatile__("rdtsc" : "=A" (val))
Packit c948fe
Packit c948fe
#ifdef __i386__
Packit c948fe
#define TIME(str, exp) { \
Packit c948fe
    long long _then, _now, best = 1000000000; \
Packit c948fe
    int i; \
Packit c948fe
    for (i=0; i<10; i++) { \
Packit c948fe
	    rdtscll(_then); \
Packit c948fe
	    exp; \
Packit c948fe
	    rdtscll(_now); \
Packit c948fe
	    if (_now - _then < best) { \
Packit c948fe
		best = _now - _then; \
Packit c948fe
	    } \
Packit c948fe
    } \
Packit c948fe
    printf(str " took %.1f cycles/sample\n", (double)best/(double)SIZE); \
Packit c948fe
}
Packit c948fe
#else
Packit c948fe
#define TIME(str, exp) { \
Packit c948fe
    double _then, _now; \
Packit c948fe
    _then = gettime(); \
Packit c948fe
    exp; \
Packit c948fe
    _now = gettime(); \
Packit c948fe
    printf(str " took %f us/sample\n", 1000000.0 * (_now-_then) / (double)SIZE); \
Packit c948fe
}
Packit c948fe
#endif
Packit c948fe
Packit c948fe
static inline double gettime()
Packit c948fe
{
Packit c948fe
    struct timeval tv;
Packit c948fe
Packit c948fe
    gettimeofday(&tv, NULL);
Packit c948fe
Packit c948fe
    return (double)(tv.tv_usec * 1.0e-6) + (double)(tv.tv_sec);
Packit c948fe
}
Packit c948fe
Packit c948fe
#endif