binius_field/arch/portable/
packed_4.rs1use 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
53impl_ops_for_zero_height!(PackedBinaryField4x1b);
55
56impl 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
67impl Alpha for PackedBinaryField1x4b {
69 #[inline]
70 fn alpha() -> Self {
71 Self::from_underlier(U4::new_unchecked(0x04))
72 }
73}