1*8c1441f8SAlexey Samsonov #include "timing.h" 2*8c1441f8SAlexey Samsonov #include <stdio.h> 3*8c1441f8SAlexey Samsonov 4*8c1441f8SAlexey Samsonov #define INPUT_TYPE int64_t 5*8c1441f8SAlexey Samsonov #define INPUT_SIZE 256 6*8c1441f8SAlexey Samsonov #define FUNCTION_NAME __divdi3 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 INPUT_TYPE FUNCTION_NAME(INPUT_TYPE input1, INPUT_TYPE input2); 17*8c1441f8SAlexey Samsonov main(int argc,char * argv[])18*8c1441f8SAlexey Samsonovint main(int argc, char *argv[]) { 19*8c1441f8SAlexey Samsonov INPUT_TYPE input1[INPUT_SIZE]; 20*8c1441f8SAlexey Samsonov INPUT_TYPE input2[INPUT_SIZE]; 21*8c1441f8SAlexey Samsonov int i, j; 22*8c1441f8SAlexey Samsonov 23*8c1441f8SAlexey Samsonov srand(42); 24*8c1441f8SAlexey Samsonov 25*8c1441f8SAlexey Samsonov // Initialize the input array with data of various sizes. 26*8c1441f8SAlexey Samsonov for (i=0; i<INPUT_SIZE; ++i) { 27*8c1441f8SAlexey Samsonov input1[i] = (((int64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63); 28*8c1441f8SAlexey Samsonov input2[i] = ((((int64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63)) + 1LL; 29*8c1441f8SAlexey Samsonov } 30*8c1441f8SAlexey Samsonov 31*8c1441f8SAlexey Samsonov int64_t fixedInput = INT64_C(0x1234567890ABCDEF); 32*8c1441f8SAlexey Samsonov 33*8c1441f8SAlexey Samsonov double bestTime = __builtin_inf(); 34*8c1441f8SAlexey Samsonov void *dummyp; 35*8c1441f8SAlexey Samsonov for (j=0; j<1024; ++j) { 36*8c1441f8SAlexey Samsonov 37*8c1441f8SAlexey Samsonov uint64_t startTime = mach_absolute_time(); 38*8c1441f8SAlexey Samsonov for (i=0; i<INPUT_SIZE; ++i) 39*8c1441f8SAlexey Samsonov FUNCTION_NAME(input1[i], input2[i]); 40*8c1441f8SAlexey Samsonov uint64_t endTime = mach_absolute_time(); 41*8c1441f8SAlexey Samsonov 42*8c1441f8SAlexey Samsonov double thisTime = intervalInCycles(startTime, endTime); 43*8c1441f8SAlexey Samsonov bestTime = __builtin_fmin(thisTime, bestTime); 44*8c1441f8SAlexey Samsonov 45*8c1441f8SAlexey Samsonov // Move the stack alignment between trials to eliminate (mostly) aliasing effects 46*8c1441f8SAlexey Samsonov dummyp = alloca(1); 47*8c1441f8SAlexey Samsonov } 48*8c1441f8SAlexey Samsonov 49*8c1441f8SAlexey Samsonov printf("%16s: %f cycles.\n", LIBSTRING, bestTime / (double) INPUT_SIZE); 50*8c1441f8SAlexey Samsonov 51*8c1441f8SAlexey Samsonov return 0; 52*8c1441f8SAlexey Samsonov } 53