Struct Lanes8Word32
#[repr(C, align(32))]pub struct Lanes8Word32(pub [u32; 8]);Expand description
Eight lanes of Word32 (one 256-bit SIMD register). Operations are lane-wise over the ℤ/2³² ring.
Tuple Fields§
§0: [u32; 8]Implementations§
§impl Lanes8Word32
impl Lanes8Word32
pub const fn splat(x: u32) -> Lanes8Word32
pub const fn splat(x: u32) -> Lanes8Word32
Broadcast one value into all eight lanes.
pub fn from_words(s: &[Word32]) -> Lanes8Word32
pub fn from_words(s: &[Word32]) -> Lanes8Word32
Pack the first eight Word32s of a slice into a lane vector (shorter slices zero-fill).
pub fn bitxor(self, o: Lanes8Word32) -> Lanes8Word32
pub fn bitxor(self, o: Lanes8Word32) -> Lanes8Word32
Lane-wise XOR (vpxor). #[inline(always)] + compile-time cfg(target_feature="avx2")
intrinsics so a hot Logos lane kernel (ChaCha/NTT) inlines register-resident under +avx2
(no per-op #[target_feature] call boundary — that pessimizes ~20× on Keccak-scale kernels).
pub fn bitand(self, o: Lanes8Word32) -> Lanes8Word32
pub fn bitand(self, o: Lanes8Word32) -> Lanes8Word32
Lane-wise AND (_mm256_and_si256) — the MD5 F/G-function bit mixing; LLVM lowers the loop to one
vpand. AND/OR/NOT have no cross-lane dependency, so the scalar form auto-vectorizes cleanly.
pub fn bitor(self, o: Lanes8Word32) -> Lanes8Word32
pub fn bitor(self, o: Lanes8Word32) -> Lanes8Word32
Lane-wise OR (_mm256_or_si256).
pub fn not(self) -> Lanes8Word32
pub fn not(self) -> Lanes8Word32
Lane-wise complement (vpxor with all-ones) — MD5’s ~b/~d terms.
pub fn add(self, o: Lanes8Word32) -> Lanes8Word32
pub fn add(self, o: Lanes8Word32) -> Lanes8Word32
Lane-wise wrapping add in ℤ/2³² (vpaddd) — cfg-inline so it fuses into hot Logos lane kernels.
pub fn rotl(self, n: u32) -> Lanes8Word32
pub fn rotl(self, n: u32) -> Lanes8Word32
Lane-wise left rotation by n (ChaCha diffusion) — (x<<n)|(x>>(32−n)) via vpslld/vpsrld.
cfg-inline; n is taken mod 32 (n = 0 → the 32−n = 32 shift zeroes → identity).
pub fn sub(self, o: Lanes8Word32) -> Lanes8Word32
pub fn sub(self, o: Lanes8Word32) -> Lanes8Word32
Lane-wise wrapping subtract in ℤ/2³² (vpsubd) — the i32 NTT butterfly’s difference. cfg-inline.
pub fn montmul32(
self,
b: Lanes8Word32,
q: Lanes8Word32,
qinv: Lanes8Word32,
) -> Lanes8Word32
pub fn montmul32( self, b: Lanes8Word32, q: Lanes8Word32, qinv: Lanes8Word32, ) -> Lanes8Word32
The signed i32 Montgomery multiply — per lane montgomery_reduce(aᵢ·bᵢ) = (aᵢbᵢ − t·q)≫32,
t = (aᵢbᵢ mod 2³²)·qinv, the ML-DSA (Dilithium) NTT butterfly’s multiply (q = 8380417,
q,qinv broadcast). AVX2: vpmuldq the even and the (≫32) odd 32-bit lanes to eight i64
products, reduce each (the result lands in the high 32 bits), recombine with vpblendd.
pub fn ntt_bcast_lo(self, h: usize) -> Lanes8Word32
pub fn ntt_bcast_lo(self, h: usize) -> Lanes8Word32
Broadcast each 2h-block’s low h lanes into both halves — the within-vector NTT source-low
duplication for 8 i32 lanes, stride h ∈ {4,2,1}. h=4→vperm2i128(0x00) (128-bit halves);
h=2→vpshufd(0x44); h=1→vpshufd(0xA0). (The byte op is the i16 stride-2h shuffle.)
pub fn ntt_bcast_hi(self, h: usize) -> Lanes8Word32
pub fn ntt_bcast_hi(self, h: usize) -> Lanes8Word32
Broadcast each 2h-block’s high h lanes into both halves. h=4→vperm2i128(0x11);
h=2→vpshufd(0xEE); h=1→vpshufd(0xF5).
pub fn ntt_blend(self, o: Lanes8Word32, h: usize) -> Lanes8Word32
pub fn ntt_blend(self, o: Lanes8Word32, h: usize) -> Lanes8Word32
Recombine the +/− halves: each 2h-block’s low h from self, high h from o.
h=4→vperm2i128(0x30); h=2→vpblendd(0xCC); h=1→vpblendd(0xAA).
Trait Implementations§
§impl Add for Lanes8Word32
impl Add for Lanes8Word32
§type Output = Lanes8Word32
type Output = Lanes8Word32
+ operator.§fn add(self, o: Lanes8Word32) -> Lanes8Word32
fn add(self, o: Lanes8Word32) -> Lanes8Word32
+ operation. Read more§impl BitAnd for Lanes8Word32
impl BitAnd for Lanes8Word32
§type Output = Lanes8Word32
type Output = Lanes8Word32
& operator.§fn bitand(self, o: Lanes8Word32) -> Lanes8Word32
fn bitand(self, o: Lanes8Word32) -> Lanes8Word32
& operation. Read more§impl BitOr for Lanes8Word32
impl BitOr for Lanes8Word32
§type Output = Lanes8Word32
type Output = Lanes8Word32
| operator.§fn bitor(self, o: Lanes8Word32) -> Lanes8Word32
fn bitor(self, o: Lanes8Word32) -> Lanes8Word32
| operation. Read more§impl BitXor for Lanes8Word32
impl BitXor for Lanes8Word32
§type Output = Lanes8Word32
type Output = Lanes8Word32
^ operator.§fn bitxor(self, o: Lanes8Word32) -> Lanes8Word32
fn bitxor(self, o: Lanes8Word32) -> Lanes8Word32
^ operation. Read more§impl Clone for Lanes8Word32
impl Clone for Lanes8Word32
§fn clone(&self) -> Lanes8Word32
fn clone(&self) -> Lanes8Word32
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for Lanes8Word32
impl Debug for Lanes8Word32
§impl Hash for Lanes8Word32
impl Hash for Lanes8Word32
§impl Not for Lanes8Word32
impl Not for Lanes8Word32
§type Output = Lanes8Word32
type Output = Lanes8Word32
! operator.§fn not(self) -> Lanes8Word32
fn not(self) -> Lanes8Word32
! operation. Read more§impl PartialEq for Lanes8Word32
impl PartialEq for Lanes8Word32
Source§impl Showable for Lanes8Word32
impl Showable for Lanes8Word32
fn format_show(&self, f: &mut Formatter<'_>) -> Result
§impl Sub for Lanes8Word32
impl Sub for Lanes8Word32
§type Output = Lanes8Word32
type Output = Lanes8Word32
- operator.§fn sub(self, o: Lanes8Word32) -> Lanes8Word32
fn sub(self, o: Lanes8Word32) -> Lanes8Word32
- operation. Read moreSource§impl WordRotate for Lanes8Word32
impl WordRotate for Lanes8Word32
impl Copy for Lanes8Word32
impl Eq for Lanes8Word32
impl StructuralPartialEq for Lanes8Word32
Auto Trait Implementations§
impl Freeze for Lanes8Word32
impl RefUnwindSafe for Lanes8Word32
impl Send for Lanes8Word32
impl Sync for Lanes8Word32
impl Unpin for Lanes8Word32
impl UnsafeUnpin for Lanes8Word32
impl UnwindSafe for Lanes8Word32
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.