#include "timing.h"
#include <stdio.h>

#define INPUT_TYPE int64_t
#define INPUT_SIZE 256
#define FUNCTION_NAME __muldi3

#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif

#define LIBSTRING		LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a)	LIBSTRINGXX(a)
#define LIBSTRINGXX(a)	#a

INPUT_TYPE FUNCTION_NAME(INPUT_TYPE input1, INPUT_TYPE input2);

int main(int argc, char *argv[]) {
	INPUT_TYPE input1[INPUT_SIZE];
	INPUT_TYPE input2[INPUT_SIZE];
	int i, j;
	
	srand(42);
	
	// Initialize the input array with data of various sizes.
	for (i=0; i<INPUT_SIZE; ++i) {
		input1[i] = (((int64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63);
		input2[i] = (((int64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63);
	}
	
	int64_t fixedInput = INT64_C(0x1234567890ABCDEF);
	
	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(input1[i], input2[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;
}
