1*8c1441f8SAlexey Samsonov #include "timing.h" 2*8c1441f8SAlexey Samsonov #include <stdio.h> 3*8c1441f8SAlexey Samsonov 4*8c1441f8SAlexey Samsonov #define INPUT_TYPE uint64_t 5*8c1441f8SAlexey Samsonov #define INPUT_SIZE 512 6*8c1441f8SAlexey Samsonov #define FUNCTION_NAME __floatundixf 7*8c1441f8SAlexey Samsonov 8*8c1441f8SAlexey Samsonov #ifndef LIBNAME 9*8c1441f8SAlexey Samsonov #define LIBNAME UNKNOWN 10*8c1441f8SAlexey Samsonov #endif 11*8c1441f8SAlexey Samsonov 12*8c1441f8SAlexey Samsonov #define LIBSTRING LIBSTRINGX(LIBNAME) 13*8c1441f8SAlexey Samsonov #define LIBSTRINGX(a) LIBSTRINGXX(a) 14*8c1441f8SAlexey Samsonov #define LIBSTRINGXX(a) #a 15*8c1441f8SAlexey Samsonov 16*8c1441f8SAlexey Samsonov long double FUNCTION_NAME(INPUT_TYPE x); 17*8c1441f8SAlexey Samsonov main(int argc,char * argv[])18*8c1441f8SAlexey Samsonovint main(int argc, char *argv[]) { 19*8c1441f8SAlexey Samsonov INPUT_TYPE input[INPUT_SIZE]; 20*8c1441f8SAlexey Samsonov int i, j; 21*8c1441f8SAlexey Samsonov 22*8c1441f8SAlexey Samsonov srand(42); 23*8c1441f8SAlexey Samsonov 24*8c1441f8SAlexey Samsonov // Initialize the input array with data of various sizes. 25*8c1441f8SAlexey Samsonov for (i=0; i<INPUT_SIZE; ++i) 26*8c1441f8SAlexey Samsonov input[i] = (((uint64_t)rand() << 32) | (uint64_t)rand()) >> (rand() & 63); 27*8c1441f8SAlexey Samsonov 28*8c1441f8SAlexey Samsonov double bestTime = __builtin_inf(); 29*8c1441f8SAlexey Samsonov void *dummyp; 30*8c1441f8SAlexey Samsonov for (j=0; j<1024; ++j) { 31*8c1441f8SAlexey Samsonov 32*8c1441f8SAlexey Samsonov uint64_t startTime = mach_absolute_time(); 33*8c1441f8SAlexey Samsonov for (i=0; i<INPUT_SIZE; ++i) 34*8c1441f8SAlexey Samsonov FUNCTION_NAME(input[i]); 35*8c1441f8SAlexey Samsonov uint64_t endTime = mach_absolute_time(); 36*8c1441f8SAlexey Samsonov 37*8c1441f8SAlexey Samsonov double thisTime = intervalInCycles(startTime, endTime); 38*8c1441f8SAlexey Samsonov bestTime = __builtin_fmin(thisTime, bestTime); 39*8c1441f8SAlexey Samsonov 40*8c1441f8SAlexey Samsonov // Move the stack alignment between trials to eliminate (mostly) aliasing effects 41*8c1441f8SAlexey Samsonov dummyp = alloca(1); 42*8c1441f8SAlexey Samsonov } 43*8c1441f8SAlexey Samsonov 44*8c1441f8SAlexey Samsonov printf("%16s: %f cycles.\n", LIBSTRING, bestTime / (double) INPUT_SIZE); 45*8c1441f8SAlexey Samsonov 46*8c1441f8SAlexey Samsonov return 0; 47*8c1441f8SAlexey Samsonov } 48