DPC++ Runtime
Runtime libraries for oneAPI DPC++
simd.hpp File Reference
#include <algorithm>
#include <array>
#include <cstddef>
#include <cstdint>
#include <functional>
Include dependency graph for simd.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  __simd_abi< __kind, _Np >
 
class  __simd_storage< _Tp, _Abi >
 
class  __simd_storage< _Tp, __simd_abi< _StorageKind::_Array, __num_element > >
 
class  __simd_storage< _Tp, __simd_abi< _StorageKind::_Scalar, 1 > >
 
struct  __vec_ext_traits< _Tp, __bytes >
 
class  __simd_storage< _Tp, __simd_abi< _StorageKind::_VecExt, __num_element > >
 
class  __simd_reference< _Vp, _Tp, _Abi >
 
struct  __nodeduce< _Tp >
 
struct  element_aligned_tag
 
struct  vector_aligned_tag
 
struct  overaligned_tag< size_t >
 
struct  is_abi_tag< _Tp >
 
struct  is_abi_tag< __simd_abi< __kind, _Np > >
 
struct  is_simd< _Tp >
 
struct  is_simd< simd< _Tp, _Abi > >
 
struct  is_simd_mask< _Tp >
 
struct  is_simd_mask< simd_mask< _Tp, _Abi > >
 
struct  is_simd_flag_type< _Tp >
 
struct  is_simd_flag_type< element_aligned_tag >
 
struct  is_simd_flag_type< vector_aligned_tag >
 
struct  is_simd_flag_type< overaligned_tag< _Align > >
 
struct  abi_for_size< _Tp, _Np >
 
struct  simd_size< _Tp, __simd_abi< __kind, _Np > >
 
struct  __static_simd_cast_traits< _Tp >
 
struct  __static_simd_cast_traits< simd< _Tp, _NewAbi > >
 
struct  __simd_cast_traits< _Tp >
 
struct  __simd_cast_traits< simd< _Tp, _NewAbi > >
 
class  const_where_expression< _MaskType, _Tp >
 
class  where_expression< _MaskType, _Tp >
 
class  simd< _Tp, _Abi >
 
struct  __abi_storage_kind< _Abi >
 
struct  __abi_storage_kind< __simd_abi< _K, _Np > >
 
struct  __mask_element< _Tp, _Abi >
 
class  __simd_mask_reference< _Tp, _Abi >
 
class  simd_mask< _Tp, _Abi >
 

Macros

#define ENABLE_SYCL_EXT_ONEAPI_INVOKE_SIMD
 
#define _LIBCPP_STD_VER   17
 
#define _LIBCPP_COMPILER_CLANG_BASED   1
 
#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER   1
 
#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD   namespace std::experimental {
 
#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD   }
 
#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD_ABI   namespace std::experimental::simd_abi {
 
#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD_ABI   }
 
#define _LIBCPP_INLINE_VAR   inline
 
#define _LIBCPP_PUSH_MACROS
 
#define _LIBCPP_POP_MACROS
 
#define _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES   512
 
#define _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, _NUM_ELEMENT)
 
#define _LIBCPP_SPECIALIZE_VEC_EXT_32(_TYPE)
 

Typedefs

using scalar = __simd_abi< _StorageKind::_Scalar, 1 >
 
template<int _Np>
using fixed_size = __simd_abi< _StorageKind::_Array, _Np >
 
template<class _Tp >
using compatible = fixed_size< 16/sizeof(_Tp)>
 
template<class _Tp >
using native = __simd_abi< _StorageKind::_VecExt, _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES/sizeof(_Tp)>
 
template<class _Tp , size_t _Np>
using abi_for_size_t = typename abi_for_size< _Tp, _Np >::type
 
template<class _Tp >
using native_simd = simd< _Tp, simd_abi::native< _Tp > >
 
template<class _Tp , int _Np>
using fixed_size_simd = simd< _Tp, simd_abi::fixed_size< _Np > >
 
template<class _Tp >
using native_simd_mask = simd_mask< _Tp, simd_abi::native< _Tp > >
 
