#include <cstdint>#include <type_traits>#include <immintrin.h>#include "attributes/common.hpp"#include "numerics.hpp"#include "types.hpp"Go to the source code of this file.
Classes | |
| struct | ein::detail::storage_type_impl< T > |
| struct | ein::detail::storage_type_impl< bf16 > |
| struct | ein::detail::storage_type_impl< fp16 > |
| struct | ein::detail::has_lifted_operations_impl< T > |
| struct | ein::detail::has_lifted_operations_impl< bf16 > |
| struct | ein::detail::has_lifted_operations_impl< fp16 > |
| struct | ein::detail::si< N > |
| struct | ein::detail::ps< N > |
| struct | ein::detail::pd< N > |
| struct | ein::detail::si< 128 > |
| struct | ein::detail::ps< 128 > |
| struct | ein::detail::pd< 128 > |
| struct | ein::detail::si< 256 > |
| struct | ein::detail::ps< 256 > |
| struct | ein::detail::pd< 256 > |
| struct | ein::detail::si< 512 > |
| struct | ein::detail::ps< 512 > |
| struct | ein::detail::pd< 512 > |
| struct | ein::detail::simd_intrinsic< T, N > |
| struct | ein::detail::simd_intrinsic< float, N > |
| struct | ein::detail::simd_intrinsic< double, N > |
| struct | ein::detail::simd_intrinsic< T, N > |
Namespaces | |
| namespace | ein |
| namespace | ein::detail |
Concepts | |
| concept | ein::has_storage_type |
| concept | ein::has_lifted_operations |
| Does this type have operations that semantically correct when lifted to the simd_data_t level? | |
| concept | ein::has_simd_type |
ein::simd_data_t<T,N> is defined | |
| concept | ein::has_builtin_convertvector |
| can we convert simd_data_t<U,N> -> simd_data_t<T,N> automatically using gcc vector extensions? | |
| concept | ein::simd_builtin |
| is this type one of the types that is handed well automatically by clang/gcc vector extensions? | |
| concept | ein::has_mmask |
| Do we want to use AVX512's notion of an _mmask8, _mmask16, _mmask32, or _mmask64 for masking operations. | |
Typedefs | |
| template<typename T > | |
| using | ein::storage_type |
The type used to store T in a simd_data_t. | |
| template<typename T , size_t N> | |
| using | ein::simd_data_t = storage_type<T> __attribute__((__vector_size__(N*sizeof(storage_type<T>)),__aligned__(N*sizeof(storage_type<T>)))) |
| template<typename T , size_t N> | |
| using | ein::simd_intrinsic_t |
Returns the Intel intrinsic type associated with a simd register full of N values of type T. | |
| template<size_t N> | |
| using | ein::mmask_t |
| If AVX512 is enabled returns the type of an n-bit mmask. | |
| template<typename T , size_t N> | |
| using | ein::simd_mask_t |
| What type of mask should I use? | |
Functions | |
| __m128 | ein::cast_ps (__m128i a) noexcept |
| __m128 | ein::cast_ps (__m128 a) noexcept |
| __m256 | ein::cast_ps (__m256i a) noexcept |
| __m256 | ein::cast_ps (__m256 a) noexcept |
| __m128d | ein::cast_pd (__m128i a) noexcept |
| __m128d | ein::cast_pd (__m128d a) noexcept |
| __m256d | ein::cast_pd (__m256i a) noexcept |
| __m256d | ein::cast_pd (__m256d a) noexcept |
| __m128i | ein::cast_si (__m128 a) noexcept |
| __m128i | ein::cast_si (__m128d a) noexcept |
| __m128i | ein::cast_si (__m128i a) noexcept |
| __m256i | ein::cast_si (__m256 a) noexcept |
| __m256i | ein::cast_si (__m256d a) noexcept |
| __m256i | ein::cast_si (__m256i a) noexcept |
| __m512 | ein::cast_ps (__m512i a) noexcept |
| __m512d | ein::cast_pd (__m512i a) noexcept |
| __m512 | ein::cast_ps (__m512 a) noexcept |
| __m512d | ein::cast_pd (__m512d a) noexcept |
| __m512i | ein::cast_si (__m512 a) noexcept |
| __m512i | ein::cast_si (__m512d a) noexcept |
| __m512i | ein::cast_si (__m512i a) noexcept |
Variables | |
| constexpr size_t | ein::max_simd_size = 64 |
| largest simd register width supported on this platform in bytes | |
Definition in file simd_data.hpp.
| struct ein::detail::si |
Definition at line 116 of file simd_data.hpp.
| struct ein::detail::ps |
Definition at line 117 of file simd_data.hpp.
| struct ein::detail::pd |
Definition at line 118 of file simd_data.hpp.
| struct ein::detail::simd_intrinsic |
Definition at line 141 of file simd_data.hpp.