Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2013 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 17 | #include <fenv.h> |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 18 | #include <math.h> |
| 19 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 20 | #include <benchmark/benchmark.h> |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 21 | #include "util.h" |
Christopher Ferris | df4942c | 2015-02-17 19:58:53 -0800 | [diff] [blame] | 22 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 23 | static const double values[] = { 1234.0, nan(""), HUGE_VAL, 0.0 }; |
| 24 | static const char* names[] = { "1234.0", "nan", "HUGE_VAL", "0.0" }; |
| 25 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 26 | static void SetLabel(benchmark::State& state) { |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 27 | state.SetLabel(names[state.range(0)]); |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 28 | } |
Christopher Ferris | df4942c | 2015-02-17 19:58:53 -0800 | [diff] [blame] | 29 | |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 30 | // Avoid optimization. |
Dan Albert | 055a59c | 2014-09-25 15:43:48 -0700 | [diff] [blame] | 31 | volatile double d; |
| 32 | volatile double v; |
Adhemerval Zanella | 357f6c1 | 2018-06-05 09:28:40 -0300 | [diff] [blame] | 33 | volatile float f; |
| 34 | |
| 35 | static float zero = 0.0f; |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 36 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 37 | static void BM_math_sqrt(benchmark::State& state) { |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 38 | d = 0.0; |
| 39 | v = 2.0; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 40 | while (state.KeepRunning()) { |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 41 | d += sqrt(v); |
| 42 | } |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 43 | } |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 44 | BIONIC_BENCHMARK(BM_math_sqrt); |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 45 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 46 | static void BM_math_log10(benchmark::State& state) { |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 47 | d = 0.0; |
| 48 | v = 1234.0; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 49 | while (state.KeepRunning()) { |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 50 | d += log10(v); |
| 51 | } |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 52 | } |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 53 | BIONIC_BENCHMARK(BM_math_log10); |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 54 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 55 | static void BM_math_logb(benchmark::State& state) { |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 56 | d = 0.0; |
| 57 | v = 1234.0; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 58 | while (state.KeepRunning()) { |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 59 | d += logb(v); |
| 60 | } |
Elliott Hughes | 9edb3e0 | 2013-02-06 15:47:09 -0800 | [diff] [blame] | 61 | } |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 62 | BIONIC_BENCHMARK(BM_math_logb); |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 63 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 64 | static void BM_math_isfinite_macro(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 65 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 66 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 67 | while (state.KeepRunning()) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 68 | d += isfinite(v); |
| 69 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 70 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 71 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 72 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isfinite_macro, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 73 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 74 | static void BM_math_isfinite(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 75 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 76 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 77 | while (state.KeepRunning()) { |
Elliott Hughes | 5c6a7bf | 2017-10-19 13:56:28 -0700 | [diff] [blame] | 78 | d += isfinite(v); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 79 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 80 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 81 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 82 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isfinite, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 83 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 84 | static void BM_math_isinf_macro(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 85 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 86 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 87 | while (state.KeepRunning()) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 88 | d += isinf(v); |
| 89 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 90 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 91 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 92 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isinf_macro, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 93 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 94 | static void BM_math_isinf(benchmark::State& state) { |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 95 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 96 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 97 | while (state.KeepRunning()) { |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 98 | d += (isinf)(v); |
| 99 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 100 | SetLabel(state); |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 101 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 102 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isinf, "MATH_COMMON"); |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 103 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 104 | static void BM_math_isnan_macro(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 105 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 106 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 107 | while (state.KeepRunning()) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 108 | d += isnan(v); |
| 109 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 110 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 111 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 112 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isnan_macro, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 113 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 114 | static void BM_math_isnan(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 115 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 116 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 117 | while (state.KeepRunning()) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 118 | d += (isnan)(v); |
| 119 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 120 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 121 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 122 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isnan, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 123 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 124 | static void BM_math_isnormal_macro(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 125 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 126 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 127 | while (state.KeepRunning()) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 128 | d += isnormal(v); |
| 129 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 130 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 131 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 132 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isnormal_macro, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 133 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 134 | static void BM_math_isnormal(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 135 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 136 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 137 | while (state.KeepRunning()) { |
Elliott Hughes | 5c6a7bf | 2017-10-19 13:56:28 -0700 | [diff] [blame] | 138 | d += isnormal(v); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 139 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 140 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 141 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 142 | BIONIC_BENCHMARK_WITH_ARG(BM_math_isnormal, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 143 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 144 | static void BM_math_sin_fast(benchmark::State& state) { |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 145 | d = 1.0; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 146 | while (state.KeepRunning()) { |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 147 | d += sin(d); |
| 148 | } |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 149 | } |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 150 | BIONIC_BENCHMARK(BM_math_sin_fast); |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 151 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 152 | static void BM_math_sin_feupdateenv(benchmark::State& state) { |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 153 | d = 1.0; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 154 | while (state.KeepRunning()) { |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 155 | fenv_t __libc_save_rm; |
| 156 | feholdexcept(&__libc_save_rm); |
| 157 | fesetround(FE_TONEAREST); |
| 158 | d += sin(d); |
| 159 | feupdateenv(&__libc_save_rm); |
| 160 | } |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 161 | } |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 162 | BIONIC_BENCHMARK(BM_math_sin_feupdateenv); |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 163 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 164 | static void BM_math_sin_fesetenv(benchmark::State& state) { |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 165 | d = 1.0; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 166 | while (state.KeepRunning()) { |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 167 | fenv_t __libc_save_rm; |
| 168 | feholdexcept(&__libc_save_rm); |
| 169 | fesetround(FE_TONEAREST); |
| 170 | d += sin(d); |
| 171 | fesetenv(&__libc_save_rm); |
| 172 | } |
Serban Constantinescu | a147a1d | 2014-06-08 16:55:22 +0100 | [diff] [blame] | 173 | } |
Anders Lewis | a7b0f88 | 2017-07-24 20:01:13 -0700 | [diff] [blame] | 174 | BIONIC_BENCHMARK(BM_math_sin_fesetenv); |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 175 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 176 | static void BM_math_fpclassify(benchmark::State& state) { |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 177 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 178 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 179 | while (state.KeepRunning()) { |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 180 | d += fpclassify(v); |
| 181 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 182 | SetLabel(state); |
Elliott Hughes | 02c78a3 | 2014-04-11 17:02:20 -0700 | [diff] [blame] | 183 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 184 | BIONIC_BENCHMARK_WITH_ARG(BM_math_fpclassify, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 185 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 186 | static void BM_math_signbit_macro(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 187 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 188 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 189 | while (state.KeepRunning()) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 190 | d += signbit(v); |
| 191 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 192 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 193 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 194 | BIONIC_BENCHMARK_WITH_ARG(BM_math_signbit_macro, "MATH_COMMON"); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 195 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 196 | static void BM_math_signbit(benchmark::State& state) { |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 197 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 198 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 199 | while (state.KeepRunning()) { |
Elliott Hughes | 5c6a7bf | 2017-10-19 13:56:28 -0700 | [diff] [blame] | 200 | d += signbit(v); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 201 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 202 | SetLabel(state); |
Elliott Hughes | b662280 | 2015-08-14 14:04:30 -0700 | [diff] [blame] | 203 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 204 | BIONIC_BENCHMARK_WITH_ARG(BM_math_signbit, "MATH_COMMON"); |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 205 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 206 | static void BM_math_fabs_macro(benchmark::State& state) { |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 207 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 208 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 209 | while (state.KeepRunning()) { |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 210 | d += fabs(v); |
| 211 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 212 | SetLabel(state); |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 213 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 214 | BIONIC_BENCHMARK_WITH_ARG(BM_math_fabs_macro, "MATH_COMMON"); |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 215 | |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 216 | static void BM_math_fabs(benchmark::State& state) { |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 217 | d = 0.0; |
Martijn Coenen | be763d8 | 2016-11-14 14:16:08 +0100 | [diff] [blame] | 218 | v = values[state.range(0)]; |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 219 | while (state.KeepRunning()) { |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 220 | d += (fabs)(v); |
| 221 | } |
Elliott Hughes | 281e06b | 2016-02-17 10:23:52 -0800 | [diff] [blame] | 222 | SetLabel(state); |
Elliott Hughes | f9f4a43 | 2015-08-24 22:57:08 +0000 | [diff] [blame] | 223 | } |
Christopher Ferris | 858e336 | 2017-11-30 08:53:15 -0800 | [diff] [blame] | 224 | BIONIC_BENCHMARK_WITH_ARG(BM_math_fabs, "MATH_COMMON"); |
Elliott Hughes | e332f65 | 2018-05-08 15:07:43 -0700 | [diff] [blame] | 225 | |
| 226 | static void BM_math_sincos(benchmark::State& state) { |
| 227 | d = 1.0; |
| 228 | while (state.KeepRunning()) { |
| 229 | double s, c; |
| 230 | sincos(d, &s, &c); |
| 231 | d += s + c; |
| 232 | } |
| 233 | } |
| 234 | BIONIC_BENCHMARK(BM_math_sincos); |
Adhemerval Zanella | 357f6c1 | 2018-06-05 09:28:40 -0300 | [diff] [blame] | 235 | |
| 236 | #include "expf_input.cpp" |
| 237 | |
| 238 | static void BM_math_expf_speccpu2017(benchmark::State& state) { |
| 239 | f = 0.0; |
| 240 | auto cin = expf_input.cbegin(); |
| 241 | for (auto _ : state) { |
| 242 | f = expf(*cin); |
| 243 | if (++cin == expf_input.cend()) |
| 244 | cin = expf_input.cbegin(); |
| 245 | } |
| 246 | } |
| 247 | BIONIC_BENCHMARK(BM_math_expf_speccpu2017); |
| 248 | |
| 249 | static void BM_math_expf_speccpu2017_latency(benchmark::State& state) { |
| 250 | f = 0.0; |
| 251 | auto cin = expf_input.cbegin(); |
| 252 | for (auto _ : state) { |
| 253 | f = expf(f * zero + *cin); |
| 254 | if (++cin == expf_input.cend()) |
| 255 | cin = expf_input.cbegin(); |
| 256 | } |
| 257 | } |
| 258 | BIONIC_BENCHMARK(BM_math_expf_speccpu2017_latency); |
| 259 | |
| 260 | static void BM_math_exp2f_speccpu2017(benchmark::State& state) { |
| 261 | f = 0.0; |
| 262 | auto cin = expf_input.cbegin(); |
| 263 | for (auto _ : state) { |
| 264 | f = exp2f(*cin); |
| 265 | if (++cin == expf_input.cend()) |
| 266 | cin = expf_input.cbegin(); |
| 267 | } |
| 268 | } |
| 269 | BIONIC_BENCHMARK(BM_math_exp2f_speccpu2017); |
| 270 | |
| 271 | static void BM_math_exp2f_speccpu2017_latency(benchmark::State& state) { |
| 272 | f = 0.0; |
| 273 | auto cin = expf_input.cbegin(); |
| 274 | for (auto _ : state) { |
| 275 | f = exp2f(f * zero + *cin); |
| 276 | if (++cin == expf_input.cend()) |
| 277 | cin = expf_input.cbegin(); |
| 278 | } |
| 279 | } |
| 280 | BIONIC_BENCHMARK(BM_math_exp2f_speccpu2017_latency); |
Adhemerval Zanella | 872c8b5 | 2018-06-05 13:57:03 -0300 | [diff] [blame^] | 281 | |
| 282 | #include "powf_input.cpp" |
| 283 | |
| 284 | static void BM_math_powf_speccpu2006(benchmark::State& state) { |
| 285 | f = 0.0; |
| 286 | auto cin = powf_input.cbegin(); |
| 287 | for (auto _ : state) { |
| 288 | f = powf(cin->first, cin->second); |
| 289 | if (++cin == powf_input.cend()) |
| 290 | cin = powf_input.cbegin(); |
| 291 | } |
| 292 | } |
| 293 | BIONIC_BENCHMARK(BM_math_powf_speccpu2006); |
| 294 | |
| 295 | static void BM_math_powf_speccpu2017_latency(benchmark::State& state) { |
| 296 | f = 0.0; |
| 297 | auto cin = powf_input.cbegin(); |
| 298 | for (auto _ : state) { |
| 299 | f = powf(f * zero + cin->first, cin->second); |
| 300 | if (++cin == powf_input.cend()) |
| 301 | cin = powf_input.cbegin(); |
| 302 | } |
| 303 | } |
| 304 | BIONIC_BENCHMARK(BM_math_powf_speccpu2017_latency); |