diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-06-26 16:47:03 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-06-26 16:47:03 +0000 |
commit | b3a6901e66f55b35aa9e01bcb24134e6a65ea004 (patch) | |
tree | 4d57d73575ea3f7e30bf430920d6e96fa2a369c1 /test/timing/floatdixf.c | |
parent | 8cbe163cba77c772621f89ddb33793ac170b1fa2 (diff) |
Initial import of compiler-rt.
-
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@74292 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/timing/floatdixf.c')
-rw-r--r-- | test/timing/floatdixf.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/timing/floatdixf.c b/test/timing/floatdixf.c new file mode 100644 index 000000000..b646e3c1b --- /dev/null +++ b/test/timing/floatdixf.c @@ -0,0 +1,47 @@ +#include "timing.h" +#include <stdio.h> + +#define INPUT_TYPE int64_t +#define INPUT_SIZE 512 +#define FUNCTION_NAME __floatdixf + +#ifndef LIBNAME +#define LIBNAME UNKNOWN +#endif + +#define LIBSTRING LIBSTRINGX(LIBNAME) +#define LIBSTRINGX(a) LIBSTRINGXX(a) +#define LIBSTRINGXX(a) #a + +long 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; +} |