3#ifndef DUNE_COMMON_SIMD_INTERFACE_HH
4#define DUNE_COMMON_SIMD_INTERFACE_HH
251 template<
class S,
class V>
324 decltype(
auto)
lane(std::size_t l, V &&v)
326 assert(l < lanes<V>());
344 template<
class V,
class U>
347 static_assert(std::is_same<Scalar<V>,
Scalar<U> >::value,
348 "Scalar types must match exactly in implCast");
349 static_assert(lanes<V>() == lanes<U>(),
350 "Number of lanes must match in implCast");
365 template<
class V,
class S>
385 template<
class M,
class V>
386 V
cond(M &&
mask,
const V &ifTrue,
const V &ifFalse)
389 implCast<Mask<V> >(std::forward<M>(
mask)), ifTrue, ifFalse);
399 V
cond(
bool mask,
const V &ifTrue,
const V &ifFalse)
401 return mask ? ifTrue : ifFalse;
409 auto max(
const V &v1,
const V &v2)
419 auto min(
const V &v1,
const V &v2)
498 template<
class V1,
class V2>
508 template<
class V1,
class V2>
Basic definitions for SIMD Implementations.
bool anyTrue(const Mask &mask)
Whether any entry is true
Definition simd/interface.hh:429
auto maskOr(const V1 &v1, const V2 &v2)
Logic or of masks.
Definition simd/interface.hh:499
V cond(M &&mask, const V &ifTrue, const V &ifFalse)
Like the ?: operator.
Definition simd/interface.hh:386
auto mask(const V &v)
Convert to mask, analogue of bool(s) for scalars.
Definition simd/interface.hh:489
bool allTrue(const Mask &mask)
Whether all entries are true
Definition simd/interface.hh:439
typename Overloads::RebindType< std::decay_t< S >, std::decay_t< V > >::type Rebind
Construct SIMD type with different scalar type.
Definition simd/interface.hh:253
constexpr V broadcast(S s)
Broadcast a scalar to a vector explicitly.
Definition simd/interface.hh:366
auto max(const V &v1, const V &v2)
The binary maximum value over two simd objects.
Definition simd/interface.hh:409
bool anyFalse(const Mask &mask)
Whether any entry is false
Definition simd/interface.hh:449
constexpr V implCast(U &&u)
Cast an expression from one implementation to another.
Definition simd/interface.hh:345
constexpr std::size_t lanes()
Number of lanes in a SIMD type.
Definition simd/interface.hh:305
decltype(auto) lane(std::size_t l, V &&v)
Extract an element of a SIMD type.
Definition simd/interface.hh:324
Rebind< bool, V > Mask
Mask type type of some SIMD type.
Definition simd/interface.hh:289
bool allFalse(const Mask &mask)
Whether all entries are false
Definition simd/interface.hh:459
auto maskAnd(const V1 &v1, const V2 &v2)
Logic and of masks.
Definition simd/interface.hh:509
typename Overloads::ScalarType< std::decay_t< V > >::type Scalar
Element type of some SIMD type.
Definition simd/interface.hh:235
auto min(const V &v1, const V &v2)
The binary minimum value over two simd objects.
Definition simd/interface.hh:419
Dune namespace.
Definition alignedallocator.hh:13
Tag used to force late-binding lookup in Dune::Simd::Overloads.
Definition base.hh:182
should have a member type type
Definition standard.hh:60
should have a member type type
Definition standard.hh:67
should be derived from a Dune::index_constant
Definition standard.hh:74
A type that refers to another type.
Definition typelist.hh:33