template<class _Tp , int _Np>
using fixed_size_simd_mask = simd_mask< _Tp, simd_abi::fixed_size< _Np > >
 

Enumerations

enum class  _StorageKind { _Scalar , _Array , _VecExt }
 

Functions

constexpr size_t __floor_pow_of_2 (size_t __val)
 
constexpr size_t __ceil_pow_of_2 (size_t __val)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (char)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (char16_t)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (char32_t)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (wchar_t)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (signed char)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (signed short)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (signed int)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (signed long)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (signed long long)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (unsigned char)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (unsigned short)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (unsigned int)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (unsigned long)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (unsigned long long)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (float)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (double)
 
 _LIBCPP_SPECIALIZE_VEC_EXT_32 (long double)
 
template<class _To , class _From >
constexpr decltype(_To{std::declval< _From >()}, true) __is_non_narrowing_convertible_impl (_From)
 
template<class _To >
constexpr bool __is_non_narrowing_convertible_impl (...)
 
template<class _From , class _To >
constexpr std::enable_if_t< std::is_arithmetic_v< _To > &&std::is_arithmetic_v< _From >, bool > __is_non_narrowing_arithmetic_convertible ()
 
template<class _From , class _To >
constexpr std::enable_if_t<!(std::is_arithmetic_v< _To > &&std::is_arithmetic_v< _From >), bool > __is_non_narrowing_arithmetic_convertible ()
 
template<class _Tp >
constexpr _Tp __variadic_sum ()
 
template<class _Tp , class _Up , class... _Args>
constexpr _Tp __variadic_sum (_Up __first, _Args... __rest)
 
template<class _Tp >
constexpr bool __vectorizable ()
 
template<class _Tp , class _Up , class _Abi >
auto simd_cast (const simd< _Up, _Abi > &__v) -> decltype(__simd_cast_traits< _Tp >::__apply(__v))
 
template<class _Tp , class _Up , class _Abi >
auto static_simd_cast (const simd< _Up, _Abi > &__v) -> decltype(__static_simd_cast_traits< _Tp >::__apply(__v))
 
