1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 2013 The Android Open Source Project
3*8d67ca89SAndroid Build Coastguard Worker *
4*8d67ca89SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*8d67ca89SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*8d67ca89SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*8d67ca89SAndroid Build Coastguard Worker *
8*8d67ca89SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*8d67ca89SAndroid Build Coastguard Worker *
10*8d67ca89SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*8d67ca89SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*8d67ca89SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*8d67ca89SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*8d67ca89SAndroid Build Coastguard Worker * limitations under the License.
15*8d67ca89SAndroid Build Coastguard Worker */
16*8d67ca89SAndroid Build Coastguard Worker
17*8d67ca89SAndroid Build Coastguard Worker #include <fenv.h>
18*8d67ca89SAndroid Build Coastguard Worker #include <math.h>
19*8d67ca89SAndroid Build Coastguard Worker
20*8d67ca89SAndroid Build Coastguard Worker #include <benchmark/benchmark.h>
21*8d67ca89SAndroid Build Coastguard Worker #include "util.h"
22*8d67ca89SAndroid Build Coastguard Worker
23*8d67ca89SAndroid Build Coastguard Worker static const double values[] = { 1234.0, nan(""), HUGE_VAL, 0.0 };
24*8d67ca89SAndroid Build Coastguard Worker static const char* names[] = { "1234.0", "nan", "HUGE_VAL", "0.0" };
25*8d67ca89SAndroid Build Coastguard Worker
SetLabel(benchmark::State & state)26*8d67ca89SAndroid Build Coastguard Worker static void SetLabel(benchmark::State& state) {
27*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(names[state.range(0)]);
28*8d67ca89SAndroid Build Coastguard Worker }
29*8d67ca89SAndroid Build Coastguard Worker
30*8d67ca89SAndroid Build Coastguard Worker // Avoid optimization.
31*8d67ca89SAndroid Build Coastguard Worker volatile double d;
32*8d67ca89SAndroid Build Coastguard Worker volatile double v;
33*8d67ca89SAndroid Build Coastguard Worker volatile float f;
34*8d67ca89SAndroid Build Coastguard Worker
35*8d67ca89SAndroid Build Coastguard Worker static float zero = 0.0f;
36*8d67ca89SAndroid Build Coastguard Worker static double zerod = 0.0f;
37*8d67ca89SAndroid Build Coastguard Worker
BM_math_sqrt(benchmark::State & state)38*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sqrt(benchmark::State& state) {
39*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
40*8d67ca89SAndroid Build Coastguard Worker v = 2.0;
41*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
42*8d67ca89SAndroid Build Coastguard Worker d += sqrt(v);
43*8d67ca89SAndroid Build Coastguard Worker }
44*8d67ca89SAndroid Build Coastguard Worker }
45*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_sqrt);
46*8d67ca89SAndroid Build Coastguard Worker
BM_math_log10(benchmark::State & state)47*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log10(benchmark::State& state) {
48*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
49*8d67ca89SAndroid Build Coastguard Worker v = 1234.0;
50*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
51*8d67ca89SAndroid Build Coastguard Worker d += log10(v);
52*8d67ca89SAndroid Build Coastguard Worker }
53*8d67ca89SAndroid Build Coastguard Worker }
54*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log10);
55*8d67ca89SAndroid Build Coastguard Worker
BM_math_logb(benchmark::State & state)56*8d67ca89SAndroid Build Coastguard Worker static void BM_math_logb(benchmark::State& state) {
57*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
58*8d67ca89SAndroid Build Coastguard Worker v = 1234.0;
59*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
60*8d67ca89SAndroid Build Coastguard Worker d += logb(v);
61*8d67ca89SAndroid Build Coastguard Worker }
62*8d67ca89SAndroid Build Coastguard Worker }
63*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_logb);
64*8d67ca89SAndroid Build Coastguard Worker
BM_math_isfinite_macro(benchmark::State & state)65*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isfinite_macro(benchmark::State& state) {
66*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
67*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
68*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
69*8d67ca89SAndroid Build Coastguard Worker d += isfinite(v);
70*8d67ca89SAndroid Build Coastguard Worker }
71*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
72*8d67ca89SAndroid Build Coastguard Worker }
73*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isfinite_macro, "MATH_COMMON");
74*8d67ca89SAndroid Build Coastguard Worker
BM_math_isfinite(benchmark::State & state)75*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isfinite(benchmark::State& state) {
76*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
77*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
78*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
79*8d67ca89SAndroid Build Coastguard Worker d += isfinite(v);
80*8d67ca89SAndroid Build Coastguard Worker }
81*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
82*8d67ca89SAndroid Build Coastguard Worker }
83*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isfinite, "MATH_COMMON");
84*8d67ca89SAndroid Build Coastguard Worker
BM_math_isinf_macro(benchmark::State & state)85*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isinf_macro(benchmark::State& state) {
86*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
87*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
88*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
89*8d67ca89SAndroid Build Coastguard Worker d += isinf(v);
90*8d67ca89SAndroid Build Coastguard Worker }
91*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
92*8d67ca89SAndroid Build Coastguard Worker }
93*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isinf_macro, "MATH_COMMON");
94*8d67ca89SAndroid Build Coastguard Worker
BM_math_isinf(benchmark::State & state)95*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isinf(benchmark::State& state) {
96*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
97*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
98*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
99*8d67ca89SAndroid Build Coastguard Worker d += (isinf)(v);
100*8d67ca89SAndroid Build Coastguard Worker }
101*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
102*8d67ca89SAndroid Build Coastguard Worker }
103*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isinf, "MATH_COMMON");
104*8d67ca89SAndroid Build Coastguard Worker
BM_math_isnan_macro(benchmark::State & state)105*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isnan_macro(benchmark::State& state) {
106*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
107*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
108*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
109*8d67ca89SAndroid Build Coastguard Worker d += isnan(v);
110*8d67ca89SAndroid Build Coastguard Worker }
111*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
112*8d67ca89SAndroid Build Coastguard Worker }
113*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isnan_macro, "MATH_COMMON");
114*8d67ca89SAndroid Build Coastguard Worker
BM_math_isnan(benchmark::State & state)115*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isnan(benchmark::State& state) {
116*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
117*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
118*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
119*8d67ca89SAndroid Build Coastguard Worker d += (isnan)(v);
120*8d67ca89SAndroid Build Coastguard Worker }
121*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
122*8d67ca89SAndroid Build Coastguard Worker }
123*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isnan, "MATH_COMMON");
124*8d67ca89SAndroid Build Coastguard Worker
BM_math_isnormal_macro(benchmark::State & state)125*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isnormal_macro(benchmark::State& state) {
126*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
127*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
128*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
129*8d67ca89SAndroid Build Coastguard Worker d += isnormal(v);
130*8d67ca89SAndroid Build Coastguard Worker }
131*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
132*8d67ca89SAndroid Build Coastguard Worker }
133*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isnormal_macro, "MATH_COMMON");
134*8d67ca89SAndroid Build Coastguard Worker
BM_math_isnormal(benchmark::State & state)135*8d67ca89SAndroid Build Coastguard Worker static void BM_math_isnormal(benchmark::State& state) {
136*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
137*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
138*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
139*8d67ca89SAndroid Build Coastguard Worker d += isnormal(v);
140*8d67ca89SAndroid Build Coastguard Worker }
141*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
142*8d67ca89SAndroid Build Coastguard Worker }
143*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_isnormal, "MATH_COMMON");
144*8d67ca89SAndroid Build Coastguard Worker
BM_math_sin_fast(benchmark::State & state)145*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sin_fast(benchmark::State& state) {
146*8d67ca89SAndroid Build Coastguard Worker d = 1.0;
147*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
148*8d67ca89SAndroid Build Coastguard Worker d += sin(d);
149*8d67ca89SAndroid Build Coastguard Worker }
150*8d67ca89SAndroid Build Coastguard Worker }
151*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_sin_fast);
152*8d67ca89SAndroid Build Coastguard Worker
BM_math_sin_feupdateenv(benchmark::State & state)153*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sin_feupdateenv(benchmark::State& state) {
154*8d67ca89SAndroid Build Coastguard Worker d = 1.0;
155*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
156*8d67ca89SAndroid Build Coastguard Worker fenv_t __libc_save_rm;
157*8d67ca89SAndroid Build Coastguard Worker feholdexcept(&__libc_save_rm);
158*8d67ca89SAndroid Build Coastguard Worker fesetround(FE_TONEAREST);
159*8d67ca89SAndroid Build Coastguard Worker d += sin(d);
160*8d67ca89SAndroid Build Coastguard Worker feupdateenv(&__libc_save_rm);
161*8d67ca89SAndroid Build Coastguard Worker }
162*8d67ca89SAndroid Build Coastguard Worker }
163*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_sin_feupdateenv);
164*8d67ca89SAndroid Build Coastguard Worker
BM_math_sin_fesetenv(benchmark::State & state)165*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sin_fesetenv(benchmark::State& state) {
166*8d67ca89SAndroid Build Coastguard Worker d = 1.0;
167*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
168*8d67ca89SAndroid Build Coastguard Worker fenv_t __libc_save_rm;
169*8d67ca89SAndroid Build Coastguard Worker feholdexcept(&__libc_save_rm);
170*8d67ca89SAndroid Build Coastguard Worker fesetround(FE_TONEAREST);
171*8d67ca89SAndroid Build Coastguard Worker d += sin(d);
172*8d67ca89SAndroid Build Coastguard Worker fesetenv(&__libc_save_rm);
173*8d67ca89SAndroid Build Coastguard Worker }
174*8d67ca89SAndroid Build Coastguard Worker }
175*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_sin_fesetenv);
176*8d67ca89SAndroid Build Coastguard Worker
BM_math_fpclassify(benchmark::State & state)177*8d67ca89SAndroid Build Coastguard Worker static void BM_math_fpclassify(benchmark::State& state) {
178*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
179*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
180*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
181*8d67ca89SAndroid Build Coastguard Worker d += fpclassify(v);
182*8d67ca89SAndroid Build Coastguard Worker }
183*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
184*8d67ca89SAndroid Build Coastguard Worker }
185*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_fpclassify, "MATH_COMMON");
186*8d67ca89SAndroid Build Coastguard Worker
BM_math_signbit_macro(benchmark::State & state)187*8d67ca89SAndroid Build Coastguard Worker static void BM_math_signbit_macro(benchmark::State& state) {
188*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
189*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
190*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
191*8d67ca89SAndroid Build Coastguard Worker d += signbit(v);
192*8d67ca89SAndroid Build Coastguard Worker }
193*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
194*8d67ca89SAndroid Build Coastguard Worker }
195*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_signbit_macro, "MATH_COMMON");
196*8d67ca89SAndroid Build Coastguard Worker
BM_math_signbit(benchmark::State & state)197*8d67ca89SAndroid Build Coastguard Worker static void BM_math_signbit(benchmark::State& state) {
198*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
199*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
200*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
201*8d67ca89SAndroid Build Coastguard Worker d += signbit(v);
202*8d67ca89SAndroid Build Coastguard Worker }
203*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
204*8d67ca89SAndroid Build Coastguard Worker }
205*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_signbit, "MATH_COMMON");
206*8d67ca89SAndroid Build Coastguard Worker
BM_math_fabs_macro(benchmark::State & state)207*8d67ca89SAndroid Build Coastguard Worker static void BM_math_fabs_macro(benchmark::State& state) {
208*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
209*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
210*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
211*8d67ca89SAndroid Build Coastguard Worker d += fabs(v);
212*8d67ca89SAndroid Build Coastguard Worker }
213*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
214*8d67ca89SAndroid Build Coastguard Worker }
215*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_fabs_macro, "MATH_COMMON");
216*8d67ca89SAndroid Build Coastguard Worker
BM_math_fabs(benchmark::State & state)217*8d67ca89SAndroid Build Coastguard Worker static void BM_math_fabs(benchmark::State& state) {
218*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
219*8d67ca89SAndroid Build Coastguard Worker v = values[state.range(0)];
220*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
221*8d67ca89SAndroid Build Coastguard Worker d += (fabs)(v);
222*8d67ca89SAndroid Build Coastguard Worker }
223*8d67ca89SAndroid Build Coastguard Worker SetLabel(state);
224*8d67ca89SAndroid Build Coastguard Worker }
225*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_fabs, "MATH_COMMON");
226*8d67ca89SAndroid Build Coastguard Worker
BM_math_sincos(benchmark::State & state)227*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sincos(benchmark::State& state) {
228*8d67ca89SAndroid Build Coastguard Worker d = 1.0;
229*8d67ca89SAndroid Build Coastguard Worker while (state.KeepRunning()) {
230*8d67ca89SAndroid Build Coastguard Worker double s, c;
231*8d67ca89SAndroid Build Coastguard Worker sincos(d, &s, &c);
232*8d67ca89SAndroid Build Coastguard Worker d += s + c;
233*8d67ca89SAndroid Build Coastguard Worker }
234*8d67ca89SAndroid Build Coastguard Worker }
235*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_sincos);
236*8d67ca89SAndroid Build Coastguard Worker
237*8d67ca89SAndroid Build Coastguard Worker #include "expf_input.cpp"
238*8d67ca89SAndroid Build Coastguard Worker
BM_math_expf_speccpu2017(benchmark::State & state)239*8d67ca89SAndroid Build Coastguard Worker static void BM_math_expf_speccpu2017(benchmark::State& state) {
240*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
241*8d67ca89SAndroid Build Coastguard Worker auto cin = expf_input.cbegin();
242*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
243*8d67ca89SAndroid Build Coastguard Worker f = expf(*cin);
244*8d67ca89SAndroid Build Coastguard Worker if (++cin == expf_input.cend())
245*8d67ca89SAndroid Build Coastguard Worker cin = expf_input.cbegin();
246*8d67ca89SAndroid Build Coastguard Worker }
247*8d67ca89SAndroid Build Coastguard Worker }
248*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_expf_speccpu2017);
249*8d67ca89SAndroid Build Coastguard Worker
BM_math_expf_speccpu2017_latency(benchmark::State & state)250*8d67ca89SAndroid Build Coastguard Worker static void BM_math_expf_speccpu2017_latency(benchmark::State& state) {
251*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
252*8d67ca89SAndroid Build Coastguard Worker auto cin = expf_input.cbegin();
253*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
254*8d67ca89SAndroid Build Coastguard Worker f = expf(f * zero + *cin);
255*8d67ca89SAndroid Build Coastguard Worker if (++cin == expf_input.cend())
256*8d67ca89SAndroid Build Coastguard Worker cin = expf_input.cbegin();
257*8d67ca89SAndroid Build Coastguard Worker }
258*8d67ca89SAndroid Build Coastguard Worker }
259*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_expf_speccpu2017_latency);
260*8d67ca89SAndroid Build Coastguard Worker
261*8d67ca89SAndroid Build Coastguard Worker // Create a double version of expf_input to avoid overhead of float to
262*8d67ca89SAndroid Build Coastguard Worker // double conversion.
263*8d67ca89SAndroid Build Coastguard Worker static const std::vector<double> exp_input (expf_input.begin(),
264*8d67ca89SAndroid Build Coastguard Worker expf_input.end());
265*8d67ca89SAndroid Build Coastguard Worker
BM_math_exp_speccpu2017(benchmark::State & state)266*8d67ca89SAndroid Build Coastguard Worker static void BM_math_exp_speccpu2017(benchmark::State& state) {
267*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
268*8d67ca89SAndroid Build Coastguard Worker auto cin = exp_input.cbegin();
269*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
270*8d67ca89SAndroid Build Coastguard Worker d = exp(*cin);
271*8d67ca89SAndroid Build Coastguard Worker if (++cin == exp_input.cend())
272*8d67ca89SAndroid Build Coastguard Worker cin = exp_input.cbegin();
273*8d67ca89SAndroid Build Coastguard Worker }
274*8d67ca89SAndroid Build Coastguard Worker }
275*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_exp_speccpu2017);
276*8d67ca89SAndroid Build Coastguard Worker
BM_math_exp_speccpu2017_latency(benchmark::State & state)277*8d67ca89SAndroid Build Coastguard Worker static void BM_math_exp_speccpu2017_latency(benchmark::State& state) {
278*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
279*8d67ca89SAndroid Build Coastguard Worker auto cin = exp_input.cbegin();
280*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
281*8d67ca89SAndroid Build Coastguard Worker d = exp(d * zerod + *cin);
282*8d67ca89SAndroid Build Coastguard Worker if (++cin == exp_input.cend())
283*8d67ca89SAndroid Build Coastguard Worker cin = exp_input.cbegin();
284*8d67ca89SAndroid Build Coastguard Worker }
285*8d67ca89SAndroid Build Coastguard Worker }
286*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_exp_speccpu2017_latency);
287*8d67ca89SAndroid Build Coastguard Worker
BM_math_exp2f_speccpu2017(benchmark::State & state)288*8d67ca89SAndroid Build Coastguard Worker static void BM_math_exp2f_speccpu2017(benchmark::State& state) {
289*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
290*8d67ca89SAndroid Build Coastguard Worker auto cin = expf_input.cbegin();
291*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
292*8d67ca89SAndroid Build Coastguard Worker f = exp2f(*cin);
293*8d67ca89SAndroid Build Coastguard Worker if (++cin == expf_input.cend())
294*8d67ca89SAndroid Build Coastguard Worker cin = expf_input.cbegin();
295*8d67ca89SAndroid Build Coastguard Worker }
296*8d67ca89SAndroid Build Coastguard Worker }
297*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_exp2f_speccpu2017);
298*8d67ca89SAndroid Build Coastguard Worker
BM_math_exp2f_speccpu2017_latency(benchmark::State & state)299*8d67ca89SAndroid Build Coastguard Worker static void BM_math_exp2f_speccpu2017_latency(benchmark::State& state) {
300*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
301*8d67ca89SAndroid Build Coastguard Worker auto cin = expf_input.cbegin();
302*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
303*8d67ca89SAndroid Build Coastguard Worker f = exp2f(f * zero + *cin);
304*8d67ca89SAndroid Build Coastguard Worker if (++cin == expf_input.cend())
305*8d67ca89SAndroid Build Coastguard Worker cin = expf_input.cbegin();
306*8d67ca89SAndroid Build Coastguard Worker }
307*8d67ca89SAndroid Build Coastguard Worker }
308*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_exp2f_speccpu2017_latency);
309*8d67ca89SAndroid Build Coastguard Worker
BM_math_exp2_speccpu2017(benchmark::State & state)310*8d67ca89SAndroid Build Coastguard Worker static void BM_math_exp2_speccpu2017(benchmark::State& state) {
311*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
312*8d67ca89SAndroid Build Coastguard Worker auto cin = exp_input.cbegin();
313*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
314*8d67ca89SAndroid Build Coastguard Worker f = exp2(*cin);
315*8d67ca89SAndroid Build Coastguard Worker if (++cin == exp_input.cend())
316*8d67ca89SAndroid Build Coastguard Worker cin = exp_input.cbegin();
317*8d67ca89SAndroid Build Coastguard Worker }
318*8d67ca89SAndroid Build Coastguard Worker }
319*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_exp2_speccpu2017);
320*8d67ca89SAndroid Build Coastguard Worker
BM_math_exp2_speccpu2017_latency(benchmark::State & state)321*8d67ca89SAndroid Build Coastguard Worker static void BM_math_exp2_speccpu2017_latency(benchmark::State& state) {
322*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
323*8d67ca89SAndroid Build Coastguard Worker auto cin = exp_input.cbegin();
324*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
325*8d67ca89SAndroid Build Coastguard Worker f = exp2(d * zero + *cin);
326*8d67ca89SAndroid Build Coastguard Worker if (++cin == exp_input.cend())
327*8d67ca89SAndroid Build Coastguard Worker cin = exp_input.cbegin();
328*8d67ca89SAndroid Build Coastguard Worker }
329*8d67ca89SAndroid Build Coastguard Worker }
330*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_exp2_speccpu2017_latency);
331*8d67ca89SAndroid Build Coastguard Worker
332*8d67ca89SAndroid Build Coastguard Worker #include "powf_input.cpp"
333*8d67ca89SAndroid Build Coastguard Worker
334*8d67ca89SAndroid Build Coastguard Worker static const std::vector<std::pair<double, double>> pow_input
335*8d67ca89SAndroid Build Coastguard Worker (powf_input.begin(), powf_input.end());
336*8d67ca89SAndroid Build Coastguard Worker
BM_math_powf_speccpu2006(benchmark::State & state)337*8d67ca89SAndroid Build Coastguard Worker static void BM_math_powf_speccpu2006(benchmark::State& state) {
338*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
339*8d67ca89SAndroid Build Coastguard Worker auto cin = powf_input.cbegin();
340*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
341*8d67ca89SAndroid Build Coastguard Worker f = powf(cin->first, cin->second);
342*8d67ca89SAndroid Build Coastguard Worker if (++cin == powf_input.cend())
343*8d67ca89SAndroid Build Coastguard Worker cin = powf_input.cbegin();
344*8d67ca89SAndroid Build Coastguard Worker }
345*8d67ca89SAndroid Build Coastguard Worker }
346*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_powf_speccpu2006);
347*8d67ca89SAndroid Build Coastguard Worker
BM_math_powf_speccpu2017_latency(benchmark::State & state)348*8d67ca89SAndroid Build Coastguard Worker static void BM_math_powf_speccpu2017_latency(benchmark::State& state) {
349*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
350*8d67ca89SAndroid Build Coastguard Worker auto cin = powf_input.cbegin();
351*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
352*8d67ca89SAndroid Build Coastguard Worker f = powf(f * zero + cin->first, cin->second);
353*8d67ca89SAndroid Build Coastguard Worker if (++cin == powf_input.cend())
354*8d67ca89SAndroid Build Coastguard Worker cin = powf_input.cbegin();
355*8d67ca89SAndroid Build Coastguard Worker }
356*8d67ca89SAndroid Build Coastguard Worker }
357*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_powf_speccpu2017_latency);
358*8d67ca89SAndroid Build Coastguard Worker
BM_math_pow_speccpu2006(benchmark::State & state)359*8d67ca89SAndroid Build Coastguard Worker static void BM_math_pow_speccpu2006(benchmark::State& state) {
360*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
361*8d67ca89SAndroid Build Coastguard Worker auto cin = pow_input.cbegin();
362*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
363*8d67ca89SAndroid Build Coastguard Worker f = pow(cin->first, cin->second);
364*8d67ca89SAndroid Build Coastguard Worker if (++cin == pow_input.cend())
365*8d67ca89SAndroid Build Coastguard Worker cin = pow_input.cbegin();
366*8d67ca89SAndroid Build Coastguard Worker }
367*8d67ca89SAndroid Build Coastguard Worker }
368*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_pow_speccpu2006);
369*8d67ca89SAndroid Build Coastguard Worker
BM_math_pow_speccpu2017_latency(benchmark::State & state)370*8d67ca89SAndroid Build Coastguard Worker static void BM_math_pow_speccpu2017_latency(benchmark::State& state) {
371*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
372*8d67ca89SAndroid Build Coastguard Worker auto cin = pow_input.cbegin();
373*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
374*8d67ca89SAndroid Build Coastguard Worker d = powf(d * zero + cin->first, cin->second);
375*8d67ca89SAndroid Build Coastguard Worker if (++cin == pow_input.cend())
376*8d67ca89SAndroid Build Coastguard Worker cin = pow_input.cbegin();
377*8d67ca89SAndroid Build Coastguard Worker }
378*8d67ca89SAndroid Build Coastguard Worker }
379*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_pow_speccpu2017_latency);
380*8d67ca89SAndroid Build Coastguard Worker
381*8d67ca89SAndroid Build Coastguard Worker #include "logf_input.cpp"
382*8d67ca89SAndroid Build Coastguard Worker
383*8d67ca89SAndroid Build Coastguard Worker static const std::vector<double> log_input (logf_input.begin(),
384*8d67ca89SAndroid Build Coastguard Worker logf_input.end());
385*8d67ca89SAndroid Build Coastguard Worker
BM_math_logf_speccpu2017(benchmark::State & state)386*8d67ca89SAndroid Build Coastguard Worker static void BM_math_logf_speccpu2017(benchmark::State& state) {
387*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
388*8d67ca89SAndroid Build Coastguard Worker auto cin = logf_input.cbegin();
389*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
390*8d67ca89SAndroid Build Coastguard Worker f = logf(*cin);
391*8d67ca89SAndroid Build Coastguard Worker if (++cin == logf_input.cend())
392*8d67ca89SAndroid Build Coastguard Worker cin = logf_input.cbegin();
393*8d67ca89SAndroid Build Coastguard Worker }
394*8d67ca89SAndroid Build Coastguard Worker }
395*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_logf_speccpu2017);
396*8d67ca89SAndroid Build Coastguard Worker
BM_math_logf_speccpu2017_latency(benchmark::State & state)397*8d67ca89SAndroid Build Coastguard Worker static void BM_math_logf_speccpu2017_latency(benchmark::State& state) {
398*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
399*8d67ca89SAndroid Build Coastguard Worker auto cin = logf_input.cbegin();
400*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
401*8d67ca89SAndroid Build Coastguard Worker f = logf(f * zero + *cin);
402*8d67ca89SAndroid Build Coastguard Worker if (++cin == logf_input.cend())
403*8d67ca89SAndroid Build Coastguard Worker cin = logf_input.cbegin();
404*8d67ca89SAndroid Build Coastguard Worker }
405*8d67ca89SAndroid Build Coastguard Worker }
406*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_logf_speccpu2017_latency);
407*8d67ca89SAndroid Build Coastguard Worker
BM_math_log_speccpu2017(benchmark::State & state)408*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log_speccpu2017(benchmark::State& state) {
409*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
410*8d67ca89SAndroid Build Coastguard Worker auto cin = log_input.cbegin();
411*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
412*8d67ca89SAndroid Build Coastguard Worker d = log(*cin);
413*8d67ca89SAndroid Build Coastguard Worker if (++cin == log_input.cend())
414*8d67ca89SAndroid Build Coastguard Worker cin = log_input.cbegin();
415*8d67ca89SAndroid Build Coastguard Worker }
416*8d67ca89SAndroid Build Coastguard Worker }
417*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log_speccpu2017);
418*8d67ca89SAndroid Build Coastguard Worker
BM_math_log_speccpu2017_latency(benchmark::State & state)419*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log_speccpu2017_latency(benchmark::State& state) {
420*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
421*8d67ca89SAndroid Build Coastguard Worker auto cin = log_input.cbegin();
422*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
423*8d67ca89SAndroid Build Coastguard Worker d = log(d * zerod + *cin);
424*8d67ca89SAndroid Build Coastguard Worker if (++cin == log_input.cend())
425*8d67ca89SAndroid Build Coastguard Worker cin = log_input.cbegin();
426*8d67ca89SAndroid Build Coastguard Worker }
427*8d67ca89SAndroid Build Coastguard Worker }
428*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log_speccpu2017_latency);
429*8d67ca89SAndroid Build Coastguard Worker
BM_math_log2f_speccpu2017(benchmark::State & state)430*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log2f_speccpu2017(benchmark::State& state) {
431*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
432*8d67ca89SAndroid Build Coastguard Worker auto cin = logf_input.cbegin();
433*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
434*8d67ca89SAndroid Build Coastguard Worker f = log2f(*cin);
435*8d67ca89SAndroid Build Coastguard Worker if (++cin == logf_input.cend())
436*8d67ca89SAndroid Build Coastguard Worker cin = logf_input.cbegin();
437*8d67ca89SAndroid Build Coastguard Worker }
438*8d67ca89SAndroid Build Coastguard Worker }
439*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log2f_speccpu2017);
440*8d67ca89SAndroid Build Coastguard Worker
BM_math_log2_speccpu2017_latency(benchmark::State & state)441*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log2_speccpu2017_latency(benchmark::State& state) {
442*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
443*8d67ca89SAndroid Build Coastguard Worker auto cin = log_input.cbegin();
444*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
445*8d67ca89SAndroid Build Coastguard Worker d = log2(d * zerod + *cin);
446*8d67ca89SAndroid Build Coastguard Worker if (++cin == log_input.cend())
447*8d67ca89SAndroid Build Coastguard Worker cin = log_input.cbegin();
448*8d67ca89SAndroid Build Coastguard Worker }
449*8d67ca89SAndroid Build Coastguard Worker }
450*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log2_speccpu2017_latency);
451*8d67ca89SAndroid Build Coastguard Worker
BM_math_log2_speccpu2017(benchmark::State & state)452*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log2_speccpu2017(benchmark::State& state) {
453*8d67ca89SAndroid Build Coastguard Worker d = 0.0;
454*8d67ca89SAndroid Build Coastguard Worker auto cin = log_input.cbegin();
455*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
456*8d67ca89SAndroid Build Coastguard Worker d = log2(*cin);
457*8d67ca89SAndroid Build Coastguard Worker if (++cin == log_input.cend())
458*8d67ca89SAndroid Build Coastguard Worker cin = log_input.cbegin();
459*8d67ca89SAndroid Build Coastguard Worker }
460*8d67ca89SAndroid Build Coastguard Worker }
461*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log2_speccpu2017);
462*8d67ca89SAndroid Build Coastguard Worker
BM_math_log2f_speccpu2017_latency(benchmark::State & state)463*8d67ca89SAndroid Build Coastguard Worker static void BM_math_log2f_speccpu2017_latency(benchmark::State& state) {
464*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
465*8d67ca89SAndroid Build Coastguard Worker auto cin = logf_input.cbegin();
466*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
467*8d67ca89SAndroid Build Coastguard Worker f = log2f(f * zero + *cin);
468*8d67ca89SAndroid Build Coastguard Worker if (++cin == logf_input.cend())
469*8d67ca89SAndroid Build Coastguard Worker cin = logf_input.cbegin();
470*8d67ca89SAndroid Build Coastguard Worker }
471*8d67ca89SAndroid Build Coastguard Worker }
472*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK(BM_math_log2f_speccpu2017_latency);
473*8d67ca89SAndroid Build Coastguard Worker
474*8d67ca89SAndroid Build Coastguard Worker // Four ranges of values are checked:
475*8d67ca89SAndroid Build Coastguard Worker // * 0.0 <= x < 0.1
476*8d67ca89SAndroid Build Coastguard Worker // * 0.1 <= x < 0.7
477*8d67ca89SAndroid Build Coastguard Worker // * 0.7 <= x < 3.1
478*8d67ca89SAndroid Build Coastguard Worker // * -3.1 <= x < 3.1
479*8d67ca89SAndroid Build Coastguard Worker // * 3.3 <= x < 33.3
480*8d67ca89SAndroid Build Coastguard Worker // * 100.0 <= x < 1000.0
481*8d67ca89SAndroid Build Coastguard Worker // * 1e6 <= x < 1e32
482*8d67ca89SAndroid Build Coastguard Worker // * 1e32 < x < FLT_MAX
483*8d67ca89SAndroid Build Coastguard Worker
484*8d67ca89SAndroid Build Coastguard Worker #include "sincosf_input.cpp"
485*8d67ca89SAndroid Build Coastguard Worker
BM_math_sinf(benchmark::State & state)486*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sinf(benchmark::State& state) {
487*8d67ca89SAndroid Build Coastguard Worker auto range = sincosf_input[state.range(0)];
488*8d67ca89SAndroid Build Coastguard Worker auto cin = range.values.cbegin();
489*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
490*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
491*8d67ca89SAndroid Build Coastguard Worker f = sinf(*cin);
492*8d67ca89SAndroid Build Coastguard Worker if (++cin == range.values.cend())
493*8d67ca89SAndroid Build Coastguard Worker cin = range.values.cbegin();
494*8d67ca89SAndroid Build Coastguard Worker }
495*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(range.label);
496*8d67ca89SAndroid Build Coastguard Worker }
497*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_sinf, "MATH_SINCOS_COMMON");
498*8d67ca89SAndroid Build Coastguard Worker
BM_math_sinf_latency(benchmark::State & state)499*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sinf_latency(benchmark::State& state) {
500*8d67ca89SAndroid Build Coastguard Worker auto range = sincosf_input[state.range(0)];
501*8d67ca89SAndroid Build Coastguard Worker auto cin = range.values.cbegin();
502*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
503*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
504*8d67ca89SAndroid Build Coastguard Worker f = sinf(f * zero + *cin);
505*8d67ca89SAndroid Build Coastguard Worker if (++cin == range.values.cend())
506*8d67ca89SAndroid Build Coastguard Worker cin = range.values.cbegin();
507*8d67ca89SAndroid Build Coastguard Worker }
508*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(range.label);
509*8d67ca89SAndroid Build Coastguard Worker }
510*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_sinf_latency, "MATH_SINCOS_COMMON");
511*8d67ca89SAndroid Build Coastguard Worker
BM_math_cosf(benchmark::State & state)512*8d67ca89SAndroid Build Coastguard Worker static void BM_math_cosf(benchmark::State& state) {
513*8d67ca89SAndroid Build Coastguard Worker auto range = sincosf_input[state.range(0)];
514*8d67ca89SAndroid Build Coastguard Worker auto cin = range.values.cbegin();
515*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
516*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
517*8d67ca89SAndroid Build Coastguard Worker f = cosf(*cin);
518*8d67ca89SAndroid Build Coastguard Worker if (++cin == range.values.cend())
519*8d67ca89SAndroid Build Coastguard Worker cin = range.values.cbegin();
520*8d67ca89SAndroid Build Coastguard Worker }
521*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(range.label);
522*8d67ca89SAndroid Build Coastguard Worker }
523*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_cosf, "MATH_SINCOS_COMMON");
524*8d67ca89SAndroid Build Coastguard Worker
BM_math_cosf_latency(benchmark::State & state)525*8d67ca89SAndroid Build Coastguard Worker static void BM_math_cosf_latency(benchmark::State& state) {
526*8d67ca89SAndroid Build Coastguard Worker auto range = sincosf_input[state.range(0)];
527*8d67ca89SAndroid Build Coastguard Worker auto cin = range.values.cbegin();
528*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
529*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
530*8d67ca89SAndroid Build Coastguard Worker f = cosf(f * zero + *cin);
531*8d67ca89SAndroid Build Coastguard Worker if (++cin == range.values.cend())
532*8d67ca89SAndroid Build Coastguard Worker cin = range.values.cbegin();
533*8d67ca89SAndroid Build Coastguard Worker }
534*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(range.label);
535*8d67ca89SAndroid Build Coastguard Worker }
536*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_cosf_latency, "MATH_SINCOS_COMMON");
537*8d67ca89SAndroid Build Coastguard Worker
BM_math_sincosf(benchmark::State & state)538*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sincosf(benchmark::State& state) {
539*8d67ca89SAndroid Build Coastguard Worker auto range = sincosf_input[state.range(0)];
540*8d67ca89SAndroid Build Coastguard Worker auto cin = range.values.cbegin();
541*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
542*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
543*8d67ca89SAndroid Build Coastguard Worker float s, c;
544*8d67ca89SAndroid Build Coastguard Worker sincosf(*cin, &s, &c);
545*8d67ca89SAndroid Build Coastguard Worker f += s;
546*8d67ca89SAndroid Build Coastguard Worker if (++cin == range.values.cend())
547*8d67ca89SAndroid Build Coastguard Worker cin = range.values.cbegin();
548*8d67ca89SAndroid Build Coastguard Worker }
549*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(range.label);
550*8d67ca89SAndroid Build Coastguard Worker }
551*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_sincosf, "MATH_SINCOS_COMMON");
552*8d67ca89SAndroid Build Coastguard Worker
BM_math_sincosf_latency(benchmark::State & state)553*8d67ca89SAndroid Build Coastguard Worker static void BM_math_sincosf_latency(benchmark::State& state) {
554*8d67ca89SAndroid Build Coastguard Worker auto range = sincosf_input[state.range(0)];
555*8d67ca89SAndroid Build Coastguard Worker auto cin = range.values.cbegin();
556*8d67ca89SAndroid Build Coastguard Worker f = 0.0;
557*8d67ca89SAndroid Build Coastguard Worker for (auto _ : state) {
558*8d67ca89SAndroid Build Coastguard Worker float s, c;
559*8d67ca89SAndroid Build Coastguard Worker sincosf(f * zero + *cin, &s, &c);
560*8d67ca89SAndroid Build Coastguard Worker f += s;
561*8d67ca89SAndroid Build Coastguard Worker if (++cin == range.values.cend())
562*8d67ca89SAndroid Build Coastguard Worker cin = range.values.cbegin();
563*8d67ca89SAndroid Build Coastguard Worker }
564*8d67ca89SAndroid Build Coastguard Worker state.SetLabel(range.label);
565*8d67ca89SAndroid Build Coastguard Worker }
566*8d67ca89SAndroid Build Coastguard Worker BIONIC_BENCHMARK_WITH_ARG(BM_math_sincosf_latency, "MATH_SINCOS_COMMON");
567