Vital
Loading...
Searching...
No Matches
vital::poly_int Struct Reference

Represents a vector of integer values using SIMD instructions. More...

#include <poly_values.h>

Classes

union  scalar_simd_union
 Helper union for copying between a scalar array and a SIMD type. More...
 
union  simd_scalar_union
 Helper union for copying between a SIMD type and a scalar array. More...
 

Public Member Functions

force_inline poly_int () noexcept
 Default constructor. Initializes to zero.
 
force_inline poly_int (simd_type initial_value) noexcept
 Constructs from a raw SIMD register.
 
force_inline poly_int (uint32_t initial_value) noexcept
 Constructs the SIMD register by broadcasting a single integer value.
 
force_inline poly_int (uint32_t first, uint32_t second, uint32_t third, uint32_t fourth) noexcept
 Constructs the SIMD register with four specified integers.
 
force_inline poly_int (uint32_t first, uint32_t second) noexcept
 Constructs a 4-element SIMD register by repeating two values (for SSE2/NEON).
 
force_inline ~poly_int () noexcept
 Destructor.
 
force_inline uint32_t vector_call access (size_t index) const noexcept
 Accessor for an element in the SIMD register.
 
force_inline void vector_call set (size_t index, uint32_t new_value) noexcept
 Sets a specific element in the SIMD register.
 
force_inline uint32_t vector_call operator[] (size_t index) const noexcept
 Operator[] overload (read-only).
 
force_inline poly_int &vector_call operator+= (poly_int other) noexcept
 Compound assignment operators using poly_int.
 
force_inline poly_int &vector_call operator-= (poly_int other) noexcept
 
force_inline poly_int &vector_call operator*= (poly_int other) noexcept
 
force_inline poly_int &vector_call operator&= (poly_int other) noexcept
 
force_inline poly_int &vector_call operator|= (poly_int other) noexcept
 
force_inline poly_int &vector_call operator^= (poly_int other) noexcept
 
force_inline poly_int &vector_call operator+= (simd_type other) noexcept
 Compound assignment operators using simd_type.
 
force_inline poly_int &vector_call operator-= (simd_type other) noexcept
 
force_inline poly_int &vector_call operator*= (simd_type other) noexcept
 
force_inline poly_int &vector_call operator&= (simd_type other) noexcept
 
force_inline poly_int &vector_call operator|= (simd_type other) noexcept
 
force_inline poly_int &vector_call operator^= (simd_type other) noexcept
 
force_inline poly_int &vector_call operator+= (uint32_t scalar) noexcept
 Compound assignment operators using a scalar.
 
force_inline poly_int &vector_call operator-= (uint32_t scalar) noexcept
 
force_inline poly_int &vector_call operator*= (uint32_t scalar) noexcept
 
force_inline poly_int vector_call operator+ (poly_int other) const noexcept
 Arithmetic operators.
 
force_inline poly_int vector_call operator- (poly_int other) const noexcept
 
force_inline poly_int vector_call operator* (poly_int other) const noexcept
 
force_inline poly_int vector_call operator& (poly_int other) const noexcept
 Bitwise operators.
 
force_inline poly_int vector_call operator| (poly_int other) const noexcept
 
force_inline poly_int vector_call operator^ (poly_int other) const noexcept
 
force_inline poly_int vector_call operator- () const noexcept
 Unary operators.
 
force_inline poly_int vector_call operator~ () const noexcept
 
force_inline uint32_t vector_call sum () const noexcept
 Sums all elements in the SIMD register.
 
force_inline uint32_t vector_call anyMask () const noexcept
 Returns a bitmask for elements that are non-zero.
 

Static Public Member Functions

static force_inline simd_type vector_call init (uint32_t scalar)
 Initializes a SIMD register with the same integer repeated.
 
static force_inline simd_type vector_call load (const uint32_t *memory)
 Loads integer values from memory into a SIMD register.
 
static force_inline simd_type vector_call add (simd_type one, simd_type two)
 Adds two SIMD integer registers.
 
static force_inline simd_type vector_call sub (simd_type one, simd_type two)
 Subtracts one SIMD integer register from another.
 
static force_inline simd_type vector_call neg (simd_type value)
 Negates a SIMD integer register.
 
static force_inline simd_type vector_call mul (simd_type one, simd_type two)
 Multiplies two SIMD integer registers element-wise.
 
static force_inline simd_type vector_call bitAnd (simd_type value, simd_type mask)
 Bitwise AND of a SIMD integer register with another.
 
static force_inline simd_type vector_call bitOr (simd_type value, simd_type mask)
 Bitwise OR of a SIMD integer register with another.
 
