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