xref: /aosp_15_r20/external/FXdiv/bench/multiply.cc (revision 46dbe23922d2f68acf6638846c68716fcec3e8fa)
1 #include <benchmark/benchmark.h>
2 
3 #include <fxdiv.h>
4 
fxdiv_mulext_uint32_t(benchmark::State & state)5 static 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)16 static 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)27 static 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)37 static 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