brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 84e11f7 Raw
50 lines · c
1#include "timing.h"2#include <stdio.h>3 4#define INPUT_TYPE int5#define INPUT_SIZE 5126#define FUNCTION_NAME __ashrdi37 8#ifndef LIBNAME9#define LIBNAME UNKNOWN10#endif11 12#define LIBSTRING		LIBSTRINGX(LIBNAME)13#define LIBSTRINGX(a)	LIBSTRINGXX(a)14#define LIBSTRINGXX(a)	#a15 16int64_t FUNCTION_NAME(int64_t input, INPUT_TYPE count);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] = rand() & 0x3f;27	28	int64_t fixedInput = INT64_C(0x1234567890ABCDEF);29	30	double bestTime = __builtin_inf();31	void *dummyp;32	for (j=0; j<1024; ++j) {33		34		uint64_t startTime = mach_absolute_time();35		for (i=0; i<INPUT_SIZE; ++i)36			FUNCTION_NAME(fixedInput, input[i]);37		uint64_t endTime = mach_absolute_time();38		39		double thisTime = intervalInCycles(startTime, endTime);40		bestTime = __builtin_fmin(thisTime, bestTime);41		42		// Move the stack alignment between trials to eliminate (mostly) aliasing effects43		dummyp = alloca(1);44	}45	46	printf("%16s: %f cycles.\n", LIBSTRING, bestTime / (double) INPUT_SIZE);47	48	return 0;49}50