51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
#include "ed25519-donna-portable-identify.h"
|
|
|
|
/* ticks - not tested on anything other than x86 */
|
|
static uint64_t
|
|
get_ticks(void) {
|
|
#if defined(CPU_X86) || defined(CPU_X86_64)
|
|
#if defined(COMPILER_INTEL)
|
|
return _rdtsc();
|
|
#elif defined(COMPILER_MSVC)
|
|
return __rdtsc();
|
|
#elif defined(COMPILER_GCC)
|
|
uint32_t lo, hi;
|
|
__asm__ __volatile__("rdtsc" : "=a" (lo), "=d" (hi));
|
|
return ((uint64_t)lo | ((uint64_t)hi << 32));
|
|
#else
|
|
need rdtsc for this compiler
|
|
#endif
|
|
#elif defined(OS_SOLARIS)
|
|
return (uint64_t)gethrtime();
|
|
#elif defined(CPU_SPARC) && !defined(OS_OPENBSD)
|
|
uint64_t t;
|
|
__asm__ __volatile__("rd %%tick, %0" : "=r" (t));
|
|
return t;
|
|
#elif defined(CPU_PPC)
|
|
uint32_t lo = 0, hi = 0;
|
|
__asm__ __volatile__("mftbu %0; mftb %1" : "=r" (hi), "=r" (lo));
|
|
return ((uint64_t)lo | ((uint64_t)hi << 32));
|
|
#elif defined(CPU_IA64)
|
|
uint64_t t;
|
|
__asm__ __volatile__("mov %0=ar.itc" : "=r" (t));
|
|
return t;
|
|
#elif defined(OS_NIX)
|
|
timeval t2;
|
|
gettimeofday(&t2, NULL);
|
|
t = ((uint64_t)t2.tv_usec << 32) | (uint64_t)t2.tv_sec;
|
|
return t;
|
|
#else
|
|
need ticks for this platform
|
|
#endif
|
|
}
|
|
|
|
#define timeit(x,minvar) \
|
|
ticks = get_ticks(); \
|
|
x; \
|
|
ticks = get_ticks() - ticks; \
|
|
if (ticks < minvar) \
|
|
minvar = ticks;
|
|
|
|
#define maxticks 0xffffffffffffffffull
|
|
|