#include <eve/module/core.hpp>
{
template<simd_value T, std::ptrdiff_t M>
T
rotate(T x, index<N>
const &)
noexcept;
constexpr callable_rotate_ rotate
rotates two halves of the register by a chosen number of elements.
Definition rotate.hpp:59
EVE Main Namespace.
Definition abi.hpp:18
Parameters
x
: simd value to rotate
M
: position of the middle. In std::rotate(f, m, l) -> this is std::distance(f, m);
Return value
Return T which is a permutation of x such that elements x[M: T::size()) come first followed by x[0:M) and the relative order in those halves is preserved.
#include <iostream>
#include <eve/module/core.hpp>
int main()
{
wide_it x = {1, 2, 3, 4};
std::cout << "---- simd" << '\n'
<< "<- x = " << x << '\n'
<<
"-> rotate(x, eve::index<0>) = " <<
eve::rotate(x, eve::index<0>) <<
'\n'
<<
"-> rotate(x, eve::index<1>) = " <<
eve::rotate(x, eve::index<1>) <<
'\n'
<<
"-> rotate(x, eve::index<2>) = " <<
eve::rotate(x, eve::index<2>) <<
'\n'
<<
"-> rotate(x, eve::index<3>) = " <<
eve::rotate(x, eve::index<3>) <<
'\n'
<<
"-> rotate(x, eve::index<4>) = " <<
eve::rotate(x, eve::index<4>) <<
'\n';
}
Wrapper for SIMD registers.
Definition wide.hpp:86