vir-simd 0.4.189
Parallelism TS 2 extensions and simd fallback implementation
|
Permutation functions for the Parallelism TS 2 simd types. More...
#include "simd_concepts.h"
#include "simd.h"
#include "detail.h"
#include "constexpr_wrapper.h"
#include <bit>
Go to the source code of this file.
Namespaces | |
namespace | vir |
This namespace collects libraries and tools authored by Matthias Kretz. | |
namespace | vir::simd_permutations |
Predefined permutations. | |
Functions | |
template<std::size_t N = 0, vir::any_simd_or_mask V, detail::index_permutation_function< V::size()> F> | |
constexpr stdx::resize_simd_t< N==0 ? V::size() :N, V > | vir::simd_permute (V const &v, F const idx_perm) noexcept |
Permute the elements of v using the index permutation function idx_perm . | |
template<std::size_t N = 0, vir::vectorizable T, detail::index_permutation_function< 1 > F> | |
constexpr std::conditional_t< N<=1, T, stdx::resize_simd_t< N==0 ? 1 :N, stdx::simd< T > > > | vir::simd_permute (T const &v, F const idx_perm) noexcept |
Overload for scalar inputs. | |
template<int Offset, vir::any_simd_or_mask V> | |
constexpr V | vir::simd_shift_in (V const &a, std::convertible_to< V > auto const &... more) noexcept |
Concatenate a, more... , shift by Offset , and return the first V::size() elements. | |
Variables | |
constexpr int | vir::simd_permute_zero = std::numeric_limits<int>::max() |
Constant that requests a zero value instead of one of the input values. | |
constexpr int | vir::simd_permute_uninit = simd_permute_zero - 1 |
Constant that allows an arbitrary value instead of one of the input values. | |
constexpr DuplicateEven | vir::simd_permutations::duplicate_even {} |
Copies even elements into odd elements. | |
constexpr DuplicateOdd | vir::simd_permutations::duplicate_odd {} |
Copies odd elements into even elements. | |
template<unsigned N = 1u> | |
constexpr SwapNeighbors< N > | vir::simd_permutations::swap_neighbors {} |
Swaps N neighboring elements. | |
template<int Position> | |
constexpr Broadcast< Position > | vir::simd_permutations::broadcast {} |
Copy element at index Position into all elements. | |
constexpr Broadcast< 0 > | vir::simd_permutations::broadcast_first {} |
Copy the first element into all elements. | |
constexpr Broadcast<-1 > | vir::simd_permutations::broadcast_last {} |
Copy the last element into all elements. | |
constexpr Reverse | vir::simd_permutations::reverse {} |
Reverse the elements. | |
template<int Offset> | |
constexpr Rotate< Offset > | vir::simd_permutations::rotate {} |
Rotate the elements by Offset . | |
template<int Offset> | |
constexpr Shift< Offset > | vir::simd_permutations::shift {} |
Shift the elements by Offset . | |
Permutation functions for the Parallelism TS 2 simd types.