ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
vc_soa_math.hpp
1// This file is part of the ACTS project.
2//
3// Copyright (C) 2016 CERN for the benefit of the ACTS project
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9#pragma once
10
11// Project include(s)
12#include "algebra/impl/vc_soa_concepts.hpp"
13
14// Vc include(s).
15#ifdef _MSC_VER
16#pragma warning(push, 0)
17#endif // MSVC
18#include <Vc/Vc>
19#ifdef _MSC_VER
20#pragma warning(pop)
21#endif // MSVC
22
23// System include(s)
24#include <algorithm>
25#include <cmath>
26
27namespace detray::algebra::math {
28
31using std::abs;
32using std::acos;
33using std::asin;
34using std::atan;
35using std::atan2;
36using std::atanh;
37using std::ceil;
38using std::copysign;
39using std::cos;
40using std::cosh;
41using std::exp;
42using std::fabs;
43using std::floor;
44using std::fma;
45using std::hypot;
46using std::log;
47using std::log10;
48using std::max;
49using std::min;
50using std::pow;
51using std::signbit;
52using std::sin;
53using std::sinh;
54using std::sqrt;
55using std::tan;
56using std::tanh;
58
63template <detray::concepts::vc_simd_vector T>
64constexpr decltype(auto) abs(T &&vec) {
65 return Vc::abs(std::forward<T>(vec));
66}
67
70template <detray::concepts::vc_simd_vector T>
71constexpr decltype(auto) fabs(T &&vec) {
72 return Vc::abs(std::forward<T>(vec));
73}
74
77template <detray::concepts::vc_simd_vector T>
78constexpr decltype(auto) sqrt(T &&vec) {
79 return Vc::sqrt(std::forward<T>(vec));
80}
81
84template <detray::concepts::vc_simd_vector T>
85constexpr decltype(auto) exp(T &&vec) {
86 return Vc::exp(std::forward<T>(vec));
87}
88
91template <detray::concepts::vc_simd_vector T>
92constexpr decltype(auto) log(T &&vec) {
93 return Vc::log(std::forward<T>(vec));
94}
95
98template <detray::concepts::vc_simd_vector T>
99constexpr decltype(auto) sin(T &&vec) {
100 return Vc::sin(std::forward<T>(vec));
101}
102
105template <detray::concepts::vc_simd_vector T>
106constexpr decltype(auto) asin(T &&vec) {
107 return Vc::asin(std::forward<T>(vec));
108}
109
112template <detray::concepts::vc_simd_vector T>
113constexpr decltype(auto) cos(T &&vec) {
114 return Vc::cos(std::forward<T>(vec));
115}
116
119template <detray::concepts::vc_simd_vector T>
120constexpr decltype(auto) tan(T &&vec) {
121 // It seems there is no dedicated @c Vc::tan function ?
122 return Vc::sin(std::forward<T>(vec)) / Vc::cos(std::forward<T>(vec));
123}
124
127template <detray::concepts::vc_simd_vector T>
128constexpr decltype(auto) atan(T &&vec) {
129 return Vc::atan(std::forward<T>(vec));
130}
131
137constexpr decltype(auto) copysign(T &&mag, S &&sgn) {
138 return Vc::copysign(std::forward<T>(mag), std::forward<S>(sgn));
139}
140
143template <detray::concepts::vc_simd_vector T>
144constexpr decltype(auto) min(T &&vec) {
145 return Vc::min(std::forward<T>(vec));
146}
147
150template <detray::concepts::vc_simd_vector T>
151constexpr decltype(auto) max(T &&vec) {
152 return Vc::max(std::forward<T>(vec));
153}
154
157template <detray::concepts::vc_simd_vector T>
158constexpr decltype(auto) signbit(T &&vec) {
159 return Vc::isnegative(std::forward<T>(vec));
160}
161
167template <detray::concepts::vc_simd_vector T>
168constexpr decltype(auto) fma(T &&x, T &&y, T &&z) {
169 return Vc::fma(std::forward<T>(x), std::forward<T>(y), std::forward<T>(z));
170}
171
172
173} // namespace detray::algebra::math
Vc SIMD types.
Definition vc_aos_concepts.hpp:30
Namespace to pick up common math functions from.
Definition math.hpp:29
constexpr decltype(auto) atan(T &&vec)
Definition vc_soa_math.hpp:128
constexpr decltype(auto) sqrt(T &&vec)
Definition vc_soa_math.hpp:78
constexpr decltype(auto) fabs(T &&vec)
Definition vc_soa_math.hpp:71
constexpr decltype(auto) exp(T &&vec)
Definition vc_soa_math.hpp:85
constexpr decltype(auto) copysign(T &&mag, S &&sgn)
Definition vc_soa_math.hpp:137
constexpr decltype(auto) asin(T &&vec)
Definition vc_soa_math.hpp:106
constexpr decltype(auto) min(T &&vec)
Definition vc_soa_math.hpp:144
constexpr decltype(auto) sin(T &&vec)
Definition vc_soa_math.hpp:99
constexpr decltype(auto) signbit(T &&vec)
Definition vc_soa_math.hpp:158
constexpr decltype(auto) fma(T &&x, T &&y, T &&z)
Evaluate the fused multiply-add x * y + z lane by lane.
Definition vc_soa_math.hpp:168
constexpr decltype(auto) log(T &&vec)
Definition vc_soa_math.hpp:92
constexpr decltype(auto) tan(T &&vec)
Definition vc_soa_math.hpp:120
constexpr decltype(auto) cos(T &&vec)
Definition vc_soa_math.hpp:113
constexpr decltype(auto) max(T &&vec)
Definition vc_soa_math.hpp:151
constexpr decltype(auto) abs(T &&vec)
Vc overloads of common math functions.
Definition vc_soa_math.hpp:64