+++ /dev/null
-/* Copyright (C) 2013 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-extern void sincos (double, double *, double *);
-
-#define CALL_BENCH_FUNC(v, i, j, k) sincos ( variants[v].in[i].arg0, &j, &k);
-
-struct args
-{
- volatile double arg0;
-};
-
-struct args in0[12] =
-{
- { 0.9 },
- { 2.3 },
- { 3.7 },
- { 3.9 },
- { 4.0 },
- { 4.7 },
- { 5.9 },
-
- { 0x1.000000cf4a2a1p0 },
- { 0x1.0000010b239a8p0 },
- { 0x1.00000162a932ap0 },
- { 0x1.000002d452a11p0 },
- { 0x1.000005bc7d86cp0 }
-};
-
-struct args in1[12] =
-{
- { 0.93340582292648832662962377071381 },
- { 2.3328432680770916363144351635128 },
- { 3.7439477503636453548097051680088 },
- { 3.9225160069792437411706487182528 },
- { 4.0711651639931289992091478779912 },
- { 4.7858438478542097982426639646292 },
- { 5.9840767662578002727968851104379 },
-
- { 0x1.000000cf4a2a2p0 },
- { 0x1.0000010b239a9p0 },
- { 0x1.00000162a932bp0 },
- { 0x1.000002d452a10p0 },
- { 0x1.000005bc7d86dp0 }
-};
-
-struct _variants
-{
- const char *name;
- int count;
- struct args *in;
-};
-
-struct _variants variants[2] =
- {
- {"sincos()", 12, in0},
- {"sincos(768bits)", 12, in1},
- };
-
-#define NUM_VARIANTS 2
-#define NUM_SAMPLES(i) (variants[i].count)
-#define VARIANT(i) (variants[i].name)
-
-#define BENCH_FUNC(v, j) \
-({ \
- volatile double iptr; \
- volatile double iptr2; \
- CALL_BENCH_FUNC (v, j, iptr, iptr2); \
-})
-
-#define FUNCNAME "sincos"
-#include "bench-skeleton.c"
my $bench_func = "#define CALL_BENCH_FUNC(v, i) $func (";
+# Output variables. These include the return value as well as any pointers
+# that may get passed into the function, denoted by the <> around the type.
+my $outvars = "";
+
+if ($ret ne "void") {
+ $outvars = "static volatile $ret ret;\n";
+}
# Print the definitions and macros.
foreach $incl (@include_headers) {
$bench_func = "$bench_func,";
}
- $arg_struct = "$arg_struct volatile $arg arg$num;";
- $bench_func = "$bench_func variants[v].in[i].arg$num";
+ $_ = $arg;
+ if (/<(.*)\*>/) {
+ # Output variables. These have to be pointers, so dereference once by
+ # dropping one *.
+ $outvars = $outvars . "static $1 out$num;\n";
+ $bench_func = "$bench_func &out$num";
+ }
+ else {
+ $arg_struct = "$arg_struct volatile $arg arg$num;";
+ $bench_func = "$bench_func variants[v].in[i].arg$num";
+ }
+
$num = $num + 1;
}
print "#define VARIANT(v) FUNCNAME \"()\"\n"
}
-
+# Print the output variable definitions.
+print "$outvars\n";
# In some cases not storing a return value seems to result in the function call
# being optimized out.
if ($ret ne "void") {
- print "static volatile $ret ret;\n";
$getret = "ret = ";
}