Merge "Allow property += value in ld.config.txt"
diff --git a/benchmarks/Android.bp b/benchmarks/Android.bp
index 00c9560..c7c8a29 100644
--- a/benchmarks/Android.bp
+++ b/benchmarks/Android.bp
@@ -32,10 +32,10 @@
"pthread_benchmark.cpp",
"semaphore_benchmark.cpp",
"stdio_benchmark.cpp",
+ "stdlib_benchmark.cpp",
"string_benchmark.cpp",
"time_benchmark.cpp",
"unistd_benchmark.cpp",
- "stdlib_benchmark.cpp",
],
shared_libs: ["libtinyxml2"],
static_libs: [
diff --git a/benchmarks/README.md b/benchmarks/README.md
index 9cb130d..b3f0c3d 100644
--- a/benchmarks/README.md
+++ b/benchmarks/README.md
@@ -16,35 +16,23 @@
$ adb shell /data/nativetest/bionic-benchmarks/bionic-benchmarks
$ adb shell /data/nativetest64/bionic-benchmarks/bionic-benchmarks
-When operated without specifying an xml file, the default is to use the
-xml file called full.xml found in the directory `suites/` bound in the
-same directory as the bionic-benchmarks executable.
-
-To use a different xml file, use the `--bionic_xml=FILE.XML` option. By
-default, this option searches for the xml file in the `suites/`
-directory. If it doesn't exist in that directory then the file will be
-found as relative to the current directory. If the option specifies the
-full path to an xml file such as `/data/nativetest/suites/example.xml`,
-it will be used as is.
+When operated without specifying an xml file, the default is to run all
+of the benchmarks in alphabetical order.
You can use `--benchmark_filter=getpid` to just run benchmarks with "getpid"
in their name.
### Host benchmarks
-See the benchmarks/run-on-host.sh script. The default for host tests is
-to use the `host.xml` file in the suites directory instead of `full.xml`.
-The host benchmarks can be run with 32- or 64-bit bionic, or the host glibc.
-
+See the benchmarks/run-on-host.sh script. The host benchmarks can be run
+with 32 bit or 64 bit bionic, or the host glibc.
## Suites
Suites are stored in the `suites/` directory and can be chosen with the command line flag
-'--bionic_xml'. When operated without specifying an xml file, the default is to use the
-file called `full.xml` found in the directory `suites/` bound in the same directory
-as the bionic-benchmarks executable.
+'--bionic_xml'.
-To use a different xml file, use the `--bionic_xml=FILE.XML` option. By default, this
+To choose a specific xml file, use the `--bionic_xml=FILE.XML` option. By default, this
option searches for the xml file in the `suites/` directory. If it doesn't exist
in that directory then the file will be found as relative to the current
directory. If the option specifies the full path to an xml file such as
diff --git a/benchmarks/atomic_benchmark.cpp b/benchmarks/atomic_benchmark.cpp
index a584dce..dcea1c8 100644
--- a/benchmarks/atomic_benchmark.cpp
+++ b/benchmarks/atomic_benchmark.cpp
@@ -45,14 +45,14 @@
std::mutex mtx;
-void BM_empty(benchmark::State& state) {
+void BM_atomic_empty(benchmark::State& state) {
while (state.KeepRunning()) {
++counter;
}
}
-BIONIC_BENCHMARK(BM_empty);
+BIONIC_BENCHMARK(BM_atomic_empty);
-static void BM_load_relaxed(benchmark::State& state) {
+static void BM_atomic_load_relaxed(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
result += test_loc.load(std::memory_order_relaxed);
@@ -60,9 +60,9 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_load_relaxed);
+BIONIC_BENCHMARK(BM_atomic_load_relaxed);
-static void BM_load_acquire(benchmark::State& state) {
+static void BM_atomic_load_acquire(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
result += test_loc.load(std::memory_order_acquire);
@@ -70,27 +70,27 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_load_acquire);
+BIONIC_BENCHMARK(BM_atomic_load_acquire);
-static void BM_store_release(benchmark::State& state) {
+static void BM_atomic_store_release(benchmark::State& state) {
int i = counter;
while (state.KeepRunning()) {
test_loc.store(++i, std::memory_order_release);
++counter;
}
}
-BIONIC_BENCHMARK(BM_store_release);
+BIONIC_BENCHMARK(BM_atomic_store_release);
-static void BM_store_seq_cst(benchmark::State& state) {
+static void BM_atomic_store_seq_cst(benchmark::State& state) {
int i = counter;
while (state.KeepRunning()) {
test_loc.store(++i, std::memory_order_seq_cst);
++counter;
}
}
-BIONIC_BENCHMARK(BM_store_seq_cst);
+BIONIC_BENCHMARK(BM_atomic_store_seq_cst);
-static void BM_fetch_add_relaxed(benchmark::State& state) {
+static void BM_atomic_fetch_add_relaxed(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
result += test_loc.fetch_add(1, std::memory_order_relaxed);
@@ -98,9 +98,9 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_fetch_add_relaxed);
+BIONIC_BENCHMARK(BM_atomic_fetch_add_relaxed);
-static void BM_fetch_add_seq_cst(benchmark::State& state) {
+static void BM_atomic_fetch_add_seq_cst(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
result += test_loc.fetch_add(1, std::memory_order_seq_cst);
@@ -108,12 +108,12 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_fetch_add_seq_cst);
+BIONIC_BENCHMARK(BM_atomic_fetch_add_seq_cst);
// The fence benchmarks include a relaxed load to make it much harder to optimize away
// the fence.
-static void BM_acquire_fence(benchmark::State& state) {
+static void BM_atomic_acquire_fence(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
result += test_loc.load(std::memory_order_relaxed);
@@ -122,9 +122,9 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_acquire_fence);
+BIONIC_BENCHMARK(BM_atomic_acquire_fence);
-static void BM_seq_cst_fence(benchmark::State& state) {
+static void BM_atomic_seq_cst_fence(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
result += test_loc.load(std::memory_order_relaxed);
@@ -133,11 +133,11 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_seq_cst_fence);
+BIONIC_BENCHMARK(BM_atomic_seq_cst_fence);
// For comparison, also throw in a critical section version:
-static void BM_fetch_add_cs(benchmark::State& state) {
+static void BM_atomic_fetch_add_cs(benchmark::State& state) {
unsigned result = 0;
while (state.KeepRunning()) {
{
@@ -147,4 +147,4 @@
}
sink = result;
}
-BIONIC_BENCHMARK(BM_fetch_add_cs);
+BIONIC_BENCHMARK(BM_atomic_fetch_add_cs);
diff --git a/benchmarks/bionic_benchmarks.cpp b/benchmarks/bionic_benchmarks.cpp
index e61233c..d82c739 100644
--- a/benchmarks/bionic_benchmarks.cpp
+++ b/benchmarks/bionic_benchmarks.cpp
@@ -23,21 +23,55 @@
#include <mutex>
#include <sstream>
#include <string>
+#include <utility>
#include <vector>
#include <android-base/file.h>
+#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <benchmark/benchmark.h>
#include <tinyxml2.h>
#include "util.h"
-#if defined(__ANDROID__)
-static constexpr const char* kDefaultSuite="full.xml";
-#else
-static constexpr const char* kDefaultSuite="host.xml";
-#endif
+static const std::vector<int> kCommonSizes{
+ 8,
+ 64,
+ 512,
+ 1 * KB,
+ 8 * KB,
+ 16 * KB,
+ 32 * KB,
+ 64 * KB,
+ 128 * KB,
+};
-std::map<std::string, benchmark_func_t> g_str_to_func;
+static const std::vector<int> kSmallSizes{
+ // Increment by 1
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ // Increment by 8
+ 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144,
+ // Increment by 16
+ 160, 176, 192, 208, 224, 240, 256,
+};
+
+static const std::vector<int> kMediumSizes{
+ 512,
+ 1 * KB,
+ 8 * KB,
+ 16 * KB,
+ 32 * KB,
+ 64 * KB,
+ 128 * KB,
+};
+
+static const std::vector<int> kLargeSizes{
+ 256 * KB,
+ 512 * KB,
+ 1024 * KB,
+ 2048 * KB,
+};
+
+std::map<std::string, std::pair<benchmark_func_t, std::string>> g_str_to_func;
std::mutex g_map_lock;
@@ -177,13 +211,85 @@
reinterpret_cast<void(*) (benchmark::State&)>(func_to_bench)(state);
}
+static constexpr char kOnebufManualStr[] = "AT_ONEBUF_MANUAL_ALIGN_";
+static constexpr char kTwobufManualStr[] = "AT_TWOBUF_MANUAL_ALIGN1_";
+
+static bool ParseOnebufManualStr(std::string& arg, std::vector<int>* values) {
+ // The format of this is:
+ // AT_ONEBUF_MANUAL_ALIGN_XX_SIZE_YY
+ // Where:
+ // XX is the alignment
+ // YY is the size
+ int align;
+ int size;
+ if (sscanf(arg.c_str(), "AT_ONEBUF_MANUAL_ALIGN_%d_SIZE_%d" , &align, &size) != 2) {
+ return false;
+ }
+
+ if (align != 0 && (align & (align - 1)) != 0) {
+ return false;
+ }
+
+ values->push_back(static_cast<int>(size));
+ values->push_back(static_cast<int>(align));
+ return true;
+}
+
+static bool ParseTwobufManualStr(std::string& arg, std::vector<int>* values) {
+ // The format of this is:
+ // AT_TWOBUF_MANUAL_ALIGN1_XX_ALIGN2_YY_SIZE_ZZ
+ // Where:
+ // XX is the alignment of the first argument
+ // YY is the alignment of the second argument
+ // ZZ is the size
+ int align1;
+ int align2;
+ int size;
+ if (sscanf(arg.c_str(), "AT_TWOBUF_MANUAL_ALIGN1_%d_ALIGN2_%d_SIZE_%d" ,
+ &align1, &align2, &size) != 3) {
+ return false;
+ }
+
+ // Verify the alignments are powers of 2.
+ if ((align1 != 0 && (align1 & (align1 - 1)) != 0)
+ || (align2 != 0 && (align2 & (align2 - 1)) != 0)) {
+ return false;
+ }
+
+ values->push_back(static_cast<int>(size));
+ values->push_back(static_cast<int>(align1));
+ values->push_back(static_cast<int>(align2));
+ return true;
+}
+
args_vector_t* ResolveArgs(args_vector_t* to_populate, std::string args,
std::map<std::string, args_vector_t>& args_shorthand) {
- // args is either a space-separated list of ints or a macro name.
+ // args is either a space-separated list of ints, a macro name, or
+ // special free form macro.
// To ease formatting in XML files, args is left and right trimmed.
if (args_shorthand.count(args)) {
return &args_shorthand[args];
}
+ // Check for free form macro.
+ if (android::base::StartsWith(args, kOnebufManualStr)) {
+ std::vector<int> values;
+ if (!ParseOnebufManualStr(args, &values)) {
+ errx(1, "ERROR: Bad format of macro %s, should be AT_ONEBUF_MANUAL_ALIGN_XX_SIZE_YY",
+ args.c_str());
+ }
+ to_populate->push_back(std::move(values));
+ return to_populate;
+ } else if (android::base::StartsWith(args, kTwobufManualStr)) {
+ std::vector<int> values;
+ if (!ParseTwobufManualStr(args, &values)) {
+ errx(1,
+ "ERROR: Bad format of macro %s, should be AT_TWOBUF_MANUAL_ALIGN1_XX_ALIGNE2_YY_SIZE_ZZ",
+ args.c_str());
+ }
+ to_populate->push_back(std::move(values));
+ return to_populate;
+ }
+
to_populate->push_back(std::vector<int>());
std::stringstream sstream(args);
std::string argstr;
@@ -213,9 +319,10 @@
cpu_to_use = secondary_opts.cpu_to_lock;
}
+ benchmark_func_t benchmark_function = g_str_to_func.at(fn_name).first;
for (std::vector<int> args : (*run_args)) {
auto registration = benchmark::RegisterBenchmark(fn_name.c_str(), LockAndRun,
- g_str_to_func.at(fn_name),
+ benchmark_function,
cpu_to_use)->Args(args);
if (iterations_to_use > 0) {
registration->Iterations(iterations_to_use);
@@ -310,27 +417,66 @@
return 0;
}
-std::map<std::string, args_vector_t> GetShorthand() {
- std::map<std::string, args_vector_t> args_shorthand {
- {"AT_ALIGNED_TWOBUF", args_vector_t{ {8, 0, 0},
- {64, 0, 0},
- {512, 0, 0},
- {1 * KB, 0, 0},
- {8 * KB, 0, 0},
- {16 * KB, 0, 0},
- {32 * KB, 0, 0},
- {64 * KB, 0, 0} }},
- {"AT_ALIGNED_ONEBUF", args_vector_t{ {(8), 0},
- {(64), 0},
- {(512), 0},
- {(1*KB), 0},
- {(8*KB), 0},
- {(16*KB), 0},
- {(32*KB), 0},
- {(64*KB), 0}}},
+static void SetArgs(const std::vector<int>& sizes, args_vector_t* args) {
+ for (int size : sizes) {
+ args->push_back({size});
+ }
+}
- {"AT_COMMON_SIZES", args_vector_t{ {8}, {64}, {512}, {1*KB}, {8*KB}, {16*KB},
- {32*KB}, {64*KB}}},
+static void SetArgs(const std::vector<int>& sizes, int align, args_vector_t* args) {
+ for (int size : sizes) {
+ args->push_back({size, align});
+ }
+}
+
+
+static void SetArgs(const std::vector<int>& sizes, int align1, int align2, args_vector_t* args) {
+ for (int size : sizes) {
+ args->push_back({size, align1, align2});
+ }
+}
+
+static args_vector_t GetArgs(const std::vector<int>& sizes) {
+ args_vector_t args;
+ SetArgs(sizes, &args);
+ return args;
+}
+
+static args_vector_t GetArgs(const std::vector<int>& sizes, int align) {
+ args_vector_t args;
+ SetArgs(sizes, align, &args);
+ return args;
+}
+
+static args_vector_t GetArgs(const std::vector<int>& sizes, int align1, int align2) {
+ args_vector_t args;
+ SetArgs(sizes, align1, align2, &args);
+ return args;
+}
+
+std::map<std::string, args_vector_t> GetShorthand() {
+ std::vector<int> all_sizes(kSmallSizes);
+ all_sizes.insert(all_sizes.end(), kMediumSizes.begin(), kMediumSizes.end());
+ all_sizes.insert(all_sizes.end(), kLargeSizes.begin(), kLargeSizes.end());
+
+ std::map<std::string, args_vector_t> args_shorthand {
+ {"AT_COMMON_SIZES", GetArgs(kCommonSizes)},
+ {"AT_SMALL_SIZES", GetArgs(kSmallSizes)},
+ {"AT_MEDIUM_SIZES", GetArgs(kMediumSizes)},
+ {"AT_LARGE_SIZES", GetArgs(kLargeSizes)},
+ {"AT_ALL_SIZES", GetArgs(all_sizes)},
+
+ {"AT_ALIGNED_ONEBUF", GetArgs(kCommonSizes, 0)},
+ {"AT_ALIGNED_ONEBUF_SMALL", GetArgs(kSmallSizes, 0)},
+ {"AT_ALIGNED_ONEBUF_MEDIUM", GetArgs(kMediumSizes, 0)},
+ {"AT_ALIGNED_ONEBUF_LARGE", GetArgs(kLargeSizes, 0)},
+ {"AT_ALIGNED_ONEBUF_ALL", GetArgs(all_sizes, 0)},
+
+ {"AT_ALIGNED_TWOBUF", GetArgs(kCommonSizes, 0, 0)},
+ {"AT_ALIGNED_TWOBUF_SMALL", GetArgs(kSmallSizes, 0, 0)},
+ {"AT_ALIGNED_TWOBUF_MEDIUM", GetArgs(kMediumSizes, 0, 0)},
+ {"AT_ALIGNED_TWOBUF_LARGE", GetArgs(kLargeSizes, 0, 0)},
+ {"AT_ALIGNED_TWOBUF_ALL", GetArgs(all_sizes, 0, 0)},
// Do not exceed 512. that is about the largest number of properties
// that can be created with the current property area size.
@@ -338,32 +484,26 @@
{"MATH_COMMON", args_vector_t{ {0}, {1}, {2}, {3} }}
};
- for (int i = 1; i < 15; i++) {
- int align = pow(2, i);
- std::stringstream sstream;
- sstream << "AT_" << align << "_ALIGN_TWOBUF";
- args_shorthand.emplace(sstream.str(),
- args_vector_t{ {8, align, align},
- {64, align, align},
- {512, align, align},
- {1 * KB, align, align},
- {8 * KB, align, align},
- {16 * KB, align, align},
- {32 * KB, align, align},
- {64 * KB, align, align} });
- sstream.str("");
- sstream << "AT_" << align << "_ALIGN_ONEBUF";
- args_shorthand.emplace(sstream.str(),
- args_vector_t{ {(8), align},
- {(64), align},
- {(512), align},
- {(1*KB), align},
- {(8*KB), align},
- {(16*KB), align},
- {(32*KB), align},
- {(64*KB), align} });
- sstream.str("");
+
+ args_vector_t args_onebuf;
+ args_vector_t args_twobuf;
+ for (int size : all_sizes) {
+ args_onebuf.push_back({size, 0});
+ args_twobuf.push_back({size, 0, 0});
+ // Skip alignments on zero sizes.
+ if (size == 0) {
+ continue;
+ }
+ for (int align1 = 1; align1 <= 32; align1 <<= 1) {
+ args_onebuf.push_back({size, align1});
+ for (int align2 = 1; align2 <= 32; align2 <<= 1) {
+ args_twobuf.push_back({size, align1, align2});
+ }
+ }
}
+ args_shorthand.emplace("AT_MANY_ALIGNED_ONEBUF", args_onebuf);
+ args_shorthand.emplace("AT_MANY_ALIGNED_TWOBUF", args_twobuf);
+
return args_shorthand;
}
@@ -372,6 +512,33 @@
return stat(file.c_str(), &st) != -1 && S_ISREG(st.st_mode);
}
+void RegisterAllBenchmarks(const bench_opts_t& opts,
+ std::map<std::string, args_vector_t>& args_shorthand) {
+ // Add the property tests at the end since they might cause segfaults in
+ // tests running afterwards (b/62197783).
+ std::vector<std::string> prop_tests;
+
+ for (auto& entry : g_str_to_func) {
+ if (android::base::StartsWith(entry.first, "BM_property_")) {
+ prop_tests.push_back(entry.first);
+ } else {
+ auto& function_info = entry.second;
+ args_vector_t arg_vector;
+ args_vector_t* run_args = ResolveArgs(&arg_vector, function_info.second,
+ args_shorthand);
+ RegisterGoogleBenchmarks(bench_opts_t(), opts, entry.first, run_args);
+ }
+ }
+
+ for (auto& prop_name : prop_tests) {
+ auto& function_info = g_str_to_func.at(prop_name);
+ args_vector_t arg_vector;
+ args_vector_t* run_args = ResolveArgs(&arg_vector, function_info.second,
+ args_shorthand);
+ RegisterGoogleBenchmarks(bench_opts_t(), opts, prop_name, run_args);
+ }
+}
+
int main(int argc, char** argv) {
std::map<std::string, args_vector_t> args_shorthand = GetShorthand();
bench_opts_t opts = ParseOpts(argc, argv);
@@ -381,12 +548,7 @@
if (opts.xmlpath.empty()) {
// Don't add the default xml file if a user is specifying the tests to run.
if (opts.extra_benchmarks.empty()) {
- // Try and use the default.
- opts.xmlpath = android::base::GetExecutableDirectory() + "/suites/" + kDefaultSuite;
- if (!FileExists(opts.xmlpath)) {
- printf("Cannot find default xml file %s\n", kDefaultSuite);
- return 1;
- }
+ RegisterAllBenchmarks(opts, args_shorthand);
}
} else if (!FileExists(opts.xmlpath)) {
// See if this is a file in the suites directory.
diff --git a/benchmarks/math_benchmark.cpp b/benchmarks/math_benchmark.cpp
index 4d9d3cb..2e54202 100644
--- a/benchmarks/math_benchmark.cpp
+++ b/benchmarks/math_benchmark.cpp
@@ -67,7 +67,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isfinite_macro);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isfinite_macro, "MATH_COMMON");
static void BM_math_isfinite(benchmark::State& state) {
d = 0.0;
@@ -77,7 +77,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isfinite);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isfinite, "MATH_COMMON");
static void BM_math_isinf_macro(benchmark::State& state) {
d = 0.0;
@@ -87,7 +87,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isinf_macro);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isinf_macro, "MATH_COMMON");
static void BM_math_isinf(benchmark::State& state) {
d = 0.0;
@@ -97,7 +97,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isinf);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isinf, "MATH_COMMON");
static void BM_math_isnan_macro(benchmark::State& state) {
d = 0.0;
@@ -107,7 +107,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isnan_macro);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isnan_macro, "MATH_COMMON");
static void BM_math_isnan(benchmark::State& state) {
d = 0.0;
@@ -117,7 +117,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isnan);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isnan, "MATH_COMMON");
static void BM_math_isnormal_macro(benchmark::State& state) {
d = 0.0;
@@ -127,7 +127,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isnormal_macro);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isnormal_macro, "MATH_COMMON");
static void BM_math_isnormal(benchmark::State& state) {
d = 0.0;
@@ -137,7 +137,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_isnormal);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_isnormal, "MATH_COMMON");
static void BM_math_sin_fast(benchmark::State& state) {
d = 1.0;
@@ -179,7 +179,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_fpclassify);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_fpclassify, "MATH_COMMON");
static void BM_math_signbit_macro(benchmark::State& state) {
d = 0.0;
@@ -189,7 +189,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_signbit_macro);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_signbit_macro, "MATH_COMMON");
static void BM_math_signbit(benchmark::State& state) {
d = 0.0;
@@ -199,7 +199,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_signbit);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_signbit, "MATH_COMMON");
static void BM_math_fabs_macro(benchmark::State& state) {
d = 0.0;
@@ -209,7 +209,7 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_fabs_macro);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_fabs_macro, "MATH_COMMON");
static void BM_math_fabs(benchmark::State& state) {
d = 0.0;
@@ -219,4 +219,4 @@
}
SetLabel(state);
}
-BIONIC_BENCHMARK(BM_math_fabs);
+BIONIC_BENCHMARK_WITH_ARG(BM_math_fabs, "MATH_COMMON");
diff --git a/benchmarks/property_benchmark.cpp b/benchmarks/property_benchmark.cpp
index a099494..5760bf1 100644
--- a/benchmarks/property_benchmark.cpp
+++ b/benchmarks/property_benchmark.cpp
@@ -141,7 +141,7 @@
__system_property_get(pa.names[random() % nprops], value);
}
}
-BIONIC_BENCHMARK(BM_property_get);
+BIONIC_BENCHMARK_WITH_ARG(BM_property_get, "NUM_PROPS");
static void BM_property_find(benchmark::State& state) {
const size_t nprops = state.range(0);
@@ -153,7 +153,7 @@
__system_property_find(pa.names[random() % nprops]);
}
}
-BIONIC_BENCHMARK(BM_property_find);
+BIONIC_BENCHMARK_WITH_ARG(BM_property_find, "NUM_PROPS");
static void BM_property_read(benchmark::State& state) {
const size_t nprops = state.range(0);
@@ -176,7 +176,7 @@
delete[] pinfo;
}
-BIONIC_BENCHMARK(BM_property_read);
+BIONIC_BENCHMARK_WITH_ARG(BM_property_read, "NUM_PROPS");
static void BM_property_serial(benchmark::State& state) {
const size_t nprops = state.range(0);
@@ -197,6 +197,6 @@
delete[] pinfo;
}
-BIONIC_BENCHMARK(BM_property_serial);
+BIONIC_BENCHMARK_WITH_ARG(BM_property_serial, "NUM_PROPS");
#endif // __BIONIC__
diff --git a/benchmarks/stdio_benchmark.cpp b/benchmarks/stdio_benchmark.cpp
index 76e9ddb..d547fed 100644
--- a/benchmarks/stdio_benchmark.cpp
+++ b/benchmarks/stdio_benchmark.cpp
@@ -59,22 +59,22 @@
void BM_stdio_fread(benchmark::State& state) {
ReadWriteTest(state, fread, true);
}
-BIONIC_BENCHMARK(BM_stdio_fread);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdio_fread, "AT_COMMON_SIZES");
void BM_stdio_fwrite(benchmark::State& state) {
ReadWriteTest(state, fwrite, true);
}
-BIONIC_BENCHMARK(BM_stdio_fwrite);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdio_fwrite, "AT_COMMON_SIZES");
void BM_stdio_fread_unbuffered(benchmark::State& state) {
ReadWriteTest(state, fread, false);
}
-BIONIC_BENCHMARK(BM_stdio_fread_unbuffered);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdio_fread_unbuffered, "AT_COMMON_SIZES");
void BM_stdio_fwrite_unbuffered(benchmark::State& state) {
ReadWriteTest(state, fwrite, false);
}
-BIONIC_BENCHMARK(BM_stdio_fwrite_unbuffered);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdio_fwrite_unbuffered, "AT_COMMON_SIZES");
#if !defined(__GLIBC__)
static void FopenFgetlnFclose(benchmark::State& state, bool no_locking) {
@@ -165,12 +165,12 @@
static void BM_stdio_fopen_fgetc_fclose_locking(benchmark::State& state) {
FopenFgetcFclose(state, false);
}
-BIONIC_BENCHMARK(BM_stdio_fopen_fgetc_fclose_locking);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdio_fopen_fgetc_fclose_locking, "1024");
void BM_stdio_fopen_fgetc_fclose_no_locking(benchmark::State& state) {
FopenFgetcFclose(state, true);
}
-BIONIC_BENCHMARK(BM_stdio_fopen_fgetc_fclose_no_locking);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdio_fopen_fgetc_fclose_no_locking, "1024");
static void BM_stdio_printf_literal(benchmark::State& state) {
while (state.KeepRunning()) {
diff --git a/benchmarks/stdlib_benchmark.cpp b/benchmarks/stdlib_benchmark.cpp
index eb325ab..0bee683 100644
--- a/benchmarks/stdlib_benchmark.cpp
+++ b/benchmarks/stdlib_benchmark.cpp
@@ -33,7 +33,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_stdlib_malloc_free);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_malloc_free, "AT_COMMON_SIZES");
static void BM_stdlib_mbstowcs(benchmark::State& state) {
const size_t buf_alignment = state.range(0);
@@ -76,7 +76,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(500000));
}
-BIONIC_BENCHMARK(BM_stdlib_mbstowcs);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_mbstowcs, "0 0");
static void BM_stdlib_mbrtowc(benchmark::State& state) {
const size_t buf_alignment = state.range(0);
@@ -117,4 +117,4 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(500000));
}
-BIONIC_BENCHMARK(BM_stdlib_mbrtowc);
+BIONIC_BENCHMARK_WITH_ARG(BM_stdlib_mbrtowc, "0");
diff --git a/benchmarks/string_benchmark.cpp b/benchmarks/string_benchmark.cpp
index eb04c93..38122f2 100644
--- a/benchmarks/string_benchmark.cpp
+++ b/benchmarks/string_benchmark.cpp
@@ -38,7 +38,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_memcmp);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_memcmp, "AT_ALIGNED_TWOBUF");
static void BM_string_memcpy(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -56,7 +56,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_memcpy);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_memcpy, "AT_ALIGNED_TWOBUF");
static void BM_string_memmove_non_overlapping(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -74,7 +74,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_memmove_non_overlapping);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_memmove_non_overlapping, "AT_ALIGNED_TWOBUF");
static void BM_string_memmove_overlap_dst_before_src(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -89,7 +89,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_memmove_overlap_dst_before_src);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_memmove_overlap_dst_before_src, "AT_ALIGNED_ONEBUF");
static void BM_string_memmove_overlap_src_before_dst(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -104,7 +104,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_memmove_overlap_src_before_dst);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_memmove_overlap_src_before_dst, "AT_ALIGNED_ONEBUF");
static void BM_string_memset(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -119,7 +119,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_memset);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_memset, "AT_ALIGNED_ONEBUF");
static void BM_string_strlen(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -136,7 +136,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strlen);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strlen, "AT_ALIGNED_ONEBUF");
static void BM_string_strcat_copy_only(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -159,7 +159,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strcat_copy_only);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strcat_copy_only, "AT_ALIGNED_TWOBUF");
static void BM_string_strcat_seek_only(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -180,13 +180,18 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strcat_seek_only);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strcat_seek_only, "AT_ALIGNED_TWOBUF");
static void BM_string_strcat_half_copy_half_seek(benchmark::State& state) {
const size_t nbytes = state.range(0);
const size_t src_alignment = state.range(1);
const size_t dst_alignment = state.range(2);
+ // Skip sizes that don't make sense.
+ if ((nbytes / 2) == 0) {
+ return;
+ }
+
std::vector<char> src;
std::vector<char> dst;
char* src_aligned = GetAlignedPtrFilled(&src, src_alignment, nbytes / 2, 'x');
@@ -201,7 +206,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strcat_half_copy_half_seek);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strcat_half_copy_half_seek, "AT_ALIGNED_TWOBUF");
static void BM_string_strcpy(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -220,7 +225,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strcpy);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strcpy, "AT_ALIGNED_TWOBUF");
static void BM_string_strcmp(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -241,7 +246,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strcmp);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strcmp, "AT_ALIGNED_TWOBUF");
static void BM_string_strstr(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -270,7 +275,7 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strstr);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strstr, "AT_ALIGNED_TWOBUF");
static void BM_string_strchr(benchmark::State& state) {
const size_t nbytes = state.range(0);
@@ -288,4 +293,4 @@
state.SetBytesProcessed(uint64_t(state.iterations()) * uint64_t(nbytes));
}
-BIONIC_BENCHMARK(BM_string_strchr);
+BIONIC_BENCHMARK_WITH_ARG(BM_string_strchr, "AT_ALIGNED_ONEBUF");
diff --git a/benchmarks/suites/example.xml b/benchmarks/suites/example.xml
new file mode 100644
index 0000000..51dd2ab
--- /dev/null
+++ b/benchmarks/suites/example.xml
@@ -0,0 +1,8 @@
+<!--
+ Small example file.
+-->
+<fn>
+ <name>BM_stdio_fread</name>
+ <iterations>20</iterations>
+ <args>AT_COMMON_SIZES</args>
+</fn>
diff --git a/benchmarks/suites/full.xml b/benchmarks/suites/full.xml
deleted file mode 100644
index 9bfd6ff..0000000
--- a/benchmarks/suites/full.xml
+++ /dev/null
@@ -1,323 +0,0 @@
-<fn>
- <name>BM_empty</name>
-</fn>
-<fn>
- <name>BM_load_relaxed</name>
-</fn>
-<fn>
- <name>BM_load_acquire</name>
-</fn>
-<fn>
- <name>BM_store_release</name>
-</fn>
-<fn>
- <name>BM_store_seq_cst</name>
-</fn>
-<fn>
- <name>BM_fetch_add_relaxed</name>
-</fn>
-<fn>
- <name>BM_fetch_add_seq_cst</name>
-</fn>
-<fn>
- <name>BM_acquire_fence</name>
-</fn>
-<fn>
- <name>BM_seq_cst_fence</name>
-</fn>
-<fn>
- <name>BM_fetch_add_cs</name>
-</fn>
-<fn>
- <name>BM_math_sqrt</name>
-</fn>
-<fn>
- <name>BM_math_log10</name>
-</fn>
-<fn>
- <name>BM_math_logb</name>
-</fn>
-<fn>
- <name>BM_math_isfinite_macro</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isfinite</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isinf_macro</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isinf</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isnan_macro</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isnan</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isnormal_macro</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_isnormal</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_sin_fast</name>
-</fn>
-<fn>
- <name>BM_math_sin_feupdateenv</name>
-</fn>
-<fn>
- <name>BM_math_sin_fesetenv</name>
-</fn>
-<fn>
- <name>BM_math_fpclassify</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_signbit_macro</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_signbit</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_fabs_macro</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_math_fabs</name>
- <args>MATH_COMMON</args>
-</fn>
-<fn>
- <name>BM_pthread_self</name>
-</fn>
-<fn>
- <name>BM_pthread_getspecific</name>
-</fn>
-<fn>
- <name>BM_pthread_setspecific</name>
-</fn>
-<fn>
- <name>BM_pthread_once</name>
-</fn>
-<fn>
- <name>BM_pthread_mutex_lock</name>
-</fn>
-<fn>
- <name>BM_pthread_mutex_lock_ERRORCHECK</name>
-</fn>
-<fn>
- <name>BM_pthread_mutex_lock_RECURSIVE</name>
-</fn>
-<fn>
- <name>BM_pthread_rwlock_read</name>
-</fn>
-<fn>
- <name>BM_pthread_rwlock_write</name>
-</fn>
-<fn>
- <name>BM_pthread_create</name>
-</fn>
-<fn>
- <name>BM_pthread_create_and_run</name>
-</fn>
-<fn>
- <name>BM_pthread_exit_and_join</name>
-</fn>
-<fn>
- <name>BM_pthread_key_create</name>
-</fn>
-<fn>
- <name>BM_pthread_key_delete</name>
-</fn>
-<fn>
- <name>BM_semaphore_sem_getvalue</name>
-</fn>
-<fn>
- <name>BM_semaphore_sem_wait_sem_post</name>
-</fn>
-<fn>
- <name>BM_stdio_fread</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fwrite</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fread_unbuffered</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fwrite_unbuffered</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgetln_fclose_locking</name>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgetln_fclose_no_locking</name>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgets_fclose_locking</name>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgets_fclose_no_locking</name>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgetc_fclose_locking</name>
- <args>1024</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgetc_fclose_no_locking</name>
- <args>1024</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_getline_fclose_locking</name>
-</fn>
-<fn>
- <name>BM_stdio_fopen_getline_fclose_no_locking</name>
-</fn>
-<fn>
- <name>BM_stdio_printf_literal</name>
-</fn>
-<fn>
- <name>BM_stdio_printf_s</name>
-</fn>
-<fn>
- <name>BM_stdio_printf_d</name>
-</fn>
-<fn>
- <name>BM_stdio_printf_1$s</name>
-</fn>
-<fn>
- <name>BM_string_memcmp</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memcpy</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memmove_non_overlapping</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memmove_overlap_dst_before_src</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_memmove_overlap_src_before_dst</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_memset</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcat_copy_only</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcat_seek_only</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcat_half_copy_half_seek</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcpy</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcmp</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strstr</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strchr</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_time_clock_gettime</name>
-</fn>
-<fn>
- <name>BM_time_clock_gettime_syscall</name>
-</fn>
-<fn>
- <name>BM_time_gettimeofday</name>
-</fn>
-<fn>
- <name>BM_time_gettimeofday_syscall</name>
-</fn>
-<fn>
- <name>BM_time_time</name>
-</fn>
-<fn>
- <name>BM_time_localtime</name>
-</fn>
-<fn>
- <name>BM_time_localtime_r</name>
-</fn>
-<fn>
- <name>BM_unistd_getpid</name>
-</fn>
-<fn>
- <name>BM_unistd_getpid_syscall</name>
-</fn>
-<fn>
- <name>BM_unistd_gettid</name>
-</fn>
-<fn>
- <name>BM_unistd_gettid_syscall</name>
-</fn>
-<fn>
- <name>BM_stdlib_malloc_free</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_stdlib_mbstowcs</name>
- <args>0 0</args>
-</fn>
-<fn>
- <name>BM_stdlib_mbrtowc</name>
- <args>0</args>
-</fn>
-<!--
- Put the property tests at the end since they might cause segfaults in
- tests running afterwards (b/62197783).
--->
-<fn>
- <name>BM_property_get</name>
- <args>NUM_PROPS</args>
-</fn>
-<fn>
- <name>BM_property_find</name>
- <args>NUM_PROPS</args>
-</fn>
-<fn>
- <name>BM_property_read</name>
- <args>NUM_PROPS</args>
-</fn>
-<fn>
- <name>BM_property_serial</name>
- <args>NUM_PROPS</args>
-</fn>
diff --git a/benchmarks/suites/host.xml b/benchmarks/suites/host.xml
deleted file mode 100644
index 05769e9..0000000
--- a/benchmarks/suites/host.xml
+++ /dev/null
@@ -1,274 +0,0 @@
-<fn>
- <name>BM_empty</name>
-</fn>
-<fn>
- <name>BM_load_relaxed</name>
-</fn>
-<fn>
- <name>BM_load_acquire</name>
-</fn>
-<fn>
- <name>BM_store_release</name>
-</fn>
-<fn>
- <name>BM_store_seq_cst</name>
-</fn>
-<fn>
- <name>BM_fetch_add_relaxed</name>
-</fn>
-<fn>
- <name>BM_fetch_add_seq_cst</name>
-</fn>
-<fn>
- <name>BM_acquire_fence</name>
-</fn>
-<fn>
- <name>BM_seq_cst_fence</name>
-</fn>
-<fn>
- <name>BM_fetch_add_cs</name>
-</fn>
-<fn>
- <name>BM_math_sqrt</name>
-</fn>
-<fn>
- <name>BM_math_log10</name>
-</fn>
-<fn>
- <name>BM_math_logb</name>
-</fn>
-<fn>
- <name>BM_math_isfinite_macro</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_isfinite</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_isinf_macro</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_isinf</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_isnan_macro</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_isnan</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_isnormal_macro</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_sin_fast</name>
-</fn>
-<fn>
- <name>BM_math_sin_feupdateenv</name>
-</fn>
-<fn>
- <name>BM_math_sin_fesetenv</name>
-</fn>
-<fn>
- <name>BM_math_fpclassify</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_signbit_macro</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_signbit</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_fabs_macro</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_math_fabs</name>
- <args>0</args>
-</fn>
-<fn>
- <name>BM_pthread_self</name>
-</fn>
-<fn>
- <name>BM_pthread_getspecific</name>
-</fn>
-<fn>
- <name>BM_pthread_setspecific</name>
-</fn>
-<fn>
- <name>BM_pthread_once</name>
-</fn>
-<fn>
- <name>BM_pthread_mutex_lock</name>
-</fn>
-<fn>
- <name>BM_pthread_mutex_lock_ERRORCHECK</name>
-</fn>
-<fn>
- <name>BM_pthread_mutex_lock_RECURSIVE</name>
-</fn>
-<fn>
- <name>BM_pthread_rwlock_read</name>
-</fn>
-<fn>
- <name>BM_pthread_rwlock_write</name>
-</fn>
-<fn>
- <name>BM_pthread_create</name>
-</fn>
-<fn>
- <name>BM_pthread_create_and_run</name>
-</fn>
-<fn>
- <name>BM_pthread_exit_and_join</name>
-</fn>
-<fn>
- <name>BM_pthread_key_create</name>
-</fn>
-<fn>
- <name>BM_pthread_key_delete</name>
-</fn>
-<fn>
- <name>BM_semaphore_sem_getvalue</name>
-</fn>
-<fn>
- <name>BM_semaphore_sem_wait_sem_post</name>
-</fn>
-<fn>
- <name>BM_stdio_fread</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fwrite</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fread_unbuffered</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fwrite_unbuffered</name>
- <args>AT_COMMON_SIZES</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgets_fclose_locking</name>
- <args>1024</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgets_fclose_no_locking</name>
- <args>1024</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgetc_fclose_locking</name>
- <args>1024</args>
-</fn>
-<fn>
- <name>BM_stdio_fopen_fgetc_fclose_no_locking</name>
- <args>1024</args>
-</fn>
-<fn>
- <name>BM_string_memcmp</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memcpy</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memmove_non_overlapping</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memmove_overlap_dst_before_src</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_memmove_overlap_src_before_dst</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_memset</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcat_copy_only</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcat_seek_only</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcat_half_copy_half_seek</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcpy</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strcmp</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strstr</name>
- <args>AT_ALIGNED_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strchr</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_time_clock_gettime</name>
-</fn>
-<fn>
- <name>BM_time_clock_gettime_syscall</name>
-</fn>
-<fn>
- <name>BM_time_gettimeofday</name>
-</fn>
-<fn>
- <name>BM_time_gettimeofday_syscall</name>
-</fn>
-<fn>
- <name>BM_time_time</name>
-</fn>
-<fn>
- <name>BM_time_localtime</name>
-</fn>
-<fn>
- <name>BM_time_localtime_r</name>
-</fn>
-<fn>
- <name>BM_unistd_getpid</name>
-</fn>
-<fn>
- <name>BM_unistd_getpid_syscall</name>
-</fn>
-<fn>
- <name>BM_unistd_gettid_syscall</name>
-</fn>
-<fn>
- <name>BM_stdlib_malloc_free</name>
- <args>AT_ALIGNED_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_stdlib_mbstowcs</name>
- <args>0 0</args>
-</fn>
-<fn>
- <name>BM_stdlib_mbrtowc</name>
- <args>0</args>
-</fn>
diff --git a/benchmarks/suites/string.xml b/benchmarks/suites/string.xml
new file mode 100644
index 0000000..58278c8
--- /dev/null
+++ b/benchmarks/suites/string.xml
@@ -0,0 +1,52 @@
+<fn>
+ <name>BM_string_memcmp</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memcpy</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memmove_non_overlapping</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memmove_overlap_dst_before_src</name>
+ <args>AT_MANY_ALIGNED_ONEBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memmove_overlap_src_before_dst</name>
+ <args>AT_MANY_ALIGNED_ONEBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memset</name>
+ <args>AT_MANY_ALIGNED_ONEBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strcat_copy_only</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strcat_half_copy_half_seek</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strcat_seek_only</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strchr</name>
+ <args>AT_MANY_ALIGNED_ONEBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strcmp</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strcpy</name>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_strlen</name>
+ <args>AT_MANY_ALIGNED_ONEBUF</args>
+</fn>
diff --git a/benchmarks/test_suites/test_alignment.xml b/benchmarks/test_suites/test_alignment.xml
deleted file mode 100644
index 20df320..0000000
--- a/benchmarks/test_suites/test_alignment.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<fn>
- <name>BM_string_memcmp</name>
- <iterations>1</iterations>
- <args>AT_2_ALIGN_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memcmp</name>
- <iterations>1</iterations>
- <args>AT_4_ALIGN_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memcmp</name>
- <iterations>1</iterations>
- <args>AT_16_ALIGN_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memcmp</name>
- <iterations>1</iterations>
- <args>AT_512_ALIGN_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_memcmp</name>
- <iterations>1</iterations>
- <args>AT_2048_ALIGN_TWOBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <iterations>1</iterations>
- <args>AT_2_ALIGN_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <iterations>1</iterations>
- <args>AT_4_ALIGN_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <iterations>1</iterations>
- <args>AT_16_ALIGN_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <iterations>1</iterations>
- <args>AT_512_ALIGN_ONEBUF</args>
-</fn>
-<fn>
- <name>BM_string_strlen</name>
- <iterations>1</iterations>
- <args>AT_2048_ALIGN_ONEBUF</args>
-</fn>
diff --git a/benchmarks/test_suites/test_alignment_onebuf.xml b/benchmarks/test_suites/test_alignment_onebuf.xml
new file mode 100644
index 0000000..4d7f14f
--- /dev/null
+++ b/benchmarks/test_suites/test_alignment_onebuf.xml
@@ -0,0 +1,30 @@
+<fn>
+ <name>BM_string_strlen</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_ONEBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memset</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_ONEBUF_SMALL</args>
+</fn>
+<fn>
+ <name>BM_string_strlen</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_ONEBUF_MEDIUM</args>
+</fn>
+<fn>
+ <name>BM_string_memset</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_ONEBUF_LARGE</args>
+</fn>
+<fn>
+ <name>BM_string_strlen</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_ONEBUF_ALL</args>
+</fn>
+<fn>
+ <name>BM_string_memset</name>
+ <iterations>1</iterations>
+ <args>AT_MANY_ALIGNED_ONEBUF</args>
+</fn>
diff --git a/benchmarks/test_suites/test_alignment_onebuf_manual.xml b/benchmarks/test_suites/test_alignment_onebuf_manual.xml
new file mode 100644
index 0000000..97ed5dd
--- /dev/null
+++ b/benchmarks/test_suites/test_alignment_onebuf_manual.xml
@@ -0,0 +1,20 @@
+<fn>
+ <name>BM_string_strlen</name>
+ <iterations>1</iterations>
+ <args>AT_ONEBUF_MANUAL_ALIGN_0_SIZE_115</args>
+</fn>
+<fn>
+ <name>BM_string_memset</name>
+ <iterations>1</iterations>
+ <args>AT_ONEBUF_MANUAL_ALIGN_1_SIZE_1024</args>
+</fn>
+<fn>
+ <name>BM_string_strlen</name>
+ <iterations>1</iterations>
+ <args>AT_ONEBUF_MANUAL_ALIGN_4_SIZE_2048</args>
+</fn>
+<fn>
+ <name>BM_string_memset</name>
+ <iterations>1</iterations>
+ <args>AT_ONEBUF_MANUAL_ALIGN_32_SIZE_4000</args>
+</fn>
diff --git a/benchmarks/test_suites/test_alignment_twobuf.xml b/benchmarks/test_suites/test_alignment_twobuf.xml
new file mode 100644
index 0000000..e29401f
--- /dev/null
+++ b/benchmarks/test_suites/test_alignment_twobuf.xml
@@ -0,0 +1,30 @@
+<fn>
+ <name>BM_string_strcpy</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_TWOBUF</args>
+</fn>
+<fn>
+ <name>BM_string_memcpy</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_TWOBUF_SMALL</args>
+</fn>
+<fn>
+ <name>BM_string_strcpy</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_TWOBUF_MEDIUM</args>
+</fn>
+<fn>
+ <name>BM_string_memcpy</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_TWOBUF_LARGE</args>
+</fn>
+<fn>
+ <name>BM_string_strcpy</name>
+ <iterations>1</iterations>
+ <args>AT_ALIGNED_TWOBUF_ALL</args>
+</fn>
+<fn>
+ <name>BM_string_memcpy</name>
+ <iterations>1</iterations>
+ <args>AT_MANY_ALIGNED_TWOBUF</args>
+</fn>
diff --git a/benchmarks/test_suites/test_alignment_twobuf_manual.xml b/benchmarks/test_suites/test_alignment_twobuf_manual.xml
new file mode 100644
index 0000000..1d49015
--- /dev/null
+++ b/benchmarks/test_suites/test_alignment_twobuf_manual.xml
@@ -0,0 +1,20 @@
+<fn>
+ <name>BM_string_strcpy</name>
+ <iterations>1</iterations>
+ <args>AT_TWOBUF_MANUAL_ALIGN1_0_ALIGN2_0_SIZE_12345</args>
+</fn>
+<fn>
+ <name>BM_string_memcpy</name>
+ <iterations>1</iterations>
+ <args>AT_TWOBUF_MANUAL_ALIGN1_2_ALIGN2_1_SIZE_10248</args>
+</fn>
+<fn>
+ <name>BM_string_strcpy</name>
+ <iterations>1</iterations>
+ <args>AT_TWOBUF_MANUAL_ALIGN1_4_ALIGN2_8_SIZE_17820</args>
+</fn>
+<fn>
+ <name>BM_string_memcpy</name>
+ <iterations>1</iterations>
+ <args>AT_TWOBUF_MANUAL_ALIGN1_16_ALIGN2_32_SIZE_20000</args>
+</fn>
diff --git a/benchmarks/test_suites/test_from_each.xml b/benchmarks/test_suites/test_from_each.xml
index 0118365..bad18e7 100644
--- a/benchmarks/test_suites/test_from_each.xml
+++ b/benchmarks/test_suites/test_from_each.xml
@@ -1,5 +1,5 @@
<fn>
- <name>BM_empty</name>
+ <name>BM_atomic_empty</name>
</fn>
<fn>
<name>BM_math_sqrt</name>
diff --git a/benchmarks/test_suites/test_size.xml b/benchmarks/test_suites/test_size.xml
new file mode 100644
index 0000000..4ff3b51
--- /dev/null
+++ b/benchmarks/test_suites/test_size.xml
@@ -0,0 +1,25 @@
+<fn>
+ <name>BM_stdio_fwrite</name>
+ <iterations>1</iterations>
+ <args>AT_COMMON_SIZES</args>
+</fn>
+<fn>
+ <name>BM_stdio_fread</name>
+ <iterations>1</iterations>
+ <args>AT_SMALL_SIZES</args>
+</fn>
+<fn>
+ <name>BM_stdio_fwrite</name>
+ <iterations>1</iterations>
+ <args>AT_MEDIUM_SIZES</args>
+</fn>
+<fn>
+ <name>BM_stdio_fread</name>
+ <iterations>1</iterations>
+ <args>AT_LARGE_SIZES</args>
+</fn>
+<fn>
+ <name>BM_stdio_fwrite</name>
+ <iterations>1</iterations>
+ <args>AT_ALL_SIZES</args>
+</fn>
diff --git a/benchmarks/tests/interface_test.cpp b/benchmarks/tests/interface_test.cpp
index 6987320..33e506e 100644
--- a/benchmarks/tests/interface_test.cpp
+++ b/benchmarks/tests/interface_test.cpp
@@ -164,92 +164,100 @@
Verify(expected, 0, std::vector<const char*>{"--help"}, false);
}
-TEST_F(SystemTests, full_suite) {
+TEST_F(SystemTests, all_benchmarks) {
std::string expected =
- "BM_empty/iterations:1\n"
- "BM_load_relaxed/iterations:1\n"
- "BM_load_acquire/iterations:1\n"
- "BM_store_release/iterations:1\n"
- "BM_store_seq_cst/iterations:1\n"
- "BM_fetch_add_relaxed/iterations:1\n"
- "BM_fetch_add_seq_cst/iterations:1\n"
- "BM_acquire_fence/iterations:1\n"
- "BM_seq_cst_fence/iterations:1\n"
- "BM_fetch_add_cs/iterations:1\n"
- "BM_math_sqrt/iterations:1\n"
- "BM_math_log10/iterations:1\n"
- "BM_math_logb/iterations:1\n"
- "BM_math_isfinite_macro/0/iterations:1\n"
- "BM_math_isfinite_macro/1/iterations:1\n"
- "BM_math_isfinite_macro/2/iterations:1\n"
- "BM_math_isfinite_macro/3/iterations:1\n"
- "BM_math_isfinite/0/iterations:1\n"
- "BM_math_isfinite/1/iterations:1\n"
- "BM_math_isfinite/2/iterations:1\n"
- "BM_math_isfinite/3/iterations:1\n"
- "BM_math_isinf_macro/0/iterations:1\n"
- "BM_math_isinf_macro/1/iterations:1\n"
- "BM_math_isinf_macro/2/iterations:1\n"
- "BM_math_isinf_macro/3/iterations:1\n"
- "BM_math_isinf/0/iterations:1\n"
- "BM_math_isinf/1/iterations:1\n"
- "BM_math_isinf/2/iterations:1\n"
- "BM_math_isinf/3/iterations:1\n"
- "BM_math_isnan_macro/0/iterations:1\n"
- "BM_math_isnan_macro/1/iterations:1\n"
- "BM_math_isnan_macro/2/iterations:1\n"
- "BM_math_isnan_macro/3/iterations:1\n"
- "BM_math_isnan/0/iterations:1\n"
- "BM_math_isnan/1/iterations:1\n"
- "BM_math_isnan/2/iterations:1\n"
- "BM_math_isnan/3/iterations:1\n"
- "BM_math_isnormal_macro/0/iterations:1\n"
- "BM_math_isnormal_macro/1/iterations:1\n"
- "BM_math_isnormal_macro/2/iterations:1\n"
- "BM_math_isnormal_macro/3/iterations:1\n"
- "BM_math_isnormal/0/iterations:1\n"
- "BM_math_isnormal/1/iterations:1\n"
- "BM_math_isnormal/2/iterations:1\n"
- "BM_math_isnormal/3/iterations:1\n"
- "BM_math_sin_fast/iterations:1\n"
- "BM_math_sin_feupdateenv/iterations:1\n"
- "BM_math_sin_fesetenv/iterations:1\n"
- "BM_math_fpclassify/0/iterations:1\n"
- "BM_math_fpclassify/1/iterations:1\n"
- "BM_math_fpclassify/2/iterations:1\n"
- "BM_math_fpclassify/3/iterations:1\n"
- "BM_math_signbit_macro/0/iterations:1\n"
- "BM_math_signbit_macro/1/iterations:1\n"
- "BM_math_signbit_macro/2/iterations:1\n"
- "BM_math_signbit_macro/3/iterations:1\n"
- "BM_math_signbit/0/iterations:1\n"
- "BM_math_signbit/1/iterations:1\n"
- "BM_math_signbit/2/iterations:1\n"
- "BM_math_signbit/3/iterations:1\n"
- "BM_math_fabs_macro/0/iterations:1\n"
- "BM_math_fabs_macro/1/iterations:1\n"
- "BM_math_fabs_macro/2/iterations:1\n"
- "BM_math_fabs_macro/3/iterations:1\n"
+ "BM_atomic_acquire_fence/iterations:1\n"
+ "BM_atomic_empty/iterations:1\n"
+ "BM_atomic_fetch_add_cs/iterations:1\n"
+ "BM_atomic_fetch_add_relaxed/iterations:1\n"
+ "BM_atomic_fetch_add_seq_cst/iterations:1\n"
+ "BM_atomic_load_acquire/iterations:1\n"
+ "BM_atomic_load_relaxed/iterations:1\n"
+ "BM_atomic_seq_cst_fence/iterations:1\n"
+ "BM_atomic_store_release/iterations:1\n"
+ "BM_atomic_store_seq_cst/iterations:1\n"
"BM_math_fabs/0/iterations:1\n"
"BM_math_fabs/1/iterations:1\n"
"BM_math_fabs/2/iterations:1\n"
"BM_math_fabs/3/iterations:1\n"
- "BM_pthread_self/iterations:1\n"
- "BM_pthread_getspecific/iterations:1\n"
- "BM_pthread_setspecific/iterations:1\n"
- "BM_pthread_once/iterations:1\n"
- "BM_pthread_mutex_lock/iterations:1\n"
- "BM_pthread_mutex_lock_ERRORCHECK/iterations:1\n"
- "BM_pthread_mutex_lock_RECURSIVE/iterations:1\n"
- "BM_pthread_rwlock_read/iterations:1\n"
- "BM_pthread_rwlock_write/iterations:1\n"
+ "BM_math_fabs_macro/0/iterations:1\n"
+ "BM_math_fabs_macro/1/iterations:1\n"
+ "BM_math_fabs_macro/2/iterations:1\n"
+ "BM_math_fabs_macro/3/iterations:1\n"
+ "BM_math_fpclassify/0/iterations:1\n"
+ "BM_math_fpclassify/1/iterations:1\n"
+ "BM_math_fpclassify/2/iterations:1\n"
+ "BM_math_fpclassify/3/iterations:1\n"
+ "BM_math_isfinite/0/iterations:1\n"
+ "BM_math_isfinite/1/iterations:1\n"
+ "BM_math_isfinite/2/iterations:1\n"
+ "BM_math_isfinite/3/iterations:1\n"
+ "BM_math_isfinite_macro/0/iterations:1\n"
+ "BM_math_isfinite_macro/1/iterations:1\n"
+ "BM_math_isfinite_macro/2/iterations:1\n"
+ "BM_math_isfinite_macro/3/iterations:1\n"
+ "BM_math_isinf/0/iterations:1\n"
+ "BM_math_isinf/1/iterations:1\n"
+ "BM_math_isinf/2/iterations:1\n"
+ "BM_math_isinf/3/iterations:1\n"
+ "BM_math_isinf_macro/0/iterations:1\n"
+ "BM_math_isinf_macro/1/iterations:1\n"
+ "BM_math_isinf_macro/2/iterations:1\n"
+ "BM_math_isinf_macro/3/iterations:1\n"
+ "BM_math_isnan/0/iterations:1\n"
+ "BM_math_isnan/1/iterations:1\n"
+ "BM_math_isnan/2/iterations:1\n"
+ "BM_math_isnan/3/iterations:1\n"
+ "BM_math_isnan_macro/0/iterations:1\n"
+ "BM_math_isnan_macro/1/iterations:1\n"
+ "BM_math_isnan_macro/2/iterations:1\n"
+ "BM_math_isnan_macro/3/iterations:1\n"
+ "BM_math_isnormal/0/iterations:1\n"
+ "BM_math_isnormal/1/iterations:1\n"
+ "BM_math_isnormal/2/iterations:1\n"
+ "BM_math_isnormal/3/iterations:1\n"
+ "BM_math_isnormal_macro/0/iterations:1\n"
+ "BM_math_isnormal_macro/1/iterations:1\n"
+ "BM_math_isnormal_macro/2/iterations:1\n"
+ "BM_math_isnormal_macro/3/iterations:1\n"
+ "BM_math_log10/iterations:1\n"
+ "BM_math_logb/iterations:1\n"
+ "BM_math_signbit/0/iterations:1\n"
+ "BM_math_signbit/1/iterations:1\n"
+ "BM_math_signbit/2/iterations:1\n"
+ "BM_math_signbit/3/iterations:1\n"
+ "BM_math_signbit_macro/0/iterations:1\n"
+ "BM_math_signbit_macro/1/iterations:1\n"
+ "BM_math_signbit_macro/2/iterations:1\n"
+ "BM_math_signbit_macro/3/iterations:1\n"
+ "BM_math_sin_fast/iterations:1\n"
+ "BM_math_sin_fesetenv/iterations:1\n"
+ "BM_math_sin_feupdateenv/iterations:1\n"
+ "BM_math_sqrt/iterations:1\n"
"BM_pthread_create/iterations:1\n"
"BM_pthread_create_and_run/iterations:1\n"
"BM_pthread_exit_and_join/iterations:1\n"
+ "BM_pthread_getspecific/iterations:1\n"
"BM_pthread_key_create/iterations:1\n"
"BM_pthread_key_delete/iterations:1\n"
+ "BM_pthread_mutex_lock/iterations:1\n"
+ "BM_pthread_mutex_lock_ERRORCHECK/iterations:1\n"
+ "BM_pthread_mutex_lock_RECURSIVE/iterations:1\n"
+ "BM_pthread_once/iterations:1\n"
+ "BM_pthread_rwlock_read/iterations:1\n"
+ "BM_pthread_rwlock_write/iterations:1\n"
+ "BM_pthread_self/iterations:1\n"
+ "BM_pthread_setspecific/iterations:1\n"
"BM_semaphore_sem_getvalue/iterations:1\n"
"BM_semaphore_sem_wait_sem_post/iterations:1\n"
+ "BM_stdio_fopen_fgetc_fclose_locking/1024/iterations:1\n"
+ "BM_stdio_fopen_fgetc_fclose_no_locking/1024/iterations:1\n"
+ "BM_stdio_fopen_fgetln_fclose_locking/iterations:1\n"
+ "BM_stdio_fopen_fgetln_fclose_no_locking/iterations:1\n"
+ "BM_stdio_fopen_fgets_fclose_locking/iterations:1\n"
+ "BM_stdio_fopen_fgets_fclose_no_locking/iterations:1\n"
+ "BM_stdio_fopen_getline_fclose_locking/iterations:1\n"
+ "BM_stdio_fopen_getline_fclose_no_locking/iterations:1\n"
"BM_stdio_fread/8/iterations:1\n"
"BM_stdio_fread/64/iterations:1\n"
"BM_stdio_fread/512/iterations:1\n"
@@ -258,14 +266,7 @@
"BM_stdio_fread/16384/iterations:1\n"
"BM_stdio_fread/32768/iterations:1\n"
"BM_stdio_fread/65536/iterations:1\n"
- "BM_stdio_fwrite/8/iterations:1\n"
- "BM_stdio_fwrite/64/iterations:1\n"
- "BM_stdio_fwrite/512/iterations:1\n"
- "BM_stdio_fwrite/1024/iterations:1\n"
- "BM_stdio_fwrite/8192/iterations:1\n"
- "BM_stdio_fwrite/16384/iterations:1\n"
- "BM_stdio_fwrite/32768/iterations:1\n"
- "BM_stdio_fwrite/65536/iterations:1\n"
+ "BM_stdio_fread/131072/iterations:1\n"
"BM_stdio_fread_unbuffered/8/iterations:1\n"
"BM_stdio_fread_unbuffered/64/iterations:1\n"
"BM_stdio_fread_unbuffered/512/iterations:1\n"
@@ -274,6 +275,16 @@
"BM_stdio_fread_unbuffered/16384/iterations:1\n"
"BM_stdio_fread_unbuffered/32768/iterations:1\n"
"BM_stdio_fread_unbuffered/65536/iterations:1\n"
+ "BM_stdio_fread_unbuffered/131072/iterations:1\n"
+ "BM_stdio_fwrite/8/iterations:1\n"
+ "BM_stdio_fwrite/64/iterations:1\n"
+ "BM_stdio_fwrite/512/iterations:1\n"
+ "BM_stdio_fwrite/1024/iterations:1\n"
+ "BM_stdio_fwrite/8192/iterations:1\n"
+ "BM_stdio_fwrite/16384/iterations:1\n"
+ "BM_stdio_fwrite/32768/iterations:1\n"
+ "BM_stdio_fwrite/65536/iterations:1\n"
+ "BM_stdio_fwrite/131072/iterations:1\n"
"BM_stdio_fwrite_unbuffered/8/iterations:1\n"
"BM_stdio_fwrite_unbuffered/64/iterations:1\n"
"BM_stdio_fwrite_unbuffered/512/iterations:1\n"
@@ -282,18 +293,22 @@
"BM_stdio_fwrite_unbuffered/16384/iterations:1\n"
"BM_stdio_fwrite_unbuffered/32768/iterations:1\n"
"BM_stdio_fwrite_unbuffered/65536/iterations:1\n"
- "BM_stdio_fopen_fgetln_fclose_locking/iterations:1\n"
- "BM_stdio_fopen_fgetln_fclose_no_locking/iterations:1\n"
- "BM_stdio_fopen_fgets_fclose_locking/iterations:1\n"
- "BM_stdio_fopen_fgets_fclose_no_locking/iterations:1\n"
- "BM_stdio_fopen_fgetc_fclose_locking/1024/iterations:1\n"
- "BM_stdio_fopen_fgetc_fclose_no_locking/1024/iterations:1\n"
- "BM_stdio_fopen_getline_fclose_locking/iterations:1\n"
- "BM_stdio_fopen_getline_fclose_no_locking/iterations:1\n"
+ "BM_stdio_fwrite_unbuffered/131072/iterations:1\n"
+ "BM_stdio_printf_1$s/iterations:1\n"
+ "BM_stdio_printf_d/iterations:1\n"
"BM_stdio_printf_literal/iterations:1\n"
"BM_stdio_printf_s/iterations:1\n"
- "BM_stdio_printf_d/iterations:1\n"
- "BM_stdio_printf_1$s/iterations:1\n"
+ "BM_stdlib_malloc_free/8/iterations:1\n"
+ "BM_stdlib_malloc_free/64/iterations:1\n"
+ "BM_stdlib_malloc_free/512/iterations:1\n"
+ "BM_stdlib_malloc_free/1024/iterations:1\n"
+ "BM_stdlib_malloc_free/8192/iterations:1\n"
+ "BM_stdlib_malloc_free/16384/iterations:1\n"
+ "BM_stdlib_malloc_free/32768/iterations:1\n"
+ "BM_stdlib_malloc_free/65536/iterations:1\n"
+ "BM_stdlib_malloc_free/131072/iterations:1\n"
+ "BM_stdlib_mbrtowc/0/iterations:1\n"
+ "BM_stdlib_mbstowcs/0/0/iterations:1\n"
"BM_string_memcmp/8/0/0/iterations:1\n"
"BM_string_memcmp/64/0/0/iterations:1\n"
"BM_string_memcmp/512/0/0/iterations:1\n"
@@ -302,6 +317,7 @@
"BM_string_memcmp/16384/0/0/iterations:1\n"
"BM_string_memcmp/32768/0/0/iterations:1\n"
"BM_string_memcmp/65536/0/0/iterations:1\n"
+ "BM_string_memcmp/131072/0/0/iterations:1\n"
"BM_string_memcpy/8/0/0/iterations:1\n"
"BM_string_memcpy/64/0/0/iterations:1\n"
"BM_string_memcpy/512/0/0/iterations:1\n"
@@ -310,6 +326,7 @@
"BM_string_memcpy/16384/0/0/iterations:1\n"
"BM_string_memcpy/32768/0/0/iterations:1\n"
"BM_string_memcpy/65536/0/0/iterations:1\n"
+ "BM_string_memcpy/131072/0/0/iterations:1\n"
"BM_string_memmove_non_overlapping/8/0/0/iterations:1\n"
"BM_string_memmove_non_overlapping/64/0/0/iterations:1\n"
"BM_string_memmove_non_overlapping/512/0/0/iterations:1\n"
@@ -318,6 +335,7 @@
"BM_string_memmove_non_overlapping/16384/0/0/iterations:1\n"
"BM_string_memmove_non_overlapping/32768/0/0/iterations:1\n"
"BM_string_memmove_non_overlapping/65536/0/0/iterations:1\n"
+ "BM_string_memmove_non_overlapping/131072/0/0/iterations:1\n"
"BM_string_memmove_overlap_dst_before_src/8/0/iterations:1\n"
"BM_string_memmove_overlap_dst_before_src/64/0/iterations:1\n"
"BM_string_memmove_overlap_dst_before_src/512/0/iterations:1\n"
@@ -326,6 +344,7 @@
"BM_string_memmove_overlap_dst_before_src/16384/0/iterations:1\n"
"BM_string_memmove_overlap_dst_before_src/32768/0/iterations:1\n"
"BM_string_memmove_overlap_dst_before_src/65536/0/iterations:1\n"
+ "BM_string_memmove_overlap_dst_before_src/131072/0/iterations:1\n"
"BM_string_memmove_overlap_src_before_dst/8/0/iterations:1\n"
"BM_string_memmove_overlap_src_before_dst/64/0/iterations:1\n"
"BM_string_memmove_overlap_src_before_dst/512/0/iterations:1\n"
@@ -334,6 +353,7 @@
"BM_string_memmove_overlap_src_before_dst/16384/0/iterations:1\n"
"BM_string_memmove_overlap_src_before_dst/32768/0/iterations:1\n"
"BM_string_memmove_overlap_src_before_dst/65536/0/iterations:1\n"
+ "BM_string_memmove_overlap_src_before_dst/131072/0/iterations:1\n"
"BM_string_memset/8/0/iterations:1\n"
"BM_string_memset/64/0/iterations:1\n"
"BM_string_memset/512/0/iterations:1\n"
@@ -342,14 +362,7 @@
"BM_string_memset/16384/0/iterations:1\n"
"BM_string_memset/32768/0/iterations:1\n"
"BM_string_memset/65536/0/iterations:1\n"
- "BM_string_strlen/8/0/iterations:1\n"
- "BM_string_strlen/64/0/iterations:1\n"
- "BM_string_strlen/512/0/iterations:1\n"
- "BM_string_strlen/1024/0/iterations:1\n"
- "BM_string_strlen/8192/0/iterations:1\n"
- "BM_string_strlen/16384/0/iterations:1\n"
- "BM_string_strlen/32768/0/iterations:1\n"
- "BM_string_strlen/65536/0/iterations:1\n"
+ "BM_string_memset/131072/0/iterations:1\n"
"BM_string_strcat_copy_only/8/0/0/iterations:1\n"
"BM_string_strcat_copy_only/64/0/0/iterations:1\n"
"BM_string_strcat_copy_only/512/0/0/iterations:1\n"
@@ -358,14 +371,7 @@
"BM_string_strcat_copy_only/16384/0/0/iterations:1\n"
"BM_string_strcat_copy_only/32768/0/0/iterations:1\n"
"BM_string_strcat_copy_only/65536/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/8/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/64/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/512/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/1024/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/8192/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/16384/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/32768/0/0/iterations:1\n"
- "BM_string_strcat_seek_only/65536/0/0/iterations:1\n"
+ "BM_string_strcat_copy_only/131072/0/0/iterations:1\n"
"BM_string_strcat_half_copy_half_seek/8/0/0/iterations:1\n"
"BM_string_strcat_half_copy_half_seek/64/0/0/iterations:1\n"
"BM_string_strcat_half_copy_half_seek/512/0/0/iterations:1\n"
@@ -374,30 +380,16 @@
"BM_string_strcat_half_copy_half_seek/16384/0/0/iterations:1\n"
"BM_string_strcat_half_copy_half_seek/32768/0/0/iterations:1\n"
"BM_string_strcat_half_copy_half_seek/65536/0/0/iterations:1\n"
- "BM_string_strcpy/8/0/0/iterations:1\n"
- "BM_string_strcpy/64/0/0/iterations:1\n"
- "BM_string_strcpy/512/0/0/iterations:1\n"
- "BM_string_strcpy/1024/0/0/iterations:1\n"
- "BM_string_strcpy/8192/0/0/iterations:1\n"
- "BM_string_strcpy/16384/0/0/iterations:1\n"
- "BM_string_strcpy/32768/0/0/iterations:1\n"
- "BM_string_strcpy/65536/0/0/iterations:1\n"
- "BM_string_strcmp/8/0/0/iterations:1\n"
- "BM_string_strcmp/64/0/0/iterations:1\n"
- "BM_string_strcmp/512/0/0/iterations:1\n"
- "BM_string_strcmp/1024/0/0/iterations:1\n"
- "BM_string_strcmp/8192/0/0/iterations:1\n"
- "BM_string_strcmp/16384/0/0/iterations:1\n"
- "BM_string_strcmp/32768/0/0/iterations:1\n"
- "BM_string_strcmp/65536/0/0/iterations:1\n"
- "BM_string_strstr/8/0/0/iterations:1\n"
- "BM_string_strstr/64/0/0/iterations:1\n"
- "BM_string_strstr/512/0/0/iterations:1\n"
- "BM_string_strstr/1024/0/0/iterations:1\n"
- "BM_string_strstr/8192/0/0/iterations:1\n"
- "BM_string_strstr/16384/0/0/iterations:1\n"
- "BM_string_strstr/32768/0/0/iterations:1\n"
- "BM_string_strstr/65536/0/0/iterations:1\n"
+ "BM_string_strcat_half_copy_half_seek/131072/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/8/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/64/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/512/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/1024/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/8192/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/16384/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/32768/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/65536/0/0/iterations:1\n"
+ "BM_string_strcat_seek_only/131072/0/0/iterations:1\n"
"BM_string_strchr/8/0/iterations:1\n"
"BM_string_strchr/64/0/iterations:1\n"
"BM_string_strchr/512/0/iterations:1\n"
@@ -406,34 +398,54 @@
"BM_string_strchr/16384/0/iterations:1\n"
"BM_string_strchr/32768/0/iterations:1\n"
"BM_string_strchr/65536/0/iterations:1\n"
+ "BM_string_strchr/131072/0/iterations:1\n"
+ "BM_string_strcmp/8/0/0/iterations:1\n"
+ "BM_string_strcmp/64/0/0/iterations:1\n"
+ "BM_string_strcmp/512/0/0/iterations:1\n"
+ "BM_string_strcmp/1024/0/0/iterations:1\n"
+ "BM_string_strcmp/8192/0/0/iterations:1\n"
+ "BM_string_strcmp/16384/0/0/iterations:1\n"
+ "BM_string_strcmp/32768/0/0/iterations:1\n"
+ "BM_string_strcmp/65536/0/0/iterations:1\n"
+ "BM_string_strcmp/131072/0/0/iterations:1\n"
+ "BM_string_strcpy/8/0/0/iterations:1\n"
+ "BM_string_strcpy/64/0/0/iterations:1\n"
+ "BM_string_strcpy/512/0/0/iterations:1\n"
+ "BM_string_strcpy/1024/0/0/iterations:1\n"
+ "BM_string_strcpy/8192/0/0/iterations:1\n"
+ "BM_string_strcpy/16384/0/0/iterations:1\n"
+ "BM_string_strcpy/32768/0/0/iterations:1\n"
+ "BM_string_strcpy/65536/0/0/iterations:1\n"
+ "BM_string_strcpy/131072/0/0/iterations:1\n"
+ "BM_string_strlen/8/0/iterations:1\n"
+ "BM_string_strlen/64/0/iterations:1\n"
+ "BM_string_strlen/512/0/iterations:1\n"
+ "BM_string_strlen/1024/0/iterations:1\n"
+ "BM_string_strlen/8192/0/iterations:1\n"
+ "BM_string_strlen/16384/0/iterations:1\n"
+ "BM_string_strlen/32768/0/iterations:1\n"
+ "BM_string_strlen/65536/0/iterations:1\n"
+ "BM_string_strlen/131072/0/iterations:1\n"
+ "BM_string_strstr/8/0/0/iterations:1\n"
+ "BM_string_strstr/64/0/0/iterations:1\n"
+ "BM_string_strstr/512/0/0/iterations:1\n"
+ "BM_string_strstr/1024/0/0/iterations:1\n"
+ "BM_string_strstr/8192/0/0/iterations:1\n"
+ "BM_string_strstr/16384/0/0/iterations:1\n"
+ "BM_string_strstr/32768/0/0/iterations:1\n"
+ "BM_string_strstr/65536/0/0/iterations:1\n"
+ "BM_string_strstr/131072/0/0/iterations:1\n"
"BM_time_clock_gettime/iterations:1\n"
"BM_time_clock_gettime_syscall/iterations:1\n"
"BM_time_gettimeofday/iterations:1\n"
"BM_time_gettimeofday_syscall/iterations:1\n"
- "BM_time_time/iterations:1\n"
"BM_time_localtime/iterations:1\n"
"BM_time_localtime_r/iterations:1\n"
+ "BM_time_time/iterations:1\n"
"BM_unistd_getpid/iterations:1\n"
"BM_unistd_getpid_syscall/iterations:1\n"
"BM_unistd_gettid/iterations:1\n"
"BM_unistd_gettid_syscall/iterations:1\n"
- "BM_stdlib_malloc_free/8/0/iterations:1\n"
- "BM_stdlib_malloc_free/64/0/iterations:1\n"
- "BM_stdlib_malloc_free/512/0/iterations:1\n"
- "BM_stdlib_malloc_free/1024/0/iterations:1\n"
- "BM_stdlib_malloc_free/8192/0/iterations:1\n"
- "BM_stdlib_malloc_free/16384/0/iterations:1\n"
- "BM_stdlib_malloc_free/32768/0/iterations:1\n"
- "BM_stdlib_malloc_free/65536/0/iterations:1\n"
- "BM_stdlib_mbstowcs/0/0/iterations:1\n"
- "BM_stdlib_mbrtowc/0/iterations:1\n"
- "BM_property_get/1/iterations:1\n"
- "BM_property_get/4/iterations:1\n"
- "BM_property_get/16/iterations:1\n"
- "BM_property_get/64/iterations:1\n"
- "BM_property_get/128/iterations:1\n"
- "BM_property_get/256/iterations:1\n"
- "BM_property_get/512/iterations:1\n"
"BM_property_find/1/iterations:1\n"
"BM_property_find/4/iterations:1\n"
"BM_property_find/16/iterations:1\n"
@@ -441,6 +453,13 @@
"BM_property_find/128/iterations:1\n"
"BM_property_find/256/iterations:1\n"
"BM_property_find/512/iterations:1\n"
+ "BM_property_get/1/iterations:1\n"
+ "BM_property_get/4/iterations:1\n"
+ "BM_property_get/16/iterations:1\n"
+ "BM_property_get/64/iterations:1\n"
+ "BM_property_get/128/iterations:1\n"
+ "BM_property_get/256/iterations:1\n"
+ "BM_property_get/512/iterations:1\n"
"BM_property_read/1/iterations:1\n"
"BM_property_read/4/iterations:1\n"
"BM_property_read/16/iterations:1\n"
@@ -456,9 +475,6 @@
"BM_property_serial/256/iterations:1\n"
"BM_property_serial/512/iterations:1\n";
Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1"});
-
- // Make sure that the test suite can be found in the suites directory.
- Verify(expected, 0, std::vector<const char*>{"--bionic_iterations=1", "--bionic_xml=full.xml"});
}
TEST_F(SystemTests, small) {
@@ -480,6 +496,7 @@
"BM_string_memcmp/16384/0/0/iterations:1\n"
"BM_string_memcmp/32768/0/0/iterations:1\n"
"BM_string_memcmp/65536/0/0/iterations:1\n"
+ "BM_string_memcmp/131072/0/0/iterations:1\n"
"BM_math_sqrt/iterations:1\n"
"BM_string_memcpy/512/4/4/iterations:25\n"
"BM_property_get/1/iterations:1\n";
@@ -489,7 +506,7 @@
TEST_F(SystemTests, from_each) {
std::string expected =
- "BM_empty/iterations:1\n"
+ "BM_atomic_empty/iterations:1\n"
"BM_math_sqrt/iterations:1\n"
"BM_property_get/1/iterations:1\n"
"BM_pthread_self/iterations:1\n"
@@ -529,6 +546,7 @@
"BM_string_memcmp/16384/0/0/iterations:1\n"
"BM_string_memcmp/32768/0/0/iterations:1\n"
"BM_string_memcmp/65536/0/0/iterations:1\n"
+ "BM_string_memcmp/131072/0/0/iterations:1\n"
"BM_math_sqrt/iterations:1\n"
"BM_string_memcpy/512/4/4/iterations:25\n"
"BM_property_get/1/iterations:1\n"
@@ -540,6 +558,7 @@
"BM_string_memcpy/16384/0/0/iterations:1\n"
"BM_string_memcpy/32768/0/0/iterations:1\n"
"BM_string_memcpy/65536/0/0/iterations:1\n"
+ "BM_string_memcpy/131072/0/0/iterations:1\n"
"BM_math_log10/iterations:1\n";
Verify(expected, 0, std::vector<const char*>{"--bionic_extra=BM_string_memcpy AT_ALIGNED_TWOBUF",
"--bionic_extra=BM_math_log10",
@@ -548,88 +567,2571 @@
"--bionic_iterations=1"});
}
-TEST_F(SystemTests, alignment) {
+TEST_F(SystemTests, sizes) {
std::string expected =
- "BM_string_memcmp/8/2/2/iterations:1\n"
- "BM_string_memcmp/64/2/2/iterations:1\n"
- "BM_string_memcmp/512/2/2/iterations:1\n"
- "BM_string_memcmp/1024/2/2/iterations:1\n"
- "BM_string_memcmp/8192/2/2/iterations:1\n"
- "BM_string_memcmp/16384/2/2/iterations:1\n"
- "BM_string_memcmp/32768/2/2/iterations:1\n"
- "BM_string_memcmp/65536/2/2/iterations:1\n"
- "BM_string_memcmp/8/4/4/iterations:1\n"
- "BM_string_memcmp/64/4/4/iterations:1\n"
- "BM_string_memcmp/512/4/4/iterations:1\n"
- "BM_string_memcmp/1024/4/4/iterations:1\n"
- "BM_string_memcmp/8192/4/4/iterations:1\n"
- "BM_string_memcmp/16384/4/4/iterations:1\n"
- "BM_string_memcmp/32768/4/4/iterations:1\n"
- "BM_string_memcmp/65536/4/4/iterations:1\n"
- "BM_string_memcmp/8/16/16/iterations:1\n"
- "BM_string_memcmp/64/16/16/iterations:1\n"
- "BM_string_memcmp/512/16/16/iterations:1\n"
- "BM_string_memcmp/1024/16/16/iterations:1\n"
- "BM_string_memcmp/8192/16/16/iterations:1\n"
- "BM_string_memcmp/16384/16/16/iterations:1\n"
- "BM_string_memcmp/32768/16/16/iterations:1\n"
- "BM_string_memcmp/65536/16/16/iterations:1\n"
- "BM_string_memcmp/8/512/512/iterations:1\n"
- "BM_string_memcmp/64/512/512/iterations:1\n"
- "BM_string_memcmp/512/512/512/iterations:1\n"
- "BM_string_memcmp/1024/512/512/iterations:1\n"
- "BM_string_memcmp/8192/512/512/iterations:1\n"
- "BM_string_memcmp/16384/512/512/iterations:1\n"
- "BM_string_memcmp/32768/512/512/iterations:1\n"
- "BM_string_memcmp/65536/512/512/iterations:1\n"
- "BM_string_memcmp/8/2048/2048/iterations:1\n"
- "BM_string_memcmp/64/2048/2048/iterations:1\n"
- "BM_string_memcmp/512/2048/2048/iterations:1\n"
- "BM_string_memcmp/1024/2048/2048/iterations:1\n"
- "BM_string_memcmp/8192/2048/2048/iterations:1\n"
- "BM_string_memcmp/16384/2048/2048/iterations:1\n"
- "BM_string_memcmp/32768/2048/2048/iterations:1\n"
- "BM_string_memcmp/65536/2048/2048/iterations:1\n"
- "BM_string_strlen/8/2/iterations:1\n"
- "BM_string_strlen/64/2/iterations:1\n"
- "BM_string_strlen/512/2/iterations:1\n"
- "BM_string_strlen/1024/2/iterations:1\n"
- "BM_string_strlen/8192/2/iterations:1\n"
- "BM_string_strlen/16384/2/iterations:1\n"
- "BM_string_strlen/32768/2/iterations:1\n"
- "BM_string_strlen/65536/2/iterations:1\n"
- "BM_string_strlen/8/4/iterations:1\n"
- "BM_string_strlen/64/4/iterations:1\n"
- "BM_string_strlen/512/4/iterations:1\n"
- "BM_string_strlen/1024/4/iterations:1\n"
- "BM_string_strlen/8192/4/iterations:1\n"
- "BM_string_strlen/16384/4/iterations:1\n"
- "BM_string_strlen/32768/4/iterations:1\n"
- "BM_string_strlen/65536/4/iterations:1\n"
- "BM_string_strlen/8/16/iterations:1\n"
- "BM_string_strlen/64/16/iterations:1\n"
- "BM_string_strlen/512/16/iterations:1\n"
- "BM_string_strlen/1024/16/iterations:1\n"
- "BM_string_strlen/8192/16/iterations:1\n"
- "BM_string_strlen/16384/16/iterations:1\n"
- "BM_string_strlen/32768/16/iterations:1\n"
- "BM_string_strlen/65536/16/iterations:1\n"
- "BM_string_strlen/8/512/iterations:1\n"
- "BM_string_strlen/64/512/iterations:1\n"
- "BM_string_strlen/512/512/iterations:1\n"
- "BM_string_strlen/1024/512/iterations:1\n"
- "BM_string_strlen/8192/512/iterations:1\n"
- "BM_string_strlen/16384/512/iterations:1\n"
- "BM_string_strlen/32768/512/iterations:1\n"
- "BM_string_strlen/65536/512/iterations:1\n"
- "BM_string_strlen/8/2048/iterations:1\n"
- "BM_string_strlen/64/2048/iterations:1\n"
- "BM_string_strlen/512/2048/iterations:1\n"
- "BM_string_strlen/1024/2048/iterations:1\n"
- "BM_string_strlen/8192/2048/iterations:1\n"
- "BM_string_strlen/16384/2048/iterations:1\n"
- "BM_string_strlen/32768/2048/iterations:1\n"
- "BM_string_strlen/65536/2048/iterations:1\n";
- Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_alignment.xml").c_str(),
- "--bionic_iterations=1"});
+ "BM_stdio_fwrite/8/iterations:1\n"
+ "BM_stdio_fwrite/64/iterations:1\n"
+ "BM_stdio_fwrite/512/iterations:1\n"
+ "BM_stdio_fwrite/1024/iterations:1\n"
+ "BM_stdio_fwrite/8192/iterations:1\n"
+ "BM_stdio_fwrite/16384/iterations:1\n"
+ "BM_stdio_fwrite/32768/iterations:1\n"
+ "BM_stdio_fwrite/65536/iterations:1\n"
+ "BM_stdio_fwrite/131072/iterations:1\n"
+ "BM_stdio_fread/1/iterations:1\n"
+ "BM_stdio_fread/2/iterations:1\n"
+ "BM_stdio_fread/3/iterations:1\n"
+ "BM_stdio_fread/4/iterations:1\n"
+ "BM_stdio_fread/5/iterations:1\n"
+ "BM_stdio_fread/6/iterations:1\n"
+ "BM_stdio_fread/7/iterations:1\n"
+ "BM_stdio_fread/8/iterations:1\n"
+ "BM_stdio_fread/9/iterations:1\n"
+ "BM_stdio_fread/10/iterations:1\n"
+ "BM_stdio_fread/11/iterations:1\n"
+ "BM_stdio_fread/12/iterations:1\n"
+ "BM_stdio_fread/13/iterations:1\n"
+ "BM_stdio_fread/14/iterations:1\n"
+ "BM_stdio_fread/15/iterations:1\n"
+ "BM_stdio_fread/16/iterations:1\n"
+ "BM_stdio_fread/24/iterations:1\n"
+ "BM_stdio_fread/32/iterations:1\n"
+ "BM_stdio_fread/40/iterations:1\n"
+ "BM_stdio_fread/48/iterations:1\n"
+ "BM_stdio_fread/56/iterations:1\n"
+ "BM_stdio_fread/64/iterations:1\n"
+ "BM_stdio_fread/72/iterations:1\n"
+ "BM_stdio_fread/80/iterations:1\n"
+ "BM_stdio_fread/88/iterations:1\n"
+ "BM_stdio_fread/96/iterations:1\n"
+ "BM_stdio_fread/104/iterations:1\n"
+ "BM_stdio_fread/112/iterations:1\n"
+ "BM_stdio_fread/120/iterations:1\n"
+ "BM_stdio_fread/128/iterations:1\n"
+ "BM_stdio_fread/136/iterations:1\n"
+ "BM_stdio_fread/144/iterations:1\n"
+ "BM_stdio_fread/160/iterations:1\n"
+ "BM_stdio_fread/176/iterations:1\n"
+ "BM_stdio_fread/192/iterations:1\n"
+ "BM_stdio_fread/208/iterations:1\n"
+ "BM_stdio_fread/224/iterations:1\n"
+ "BM_stdio_fread/240/iterations:1\n"
+ "BM_stdio_fread/256/iterations:1\n"
+ "BM_stdio_fwrite/512/iterations:1\n"
+ "BM_stdio_fwrite/1024/iterations:1\n"
+ "BM_stdio_fwrite/8192/iterations:1\n"
+ "BM_stdio_fwrite/16384/iterations:1\n"
+ "BM_stdio_fwrite/32768/iterations:1\n"
+ "BM_stdio_fwrite/65536/iterations:1\n"
+ "BM_stdio_fwrite/131072/iterations:1\n"
+ "BM_stdio_fread/262144/iterations:1\n"
+ "BM_stdio_fread/524288/iterations:1\n"
+ "BM_stdio_fread/1048576/iterations:1\n"
+ "BM_stdio_fread/2097152/iterations:1\n"
+ "BM_stdio_fwrite/1/iterations:1\n"
+ "BM_stdio_fwrite/2/iterations:1\n"
+ "BM_stdio_fwrite/3/iterations:1\n"
+ "BM_stdio_fwrite/4/iterations:1\n"
+ "BM_stdio_fwrite/5/iterations:1\n"
+ "BM_stdio_fwrite/6/iterations:1\n"
+ "BM_stdio_fwrite/7/iterations:1\n"
+ "BM_stdio_fwrite/8/iterations:1\n"
+ "BM_stdio_fwrite/9/iterations:1\n"
+ "BM_stdio_fwrite/10/iterations:1\n"
+ "BM_stdio_fwrite/11/iterations:1\n"
+ "BM_stdio_fwrite/12/iterations:1\n"
+ "BM_stdio_fwrite/13/iterations:1\n"
+ "BM_stdio_fwrite/14/iterations:1\n"
+ "BM_stdio_fwrite/15/iterations:1\n"
+ "BM_stdio_fwrite/16/iterations:1\n"
+ "BM_stdio_fwrite/24/iterations:1\n"
+ "BM_stdio_fwrite/32/iterations:1\n"
+ "BM_stdio_fwrite/40/iterations:1\n"
+ "BM_stdio_fwrite/48/iterations:1\n"
+ "BM_stdio_fwrite/56/iterations:1\n"
+ "BM_stdio_fwrite/64/iterations:1\n"
+ "BM_stdio_fwrite/72/iterations:1\n"
+ "BM_stdio_fwrite/80/iterations:1\n"
+ "BM_stdio_fwrite/88/iterations:1\n"
+ "BM_stdio_fwrite/96/iterations:1\n"
+ "BM_stdio_fwrite/104/iterations:1\n"
+ "BM_stdio_fwrite/112/iterations:1\n"
+ "BM_stdio_fwrite/120/iterations:1\n"
+ "BM_stdio_fwrite/128/iterations:1\n"
+ "BM_stdio_fwrite/136/iterations:1\n"
+ "BM_stdio_fwrite/144/iterations:1\n"
+ "BM_stdio_fwrite/160/iterations:1\n"
+ "BM_stdio_fwrite/176/iterations:1\n"
+ "BM_stdio_fwrite/192/iterations:1\n"
+ "BM_stdio_fwrite/208/iterations:1\n"
+ "BM_stdio_fwrite/224/iterations:1\n"
+ "BM_stdio_fwrite/240/iterations:1\n"
+ "BM_stdio_fwrite/256/iterations:1\n"
+ "BM_stdio_fwrite/512/iterations:1\n"
+ "BM_stdio_fwrite/1024/iterations:1\n"
+ "BM_stdio_fwrite/8192/iterations:1\n"
+ "BM_stdio_fwrite/16384/iterations:1\n"
+ "BM_stdio_fwrite/32768/iterations:1\n"
+ "BM_stdio_fwrite/65536/iterations:1\n"
+ "BM_stdio_fwrite/131072/iterations:1\n"
+ "BM_stdio_fwrite/262144/iterations:1\n"
+ "BM_stdio_fwrite/524288/iterations:1\n"
+ "BM_stdio_fwrite/1048576/iterations:1\n"
+ "BM_stdio_fwrite/2097152/iterations:1\n";
+
+ Verify(expected, 0, std::vector<const char*>{GetBionicXmlArg("test_size.xml").c_str()});
+}
+
+TEST_F(SystemTests, alignment_onebuf) {
+ std::string expected =
+ "BM_string_strlen/8/0/iterations:1\n"
+ "BM_string_strlen/64/0/iterations:1\n"
+ "BM_string_strlen/512/0/iterations:1\n"
+ "BM_string_strlen/1024/0/iterations:1\n"
+ "BM_string_strlen/8192/0/iterations:1\n"
+ "BM_string_strlen/16384/0/iterations:1\n"
+ "BM_string_strlen/32768/0/iterations:1\n"
+ "BM_string_strlen/65536/0/iterations:1\n"
+ "BM_string_strlen/131072/0/iterations:1\n"
+ "BM_string_memset/1/0/iterations:1\n"
+ "BM_string_memset/2/0/iterations:1\n"
+ "BM_string_memset/3/0/iterations:1\n"
+ "BM_string_memset/4/0/iterations:1\n"
+ "BM_string_memset/5/0/iterations:1\n"
+ "BM_string_memset/6/0/iterations:1\n"
+ "BM_string_memset/7/0/iterations:1\n"
+ "BM_string_memset/8/0/iterations:1\n"
+ "BM_string_memset/9/0/iterations:1\n"
+ "BM_string_memset/10/0/iterations:1\n"
+ "BM_string_memset/11/0/iterations:1\n"
+ "BM_string_memset/12/0/iterations:1\n"
+ "BM_string_memset/13/0/iterations:1\n"
+ "BM_string_memset/14/0/iterations:1\n"
+ "BM_string_memset/15/0/iterations:1\n"
+ "BM_string_memset/16/0/iterations:1\n"
+ "BM_string_memset/24/0/iterations:1\n"
+ "BM_string_memset/32/0/iterations:1\n"
+ "BM_string_memset/40/0/iterations:1\n"
+ "BM_string_memset/48/0/iterations:1\n"
+ "BM_string_memset/56/0/iterations:1\n"
+ "BM_string_memset/64/0/iterations:1\n"
+ "BM_string_memset/72/0/iterations:1\n"
+ "BM_string_memset/80/0/iterations:1\n"
+ "BM_string_memset/88/0/iterations:1\n"
+ "BM_string_memset/96/0/iterations:1\n"
+ "BM_string_memset/104/0/iterations:1\n"
+ "BM_string_memset/112/0/iterations:1\n"
+ "BM_string_memset/120/0/iterations:1\n"
+ "BM_string_memset/128/0/iterations:1\n"
+ "BM_string_memset/136/0/iterations:1\n"
+ "BM_string_memset/144/0/iterations:1\n"
+ "BM_string_memset/160/0/iterations:1\n"
+ "BM_string_memset/176/0/iterations:1\n"
+ "BM_string_memset/192/0/iterations:1\n"
+ "BM_string_memset/208/0/iterations:1\n"
+ "BM_string_memset/224/0/iterations:1\n"
+ "BM_string_memset/240/0/iterations:1\n"
+ "BM_string_memset/256/0/iterations:1\n"
+ "BM_string_strlen/512/0/iterations:1\n"
+ "BM_string_strlen/1024/0/iterations:1\n"
+ "BM_string_strlen/8192/0/iterations:1\n"
+ "BM_string_strlen/16384/0/iterations:1\n"
+ "BM_string_strlen/32768/0/iterations:1\n"
+ "BM_string_strlen/65536/0/iterations:1\n"
+ "BM_string_strlen/131072/0/iterations:1\n"
+ "BM_string_memset/262144/0/iterations:1\n"
+ "BM_string_memset/524288/0/iterations:1\n"
+ "BM_string_memset/1048576/0/iterations:1\n"
+ "BM_string_memset/2097152/0/iterations:1\n"
+ "BM_string_strlen/1/0/iterations:1\n"
+ "BM_string_strlen/2/0/iterations:1\n"
+ "BM_string_strlen/3/0/iterations:1\n"
+ "BM_string_strlen/4/0/iterations:1\n"
+ "BM_string_strlen/5/0/iterations:1\n"
+ "BM_string_strlen/6/0/iterations:1\n"
+ "BM_string_strlen/7/0/iterations:1\n"
+ "BM_string_strlen/8/0/iterations:1\n"
+ "BM_string_strlen/9/0/iterations:1\n"
+ "BM_string_strlen/10/0/iterations:1\n"
+ "BM_string_strlen/11/0/iterations:1\n"
+ "BM_string_strlen/12/0/iterations:1\n"
+ "BM_string_strlen/13/0/iterations:1\n"
+ "BM_string_strlen/14/0/iterations:1\n"
+ "BM_string_strlen/15/0/iterations:1\n"
+ "BM_string_strlen/16/0/iterations:1\n"
+ "BM_string_strlen/24/0/iterations:1\n"
+ "BM_string_strlen/32/0/iterations:1\n"
+ "BM_string_strlen/40/0/iterations:1\n"
+ "BM_string_strlen/48/0/iterations:1\n"
+ "BM_string_strlen/56/0/iterations:1\n"
+ "BM_string_strlen/64/0/iterations:1\n"
+ "BM_string_strlen/72/0/iterations:1\n"
+ "BM_string_strlen/80/0/iterations:1\n"
+ "BM_string_strlen/88/0/iterations:1\n"
+ "BM_string_strlen/96/0/iterations:1\n"
+ "BM_string_strlen/104/0/iterations:1\n"
+ "BM_string_strlen/112/0/iterations:1\n"
+ "BM_string_strlen/120/0/iterations:1\n"
+ "BM_string_strlen/128/0/iterations:1\n"
+ "BM_string_strlen/136/0/iterations:1\n"
+ "BM_string_strlen/144/0/iterations:1\n"
+ "BM_string_strlen/160/0/iterations:1\n"
+ "BM_string_strlen/176/0/iterations:1\n"
+ "BM_string_strlen/192/0/iterations:1\n"
+ "BM_string_strlen/208/0/iterations:1\n"
+ "BM_string_strlen/224/0/iterations:1\n"
+ "BM_string_strlen/240/0/iterations:1\n"
+ "BM_string_strlen/256/0/iterations:1\n"
+ "BM_string_strlen/512/0/iterations:1\n"
+ "BM_string_strlen/1024/0/iterations:1\n"
+ "BM_string_strlen/8192/0/iterations:1\n"
+ "BM_string_strlen/16384/0/iterations:1\n"
+ "BM_string_strlen/32768/0/iterations:1\n"
+ "BM_string_strlen/65536/0/iterations:1\n"
+ "BM_string_strlen/131072/0/iterations:1\n"
+ "BM_string_strlen/262144/0/iterations:1\n"
+ "BM_string_strlen/524288/0/iterations:1\n"
+ "BM_string_strlen/1048576/0/iterations:1\n"
+ "BM_string_strlen/2097152/0/iterations:1\n"
+ "BM_string_memset/1/0/iterations:1\n"
+ "BM_string_memset/1/1/iterations:1\n"
+ "BM_string_memset/1/2/iterations:1\n"
+ "BM_string_memset/1/4/iterations:1\n"
+ "BM_string_memset/1/8/iterations:1\n"
+ "BM_string_memset/1/16/iterations:1\n"
+ "BM_string_memset/1/32/iterations:1\n"
+ "BM_string_memset/2/0/iterations:1\n"
+ "BM_string_memset/2/1/iterations:1\n"
+ "BM_string_memset/2/2/iterations:1\n"
+ "BM_string_memset/2/4/iterations:1\n"
+ "BM_string_memset/2/8/iterations:1\n"
+ "BM_string_memset/2/16/iterations:1\n"
+ "BM_string_memset/2/32/iterations:1\n"
+ "BM_string_memset/3/0/iterations:1\n"
+ "BM_string_memset/3/1/iterations:1\n"
+ "BM_string_memset/3/2/iterations:1\n"
+ "BM_string_memset/3/4/iterations:1\n"
+ "BM_string_memset/3/8/iterations:1\n"
+ "BM_string_memset/3/16/iterations:1\n"
+ "BM_string_memset/3/32/iterations:1\n"
+ "BM_string_memset/4/0/iterations:1\n"
+ "BM_string_memset/4/1/iterations:1\n"
+ "BM_string_memset/4/2/iterations:1\n"
+ "BM_string_memset/4/4/iterations:1\n"
+ "BM_string_memset/4/8/iterations:1\n"
+ "BM_string_memset/4/16/iterations:1\n"
+ "BM_string_memset/4/32/iterations:1\n"
+ "BM_string_memset/5/0/iterations:1\n"
+ "BM_string_memset/5/1/iterations:1\n"
+ "BM_string_memset/5/2/iterations:1\n"
+ "BM_string_memset/5/4/iterations:1\n"
+ "BM_string_memset/5/8/iterations:1\n"
+ "BM_string_memset/5/16/iterations:1\n"
+ "BM_string_memset/5/32/iterations:1\n"
+ "BM_string_memset/6/0/iterations:1\n"
+ "BM_string_memset/6/1/iterations:1\n"
+ "BM_string_memset/6/2/iterations:1\n"
+ "BM_string_memset/6/4/iterations:1\n"
+ "BM_string_memset/6/8/iterations:1\n"
+ "BM_string_memset/6/16/iterations:1\n"
+ "BM_string_memset/6/32/iterations:1\n"
+ "BM_string_memset/7/0/iterations:1\n"
+ "BM_string_memset/7/1/iterations:1\n"
+ "BM_string_memset/7/2/iterations:1\n"
+ "BM_string_memset/7/4/iterations:1\n"
+ "BM_string_memset/7/8/iterations:1\n"
+ "BM_string_memset/7/16/iterations:1\n"
+ "BM_string_memset/7/32/iterations:1\n"
+ "BM_string_memset/8/0/iterations:1\n"
+ "BM_string_memset/8/1/iterations:1\n"
+ "BM_string_memset/8/2/iterations:1\n"
+ "BM_string_memset/8/4/iterations:1\n"
+ "BM_string_memset/8/8/iterations:1\n"
+ "BM_string_memset/8/16/iterations:1\n"
+ "BM_string_memset/8/32/iterations:1\n"
+ "BM_string_memset/9/0/iterations:1\n"
+ "BM_string_memset/9/1/iterations:1\n"
+ "BM_string_memset/9/2/iterations:1\n"
+ "BM_string_memset/9/4/iterations:1\n"
+ "BM_string_memset/9/8/iterations:1\n"
+ "BM_string_memset/9/16/iterations:1\n"
+ "BM_string_memset/9/32/iterations:1\n"
+ "BM_string_memset/10/0/iterations:1\n"
+ "BM_string_memset/10/1/iterations:1\n"
+ "BM_string_memset/10/2/iterations:1\n"
+ "BM_string_memset/10/4/iterations:1\n"
+ "BM_string_memset/10/8/iterations:1\n"
+ "BM_string_memset/10/16/iterations:1\n"
+ "BM_string_memset/10/32/iterations:1\n"
+ "BM_string_memset/11/0/iterations:1\n"
+ "BM_string_memset/11/1/iterations:1\n"
+ "BM_string_memset/11/2/iterations:1\n"
+ "BM_string_memset/11/4/iterations:1\n"
+ "BM_string_memset/11/8/iterations:1\n"
+ "BM_string_memset/11/16/iterations:1\n"
+ "BM_string_memset/11/32/iterations:1\n"
+ "BM_string_memset/12/0/iterations:1\n"
+ "BM_string_memset/12/1/iterations:1\n"
+ "BM_string_memset/12/2/iterations:1\n"
+ "BM_string_memset/12/4/iterations:1\n"
+ "BM_string_memset/12/8/iterations:1\n"
+ "BM_string_memset/12/16/iterations:1\n"
+ "BM_string_memset/12/32/iterations:1\n"
+ "BM_string_memset/13/0/iterations:1\n"
+ "BM_string_memset/13/1/iterations:1\n"
+ "BM_string_memset/13/2/iterations:1\n"
+ "BM_string_memset/13/4/iterations:1\n"
+ "BM_string_memset/13/8/iterations:1\n"
+ "BM_string_memset/13/16/iterations:1\n"
+ "BM_string_memset/13/32/iterations:1\n"
+ "BM_string_memset/14/0/iterations:1\n"
+ "BM_string_memset/14/1/iterations:1\n"
+ "BM_string_memset/14/2/iterations:1\n"
+ "BM_string_memset/14/4/iterations:1\n"
+ "BM_string_memset/14/8/iterations:1\n"
+ "BM_string_memset/14/16/iterations:1\n"
+ "BM_string_memset/14/32/iterations:1\n"
+ "BM_string_memset/15/0/iterations:1\n"
+ "BM_string_memset/15/1/iterations:1\n"
+ "BM_string_memset/15/2/iterations:1\n"
+ "BM_string_memset/15/4/iterations:1\n"
+ "BM_string_memset/15/8/iterations:1\n"
+ "BM_string_memset/15/16/iterations:1\n"
+ "BM_string_memset/15/32/iterations:1\n"
+ "BM_string_memset/16/0/iterations:1\n"
+ "BM_string_memset/16/1/iterations:1\n"
+ "BM_string_memset/16/2/iterations:1\n"
+ "BM_string_memset/16/4/iterations:1\n"
+ "BM_string_memset/16/8/iterations:1\n"
+ "BM_string_memset/16/16/iterations:1\n"
+ "BM_string_memset/16/32/iterations:1\n"
+ "BM_string_memset/24/0/iterations:1\n"
+ "BM_string_memset/24/1/iterations:1\n"
+ "BM_string_memset/24/2/iterations:1\n"
+ "BM_string_memset/24/4/iterations:1\n"
+ "BM_string_memset/24/8/iterations:1\n"
+ "BM_string_memset/24/16/iterations:1\n"
+ "BM_string_memset/24/32/iterations:1\n"
+ "BM_string_memset/32/0/iterations:1\n"
+ "BM_string_memset/32/1/iterations:1\n"
+ "BM_string_memset/32/2/iterations:1\n"
+ "BM_string_memset/32/4/iterations:1\n"
+ "BM_string_memset/32/8/iterations:1\n"
+ "BM_string_memset/32/16/iterations:1\n"
+ "BM_string_memset/32/32/iterations:1\n"
+ "BM_string_memset/40/0/iterations:1\n"
+ "BM_string_memset/40/1/iterations:1\n"
+ "BM_string_memset/40/2/iterations:1\n"
+ "BM_string_memset/40/4/iterations:1\n"
+ "BM_string_memset/40/8/iterations:1\n"
+ "BM_string_memset/40/16/iterations:1\n"
+ "BM_string_memset/40/32/iterations:1\n"
+ "BM_string_memset/48/0/iterations:1\n"
+ "BM_string_memset/48/1/iterations:1\n"
+ "BM_string_memset/48/2/iterations:1\n"
+ "BM_string_memset/48/4/iterations:1\n"
+ "BM_string_memset/48/8/iterations:1\n"
+ "BM_string_memset/48/16/iterations:1\n"
+ "BM_string_memset/48/32/iterations:1\n"
+ "BM_string_memset/56/0/iterations:1\n"
+ "BM_string_memset/56/1/iterations:1\n"
+ "BM_string_memset/56/2/iterations:1\n"
+ "BM_string_memset/56/4/iterations:1\n"
+ "BM_string_memset/56/8/iterations:1\n"
+ "BM_string_memset/56/16/iterations:1\n"
+ "BM_string_memset/56/32/iterations:1\n"
+ "BM_string_memset/64/0/iterations:1\n"
+ "BM_string_memset/64/1/iterations:1\n"
+ "BM_string_memset/64/2/iterations:1\n"
+ "BM_string_memset/64/4/iterations:1\n"
+ "BM_string_memset/64/8/iterations:1\n"
+ "BM_string_memset/64/16/iterations:1\n"
+ "BM_string_memset/64/32/iterations:1\n"
+ "BM_string_memset/72/0/iterations:1\n"
+ "BM_string_memset/72/1/iterations:1\n"
+ "BM_string_memset/72/2/iterations:1\n"
+ "BM_string_memset/72/4/iterations:1\n"
+ "BM_string_memset/72/8/iterations:1\n"
+ "BM_string_memset/72/16/iterations:1\n"
+ "BM_string_memset/72/32/iterations:1\n"
+ "BM_string_memset/80/0/iterations:1\n"
+ "BM_string_memset/80/1/iterations:1\n"
+ "BM_string_memset/80/2/iterations:1\n"
+ "BM_string_memset/80/4/iterations:1\n"
+ "BM_string_memset/80/8/iterations:1\n"
+ "BM_string_memset/80/16/iterations:1\n"
+ "BM_string_memset/80/32/iterations:1\n"
+ "BM_string_memset/88/0/iterations:1\n"
+ "BM_string_memset/88/1/iterations:1\n"
+ "BM_string_memset/88/2/iterations:1\n"
+ "BM_string_memset/88/4/iterations:1\n"
+ "BM_string_memset/88/8/iterations:1\n"
+ "BM_string_memset/88/16/iterations:1\n"
+ "BM_string_memset/88/32/iterations:1\n"
+ "BM_string_memset/96/0/iterations:1\n"
+ "BM_string_memset/96/1/iterations:1\n"
+ "BM_string_memset/96/2/iterations:1\n"
+ "BM_string_memset/96/4/iterations:1\n"
+ "BM_string_memset/96/8/iterations:1\n"
+ "BM_string_memset/96/16/iterations:1\n"
+ "BM_string_memset/96/32/iterations:1\n"
+ "BM_string_memset/104/0/iterations:1\n"
+ "BM_string_memset/104/1/iterations:1\n"
+ "BM_string_memset/104/2/iterations:1\n"
+ "BM_string_memset/104/4/iterations:1\n"
+ "BM_string_memset/104/8/iterations:1\n"
+ "BM_string_memset/104/16/iterations:1\n"
+ "BM_string_memset/104/32/iterations:1\n"
+ "BM_string_memset/112/0/iterations:1\n"
+ "BM_string_memset/112/1/iterations:1\n"
+ "BM_string_memset/112/2/iterations:1\n"
+ "BM_string_memset/112/4/iterations:1\n"
+ "BM_string_memset/112/8/iterations:1\n"
+ "BM_string_memset/112/16/iterations:1\n"
+ "BM_string_memset/112/32/iterations:1\n"
+ "BM_string_memset/120/0/iterations:1\n"
+ "BM_string_memset/120/1/iterations:1\n"
+ "BM_string_memset/120/2/iterations:1\n"
+ "BM_string_memset/120/4/iterations:1\n"
+ "BM_string_memset/120/8/iterations:1\n"
+ "BM_string_memset/120/16/iterations:1\n"
+ "BM_string_memset/120/32/iterations:1\n"
+ "BM_string_memset/128/0/iterations:1\n"
+ "BM_string_memset/128/1/iterations:1\n"
+ "BM_string_memset/128/2/iterations:1\n"
+ "BM_string_memset/128/4/iterations:1\n"
+ "BM_string_memset/128/8/iterations:1\n"
+ "BM_string_memset/128/16/iterations:1\n"
+ "BM_string_memset/128/32/iterations:1\n"
+ "BM_string_memset/136/0/iterations:1\n"
+ "BM_string_memset/136/1/iterations:1\n"
+ "BM_string_memset/136/2/iterations:1\n"
+ "BM_string_memset/136/4/iterations:1\n"
+ "BM_string_memset/136/8/iterations:1\n"
+ "BM_string_memset/136/16/iterations:1\n"
+ "BM_string_memset/136/32/iterations:1\n"
+ "BM_string_memset/144/0/iterations:1\n"
+ "BM_string_memset/144/1/iterations:1\n"
+ "BM_string_memset/144/2/iterations:1\n"
+ "BM_string_memset/144/4/iterations:1\n"
+ "BM_string_memset/144/8/iterations:1\n"
+ "BM_string_memset/144/16/iterations:1\n"
+ "BM_string_memset/144/32/iterations:1\n"
+ "BM_string_memset/160/0/iterations:1\n"
+ "BM_string_memset/160/1/iterations:1\n"
+ "BM_string_memset/160/2/iterations:1\n"
+ "BM_string_memset/160/4/iterations:1\n"
+ "BM_string_memset/160/8/iterations:1\n"
+ "BM_string_memset/160/16/iterations:1\n"
+ "BM_string_memset/160/32/iterations:1\n"
+ "BM_string_memset/176/0/iterations:1\n"
+ "BM_string_memset/176/1/iterations:1\n"
+ "BM_string_memset/176/2/iterations:1\n"
+ "BM_string_memset/176/4/iterations:1\n"
+ "BM_string_memset/176/8/iterations:1\n"
+ "BM_string_memset/176/16/iterations:1\n"
+ "BM_string_memset/176/32/iterations:1\n"
+ "BM_string_memset/192/0/iterations:1\n"
+ "BM_string_memset/192/1/iterations:1\n"
+ "BM_string_memset/192/2/iterations:1\n"
+ "BM_string_memset/192/4/iterations:1\n"
+ "BM_string_memset/192/8/iterations:1\n"
+ "BM_string_memset/192/16/iterations:1\n"
+ "BM_string_memset/192/32/iterations:1\n"
+ "BM_string_memset/208/0/iterations:1\n"
+ "BM_string_memset/208/1/iterations:1\n"
+ "BM_string_memset/208/2/iterations:1\n"
+ "BM_string_memset/208/4/iterations:1\n"
+ "BM_string_memset/208/8/iterations:1\n"
+ "BM_string_memset/208/16/iterations:1\n"
+ "BM_string_memset/208/32/iterations:1\n"
+ "BM_string_memset/224/0/iterations:1\n"
+ "BM_string_memset/224/1/iterations:1\n"
+ "BM_string_memset/224/2/iterations:1\n"
+ "BM_string_memset/224/4/iterations:1\n"
+ "BM_string_memset/224/8/iterations:1\n"
+ "BM_string_memset/224/16/iterations:1\n"
+ "BM_string_memset/224/32/iterations:1\n"
+ "BM_string_memset/240/0/iterations:1\n"
+ "BM_string_memset/240/1/iterations:1\n"
+ "BM_string_memset/240/2/iterations:1\n"
+ "BM_string_memset/240/4/iterations:1\n"
+ "BM_string_memset/240/8/iterations:1\n"
+ "BM_string_memset/240/16/iterations:1\n"
+ "BM_string_memset/240/32/iterations:1\n"
+ "BM_string_memset/256/0/iterations:1\n"
+ "BM_string_memset/256/1/iterations:1\n"
+ "BM_string_memset/256/2/iterations:1\n"
+ "BM_string_memset/256/4/iterations:1\n"
+ "BM_string_memset/256/8/iterations:1\n"
+ "BM_string_memset/256/16/iterations:1\n"
+ "BM_string_memset/256/32/iterations:1\n"
+ "BM_string_memset/512/0/iterations:1\n"
+ "BM_string_memset/512/1/iterations:1\n"
+ "BM_string_memset/512/2/iterations:1\n"
+ "BM_string_memset/512/4/iterations:1\n"
+ "BM_string_memset/512/8/iterations:1\n"
+ "BM_string_memset/512/16/iterations:1\n"
+ "BM_string_memset/512/32/iterations:1\n"
+ "BM_string_memset/1024/0/iterations:1\n"
+ "BM_string_memset/1024/1/iterations:1\n"
+ "BM_string_memset/1024/2/iterations:1\n"
+ "BM_string_memset/1024/4/iterations:1\n"
+ "BM_string_memset/1024/8/iterations:1\n"
+ "BM_string_memset/1024/16/iterations:1\n"
+ "BM_string_memset/1024/32/iterations:1\n"
+ "BM_string_memset/8192/0/iterations:1\n"
+ "BM_string_memset/8192/1/iterations:1\n"
+ "BM_string_memset/8192/2/iterations:1\n"
+ "BM_string_memset/8192/4/iterations:1\n"
+ "BM_string_memset/8192/8/iterations:1\n"
+ "BM_string_memset/8192/16/iterations:1\n"
+ "BM_string_memset/8192/32/iterations:1\n"
+ "BM_string_memset/16384/0/iterations:1\n"
+ "BM_string_memset/16384/1/iterations:1\n"
+ "BM_string_memset/16384/2/iterations:1\n"
+ "BM_string_memset/16384/4/iterations:1\n"
+ "BM_string_memset/16384/8/iterations:1\n"
+ "BM_string_memset/16384/16/iterations:1\n"
+ "BM_string_memset/16384/32/iterations:1\n"
+ "BM_string_memset/32768/0/iterations:1\n"
+ "BM_string_memset/32768/1/iterations:1\n"
+ "BM_string_memset/32768/2/iterations:1\n"
+ "BM_string_memset/32768/4/iterations:1\n"
+ "BM_string_memset/32768/8/iterations:1\n"
+ "BM_string_memset/32768/16/iterations:1\n"
+ "BM_string_memset/32768/32/iterations:1\n"
+ "BM_string_memset/65536/0/iterations:1\n"
+ "BM_string_memset/65536/1/iterations:1\n"
+ "BM_string_memset/65536/2/iterations:1\n"
+ "BM_string_memset/65536/4/iterations:1\n"
+ "BM_string_memset/65536/8/iterations:1\n"
+ "BM_string_memset/65536/16/iterations:1\n"
+ "BM_string_memset/65536/32/iterations:1\n"
+ "BM_string_memset/131072/0/iterations:1\n"
+ "BM_string_memset/131072/1/iterations:1\n"
+ "BM_string_memset/131072/2/iterations:1\n"
+ "BM_string_memset/131072/4/iterations:1\n"
+ "BM_string_memset/131072/8/iterations:1\n"
+ "BM_string_memset/131072/16/iterations:1\n"
+ "BM_string_memset/131072/32/iterations:1\n"
+ "BM_string_memset/262144/0/iterations:1\n"
+ "BM_string_memset/262144/1/iterations:1\n"
+ "BM_string_memset/262144/2/iterations:1\n"
+ "BM_string_memset/262144/4/iterations:1\n"
+ "BM_string_memset/262144/8/iterations:1\n"
+ "BM_string_memset/262144/16/iterations:1\n"
+ "BM_string_memset/262144/32/iterations:1\n"
+ "BM_string_memset/524288/0/iterations:1\n"
+ "BM_string_memset/524288/1/iterations:1\n"
+ "BM_string_memset/524288/2/iterations:1\n"
+ "BM_string_memset/524288/4/iterations:1\n"
+ "BM_string_memset/524288/8/iterations:1\n"
+ "BM_string_memset/524288/16/iterations:1\n"
+ "BM_string_memset/524288/32/iterations:1\n"
+ "BM_string_memset/1048576/0/iterations:1\n"
+ "BM_string_memset/1048576/1/iterations:1\n"
+ "BM_string_memset/1048576/2/iterations:1\n"
+ "BM_string_memset/1048576/4/iterations:1\n"
+ "BM_string_memset/1048576/8/iterations:1\n"
+ "BM_string_memset/1048576/16/iterations:1\n"
+ "BM_string_memset/1048576/32/iterations:1\n"
+ "BM_string_memset/2097152/0/iterations:1\n"
+ "BM_string_memset/2097152/1/iterations:1\n"
+ "BM_string_memset/2097152/2/iterations:1\n"
+ "BM_string_memset/2097152/4/iterations:1\n"
+ "BM_string_memset/2097152/8/iterations:1\n"
+ "BM_string_memset/2097152/16/iterations:1\n"
+ "BM_string_memset/2097152/32/iterations:1\n";
+
+ Verify(expected, 0,
+ std::vector<const char*>{GetBionicXmlArg("test_alignment_onebuf.xml").c_str()});
+}
+
+TEST_F(SystemTests, alignment_onebuf_manual) {
+ std::string expected =
+ "BM_string_strlen/115/0/iterations:1\n"
+ "BM_string_memset/1024/1/iterations:1\n"
+ "BM_string_strlen/2048/4/iterations:1\n"
+ "BM_string_memset/4000/32/iterations:1\n";
+
+ Verify(expected, 0,
+ std::vector<const char*>{GetBionicXmlArg("test_alignment_onebuf_manual.xml").c_str()});
+}
+
+TEST_F(SystemTests, alignment_twobuf) {
+ std::string expected =
+ "BM_string_strcpy/8/0/0/iterations:1\n"
+ "BM_string_strcpy/64/0/0/iterations:1\n"
+ "BM_string_strcpy/512/0/0/iterations:1\n"
+ "BM_string_strcpy/1024/0/0/iterations:1\n"
+ "BM_string_strcpy/8192/0/0/iterations:1\n"
+ "BM_string_strcpy/16384/0/0/iterations:1\n"
+ "BM_string_strcpy/32768/0/0/iterations:1\n"
+ "BM_string_strcpy/65536/0/0/iterations:1\n"
+ "BM_string_strcpy/131072/0/0/iterations:1\n"
+ "BM_string_memcpy/1/0/0/iterations:1\n"
+ "BM_string_memcpy/2/0/0/iterations:1\n"
+ "BM_string_memcpy/3/0/0/iterations:1\n"
+ "BM_string_memcpy/4/0/0/iterations:1\n"
+ "BM_string_memcpy/5/0/0/iterations:1\n"
+ "BM_string_memcpy/6/0/0/iterations:1\n"
+ "BM_string_memcpy/7/0/0/iterations:1\n"
+ "BM_string_memcpy/8/0/0/iterations:1\n"
+ "BM_string_memcpy/9/0/0/iterations:1\n"
+ "BM_string_memcpy/10/0/0/iterations:1\n"
+ "BM_string_memcpy/11/0/0/iterations:1\n"
+ "BM_string_memcpy/12/0/0/iterations:1\n"
+ "BM_string_memcpy/13/0/0/iterations:1\n"
+ "BM_string_memcpy/14/0/0/iterations:1\n"
+ "BM_string_memcpy/15/0/0/iterations:1\n"
+ "BM_string_memcpy/16/0/0/iterations:1\n"
+ "BM_string_memcpy/24/0/0/iterations:1\n"
+ "BM_string_memcpy/32/0/0/iterations:1\n"
+ "BM_string_memcpy/40/0/0/iterations:1\n"
+ "BM_string_memcpy/48/0/0/iterations:1\n"
+ "BM_string_memcpy/56/0/0/iterations:1\n"
+ "BM_string_memcpy/64/0/0/iterations:1\n"
+ "BM_string_memcpy/72/0/0/iterations:1\n"
+ "BM_string_memcpy/80/0/0/iterations:1\n"
+ "BM_string_memcpy/88/0/0/iterations:1\n"
+ "BM_string_memcpy/96/0/0/iterations:1\n"
+ "BM_string_memcpy/104/0/0/iterations:1\n"
+ "BM_string_memcpy/112/0/0/iterations:1\n"
+ "BM_string_memcpy/120/0/0/iterations:1\n"
+ "BM_string_memcpy/128/0/0/iterations:1\n"
+ "BM_string_memcpy/136/0/0/iterations:1\n"
+ "BM_string_memcpy/144/0/0/iterations:1\n"
+ "BM_string_memcpy/160/0/0/iterations:1\n"
+ "BM_string_memcpy/176/0/0/iterations:1\n"
+ "BM_string_memcpy/192/0/0/iterations:1\n"
+ "BM_string_memcpy/208/0/0/iterations:1\n"
+ "BM_string_memcpy/224/0/0/iterations:1\n"
+ "BM_string_memcpy/240/0/0/iterations:1\n"
+ "BM_string_memcpy/256/0/0/iterations:1\n"
+ "BM_string_strcpy/512/0/0/iterations:1\n"
+ "BM_string_strcpy/1024/0/0/iterations:1\n"
+ "BM_string_strcpy/8192/0/0/iterations:1\n"
+ "BM_string_strcpy/16384/0/0/iterations:1\n"
+ "BM_string_strcpy/32768/0/0/iterations:1\n"
+ "BM_string_strcpy/65536/0/0/iterations:1\n"
+ "BM_string_strcpy/131072/0/0/iterations:1\n"
+ "BM_string_memcpy/262144/0/0/iterations:1\n"
+ "BM_string_memcpy/524288/0/0/iterations:1\n"
+ "BM_string_memcpy/1048576/0/0/iterations:1\n"
+ "BM_string_memcpy/2097152/0/0/iterations:1\n"
+ "BM_string_strcpy/1/0/0/iterations:1\n"
+ "BM_string_strcpy/2/0/0/iterations:1\n"
+ "BM_string_strcpy/3/0/0/iterations:1\n"
+ "BM_string_strcpy/4/0/0/iterations:1\n"
+ "BM_string_strcpy/5/0/0/iterations:1\n"
+ "BM_string_strcpy/6/0/0/iterations:1\n"
+ "BM_string_strcpy/7/0/0/iterations:1\n"
+ "BM_string_strcpy/8/0/0/iterations:1\n"
+ "BM_string_strcpy/9/0/0/iterations:1\n"
+ "BM_string_strcpy/10/0/0/iterations:1\n"
+ "BM_string_strcpy/11/0/0/iterations:1\n"
+ "BM_string_strcpy/12/0/0/iterations:1\n"
+ "BM_string_strcpy/13/0/0/iterations:1\n"
+ "BM_string_strcpy/14/0/0/iterations:1\n"
+ "BM_string_strcpy/15/0/0/iterations:1\n"
+ "BM_string_strcpy/16/0/0/iterations:1\n"
+ "BM_string_strcpy/24/0/0/iterations:1\n"
+ "BM_string_strcpy/32/0/0/iterations:1\n"
+ "BM_string_strcpy/40/0/0/iterations:1\n"
+ "BM_string_strcpy/48/0/0/iterations:1\n"
+ "BM_string_strcpy/56/0/0/iterations:1\n"
+ "BM_string_strcpy/64/0/0/iterations:1\n"
+ "BM_string_strcpy/72/0/0/iterations:1\n"
+ "BM_string_strcpy/80/0/0/iterations:1\n"
+ "BM_string_strcpy/88/0/0/iterations:1\n"
+ "BM_string_strcpy/96/0/0/iterations:1\n"
+ "BM_string_strcpy/104/0/0/iterations:1\n"
+ "BM_string_strcpy/112/0/0/iterations:1\n"
+ "BM_string_strcpy/120/0/0/iterations:1\n"
+ "BM_string_strcpy/128/0/0/iterations:1\n"
+ "BM_string_strcpy/136/0/0/iterations:1\n"
+ "BM_string_strcpy/144/0/0/iterations:1\n"
+ "BM_string_strcpy/160/0/0/iterations:1\n"
+ "BM_string_strcpy/176/0/0/iterations:1\n"
+ "BM_string_strcpy/192/0/0/iterations:1\n"
+ "BM_string_strcpy/208/0/0/iterations:1\n"
+ "BM_string_strcpy/224/0/0/iterations:1\n"
+ "BM_string_strcpy/240/0/0/iterations:1\n"
+ "BM_string_strcpy/256/0/0/iterations:1\n"
+ "BM_string_strcpy/512/0/0/iterations:1\n"
+ "BM_string_strcpy/1024/0/0/iterations:1\n"
+ "BM_string_strcpy/8192/0/0/iterations:1\n"
+ "BM_string_strcpy/16384/0/0/iterations:1\n"
+ "BM_string_strcpy/32768/0/0/iterations:1\n"
+ "BM_string_strcpy/65536/0/0/iterations:1\n"
+ "BM_string_strcpy/131072/0/0/iterations:1\n"
+ "BM_string_strcpy/262144/0/0/iterations:1\n"
+ "BM_string_strcpy/524288/0/0/iterations:1\n"
+ "BM_string_strcpy/1048576/0/0/iterations:1\n"
+ "BM_string_strcpy/2097152/0/0/iterations:1\n"
+ "BM_string_memcpy/1/0/0/iterations:1\n"
+ "BM_string_memcpy/1/1/1/iterations:1\n"
+ "BM_string_memcpy/1/1/2/iterations:1\n"
+ "BM_string_memcpy/1/1/4/iterations:1\n"
+ "BM_string_memcpy/1/1/8/iterations:1\n"
+ "BM_string_memcpy/1/1/16/iterations:1\n"
+ "BM_string_memcpy/1/1/32/iterations:1\n"
+ "BM_string_memcpy/1/2/1/iterations:1\n"
+ "BM_string_memcpy/1/2/2/iterations:1\n"
+ "BM_string_memcpy/1/2/4/iterations:1\n"
+ "BM_string_memcpy/1/2/8/iterations:1\n"
+ "BM_string_memcpy/1/2/16/iterations:1\n"
+ "BM_string_memcpy/1/2/32/iterations:1\n"
+ "BM_string_memcpy/1/4/1/iterations:1\n"
+ "BM_string_memcpy/1/4/2/iterations:1\n"
+ "BM_string_memcpy/1/4/4/iterations:1\n"
+ "BM_string_memcpy/1/4/8/iterations:1\n"
+ "BM_string_memcpy/1/4/16/iterations:1\n"
+ "BM_string_memcpy/1/4/32/iterations:1\n"
+ "BM_string_memcpy/1/8/1/iterations:1\n"
+ "BM_string_memcpy/1/8/2/iterations:1\n"
+ "BM_string_memcpy/1/8/4/iterations:1\n"
+ "BM_string_memcpy/1/8/8/iterations:1\n"
+ "BM_string_memcpy/1/8/16/iterations:1\n"
+ "BM_string_memcpy/1/8/32/iterations:1\n"
+ "BM_string_memcpy/1/16/1/iterations:1\n"
+ "BM_string_memcpy/1/16/2/iterations:1\n"
+ "BM_string_memcpy/1/16/4/iterations:1\n"
+ "BM_string_memcpy/1/16/8/iterations:1\n"
+ "BM_string_memcpy/1/16/16/iterations:1\n"
+ "BM_string_memcpy/1/16/32/iterations:1\n"
+ "BM_string_memcpy/1/32/1/iterations:1\n"
+ "BM_string_memcpy/1/32/2/iterations:1\n"
+ "BM_string_memcpy/1/32/4/iterations:1\n"
+ "BM_string_memcpy/1/32/8/iterations:1\n"
+ "BM_string_memcpy/1/32/16/iterations:1\n"
+ "BM_string_memcpy/1/32/32/iterations:1\n"
+ "BM_string_memcpy/2/0/0/iterations:1\n"
+ "BM_string_memcpy/2/1/1/iterations:1\n"
+ "BM_string_memcpy/2/1/2/iterations:1\n"
+ "BM_string_memcpy/2/1/4/iterations:1\n"
+ "BM_string_memcpy/2/1/8/iterations:1\n"
+ "BM_string_memcpy/2/1/16/iterations:1\n"
+ "BM_string_memcpy/2/1/32/iterations:1\n"
+ "BM_string_memcpy/2/2/1/iterations:1\n"
+ "BM_string_memcpy/2/2/2/iterations:1\n"
+ "BM_string_memcpy/2/2/4/iterations:1\n"
+ "BM_string_memcpy/2/2/8/iterations:1\n"
+ "BM_string_memcpy/2/2/16/iterations:1\n"
+ "BM_string_memcpy/2/2/32/iterations:1\n"
+ "BM_string_memcpy/2/4/1/iterations:1\n"
+ "BM_string_memcpy/2/4/2/iterations:1\n"
+ "BM_string_memcpy/2/4/4/iterations:1\n"
+ "BM_string_memcpy/2/4/8/iterations:1\n"
+ "BM_string_memcpy/2/4/16/iterations:1\n"
+ "BM_string_memcpy/2/4/32/iterations:1\n"
+ "BM_string_memcpy/2/8/1/iterations:1\n"
+ "BM_string_memcpy/2/8/2/iterations:1\n"
+ "BM_string_memcpy/2/8/4/iterations:1\n"
+ "BM_string_memcpy/2/8/8/iterations:1\n"
+ "BM_string_memcpy/2/8/16/iterations:1\n"
+ "BM_string_memcpy/2/8/32/iterations:1\n"
+ "BM_string_memcpy/2/16/1/iterations:1\n"
+ "BM_string_memcpy/2/16/2/iterations:1\n"
+ "BM_string_memcpy/2/16/4/iterations:1\n"
+ "BM_string_memcpy/2/16/8/iterations:1\n"
+ "BM_string_memcpy/2/16/16/iterations:1\n"
+ "BM_string_memcpy/2/16/32/iterations:1\n"
+ "BM_string_memcpy/2/32/1/iterations:1\n"
+ "BM_string_memcpy/2/32/2/iterations:1\n"
+ "BM_string_memcpy/2/32/4/iterations:1\n"
+ "BM_string_memcpy/2/32/8/iterations:1\n"
+ "BM_string_memcpy/2/32/16/iterations:1\n"
+ "BM_string_memcpy/2/32/32/iterations:1\n"
+ "BM_string_memcpy/3/0/0/iterations:1\n"
+ "BM_string_memcpy/3/1/1/iterations:1\n"
+ "BM_string_memcpy/3/1/2/iterations:1\n"
+ "BM_string_memcpy/3/1/4/iterations:1\n"
+ "BM_string_memcpy/3/1/8/iterations:1\n"
+ "BM_string_memcpy/3/1/16/iterations:1\n"
+ "BM_string_memcpy/3/1/32/iterations:1\n"
+ "BM_string_memcpy/3/2/1/iterations:1\n"
+ "BM_string_memcpy/3/2/2/iterations:1\n"
+ "BM_string_memcpy/3/2/4/iterations:1\n"
+ "BM_string_memcpy/3/2/8/iterations:1\n"
+ "BM_string_memcpy/3/2/16/iterations:1\n"
+ "BM_string_memcpy/3/2/32/iterations:1\n"
+ "BM_string_memcpy/3/4/1/iterations:1\n"
+ "BM_string_memcpy/3/4/2/iterations:1\n"
+ "BM_string_memcpy/3/4/4/iterations:1\n"
+ "BM_string_memcpy/3/4/8/iterations:1\n"
+ "BM_string_memcpy/3/4/16/iterations:1\n"
+ "BM_string_memcpy/3/4/32/iterations:1\n"
+ "BM_string_memcpy/3/8/1/iterations:1\n"
+ "BM_string_memcpy/3/8/2/iterations:1\n"
+ "BM_string_memcpy/3/8/4/iterations:1\n"
+ "BM_string_memcpy/3/8/8/iterations:1\n"
+ "BM_string_memcpy/3/8/16/iterations:1\n"
+ "BM_string_memcpy/3/8/32/iterations:1\n"
+ "BM_string_memcpy/3/16/1/iterations:1\n"
+ "BM_string_memcpy/3/16/2/iterations:1\n"
+ "BM_string_memcpy/3/16/4/iterations:1\n"
+ "BM_string_memcpy/3/16/8/iterations:1\n"
+ "BM_string_memcpy/3/16/16/iterations:1\n"
+ "BM_string_memcpy/3/16/32/iterations:1\n"
+ "BM_string_memcpy/3/32/1/iterations:1\n"
+ "BM_string_memcpy/3/32/2/iterations:1\n"
+ "BM_string_memcpy/3/32/4/iterations:1\n"
+ "BM_string_memcpy/3/32/8/iterations:1\n"
+ "BM_string_memcpy/3/32/16/iterations:1\n"
+ "BM_string_memcpy/3/32/32/iterations:1\n"
+ "BM_string_memcpy/4/0/0/iterations:1\n"
+ "BM_string_memcpy/4/1/1/iterations:1\n"
+ "BM_string_memcpy/4/1/2/iterations:1\n"
+ "BM_string_memcpy/4/1/4/iterations:1\n"
+ "BM_string_memcpy/4/1/8/iterations:1\n"
+ "BM_string_memcpy/4/1/16/iterations:1\n"
+ "BM_string_memcpy/4/1/32/iterations:1\n"
+ "BM_string_memcpy/4/2/1/iterations:1\n"
+ "BM_string_memcpy/4/2/2/iterations:1\n"
+ "BM_string_memcpy/4/2/4/iterations:1\n"
+ "BM_string_memcpy/4/2/8/iterations:1\n"
+ "BM_string_memcpy/4/2/16/iterations:1\n"
+ "BM_string_memcpy/4/2/32/iterations:1\n"
+ "BM_string_memcpy/4/4/1/iterations:1\n"
+ "BM_string_memcpy/4/4/2/iterations:1\n"
+ "BM_string_memcpy/4/4/4/iterations:1\n"
+ "BM_string_memcpy/4/4/8/iterations:1\n"
+ "BM_string_memcpy/4/4/16/iterations:1\n"
+ "BM_string_memcpy/4/4/32/iterations:1\n"
+ "BM_string_memcpy/4/8/1/iterations:1\n"
+ "BM_string_memcpy/4/8/2/iterations:1\n"
+ "BM_string_memcpy/4/8/4/iterations:1\n"
+ "BM_string_memcpy/4/8/8/iterations:1\n"
+ "BM_string_memcpy/4/8/16/iterations:1\n"
+ "BM_string_memcpy/4/8/32/iterations:1\n"
+ "BM_string_memcpy/4/16/1/iterations:1\n"
+ "BM_string_memcpy/4/16/2/iterations:1\n"
+ "BM_string_memcpy/4/16/4/iterations:1\n"
+ "BM_string_memcpy/4/16/8/iterations:1\n"
+ "BM_string_memcpy/4/16/16/iterations:1\n"
+ "BM_string_memcpy/4/16/32/iterations:1\n"
+ "BM_string_memcpy/4/32/1/iterations:1\n"
+ "BM_string_memcpy/4/32/2/iterations:1\n"
+ "BM_string_memcpy/4/32/4/iterations:1\n"
+ "BM_string_memcpy/4/32/8/iterations:1\n"
+ "BM_string_memcpy/4/32/16/iterations:1\n"
+ "BM_string_memcpy/4/32/32/iterations:1\n"
+ "BM_string_memcpy/5/0/0/iterations:1\n"
+ "BM_string_memcpy/5/1/1/iterations:1\n"
+ "BM_string_memcpy/5/1/2/iterations:1\n"
+ "BM_string_memcpy/5/1/4/iterations:1\n"
+ "BM_string_memcpy/5/1/8/iterations:1\n"
+ "BM_string_memcpy/5/1/16/iterations:1\n"
+ "BM_string_memcpy/5/1/32/iterations:1\n"
+ "BM_string_memcpy/5/2/1/iterations:1\n"
+ "BM_string_memcpy/5/2/2/iterations:1\n"
+ "BM_string_memcpy/5/2/4/iterations:1\n"
+ "BM_string_memcpy/5/2/8/iterations:1\n"
+ "BM_string_memcpy/5/2/16/iterations:1\n"
+ "BM_string_memcpy/5/2/32/iterations:1\n"
+ "BM_string_memcpy/5/4/1/iterations:1\n"
+ "BM_string_memcpy/5/4/2/iterations:1\n"
+ "BM_string_memcpy/5/4/4/iterations:1\n"
+ "BM_string_memcpy/5/4/8/iterations:1\n"
+ "BM_string_memcpy/5/4/16/iterations:1\n"
+ "BM_string_memcpy/5/4/32/iterations:1\n"
+ "BM_string_memcpy/5/8/1/iterations:1\n"
+ "BM_string_memcpy/5/8/2/iterations:1\n"
+ "BM_string_memcpy/5/8/4/iterations:1\n"
+ "BM_string_memcpy/5/8/8/iterations:1\n"
+ "BM_string_memcpy/5/8/16/iterations:1\n"
+ "BM_string_memcpy/5/8/32/iterations:1\n"
+ "BM_string_memcpy/5/16/1/iterations:1\n"
+ "BM_string_memcpy/5/16/2/iterations:1\n"
+ "BM_string_memcpy/5/16/4/iterations:1\n"
+ "BM_string_memcpy/5/16/8/iterations:1\n"
+ "BM_string_memcpy/5/16/16/iterations:1\n"
+ "BM_string_memcpy/5/16/32/iterations:1\n"
+ "BM_string_memcpy/5/32/1/iterations:1\n"
+ "BM_string_memcpy/5/32/2/iterations:1\n"
+ "BM_string_memcpy/5/32/4/iterations:1\n"
+ "BM_string_memcpy/5/32/8/iterations:1\n"
+ "BM_string_memcpy/5/32/16/iterations:1\n"
+ "BM_string_memcpy/5/32/32/iterations:1\n"
+ "BM_string_memcpy/6/0/0/iterations:1\n"
+ "BM_string_memcpy/6/1/1/iterations:1\n"
+ "BM_string_memcpy/6/1/2/iterations:1\n"
+ "BM_string_memcpy/6/1/4/iterations:1\n"
+ "BM_string_memcpy/6/1/8/iterations:1\n"
+ "BM_string_memcpy/6/1/16/iterations:1\n"
+ "BM_string_memcpy/6/1/32/iterations:1\n"
+ "BM_string_memcpy/6/2/1/iterations:1\n"
+ "BM_string_memcpy/6/2/2/iterations:1\n"
+ "BM_string_memcpy/6/2/4/iterations:1\n"
+ "BM_string_memcpy/6/2/8/iterations:1\n"
+ "BM_string_memcpy/6/2/16/iterations:1\n"
+ "BM_string_memcpy/6/2/32/iterations:1\n"
+ "BM_string_memcpy/6/4/1/iterations:1\n"
+ "BM_string_memcpy/6/4/2/iterations:1\n"
+ "BM_string_memcpy/6/4/4/iterations:1\n"
+ "BM_string_memcpy/6/4/8/iterations:1\n"
+ "BM_string_memcpy/6/4/16/iterations:1\n"
+ "BM_string_memcpy/6/4/32/iterations:1\n"
+ "BM_string_memcpy/6/8/1/iterations:1\n"
+ "BM_string_memcpy/6/8/2/iterations:1\n"
+ "BM_string_memcpy/6/8/4/iterations:1\n"
+ "BM_string_memcpy/6/8/8/iterations:1\n"
+ "BM_string_memcpy/6/8/16/iterations:1\n"
+ "BM_string_memcpy/6/8/32/iterations:1\n"
+ "BM_string_memcpy/6/16/1/iterations:1\n"
+ "BM_string_memcpy/6/16/2/iterations:1\n"
+ "BM_string_memcpy/6/16/4/iterations:1\n"
+ "BM_string_memcpy/6/16/8/iterations:1\n"
+ "BM_string_memcpy/6/16/16/iterations:1\n"
+ "BM_string_memcpy/6/16/32/iterations:1\n"
+ "BM_string_memcpy/6/32/1/iterations:1\n"
+ "BM_string_memcpy/6/32/2/iterations:1\n"
+ "BM_string_memcpy/6/32/4/iterations:1\n"
+ "BM_string_memcpy/6/32/8/iterations:1\n"
+ "BM_string_memcpy/6/32/16/iterations:1\n"
+ "BM_string_memcpy/6/32/32/iterations:1\n"
+ "BM_string_memcpy/7/0/0/iterations:1\n"
+ "BM_string_memcpy/7/1/1/iterations:1\n"
+ "BM_string_memcpy/7/1/2/iterations:1\n"
+ "BM_string_memcpy/7/1/4/iterations:1\n"
+ "BM_string_memcpy/7/1/8/iterations:1\n"
+ "BM_string_memcpy/7/1/16/iterations:1\n"
+ "BM_string_memcpy/7/1/32/iterations:1\n"
+ "BM_string_memcpy/7/2/1/iterations:1\n"
+ "BM_string_memcpy/7/2/2/iterations:1\n"
+ "BM_string_memcpy/7/2/4/iterations:1\n"
+ "BM_string_memcpy/7/2/8/iterations:1\n"
+ "BM_string_memcpy/7/2/16/iterations:1\n"
+ "BM_string_memcpy/7/2/32/iterations:1\n"
+ "BM_string_memcpy/7/4/1/iterations:1\n"
+ "BM_string_memcpy/7/4/2/iterations:1\n"
+ "BM_string_memcpy/7/4/4/iterations:1\n"
+ "BM_string_memcpy/7/4/8/iterations:1\n"
+ "BM_string_memcpy/7/4/16/iterations:1\n"
+ "BM_string_memcpy/7/4/32/iterations:1\n"
+ "BM_string_memcpy/7/8/1/iterations:1\n"
+ "BM_string_memcpy/7/8/2/iterations:1\n"
+ "BM_string_memcpy/7/8/4/iterations:1\n"
+ "BM_string_memcpy/7/8/8/iterations:1\n"
+ "BM_string_memcpy/7/8/16/iterations:1\n"
+ "BM_string_memcpy/7/8/32/iterations:1\n"
+ "BM_string_memcpy/7/16/1/iterations:1\n"
+ "BM_string_memcpy/7/16/2/iterations:1\n"
+ "BM_string_memcpy/7/16/4/iterations:1\n"
+ "BM_string_memcpy/7/16/8/iterations:1\n"
+ "BM_string_memcpy/7/16/16/iterations:1\n"
+ "BM_string_memcpy/7/16/32/iterations:1\n"
+ "BM_string_memcpy/7/32/1/iterations:1\n"
+ "BM_string_memcpy/7/32/2/iterations:1\n"
+ "BM_string_memcpy/7/32/4/iterations:1\n"
+ "BM_string_memcpy/7/32/8/iterations:1\n"
+ "BM_string_memcpy/7/32/16/iterations:1\n"
+ "BM_string_memcpy/7/32/32/iterations:1\n"
+ "BM_string_memcpy/8/0/0/iterations:1\n"
+ "BM_string_memcpy/8/1/1/iterations:1\n"
+ "BM_string_memcpy/8/1/2/iterations:1\n"
+ "BM_string_memcpy/8/1/4/iterations:1\n"
+ "BM_string_memcpy/8/1/8/iterations:1\n"
+ "BM_string_memcpy/8/1/16/iterations:1\n"
+ "BM_string_memcpy/8/1/32/iterations:1\n"
+ "BM_string_memcpy/8/2/1/iterations:1\n"
+ "BM_string_memcpy/8/2/2/iterations:1\n"
+ "BM_string_memcpy/8/2/4/iterations:1\n"
+ "BM_string_memcpy/8/2/8/iterations:1\n"
+ "BM_string_memcpy/8/2/16/iterations:1\n"
+ "BM_string_memcpy/8/2/32/iterations:1\n"
+ "BM_string_memcpy/8/4/1/iterations:1\n"
+ "BM_string_memcpy/8/4/2/iterations:1\n"
+ "BM_string_memcpy/8/4/4/iterations:1\n"
+ "BM_string_memcpy/8/4/8/iterations:1\n"
+ "BM_string_memcpy/8/4/16/iterations:1\n"
+ "BM_string_memcpy/8/4/32/iterations:1\n"
+ "BM_string_memcpy/8/8/1/iterations:1\n"
+ "BM_string_memcpy/8/8/2/iterations:1\n"
+ "BM_string_memcpy/8/8/4/iterations:1\n"
+ "BM_string_memcpy/8/8/8/iterations:1\n"
+ "BM_string_memcpy/8/8/16/iterations:1\n"
+ "BM_string_memcpy/8/8/32/iterations:1\n"
+ "BM_string_memcpy/8/16/1/iterations:1\n"
+ "BM_string_memcpy/8/16/2/iterations:1\n"
+ "BM_string_memcpy/8/16/4/iterations:1\n"
+ "BM_string_memcpy/8/16/8/iterations:1\n"
+ "BM_string_memcpy/8/16/16/iterations:1\n"
+ "BM_string_memcpy/8/16/32/iterations:1\n"
+ "BM_string_memcpy/8/32/1/iterations:1\n"
+ "BM_string_memcpy/8/32/2/iterations:1\n"
+ "BM_string_memcpy/8/32/4/iterations:1\n"
+ "BM_string_memcpy/8/32/8/iterations:1\n"
+ "BM_string_memcpy/8/32/16/iterations:1\n"
+ "BM_string_memcpy/8/32/32/iterations:1\n"
+ "BM_string_memcpy/9/0/0/iterations:1\n"
+ "BM_string_memcpy/9/1/1/iterations:1\n"
+ "BM_string_memcpy/9/1/2/iterations:1\n"
+ "BM_string_memcpy/9/1/4/iterations:1\n"
+ "BM_string_memcpy/9/1/8/iterations:1\n"
+ "BM_string_memcpy/9/1/16/iterations:1\n"
+ "BM_string_memcpy/9/1/32/iterations:1\n"
+ "BM_string_memcpy/9/2/1/iterations:1\n"
+ "BM_string_memcpy/9/2/2/iterations:1\n"
+ "BM_string_memcpy/9/2/4/iterations:1\n"
+ "BM_string_memcpy/9/2/8/iterations:1\n"
+ "BM_string_memcpy/9/2/16/iterations:1\n"
+ "BM_string_memcpy/9/2/32/iterations:1\n"
+ "BM_string_memcpy/9/4/1/iterations:1\n"
+ "BM_string_memcpy/9/4/2/iterations:1\n"
+ "BM_string_memcpy/9/4/4/iterations:1\n"
+ "BM_string_memcpy/9/4/8/iterations:1\n"
+ "BM_string_memcpy/9/4/16/iterations:1\n"
+ "BM_string_memcpy/9/4/32/iterations:1\n"
+ "BM_string_memcpy/9/8/1/iterations:1\n"
+ "BM_string_memcpy/9/8/2/iterations:1\n"
+ "BM_string_memcpy/9/8/4/iterations:1\n"
+ "BM_string_memcpy/9/8/8/iterations:1\n"
+ "BM_string_memcpy/9/8/16/iterations:1\n"
+ "BM_string_memcpy/9/8/32/iterations:1\n"
+ "BM_string_memcpy/9/16/1/iterations:1\n"
+ "BM_string_memcpy/9/16/2/iterations:1\n"
+ "BM_string_memcpy/9/16/4/iterations:1\n"
+ "BM_string_memcpy/9/16/8/iterations:1\n"
+ "BM_string_memcpy/9/16/16/iterations:1\n"
+ "BM_string_memcpy/9/16/32/iterations:1\n"
+ "BM_string_memcpy/9/32/1/iterations:1\n"
+ "BM_string_memcpy/9/32/2/iterations:1\n"
+ "BM_string_memcpy/9/32/4/iterations:1\n"
+ "BM_string_memcpy/9/32/8/iterations:1\n"
+ "BM_string_memcpy/9/32/16/iterations:1\n"
+ "BM_string_memcpy/9/32/32/iterations:1\n"
+ "BM_string_memcpy/10/0/0/iterations:1\n"
+ "BM_string_memcpy/10/1/1/iterations:1\n"
+ "BM_string_memcpy/10/1/2/iterations:1\n"
+ "BM_string_memcpy/10/1/4/iterations:1\n"
+ "BM_string_memcpy/10/1/8/iterations:1\n"
+ "BM_string_memcpy/10/1/16/iterations:1\n"
+ "BM_string_memcpy/10/1/32/iterations:1\n"
+ "BM_string_memcpy/10/2/1/iterations:1\n"
+ "BM_string_memcpy/10/2/2/iterations:1\n"
+ "BM_string_memcpy/10/2/4/iterations:1\n"
+ "BM_string_memcpy/10/2/8/iterations:1\n"
+ "BM_string_memcpy/10/2/16/iterations:1\n"
+ "BM_string_memcpy/10/2/32/iterations:1\n"
+ "BM_string_memcpy/10/4/1/iterations:1\n"
+ "BM_string_memcpy/10/4/2/iterations:1\n"
+ "BM_string_memcpy/10/4/4/iterations:1\n"
+ "BM_string_memcpy/10/4/8/iterations:1\n"
+ "BM_string_memcpy/10/4/16/iterations:1\n"
+ "BM_string_memcpy/10/4/32/iterations:1\n"
+ "BM_string_memcpy/10/8/1/iterations:1\n"
+ "BM_string_memcpy/10/8/2/iterations:1\n"
+ "BM_string_memcpy/10/8/4/iterations:1\n"
+ "BM_string_memcpy/10/8/8/iterations:1\n"
+ "BM_string_memcpy/10/8/16/iterations:1\n"
+ "BM_string_memcpy/10/8/32/iterations:1\n"
+ "BM_string_memcpy/10/16/1/iterations:1\n"
+ "BM_string_memcpy/10/16/2/iterations:1\n"
+ "BM_string_memcpy/10/16/4/iterations:1\n"
+ "BM_string_memcpy/10/16/8/iterations:1\n"
+ "BM_string_memcpy/10/16/16/iterations:1\n"
+ "BM_string_memcpy/10/16/32/iterations:1\n"
+ "BM_string_memcpy/10/32/1/iterations:1\n"
+ "BM_string_memcpy/10/32/2/iterations:1\n"
+ "BM_string_memcpy/10/32/4/iterations:1\n"
+ "BM_string_memcpy/10/32/8/iterations:1\n"
+ "BM_string_memcpy/10/32/16/iterations:1\n"
+ "BM_string_memcpy/10/32/32/iterations:1\n"
+ "BM_string_memcpy/11/0/0/iterations:1\n"
+ "BM_string_memcpy/11/1/1/iterations:1\n"
+ "BM_string_memcpy/11/1/2/iterations:1\n"
+ "BM_string_memcpy/11/1/4/iterations:1\n"
+ "BM_string_memcpy/11/1/8/iterations:1\n"
+ "BM_string_memcpy/11/1/16/iterations:1\n"
+ "BM_string_memcpy/11/1/32/iterations:1\n"
+ "BM_string_memcpy/11/2/1/iterations:1\n"
+ "BM_string_memcpy/11/2/2/iterations:1\n"
+ "BM_string_memcpy/11/2/4/iterations:1\n"
+ "BM_string_memcpy/11/2/8/iterations:1\n"
+ "BM_string_memcpy/11/2/16/iterations:1\n"
+ "BM_string_memcpy/11/2/32/iterations:1\n"
+ "BM_string_memcpy/11/4/1/iterations:1\n"
+ "BM_string_memcpy/11/4/2/iterations:1\n"
+ "BM_string_memcpy/11/4/4/iterations:1\n"
+ "BM_string_memcpy/11/4/8/iterations:1\n"
+ "BM_string_memcpy/11/4/16/iterations:1\n"
+ "BM_string_memcpy/11/4/32/iterations:1\n"
+ "BM_string_memcpy/11/8/1/iterations:1\n"
+ "BM_string_memcpy/11/8/2/iterations:1\n"
+ "BM_string_memcpy/11/8/4/iterations:1\n"
+ "BM_string_memcpy/11/8/8/iterations:1\n"
+ "BM_string_memcpy/11/8/16/iterations:1\n"
+ "BM_string_memcpy/11/8/32/iterations:1\n"
+ "BM_string_memcpy/11/16/1/iterations:1\n"
+ "BM_string_memcpy/11/16/2/iterations:1\n"
+ "BM_string_memcpy/11/16/4/iterations:1\n"
+ "BM_string_memcpy/11/16/8/iterations:1\n"
+ "BM_string_memcpy/11/16/16/iterations:1\n"
+ "BM_string_memcpy/11/16/32/iterations:1\n"
+ "BM_string_memcpy/11/32/1/iterations:1\n"
+ "BM_string_memcpy/11/32/2/iterations:1\n"
+ "BM_string_memcpy/11/32/4/iterations:1\n"
+ "BM_string_memcpy/11/32/8/iterations:1\n"
+ "BM_string_memcpy/11/32/16/iterations:1\n"
+ "BM_string_memcpy/11/32/32/iterations:1\n"
+ "BM_string_memcpy/12/0/0/iterations:1\n"
+ "BM_string_memcpy/12/1/1/iterations:1\n"
+ "BM_string_memcpy/12/1/2/iterations:1\n"
+ "BM_string_memcpy/12/1/4/iterations:1\n"
+ "BM_string_memcpy/12/1/8/iterations:1\n"
+ "BM_string_memcpy/12/1/16/iterations:1\n"
+ "BM_string_memcpy/12/1/32/iterations:1\n"
+ "BM_string_memcpy/12/2/1/iterations:1\n"
+ "BM_string_memcpy/12/2/2/iterations:1\n"
+ "BM_string_memcpy/12/2/4/iterations:1\n"
+ "BM_string_memcpy/12/2/8/iterations:1\n"
+ "BM_string_memcpy/12/2/16/iterations:1\n"
+ "BM_string_memcpy/12/2/32/iterations:1\n"
+ "BM_string_memcpy/12/4/1/iterations:1\n"
+ "BM_string_memcpy/12/4/2/iterations:1\n"
+ "BM_string_memcpy/12/4/4/iterations:1\n"
+ "BM_string_memcpy/12/4/8/iterations:1\n"
+ "BM_string_memcpy/12/4/16/iterations:1\n"
+ "BM_string_memcpy/12/4/32/iterations:1\n"
+ "BM_string_memcpy/12/8/1/iterations:1\n"
+ "BM_string_memcpy/12/8/2/iterations:1\n"
+ "BM_string_memcpy/12/8/4/iterations:1\n"
+ "BM_string_memcpy/12/8/8/iterations:1\n"
+ "BM_string_memcpy/12/8/16/iterations:1\n"
+ "BM_string_memcpy/12/8/32/iterations:1\n"
+ "BM_string_memcpy/12/16/1/iterations:1\n"
+ "BM_string_memcpy/12/16/2/iterations:1\n"
+ "BM_string_memcpy/12/16/4/iterations:1\n"
+ "BM_string_memcpy/12/16/8/iterations:1\n"
+ "BM_string_memcpy/12/16/16/iterations:1\n"
+ "BM_string_memcpy/12/16/32/iterations:1\n"
+ "BM_string_memcpy/12/32/1/iterations:1\n"
+ "BM_string_memcpy/12/32/2/iterations:1\n"
+ "BM_string_memcpy/12/32/4/iterations:1\n"
+ "BM_string_memcpy/12/32/8/iterations:1\n"
+ "BM_string_memcpy/12/32/16/iterations:1\n"
+ "BM_string_memcpy/12/32/32/iterations:1\n"
+ "BM_string_memcpy/13/0/0/iterations:1\n"
+ "BM_string_memcpy/13/1/1/iterations:1\n"
+ "BM_string_memcpy/13/1/2/iterations:1\n"
+ "BM_string_memcpy/13/1/4/iterations:1\n"
+ "BM_string_memcpy/13/1/8/iterations:1\n"
+ "BM_string_memcpy/13/1/16/iterations:1\n"
+ "BM_string_memcpy/13/1/32/iterations:1\n"
+ "BM_string_memcpy/13/2/1/iterations:1\n"
+ "BM_string_memcpy/13/2/2/iterations:1\n"
+ "BM_string_memcpy/13/2/4/iterations:1\n"
+ "BM_string_memcpy/13/2/8/iterations:1\n"
+ "BM_string_memcpy/13/2/16/iterations:1\n"
+ "BM_string_memcpy/13/2/32/iterations:1\n"
+ "BM_string_memcpy/13/4/1/iterations:1\n"
+ "BM_string_memcpy/13/4/2/iterations:1\n"
+ "BM_string_memcpy/13/4/4/iterations:1\n"
+ "BM_string_memcpy/13/4/8/iterations:1\n"
+ "BM_string_memcpy/13/4/16/iterations:1\n"
+ "BM_string_memcpy/13/4/32/iterations:1\n"
+ "BM_string_memcpy/13/8/1/iterations:1\n"
+ "BM_string_memcpy/13/8/2/iterations:1\n"
+ "BM_string_memcpy/13/8/4/iterations:1\n"
+ "BM_string_memcpy/13/8/8/iterations:1\n"
+ "BM_string_memcpy/13/8/16/iterations:1\n"
+ "BM_string_memcpy/13/8/32/iterations:1\n"
+ "BM_string_memcpy/13/16/1/iterations:1\n"
+ "BM_string_memcpy/13/16/2/iterations:1\n"
+ "BM_string_memcpy/13/16/4/iterations:1\n"
+ "BM_string_memcpy/13/16/8/iterations:1\n"
+ "BM_string_memcpy/13/16/16/iterations:1\n"
+ "BM_string_memcpy/13/16/32/iterations:1\n"
+ "BM_string_memcpy/13/32/1/iterations:1\n"
+ "BM_string_memcpy/13/32/2/iterations:1\n"
+ "BM_string_memcpy/13/32/4/iterations:1\n"
+ "BM_string_memcpy/13/32/8/iterations:1\n"
+ "BM_string_memcpy/13/32/16/iterations:1\n"
+ "BM_string_memcpy/13/32/32/iterations:1\n"
+ "BM_string_memcpy/14/0/0/iterations:1\n"
+ "BM_string_memcpy/14/1/1/iterations:1\n"
+ "BM_string_memcpy/14/1/2/iterations:1\n"
+ "BM_string_memcpy/14/1/4/iterations:1\n"
+ "BM_string_memcpy/14/1/8/iterations:1\n"
+ "BM_string_memcpy/14/1/16/iterations:1\n"
+ "BM_string_memcpy/14/1/32/iterations:1\n"
+ "BM_string_memcpy/14/2/1/iterations:1\n"
+ "BM_string_memcpy/14/2/2/iterations:1\n"
+ "BM_string_memcpy/14/2/4/iterations:1\n"
+ "BM_string_memcpy/14/2/8/iterations:1\n"
+ "BM_string_memcpy/14/2/16/iterations:1\n"
+ "BM_string_memcpy/14/2/32/iterations:1\n"
+ "BM_string_memcpy/14/4/1/iterations:1\n"
+ "BM_string_memcpy/14/4/2/iterations:1\n"
+ "BM_string_memcpy/14/4/4/iterations:1\n"
+ "BM_string_memcpy/14/4/8/iterations:1\n"
+ "BM_string_memcpy/14/4/16/iterations:1\n"
+ "BM_string_memcpy/14/4/32/iterations:1\n"
+ "BM_string_memcpy/14/8/1/iterations:1\n"
+ "BM_string_memcpy/14/8/2/iterations:1\n"
+ "BM_string_memcpy/14/8/4/iterations:1\n"
+ "BM_string_memcpy/14/8/8/iterations:1\n"
+ "BM_string_memcpy/14/8/16/iterations:1\n"
+ "BM_string_memcpy/14/8/32/iterations:1\n"
+ "BM_string_memcpy/14/16/1/iterations:1\n"
+ "BM_string_memcpy/14/16/2/iterations:1\n"
+ "BM_string_memcpy/14/16/4/iterations:1\n"
+ "BM_string_memcpy/14/16/8/iterations:1\n"
+ "BM_string_memcpy/14/16/16/iterations:1\n"
+ "BM_string_memcpy/14/16/32/iterations:1\n"
+ "BM_string_memcpy/14/32/1/iterations:1\n"
+ "BM_string_memcpy/14/32/2/iterations:1\n"
+ "BM_string_memcpy/14/32/4/iterations:1\n"
+ "BM_string_memcpy/14/32/8/iterations:1\n"
+ "BM_string_memcpy/14/32/16/iterations:1\n"
+ "BM_string_memcpy/14/32/32/iterations:1\n"
+ "BM_string_memcpy/15/0/0/iterations:1\n"
+ "BM_string_memcpy/15/1/1/iterations:1\n"
+ "BM_string_memcpy/15/1/2/iterations:1\n"
+ "BM_string_memcpy/15/1/4/iterations:1\n"
+ "BM_string_memcpy/15/1/8/iterations:1\n"
+ "BM_string_memcpy/15/1/16/iterations:1\n"
+ "BM_string_memcpy/15/1/32/iterations:1\n"
+ "BM_string_memcpy/15/2/1/iterations:1\n"
+ "BM_string_memcpy/15/2/2/iterations:1\n"
+ "BM_string_memcpy/15/2/4/iterations:1\n"
+ "BM_string_memcpy/15/2/8/iterations:1\n"
+ "BM_string_memcpy/15/2/16/iterations:1\n"
+ "BM_string_memcpy/15/2/32/iterations:1\n"
+ "BM_string_memcpy/15/4/1/iterations:1\n"
+ "BM_string_memcpy/15/4/2/iterations:1\n"
+ "BM_string_memcpy/15/4/4/iterations:1\n"
+ "BM_string_memcpy/15/4/8/iterations:1\n"
+ "BM_string_memcpy/15/4/16/iterations:1\n"
+ "BM_string_memcpy/15/4/32/iterations:1\n"
+ "BM_string_memcpy/15/8/1/iterations:1\n"
+ "BM_string_memcpy/15/8/2/iterations:1\n"
+ "BM_string_memcpy/15/8/4/iterations:1\n"
+ "BM_string_memcpy/15/8/8/iterations:1\n"
+ "BM_string_memcpy/15/8/16/iterations:1\n"
+ "BM_string_memcpy/15/8/32/iterations:1\n"
+ "BM_string_memcpy/15/16/1/iterations:1\n"
+ "BM_string_memcpy/15/16/2/iterations:1\n"
+ "BM_string_memcpy/15/16/4/iterations:1\n"
+ "BM_string_memcpy/15/16/8/iterations:1\n"
+ "BM_string_memcpy/15/16/16/iterations:1\n"
+ "BM_string_memcpy/15/16/32/iterations:1\n"
+ "BM_string_memcpy/15/32/1/iterations:1\n"
+ "BM_string_memcpy/15/32/2/iterations:1\n"
+ "BM_string_memcpy/15/32/4/iterations:1\n"
+ "BM_string_memcpy/15/32/8/iterations:1\n"
+ "BM_string_memcpy/15/32/16/iterations:1\n"
+ "BM_string_memcpy/15/32/32/iterations:1\n"
+ "BM_string_memcpy/16/0/0/iterations:1\n"
+ "BM_string_memcpy/16/1/1/iterations:1\n"
+ "BM_string_memcpy/16/1/2/iterations:1\n"
+ "BM_string_memcpy/16/1/4/iterations:1\n"
+ "BM_string_memcpy/16/1/8/iterations:1\n"
+ "BM_string_memcpy/16/1/16/iterations:1\n"
+ "BM_string_memcpy/16/1/32/iterations:1\n"
+ "BM_string_memcpy/16/2/1/iterations:1\n"
+ "BM_string_memcpy/16/2/2/iterations:1\n"
+ "BM_string_memcpy/16/2/4/iterations:1\n"
+ "BM_string_memcpy/16/2/8/iterations:1\n"
+ "BM_string_memcpy/16/2/16/iterations:1\n"
+ "BM_string_memcpy/16/2/32/iterations:1\n"
+ "BM_string_memcpy/16/4/1/iterations:1\n"
+ "BM_string_memcpy/16/4/2/iterations:1\n"
+ "BM_string_memcpy/16/4/4/iterations:1\n"
+ "BM_string_memcpy/16/4/8/iterations:1\n"
+ "BM_string_memcpy/16/4/16/iterations:1\n"
+ "BM_string_memcpy/16/4/32/iterations:1\n"
+ "BM_string_memcpy/16/8/1/iterations:1\n"
+ "BM_string_memcpy/16/8/2/iterations:1\n"
+ "BM_string_memcpy/16/8/4/iterations:1\n"
+ "BM_string_memcpy/16/8/8/iterations:1\n"
+ "BM_string_memcpy/16/8/16/iterations:1\n"
+ "BM_string_memcpy/16/8/32/iterations:1\n"
+ "BM_string_memcpy/16/16/1/iterations:1\n"
+ "BM_string_memcpy/16/16/2/iterations:1\n"
+ "BM_string_memcpy/16/16/4/iterations:1\n"
+ "BM_string_memcpy/16/16/8/iterations:1\n"
+ "BM_string_memcpy/16/16/16/iterations:1\n"
+ "BM_string_memcpy/16/16/32/iterations:1\n"
+ "BM_string_memcpy/16/32/1/iterations:1\n"
+ "BM_string_memcpy/16/32/2/iterations:1\n"
+ "BM_string_memcpy/16/32/4/iterations:1\n"
+ "BM_string_memcpy/16/32/8/iterations:1\n"
+ "BM_string_memcpy/16/32/16/iterations:1\n"
+ "BM_string_memcpy/16/32/32/iterations:1\n"
+ "BM_string_memcpy/24/0/0/iterations:1\n"
+ "BM_string_memcpy/24/1/1/iterations:1\n"
+ "BM_string_memcpy/24/1/2/iterations:1\n"
+ "BM_string_memcpy/24/1/4/iterations:1\n"
+ "BM_string_memcpy/24/1/8/iterations:1\n"
+ "BM_string_memcpy/24/1/16/iterations:1\n"
+ "BM_string_memcpy/24/1/32/iterations:1\n"
+ "BM_string_memcpy/24/2/1/iterations:1\n"
+ "BM_string_memcpy/24/2/2/iterations:1\n"
+ "BM_string_memcpy/24/2/4/iterations:1\n"
+ "BM_string_memcpy/24/2/8/iterations:1\n"
+ "BM_string_memcpy/24/2/16/iterations:1\n"
+ "BM_string_memcpy/24/2/32/iterations:1\n"
+ "BM_string_memcpy/24/4/1/iterations:1\n"
+ "BM_string_memcpy/24/4/2/iterations:1\n"
+ "BM_string_memcpy/24/4/4/iterations:1\n"
+ "BM_string_memcpy/24/4/8/iterations:1\n"
+ "BM_string_memcpy/24/4/16/iterations:1\n"
+ "BM_string_memcpy/24/4/32/iterations:1\n"
+ "BM_string_memcpy/24/8/1/iterations:1\n"
+ "BM_string_memcpy/24/8/2/iterations:1\n"
+ "BM_string_memcpy/24/8/4/iterations:1\n"
+ "BM_string_memcpy/24/8/8/iterations:1\n"
+ "BM_string_memcpy/24/8/16/iterations:1\n"
+ "BM_string_memcpy/24/8/32/iterations:1\n"
+ "BM_string_memcpy/24/16/1/iterations:1\n"
+ "BM_string_memcpy/24/16/2/iterations:1\n"
+ "BM_string_memcpy/24/16/4/iterations:1\n"
+ "BM_string_memcpy/24/16/8/iterations:1\n"
+ "BM_string_memcpy/24/16/16/iterations:1\n"
+ "BM_string_memcpy/24/16/32/iterations:1\n"
+ "BM_string_memcpy/24/32/1/iterations:1\n"
+ "BM_string_memcpy/24/32/2/iterations:1\n"
+ "BM_string_memcpy/24/32/4/iterations:1\n"
+ "BM_string_memcpy/24/32/8/iterations:1\n"
+ "BM_string_memcpy/24/32/16/iterations:1\n"
+ "BM_string_memcpy/24/32/32/iterations:1\n"
+ "BM_string_memcpy/32/0/0/iterations:1\n"
+ "BM_string_memcpy/32/1/1/iterations:1\n"
+ "BM_string_memcpy/32/1/2/iterations:1\n"
+ "BM_string_memcpy/32/1/4/iterations:1\n"
+ "BM_string_memcpy/32/1/8/iterations:1\n"
+ "BM_string_memcpy/32/1/16/iterations:1\n"
+ "BM_string_memcpy/32/1/32/iterations:1\n"
+ "BM_string_memcpy/32/2/1/iterations:1\n"
+ "BM_string_memcpy/32/2/2/iterations:1\n"
+ "BM_string_memcpy/32/2/4/iterations:1\n"
+ "BM_string_memcpy/32/2/8/iterations:1\n"
+ "BM_string_memcpy/32/2/16/iterations:1\n"
+ "BM_string_memcpy/32/2/32/iterations:1\n"
+ "BM_string_memcpy/32/4/1/iterations:1\n"
+ "BM_string_memcpy/32/4/2/iterations:1\n"
+ "BM_string_memcpy/32/4/4/iterations:1\n"
+ "BM_string_memcpy/32/4/8/iterations:1\n"
+ "BM_string_memcpy/32/4/16/iterations:1\n"
+ "BM_string_memcpy/32/4/32/iterations:1\n"
+ "BM_string_memcpy/32/8/1/iterations:1\n"
+ "BM_string_memcpy/32/8/2/iterations:1\n"
+ "BM_string_memcpy/32/8/4/iterations:1\n"
+ "BM_string_memcpy/32/8/8/iterations:1\n"
+ "BM_string_memcpy/32/8/16/iterations:1\n"
+ "BM_string_memcpy/32/8/32/iterations:1\n"
+ "BM_string_memcpy/32/16/1/iterations:1\n"
+ "BM_string_memcpy/32/16/2/iterations:1\n"
+ "BM_string_memcpy/32/16/4/iterations:1\n"
+ "BM_string_memcpy/32/16/8/iterations:1\n"
+ "BM_string_memcpy/32/16/16/iterations:1\n"
+ "BM_string_memcpy/32/16/32/iterations:1\n"
+ "BM_string_memcpy/32/32/1/iterations:1\n"
+ "BM_string_memcpy/32/32/2/iterations:1\n"
+ "BM_string_memcpy/32/32/4/iterations:1\n"
+ "BM_string_memcpy/32/32/8/iterations:1\n"
+ "BM_string_memcpy/32/32/16/iterations:1\n"
+ "BM_string_memcpy/32/32/32/iterations:1\n"
+ "BM_string_memcpy/40/0/0/iterations:1\n"
+ "BM_string_memcpy/40/1/1/iterations:1\n"
+ "BM_string_memcpy/40/1/2/iterations:1\n"
+ "BM_string_memcpy/40/1/4/iterations:1\n"
+ "BM_string_memcpy/40/1/8/iterations:1\n"
+ "BM_string_memcpy/40/1/16/iterations:1\n"
+ "BM_string_memcpy/40/1/32/iterations:1\n"
+ "BM_string_memcpy/40/2/1/iterations:1\n"
+ "BM_string_memcpy/40/2/2/iterations:1\n"
+ "BM_string_memcpy/40/2/4/iterations:1\n"
+ "BM_string_memcpy/40/2/8/iterations:1\n"
+ "BM_string_memcpy/40/2/16/iterations:1\n"
+ "BM_string_memcpy/40/2/32/iterations:1\n"
+ "BM_string_memcpy/40/4/1/iterations:1\n"
+ "BM_string_memcpy/40/4/2/iterations:1\n"
+ "BM_string_memcpy/40/4/4/iterations:1\n"
+ "BM_string_memcpy/40/4/8/iterations:1\n"
+ "BM_string_memcpy/40/4/16/iterations:1\n"
+ "BM_string_memcpy/40/4/32/iterations:1\n"
+ "BM_string_memcpy/40/8/1/iterations:1\n"
+ "BM_string_memcpy/40/8/2/iterations:1\n"
+ "BM_string_memcpy/40/8/4/iterations:1\n"
+ "BM_string_memcpy/40/8/8/iterations:1\n"
+ "BM_string_memcpy/40/8/16/iterations:1\n"
+ "BM_string_memcpy/40/8/32/iterations:1\n"
+ "BM_string_memcpy/40/16/1/iterations:1\n"
+ "BM_string_memcpy/40/16/2/iterations:1\n"
+ "BM_string_memcpy/40/16/4/iterations:1\n"
+ "BM_string_memcpy/40/16/8/iterations:1\n"
+ "BM_string_memcpy/40/16/16/iterations:1\n"
+ "BM_string_memcpy/40/16/32/iterations:1\n"
+ "BM_string_memcpy/40/32/1/iterations:1\n"
+ "BM_string_memcpy/40/32/2/iterations:1\n"
+ "BM_string_memcpy/40/32/4/iterations:1\n"
+ "BM_string_memcpy/40/32/8/iterations:1\n"
+ "BM_string_memcpy/40/32/16/iterations:1\n"
+ "BM_string_memcpy/40/32/32/iterations:1\n"
+ "BM_string_memcpy/48/0/0/iterations:1\n"
+ "BM_string_memcpy/48/1/1/iterations:1\n"
+ "BM_string_memcpy/48/1/2/iterations:1\n"
+ "BM_string_memcpy/48/1/4/iterations:1\n"
+ "BM_string_memcpy/48/1/8/iterations:1\n"
+ "BM_string_memcpy/48/1/16/iterations:1\n"
+ "BM_string_memcpy/48/1/32/iterations:1\n"
+ "BM_string_memcpy/48/2/1/iterations:1\n"
+ "BM_string_memcpy/48/2/2/iterations:1\n"
+ "BM_string_memcpy/48/2/4/iterations:1\n"
+ "BM_string_memcpy/48/2/8/iterations:1\n"
+ "BM_string_memcpy/48/2/16/iterations:1\n"
+ "BM_string_memcpy/48/2/32/iterations:1\n"
+ "BM_string_memcpy/48/4/1/iterations:1\n"
+ "BM_string_memcpy/48/4/2/iterations:1\n"
+ "BM_string_memcpy/48/4/4/iterations:1\n"
+ "BM_string_memcpy/48/4/8/iterations:1\n"
+ "BM_string_memcpy/48/4/16/iterations:1\n"
+ "BM_string_memcpy/48/4/32/iterations:1\n"
+ "BM_string_memcpy/48/8/1/iterations:1\n"
+ "BM_string_memcpy/48/8/2/iterations:1\n"
+ "BM_string_memcpy/48/8/4/iterations:1\n"
+ "BM_string_memcpy/48/8/8/iterations:1\n"
+ "BM_string_memcpy/48/8/16/iterations:1\n"
+ "BM_string_memcpy/48/8/32/iterations:1\n"
+ "BM_string_memcpy/48/16/1/iterations:1\n"
+ "BM_string_memcpy/48/16/2/iterations:1\n"
+ "BM_string_memcpy/48/16/4/iterations:1\n"
+ "BM_string_memcpy/48/16/8/iterations:1\n"
+ "BM_string_memcpy/48/16/16/iterations:1\n"
+ "BM_string_memcpy/48/16/32/iterations:1\n"
+ "BM_string_memcpy/48/32/1/iterations:1\n"
+ "BM_string_memcpy/48/32/2/iterations:1\n"
+ "BM_string_memcpy/48/32/4/iterations:1\n"
+ "BM_string_memcpy/48/32/8/iterations:1\n"
+ "BM_string_memcpy/48/32/16/iterations:1\n"
+ "BM_string_memcpy/48/32/32/iterations:1\n"
+ "BM_string_memcpy/56/0/0/iterations:1\n"
+ "BM_string_memcpy/56/1/1/iterations:1\n"
+ "BM_string_memcpy/56/1/2/iterations:1\n"
+ "BM_string_memcpy/56/1/4/iterations:1\n"
+ "BM_string_memcpy/56/1/8/iterations:1\n"
+ "BM_string_memcpy/56/1/16/iterations:1\n"
+ "BM_string_memcpy/56/1/32/iterations:1\n"
+ "BM_string_memcpy/56/2/1/iterations:1\n"
+ "BM_string_memcpy/56/2/2/iterations:1\n"
+ "BM_string_memcpy/56/2/4/iterations:1\n"
+ "BM_string_memcpy/56/2/8/iterations:1\n"
+ "BM_string_memcpy/56/2/16/iterations:1\n"
+ "BM_string_memcpy/56/2/32/iterations:1\n"
+ "BM_string_memcpy/56/4/1/iterations:1\n"
+ "BM_string_memcpy/56/4/2/iterations:1\n"
+ "BM_string_memcpy/56/4/4/iterations:1\n"
+ "BM_string_memcpy/56/4/8/iterations:1\n"
+ "BM_string_memcpy/56/4/16/iterations:1\n"
+ "BM_string_memcpy/56/4/32/iterations:1\n"
+ "BM_string_memcpy/56/8/1/iterations:1\n"
+ "BM_string_memcpy/56/8/2/iterations:1\n"
+ "BM_string_memcpy/56/8/4/iterations:1\n"
+ "BM_string_memcpy/56/8/8/iterations:1\n"
+ "BM_string_memcpy/56/8/16/iterations:1\n"
+ "BM_string_memcpy/56/8/32/iterations:1\n"
+ "BM_string_memcpy/56/16/1/iterations:1\n"
+ "BM_string_memcpy/56/16/2/iterations:1\n"
+ "BM_string_memcpy/56/16/4/iterations:1\n"
+ "BM_string_memcpy/56/16/8/iterations:1\n"
+ "BM_string_memcpy/56/16/16/iterations:1\n"
+ "BM_string_memcpy/56/16/32/iterations:1\n"
+ "BM_string_memcpy/56/32/1/iterations:1\n"
+ "BM_string_memcpy/56/32/2/iterations:1\n"
+ "BM_string_memcpy/56/32/4/iterations:1\n"
+ "BM_string_memcpy/56/32/8/iterations:1\n"
+ "BM_string_memcpy/56/32/16/iterations:1\n"
+ "BM_string_memcpy/56/32/32/iterations:1\n"
+ "BM_string_memcpy/64/0/0/iterations:1\n"
+ "BM_string_memcpy/64/1/1/iterations:1\n"
+ "BM_string_memcpy/64/1/2/iterations:1\n"
+ "BM_string_memcpy/64/1/4/iterations:1\n"
+ "BM_string_memcpy/64/1/8/iterations:1\n"
+ "BM_string_memcpy/64/1/16/iterations:1\n"
+ "BM_string_memcpy/64/1/32/iterations:1\n"
+ "BM_string_memcpy/64/2/1/iterations:1\n"
+ "BM_string_memcpy/64/2/2/iterations:1\n"
+ "BM_string_memcpy/64/2/4/iterations:1\n"
+ "BM_string_memcpy/64/2/8/iterations:1\n"
+ "BM_string_memcpy/64/2/16/iterations:1\n"
+ "BM_string_memcpy/64/2/32/iterations:1\n"
+ "BM_string_memcpy/64/4/1/iterations:1\n"
+ "BM_string_memcpy/64/4/2/iterations:1\n"
+ "BM_string_memcpy/64/4/4/iterations:1\n"
+ "BM_string_memcpy/64/4/8/iterations:1\n"
+ "BM_string_memcpy/64/4/16/iterations:1\n"
+ "BM_string_memcpy/64/4/32/iterations:1\n"
+ "BM_string_memcpy/64/8/1/iterations:1\n"
+ "BM_string_memcpy/64/8/2/iterations:1\n"
+ "BM_string_memcpy/64/8/4/iterations:1\n"
+ "BM_string_memcpy/64/8/8/iterations:1\n"
+ "BM_string_memcpy/64/8/16/iterations:1\n"
+ "BM_string_memcpy/64/8/32/iterations:1\n"
+ "BM_string_memcpy/64/16/1/iterations:1\n"
+ "BM_string_memcpy/64/16/2/iterations:1\n"
+ "BM_string_memcpy/64/16/4/iterations:1\n"
+ "BM_string_memcpy/64/16/8/iterations:1\n"
+ "BM_string_memcpy/64/16/16/iterations:1\n"
+ "BM_string_memcpy/64/16/32/iterations:1\n"
+ "BM_string_memcpy/64/32/1/iterations:1\n"
+ "BM_string_memcpy/64/32/2/iterations:1\n"
+ "BM_string_memcpy/64/32/4/iterations:1\n"
+ "BM_string_memcpy/64/32/8/iterations:1\n"
+ "BM_string_memcpy/64/32/16/iterations:1\n"
+ "BM_string_memcpy/64/32/32/iterations:1\n"
+ "BM_string_memcpy/72/0/0/iterations:1\n"
+ "BM_string_memcpy/72/1/1/iterations:1\n"
+ "BM_string_memcpy/72/1/2/iterations:1\n"
+ "BM_string_memcpy/72/1/4/iterations:1\n"
+ "BM_string_memcpy/72/1/8/iterations:1\n"
+ "BM_string_memcpy/72/1/16/iterations:1\n"
+ "BM_string_memcpy/72/1/32/iterations:1\n"
+ "BM_string_memcpy/72/2/1/iterations:1\n"
+ "BM_string_memcpy/72/2/2/iterations:1\n"
+ "BM_string_memcpy/72/2/4/iterations:1\n"
+ "BM_string_memcpy/72/2/8/iterations:1\n"
+ "BM_string_memcpy/72/2/16/iterations:1\n"
+ "BM_string_memcpy/72/2/32/iterations:1\n"
+ "BM_string_memcpy/72/4/1/iterations:1\n"
+ "BM_string_memcpy/72/4/2/iterations:1\n"
+ "BM_string_memcpy/72/4/4/iterations:1\n"
+ "BM_string_memcpy/72/4/8/iterations:1\n"
+ "BM_string_memcpy/72/4/16/iterations:1\n"
+ "BM_string_memcpy/72/4/32/iterations:1\n"
+ "BM_string_memcpy/72/8/1/iterations:1\n"
+ "BM_string_memcpy/72/8/2/iterations:1\n"
+ "BM_string_memcpy/72/8/4/iterations:1\n"
+ "BM_string_memcpy/72/8/8/iterations:1\n"
+ "BM_string_memcpy/72/8/16/iterations:1\n"
+ "BM_string_memcpy/72/8/32/iterations:1\n"
+ "BM_string_memcpy/72/16/1/iterations:1\n"
+ "BM_string_memcpy/72/16/2/iterations:1\n"
+ "BM_string_memcpy/72/16/4/iterations:1\n"
+ "BM_string_memcpy/72/16/8/iterations:1\n"
+ "BM_string_memcpy/72/16/16/iterations:1\n"
+ "BM_string_memcpy/72/16/32/iterations:1\n"
+ "BM_string_memcpy/72/32/1/iterations:1\n"
+ "BM_string_memcpy/72/32/2/iterations:1\n"
+ "BM_string_memcpy/72/32/4/iterations:1\n"
+ "BM_string_memcpy/72/32/8/iterations:1\n"
+ "BM_string_memcpy/72/32/16/iterations:1\n"
+ "BM_string_memcpy/72/32/32/iterations:1\n"
+ "BM_string_memcpy/80/0/0/iterations:1\n"
+ "BM_string_memcpy/80/1/1/iterations:1\n"
+ "BM_string_memcpy/80/1/2/iterations:1\n"
+ "BM_string_memcpy/80/1/4/iterations:1\n"
+ "BM_string_memcpy/80/1/8/iterations:1\n"
+ "BM_string_memcpy/80/1/16/iterations:1\n"
+ "BM_string_memcpy/80/1/32/iterations:1\n"
+ "BM_string_memcpy/80/2/1/iterations:1\n"
+ "BM_string_memcpy/80/2/2/iterations:1\n"
+ "BM_string_memcpy/80/2/4/iterations:1\n"
+ "BM_string_memcpy/80/2/8/iterations:1\n"
+ "BM_string_memcpy/80/2/16/iterations:1\n"
+ "BM_string_memcpy/80/2/32/iterations:1\n"
+ "BM_string_memcpy/80/4/1/iterations:1\n"
+ "BM_string_memcpy/80/4/2/iterations:1\n"
+ "BM_string_memcpy/80/4/4/iterations:1\n"
+ "BM_string_memcpy/80/4/8/iterations:1\n"
+ "BM_string_memcpy/80/4/16/iterations:1\n"
+ "BM_string_memcpy/80/4/32/iterations:1\n"
+ "BM_string_memcpy/80/8/1/iterations:1\n"
+ "BM_string_memcpy/80/8/2/iterations:1\n"
+ "BM_string_memcpy/80/8/4/iterations:1\n"
+ "BM_string_memcpy/80/8/8/iterations:1\n"
+ "BM_string_memcpy/80/8/16/iterations:1\n"
+ "BM_string_memcpy/80/8/32/iterations:1\n"
+ "BM_string_memcpy/80/16/1/iterations:1\n"
+ "BM_string_memcpy/80/16/2/iterations:1\n"
+ "BM_string_memcpy/80/16/4/iterations:1\n"
+ "BM_string_memcpy/80/16/8/iterations:1\n"
+ "BM_string_memcpy/80/16/16/iterations:1\n"
+ "BM_string_memcpy/80/16/32/iterations:1\n"
+ "BM_string_memcpy/80/32/1/iterations:1\n"
+ "BM_string_memcpy/80/32/2/iterations:1\n"
+ "BM_string_memcpy/80/32/4/iterations:1\n"
+ "BM_string_memcpy/80/32/8/iterations:1\n"
+ "BM_string_memcpy/80/32/16/iterations:1\n"
+ "BM_string_memcpy/80/32/32/iterations:1\n"
+ "BM_string_memcpy/88/0/0/iterations:1\n"
+ "BM_string_memcpy/88/1/1/iterations:1\n"
+ "BM_string_memcpy/88/1/2/iterations:1\n"
+ "BM_string_memcpy/88/1/4/iterations:1\n"
+ "BM_string_memcpy/88/1/8/iterations:1\n"
+ "BM_string_memcpy/88/1/16/iterations:1\n"
+ "BM_string_memcpy/88/1/32/iterations:1\n"
+ "BM_string_memcpy/88/2/1/iterations:1\n"
+ "BM_string_memcpy/88/2/2/iterations:1\n"
+ "BM_string_memcpy/88/2/4/iterations:1\n"
+ "BM_string_memcpy/88/2/8/iterations:1\n"
+ "BM_string_memcpy/88/2/16/iterations:1\n"
+ "BM_string_memcpy/88/2/32/iterations:1\n"
+ "BM_string_memcpy/88/4/1/iterations:1\n"
+ "BM_string_memcpy/88/4/2/iterations:1\n"
+ "BM_string_memcpy/88/4/4/iterations:1\n"
+ "BM_string_memcpy/88/4/8/iterations:1\n"
+ "BM_string_memcpy/88/4/16/iterations:1\n"
+ "BM_string_memcpy/88/4/32/iterations:1\n"
+ "BM_string_memcpy/88/8/1/iterations:1\n"
+ "BM_string_memcpy/88/8/2/iterations:1\n"
+ "BM_string_memcpy/88/8/4/iterations:1\n"
+ "BM_string_memcpy/88/8/8/iterations:1\n"
+ "BM_string_memcpy/88/8/16/iterations:1\n"
+ "BM_string_memcpy/88/8/32/iterations:1\n"
+ "BM_string_memcpy/88/16/1/iterations:1\n"
+ "BM_string_memcpy/88/16/2/iterations:1\n"
+ "BM_string_memcpy/88/16/4/iterations:1\n"
+ "BM_string_memcpy/88/16/8/iterations:1\n"
+ "BM_string_memcpy/88/16/16/iterations:1\n"
+ "BM_string_memcpy/88/16/32/iterations:1\n"
+ "BM_string_memcpy/88/32/1/iterations:1\n"
+ "BM_string_memcpy/88/32/2/iterations:1\n"
+ "BM_string_memcpy/88/32/4/iterations:1\n"
+ "BM_string_memcpy/88/32/8/iterations:1\n"
+ "BM_string_memcpy/88/32/16/iterations:1\n"
+ "BM_string_memcpy/88/32/32/iterations:1\n"
+ "BM_string_memcpy/96/0/0/iterations:1\n"
+ "BM_string_memcpy/96/1/1/iterations:1\n"
+ "BM_string_memcpy/96/1/2/iterations:1\n"
+ "BM_string_memcpy/96/1/4/iterations:1\n"
+ "BM_string_memcpy/96/1/8/iterations:1\n"
+ "BM_string_memcpy/96/1/16/iterations:1\n"
+ "BM_string_memcpy/96/1/32/iterations:1\n"
+ "BM_string_memcpy/96/2/1/iterations:1\n"
+ "BM_string_memcpy/96/2/2/iterations:1\n"
+ "BM_string_memcpy/96/2/4/iterations:1\n"
+ "BM_string_memcpy/96/2/8/iterations:1\n"
+ "BM_string_memcpy/96/2/16/iterations:1\n"
+ "BM_string_memcpy/96/2/32/iterations:1\n"
+ "BM_string_memcpy/96/4/1/iterations:1\n"
+ "BM_string_memcpy/96/4/2/iterations:1\n"
+ "BM_string_memcpy/96/4/4/iterations:1\n"
+ "BM_string_memcpy/96/4/8/iterations:1\n"
+ "BM_string_memcpy/96/4/16/iterations:1\n"
+ "BM_string_memcpy/96/4/32/iterations:1\n"
+ "BM_string_memcpy/96/8/1/iterations:1\n"
+ "BM_string_memcpy/96/8/2/iterations:1\n"
+ "BM_string_memcpy/96/8/4/iterations:1\n"
+ "BM_string_memcpy/96/8/8/iterations:1\n"
+ "BM_string_memcpy/96/8/16/iterations:1\n"
+ "BM_string_memcpy/96/8/32/iterations:1\n"
+ "BM_string_memcpy/96/16/1/iterations:1\n"
+ "BM_string_memcpy/96/16/2/iterations:1\n"
+ "BM_string_memcpy/96/16/4/iterations:1\n"
+ "BM_string_memcpy/96/16/8/iterations:1\n"
+ "BM_string_memcpy/96/16/16/iterations:1\n"
+ "BM_string_memcpy/96/16/32/iterations:1\n"
+ "BM_string_memcpy/96/32/1/iterations:1\n"
+ "BM_string_memcpy/96/32/2/iterations:1\n"
+ "BM_string_memcpy/96/32/4/iterations:1\n"
+ "BM_string_memcpy/96/32/8/iterations:1\n"
+ "BM_string_memcpy/96/32/16/iterations:1\n"
+ "BM_string_memcpy/96/32/32/iterations:1\n"
+ "BM_string_memcpy/104/0/0/iterations:1\n"
+ "BM_string_memcpy/104/1/1/iterations:1\n"
+ "BM_string_memcpy/104/1/2/iterations:1\n"
+ "BM_string_memcpy/104/1/4/iterations:1\n"
+ "BM_string_memcpy/104/1/8/iterations:1\n"
+ "BM_string_memcpy/104/1/16/iterations:1\n"
+ "BM_string_memcpy/104/1/32/iterations:1\n"
+ "BM_string_memcpy/104/2/1/iterations:1\n"
+ "BM_string_memcpy/104/2/2/iterations:1\n"
+ "BM_string_memcpy/104/2/4/iterations:1\n"
+ "BM_string_memcpy/104/2/8/iterations:1\n"
+ "BM_string_memcpy/104/2/16/iterations:1\n"
+ "BM_string_memcpy/104/2/32/iterations:1\n"
+ "BM_string_memcpy/104/4/1/iterations:1\n"
+ "BM_string_memcpy/104/4/2/iterations:1\n"
+ "BM_string_memcpy/104/4/4/iterations:1\n"
+ "BM_string_memcpy/104/4/8/iterations:1\n"
+ "BM_string_memcpy/104/4/16/iterations:1\n"
+ "BM_string_memcpy/104/4/32/iterations:1\n"
+ "BM_string_memcpy/104/8/1/iterations:1\n"
+ "BM_string_memcpy/104/8/2/iterations:1\n"
+ "BM_string_memcpy/104/8/4/iterations:1\n"
+ "BM_string_memcpy/104/8/8/iterations:1\n"
+ "BM_string_memcpy/104/8/16/iterations:1\n"
+ "BM_string_memcpy/104/8/32/iterations:1\n"
+ "BM_string_memcpy/104/16/1/iterations:1\n"
+ "BM_string_memcpy/104/16/2/iterations:1\n"
+ "BM_string_memcpy/104/16/4/iterations:1\n"
+ "BM_string_memcpy/104/16/8/iterations:1\n"
+ "BM_string_memcpy/104/16/16/iterations:1\n"
+ "BM_string_memcpy/104/16/32/iterations:1\n"
+ "BM_string_memcpy/104/32/1/iterations:1\n"
+ "BM_string_memcpy/104/32/2/iterations:1\n"
+ "BM_string_memcpy/104/32/4/iterations:1\n"
+ "BM_string_memcpy/104/32/8/iterations:1\n"
+ "BM_string_memcpy/104/32/16/iterations:1\n"
+ "BM_string_memcpy/104/32/32/iterations:1\n"
+ "BM_string_memcpy/112/0/0/iterations:1\n"
+ "BM_string_memcpy/112/1/1/iterations:1\n"
+ "BM_string_memcpy/112/1/2/iterations:1\n"
+ "BM_string_memcpy/112/1/4/iterations:1\n"
+ "BM_string_memcpy/112/1/8/iterations:1\n"
+ "BM_string_memcpy/112/1/16/iterations:1\n"
+ "BM_string_memcpy/112/1/32/iterations:1\n"
+ "BM_string_memcpy/112/2/1/iterations:1\n"
+ "BM_string_memcpy/112/2/2/iterations:1\n"
+ "BM_string_memcpy/112/2/4/iterations:1\n"
+ "BM_string_memcpy/112/2/8/iterations:1\n"
+ "BM_string_memcpy/112/2/16/iterations:1\n"
+ "BM_string_memcpy/112/2/32/iterations:1\n"
+ "BM_string_memcpy/112/4/1/iterations:1\n"
+ "BM_string_memcpy/112/4/2/iterations:1\n"
+ "BM_string_memcpy/112/4/4/iterations:1\n"
+ "BM_string_memcpy/112/4/8/iterations:1\n"
+ "BM_string_memcpy/112/4/16/iterations:1\n"
+ "BM_string_memcpy/112/4/32/iterations:1\n"
+ "BM_string_memcpy/112/8/1/iterations:1\n"
+ "BM_string_memcpy/112/8/2/iterations:1\n"
+ "BM_string_memcpy/112/8/4/iterations:1\n"
+ "BM_string_memcpy/112/8/8/iterations:1\n"
+ "BM_string_memcpy/112/8/16/iterations:1\n"
+ "BM_string_memcpy/112/8/32/iterations:1\n"
+ "BM_string_memcpy/112/16/1/iterations:1\n"
+ "BM_string_memcpy/112/16/2/iterations:1\n"
+ "BM_string_memcpy/112/16/4/iterations:1\n"
+ "BM_string_memcpy/112/16/8/iterations:1\n"
+ "BM_string_memcpy/112/16/16/iterations:1\n"
+ "BM_string_memcpy/112/16/32/iterations:1\n"
+ "BM_string_memcpy/112/32/1/iterations:1\n"
+ "BM_string_memcpy/112/32/2/iterations:1\n"
+ "BM_string_memcpy/112/32/4/iterations:1\n"
+ "BM_string_memcpy/112/32/8/iterations:1\n"
+ "BM_string_memcpy/112/32/16/iterations:1\n"
+ "BM_string_memcpy/112/32/32/iterations:1\n"
+ "BM_string_memcpy/120/0/0/iterations:1\n"
+ "BM_string_memcpy/120/1/1/iterations:1\n"
+ "BM_string_memcpy/120/1/2/iterations:1\n"
+ "BM_string_memcpy/120/1/4/iterations:1\n"
+ "BM_string_memcpy/120/1/8/iterations:1\n"
+ "BM_string_memcpy/120/1/16/iterations:1\n"
+ "BM_string_memcpy/120/1/32/iterations:1\n"
+ "BM_string_memcpy/120/2/1/iterations:1\n"
+ "BM_string_memcpy/120/2/2/iterations:1\n"
+ "BM_string_memcpy/120/2/4/iterations:1\n"
+ "BM_string_memcpy/120/2/8/iterations:1\n"
+ "BM_string_memcpy/120/2/16/iterations:1\n"
+ "BM_string_memcpy/120/2/32/iterations:1\n"
+ "BM_string_memcpy/120/4/1/iterations:1\n"
+ "BM_string_memcpy/120/4/2/iterations:1\n"
+ "BM_string_memcpy/120/4/4/iterations:1\n"
+ "BM_string_memcpy/120/4/8/iterations:1\n"
+ "BM_string_memcpy/120/4/16/iterations:1\n"
+ "BM_string_memcpy/120/4/32/iterations:1\n"
+ "BM_string_memcpy/120/8/1/iterations:1\n"
+ "BM_string_memcpy/120/8/2/iterations:1\n"
+ "BM_string_memcpy/120/8/4/iterations:1\n"
+ "BM_string_memcpy/120/8/8/iterations:1\n"
+ "BM_string_memcpy/120/8/16/iterations:1\n"
+ "BM_string_memcpy/120/8/32/iterations:1\n"
+ "BM_string_memcpy/120/16/1/iterations:1\n"
+ "BM_string_memcpy/120/16/2/iterations:1\n"
+ "BM_string_memcpy/120/16/4/iterations:1\n"
+ "BM_string_memcpy/120/16/8/iterations:1\n"
+ "BM_string_memcpy/120/16/16/iterations:1\n"
+ "BM_string_memcpy/120/16/32/iterations:1\n"
+ "BM_string_memcpy/120/32/1/iterations:1\n"
+ "BM_string_memcpy/120/32/2/iterations:1\n"
+ "BM_string_memcpy/120/32/4/iterations:1\n"
+ "BM_string_memcpy/120/32/8/iterations:1\n"
+ "BM_string_memcpy/120/32/16/iterations:1\n"
+ "BM_string_memcpy/120/32/32/iterations:1\n"
+ "BM_string_memcpy/128/0/0/iterations:1\n"
+ "BM_string_memcpy/128/1/1/iterations:1\n"
+ "BM_string_memcpy/128/1/2/iterations:1\n"
+ "BM_string_memcpy/128/1/4/iterations:1\n"
+ "BM_string_memcpy/128/1/8/iterations:1\n"
+ "BM_string_memcpy/128/1/16/iterations:1\n"
+ "BM_string_memcpy/128/1/32/iterations:1\n"
+ "BM_string_memcpy/128/2/1/iterations:1\n"
+ "BM_string_memcpy/128/2/2/iterations:1\n"
+ "BM_string_memcpy/128/2/4/iterations:1\n"
+ "BM_string_memcpy/128/2/8/iterations:1\n"
+ "BM_string_memcpy/128/2/16/iterations:1\n"
+ "BM_string_memcpy/128/2/32/iterations:1\n"
+ "BM_string_memcpy/128/4/1/iterations:1\n"
+ "BM_string_memcpy/128/4/2/iterations:1\n"
+ "BM_string_memcpy/128/4/4/iterations:1\n"
+ "BM_string_memcpy/128/4/8/iterations:1\n"
+ "BM_string_memcpy/128/4/16/iterations:1\n"
+ "BM_string_memcpy/128/4/32/iterations:1\n"
+ "BM_string_memcpy/128/8/1/iterations:1\n"
+ "BM_string_memcpy/128/8/2/iterations:1\n"
+ "BM_string_memcpy/128/8/4/iterations:1\n"
+ "BM_string_memcpy/128/8/8/iterations:1\n"
+ "BM_string_memcpy/128/8/16/iterations:1\n"
+ "BM_string_memcpy/128/8/32/iterations:1\n"
+ "BM_string_memcpy/128/16/1/iterations:1\n"
+ "BM_string_memcpy/128/16/2/iterations:1\n"
+ "BM_string_memcpy/128/16/4/iterations:1\n"
+ "BM_string_memcpy/128/16/8/iterations:1\n"
+ "BM_string_memcpy/128/16/16/iterations:1\n"
+ "BM_string_memcpy/128/16/32/iterations:1\n"
+ "BM_string_memcpy/128/32/1/iterations:1\n"
+ "BM_string_memcpy/128/32/2/iterations:1\n"
+ "BM_string_memcpy/128/32/4/iterations:1\n"
+ "BM_string_memcpy/128/32/8/iterations:1\n"
+ "BM_string_memcpy/128/32/16/iterations:1\n"
+ "BM_string_memcpy/128/32/32/iterations:1\n"
+ "BM_string_memcpy/136/0/0/iterations:1\n"
+ "BM_string_memcpy/136/1/1/iterations:1\n"
+ "BM_string_memcpy/136/1/2/iterations:1\n"
+ "BM_string_memcpy/136/1/4/iterations:1\n"
+ "BM_string_memcpy/136/1/8/iterations:1\n"
+ "BM_string_memcpy/136/1/16/iterations:1\n"
+ "BM_string_memcpy/136/1/32/iterations:1\n"
+ "BM_string_memcpy/136/2/1/iterations:1\n"
+ "BM_string_memcpy/136/2/2/iterations:1\n"
+ "BM_string_memcpy/136/2/4/iterations:1\n"
+ "BM_string_memcpy/136/2/8/iterations:1\n"
+ "BM_string_memcpy/136/2/16/iterations:1\n"
+ "BM_string_memcpy/136/2/32/iterations:1\n"
+ "BM_string_memcpy/136/4/1/iterations:1\n"
+ "BM_string_memcpy/136/4/2/iterations:1\n"
+ "BM_string_memcpy/136/4/4/iterations:1\n"
+ "BM_string_memcpy/136/4/8/iterations:1\n"
+ "BM_string_memcpy/136/4/16/iterations:1\n"
+ "BM_string_memcpy/136/4/32/iterations:1\n"
+ "BM_string_memcpy/136/8/1/iterations:1\n"
+ "BM_string_memcpy/136/8/2/iterations:1\n"
+ "BM_string_memcpy/136/8/4/iterations:1\n"
+ "BM_string_memcpy/136/8/8/iterations:1\n"
+ "BM_string_memcpy/136/8/16/iterations:1\n"
+ "BM_string_memcpy/136/8/32/iterations:1\n"
+ "BM_string_memcpy/136/16/1/iterations:1\n"
+ "BM_string_memcpy/136/16/2/iterations:1\n"
+ "BM_string_memcpy/136/16/4/iterations:1\n"
+ "BM_string_memcpy/136/16/8/iterations:1\n"
+ "BM_string_memcpy/136/16/16/iterations:1\n"
+ "BM_string_memcpy/136/16/32/iterations:1\n"
+ "BM_string_memcpy/136/32/1/iterations:1\n"
+ "BM_string_memcpy/136/32/2/iterations:1\n"
+ "BM_string_memcpy/136/32/4/iterations:1\n"
+ "BM_string_memcpy/136/32/8/iterations:1\n"
+ "BM_string_memcpy/136/32/16/iterations:1\n"
+ "BM_string_memcpy/136/32/32/iterations:1\n"
+ "BM_string_memcpy/144/0/0/iterations:1\n"
+ "BM_string_memcpy/144/1/1/iterations:1\n"
+ "BM_string_memcpy/144/1/2/iterations:1\n"
+ "BM_string_memcpy/144/1/4/iterations:1\n"
+ "BM_string_memcpy/144/1/8/iterations:1\n"
+ "BM_string_memcpy/144/1/16/iterations:1\n"
+ "BM_string_memcpy/144/1/32/iterations:1\n"
+ "BM_string_memcpy/144/2/1/iterations:1\n"
+ "BM_string_memcpy/144/2/2/iterations:1\n"
+ "BM_string_memcpy/144/2/4/iterations:1\n"
+ "BM_string_memcpy/144/2/8/iterations:1\n"
+ "BM_string_memcpy/144/2/16/iterations:1\n"
+ "BM_string_memcpy/144/2/32/iterations:1\n"
+ "BM_string_memcpy/144/4/1/iterations:1\n"
+ "BM_string_memcpy/144/4/2/iterations:1\n"
+ "BM_string_memcpy/144/4/4/iterations:1\n"
+ "BM_string_memcpy/144/4/8/iterations:1\n"
+ "BM_string_memcpy/144/4/16/iterations:1\n"
+ "BM_string_memcpy/144/4/32/iterations:1\n"
+ "BM_string_memcpy/144/8/1/iterations:1\n"
+ "BM_string_memcpy/144/8/2/iterations:1\n"
+ "BM_string_memcpy/144/8/4/iterations:1\n"
+ "BM_string_memcpy/144/8/8/iterations:1\n"
+ "BM_string_memcpy/144/8/16/iterations:1\n"
+ "BM_string_memcpy/144/8/32/iterations:1\n"
+ "BM_string_memcpy/144/16/1/iterations:1\n"
+ "BM_string_memcpy/144/16/2/iterations:1\n"
+ "BM_string_memcpy/144/16/4/iterations:1\n"
+ "BM_string_memcpy/144/16/8/iterations:1\n"
+ "BM_string_memcpy/144/16/16/iterations:1\n"
+ "BM_string_memcpy/144/16/32/iterations:1\n"
+ "BM_string_memcpy/144/32/1/iterations:1\n"
+ "BM_string_memcpy/144/32/2/iterations:1\n"
+ "BM_string_memcpy/144/32/4/iterations:1\n"
+ "BM_string_memcpy/144/32/8/iterations:1\n"
+ "BM_string_memcpy/144/32/16/iterations:1\n"
+ "BM_string_memcpy/144/32/32/iterations:1\n"
+ "BM_string_memcpy/160/0/0/iterations:1\n"
+ "BM_string_memcpy/160/1/1/iterations:1\n"
+ "BM_string_memcpy/160/1/2/iterations:1\n"
+ "BM_string_memcpy/160/1/4/iterations:1\n"
+ "BM_string_memcpy/160/1/8/iterations:1\n"
+ "BM_string_memcpy/160/1/16/iterations:1\n"
+ "BM_string_memcpy/160/1/32/iterations:1\n"
+ "BM_string_memcpy/160/2/1/iterations:1\n"
+ "BM_string_memcpy/160/2/2/iterations:1\n"
+ "BM_string_memcpy/160/2/4/iterations:1\n"
+ "BM_string_memcpy/160/2/8/iterations:1\n"
+ "BM_string_memcpy/160/2/16/iterations:1\n"
+ "BM_string_memcpy/160/2/32/iterations:1\n"
+ "BM_string_memcpy/160/4/1/iterations:1\n"
+ "BM_string_memcpy/160/4/2/iterations:1\n"
+ "BM_string_memcpy/160/4/4/iterations:1\n"
+ "BM_string_memcpy/160/4/8/iterations:1\n"
+ "BM_string_memcpy/160/4/16/iterations:1\n"
+ "BM_string_memcpy/160/4/32/iterations:1\n"
+ "BM_string_memcpy/160/8/1/iterations:1\n"
+ "BM_string_memcpy/160/8/2/iterations:1\n"
+ "BM_string_memcpy/160/8/4/iterations:1\n"
+ "BM_string_memcpy/160/8/8/iterations:1\n"
+ "BM_string_memcpy/160/8/16/iterations:1\n"
+ "BM_string_memcpy/160/8/32/iterations:1\n"
+ "BM_string_memcpy/160/16/1/iterations:1\n"
+ "BM_string_memcpy/160/16/2/iterations:1\n"
+ "BM_string_memcpy/160/16/4/iterations:1\n"
+ "BM_string_memcpy/160/16/8/iterations:1\n"
+ "BM_string_memcpy/160/16/16/iterations:1\n"
+ "BM_string_memcpy/160/16/32/iterations:1\n"
+ "BM_string_memcpy/160/32/1/iterations:1\n"
+ "BM_string_memcpy/160/32/2/iterations:1\n"
+ "BM_string_memcpy/160/32/4/iterations:1\n"
+ "BM_string_memcpy/160/32/8/iterations:1\n"
+ "BM_string_memcpy/160/32/16/iterations:1\n"
+ "BM_string_memcpy/160/32/32/iterations:1\n"
+ "BM_string_memcpy/176/0/0/iterations:1\n"
+ "BM_string_memcpy/176/1/1/iterations:1\n"
+ "BM_string_memcpy/176/1/2/iterations:1\n"
+ "BM_string_memcpy/176/1/4/iterations:1\n"
+ "BM_string_memcpy/176/1/8/iterations:1\n"
+ "BM_string_memcpy/176/1/16/iterations:1\n"
+ "BM_string_memcpy/176/1/32/iterations:1\n"
+ "BM_string_memcpy/176/2/1/iterations:1\n"
+ "BM_string_memcpy/176/2/2/iterations:1\n"
+ "BM_string_memcpy/176/2/4/iterations:1\n"
+ "BM_string_memcpy/176/2/8/iterations:1\n"
+ "BM_string_memcpy/176/2/16/iterations:1\n"
+ "BM_string_memcpy/176/2/32/iterations:1\n"
+ "BM_string_memcpy/176/4/1/iterations:1\n"
+ "BM_string_memcpy/176/4/2/iterations:1\n"
+ "BM_string_memcpy/176/4/4/iterations:1\n"
+ "BM_string_memcpy/176/4/8/iterations:1\n"
+ "BM_string_memcpy/176/4/16/iterations:1\n"
+ "BM_string_memcpy/176/4/32/iterations:1\n"
+ "BM_string_memcpy/176/8/1/iterations:1\n"
+ "BM_string_memcpy/176/8/2/iterations:1\n"
+ "BM_string_memcpy/176/8/4/iterations:1\n"
+ "BM_string_memcpy/176/8/8/iterations:1\n"
+ "BM_string_memcpy/176/8/16/iterations:1\n"
+ "BM_string_memcpy/176/8/32/iterations:1\n"
+ "BM_string_memcpy/176/16/1/iterations:1\n"
+ "BM_string_memcpy/176/16/2/iterations:1\n"
+ "BM_string_memcpy/176/16/4/iterations:1\n"
+ "BM_string_memcpy/176/16/8/iterations:1\n"
+ "BM_string_memcpy/176/16/16/iterations:1\n"
+ "BM_string_memcpy/176/16/32/iterations:1\n"
+ "BM_string_memcpy/176/32/1/iterations:1\n"
+ "BM_string_memcpy/176/32/2/iterations:1\n"
+ "BM_string_memcpy/176/32/4/iterations:1\n"
+ "BM_string_memcpy/176/32/8/iterations:1\n"
+ "BM_string_memcpy/176/32/16/iterations:1\n"
+ "BM_string_memcpy/176/32/32/iterations:1\n"
+ "BM_string_memcpy/192/0/0/iterations:1\n"
+ "BM_string_memcpy/192/1/1/iterations:1\n"
+ "BM_string_memcpy/192/1/2/iterations:1\n"
+ "BM_string_memcpy/192/1/4/iterations:1\n"
+ "BM_string_memcpy/192/1/8/iterations:1\n"
+ "BM_string_memcpy/192/1/16/iterations:1\n"
+ "BM_string_memcpy/192/1/32/iterations:1\n"
+ "BM_string_memcpy/192/2/1/iterations:1\n"
+ "BM_string_memcpy/192/2/2/iterations:1\n"
+ "BM_string_memcpy/192/2/4/iterations:1\n"
+ "BM_string_memcpy/192/2/8/iterations:1\n"
+ "BM_string_memcpy/192/2/16/iterations:1\n"
+ "BM_string_memcpy/192/2/32/iterations:1\n"
+ "BM_string_memcpy/192/4/1/iterations:1\n"
+ "BM_string_memcpy/192/4/2/iterations:1\n"
+ "BM_string_memcpy/192/4/4/iterations:1\n"
+ "BM_string_memcpy/192/4/8/iterations:1\n"
+ "BM_string_memcpy/192/4/16/iterations:1\n"
+ "BM_string_memcpy/192/4/32/iterations:1\n"
+ "BM_string_memcpy/192/8/1/iterations:1\n"
+ "BM_string_memcpy/192/8/2/iterations:1\n"
+ "BM_string_memcpy/192/8/4/iterations:1\n"
+ "BM_string_memcpy/192/8/8/iterations:1\n"
+ "BM_string_memcpy/192/8/16/iterations:1\n"
+ "BM_string_memcpy/192/8/32/iterations:1\n"
+ "BM_string_memcpy/192/16/1/iterations:1\n"
+ "BM_string_memcpy/192/16/2/iterations:1\n"
+ "BM_string_memcpy/192/16/4/iterations:1\n"
+ "BM_string_memcpy/192/16/8/iterations:1\n"
+ "BM_string_memcpy/192/16/16/iterations:1\n"
+ "BM_string_memcpy/192/16/32/iterations:1\n"
+ "BM_string_memcpy/192/32/1/iterations:1\n"
+ "BM_string_memcpy/192/32/2/iterations:1\n"
+ "BM_string_memcpy/192/32/4/iterations:1\n"
+ "BM_string_memcpy/192/32/8/iterations:1\n"
+ "BM_string_memcpy/192/32/16/iterations:1\n"
+ "BM_string_memcpy/192/32/32/iterations:1\n"
+ "BM_string_memcpy/208/0/0/iterations:1\n"
+ "BM_string_memcpy/208/1/1/iterations:1\n"
+ "BM_string_memcpy/208/1/2/iterations:1\n"
+ "BM_string_memcpy/208/1/4/iterations:1\n"
+ "BM_string_memcpy/208/1/8/iterations:1\n"
+ "BM_string_memcpy/208/1/16/iterations:1\n"
+ "BM_string_memcpy/208/1/32/iterations:1\n"
+ "BM_string_memcpy/208/2/1/iterations:1\n"
+ "BM_string_memcpy/208/2/2/iterations:1\n"
+ "BM_string_memcpy/208/2/4/iterations:1\n"
+ "BM_string_memcpy/208/2/8/iterations:1\n"
+ "BM_string_memcpy/208/2/16/iterations:1\n"
+ "BM_string_memcpy/208/2/32/iterations:1\n"
+ "BM_string_memcpy/208/4/1/iterations:1\n"
+ "BM_string_memcpy/208/4/2/iterations:1\n"
+ "BM_string_memcpy/208/4/4/iterations:1\n"
+ "BM_string_memcpy/208/4/8/iterations:1\n"
+ "BM_string_memcpy/208/4/16/iterations:1\n"
+ "BM_string_memcpy/208/4/32/iterations:1\n"
+ "BM_string_memcpy/208/8/1/iterations:1\n"
+ "BM_string_memcpy/208/8/2/iterations:1\n"
+ "BM_string_memcpy/208/8/4/iterations:1\n"
+ "BM_string_memcpy/208/8/8/iterations:1\n"
+ "BM_string_memcpy/208/8/16/iterations:1\n"
+ "BM_string_memcpy/208/8/32/iterations:1\n"
+ "BM_string_memcpy/208/16/1/iterations:1\n"
+ "BM_string_memcpy/208/16/2/iterations:1\n"
+ "BM_string_memcpy/208/16/4/iterations:1\n"
+ "BM_string_memcpy/208/16/8/iterations:1\n"
+ "BM_string_memcpy/208/16/16/iterations:1\n"
+ "BM_string_memcpy/208/16/32/iterations:1\n"
+ "BM_string_memcpy/208/32/1/iterations:1\n"
+ "BM_string_memcpy/208/32/2/iterations:1\n"
+ "BM_string_memcpy/208/32/4/iterations:1\n"
+ "BM_string_memcpy/208/32/8/iterations:1\n"
+ "BM_string_memcpy/208/32/16/iterations:1\n"
+ "BM_string_memcpy/208/32/32/iterations:1\n"
+ "BM_string_memcpy/224/0/0/iterations:1\n"
+ "BM_string_memcpy/224/1/1/iterations:1\n"
+ "BM_string_memcpy/224/1/2/iterations:1\n"
+ "BM_string_memcpy/224/1/4/iterations:1\n"
+ "BM_string_memcpy/224/1/8/iterations:1\n"
+ "BM_string_memcpy/224/1/16/iterations:1\n"
+ "BM_string_memcpy/224/1/32/iterations:1\n"
+ "BM_string_memcpy/224/2/1/iterations:1\n"
+ "BM_string_memcpy/224/2/2/iterations:1\n"
+ "BM_string_memcpy/224/2/4/iterations:1\n"
+ "BM_string_memcpy/224/2/8/iterations:1\n"
+ "BM_string_memcpy/224/2/16/iterations:1\n"
+ "BM_string_memcpy/224/2/32/iterations:1\n"
+ "BM_string_memcpy/224/4/1/iterations:1\n"
+ "BM_string_memcpy/224/4/2/iterations:1\n"
+ "BM_string_memcpy/224/4/4/iterations:1\n"
+ "BM_string_memcpy/224/4/8/iterations:1\n"
+ "BM_string_memcpy/224/4/16/iterations:1\n"
+ "BM_string_memcpy/224/4/32/iterations:1\n"
+ "BM_string_memcpy/224/8/1/iterations:1\n"
+ "BM_string_memcpy/224/8/2/iterations:1\n"
+ "BM_string_memcpy/224/8/4/iterations:1\n"
+ "BM_string_memcpy/224/8/8/iterations:1\n"
+ "BM_string_memcpy/224/8/16/iterations:1\n"
+ "BM_string_memcpy/224/8/32/iterations:1\n"
+ "BM_string_memcpy/224/16/1/iterations:1\n"
+ "BM_string_memcpy/224/16/2/iterations:1\n"
+ "BM_string_memcpy/224/16/4/iterations:1\n"
+ "BM_string_memcpy/224/16/8/iterations:1\n"
+ "BM_string_memcpy/224/16/16/iterations:1\n"
+ "BM_string_memcpy/224/16/32/iterations:1\n"
+ "BM_string_memcpy/224/32/1/iterations:1\n"
+ "BM_string_memcpy/224/32/2/iterations:1\n"
+ "BM_string_memcpy/224/32/4/iterations:1\n"
+ "BM_string_memcpy/224/32/8/iterations:1\n"
+ "BM_string_memcpy/224/32/16/iterations:1\n"
+ "BM_string_memcpy/224/32/32/iterations:1\n"
+ "BM_string_memcpy/240/0/0/iterations:1\n"
+ "BM_string_memcpy/240/1/1/iterations:1\n"
+ "BM_string_memcpy/240/1/2/iterations:1\n"
+ "BM_string_memcpy/240/1/4/iterations:1\n"
+ "BM_string_memcpy/240/1/8/iterations:1\n"
+ "BM_string_memcpy/240/1/16/iterations:1\n"
+ "BM_string_memcpy/240/1/32/iterations:1\n"
+ "BM_string_memcpy/240/2/1/iterations:1\n"
+ "BM_string_memcpy/240/2/2/iterations:1\n"
+ "BM_string_memcpy/240/2/4/iterations:1\n"
+ "BM_string_memcpy/240/2/8/iterations:1\n"
+ "BM_string_memcpy/240/2/16/iterations:1\n"
+ "BM_string_memcpy/240/2/32/iterations:1\n"
+ "BM_string_memcpy/240/4/1/iterations:1\n"
+ "BM_string_memcpy/240/4/2/iterations:1\n"
+ "BM_string_memcpy/240/4/4/iterations:1\n"
+ "BM_string_memcpy/240/4/8/iterations:1\n"
+ "BM_string_memcpy/240/4/16/iterations:1\n"
+ "BM_string_memcpy/240/4/32/iterations:1\n"
+ "BM_string_memcpy/240/8/1/iterations:1\n"
+ "BM_string_memcpy/240/8/2/iterations:1\n"
+ "BM_string_memcpy/240/8/4/iterations:1\n"
+ "BM_string_memcpy/240/8/8/iterations:1\n"
+ "BM_string_memcpy/240/8/16/iterations:1\n"
+ "BM_string_memcpy/240/8/32/iterations:1\n"
+ "BM_string_memcpy/240/16/1/iterations:1\n"
+ "BM_string_memcpy/240/16/2/iterations:1\n"
+ "BM_string_memcpy/240/16/4/iterations:1\n"
+ "BM_string_memcpy/240/16/8/iterations:1\n"
+ "BM_string_memcpy/240/16/16/iterations:1\n"
+ "BM_string_memcpy/240/16/32/iterations:1\n"
+ "BM_string_memcpy/240/32/1/iterations:1\n"
+ "BM_string_memcpy/240/32/2/iterations:1\n"
+ "BM_string_memcpy/240/32/4/iterations:1\n"
+ "BM_string_memcpy/240/32/8/iterations:1\n"
+ "BM_string_memcpy/240/32/16/iterations:1\n"
+ "BM_string_memcpy/240/32/32/iterations:1\n"
+ "BM_string_memcpy/256/0/0/iterations:1\n"
+ "BM_string_memcpy/256/1/1/iterations:1\n"
+ "BM_string_memcpy/256/1/2/iterations:1\n"
+ "BM_string_memcpy/256/1/4/iterations:1\n"
+ "BM_string_memcpy/256/1/8/iterations:1\n"
+ "BM_string_memcpy/256/1/16/iterations:1\n"
+ "BM_string_memcpy/256/1/32/iterations:1\n"
+ "BM_string_memcpy/256/2/1/iterations:1\n"
+ "BM_string_memcpy/256/2/2/iterations:1\n"
+ "BM_string_memcpy/256/2/4/iterations:1\n"
+ "BM_string_memcpy/256/2/8/iterations:1\n"
+ "BM_string_memcpy/256/2/16/iterations:1\n"
+ "BM_string_memcpy/256/2/32/iterations:1\n"
+ "BM_string_memcpy/256/4/1/iterations:1\n"
+ "BM_string_memcpy/256/4/2/iterations:1\n"
+ "BM_string_memcpy/256/4/4/iterations:1\n"
+ "BM_string_memcpy/256/4/8/iterations:1\n"
+ "BM_string_memcpy/256/4/16/iterations:1\n"
+ "BM_string_memcpy/256/4/32/iterations:1\n"
+ "BM_string_memcpy/256/8/1/iterations:1\n"
+ "BM_string_memcpy/256/8/2/iterations:1\n"
+ "BM_string_memcpy/256/8/4/iterations:1\n"
+ "BM_string_memcpy/256/8/8/iterations:1\n"
+ "BM_string_memcpy/256/8/16/iterations:1\n"
+ "BM_string_memcpy/256/8/32/iterations:1\n"
+ "BM_string_memcpy/256/16/1/iterations:1\n"
+ "BM_string_memcpy/256/16/2/iterations:1\n"
+ "BM_string_memcpy/256/16/4/iterations:1\n"
+ "BM_string_memcpy/256/16/8/iterations:1\n"
+ "BM_string_memcpy/256/16/16/iterations:1\n"
+ "BM_string_memcpy/256/16/32/iterations:1\n"
+ "BM_string_memcpy/256/32/1/iterations:1\n"
+ "BM_string_memcpy/256/32/2/iterations:1\n"
+ "BM_string_memcpy/256/32/4/iterations:1\n"
+ "BM_string_memcpy/256/32/8/iterations:1\n"
+ "BM_string_memcpy/256/32/16/iterations:1\n"
+ "BM_string_memcpy/256/32/32/iterations:1\n"
+ "BM_string_memcpy/512/0/0/iterations:1\n"
+ "BM_string_memcpy/512/1/1/iterations:1\n"
+ "BM_string_memcpy/512/1/2/iterations:1\n"
+ "BM_string_memcpy/512/1/4/iterations:1\n"
+ "BM_string_memcpy/512/1/8/iterations:1\n"
+ "BM_string_memcpy/512/1/16/iterations:1\n"
+ "BM_string_memcpy/512/1/32/iterations:1\n"
+ "BM_string_memcpy/512/2/1/iterations:1\n"
+ "BM_string_memcpy/512/2/2/iterations:1\n"
+ "BM_string_memcpy/512/2/4/iterations:1\n"
+ "BM_string_memcpy/512/2/8/iterations:1\n"
+ "BM_string_memcpy/512/2/16/iterations:1\n"
+ "BM_string_memcpy/512/2/32/iterations:1\n"
+ "BM_string_memcpy/512/4/1/iterations:1\n"
+ "BM_string_memcpy/512/4/2/iterations:1\n"
+ "BM_string_memcpy/512/4/4/iterations:1\n"
+ "BM_string_memcpy/512/4/8/iterations:1\n"
+ "BM_string_memcpy/512/4/16/iterations:1\n"
+ "BM_string_memcpy/512/4/32/iterations:1\n"
+ "BM_string_memcpy/512/8/1/iterations:1\n"
+ "BM_string_memcpy/512/8/2/iterations:1\n"
+ "BM_string_memcpy/512/8/4/iterations:1\n"
+ "BM_string_memcpy/512/8/8/iterations:1\n"
+ "BM_string_memcpy/512/8/16/iterations:1\n"
+ "BM_string_memcpy/512/8/32/iterations:1\n"
+ "BM_string_memcpy/512/16/1/iterations:1\n"
+ "BM_string_memcpy/512/16/2/iterations:1\n"
+ "BM_string_memcpy/512/16/4/iterations:1\n"
+ "BM_string_memcpy/512/16/8/iterations:1\n"
+ "BM_string_memcpy/512/16/16/iterations:1\n"
+ "BM_string_memcpy/512/16/32/iterations:1\n"
+ "BM_string_memcpy/512/32/1/iterations:1\n"
+ "BM_string_memcpy/512/32/2/iterations:1\n"
+ "BM_string_memcpy/512/32/4/iterations:1\n"
+ "BM_string_memcpy/512/32/8/iterations:1\n"
+ "BM_string_memcpy/512/32/16/iterations:1\n"
+ "BM_string_memcpy/512/32/32/iterations:1\n"
+ "BM_string_memcpy/1024/0/0/iterations:1\n"
+ "BM_string_memcpy/1024/1/1/iterations:1\n"
+ "BM_string_memcpy/1024/1/2/iterations:1\n"
+ "BM_string_memcpy/1024/1/4/iterations:1\n"
+ "BM_string_memcpy/1024/1/8/iterations:1\n"
+ "BM_string_memcpy/1024/1/16/iterations:1\n"
+ "BM_string_memcpy/1024/1/32/iterations:1\n"
+ "BM_string_memcpy/1024/2/1/iterations:1\n"
+ "BM_string_memcpy/1024/2/2/iterations:1\n"
+ "BM_string_memcpy/1024/2/4/iterations:1\n"
+ "BM_string_memcpy/1024/2/8/iterations:1\n"
+ "BM_string_memcpy/1024/2/16/iterations:1\n"
+ "BM_string_memcpy/1024/2/32/iterations:1\n"
+ "BM_string_memcpy/1024/4/1/iterations:1\n"
+ "BM_string_memcpy/1024/4/2/iterations:1\n"
+ "BM_string_memcpy/1024/4/4/iterations:1\n"
+ "BM_string_memcpy/1024/4/8/iterations:1\n"
+ "BM_string_memcpy/1024/4/16/iterations:1\n"
+ "BM_string_memcpy/1024/4/32/iterations:1\n"
+ "BM_string_memcpy/1024/8/1/iterations:1\n"
+ "BM_string_memcpy/1024/8/2/iterations:1\n"
+ "BM_string_memcpy/1024/8/4/iterations:1\n"
+ "BM_string_memcpy/1024/8/8/iterations:1\n"
+ "BM_string_memcpy/1024/8/16/iterations:1\n"
+ "BM_string_memcpy/1024/8/32/iterations:1\n"
+ "BM_string_memcpy/1024/16/1/iterations:1\n"
+ "BM_string_memcpy/1024/16/2/iterations:1\n"
+ "BM_string_memcpy/1024/16/4/iterations:1\n"
+ "BM_string_memcpy/1024/16/8/iterations:1\n"
+ "BM_string_memcpy/1024/16/16/iterations:1\n"
+ "BM_string_memcpy/1024/16/32/iterations:1\n"
+ "BM_string_memcpy/1024/32/1/iterations:1\n"
+ "BM_string_memcpy/1024/32/2/iterations:1\n"
+ "BM_string_memcpy/1024/32/4/iterations:1\n"
+ "BM_string_memcpy/1024/32/8/iterations:1\n"
+ "BM_string_memcpy/1024/32/16/iterations:1\n"
+ "BM_string_memcpy/1024/32/32/iterations:1\n"
+ "BM_string_memcpy/8192/0/0/iterations:1\n"
+ "BM_string_memcpy/8192/1/1/iterations:1\n"
+ "BM_string_memcpy/8192/1/2/iterations:1\n"
+ "BM_string_memcpy/8192/1/4/iterations:1\n"
+ "BM_string_memcpy/8192/1/8/iterations:1\n"
+ "BM_string_memcpy/8192/1/16/iterations:1\n"
+ "BM_string_memcpy/8192/1/32/iterations:1\n"
+ "BM_string_memcpy/8192/2/1/iterations:1\n"
+ "BM_string_memcpy/8192/2/2/iterations:1\n"
+ "BM_string_memcpy/8192/2/4/iterations:1\n"
+ "BM_string_memcpy/8192/2/8/iterations:1\n"
+ "BM_string_memcpy/8192/2/16/iterations:1\n"
+ "BM_string_memcpy/8192/2/32/iterations:1\n"
+ "BM_string_memcpy/8192/4/1/iterations:1\n"
+ "BM_string_memcpy/8192/4/2/iterations:1\n"
+ "BM_string_memcpy/8192/4/4/iterations:1\n"
+ "BM_string_memcpy/8192/4/8/iterations:1\n"
+ "BM_string_memcpy/8192/4/16/iterations:1\n"
+ "BM_string_memcpy/8192/4/32/iterations:1\n"
+ "BM_string_memcpy/8192/8/1/iterations:1\n"
+ "BM_string_memcpy/8192/8/2/iterations:1\n"
+ "BM_string_memcpy/8192/8/4/iterations:1\n"
+ "BM_string_memcpy/8192/8/8/iterations:1\n"
+ "BM_string_memcpy/8192/8/16/iterations:1\n"
+ "BM_string_memcpy/8192/8/32/iterations:1\n"
+ "BM_string_memcpy/8192/16/1/iterations:1\n"
+ "BM_string_memcpy/8192/16/2/iterations:1\n"
+ "BM_string_memcpy/8192/16/4/iterations:1\n"
+ "BM_string_memcpy/8192/16/8/iterations:1\n"
+ "BM_string_memcpy/8192/16/16/iterations:1\n"
+ "BM_string_memcpy/8192/16/32/iterations:1\n"
+ "BM_string_memcpy/8192/32/1/iterations:1\n"
+ "BM_string_memcpy/8192/32/2/iterations:1\n"
+ "BM_string_memcpy/8192/32/4/iterations:1\n"
+ "BM_string_memcpy/8192/32/8/iterations:1\n"
+ "BM_string_memcpy/8192/32/16/iterations:1\n"
+ "BM_string_memcpy/8192/32/32/iterations:1\n"
+ "BM_string_memcpy/16384/0/0/iterations:1\n"
+ "BM_string_memcpy/16384/1/1/iterations:1\n"
+ "BM_string_memcpy/16384/1/2/iterations:1\n"
+ "BM_string_memcpy/16384/1/4/iterations:1\n"
+ "BM_string_memcpy/16384/1/8/iterations:1\n"
+ "BM_string_memcpy/16384/1/16/iterations:1\n"
+ "BM_string_memcpy/16384/1/32/iterations:1\n"
+ "BM_string_memcpy/16384/2/1/iterations:1\n"
+ "BM_string_memcpy/16384/2/2/iterations:1\n"
+ "BM_string_memcpy/16384/2/4/iterations:1\n"
+ "BM_string_memcpy/16384/2/8/iterations:1\n"
+ "BM_string_memcpy/16384/2/16/iterations:1\n"
+ "BM_string_memcpy/16384/2/32/iterations:1\n"
+ "BM_string_memcpy/16384/4/1/iterations:1\n"
+ "BM_string_memcpy/16384/4/2/iterations:1\n"
+ "BM_string_memcpy/16384/4/4/iterations:1\n"
+ "BM_string_memcpy/16384/4/8/iterations:1\n"
+ "BM_string_memcpy/16384/4/16/iterations:1\n"
+ "BM_string_memcpy/16384/4/32/iterations:1\n"
+ "BM_string_memcpy/16384/8/1/iterations:1\n"
+ "BM_string_memcpy/16384/8/2/iterations:1\n"
+ "BM_string_memcpy/16384/8/4/iterations:1\n"
+ "BM_string_memcpy/16384/8/8/iterations:1\n"
+ "BM_string_memcpy/16384/8/16/iterations:1\n"
+ "BM_string_memcpy/16384/8/32/iterations:1\n"
+ "BM_string_memcpy/16384/16/1/iterations:1\n"
+ "BM_string_memcpy/16384/16/2/iterations:1\n"
+ "BM_string_memcpy/16384/16/4/iterations:1\n"
+ "BM_string_memcpy/16384/16/8/iterations:1\n"
+ "BM_string_memcpy/16384/16/16/iterations:1\n"
+ "BM_string_memcpy/16384/16/32/iterations:1\n"
+ "BM_string_memcpy/16384/32/1/iterations:1\n"
+ "BM_string_memcpy/16384/32/2/iterations:1\n"
+ "BM_string_memcpy/16384/32/4/iterations:1\n"
+ "BM_string_memcpy/16384/32/8/iterations:1\n"
+ "BM_string_memcpy/16384/32/16/iterations:1\n"
+ "BM_string_memcpy/16384/32/32/iterations:1\n"
+ "BM_string_memcpy/32768/0/0/iterations:1\n"
+ "BM_string_memcpy/32768/1/1/iterations:1\n"
+ "BM_string_memcpy/32768/1/2/iterations:1\n"
+ "BM_string_memcpy/32768/1/4/iterations:1\n"
+ "BM_string_memcpy/32768/1/8/iterations:1\n"
+ "BM_string_memcpy/32768/1/16/iterations:1\n"
+ "BM_string_memcpy/32768/1/32/iterations:1\n"
+ "BM_string_memcpy/32768/2/1/iterations:1\n"
+ "BM_string_memcpy/32768/2/2/iterations:1\n"
+ "BM_string_memcpy/32768/2/4/iterations:1\n"
+ "BM_string_memcpy/32768/2/8/iterations:1\n"
+ "BM_string_memcpy/32768/2/16/iterations:1\n"
+ "BM_string_memcpy/32768/2/32/iterations:1\n"
+ "BM_string_memcpy/32768/4/1/iterations:1\n"
+ "BM_string_memcpy/32768/4/2/iterations:1\n"
+ "BM_string_memcpy/32768/4/4/iterations:1\n"
+ "BM_string_memcpy/32768/4/8/iterations:1\n"
+ "BM_string_memcpy/32768/4/16/iterations:1\n"
+ "BM_string_memcpy/32768/4/32/iterations:1\n"
+ "BM_string_memcpy/32768/8/1/iterations:1\n"
+ "BM_string_memcpy/32768/8/2/iterations:1\n"
+ "BM_string_memcpy/32768/8/4/iterations:1\n"
+ "BM_string_memcpy/32768/8/8/iterations:1\n"
+ "BM_string_memcpy/32768/8/16/iterations:1\n"
+ "BM_string_memcpy/32768/8/32/iterations:1\n"
+ "BM_string_memcpy/32768/16/1/iterations:1\n"
+ "BM_string_memcpy/32768/16/2/iterations:1\n"
+ "BM_string_memcpy/32768/16/4/iterations:1\n"
+ "BM_string_memcpy/32768/16/8/iterations:1\n"
+ "BM_string_memcpy/32768/16/16/iterations:1\n"
+ "BM_string_memcpy/32768/16/32/iterations:1\n"
+ "BM_string_memcpy/32768/32/1/iterations:1\n"
+ "BM_string_memcpy/32768/32/2/iterations:1\n"
+ "BM_string_memcpy/32768/32/4/iterations:1\n"
+ "BM_string_memcpy/32768/32/8/iterations:1\n"
+ "BM_string_memcpy/32768/32/16/iterations:1\n"
+ "BM_string_memcpy/32768/32/32/iterations:1\n"
+ "BM_string_memcpy/65536/0/0/iterations:1\n"
+ "BM_string_memcpy/65536/1/1/iterations:1\n"
+ "BM_string_memcpy/65536/1/2/iterations:1\n"
+ "BM_string_memcpy/65536/1/4/iterations:1\n"
+ "BM_string_memcpy/65536/1/8/iterations:1\n"
+ "BM_string_memcpy/65536/1/16/iterations:1\n"
+ "BM_string_memcpy/65536/1/32/iterations:1\n"
+ "BM_string_memcpy/65536/2/1/iterations:1\n"
+ "BM_string_memcpy/65536/2/2/iterations:1\n"
+ "BM_string_memcpy/65536/2/4/iterations:1\n"
+ "BM_string_memcpy/65536/2/8/iterations:1\n"
+ "BM_string_memcpy/65536/2/16/iterations:1\n"
+ "BM_string_memcpy/65536/2/32/iterations:1\n"
+ "BM_string_memcpy/65536/4/1/iterations:1\n"
+ "BM_string_memcpy/65536/4/2/iterations:1\n"
+ "BM_string_memcpy/65536/4/4/iterations:1\n"
+ "BM_string_memcpy/65536/4/8/iterations:1\n"
+ "BM_string_memcpy/65536/4/16/iterations:1\n"
+ "BM_string_memcpy/65536/4/32/iterations:1\n"
+ "BM_string_memcpy/65536/8/1/iterations:1\n"
+ "BM_string_memcpy/65536/8/2/iterations:1\n"
+ "BM_string_memcpy/65536/8/4/iterations:1\n"
+ "BM_string_memcpy/65536/8/8/iterations:1\n"
+ "BM_string_memcpy/65536/8/16/iterations:1\n"
+ "BM_string_memcpy/65536/8/32/iterations:1\n"
+ "BM_string_memcpy/65536/16/1/iterations:1\n"
+ "BM_string_memcpy/65536/16/2/iterations:1\n"
+ "BM_string_memcpy/65536/16/4/iterations:1\n"
+ "BM_string_memcpy/65536/16/8/iterations:1\n"
+ "BM_string_memcpy/65536/16/16/iterations:1\n"
+ "BM_string_memcpy/65536/16/32/iterations:1\n"
+ "BM_string_memcpy/65536/32/1/iterations:1\n"
+ "BM_string_memcpy/65536/32/2/iterations:1\n"
+ "BM_string_memcpy/65536/32/4/iterations:1\n"
+ "BM_string_memcpy/65536/32/8/iterations:1\n"
+ "BM_string_memcpy/65536/32/16/iterations:1\n"
+ "BM_string_memcpy/65536/32/32/iterations:1\n"
+ "BM_string_memcpy/131072/0/0/iterations:1\n"
+ "BM_string_memcpy/131072/1/1/iterations:1\n"
+ "BM_string_memcpy/131072/1/2/iterations:1\n"
+ "BM_string_memcpy/131072/1/4/iterations:1\n"
+ "BM_string_memcpy/131072/1/8/iterations:1\n"
+ "BM_string_memcpy/131072/1/16/iterations:1\n"
+ "BM_string_memcpy/131072/1/32/iterations:1\n"
+ "BM_string_memcpy/131072/2/1/iterations:1\n"
+ "BM_string_memcpy/131072/2/2/iterations:1\n"
+ "BM_string_memcpy/131072/2/4/iterations:1\n"
+ "BM_string_memcpy/131072/2/8/iterations:1\n"
+ "BM_string_memcpy/131072/2/16/iterations:1\n"
+ "BM_string_memcpy/131072/2/32/iterations:1\n"
+ "BM_string_memcpy/131072/4/1/iterations:1\n"
+ "BM_string_memcpy/131072/4/2/iterations:1\n"
+ "BM_string_memcpy/131072/4/4/iterations:1\n"
+ "BM_string_memcpy/131072/4/8/iterations:1\n"
+ "BM_string_memcpy/131072/4/16/iterations:1\n"
+ "BM_string_memcpy/131072/4/32/iterations:1\n"
+ "BM_string_memcpy/131072/8/1/iterations:1\n"
+ "BM_string_memcpy/131072/8/2/iterations:1\n"
+ "BM_string_memcpy/131072/8/4/iterations:1\n"
+ "BM_string_memcpy/131072/8/8/iterations:1\n"
+ "BM_string_memcpy/131072/8/16/iterations:1\n"
+ "BM_string_memcpy/131072/8/32/iterations:1\n"
+ "BM_string_memcpy/131072/16/1/iterations:1\n"
+ "BM_string_memcpy/131072/16/2/iterations:1\n"
+ "BM_string_memcpy/131072/16/4/iterations:1\n"
+ "BM_string_memcpy/131072/16/8/iterations:1\n"
+ "BM_string_memcpy/131072/16/16/iterations:1\n"
+ "BM_string_memcpy/131072/16/32/iterations:1\n"
+ "BM_string_memcpy/131072/32/1/iterations:1\n"
+ "BM_string_memcpy/131072/32/2/iterations:1\n"
+ "BM_string_memcpy/131072/32/4/iterations:1\n"
+ "BM_string_memcpy/131072/32/8/iterations:1\n"
+ "BM_string_memcpy/131072/32/16/iterations:1\n"
+ "BM_string_memcpy/131072/32/32/iterations:1\n"
+ "BM_string_memcpy/262144/0/0/iterations:1\n"
+ "BM_string_memcpy/262144/1/1/iterations:1\n"
+ "BM_string_memcpy/262144/1/2/iterations:1\n"
+ "BM_string_memcpy/262144/1/4/iterations:1\n"
+ "BM_string_memcpy/262144/1/8/iterations:1\n"
+ "BM_string_memcpy/262144/1/16/iterations:1\n"
+ "BM_string_memcpy/262144/1/32/iterations:1\n"
+ "BM_string_memcpy/262144/2/1/iterations:1\n"
+ "BM_string_memcpy/262144/2/2/iterations:1\n"
+ "BM_string_memcpy/262144/2/4/iterations:1\n"
+ "BM_string_memcpy/262144/2/8/iterations:1\n"
+ "BM_string_memcpy/262144/2/16/iterations:1\n"
+ "BM_string_memcpy/262144/2/32/iterations:1\n"
+ "BM_string_memcpy/262144/4/1/iterations:1\n"
+ "BM_string_memcpy/262144/4/2/iterations:1\n"
+ "BM_string_memcpy/262144/4/4/iterations:1\n"
+ "BM_string_memcpy/262144/4/8/iterations:1\n"
+ "BM_string_memcpy/262144/4/16/iterations:1\n"
+ "BM_string_memcpy/262144/4/32/iterations:1\n"
+ "BM_string_memcpy/262144/8/1/iterations:1\n"
+ "BM_string_memcpy/262144/8/2/iterations:1\n"
+ "BM_string_memcpy/262144/8/4/iterations:1\n"
+ "BM_string_memcpy/262144/8/8/iterations:1\n"
+ "BM_string_memcpy/262144/8/16/iterations:1\n"
+ "BM_string_memcpy/262144/8/32/iterations:1\n"
+ "BM_string_memcpy/262144/16/1/iterations:1\n"
+ "BM_string_memcpy/262144/16/2/iterations:1\n"
+ "BM_string_memcpy/262144/16/4/iterations:1\n"
+ "BM_string_memcpy/262144/16/8/iterations:1\n"
+ "BM_string_memcpy/262144/16/16/iterations:1\n"
+ "BM_string_memcpy/262144/16/32/iterations:1\n"
+ "BM_string_memcpy/262144/32/1/iterations:1\n"
+ "BM_string_memcpy/262144/32/2/iterations:1\n"
+ "BM_string_memcpy/262144/32/4/iterations:1\n"
+ "BM_string_memcpy/262144/32/8/iterations:1\n"
+ "BM_string_memcpy/262144/32/16/iterations:1\n"
+ "BM_string_memcpy/262144/32/32/iterations:1\n"
+ "BM_string_memcpy/524288/0/0/iterations:1\n"
+ "BM_string_memcpy/524288/1/1/iterations:1\n"
+ "BM_string_memcpy/524288/1/2/iterations:1\n"
+ "BM_string_memcpy/524288/1/4/iterations:1\n"
+ "BM_string_memcpy/524288/1/8/iterations:1\n"
+ "BM_string_memcpy/524288/1/16/iterations:1\n"
+ "BM_string_memcpy/524288/1/32/iterations:1\n"
+ "BM_string_memcpy/524288/2/1/iterations:1\n"
+ "BM_string_memcpy/524288/2/2/iterations:1\n"
+ "BM_string_memcpy/524288/2/4/iterations:1\n"
+ "BM_string_memcpy/524288/2/8/iterations:1\n"
+ "BM_string_memcpy/524288/2/16/iterations:1\n"
+ "BM_string_memcpy/524288/2/32/iterations:1\n"
+ "BM_string_memcpy/524288/4/1/iterations:1\n"
+ "BM_string_memcpy/524288/4/2/iterations:1\n"
+ "BM_string_memcpy/524288/4/4/iterations:1\n"
+ "BM_string_memcpy/524288/4/8/iterations:1\n"
+ "BM_string_memcpy/524288/4/16/iterations:1\n"
+ "BM_string_memcpy/524288/4/32/iterations:1\n"
+ "BM_string_memcpy/524288/8/1/iterations:1\n"
+ "BM_string_memcpy/524288/8/2/iterations:1\n"
+ "BM_string_memcpy/524288/8/4/iterations:1\n"
+ "BM_string_memcpy/524288/8/8/iterations:1\n"
+ "BM_string_memcpy/524288/8/16/iterations:1\n"
+ "BM_string_memcpy/524288/8/32/iterations:1\n"
+ "BM_string_memcpy/524288/16/1/iterations:1\n"
+ "BM_string_memcpy/524288/16/2/iterations:1\n"
+ "BM_string_memcpy/524288/16/4/iterations:1\n"
+ "BM_string_memcpy/524288/16/8/iterations:1\n"
+ "BM_string_memcpy/524288/16/16/iterations:1\n"
+ "BM_string_memcpy/524288/16/32/iterations:1\n"
+ "BM_string_memcpy/524288/32/1/iterations:1\n"
+ "BM_string_memcpy/524288/32/2/iterations:1\n"
+ "BM_string_memcpy/524288/32/4/iterations:1\n"
+ "BM_string_memcpy/524288/32/8/iterations:1\n"
+ "BM_string_memcpy/524288/32/16/iterations:1\n"
+ "BM_string_memcpy/524288/32/32/iterations:1\n"
+ "BM_string_memcpy/1048576/0/0/iterations:1\n"
+ "BM_string_memcpy/1048576/1/1/iterations:1\n"
+ "BM_string_memcpy/1048576/1/2/iterations:1\n"
+ "BM_string_memcpy/1048576/1/4/iterations:1\n"
+ "BM_string_memcpy/1048576/1/8/iterations:1\n"
+ "BM_string_memcpy/1048576/1/16/iterations:1\n"
+ "BM_string_memcpy/1048576/1/32/iterations:1\n"
+ "BM_string_memcpy/1048576/2/1/iterations:1\n"
+ "BM_string_memcpy/1048576/2/2/iterations:1\n"
+ "BM_string_memcpy/1048576/2/4/iterations:1\n"
+ "BM_string_memcpy/1048576/2/8/iterations:1\n"
+ "BM_string_memcpy/1048576/2/16/iterations:1\n"
+ "BM_string_memcpy/1048576/2/32/iterations:1\n"
+ "BM_string_memcpy/1048576/4/1/iterations:1\n"
+ "BM_string_memcpy/1048576/4/2/iterations:1\n"
+ "BM_string_memcpy/1048576/4/4/iterations:1\n"
+ "BM_string_memcpy/1048576/4/8/iterations:1\n"
+ "BM_string_memcpy/1048576/4/16/iterations:1\n"
+ "BM_string_memcpy/1048576/4/32/iterations:1\n"
+ "BM_string_memcpy/1048576/8/1/iterations:1\n"
+ "BM_string_memcpy/1048576/8/2/iterations:1\n"
+ "BM_string_memcpy/1048576/8/4/iterations:1\n"
+ "BM_string_memcpy/1048576/8/8/iterations:1\n"
+ "BM_string_memcpy/1048576/8/16/iterations:1\n"
+ "BM_string_memcpy/1048576/8/32/iterations:1\n"
+ "BM_string_memcpy/1048576/16/1/iterations:1\n"
+ "BM_string_memcpy/1048576/16/2/iterations:1\n"
+ "BM_string_memcpy/1048576/16/4/iterations:1\n"
+ "BM_string_memcpy/1048576/16/8/iterations:1\n"
+ "BM_string_memcpy/1048576/16/16/iterations:1\n"
+ "BM_string_memcpy/1048576/16/32/iterations:1\n"
+ "BM_string_memcpy/1048576/32/1/iterations:1\n"
+ "BM_string_memcpy/1048576/32/2/iterations:1\n"
+ "BM_string_memcpy/1048576/32/4/iterations:1\n"
+ "BM_string_memcpy/1048576/32/8/iterations:1\n"
+ "BM_string_memcpy/1048576/32/16/iterations:1\n"
+ "BM_string_memcpy/1048576/32/32/iterations:1\n"
+ "BM_string_memcpy/2097152/0/0/iterations:1\n"
+ "BM_string_memcpy/2097152/1/1/iterations:1\n"
+ "BM_string_memcpy/2097152/1/2/iterations:1\n"
+ "BM_string_memcpy/2097152/1/4/iterations:1\n"
+ "BM_string_memcpy/2097152/1/8/iterations:1\n"
+ "BM_string_memcpy/2097152/1/16/iterations:1\n"
+ "BM_string_memcpy/2097152/1/32/iterations:1\n"
+ "BM_string_memcpy/2097152/2/1/iterations:1\n"
+ "BM_string_memcpy/2097152/2/2/iterations:1\n"
+ "BM_string_memcpy/2097152/2/4/iterations:1\n"
+ "BM_string_memcpy/2097152/2/8/iterations:1\n"
+ "BM_string_memcpy/2097152/2/16/iterations:1\n"
+ "BM_string_memcpy/2097152/2/32/iterations:1\n"
+ "BM_string_memcpy/2097152/4/1/iterations:1\n"
+ "BM_string_memcpy/2097152/4/2/iterations:1\n"
+ "BM_string_memcpy/2097152/4/4/iterations:1\n"
+ "BM_string_memcpy/2097152/4/8/iterations:1\n"
+ "BM_string_memcpy/2097152/4/16/iterations:1\n"
+ "BM_string_memcpy/2097152/4/32/iterations:1\n"
+ "BM_string_memcpy/2097152/8/1/iterations:1\n"
+ "BM_string_memcpy/2097152/8/2/iterations:1\n"
+ "BM_string_memcpy/2097152/8/4/iterations:1\n"
+ "BM_string_memcpy/2097152/8/8/iterations:1\n"
+ "BM_string_memcpy/2097152/8/16/iterations:1\n"
+ "BM_string_memcpy/2097152/8/32/iterations:1\n"
+ "BM_string_memcpy/2097152/16/1/iterations:1\n"
+ "BM_string_memcpy/2097152/16/2/iterations:1\n"
+ "BM_string_memcpy/2097152/16/4/iterations:1\n"
+ "BM_string_memcpy/2097152/16/8/iterations:1\n"
+ "BM_string_memcpy/2097152/16/16/iterations:1\n"
+ "BM_string_memcpy/2097152/16/32/iterations:1\n"
+ "BM_string_memcpy/2097152/32/1/iterations:1\n"
+ "BM_string_memcpy/2097152/32/2/iterations:1\n"
+ "BM_string_memcpy/2097152/32/4/iterations:1\n"
+ "BM_string_memcpy/2097152/32/8/iterations:1\n"
+ "BM_string_memcpy/2097152/32/16/iterations:1\n"
+ "BM_string_memcpy/2097152/32/32/iterations:1\n";
+
+ Verify(expected, 0,
+ std::vector<const char*>{GetBionicXmlArg("test_alignment_twobuf.xml").c_str()});
+}
+
+TEST_F(SystemTests, alignment_twobuf_manual) {
+ std::string expected =
+ "BM_string_strcpy/12345/0/0/iterations:1\n"
+ "BM_string_memcpy/10248/2/1/iterations:1\n"
+ "BM_string_strcpy/17820/4/8/iterations:1\n"
+ "BM_string_memcpy/20000/16/32/iterations:1\n";
+
+ Verify(expected, 0,
+ std::vector<const char*>{GetBionicXmlArg("test_alignment_twobuf_manual.xml").c_str()});
}
diff --git a/benchmarks/util.h b/benchmarks/util.h
index cf6f50e..a546764 100644
--- a/benchmarks/util.h
+++ b/benchmarks/util.h
@@ -20,17 +20,18 @@
#include <map>
#include <mutex>
#include <string>
+#include <utility>
#include <vector>
typedef void (*benchmark_func_t) (void);
extern std::mutex g_map_lock;
-extern std::map<std::string, benchmark_func_t> g_str_to_func;
+extern std::map<std::string, std::pair<benchmark_func_t, std::string>> g_str_to_func;
-static int __attribute__((unused)) EmplaceBenchmark (std::string fn_name, benchmark_func_t fn_ptr) {
+static int __attribute__((unused)) EmplaceBenchmark (std::string fn_name, benchmark_func_t fn_ptr, std::string arg = "") {
g_map_lock.lock();
- g_str_to_func.emplace(std::string(fn_name), fn_ptr);
+ g_str_to_func.emplace(std::string(fn_name), std::make_pair(fn_ptr, arg));
g_map_lock.unlock();
return 0;
}
@@ -38,6 +39,10 @@
#define BIONIC_BENCHMARK(n) \
int _bionic_benchmark_##n __attribute__((unused)) = EmplaceBenchmark(std::string(#n), reinterpret_cast<benchmark_func_t>(n))
+#define BIONIC_BENCHMARK_WITH_ARG(n, arg) \
+ int _bionic_benchmark_##n __attribute__((unused)) = EmplaceBenchmark(std::string(#n), reinterpret_cast<benchmark_func_t>(n), arg)
+
+
constexpr auto KB = 1024;
typedef struct {
diff --git a/docs/32-bit-abi.md b/docs/32-bit-abi.md
index 607b5d2..9ae1973 100644
--- a/docs/32-bit-abi.md
+++ b/docs/32-bit-abi.md
@@ -33,13 +33,29 @@
available. API 12 adds some of the `<unistd.h>` functions, API 21 adds `mmap`,
and by API 24 you have everything including `<stdio.h>`. See the
[linker map](libc/libc.map.txt) for full details. Note also that in NDK r16 and
-later, we inline an mmap64 implementation in the headers when you target an API
-before 21 because it's an easy special case that's often needed. This means
-that code using `_FILE_OFFSET_BITS=64` and `mmap` will always compile.
+later, if you're using Clang we'll inline an `mmap64` implementation in the
+headers when you target an API before 21 because it's an easy special case
+that's often needed. This means that code using `_FILE_OFFSET_BITS=64`
+and `mmap` (but no other functions that are unavailable at your target
+API level) will always compile.
-If your code stops compiling when you move to NDK r15 or later, removing any
+If your code stops compiling when you move to NDK r15 or later, removing every
definition of `_FILE_OFFSET_BITS=64` will restore the behavior you used to have:
-you'll have a 32-bit `off_t` and use the 32-bit functions.
+you'll have a 32-bit `off_t` and use the 32-bit functions. Make sure you
+grep thoroughly in both your source and your build system: many people
+aren't aware that `_FILE_OFFSET_BITS` is set. You might also have to
+remove references to `__USE_FILE_OFFSET64` --- this is the internal
+flag that should never be set by user code but sometimes is (by zlib,
+for example). If you think you have removed these but your code still
+doesn't compile, you can insert this just before the line that's failing
+to double check:
+```
+#if _FILE_OFFSET_BITS == 64
+#error "oops, file _FILE_OFFSET_BITS == 64"
+#elif defined(__USE_FILE_OFFSET64)
+#error "oops, __USE_FILE_OFFSET64 is defined"
+#endif
+```
In the 64-bit ABI, `off_t` is always 64-bit.
diff --git a/libc/bionic/spawn.cpp b/libc/bionic/spawn.cpp
index 061d68c..e5075f5 100644
--- a/libc/bionic/spawn.cpp
+++ b/libc/bionic/spawn.cpp
@@ -89,39 +89,47 @@
int schedpolicy;
sigset_t sigmask;
sigset_t sigdefault;
-
- void Do() {
- if ((flags & POSIX_SPAWN_SETSIGDEF) != 0) {
- // POSIX: "If POSIX_SPAWN_SETSIGDEF is set ... signals in sigdefault ... shall be set to
- // their default actions in the child process."
- struct sigaction sa = {};
- sa.sa_handler = SIG_DFL;
- for (int s = 1; s < _NSIG; ++s) {
- if (sigismember(&sigdefault, s) && sigaction(s, &sa, nullptr) == -1) _exit(127);
- }
- }
-
- if ((flags & POSIX_SPAWN_SETPGROUP) != 0 && setpgid(0, pgroup) == -1) _exit(127);
- if ((flags & POSIX_SPAWN_SETSID) != 0 && setsid() == -1) _exit(127);
-
- // POSIX_SPAWN_SETSCHEDULER overrides POSIX_SPAWN_SETSCHEDPARAM, but it is not an error
- // to set both.
- if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) {
- if (sched_setscheduler(0, schedpolicy, &schedparam) == -1) _exit(127);
- } else if ((flags & POSIX_SPAWN_SETSCHEDPARAM) != 0) {
- if (sched_setparam(0, &schedparam) == -1) _exit(127);
- }
-
- if ((flags & POSIX_SPAWN_RESETIDS) != 0) {
- if (seteuid(getuid()) == -1 || setegid(getgid()) == -1) _exit(127);
- }
-
- if ((flags & POSIX_SPAWN_SETSIGMASK) != 0) {
- if (sigprocmask(SIG_SETMASK, &sigmask, nullptr)) _exit(127);
- }
- }
};
+static void ApplyAttrs(short flags, const posix_spawnattr_t* attr) {
+ // POSIX: "If POSIX_SPAWN_SETSIGDEF is set ... signals in sigdefault ...
+ // shall be set to their default actions in the child process."
+ // POSIX: "Signals set to be caught by the calling process shall be
+ // set to the default action in the child process."
+ bool use_sigdefault = ((flags & POSIX_SPAWN_SETSIGDEF) != 0);
+ const struct sigaction default_sa = { .sa_handler = SIG_DFL };
+ for (int s = 1; s < _NSIG; ++s) {
+ bool reset = false;
+ if (use_sigdefault && sigismember(&(*attr)->sigdefault, s)) {
+ reset = true;
+ } else {
+ struct sigaction current;
+ if (sigaction(s, nullptr, ¤t) == -1) _exit(127);
+ reset = (current.sa_handler != SIG_IGN && current.sa_handler != SIG_DFL);
+ }
+ if (reset && sigaction(s, &default_sa, nullptr) == -1) _exit(127);
+ }
+
+ if ((flags & POSIX_SPAWN_SETPGROUP) != 0 && setpgid(0, (*attr)->pgroup) == -1) _exit(127);
+ if ((flags & POSIX_SPAWN_SETSID) != 0 && setsid() == -1) _exit(127);
+
+ // POSIX_SPAWN_SETSCHEDULER overrides POSIX_SPAWN_SETSCHEDPARAM, but it is not an error
+ // to set both.
+ if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) {
+ if (sched_setscheduler(0, (*attr)->schedpolicy, &(*attr)->schedparam) == -1) _exit(127);
+ } else if ((flags & POSIX_SPAWN_SETSCHEDPARAM) != 0) {
+ if (sched_setparam(0, &(*attr)->schedparam) == -1) _exit(127);
+ }
+
+ if ((flags & POSIX_SPAWN_RESETIDS) != 0) {
+ if (seteuid(getuid()) == -1 || setegid(getgid()) == -1) _exit(127);
+ }
+
+ if ((flags & POSIX_SPAWN_SETSIGMASK) != 0) {
+ if (sigprocmask(SIG_SETMASK, &(*attr)->sigmask, nullptr)) _exit(127);
+ }
+}
+
static int posix_spawn(pid_t* pid_ptr,
const char* path,
const posix_spawn_file_actions_t* actions,
@@ -142,7 +150,7 @@
if (pid == 0) {
// Child.
- if (attr) (*attr)->Do();
+ ApplyAttrs(flags, attr);
if (actions) (*actions)->Do();
if ((flags & POSIX_SPAWN_SETSIGMASK) == 0) ssb.reset();
exec_fn(path, argv, env ? env : environ);
diff --git a/libc/system_properties/system_properties.cpp b/libc/system_properties/system_properties.cpp
index 3f6601d..89a6fe7 100644
--- a/libc/system_properties/system_properties.cpp
+++ b/libc/system_properties/system_properties.cpp
@@ -46,6 +46,8 @@
#include <sys/_system_properties.h>
#include <sys/system_properties.h>
+#include <new>
+
#include <async_safe/log.h>
#include "private/ErrnoRestorer.h"
@@ -63,10 +65,15 @@
#include "property_filename.h"
// We don't want to use new or malloc in properties (b/31659220), and since these classes are
-// small enough and don't have non-trivial constructors, it's easier to just statically declare
-// them than anything else.
-static ContextsSplit contexts_split;
-static ContextsPreSplit contexts_pre_split;
+// small enough and we place them in a static union. Note that system properties are initialized
+// before static initializers are called, so using a Constructor here is an error. Even a
+// Constructor that zero initializes a class will clobber the previous property initialization.
+static union ContextsUnion {
+ ContextsUnion() {}
+ ~ContextsUnion() {}
+ ContextsSplit contexts_split;
+ ContextsPreSplit contexts_pre_split;
+} contexts_union;
static Contexts* contexts = nullptr;
#define SERIAL_DIRTY(serial) ((serial)&1)
@@ -276,15 +283,17 @@
}
contexts = nullptr;
if (is_dir(property_filename)) {
- if (!contexts_split.Initialize(false)) {
+ new (&contexts_union.contexts_split) ContextsSplit();
+ if (!contexts_union.contexts_split.Initialize(false)) {
return -1;
}
- contexts = &contexts_split;
+ contexts = &contexts_union.contexts_split;
} else {
- if (!contexts_pre_split.Initialize(false)) {
+ new (&contexts_union.contexts_pre_split) ContextsPreSplit();
+ if (!contexts_union.contexts_pre_split.Initialize(false)) {
return -1;
}
- contexts = &contexts_pre_split;
+ contexts = &contexts_union.contexts_pre_split;
}
return 0;
}
@@ -305,8 +314,9 @@
}
// We set this unconditionally as we want tests to continue on regardless of if this failed
// and property_service will abort on an error condition, so no harm done.
- contexts = &contexts_split;
- if (!contexts_split.Initialize(true)) {
+ new (&contexts_union.contexts_split) ContextsSplit;
+ contexts = &contexts_union.contexts_split;
+ if (!contexts_union.contexts_split.Initialize(true)) {
return -1;
}
return 0;
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 85376e0..66ae191 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -3526,7 +3526,14 @@
std::string error_msg;
- const char* config_file = file_exists(kLdConfigArchFilePath) ? kLdConfigArchFilePath : kLdConfigFilePath;
+ std::string ld_config_vndk = kLdConfigFilePath;
+ size_t insert_pos = ld_config_vndk.find_last_of(".");
+ if (insert_pos == std::string::npos) {
+ insert_pos = ld_config_vndk.length();
+ }
+ ld_config_vndk.insert(insert_pos, Config::get_vndk_version_string('.'));
+ const char* ld_config_txt = file_exists(ld_config_vndk.c_str()) ? ld_config_vndk.c_str() : kLdConfigFilePath;
+ const char* config_file = file_exists(kLdConfigArchFilePath) ? kLdConfigArchFilePath : ld_config_txt;
#ifdef USE_LD_CONFIG_FILE
// This is a debugging/testing only feature. Must not be available on
// production builds.
diff --git a/linker/linker_config.cpp b/linker/linker_config.cpp
index b203569..60b7ad9 100644
--- a/linker/linker_config.cpp
+++ b/linker/linker_config.cpp
@@ -33,6 +33,7 @@
#include "linker_utils.h"
#include <android-base/file.h>
+#include <android-base/properties.h>
#include <android-base/scopeguard.h>
#include <android-base/strings.h>
@@ -318,15 +319,6 @@
return true;
}
-static std::string getVndkVersionString() {
- char vndk_version_str[1 + PROP_VALUE_MAX] = {};
- __system_property_get("ro.vndk.version", vndk_version_str + 1);
- if (strlen(vndk_version_str + 1) != 0 && strcmp(vndk_version_str + 1, "current") != 0) {
- vndk_version_str[0] = '-';
- }
- return vndk_version_str;
-}
-
static Config g_config;
static constexpr const char* kDefaultConfigName = "default";
@@ -386,7 +378,7 @@
params.push_back({ "SDK_VER", buf });
}
- static std::string vndk = getVndkVersionString();
+ static std::string vndk = Config::get_vndk_version_string('-');
params.push_back({ "VNDK_VER", vndk });
for (auto&& path : paths) {
@@ -543,6 +535,15 @@
return true;
}
+std::string Config::get_vndk_version_string(const char delimiter) {
+ std::string version = android::base::GetProperty("ro.vndk.version", "");
+ if (version != "" && version != "current") {
+ //add the delimiter char in front of the string and return it.
+ return version.insert(0, 1, delimiter);
+ }
+ return "";
+}
+
NamespaceConfig* Config::create_namespace_config(const std::string& name) {
namespace_configs_.push_back(std::unique_ptr<NamespaceConfig>(new NamespaceConfig(name)));
NamespaceConfig* ns_config_ptr = namespace_configs_.back().get();
diff --git a/linker/linker_config.h b/linker/linker_config.h
index 6f8bffb..dde9362 100644
--- a/linker/linker_config.h
+++ b/linker/linker_config.h
@@ -146,6 +146,8 @@
bool is_asan,
const Config** config,
std::string* error_msg);
+
+ static std::string get_vndk_version_string(const char delimiter);
private:
void clear();
diff --git a/tests/spawn_test.cpp b/tests/spawn_test.cpp
index 6a3920e..d2e4ea1 100644
--- a/tests/spawn_test.cpp
+++ b/tests/spawn_test.cpp
@@ -20,6 +20,7 @@
#include <fcntl.h>
#include <gtest/gtest.h>
+#include "ScopedSignalHandler.h"
#include "utils.h"
#include <android-base/file.h>
@@ -386,3 +387,41 @@
ASSERT_EQ(0, posix_spawnattr_destroy(&sa));
}
+
+TEST(spawn, signal_stress) {
+ // Ensure that posix_spawn doesn't restore the caller's signal mask in the
+ // child without first defaulting any caught signals (http://b/68707996).
+ static pid_t parent = getpid();
+
+ pid_t pid = fork();
+ ASSERT_NE(-1, pid);
+
+ if (pid == 0) {
+ for (size_t i = 0; i < 1024; ++i) {
+ kill(0, SIGWINCH);
+ usleep(10);
+ }
+ return;
+ }
+
+ // We test both with and without attributes, because they used to be
+ // different codepaths. We also test with an empty `sigdefault` set.
+ posix_spawnattr_t attr1;
+ posix_spawnattr_init(&attr1);
+
+ sigset_t empty_mask = {};
+ posix_spawnattr_t attr2;
+ posix_spawnattr_init(&attr2);
+ posix_spawnattr_setflags(&attr2, POSIX_SPAWN_SETSIGDEF);
+ posix_spawnattr_setsigdefault(&attr2, &empty_mask);
+
+ posix_spawnattr_t* attrs[] = { nullptr, &attr1, &attr2 };
+
+ ScopedSignalHandler ssh(SIGWINCH, [](int) { ASSERT_EQ(getpid(), parent); });
+
+ ExecTestHelper eth;
+ eth.SetArgs({"true", nullptr});
+ for (size_t i = 0; i < 128; ++i) {
+ posix_spawn(nullptr, "true", nullptr, attrs[i % 3], eth.GetArgs(), nullptr);
+ }
+}
diff --git a/tests/sys_ptrace_test.cpp b/tests/sys_ptrace_test.cpp
index d460dec..e6a1e22 100644
--- a/tests/sys_ptrace_test.cpp
+++ b/tests/sys_ptrace_test.cpp
@@ -271,18 +271,8 @@
// test fail on arm64, you will likely need to cherry-pick fdfeff0f into your
// kernel.
TEST(sys_ptrace, watchpoint_imprecise) {
- // Make sure we get interrupted in case a buggy kernel does not report the
- // watchpoint hit correctly.
- struct sigaction action, oldaction;
- action.sa_handler = [](int) {};
- sigemptyset(&action.sa_mask);
- action.sa_flags = 0;
- ASSERT_EQ(0, sigaction(SIGALRM, &action, &oldaction)) << strerror(errno);
- alarm(5);
-
+ // This test relies on the infrastructure to timeout if the test hangs.
run_watchpoint_test<Uint128_t>(watchpoint_imprecise_child, 8, sizeof(void*));
-
- ASSERT_EQ(0, sigaction(SIGALRM, &oldaction, nullptr)) << strerror(errno);
}
static void __attribute__((noinline)) breakpoint_func() {
diff --git a/tests/time_test.cpp b/tests/time_test.cpp
index 9218078..e1fae92 100644
--- a/tests/time_test.cpp
+++ b/tests/time_test.cpp
@@ -654,31 +654,38 @@
ASSERT_LT(t1 - t0, CLOCKS_PER_SEC / 1000);
}
-pid_t GetInvalidPid() {
- FILE* fp = fopen("/proc/sys/kernel/pid_max", "r");
+static pid_t GetInvalidPid() {
+ std::unique_ptr<FILE, decltype(&fclose)> fp{fopen("/proc/sys/kernel/pid_max", "r"), fclose};
long pid_max;
- fscanf(fp, "%ld", &pid_max);
- pid_t invalid_pid = static_cast<pid_t>(pid_max + 1);
- fclose(fp);
- return invalid_pid;
+ fscanf(fp.get(), "%ld", &pid_max);
+ return static_cast<pid_t>(pid_max + 1);
}
-TEST(time, clock_getcpuclockid) {
- // For current process.
+TEST(time, clock_getcpuclockid_current) {
clockid_t clockid;
ASSERT_EQ(0, clock_getcpuclockid(getpid(), &clockid));
-
timespec ts;
ASSERT_EQ(0, clock_gettime(clockid, &ts));
+}
- // For parent process.
+TEST(time, clock_getcpuclockid_parent) {
+ clockid_t clockid;
ASSERT_EQ(0, clock_getcpuclockid(getppid(), &clockid));
+ timespec ts;
ASSERT_EQ(0, clock_gettime(clockid, &ts));
+}
- // For invalid process.
+TEST(time, clock_getcpuclockid_ESRCH) {
// We can't use -1 for invalid pid here, because clock_getcpuclockid() can't detect it.
errno = 0;
- ASSERT_EQ(ESRCH, clock_getcpuclockid(GetInvalidPid(), &clockid));
+ // If this fails, your kernel needs commit e1b6b6ce to be backported.
+ clockid_t clockid;
+ ASSERT_EQ(ESRCH, clock_getcpuclockid(GetInvalidPid(), &clockid)) << "\n"
+ << "Please ensure that the following kernel patches or their replacements have been applied:\n"
+ << "* https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/"
+ << "commit/?id=e1b6b6ce55a0a25c8aa8af019095253b2133a41a\n"
+ << "* https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/"
+ << "commit/?id=c80ed088a519da53f27b798a69748eaabc66aadf\n";
ASSERT_EQ(0, errno);
}