1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #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
|