Skip to main content

Lanes4Word64

Struct Lanes4Word64 

Source
#[repr(C, align(32))]
pub struct Lanes4Word64(pub [u64; 4]);
Expand description

Four lanes of Word64 (one 256-bit SIMD register) — the Poly1305 accumulator lane vector. Carries [u64; 4]; ops have an AVX2 fast path proven byte-identical to the scalar lanes.

Tuple Fields§

§0: [u64; 4]

Implementations§

Source§

impl Lanes4Word64

Source

pub const LANES: usize = 4

The number of lanes.

Source

pub fn from_words(s: &[Word64]) -> Self

Pack the first four Word64s of a slice into a lane vector (shorter slices zero-fill).

Source

pub fn to_words(self) -> [Word64; 4]

The lanes as four Word64s.

Source

pub fn lane(self, i: usize) -> Word64

Lane i (0-based) as a Word64.

Source

pub fn hsum(self) -> u64

The horizontal sum of the four lanes (wrapping in ℤ/2⁶⁴) — combines the per-lane partial products in a 4-way Poly1305 multiply. Reads the scalar array; no SIMD needed.

Source

pub fn add(self, o: Self) -> Self

Lane-wise wrapping add in ℤ/2⁶⁴ (vpaddq). #[inline(always)] + compile-time cfg(target_feature="avx2") (no runtime is_x86_feature_detected branch, no #[target_feature] call boundary) so the 4-way Poly1305 accumulator stays register-resident under +avx2.

Source

pub fn mul_lo32_wide(self, o: Self) -> Self

Lane-wise widening multiply of the low 32 bits: (aₗₒ·bₗₒ) per lane → a 64-bit product (vpmuludq). #[inline(always)] + compile-time cfg(target_feature="avx2") so the Poly1305 4-way limb multiply inlines register-resident under +avx2.

Source

pub fn splat(x: u64) -> Self

Broadcast one u64 into all four lanes (Keccak’s ι round-constant XOR is a splat).

Source

pub fn bitxor(self, o: Self) -> Self

Lane-wise XOR (vpxor) — θ column parity, χ, and ι.

Source

pub fn and(self, o: Self) -> Self

Lane-wise AND (vpand).

Source

pub fn andnot(self, o: Self) -> Self

Lane-wise AND-NOT (¬self) & o (vpandn) — Keccak’s χ nonlinearity ¬bᵢ₊₁ ∧ bᵢ₊₂ in one op.

Source

pub fn rotl(self, n: u32) -> Self

Lane-wise left rotation by n (mod 64) — Keccak’s ρ offsets and θ’s D term. (x<<n)|(x>>(64−n)) via vpsllq/vpsrlq (n = 0 is the identity — the 64−n = 64 shift zeroes).

Trait Implementations§

Source§

impl Add for Lanes4Word64

Source§

type Output = Lanes4Word64

The resulting type after applying the + operator.
Source§

fn add(self, o: Self) -> Self

Performs the + operation. Read more
Source§

impl BitAnd for Lanes4Word64

Source§

type Output = Lanes4Word64

The resulting type after applying the & operator.
Source§

fn bitand(self, o: Self) -> Self

Performs the & operation. Read more
Source§

impl BitXor for Lanes4Word64

Source§

type Output = Lanes4Word64

The resulting type after applying the ^ operator.
Source§

fn bitxor(self, o: Self) -> Self

Performs the ^ operation. Read more
Source§

impl Clone for Lanes4Word64

Source§

fn clone(&self) -> Lanes4Word64

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Lanes4Word64

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for Lanes4Word64

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Lanes4Word64

Source§

fn eq(&self, other: &Lanes4Word64) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Lanes4Word64

Source§

impl Eq for Lanes4Word64

Source§

impl StructuralPartialEq for Lanes4Word64

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.