static force_inline simd_type vector_call bitXor (simd_type value, simd_type mask)
 Bitwise XOR of a SIMD integer register with another.
 
static force_inline simd_type vector_call bitNot (simd_type value)
 Bitwise NOT of a SIMD integer register.
 
static force_inline simd_type vector_call max (simd_type one, simd_type two)
 Returns the element-wise maximum of two SIMD integer registers.
 
static force_inline simd_type vector_call min (simd_type one, simd_type two)
 Returns the element-wise minimum of two SIMD integer registers.
 
static force_inline simd_type vector_call equal (simd_type one, simd_type two)
 Compares two SIMD integer registers for equality, element-wise.
 
static force_inline simd_type vector_call greaterThan (simd_type one, simd_type two)
 Compares two SIMD integer registers, element-wise, for greater than.
 
static force_inline uint32_t vector_call sum (simd_type value)
 Computes the sum of all elements in a SIMD integer register.
 
static force_inline uint32_t vector_call anyMask (simd_type value)
 Returns a bitmask that indicates which bytes/elements in the register are non-zero.
 
static force_inline poly_int vector_call max (poly_int one, poly_int two)
 Convenience overloads returning poly_int instead of simd_type:
 
static force_inline poly_int vector_call min (poly_int one, poly_int two)
 
static force_inline poly_int vector_call equal (poly_int one, poly_int two)
 
static force_inline poly_int vector_call greaterThan (poly_int one, poly_int two)
 
static force_inline poly_int vector_call lessThan (poly_int one, poly_int two)
 
static force_inline uint32_t vector_call sum (poly_int value)
 

Public Attributes

simd_type value
 The underlying SIMD register.
 

Static Public Attributes

static constexpr uint32_t kFullMask = (unsigned int)-1
 All bits set.
 
static constexpr uint32_t kSignMask = 0x80000000
 Sign bit mask.
 
static constexpr uint32_t kNotSignMask = kFullMask ^ kSignMask
 Inverted sign bit mask.
 

Detailed Description

Represents a vector of integer values using SIMD instructions.

Depending on the available instruction set (AVX2, SSE2, NEON), the vector width differs. This struct provides basic arithmetic, bitwise, and comparison operations on these SIMD vectors.

Constructor & Destructor Documentation

◆ poly_int() [1/5]

force_inline vital::poly_int::poly_int ( )
inlinenoexcept

Default constructor. Initializes to zero.

◆ poly_int() [2/5]

force_inline vital::poly_int::poly_int ( simd_type initial_value)
inlinenoexcept

Constructs from a raw SIMD register.

Parameters
initial_valueThe SIMD register.

◆ poly_int() [3/5]

force_inline vital::poly_int::poly_int ( uint32_t initial_value)
inlinenoexcept

Constructs the SIMD register by broadcasting a single integer value.

Parameters
initial_valueThe integer value to broadcast.

◆ poly_int() [4/5]

force_inline vital::poly_int::poly_int ( uint32_t first,
uint32_t second,
uint32_t third,
uint32_t fourth )
inlinenoexcept

Constructs the SIMD register with four specified integers.

Parameters
firstThe first element.
secondThe second element.
thirdThe third element.
fourthThe fourth element.

◆ poly_int() [5/5]

force_inline vital::poly_int::poly_int ( uint32_t first,
uint32_t second )
inlinenoexcept

Constructs a 4-element SIMD register by repeating two values (for SSE2/NEON).

Parameters
firstThe first element.
secondThe second element.

◆ ~poly_int()

force_inline vital::poly_int::~poly_int ( )
inlinenoexcept

Destructor.

Member Function Documentation

◆ access()

force_inline uint32_t vector_call vital::poly_int::access ( size_t index) const
inlinenoexcept

Accessor for an element in the SIMD register.

Parameters
indexThe index (0-based) of the element.
Returns
The corresponding scalar value.

◆ add()

static force_inline simd_type vector_call vital::poly_int::add ( simd_type one,
simd_type two )
inlinestatic

Adds two SIMD integer registers.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Sum of the two operands.

◆ anyMask() [1/2]

force_inline uint32_t vector_call vital::poly_int::anyMask ( ) const
inlinenoexcept

Returns a bitmask for elements that are non-zero.

Returns
Platform-specific bitmask of non-zero elements.

◆ anyMask() [2/2]

static force_inline uint32_t vector_call vital::poly_int::anyMask ( simd_type value)
inlinestatic

Returns a bitmask that indicates which bytes/elements in the register are non-zero.

Parameters
valueThe SIMD register to test.
Returns
Platform-specific bitmask of set bits.

◆ bitAnd()

