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