E.V.E
v2023.02.15
Loading...
Searching...
No Matches
◆
load
auto eve::load =
functor
<load_t>
inline
constexpr
Header file
#include <eve/module/core.hpp>
Callable Signatures
namespace
eve
{
// Regular overloads
template
<detail::data_source Ptr>
wide_value_type_t<Ptr>
load
(Ptr ptr)
const
noexcept
;
// 1
template
<detail::data_source Ptr, std::ptrdiff_t N>
as_wide_t<value_type_t<Ptr>,
fixed<N>
>
load
(Ptr ptr,
fixed<N>
)
const
noexcept
;
// 1
template
<detail::data_source Ptr, arithmetic_simd_value W
id
e>
requires
std::same_as<value_type_t<Ptr>, element_type_t<Wide>>
Wide
load
(Ptr ptr,
as<Wide>
tgt)
const
noexcept
;
// 1
template<detail::data_source Ptr, logical_simd_value Wide>
(
sizeof
(
value_type_t<Ptr>
) ==
sizeof
(element_type_t<Wide>))
Wide
load
(Ptr ptr,
as<Wide>
tgt)
const
noexcept
;
// 1
// Conditional overloads
auto
load
[
relative_conditional_expr
c](
/* any non-iterator version of the above overloads */
)
const
noexcept
;
// 2
// Semantic options
auto
load
[unsafe](
/* any non-iterator version of the above overloads */
)
const
noexcept
;
// 3
}
eve::relative_conditional_expr
Specifies that a type is a Conditional Expression using relative mask.
Definition
conditional.hpp:52
eve::load
constexpr auto load
Loads data from a pointer or a pair of iterators into a SIMD value.
Definition
load.hpp:71
eve::wide_value_type_t
as_wide_t< value_type_t< T >, iterator_cardinal_t< T > > wide_value_type_t
Definition
wide_value_type.hpp:33
eve::value_type_t
typename decltype(detail::value_type_impl< T >())::type value_type_t
A meta function for getting an associated value_type for a relaxed iterator/range.
Definition
value_type.hpp:96
eve
EVE Main Namespace.
Definition
abi.hpp:19
eve::as
Lightweight type-wrapper.
Definition
as.hpp:29
eve::fixed
SIMD register cardinal type.
Definition
cardinals.hpp:39
Parameters
ptr
: A data source referencing the data to load.
c
: A
relative conditional expression
that determines which elements to load.
Return value
A
SIMD value
containing the element referenced by the data source or the iterators.
Same as 1., but elements whose corresponding condition mask lane evaluates to
false
are left undefined.
Same as 1., but uses as scalar version of the operation if a sanitizer is enabled.
Note
and 3. may be sub-optimal for non-contiguous iterators.
Example
#include <eve/eve.hpp>
#include <iostream>
#include <vector>
#include <list>
int
main()
{
std::array<double, 16> doubles = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f};
std::cout <<
eve::load
(doubles.data() + 3) <<
"\n"
;
std::vector<float> vec = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f};
std::cout <<
eve::load
(vec.data(),
eve::as
<
eve::wide
<
float
,
eve::fixed<4>
>>{}) <<
"\n"
;
std::list<float> lst = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f};
std::cout <<
eve::load
(lst.begin(), eve::lane<8>) <<
"\n"
;
int
arr[8] = {2, 4, 6, 8, 10, 12, 14, 16};
std::cout <<
eve::load
[
eve::keep_between
(2, 5).
else_
(-99)](arr, eve::lane<8>) <<
"\n"
;
}
eve::keep_between::else_
constexpr auto else_(V const &v) const
Extends a conditional expression with an alternative value.
Definition
conditional.hpp:557
eve::keep_between
Conditional expression keeping all lanes between two position.
Definition
conditional.hpp:585
eve::wide
Wrapper for SIMD registers.
Definition
wide.hpp:94
eve