1 #include <benchmark/benchmark.h> 2 3 #include <fxdiv.h> 4 fxdiv_divide_uint32_t(benchmark::State & state)5static void fxdiv_divide_uint32_t(benchmark::State& state) { 6 const fxdiv_divisor_uint32_t divisor = fxdiv_init_uint32_t(UINT32_C(65537)); 7 uint32_t x = 0; 8 while (state.KeepRunning()) { 9 const fxdiv_result_uint32_t result = fxdiv_divide_uint32_t(x++, divisor); 10 benchmark::DoNotOptimize(result); 11 } 12 } 13 BENCHMARK(fxdiv_divide_uint32_t); 14 fxdiv_divide_uint64_t(benchmark::State & state)15static void fxdiv_divide_uint64_t(benchmark::State& state) { 16 const fxdiv_divisor_uint64_t divisor = fxdiv_init_uint64_t(UINT64_C(4294967311)); 17 uint64_t x = 0; 18 while (state.KeepRunning()) { 19 const fxdiv_result_uint64_t result = fxdiv_divide_uint64_t(x++, divisor); 20 benchmark::DoNotOptimize(result); 21 } 22 } 23 BENCHMARK(fxdiv_divide_uint64_t); 24 native_divide_uint32_t(benchmark::State & state)25static void native_divide_uint32_t(benchmark::State& state) { 26 uint32_t divisor = UINT32_C(65537); 27 benchmark::DoNotOptimize(&divisor); 28 uint32_t x = 0; 29 while (state.KeepRunning()) { 30 const uint32_t quotient = x / divisor; 31 const uint32_t remainder = x++ % divisor; 32 benchmark::DoNotOptimize(quotient); 33 benchmark::DoNotOptimize(remainder); 34 } 35 } 36 BENCHMARK(native_divide_uint32_t); 37 native_divide_uint64_t(benchmark::State & state)38static void native_divide_uint64_t(benchmark::State& state) { 39 uint64_t divisor = UINT64_C(4294967311); 40 benchmark::DoNotOptimize(&divisor); 41 uint64_t x = 0; 42 while (state.KeepRunning()) { 43 const uint64_t quotient = x / divisor; 44 const uint64_t remainder = x++ % divisor; 45 benchmark::DoNotOptimize(quotient); 46 benchmark::DoNotOptimize(remainder); 47 } 48 } 49 BENCHMARK(native_divide_uint64_t); 50 51 BENCHMARK_MAIN(); 52