Imported Upstream version 6.10.0.49

Former-commit-id: 1d6753294b2993e1fbf92de9366bb9544db4189b
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2020-01-16 16:38:04 +00:00
parent d94e79959b
commit 468663ddbb
48518 changed files with 2789335 additions and 61176 deletions

View File

@ -0,0 +1,49 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int
#define INPUT_SIZE 512
#define FUNCTION_NAME __ashldi3
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
int64_t FUNCTION_NAME(int64_t input, INPUT_TYPE count);
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] = rand() & 0x3f;
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(fixedInput, 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;
}

View File

@ -0,0 +1,49 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int
#define INPUT_SIZE 512
#define FUNCTION_NAME __ashrdi3
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
int64_t FUNCTION_NAME(int64_t input, INPUT_TYPE count);
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] = rand() & 0x3f;
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(fixedInput, 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;
}

View File

@ -0,0 +1,52 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int64_t
#define INPUT_SIZE 256
#define FUNCTION_NAME __divdi3
#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)) + 1LL;
}
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;
}

View File

@ -0,0 +1,47 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int64_t
#define INPUT_SIZE 512
#define FUNCTION_NAME __floatdidf
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
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;
}

View File

@ -0,0 +1,47 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int64_t
#define INPUT_SIZE 512
#define FUNCTION_NAME __floatdisf
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
float 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;
}

View File

@ -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;
}

View File

@ -0,0 +1,44 @@
#include "timing.h"
#include <stdio.h>
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
double __floatundidf(uint64_t x);
int main(int argc, char *argv[]) {
#define INPUT_SIZE 512
uint64_t 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)
__floatundidf(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;
}

View File

@ -0,0 +1,47 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE uint64_t
#define INPUT_SIZE 512
#define FUNCTION_NAME __floatundisf
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
float 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;
}

View File

@ -0,0 +1,47 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE uint64_t
#define INPUT_SIZE 512
#define FUNCTION_NAME __floatundixf
#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;
}

View File

@ -0,0 +1,49 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int
#define INPUT_SIZE 512
#define FUNCTION_NAME __lshrdi3
#ifndef LIBNAME
#define LIBNAME UNKNOWN
#endif
#define LIBSTRING LIBSTRINGX(LIBNAME)
#define LIBSTRINGX(a) LIBSTRINGXX(a)
#define LIBSTRINGXX(a) #a
int64_t FUNCTION_NAME(int64_t input, INPUT_TYPE count);
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] = rand() & 0x3f;
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(fixedInput, 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;
}

View File

@ -0,0 +1,52 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int64_t
#define INPUT_SIZE 256
#define FUNCTION_NAME __moddi3
#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)) + 1LL;
}
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;
}

View File

@ -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;
}

View File

@ -0,0 +1,52 @@
#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;
}

View File

@ -0,0 +1,50 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE int64_t
#define INPUT_SIZE 256
#define FUNCTION_NAME __negdi2
#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 input);
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] = (((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(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;
}

View File

@ -0,0 +1,39 @@
#!/bin/sh
function test () {
arch=$1
file=$2
name=$3
ldflags=$4
if gcc -arch $arch -Os $file $ldflags -DLIBNAME=$name
then
if ./a.out
then
rm ./a.out
else
echo "fail"
fi
else
echo "$FILE failed to compile"
fi
}
INSTALLED=/usr/local/lib/system/libcompiler_rt.a
for ARCH in i386 x86_64; do
for FILE in $(ls *.c); do
echo "Timing $FILE for $ARCH"
test $ARCH $FILE libgcc ""
test $ARCH $FILE tuned ../../darwin_fat/Release/libcompiler_rt.a
if [ -f "$INSTALLED" ]; then
test $ARCH $FILE installed $INSTALLED
fi
echo " "
done
done
exit

View File

@ -0,0 +1,28 @@
#include <mach/mach_time.h>
#include <stdint.h>
#include <stdlib.h>
double intervalInCycles( uint64_t startTime, uint64_t endTime )
{
uint64_t rawTime = endTime - startTime;
static double conversion = 0.0;
if( 0.0 == conversion )
{
mach_timebase_info_data_t info;
kern_return_t err = mach_timebase_info( &info );
if( 0 != err )
return 0;
uint64_t freq = 0;
size_t freqSize = sizeof( freq );
int err2 = sysctlbyname( "hw.cpufrequency", &freq, &freqSize, NULL, 0L );
if( 0 != err2 )
return 0;
conversion = (double) freq * (1e-9 * (double) info.numer / (double) info.denom);
}
return (double) rawTime * conversion;
}

View File

@ -0,0 +1,52 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE uint64_t
#define INPUT_SIZE 256
#define FUNCTION_NAME __udivdi3
#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] = (((uint64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63);
input2[i] = ((((uint64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63)) + 1LL;
}
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;
}

View File

@ -0,0 +1,52 @@
#include "timing.h"
#include <stdio.h>
#define INPUT_TYPE uint64_t
#define INPUT_SIZE 256
#define FUNCTION_NAME __umoddi3
#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] = (((uint64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63);
input2[i] = ((((uint64_t)rand() << 36) | (uint64_t)rand()) >> (rand() & 63)) + 1LL;
}
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;
}