zeus/include/zeus/simd/simd.hpp

46 lines
1.0 KiB
C++
Raw Normal View History

2018-12-07 17:16:50 -08:00
#pragma once
#define _ZEUS_SIMD_INCLUDED
2019-02-15 17:31:42 -08:00
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wignored-attributes"
#endif
namespace zeus::_simd {
2018-12-07 21:23:50 -08:00
using namespace std;
}
2018-12-07 17:16:50 -08:00
#include "parallelism_v2_simd.hpp"
#if _M_IX86_FP >= 1 || _M_X64
#define __SSE__ 1
#endif
#if __AVX__
#include "simd_avx.hpp"
#elif __SSE__
#include "simd_sse.hpp"
2020-05-01 16:20:31 -07:00
#elif __ARM_NEON
#include "simd_neon.hpp"
2018-12-07 17:16:50 -08:00
#else
2022-08-03 15:15:45 -07:00
namespace zeus::_simd::simd_abi {
2018-12-07 21:23:50 -08:00
template <typename T>
struct zeus_native {};
2018-12-07 21:23:50 -08:00
template <>
struct zeus_native<float> {
2018-12-07 21:23:50 -08:00
using type = fixed_size<4>;
};
template <>
struct zeus_native<double> {
2018-12-07 21:23:50 -08:00
using type = fixed_size<4>;
};
2022-08-03 15:15:45 -07:00
} // namespace zeus::_simd::simd_abi
#include "simd_none.hpp"
2018-12-07 17:16:50 -08:00
#endif
2019-02-15 17:31:42 -08:00
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
namespace zeus {
2018-12-07 21:23:50 -08:00
template <typename T>
using simd = _simd::simd<T, typename _simd::simd_abi::zeus_native<T>::type>;
2018-12-07 21:23:50 -08:00
template <typename T>
2018-12-07 17:16:50 -08:00
using simd_values = _simd::simd_data<simd<T>>;
using simd_floats = simd_values<float>;
using simd_doubles = simd_values<double>;
} // namespace zeus