#include #include #include using namespace Eigen; template EIGEN_DONT_INLINE void quatmul_default(const Quat& a, const Quat& b, Quat& c) { c = a * b; } template EIGEN_DONT_INLINE void quatmul_novec(const Quat& a, const Quat& b, Quat& c) { c = internal::quat_product<0, Quat, Quat, typename Quat::Scalar>::run(a, b); } template static void BM_QuatMul_Default(benchmark::State& state) { Quat a(4, 1, 2, 3), b(2, 3, 4, 5), c; for (auto _ : state) { quatmul_default(a, b, c); benchmark::DoNotOptimize(c.coeffs().data()); } } template static void BM_QuatMul_NoVec(benchmark::State& state) { Quat a(4, 1, 2, 3), b(2, 3, 4, 5), c; for (auto _ : state) { quatmul_novec(a, b, c); benchmark::DoNotOptimize(c.coeffs().data()); } } BENCHMARK(BM_QuatMul_Default); BENCHMARK(BM_QuatMul_NoVec); BENCHMARK(BM_QuatMul_Default); BENCHMARK(BM_QuatMul_NoVec);