brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 2668eb1 Raw
51 lines · c
1#include "timing.h"2#include <stdio.h>3 4#define INPUT_TYPE int64_t5#define INPUT_SIZE 2566#define FUNCTION_NAME __negdi27 8#ifndef LIBNAME9#define LIBNAME UNKNOWN10#endif11 12#define LIBSTRING		LIBSTRINGX(LIBNAME)13#define LIBSTRINGX(a)	LIBSTRINGXX(a)14#define LIBSTRINGXX(a)	#a15 16INPUT_TYPE FUNCTION_NAME(INPUT_TYPE input);17 18int main(int argc, char *argv[]) {19	INPUT_TYPE input[INPUT_SIZE];20	int i, j;21	22	srand(42);23	24	// Initialize the input array with data of various sizes.25	for (i=0; i<INPUT_SIZE; ++i) {26		input[i] = (((int64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63);27	}28	29	int64_t fixedInput = INT64_C(0x1234567890ABCDEF);30	31	double bestTime = __builtin_inf();32	void *dummyp;33	for (j=0; j<1024; ++j) {34		35		uint64_t startTime = mach_absolute_time();36		for (i=0; i<INPUT_SIZE; ++i)37			FUNCTION_NAME(input[i]);38		uint64_t endTime = mach_absolute_time();39		40		double thisTime = intervalInCycles(startTime, endTime);41		bestTime = __builtin_fmin(thisTime, bestTime);42		43		// Move the stack alignment between trials to eliminate (mostly) aliasing effects44		dummyp = alloca(1);45	}46	47	printf("%16s: %f cycles.\n", LIBSTRING, bestTime / (double) INPUT_SIZE);48	49	return 0;50}51