1 #include <benchmark/benchmark.h> 2 3 #include <fxdiv.h> 4 fxdiv_mulext_uint32_t(benchmark::State & state)5static void fxdiv_mulext_uint32_t(benchmark::State& state) { 6 uint32_t c = UINT32_C(0x1971DB6B); 7 benchmark::DoNotOptimize(&c); 8 uint32_t d = c; 9 while (state.KeepRunning()) { 10 const uint64_t product = fxdiv_mulext_uint32_t(c, d++); 11 benchmark::DoNotOptimize(product); 12 } 13 } 14 BENCHMARK(fxdiv_mulext_uint32_t); 15 native_mulext_uint32_t(benchmark::State & state)16static void native_mulext_uint32_t(benchmark::State& state) { 17 uint32_t c = UINT32_C(0x1971DB6B); 18 benchmark::DoNotOptimize(&c); 19 uint32_t d = c; 20 while (state.KeepRunning()) { 21 const uint64_t product = (uint64_t) c * (uint64_t) (d++); 22 benchmark::DoNotOptimize(product); 23 } 24 } 25 BENCHMARK(native_mulext_uint32_t); 26 fxdiv_mulhi_uint32_t(benchmark::State & state)27static void fxdiv_mulhi_uint32_t(benchmark::State& state) { 28 const uint32_t c = UINT32_C(0x1971DB6B); 29 uint32_t x = c; 30 while (state.KeepRunning()) { 31 const uint32_t product = fxdiv_mulhi_uint32_t(c, x++); 32 benchmark::DoNotOptimize(product); 33 } 34 } 35 BENCHMARK(fxdiv_mulhi_uint32_t); 36 fxdiv_mulhi_uint64_t(benchmark::State & state)37static void fxdiv_mulhi_uint64_t(benchmark::State& state) { 38 const uint64_t c = UINT64_C(0x425E892B38148FAD); 39 uint64_t x = c; 40 while (state.KeepRunning()) { 41 const uint64_t product = fxdiv_mulhi_uint64_t(c, x++); 42 benchmark::DoNotOptimize(product); 43 } 44 } 45 BENCHMARK(fxdiv_mulhi_uint64_t); 46 47 BENCHMARK_MAIN(); 48