static force_inline simd_type vector_call vital::poly_int::bitAnd ( simd_type value,
simd_type mask )
inlinestatic

Bitwise AND of a SIMD integer register with another.

Parameters
valueThe operand to be masked.
maskThe mask to apply.
Returns
Bitwise AND of value and mask.

◆ bitNot()

static force_inline simd_type vector_call vital::poly_int::bitNot ( simd_type value)
inlinestatic

Bitwise NOT of a SIMD integer register.

Parameters
valueThe operand to be inverted.
Returns
Bitwise NOT of the value.

◆ bitOr()

static force_inline simd_type vector_call vital::poly_int::bitOr ( simd_type value,
simd_type mask )
inlinestatic

Bitwise OR of a SIMD integer register with another.

Parameters
valueThe operand to be combined.
maskThe mask to apply.
Returns
Bitwise OR of value and mask.

◆ bitXor()

static force_inline simd_type vector_call vital::poly_int::bitXor ( simd_type value,
simd_type mask )
inlinestatic

Bitwise XOR of a SIMD integer register with another.

Parameters
valueThe operand to be combined.
maskThe mask to apply.
Returns
Bitwise XOR of value and mask.

◆ equal() [1/2]

static force_inline poly_int vector_call vital::poly_int::equal ( poly_int one,
poly_int two )
inlinestatic

◆ equal() [2/2]

static force_inline simd_type vector_call vital::poly_int::equal ( simd_type one,
simd_type two )
inlinestatic

Compares two SIMD integer registers for equality, element-wise.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Register of all bits set if equal, zero if not.

◆ greaterThan() [1/2]

static force_inline poly_int vector_call vital::poly_int::greaterThan ( poly_int one,
poly_int two )
inlinestatic

◆ greaterThan() [2/2]

static force_inline simd_type vector_call vital::poly_int::greaterThan ( simd_type one,
simd_type two )
inlinestatic

Compares two SIMD integer registers, element-wise, for greater than.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Register of all bits set if one[i] > two[i], zero otherwise.

Note: For SSE2/AVX2, we handle sign by flipping the sign bit.

◆ init()

static force_inline simd_type vector_call vital::poly_int::init ( uint32_t scalar)
inlinestatic

Initializes a SIMD register with the same integer repeated.

Parameters
scalarInteger value to broadcast across the SIMD register.
Returns
Initialized SIMD register.

◆ lessThan()

static force_inline poly_int vector_call vital::poly_int::lessThan ( poly_int one,
poly_int two )
inlinestatic

◆ load()

static force_inline simd_type vector_call vital::poly_int::load ( const uint32_t * memory)
inlinestatic

Loads integer values from memory into a SIMD register.

Parameters
memoryPointer to memory location where integer data is stored.
Returns
Loaded SIMD register.

◆ max() [1/2]

static force_inline poly_int vector_call vital::poly_int::max ( poly_int one,
poly_int two )
inlinestatic

Convenience overloads returning poly_int instead of simd_type:

◆ max() [2/2]

static force_inline simd_type vector_call vital::poly_int::max ( simd_type one,
simd_type two )
inlinestatic

Returns the element-wise maximum of two SIMD integer registers.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Element-wise maximum.

◆ min() [1/2]

static force_inline poly_int vector_call vital::poly_int::min ( poly_int one,
poly_int two )
inlinestatic

◆ min() [2/2]

static force_inline simd_type vector_call vital::poly_int::min ( simd_type one,
simd_type two )
inlinestatic

Returns the element-wise minimum of two SIMD integer registers.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Element-wise minimum.

◆ mul()

static force_inline simd_type vector_call vital::poly_int::mul ( simd_type one,
simd_type two )
inlinestatic

Multiplies two SIMD integer registers element-wise.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Product of the two operands.

◆ neg()

static force_inline simd_type vector_call vital::poly_int::neg ( simd_type value)
inlinestatic

Negates a SIMD integer register.

Parameters
valueSIMD register to negate.
Returns
Negation of the input register.

◆ operator&()

force_inline poly_int vector_call vital::poly_int::operator& ( poly_int other) const
inlinenoexcept

Bitwise operators.

◆ operator&=() [1/2]

force_inline poly_int &vector_call vital::poly_int::operator&= ( poly_int other)
inlinenoexcept

◆ operator&=() [2/2]

force_inline poly_int &vector_call vital::poly_int::operator&= ( simd_type other)
inlinenoexcept

◆ operator*()

force_inline poly_int vector_call vital::poly_int::operator* ( poly_int other) const
inlinenoexcept

◆ operator*=() [1/3]

force_inline poly_int &vector_call vital::poly_int::operator*= ( poly_int other)
inlinenoexcept

