Namespaces | |
namespace | ein::detail |
Concepts | |
concept | ein::simd_type |
recognizes any valid simd type | |
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. | |
Classes | |
struct | ein::simd< T, N > |
simd primitive definition More... | |
struct | std::tuple_size< ein::simd< T, N > > |
struct | std::tuple_element< I, ein::simd< T, N > > |
needed to support for std::apply More... | |
struct | ein::detail::storage_type_impl< T > |
struct | ein::detail::storage_type_impl< bf16 > |
struct | ein::detail::storage_type_impl< fp16 > |
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< float, N > |
struct | ein::detail::simd_intrinsic< double, N > |
struct | ein::detail::simd_intrinsic< T, N > |
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 | |
argument deduction | |
template<typename T , size_t N> requires ( has_simd_type<T,N> && (N % sizeof(T) == 0) ) | |
ein::simd (T __attribute((__vector_size__(N)))) -> simd< T, N/sizeof(T)> | |
guidance when loading data from clang/gcc vector extensions | |
template<typename ... Args> requires has_simd_type<std::common_type<Args...>, sizeof...(Args)> | |
ein::simd (Args &&...) -> simd< std::common_type< Args... >, sizeof...(Args)> | |
guidance for loading from arguments | |
template<typename T > requires has_simd_type<T,max_simd_size/sizeof(T)> | |
ein::simd (T) -> simd< T, has_simd_type< T, max_simd_size/sizeof(T)> > | |
default to max simd size for broadcast | |
shuffles | |
template<size_t ... is> | |
auto | ein::shuffle (simd_type auto x) |
create a new simd register with contents drawn from this one | |
template<size_t ... is> | |
auto | ein::shuffle (simd_type auto x, simd_type auto y) |
create a new simd register with contents drawn from these two | |
struct ein::simd |
simd primitive definition
Public Member Functions | |
constructors | |
constexpr | simd () noexcept=default |
default initialization | |
constexpr | simd (simd const &) noexcept=default |
copy construction | |
constexpr | simd (simd &&) noexcept=default |
move construction | |
template<std::convertible_to< T > ... Args> requires (sizeof...(Args) == N) | |
constexpr | simd (Args &&... args) noexcept |
array initialization | |
constexpr | simd (T value) noexcept |
broadcast construction | |
constexpr | simd (data_t const &data) noexcept |
copy construction from clang/gcc vector intrinsics | |
constexpr | simd (data_t &&data) noexcept |
move construction from clang/gcc vector intrinsics | |
constexpr | simd (std::initializer_list< T > init) |
initialize the first init .size values from an initializer_list | |
constexpr | simd (intrinsic_t const &data) noexcept |
copy construct from the corresponding intel intrinsic type (if different than the gcc/clang one) | |
constexpr | simd (intrinsic_t &&data) noexcept |
move construct from the corresponding intel intrinsic type (if different than the gcc/clang one) | |
assignments | |
ein_reinitializes constexpr simd & | operator= (simd &&) noexcept=default |
ein_reinitializes constexpr simd & | operator= (simd const &) noexcept=default |
template<typename U > requires (!std::is_same_v<U,T> && has_builtin_convertvector<U,T,N>) | |
ein_reinitializes constexpr simd & | operator= (simd_t< U > other) noexcept |
automatic conversion for types supported by __builtin_convertvector | |
intel compatibility | |
constexpr | operator intrinsic_t & () noexcept |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T ,N> & | |
constexpr | operator intrinsic_t const & () const noexcept |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T ,N> const & | |
constexpr intrinsic_t & | it () noexcept |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T ,N> & | |
constexpr intrinsic_t const & | it () const noexcept |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T ,N> const & | |
iterable | |
constexpr T & | operator[] (std::size_t i) noexcept |
access the element in the i th lane | |
constexpr T const & | operator[] (std::size_t i) const noexcept |
access the element in the i th lane | |
constexpr T * | begin () noexcept |
start iterator | |
constexpr T * | end () noexcept |
end iterator | |
constexpr T const * | cbegin () const noexcept |
const start iterator | |
constexpr T const * | cend () const noexcept |
const end iterator | |
constexpr T const * | begin () const noexcept |
const start iterator | |
constexpr T const * | end () const noexcept |
const end iterator | |
constexpr std::reverse_iterator< T * > | rbegin () noexcept |
reverse start iterator | |
constexpr std::reverse_iterator< T * > | rend () noexcept |
reverse end iterator | |
constexpr std::reverse_iterator< const T * > | crbegin () const noexcept |
const reverse start iterator | |
constexpr std::reverse_iterator< const T * > | crend () const noexcept |
const reverse end iterator | |
constexpr std::reverse_iterator< const T * > | rbegin () const noexcept |
const reverse start iterator | |
constexpr std::reverse_iterator< const T * > | rend () const noexcept |
const reverse end iterator | |
shuffles | |
template<size_t ... is> requires (((is < N) && ... && has_simd_type<T,sizeof...(is)>) && requires (data_t x) { simd<T,sizeof...(is)>(__builtin_shufflevector(x, is...)); }) | |
constexpr simd< T, sizeof...(is)> | shuffle () noexcept |
shuffle selected elements to produce a new simd register | |
template<size_t ... is> requires (((is < N*2) && ... && has_simd_type<T,sizeof...(is)>) && requires (data_t x) { simd<T,sizeof...(is)>(__builtin_shufflevector(x, x, is...)); }) | |
constexpr simd< T, sizeof...(is)> | shuffle (simd< T, N > b) noexcept |
Use elements taken from this and another simd register to construct another. If an index i in is is less than N , it draw from this , otherwise it draws from the i - N th position in b . | |
Public Attributes | |
data_t | data |
Private Types | |
using | data_t = simd_data_t<T,N> |
using | mask_t = simd_mask_t<T,N> |
using | intrinsic_t = simd_intrinsic_t<T,N> |
template<typename U > | |
using | simd_t = simd<U,N> |
template<typename U > | |
using | cast_t = simd<U,N*sizeof(T)/sizeof(U)> |
using | value_type = T |
Static Private Attributes | |
static constexpr size_t | bytesize = N*sizeof(T) |
static constexpr size_t | size = N |
Friends | |
destructuring | |
template<size_t I> requires (I < N) | |
constexpr T & | get (simd &s) noexcept |
enables destructuring reference | |
template<size_t I> requires (I < N) | |
constexpr T const & | get (simd const &s) noexcept |
enables destructuring constant reference | |
template<size_t I> requires (I < N) | |
constexpr T && | get (simd &&s) noexcept |
enable destructuring move | |
comparisons | |
constexpr mask_t | operator< (simd x, simd y) noexcept |
constexpr mask_t | operator> (simd x, simd y) noexcept |
constexpr mask_t | operator<= (simd x, simd y) noexcept |
constexpr mask_t | operator>= (simd x, simd y) noexcept |
constexpr mask_t | operator== (simd x, simd y) noexcept |
constexpr mask_t | operator!= (simd x, simd y) noexcept |
constexpr mask_t | operator< (simd a, simd b) noexcept |
constexpr mask_t | operator> (simd a, simd b) noexcept |
constexpr mask_t | operator<= (simd a, simd b) noexcept |
constexpr mask_t | operator>= (simd a, simd b) noexcept |
constexpr mask_t | operator== (simd a, simd b) noexcept |
constexpr mask_t | operator!= (simd a, simd b) noexcept |
template<CMP imm8> requires one_of_t<T,float,double> && (size_t(imm8) < max_fp_comparison_predicate) | |
constexpr mask_t | cmp (simd a, simd b) noexcept |
template<CMPINT imm8> requires one_of_t<storage_type<T>,uint8_t,int8_t,uint16_t,int16_t,uint32_t,int32_t,uint64_t,int64_t> && has_lifted_operations<T> && (size_t(imm8) < 8uz) | |
constexpr mask_t | cmpint (simd a, simd b) noexcept |
constexpr mask_t | operator== (simd a, simd b) noexcept |
constexpr mask_t | operator/= (simd a, simd b) noexcept |
constexpr mask_t | operator< (simd a, simd b) noexcept |
constexpr mask_t | operator<= (simd a, simd b) noexcept |
constexpr mask_t | operator> (simd a, simd b) noexcept |
constexpr mask_t | operator>= (simd a, simd b) noexcept |
scalef | |
constexpr simd | scalef (simd x, simd y) noexcept |
data movement | |
constexpr void | swap (simd &x, simd &y) noexcept |
operators | |
constexpr simd & | operator+= (simd other) noexcept |
constexpr simd & | operator-= (simd other) noexcept |
constexpr simd & | operator*= (simd other) noexcept |
constexpr simd & | operator/= (simd other) noexcept |
constexpr simd & | operator&= (simd other) noexcept |
constexpr simd & | operator|= (simd other) noexcept |
constexpr simd & | operator^= (simd other) noexcept |
constexpr simd | operator+ () const noexcept |
constexpr simd | operator- () const noexcept |
constexpr simd & | operator-- () noexcept |
--x | |
constexpr simd | operator-- (int) noexcept |
x-- | |
constexpr simd & | operator++ () noexcept |
++x | |
constexpr simd | operator++ (int) noexcept |
x++ | |
template<size_t K> requires (has_lifted_operations<T> && requires (data_t a) { a >>= static_cast<T>(K); }) | |
constexpr simd & | operator>>= (imm_t< K >) noexcept |
self-shift right by an immediate value | |
constexpr simd & | operator>>= (T y) noexcept |
self-shift right by a scalar | |
constexpr simd & | operator>>= (simd y) noexcept |
self-shift right elementwise | |
template<size_t K> requires (has_lifted_operations<T> && requires (data_t a) { a <<= static_cast<T>(K); }) | |
constexpr simd & | operator<<= (imm_t< K >) noexcept |
self-shift left by an immediate constant | |
constexpr simd & | operator<<= (T y) noexcept |
self-shift left by a scalar | |
constexpr simd & | operator<<= (simd y) noexcept |
self-shift left elementwise | |
constexpr simd | operator+ (simd x, simd y) noexcept |
constexpr simd | operator- (simd x, simd y) noexcept |
constexpr simd | operator* (simd x, simd y) noexcept |
constexpr simd | operator/ (simd x, simd y) noexcept |
template<typename U > requires (has_lifted_operations<T> && requires (data_t a, data_t b) { a & b; }) | |
constexpr simd | operator& (simd x, simd y) noexcept |
template<typename U > requires (has_lifted_operations<T> && requires (data_t a, data_t b) { a | b; }) | |
constexpr simd | operator| (simd x, simd y) noexcept |
constexpr simd | operator^ (simd x, simd y) noexcept |
template<size_t K> requires (has_lifted_operations<T> && requires (data_t a) { a >> static_cast<T>(K); }) | |
constexpr simd | operator>> (simd x, imm_t< K >) noexcept |
shift right by an immediate constant | |
constexpr simd | operator>> (simd x, T y) noexcept |
shift right by a scalar | |
constexpr simd | operator>> (simd x, simd y) noexcept |
shift right elementwise | |
template<size_t K> requires (has_lifted_operations<T> && requires (data_t a) { a << static_cast<T>(K); }) | |
constexpr simd | operator<< (simd x, imm_t< K >) noexcept |
shift left by an immediate constant | |
constexpr simd | operator<< (simd x, T y) noexcept |
shift left by a scalar | |
constexpr simd | operator<< (simd x, simd y) noexcept |
shift left elementwise | |
|
private |
|
private |
|
private |
|
private |
|
constexprdefaultnoexcept[[always_inline]][[artificial]][[hidden]] |
default initialization
|
constexprdefaultnoexcept[[always_inline]][[artificial]][[hidden]] |
copy construction
|
constexprdefaultnoexcept[[always_inline]][[artificial]][[hidden]] |
move construction
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[hidden]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[hidden]] |
|
inlineconstexpr[[always_inline]][[artificial]][[hidden]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[hidden]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
const start iterator
Definition at line 213 of file simd.hpp.
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[const]][[hidden]] |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T
,N>
const &
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[const]][[hidden]] |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T
,N>
&
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[const]][[hidden]] |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T
,N>
&
Definition at line 154 of file simd.hpp.
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[const]][[hidden]] |
provide compatibility with Intel intrinsics by freely using this as simd_intrinsic_t<T
,N>
const &
|
constexprdefaultnoexcept[[always_inline]][[artificial]][[hidden]] |
|
constexprdefaultnoexcept[[always_inline]][[artificial]][[hidden]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
const reverse start iterator
Definition at line 237 of file simd.hpp.
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
const reverse end iterator
Definition at line 241 of file simd.hpp.
|
inlineconstexprnoexcept[[nodiscard]][[always_inline]][[artificial]][[const]][[hidden]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]] |
|
inlineconstexprnoexcept[[always_inline]][[artificial]][[pure]] |
Use elements taken from this and another simd register to construct another. If an index i
in is
is less than N
, it draw from this
, otherwise it draws from the i - N
th position in b
.
|
friend |
|
friend |
|
friend[[always_inline]][[artificial]][[const]][[hidden]] |
enable destructuring move
|
friend[[always_inline]][[artificial]][[const]][[hidden]] |
enables destructuring reference
|
friend[[always_inline]][[artificial]][[const]][[hidden]] |
enables destructuring constant reference
|
friend[[always_inline]][[artificial]] |
|
staticconstexprprivate |
struct std::tuple_size< ein::simd< T, N > > |
struct std::tuple_element< I, ein::simd< T, N > > |
struct ein::detail::storage_type_impl |
Definition at line 50 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef T | type T |
struct ein::detail::storage_type_impl< bf16 > |
Definition at line 53 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __bf16 | type __bf16 |
struct ein::detail::storage_type_impl< fp16 > |
Definition at line 54 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef _Float16 | type _Float16 |
struct ein::detail::si< 128 > |
Definition at line 120 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m128i | type __m128i |
struct ein::detail::ps< 128 > |
Definition at line 121 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m128 | type __m128 |
struct ein::detail::pd< 128 > |
Definition at line 122 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m128d | type __m128d |
struct ein::detail::si< 256 > |
Definition at line 124 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m256i | type __m256i |
struct ein::detail::ps< 256 > |
Definition at line 125 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m256 | type __m256 |
struct ein::detail::pd< 256 > |
Definition at line 126 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m256d | type __m256d |
struct ein::detail::si< 512 > |
Definition at line 129 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m512i | type __m512i |
struct ein::detail::ps< 512 > |
Definition at line 130 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m512 | type __m512 |
struct ein::detail::pd< 512 > |
Definition at line 131 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef __m512d | type __m512d |
struct ein::detail::simd_intrinsic< float, N > |
Definition at line 144 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef typename type | type typename ps<N*sizeof(float)*8>::type |
struct ein::detail::simd_intrinsic< double, N > |
Definition at line 149 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef typename type | type typename pd<N*sizeof(double)*8>::type |
struct ein::detail::simd_intrinsic< T, N > |
Definition at line 178 of file simd_data.hpp.
Class Members | ||
---|---|---|
typedef typename type | type typename ps<N*sizeof(T)*8>::type |
using ein::mmask_t |
If AVX512 is enabled returns the type of an n-bit mmask.
Definition at line 214 of file simd_data.hpp.
using ein::simd_data_t = storage_type<T> __attribute__((__vector_size__(N*sizeof(storage_type<T>)),__aligned__(N*sizeof(storage_type<T>)))) |
Definition at line 97 of file simd_data.hpp.
using ein::simd_intrinsic_t |
Returns the Intel intrinsic type associated with a simd register full of N
values of type T
.
this can differ from the preferred type used by clang/gcc vector extensions.
Definition at line 188 of file simd_data.hpp.
using ein::simd_mask_t |
What type of mask should I use?
Definition at line 221 of file simd_data.hpp.
using ein::storage_type |
The type used to store T
in a simd_data_t.
Definition at line 60 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 244 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 241 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 250 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 247 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 282 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 276 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 232 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 229 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 238 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 235 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 279 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 273 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 253 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 256 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 259 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 262 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 265 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 268 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 285 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 288 of file simd_data.hpp.
|
noexcept[[nodiscard]][[always_inline]][[const]][[artificial]] |
Definition at line 291 of file simd_data.hpp.
|
[[always_inline]][[artificial]][[pure]] |
create a new simd register with contents drawn from this one
Definition at line 1243 of file simd.hpp.
References ein::shuffle().
Referenced by ein::shuffle(), and ein::shuffle().
|
[[always_inline]][[artificial]][[pure]] |
create a new simd register with contents drawn from these two
Definition at line 1250 of file simd.hpp.
References ein::shuffle().
ein::simd | ( | Args && | ... | ) | -> simd< std::common_type< Args... >, sizeof...(Args)> |
guidance for loading from arguments
References ein::max_simd_size.
ein::simd | ( | T | __attribute(__vector_size__(N)) | ) | -> simd< T, N/sizeof(T)> |
guidance when loading data from clang/gcc vector extensions
ein::simd | ( | T | ) | -> simd< T, has_simd_type< T, max_simd_size/sizeof(T)> > |
default to max simd size for broadcast
References ein::max_simd_size.
|
constexpr |
largest simd register width supported on this platform in bytes
Definition at line 41 of file simd_data.hpp.
Referenced by ein::simd(), and ein::simd().