#include #include #include #include #include #ifdef __x86_64__ # define HP_TIMING_NOW(Var) \ ({ unsigned int _hi, _lo; \ asm volatile ("rdtsc" : "=a" (_lo), "=d" (_hi)); \ (Var) = ((unsigned long long int) _hi << 32) | _lo; }) #else # define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rdtsc" : "=A" (Var)) #endif /* Compute the difference between START and END, storing into DIFF. */ #define HP_TIMING_DIFF(Diff, Start, End) ((Diff) = (End) - (Start)) /* Accumulate ADD into SUM. No attempt is made to be thread-safe. */ #define HP_TIMING_ACCUM_NT(Sum, Diff) ((Sum) += (Diff)) /* We use 64bit values for the times. */ typedef unsigned long long int hp_timing_t; #define NITER 10000000UL int main () { const clockid_t id = CLOCK_REALTIME; uint64_t i; hp_timing_t start, end, diff; int ret = 0; HP_TIMING_NOW (start); for (i=0; i