E.V.E
v2023.02.15
 
Loading...
Searching...
No Matches
eve::top_bits< Logical > Struct Template Reference

The cheapest to get bitset for simd logical. More...

Detailed Description

template<logical_simd_value Logical>
struct eve::top_bits< Logical >

One value in top bits can be represented by multiple bits (bits_per_element member constant).

NOTE: this is a generalization of movemask instructions from x86

Typical usage: created with CTAD: top_bits{logical}.

Template Parameters
Logicalsimd value.

Public Types

using logical_type = Logical
 The associated wide logical.
 
using scalar_type = typename as_arithmetic_t<logical_type>::value_type
 For top_bits<logical<wide<T, N>>> this is T;.
 
using abi_type = typename as_arithmetic_t<logical_type>::abi_type
 ABI of the underlying simd value.
 
using half_logical = logical<wide<scalar_type, eve::fixed<half_size>>>
 logical of half size (or 1 if size is 1)
 
using storage_type = decltype(top_bits::storage_type_impl())
 type of the underlying storage
 

Public Member Functions

constexpr void set (std::ptrdiff_t i, bool x)
 setter
 

Static Public Attributes

static constexpr std::ptrdiff_t static_size = logical_type::size()
 logical_type::size();
 
static constexpr bool is_aggregated
 is stored as an array of 2 halves
 
static constexpr std::ptrdiff_t bits_per_element = bits_per_element_impl()
 how many bits do we store per element
 
static constexpr std::ptrdiff_t static_bits_size = static_size * bits_per_element
 how many bits are used
 
static constexpr bool is_cheap = is_cheap_impl()
 is it considered a cheap operation (~1 instruction) to get top_bits from a logical.