|
Mjolnir Core
Core functionality of the Mjolnir API
|
Contains functions to permute and blend the elements of vector registers. More...
#include "mjolnir/core/fundamental_types.h"#include "mjolnir/core/x86/definitions.h"#include "mjolnir/core/utility/bit_operations.h"#include "mjolnir/core/utility/parameter_pack.h"#include "mjolnir/core/x86/intrinsics.h"

Go to the source code of this file.
Functions | |
| template<UST t_shift, FloatVectorRegister T_RegisterType> | |
| auto | align_right ([[maybe_unused]] T_RegisterType lhs, [[maybe_unused]] T_RegisterType rhs) noexcept -> T_RegisterType |
Concatenate two floating-point registers, shift the result right by t_shift elements, and return the result. More... | |
| template<UST... t_args, FloatVectorRegister T_RegisterType> | |
| auto | blend (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
Blend elements from src_0 and src_1 into a new register. More... | |
| template<UST t_index, FloatVectorRegister T_RegisterType> | |
| auto | blend_above (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
Get a register where elements with a higher index than t_index are copied from src_1and the rest from src_0. More... | |
| template<UST t_index, FloatVectorRegister T_RegisterType> | |
| auto | blend_at (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
Get a new register where the element with index t_index is taken from src_1 and the rest from src_0 More... | |
| template<UST t_index, FloatVectorRegister T_RegisterType> | |
| auto | blend_below (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
Get a register where elements with a lower index than t_index are copied from src_1and the rest from src_0. More... | |
| template<UST t_index_first, UST t_index_last, FloatVectorRegister T_RegisterType> | |
| auto | blend_from_to (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
Get a register where elements inside the specified index range are taken from src_1 and the rest from src_0. More... | |
| template<UST t_index, FloatVectorRegister T_RegisterType> | |
| auto | broadcast (T_RegisterType src) noexcept -> T_RegisterType |
Broadcast a register element per lane selected by t_index. More... | |
| template<UST t_index_0, UST t_index_1, FloatAVXRegister T_RegisterType> | |
| auto | broadcast (T_RegisterType src) noexcept -> T_RegisterType |
Broadcast a register element per lane selected by t_index_0 and t_index_1. More... | |
| template<UST t_index, FloatVectorRegister T_RegisterType> | |
| auto | broadcast_across_lanes (T_RegisterType src) noexcept -> T_RegisterType |
Broadcast a register element selected by t_index across lane boundaries. More... | |
| template<UST t_index_0, UST t_index_1, FloatVectorRegister T_RegisterType> | |
| void | exchange (T_RegisterType ®_0, T_RegisterType ®_1) noexcept |
| Exchange two elements selected by indices between two registers. More... | |
| template<UST t_index_src, UST t_index_dst, bool... t_set_zero> | |
| auto | insert (__m128 src, __m128 dst) noexcept -> __m128 |
Insert a single element from src into dst and return the result in a new __m128 register. More... | |
| template<UST... t_indices, FloatVectorRegister T_RegisterType> | |
| auto | permute (T_RegisterType src) noexcept -> T_RegisterType |
| Shuffle the elements of a vector register within lanes using indices and return the result in a new register. More... | |
| template<UST... t_indices, FloatVectorRegister T_RegisterType> | |
| auto | permute_across_lanes (T_RegisterType src) noexcept -> T_RegisterType |
| Shuffle the elements of a vector register across lanes using indices and return the result in a new register. More... | |
| template<UST t_lane_0, UST t_lane_1, FloatAVXRegister T_RegisterType> | |
| auto | permute_lanes (T_RegisterType src) noexcept -> T_RegisterType |
| Create a new AVX register by an arbitrary combination of the source registers lanes. More... | |
| template<UST... t_indices, FloatVectorRegister T_RegisterType> | |
| auto | shuffle (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
Return a register with the first half of the lane elements selected from src_0 and the second half from src_1. More... | |
| template<UST t_src_0, UST t_lane_0, UST t_src_1, UST t_lane_1, FloatAVXRegister T_RegisterType> | |
| auto | shuffle_lanes (T_RegisterType src_0, T_RegisterType src_1) noexcept -> T_RegisterType |
| Create a new AVX register by combining arbitrary lanes from two source registers. More... | |
| template<UST t_idx_0, UST t_idx_1, FloatVectorRegister T_RegisterType> | |
| auto | swap (T_RegisterType src) noexcept -> T_RegisterType |
| Swap two elements of a register and return the result. More... | |
| template<FloatAVXRegister T_RegisterType> | |
| auto | swap_lanes (T_RegisterType src) noexcept -> T_RegisterType |
| Swap the lanes of an AVX register and return the result. More... | |
| template<bool t_swap_lanes, FloatAVXRegister T_RegisterType> | |
| auto | swap_lanes_if (T_RegisterType src) noexcept -> T_RegisterType |
| Return a new register with or without swapped lanes depending on the value of the boolean template parameter. More... | |
Contains functions to permute and blend the elements of vector registers.