diff options
author | Nick Kledzik <kledzik@apple.com> | 2013-05-24 19:38:11 +0000 |
---|---|---|
committer | Nick Kledzik <kledzik@apple.com> | 2013-05-24 19:38:11 +0000 |
commit | a09d09d29e250e905bdfaf819979b9c3e9adc047 (patch) | |
tree | 953cf70a185259b3d6b191811e9c322f38457ef6 /test | |
parent | f5a9ace4904e9daf3d962274cbbcb702ebc5450e (diff) | |
download | compiler-rt-a09d09d29e250e905bdfaf819979b9c3e9adc047.tar.gz compiler-rt-a09d09d29e250e905bdfaf819979b9c3e9adc047.tar.bz2 compiler-rt-a09d09d29e250e905bdfaf819979b9c3e9adc047.tar.xz |
<rdar://problem/12512722> Use arm divide instruction if available
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@182665 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/timing/modsi3.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/timing/modsi3.c b/test/timing/modsi3.c new file mode 100644 index 00000000..3275b832 --- /dev/null +++ b/test/timing/modsi3.c @@ -0,0 +1,52 @@ +#include "timing.h" +#include <stdio.h> + +#define INPUT_TYPE int32_t +#define INPUT_SIZE 256 +#define FUNCTION_NAME __modsi3 + +#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] = rand(); + input2[i] = rand() + 1; + } + + 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; +} |