template<class _Tp , class _Abi >
fixed_size_simd< _Tp, simd_size< _Tp, _Abi >::value > to_fixed_size (const simd< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
fixed_size_simd_mask< _Tp, simd_size< _Tp, _Abi >::value > to_fixed_size (const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , size_t _Np>
native_simd< _Tp > to_native (const fixed_size_simd< _Tp, _Np > &) noexcept
 
template<class _Tp , size_t _Np>
native_simd_mask< _Tp > to_native (const fixed_size_simd_mask< _Tp, _Np > &) noexcept
 
template<class _Tp , size_t _Np>
simd< _Tp > to_compatible (const fixed_size_simd< _Tp, _Np > &) noexcept
 
template<class _Tp , size_t _Np>
simd_mask< _Tp > to_compatible (const fixed_size_simd_mask< _Tp, _Np > &) noexcept
 
template<size_t... __sizes, class _Tp , class _Abi >
tuple< simd< _Tp, abi_for_size_t< _Tp, __sizes > >... > split (const simd< _Tp, _Abi > &)
 
template<size_t... __sizes, class _Tp , class _Abi >
tuple< simd_mask< _Tp, abi_for_size_t< _Tp, __sizes > >... > split (const simd_mask< _Tp, _Abi > &)
 
template<class _SimdType , class _Abi >
array< _SimdType, simd_size< typename _SimdType::value_type, _Abi >::value/_SimdType::size()> split (const simd< typename _SimdType::value_type, _Abi > &)
 
template<class _SimdType , class _Abi >
array< _SimdType, simd_size< typename _SimdType::value_type, _Abi >::value/_SimdType::size()> split (const simd_mask< typename _SimdType::value_type, _Abi > &)
 
template<class _Tp , class... _Abis>
simd< _Tp, abi_for_size_t< _Tp, __variadic_sum(simd_size< _Tp, _Abis >::value...)> > concat (const simd< _Tp, _Abis > &...)
 
template<class _Tp , class... _Abis>
simd_mask< _Tp, abi_for_size_t< _Tp, __variadic_sum(simd_size< _Tp, _Abis >::value...)> > concat (const simd_mask< _Tp, _Abis > &...)
 
template<class _Tp , class _Abi >
bool all_of (const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
bool any_of (const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
bool none_of (const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
bool some_of (const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
int popcount (const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
int find_first_set (const simd_mask< _Tp, _Abi > &)
 
template<class _Tp , class _Abi >
int find_last_set (const simd_mask< _Tp, _Abi > &)
 
bool all_of (bool) noexcept
 
bool any_of (bool) noexcept
 
bool none_of (bool) noexcept
 
bool some_of (bool) noexcept
 
int popcount (bool) noexcept
 
int find_first_set (bool) noexcept
 
int find_last_set (bool) noexcept
 
template<class _Tp , class _Abi >
where_expression< simd_mask< _Tp, _Abi >, simd< _Tp, _Abi > > where (const typename simd< _Tp, _Abi >::mask_type &, simd< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
const_where_expression< simd_mask< _Tp, _Abi >, const simd< _Tp, _Abi > > where (const typename simd< _Tp, _Abi >::mask_type &, const simd< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
where_expression< simd_mask< _Tp, _Abi >, simd_mask< _Tp, _Abi > > where (const typename __nodeduce< simd_mask< _Tp, _Abi >>::type &, simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
const_where_expression< simd_mask< _Tp, _Abi >, const simd_mask< _Tp, _Abi > > where (const typename __nodeduce< simd_mask< _Tp, _Abi >>::type &, const simd_mask< _Tp, _Abi > &) noexcept
 
template<class _Tp >
where_expression< bool, _Tp > where (bool, _Tp &) noexcept
 
template<class _Tp >
const_where_expression< bool, const _Tp > where (bool, const _Tp &) noexcept
 
template<class _Tp , class _Abi , class _BinaryOp = std::plus<_Tp>>
_Tp reduce (const simd< _Tp, _Abi > &, _BinaryOp=_BinaryOp())
 
template<class _MaskType , class _SimdType , class _BinaryOp >
_SimdType::value_type reduce (const const_where_expression< _MaskType, _SimdType > &, typename _SimdType::value_type neutral_element, _BinaryOp binary_op)
 
template<class _MaskType , class _SimdType >
_SimdType::value_type reduce (const const_where_expression< _MaskType, _SimdType > &, plus< typename _SimdType::value_type > binary_op={})
 
template<class _MaskType , class _SimdType >
_SimdType::value_type reduce (const const_where_expression< _MaskType, _SimdType > &, multiplies< typename _SimdType::value_type > binary_op)
 
template<class _MaskType , class _SimdType >
_SimdType::value_type reduce (const const_where_expression< _MaskType, _SimdType > &, bit_and< typename _SimdType::value_type > binary_op)
 
template<class _MaskType , class _SimdType >
_SimdType::value_type reduce (const const_where_expression< _MaskType, _SimdType > &, bit_or< typename _SimdType::value_type > binary_op)
 
template<class _MaskType , class _SimdType >
_SimdType::value_type reduce (const const_where_expression< _MaskType, _SimdType > &, bit_xor< typename _SimdType::value_type > binary_op)
 
template<class _Tp , class _Abi >
_Tp hmin (const simd< _Tp, _Abi > &)
 
template<class _MaskType , class _SimdType >
_SimdType::value_type hmin (const const_where_expression< _MaskType, _SimdType > &)
 
template<class _Tp , class _Abi >
_Tp hmax (const simd< _Tp, _Abi > &)
 
template<class _MaskType , class _SimdType >
_SimdType::value_type hmax (const const_where_expression< _MaskType, _SimdType > &)
 
template<class _Tp , class _Abi >
 simd< _Tp, _Abi > (min)(const simd< _Tp
 
template<class _Tp , class _Abi >
 simd< _Tp, _Abi > (max)(const simd< _Tp
 
template<class _Tp , class _Abi >
std::pair< simd< _Tp, _Abi >, simd< _Tp, _Abi > > minmax (const simd< _Tp, _Abi > &, const simd< _Tp, _Abi > &) noexcept
 
template<class _Tp , class _Abi >
simd< _Tp, _Abi > clamp (const simd< _Tp, _Abi > &, const simd< _Tp, _Abi > &, const simd< _Tp, _Abi > &)
 

Variables

template<class _Tp >
constexpr size_t max_fixed_size = 32
 
constexpr element_aligned_tag element_aligned {}
 
constexpr vector_aligned_tag vector_aligned {}
 
template<size_t _Np>
constexpr overaligned_tag< _Np > overaligned {}
 
template<class _Tp >
constexpr bool is_abi_tag_v = is_abi_tag<_Tp>::value
 
template<class _Tp >
constexpr bool is_simd_v = is_simd<_Tp>::value
 
template<class _Tp >
constexpr bool is_simd_mask_v = is_simd_mask<_Tp>::value
 
template<class _Tp >
constexpr bool is_simd_flag_type_v = is_simd_flag_type<_Tp>::value
 
template<class _Tp , class _Abi = simd_abi::compatible<_Tp>>
constexpr size_t simd_size_v = simd_size<_Tp, _Abi>::value
 
template<class _Tp , class _Up = typename _Tp::value_type>
constexpr size_t memory_alignment_v = memory_alignment<_Tp, _Up>::value
 
_Abi const simd< _Tp, _Abi > & noexcept
 

Macro Definition Documentation

◆ _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD

#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD   namespace std::experimental {

Definition at line 673 of file simd.hpp.

◆ _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD_ABI

#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD_ABI   namespace std::experimental::simd_abi {

Definition at line 675 of file simd.hpp.

◆ _LIBCPP_COMPILER_CLANG_BASED

#define _LIBCPP_COMPILER_CLANG_BASED   1

Definition at line 671 of file simd.hpp.

◆ _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD

#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD   }

Definition at line 674 of file simd.hpp.

◆ _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD_ABI

#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD_ABI   }

Definition at line 676 of file simd.hpp.

◆ _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER

#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER   1

Definition at line 672 of file simd.hpp.

◆ _LIBCPP_INLINE_VAR

#define _LIBCPP_INLINE_VAR   inline

Definition at line 677 of file simd.hpp.

◆ _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES

#define _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES   512

Definition at line 680 of file simd.hpp.

◆ _LIBCPP_POP_MACROS

#define _LIBCPP_POP_MACROS

Definition at line 679 of file simd.hpp.

◆ _LIBCPP_PUSH_MACROS

#define _LIBCPP_PUSH_MACROS

Definition at line 678 of file simd.hpp.

◆ _LIBCPP_SPECIALIZE_VEC_EXT

#define _LIBCPP_SPECIALIZE_VEC_EXT (   _TYPE,
  _NUM_ELEMENT 
)
Value:
template <> \
struct __vec_ext_traits<_TYPE, sizeof(_TYPE) * _NUM_ELEMENT> { \
using type = \
_TYPE __attribute__((vector_size(sizeof(_TYPE) * _NUM_ELEMENT))); \
}
__attribute__((always_inline)) auto invoke_simd(sycl
The invoke_simd free function invokes a SIMD function using all work-items in a sub_group.

Definition at line 776 of file simd.hpp.

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32

#define _LIBCPP_SPECIALIZE_VEC_EXT_32 (   _TYPE)

Definition at line 783 of file simd.hpp.

◆ _LIBCPP_STD_VER

#define _LIBCPP_STD_VER   17

Definition at line 670 of file simd.hpp.

◆ ENABLE_SYCL_EXT_ONEAPI_INVOKE_SIMD

#define ENABLE_SYCL_EXT_ONEAPI_INVOKE_SIMD

Definition at line 9 of file simd.hpp.

Typedef Documentation

◆ abi_for_size_t

template<class _Tp , size_t _Np>
using abi_for_size_t = typename abi_for_size<_Tp, _Np>::type

Definition at line 1092 of file simd.hpp.

◆ compatible

template<class _Tp >
using compatible = fixed_size<16 / sizeof(_Tp)>

Definition at line 1014 of file simd.hpp.

◆ fixed_size

template<int _Np>
using fixed_size = __simd_abi<_StorageKind::_Array, _Np>

Definition at line 1008 of file simd.hpp.

◆ fixed_size_simd

template<class _Tp , int _Np>
using fixed_size_simd = simd<_Tp, simd_abi::fixed_size<_Np> >

Definition at line 1120 of file simd.hpp.

◆ fixed_size_simd_mask

template<class _Tp , int _Np>
using fixed_size_simd_mask = simd_mask<_Tp, simd_abi::fixed_size<_Np> >

Definition at line 1127 of file simd.hpp.

◆ native

template<class _Tp >
using native = __simd_abi<_StorageKind::_VecExt, _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES / sizeof(_Tp)>

Definition at line 1018 of file simd.hpp.

◆ native_simd

template<class _Tp >
using native_simd = simd<_Tp, simd_abi::native<_Tp> >

Definition at line 1118 of file simd.hpp.

◆ native_simd_mask

template<class _Tp >
using native_simd_mask = simd_mask<_Tp, simd_abi::native<_Tp> >

Definition at line 1124 of file simd.hpp.

◆ scalar

Definition at line 1005 of file simd.hpp.

Enumeration Type Documentation

◆ _StorageKind

enum _StorageKind
strong
Enumerator
_Scalar 
_Array 
_VecExt 

Definition at line 711 of file simd.hpp.

Function Documentation

◆ __ceil_pow_of_2()

constexpr size_t __ceil_pow_of_2 ( size_t  __val)
constexpr

Definition at line 764 of file simd.hpp.

References __floor_pow_of_2().

◆ __floor_pow_of_2()

constexpr size_t __floor_pow_of_2 ( size_t  __val)
constexpr

Definition at line 759 of file simd.hpp.

Referenced by __ceil_pow_of_2().

◆ __is_non_narrowing_arithmetic_convertible() [1/2]

template<class _From , class _To >
constexpr std::enable_if_t<std::is_arithmetic_v<_To> && std::is_arithmetic_v<_From>, bool> __is_non_narrowing_arithmetic_convertible ( )
constexpr

Definition at line 969 of file simd.hpp.

◆ __is_non_narrowing_arithmetic_convertible() [2/2]

template<class _From , class _To >
constexpr std::enable_if_t<!(std::is_arithmetic_v<_To> && std::is_arithmetic_v<_From>), bool> __is_non_narrowing_arithmetic_convertible ( )
constexpr

Definition at line 977 of file simd.hpp.

◆ __is_non_narrowing_convertible_impl() [1/2]

template<class _To >
constexpr bool __is_non_narrowing_convertible_impl (   ...)
constexpr

Definition at line 961 of file simd.hpp.

◆ __is_non_narrowing_convertible_impl() [2/2]

template<class _To , class _From >
constexpr decltype(_To{std::declval<_From>()}, true) __is_non_narrowing_convertible_impl ( _From  )
constexpr

Definition at line 956 of file simd.hpp.

◆ __variadic_sum() [1/2]

template<class _Tp >
constexpr _Tp __variadic_sum ( )
constexpr

Definition at line 982 of file simd.hpp.

◆ __variadic_sum() [2/2]

template<class _Tp , class _Up , class... _Args>
constexpr _Tp __variadic_sum ( _Up  __first,
_Args...  __rest 
)
constexpr

Definition at line 987 of file simd.hpp.

◆ __vectorizable()

template<class _Tp >
constexpr bool __vectorizable ( )
constexpr

Definition at line 997 of file simd.hpp.

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [1/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( char  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [2/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( char16_t  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [3/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( char32_t  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [4/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( double  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [5/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( float  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [6/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( long double  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [7/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( signed char  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [8/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( signed int  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [9/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( signed long long  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [10/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( signed long  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [11/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( signed short  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [12/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( unsigned char  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [13/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( unsigned int  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [14/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( unsigned long long  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [15/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( unsigned long  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [16/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( unsigned short  )

◆ _LIBCPP_SPECIALIZE_VEC_EXT_32() [17/17]

_LIBCPP_SPECIALIZE_VEC_EXT_32 ( wchar_t  )

◆ all_of() [1/2]

bool all_of ( bool  )
noexcept

◆ all_of() [2/2]

◆ any_of() [1/2]

bool any_of ( bool  )
noexcept

◆ any_of() [2/2]

◆ clamp()

template<class _Tp , class _Abi >
simd<_Tp, _Abi> clamp ( const simd< _Tp, _Abi > &  ,
const simd< _Tp, _Abi > &  ,
const simd< _Tp, _Abi > &   
)

◆ concat() [1/2]

template<class _Tp , class... _Abis>
simd<_Tp, abi_for_size_t<_Tp, __variadic_sum(simd_size<_Tp, _Abis>::value...)> > concat ( const simd< _Tp, _Abis > &  ...)

◆ concat() [2/2]

template<class _Tp , class... _Abis>
simd_mask<_Tp, abi_for_size_t<_Tp, __variadic_sum(simd_size<_Tp, _Abis>::value...)> > concat ( const simd_mask< _Tp, _Abis > &  ...)

◆ find_first_set() [1/2]

int find_first_set ( bool  )
noexcept

◆ find_first_set() [2/2]

template<class _Tp , class _Abi >
int find_first_set ( const simd_mask< _Tp, _Abi > &  )

◆ find_last_set() [1/2]

int find_last_set ( bool  )
noexcept

◆ find_last_set() [2/2]

template<class _Tp , class _Abi >
int find_last_set ( const simd_mask< _Tp, _Abi > &  )

◆ hmax() [1/2]

template<class _MaskType , class _SimdType >
_SimdType::value_type hmax ( const const_where_expression< _MaskType, _SimdType > &  )

◆ hmax() [2/2]

template<class _Tp , class _Abi >
_Tp hmax ( const simd< _Tp, _Abi > &  )

◆ hmin() [1/2]

template<class _MaskType , class _SimdType >
_SimdType::value_type hmin ( const const_where_expression< _MaskType, _SimdType > &  )

◆ hmin() [2/2]

template<class _Tp , class _Abi >
_Tp hmin ( const simd< _Tp, _Abi > &  )

◆ minmax()

template<class _Tp , class _Abi >
std::pair<simd<_Tp, _Abi>, simd<_Tp, _Abi> > minmax ( const simd< _Tp, _Abi > &  ,
const simd< _Tp, _Abi > &   
)
noexcept

◆ none_of() [1/2]

bool none_of ( bool  )
noexcept

◆ none_of() [2/2]

template<class _Tp , class _Abi >
bool none_of ( const simd_mask< _Tp, _Abi > &  )
noexcept

◆ popcount() [1/2]

int popcount ( bool  )
noexcept

◆ popcount() [2/2]

template<class _Tp , class _Abi >
int popcount ( const simd_mask< _Tp, _Abi > &  )
noexcept

◆ reduce() [1/7]

template<class _MaskType , class _SimdType >
_SimdType::value_type reduce ( const const_where_expression< _MaskType, _SimdType > &  ,
bit_and< typename _SimdType::value_type >  binary_op 
)

◆ reduce() [2/7]

template<class _MaskType , class _SimdType >
_SimdType::value_type reduce ( const const_where_expression< _MaskType, _SimdType > &  ,
bit_or< typename _SimdType::value_type >  binary_op 
)

◆ reduce() [3/7]

template<class _MaskType , class _SimdType >
_SimdType::value_type reduce ( const const_where_expression< _MaskType, _SimdType > &  ,
bit_xor< typename _SimdType::value_type >  binary_op 
)

◆ reduce() [4/7]

template<class _MaskType , class _SimdType >
_SimdType::value_type reduce ( const const_where_expression< _MaskType, _SimdType > &  ,
multiplies< typename _SimdType::value_type >  binary_op 
)

◆ reduce() [5/7]

template<class _MaskType , class _SimdType >
_SimdType::value_type reduce ( const const_where_expression< _MaskType, _SimdType > &  ,
plus< typename _SimdType::value_type >  binary_op = {} 
)

◆ reduce() [6/7]

template<class _MaskType , class _SimdType , class _BinaryOp >
_SimdType::value_type reduce ( const const_where_expression< _MaskType, _SimdType > &  ,
typename _SimdType::value_type  neutral_element,
_BinaryOp  binary_op 
)

◆ reduce() [7/7]

template<class _Tp , class _Abi , class _BinaryOp = std::plus<_Tp>>
_Tp reduce ( const simd< _Tp, _Abi > &  ,
_BinaryOp  = _BinaryOp() 
)

◆ simd< _Tp, _Abi >() [1/2]

template<class _Tp , class _Abi >
simd< _Tp, _Abi > ( max  ) const

◆ simd< _Tp, _Abi >() [2/2]

template<class _Tp , class _Abi >
simd< _Tp, _Abi > ( min  ) const

◆ simd_cast()

template<class _Tp , class _Up , class _Abi >
auto simd_cast ( const simd< _Up, _Abi > &  __v) -> decltype(__simd_cast_traits<_Tp>::__apply(__v))

Definition at line 1165 of file simd.hpp.

References __simd_cast_traits< _Tp >::__apply().

◆ some_of() [1/2]

bool some_of ( bool  )
noexcept

◆ some_of() [2/2]

template<class _Tp , class _Abi >
bool some_of ( const simd_mask< _Tp, _Abi > &  )
noexcept

◆ split() [1/4]

template<size_t... __sizes, class _Tp , class _Abi >
tuple<simd<_Tp, abi_for_size_t<_Tp, __sizes> >...> split ( const simd< _Tp, _Abi > &  )

◆ split() [2/4]

template<class _SimdType , class _Abi >
array<_SimdType, simd_size<typename _SimdType::value_type, _Abi>::value / _SimdType::size()> split ( const simd< typename _SimdType::value_type, _Abi > &  )

◆ split() [3/4]

template<size_t... __sizes, class _Tp , class _Abi >
tuple<simd_mask<_Tp, abi_for_size_t<_Tp, __sizes> >...> split ( const simd_mask< _Tp, _Abi > &  )

◆ split() [4/4]

template<class _SimdType , class _Abi >
array<_SimdType, simd_size<typename _SimdType::value_type, _Abi>::value / _SimdType::size()> split ( const simd_mask< typename _SimdType::value_type, _Abi > &  )

◆ static_simd_cast()

template<class _Tp , class _Up , class _Abi >
auto static_simd_cast ( const simd< _Up, _Abi > &  __v) -> decltype(__static_simd_cast_traits<_Tp>::__apply(__v))

Definition at line 1171 of file simd.hpp.

References __static_simd_cast_traits< _Tp >::__apply().

◆ to_compatible() [1/2]

template<class _Tp , size_t _Np>
simd<_Tp> to_compatible ( const fixed_size_simd< _Tp, _Np > &  )
noexcept

◆ to_compatible() [2/2]

template<class _Tp , size_t _Np>
simd_mask<_Tp> to_compatible ( const fixed_size_simd_mask< _Tp, _Np > &  )
noexcept

◆ to_fixed_size() [1/2]

template<class _Tp , class _Abi >
fixed_size_simd<_Tp, simd_size<_Tp, _Abi>::value> to_fixed_size ( const simd< _Tp, _Abi > &  )
noexcept

◆ to_fixed_size() [2/2]

template<class _Tp , class _Abi >
fixed_size_simd_mask<_Tp, simd_size<_Tp, _Abi>::value> to_fixed_size ( const simd_mask< _Tp, _Abi > &  )
noexcept

◆ to_native() [1/2]

template<class _Tp , size_t _Np>
native_simd<_Tp> to_native ( const fixed_size_simd< _Tp, _Np > &  )
noexcept

◆ to_native() [2/2]

template<class _Tp , size_t _Np>
native_simd_mask<_Tp> to_native ( const fixed_size_simd_mask< _Tp, _Np > &  )
noexcept

◆ where() [1/6]

template<class _Tp >
where_expression<bool, _Tp> where ( bool  ,
_Tp &   
)
noexcept

◆ where() [2/6]

template<class _Tp >
const_where_expression<bool, const _Tp> where ( bool  ,
const _Tp &   
)
noexcept

◆ where() [3/6]

template<class _Tp , class _Abi >
const_where_expression<simd_mask<_Tp, _Abi>, const simd_mask<_Tp, _Abi> > where ( const typename __nodeduce< simd_mask< _Tp, _Abi >>::type &  ,
const simd_mask< _Tp, _Abi > &   
)
noexcept

◆ where() [4/6]

template<class _Tp , class _Abi >
where_expression<simd_mask<_Tp, _Abi>, simd_mask<_Tp, _Abi> > where ( const typename __nodeduce< simd_mask< _Tp, _Abi >>::type &  ,
simd_mask< _Tp, _Abi > &   
)
noexcept

◆ where() [5/6]

template<class _Tp , class _Abi >
const_where_expression<simd_mask<_Tp, _Abi>, const simd<_Tp, _Abi> > where ( const typename simd< _Tp, _Abi >::mask_type &  ,
const simd< _Tp, _Abi > &   
)
noexcept

◆ where() [6/6]

template<class _Tp , class _Abi >
where_expression<simd_mask<_Tp, _Abi>, simd<_Tp, _Abi> > where ( const typename simd< _Tp, _Abi >::mask_type &  ,
simd< _Tp, _Abi > &   
)
noexcept

Variable Documentation

◆ element_aligned

constexpr element_aligned_tag element_aligned {}
inlineconstexpr

Definition at line 1038 of file simd.hpp.

◆ is_abi_tag_v

template<class _Tp >
constexpr bool is_abi_tag_v = is_abi_tag<_Tp>::value
inlineconstexpr

Definition at line 1080 of file simd.hpp.

◆ is_simd_flag_type_v

template<class _Tp >
constexpr bool is_simd_flag_type_v = is_simd_flag_type<_Tp>::value
inlineconstexpr

Definition at line 1086 of file simd.hpp.

◆ is_simd_mask_v

template<class _Tp >
constexpr bool is_simd_mask_v = is_simd_mask<_Tp>::value
inlineconstexpr

Definition at line 1084 of file simd.hpp.

◆ is_simd_v

template<class _Tp >
constexpr bool is_simd_v = is_simd<_Tp>::value
inlineconstexpr

Definition at line 1082 of file simd.hpp.

◆ max_fixed_size

template<class _Tp >
constexpr size_t max_fixed_size = 32
inlineconstexpr

Definition at line 1011 of file simd.hpp.

◆ memory_alignment_v

template<class _Tp , class _Up = typename _Tp::value_type>
constexpr size_t memory_alignment_v = memory_alignment<_Tp, _Up>::value
inlineconstexpr

Definition at line 1114 of file simd.hpp.

◆ noexcept

_Abi const simd< _Tp, _Abi > & noexcept

Definition at line 1324 of file simd.hpp.

◆ overaligned

template<size_t _Np>
constexpr overaligned_tag<_Np> overaligned {}
inlineconstexpr

Definition at line 1041 of file simd.hpp.

◆ simd_size_v

template<class _Tp , class _Abi = simd_abi::compatible<_Tp>>
constexpr size_t simd_size_v = simd_size<_Tp, _Abi>::value
inlineconstexpr

Definition at line 1111 of file simd.hpp.

◆ vector_aligned

constexpr vector_aligned_tag vector_aligned {}
inlineconstexpr

Definition at line 1039 of file simd.hpp.