Mjolnir Core
Core functionality of the Mjolnir API
Functions
permutation.h File Reference

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

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 &reg_0, T_RegisterType &reg_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...
 

Detailed Description

Contains functions to permute and blend the elements of vector registers.

permutation.h