#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.