|
3 | 3 |
|
4 | 4 | #include "RConfigure.h" |
5 | 5 |
|
| 6 | +#include "RtypesCore.h" |
| 7 | + |
6 | 8 | #ifdef R__HAS_VECCORE |
7 | 9 |
|
8 | 10 | // We always try to use std::simd as the VecCore backend. |
|
17 | 19 |
|
18 | 20 | #define ROOT_VECTORIZED_TMATH |
19 | 21 |
|
20 | | -#define VECCORE_ENABLE_STD_SIMD |
21 | | -#include <VecCore/VecCore> |
22 | | -#undef VECCORE_ENABLE_STD_SIMD |
| 22 | +#include <experimental/simd> |
23 | 23 |
|
24 | 24 | namespace ROOT { |
25 | 25 |
|
26 | 26 | namespace Internal { |
27 | 27 |
|
28 | | -using ScalarBackend = vecCore::backend::Scalar; |
29 | | -#ifdef ROOT_VECTORIZED_TMATH |
30 | | -using VectorBackend = vecCore::backend::SIMDNative; |
31 | | -#else |
32 | | -using VectorBackend = vecCore::backend::Scalar; |
33 | | -#endif |
| 28 | +template <typename T> |
| 29 | +using SIMDTag = std::experimental::simd_abi::native<T>; |
34 | 30 |
|
35 | 31 | } // namespace Internal |
36 | 32 |
|
37 | | - using Float_v = typename Internal::VectorBackend::Float_v; |
38 | | - using Double_v = typename Internal::VectorBackend::Double_v; |
39 | | - using Int_v = typename Internal::VectorBackend::Int_v; |
40 | | - using Int32_v = typename Internal::VectorBackend::Int32_v; |
41 | | - using UInt_v = typename Internal::VectorBackend::UInt_v; |
42 | | - using UInt32_v = typename Internal::VectorBackend::UInt32_v; |
43 | | -} |
| 33 | +using Float_v = std::experimental::simd<Float_t, Internal::SIMDTag<Float_t>>; |
| 34 | +using Double_v = std::experimental::simd<Double_t, Internal::SIMDTag<Double_t>>; |
| 35 | +using Int_v = std::experimental::simd<Int_t, Internal::SIMDTag<Int_t>>; |
| 36 | +using Int32_v = std::experimental::simd<Int_t, Internal::SIMDTag<Int_t>>; |
| 37 | +using UInt_v = std::experimental::simd<UInt_t, Internal::SIMDTag<UInt_t>>; |
| 38 | +using UInt32_v = std::experimental::simd<UInt_t, Internal::SIMDTag<UInt_t>>; |
| 39 | + |
| 40 | +} // namespace ROOT |
44 | 41 |
|
45 | 42 | #else // R__HAS_VECCORE |
46 | 43 |
|
47 | 44 | // We do not have explicit vectorisation support enabled. Fall back to regular ROOT types. |
48 | 45 |
|
49 | | -#include "RtypesCore.h" |
50 | | - |
51 | 46 | namespace ROOT { |
52 | 47 | using Float_v = Float_t; |
53 | 48 | using Double_v = Double_t; |
|
0 commit comments