binius_field/arch/portable/
packed_4.rs

1// Copyright 2024-2025 Irreducible Inc.
2
3use super::{
4	packed::PackedPrimitiveType, packed_arithmetic::TowerConstants,
5	reuse_multiply_arithmetic::Alpha,
6};
7use crate::{
8	BinaryField1b, BinaryField2b, BinaryField4b,
9	arch::portable::packed_macros::{portable_macros::*, *},
10	arithmetic_traits::{
11		impl_invert_with, impl_mul_alpha_with, impl_mul_with, impl_square_with,
12		impl_transformation_with_strategy,
13	},
14	underlier::{U4, UnderlierType},
15};
16
17define_packed_binary_fields!(
18	underlier: U4,
19	packed_fields: [
20		packed_field {
21			name: PackedBinaryField4x1b,
22			scalar: BinaryField1b,
23			alpha_idx: _,
24			mul: (None),
25			square: (None),
26			invert: (None),
27			mul_alpha: (None),
28			transform: (PackedStrategy),
29		},
30		packed_field {
31			name: PackedBinaryField2x2b,
32			scalar: BinaryField2b,
33			alpha_idx: _,
34			mul: (PackedStrategy),
35			square: (PackedStrategy),
36			invert: (PairwiseRecursiveStrategy),
37			mul_alpha: (PackedStrategy),
38			transform: (PackedStrategy),
39		},
40		packed_field {
41			name: PackedBinaryField1x4b,
42			scalar: BinaryField4b,
43			alpha_idx: _,
44			mul: (PackedStrategy),
45			square: (ReuseMultiplyStrategy),
46			invert: (PairwiseRecursiveStrategy),
47			mul_alpha: (ReuseMultiplyStrategy),
48			transform: (PairwiseStrategy),
49		}
50	]
51);
52
53// Define operations for height 0
54impl_ops_for_zero_height!(PackedBinaryField4x1b);
55
56// Define constants
57impl TowerConstants<U4> for BinaryField1b {
58	const ALPHAS_ODD: U4 = U4::new(<Self as TowerConstants<u8>>::ALPHAS_ODD);
59}
60impl TowerConstants<U4> for BinaryField2b {
61	const ALPHAS_ODD: U4 = U4::new(<Self as TowerConstants<u8>>::ALPHAS_ODD);
62}
63impl TowerConstants<U4> for BinaryField4b {
64	const ALPHAS_ODD: U4 = U4::new(<Self as TowerConstants<u8>>::ALPHAS_ODD);
65}
66
67// Define multiply by alpha
68impl Alpha for PackedBinaryField1x4b {
69	#[inline]
70	fn alpha() -> Self {
71		Self::from_underlier(U4::new_unchecked(0x04))
72	}
73}