◆ operator*=() [2/3]

force_inline poly_int &vector_call vital::poly_int::operator*= ( simd_type other)
inlinenoexcept

◆ operator*=() [3/3]

force_inline poly_int &vector_call vital::poly_int::operator*= ( uint32_t scalar)
inlinenoexcept

◆ operator+()

force_inline poly_int vector_call vital::poly_int::operator+ ( poly_int other) const
inlinenoexcept

Arithmetic operators.

◆ operator+=() [1/3]

force_inline poly_int &vector_call vital::poly_int::operator+= ( poly_int other)
inlinenoexcept

Compound assignment operators using poly_int.

◆ operator+=() [2/3]

force_inline poly_int &vector_call vital::poly_int::operator+= ( simd_type other)
inlinenoexcept

Compound assignment operators using simd_type.

◆ operator+=() [3/3]

force_inline poly_int &vector_call vital::poly_int::operator+= ( uint32_t scalar)
inlinenoexcept

Compound assignment operators using a scalar.

◆ operator-() [1/2]

force_inline poly_int vector_call vital::poly_int::operator- ( ) const
inlinenoexcept

Unary operators.

◆ operator-() [2/2]

force_inline poly_int vector_call vital::poly_int::operator- ( poly_int other) const
inlinenoexcept

◆ operator-=() [1/3]

force_inline poly_int &vector_call vital::poly_int::operator-= ( poly_int other)
inlinenoexcept

◆ operator-=() [2/3]

force_inline poly_int &vector_call vital::poly_int::operator-= ( simd_type other)
inlinenoexcept

◆ operator-=() [3/3]

force_inline poly_int &vector_call vital::poly_int::operator-= ( uint32_t scalar)
inlinenoexcept

◆ operator[]()

force_inline uint32_t vector_call vital::poly_int::operator[] ( size_t index) const
inlinenoexcept

Operator[] overload (read-only).

Parameters
indexThe index to access.
Returns
The scalar value at that index.

◆ operator^()

force_inline poly_int vector_call vital::poly_int::operator^ ( poly_int other) const
inlinenoexcept

◆ operator^=() [1/2]

force_inline poly_int &vector_call vital::poly_int::operator^= ( poly_int other)
inlinenoexcept

◆ operator^=() [2/2]

force_inline poly_int &vector_call vital::poly_int::operator^= ( simd_type other)
inlinenoexcept

◆ operator|()

force_inline poly_int vector_call vital::poly_int::operator| ( poly_int other) const
inlinenoexcept

◆ operator|=() [1/2]

force_inline poly_int &vector_call vital::poly_int::operator|= ( poly_int other)
inlinenoexcept

◆ operator|=() [2/2]

force_inline poly_int &vector_call vital::poly_int::operator|= ( simd_type other)
inlinenoexcept

◆ operator~()

force_inline poly_int vector_call vital::poly_int::operator~ ( ) const
inlinenoexcept

◆ set()

force_inline void vector_call vital::poly_int::set ( size_t index,
uint32_t new_value )
inlinenoexcept

Sets a specific element in the SIMD register.

Parameters
indexThe index (0-based) of the element.
new_valueThe new value to place at that index.

◆ sub()

static force_inline simd_type vector_call vital::poly_int::sub ( simd_type one,
simd_type two )
inlinestatic

Subtracts one SIMD integer register from another.

Parameters
oneFirst operand.
twoSecond operand.
Returns
Result of one - two.

◆ sum() [1/3]

force_inline uint32_t vector_call vital::poly_int::sum ( ) const
inlinenoexcept

Sums all elements in the SIMD register.

Returns
Sum of the vector elements.

◆ sum() [2/3]

static force_inline uint32_t vector_call vital::poly_int::sum ( poly_int value)
inlinestatic

◆ sum() [3/3]

static force_inline uint32_t vector_call vital::poly_int::sum ( simd_type value)
inlinestatic

Computes the sum of all elements in a SIMD integer register.

Parameters
valueThe SIMD register.
Returns
The sum of all elements.

Member Data Documentation

◆ kFullMask

uint32_t vital::poly_int::kFullMask = (unsigned int)-1
staticconstexpr

All bits set.

◆ kNotSignMask

uint32_t vital::poly_int::kNotSignMask = kFullMask ^ kSignMask
staticconstexpr

Inverted sign bit mask.

◆ kSignMask

uint32_t vital::poly_int::kSignMask = 0x80000000
staticconstexpr

Sign bit mask.

◆ value

simd_type vital::poly_int::value

The underlying SIMD register.


The documentation for this struct was generated from the following file: