| #include "timing.h" | 
 | #include <stdio.h> | 
 |  | 
 | #define INPUT_TYPE int64_t | 
 | #define INPUT_SIZE 512 | 
 | #define FUNCTION_NAME __floatdidf | 
 |  | 
 | #ifndef LIBNAME | 
 | #define LIBNAME UNKNOWN | 
 | #endif | 
 |  | 
 | #define LIBSTRING		LIBSTRINGX(LIBNAME) | 
 | #define LIBSTRINGX(a)	LIBSTRINGXX(a) | 
 | #define LIBSTRINGXX(a)	#a | 
 |  | 
 | double FUNCTION_NAME(INPUT_TYPE x); | 
 |  | 
 | int main(int argc, char *argv[]) { | 
 | 	INPUT_TYPE input[INPUT_SIZE]; | 
 | 	int i, j; | 
 | 	 | 
 | 	srand(42); | 
 | 	 | 
 | 	// Initialize the input array with data of various sizes. | 
 | 	for (i=0; i<INPUT_SIZE; ++i) | 
 | 		input[i] = (((uint64_t)rand() << 32) | (uint64_t)rand()) >> (rand() & 63); | 
 | 	 | 
 | 	double bestTime = __builtin_inf(); | 
 | 	void *dummyp; | 
 | 	for (j=0; j<1024; ++j) { | 
 |  | 
 | 		uint64_t startTime = mach_absolute_time(); | 
 | 		for (i=0; i<INPUT_SIZE; ++i) | 
 | 			FUNCTION_NAME(input[i]); | 
 | 		uint64_t endTime = mach_absolute_time(); | 
 | 		 | 
 | 		double thisTime = intervalInCycles(startTime, endTime); | 
 | 		bestTime = __builtin_fmin(thisTime, bestTime); | 
 | 		 | 
 | 		// Move the stack alignment between trials to eliminate (mostly) aliasing effects | 
 | 		dummyp = alloca(1); | 
 | 	} | 
 | 	 | 
 | 	printf("%16s: %f cycles.\n", LIBSTRING, bestTime / (double) INPUT_SIZE); | 
 | 	 | 
 | 	return 0; | 
 | } |