Mjolnir Core
Core functionality of the Mjolnir API
Classes | Typedefs | Variables
definitions.h File Reference

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>
Include dependency graph for definitions.h:
This graph shows which files directly or indirectly include this file:

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...
 

Detailed Description

Contains x86 vectorization specific constants, concepts and definitions.

x86/definitions.h