XSIMD Functions

Functions that overload or simulate XSIMD functionality

xsimd::load_aligned

Function load_aligned

xsimd::load_unaligned

Function load_unaligned

xsimd::store_aligned

Function store_aligned

xsimd::store_unaligned

Function store_unaligned

xsimd::xsimd::get_alignment_offset

Function get_alignment_offset

Functions

template<typename T, typename batch_type, typename U = details::remove_cvref_t<batch_type>, typename = std::enable_if_t<details::is_batch<U>::value && !std::is_convertible<U *, simd_base<U> *>::value, T>>
void xsimd::load_aligned(T *src, batch_type &b)

Load aligned data Loads the memory array pointed to by src into a batch and returns it. src is required to be aligned.

Note

Uses SFINAE to remove this overload from resolution when using the real XSIMD

Parameters
  • src: the pointer to the memory array to load.

  • b: the destination batch.

Template Parameters
  • T: Type of memory to read from

template<typename T, typename batch_type, typename U = details::remove_cvref_t<batch_type>, typename = std::enable_if_t<details::is_batch<U>::value && !std::is_convertible<U *, simd_base<U> *>::value, T>>
void xsimd::load_unaligned(T *src, batch_type &b)

Load unaligned data Loads the memory array pointed to by src into a batch and returns it. src is not required to be aligned.

Note

Uses SFINAE to remove this overload from resolution when using the real XSIMD

Parameters
  • src: the pointer to the memory array to load.

  • b: the destination batch.

Template Parameters
  • T: Type of memory to read from

template<typename T, typename expr_type, typename U = details::remove_cvref_t<expr_type>, typename = std::enable_if_t<(details::is_batch<U>::value && !std::is_convertible<U *, simd_base<U> *>::value) || std::is_convertible<U *, expr_base<U> *>::value, T>>
void xsimd::store_aligned(T *dest, expr_type &&expr)

Store aligned data Stores the expression expr into the memory array pointed to by dest. dest is required to be aligned.

Note

Uses SFINAE to remove this overload from resolution when using the real XSIMD

Parameters
  • dest: the pointer to the memory array.

  • expr: the expression to store

Template Parameters
  • T: Type of memory to read from

template<typename T, typename expr_type, typename U = details::remove_cvref_t<expr_type>, typename = std::enable_if_t<(details::is_batch<U>::value && !std::is_convertible<U *, simd_base<U> *>::value) || std::is_convertible<U *, expr_base<U> *>::value, T>>
void xsimd::store_unaligned(T *dest, expr_type &&expr)

Store unaligned data Stores the expression expr into the memory array pointed to by dest. dest is not required to be aligned.

Note

Uses SFINAE to remove this overload from resolution when using the real XSIMD

Parameters
  • dest: the pointer to the memory array.

  • expr: the expression to store

Template Parameters
  • T: Type of memory to read from

template<typename T>
size_t xsimd::get_alignment_offset(const T *p, size_t size, size_t block_size)

Get the alignment offset of some memory.

Taken as-is from XSIMD