EVE provides various elements to simplify the management of SIMD-compatible memory like functions and allocators for requesting SIMD-compatible block of memory, pointer wrappers to discriminate aligned memory from regular one, and alignment computation functions.
Convenience header:
#include <eve/memory.hpp>
|
template<typename T > |
using | eve::unaligned_t = decltype(unalign(std::declval< T >())) |
| Compute the unaligned pointer type associated to a given type.
|
|
|
enum class | eve::over : std::size_t |
| Strong integral type that represents the notion of over-alignment constraints. More...
|
|
enum class | eve::under : std::size_t |
| Strong integral type that represents the notion of under-alignment constraints. More...
|
|
|
template<std::integral T> |
constexpr auto | eve::align (T v, over alignment) noexcept |
| Realigns integral value over a given power-of-2 alignment constraint.
|
|
template<std::integral T> |
constexpr auto | eve::align (T v, under alignment) noexcept |
| Realigns integral value under a given power-of-2 alignment constraint.
|
|
template<typename T > |
constexpr auto | eve::align (T *ptr, over alignment) noexcept |
| Realigns a pointer over a given power-of-2 alignment constraint.
|
|
template<typename T > |
constexpr auto | eve::align (T *ptr, under alignment) noexcept |
| Realigns a pointer under a given power-of-2 alignment constraint.
|
|
template<std::size_t A, typename T , typename Other > |
constexpr bool | eve::is_aligned (aligned_ptr< T, Other > const &ptr) noexcept |
| Checks if an aligned_ptr is aligned on a given alignment.
|
|
template<std::size_t Alignment, std::integral T> |
constexpr bool | eve::is_aligned (T v) noexcept |
| Checks if a pointer satisfies an alignment constraint.
|
|
template<std::size_t Alignment, typename T > |
constexpr bool | eve::is_aligned (T *ptr) noexcept |
| Checks if a pointer satisfies an alignment constraint.
|
|
template<typename T , typename Lanes > |
constexpr bool | eve::is_aligned (T *ptr, Lanes lanes) noexcept |
| Checks if a pointer satisfies an alignment constraint.
|
|
|
constexpr auto | eve::read = functor<read_t> |
| Callable object reading single value from memory.
|
|
constexpr auto | eve::unalign = functor<unalign_t> |
| Callable object for computing an unaligned version of a relaxed iterator.
|
|
constexpr auto | eve::write = functor<write_t> |
| Callable object writing a scalar value to memory.
|
|
constexpr callable_store_ | eve::store = {} |
| Callable object computing //! description NOT FOUND.
|
|
constexpr callable_store_equivalent_ | eve::store_equivalent = {} |
| Callable object, customisation point. If an iterator's store operation can be done as a store to some other iterator/pointer - this is a transformation to customize.
|
|