|
Mjolnir Core
Core functionality of the Mjolnir API
|
Contains x86 vectorization specific constants, concepts and definitions. More...
#include "mjolnir/core/fundamental_types.h"#include "mjolnir/core/utility/type.h"#include "mjolnir/core/x86/x86.h"#include <type_traits>#include <array>

Go to the source code of this file.
Classes | |
| struct | VectorDataArray< T_RegisterType > |
A std::array of correct alignment, type and size to store all elements of a vector register type. More... | |
Typedefs | |
| template<FloatVectorRegister T_RegisterType> | |
| using | ElementType = typename std::conditional_t< is_any_of< T_RegisterType, __m128d, __m256d >(), F64, F32 > |
| The element type of an x86 vector register that is based on floating-point types. More... | |
Variables | |
| template<VectorRegister T_RegisterType> | |
| constexpr UST | alignment_bytes = internal::get_alignment_bytes<T_RegisterType>() |
| Alignment requirement of an x86 vector register in bytes. More... | |
| template<typename T_Type > | |
| concept | DoublePrecisionVectorRegister = is_any_of<T_Type, __m128d, __m256d>() |
| Concept for a x86 vector register that has double precision elements. More... | |
| template<typename T_Type > | |
| concept | FloatAVXRegister = is_any_of<T_Type, __m256, __m256d>() |
| Concept for a x86 vector register that has floating-point elements. More... | |
| template<typename T_Type > | |
| concept | FloatSSERegister = is_any_of<T_Type, __m128, __m128d>() |
| Concept for a x86 SSE vector register that has floating-point elements. More... | |
| template<typename T_Type > | |
| concept | FloatVectorRegister = is_any_of<T_Type, __m128, __m128d, __m256, __m256d>() |
| Concept for a x86 vector register that has floating-point elements. More... | |
| template<typename T_Type > | |
| concept | IntegerVectorRegister = is_any_of<T_Type, __m128i, __m256i>() |
| Concept for a x86 vector register that has integer elements. More... | |
| template<typename T_Type > | |
| constexpr bool | is_avx_register = is_any_of<T_Type, __m256, __m256d, __m256i>() |
Type dependent constant that is only true for AVX vector registers. More... | |
| template<FloatVectorRegister T_RegisterType> | |
| constexpr bool | is_double_precision = std::is_same_v<ElementType<T_RegisterType>, F64> |
true if the element type has double precision and false otherwise. More... | |
| template<typename T_Type > | |
| constexpr bool | is_float_register = is_any_of<T_Type, __m128, __m128d, __m256, __m256d>() |
Type dependent constant that is only true for x86 vector registers that have floating-point types as elements. More... | |
| template<typename T_Type > | |
| constexpr bool | is_integer_register = is_any_of<T_Type, __m128i, __m256i>() |
Type dependent constant that is only true for x86 vector registers that have integer types as elements. More... | |
| template<typename T_Type > | |
| constexpr bool | is_m128 = std::is_same_v<T_Type, __m128> |
Type dependent constant that is only true for __m128 and false for all other types. More... | |
| template<typename T_Type > | |
| constexpr bool | is_m128d = std::is_same_v<T_Type, __m128d> |
Type dependent constant that is only true for __m128d and false for all other types. More... | |
| template<typename T_Type > | |
| constexpr bool | is_m128i = std::is_same_v<T_Type, __m128i> |
Type dependent constant that is only true for __m128i and false for all other types. More... | |
| template<typename T_Type > | |
| constexpr bool | is_m256 = std::is_same_v<T_Type, __m256> |
Type dependent constant that is only true for __m256 and false for all other types. More... | |
| template<typename T_Type > | |
| constexpr bool | is_m256d = std::is_same_v<T_Type, __m256d> |
Type dependent constant that is only true for __m256d and false for all other types. More... | |
| template<typename T_Type > | |
| constexpr bool | is_m256i = std::is_same_v<T_Type, __m256i> |
Type dependent constant that is only true for __m256i and false for all other types. More... | |
| template<FloatVectorRegister T_RegisterType> | |
| constexpr bool | is_multi_lane = num_lanes<T_RegisterType> > 1 |
true if the register has multiple lanes and false otherwise. More... | |
| template<FloatVectorRegister T_RegisterType> | |
| constexpr bool | is_single_precision = std::is_same_v<ElementType<T_RegisterType>, F32> |
true if the element type has single precision and false otherwise. More... | |
| template<typename T_Type > | |
| constexpr bool | is_sse_register = is_any_of<T_Type, __m128, __m128d, __m128i>() |
Type dependent constant that is only true for SSE vector registers. More... | |
| template<typename T_Type > | |
| constexpr bool | is_vector_register = is_any_of<T_Type, __m128, __m128d, __m128i, __m256, __m256d, __m256i>() |
Type dependent constant that is only true for supported x86 vector registers. More... | |
| template<FloatVectorRegister T_RegisterType> | |
| constexpr UST | num_elements = sizeof(T_RegisterType) / sizeof(ElementType<T_RegisterType>) |
| Number of register elements. More... | |
| template<FloatVectorRegister T_RegisterType> | |
| constexpr UST | num_lane_elements = num_elements<T_RegisterType> / num_lanes<T_RegisterType> |
| Number of elements per register lane. More... | |
| template<VectorRegister T_RegisterType> | |
| constexpr UST | num_lanes = internal::get_num_lanes<T_RegisterType>() |
| Number of register lanes. More... | |
| template<typename T_Type > | |
| concept | SinglePrecisionVectorRegister = is_any_of<T_Type, __m128, __m256>() |
| Concept for a x86 vector register that has single precision elements. More... | |
| template<typename T_Type > | |
| concept | VectorRegister = is_any_of<T_Type, __m128, __m128d, __m128i, __m256, __m256d, __m256i>() |
| Concept for a x86 vector register. More... | |
Contains x86 vectorization specific constants, concepts and definitions.