binius_field/arch/portable/
packed_32.rs

1// Copyright 2024-2025 Irreducible Inc.
2
3use cfg_if::cfg_if;
4
5use super::{
6	packed::PackedPrimitiveType,
7	packed_arithmetic::{alphas, impl_tower_constants},
8};
9use crate::{
10	arch::portable::packed_macros::{portable_macros::*, *},
11	arithmetic_traits::{
12		impl_invert_with, impl_mul_alpha_with, impl_mul_with, impl_square_with,
13		impl_transformation_with_strategy,
14	},
15};
16
17define_packed_binary_fields!(
18	underlier: u32,
19	packed_fields: [
20		packed_field {
21			name: PackedBinaryField32x1b,
22			scalar: BinaryField1b,
23			alpha_idx: 0,
24			mul:       (None),
25			square:    (None),
26			invert:    (None),
27			mul_alpha: (None),
28			transform: (PackedStrategy),
29		},
30		packed_field {
31			name: PackedBinaryField16x2b,
32			scalar: BinaryField2b,
33			alpha_idx: 1,
34			mul:       (PackedStrategy),
35			square:    (PackedStrategy),
36			invert:    (PairwiseRecursiveStrategy),
37			mul_alpha: (PackedStrategy),
38			transform: (PackedStrategy),
39		},
40		packed_field {
41			name: PackedBinaryField8x4b,
42			scalar: BinaryField4b,
43			alpha_idx: 2,
44			mul:       (PackedStrategy),
45			square:    (PackedStrategy),
46			invert:    (PairwiseRecursiveStrategy),
47			mul_alpha: (PackedStrategy),
48			transform: (PackedStrategy),
49		},
50		packed_field {
51			name: PackedBinaryField4x8b,
52			scalar: BinaryField8b,
53			alpha_idx: 3,
54			mul:       (if gfni_x86 PackedBinaryField16x8b else PairwiseTableStrategy),
55			square:    (if gfni_x86 PackedBinaryField16x8b else PackedStrategy),
56			invert:    (if gfni_x86 PackedBinaryField16x8b else PairwiseStrategy),
57			mul_alpha: (PackedStrategy),
58			transform: (PackedStrategy),
59		},
60		packed_field {
61			name: PackedBinaryField2x16b,
62			scalar: BinaryField16b,
63			alpha_idx: 4,
64			mul:       (if gfni_x86 PackedBinaryField8x16b else HybridRecursiveStrategy),
65			square:    (if gfni_x86 PackedBinaryField8x16b else PackedStrategy),
66			invert:    (if gfni_x86 PackedBinaryField8x16b else PackedStrategy),
67			mul_alpha: (PackedStrategy),
68			transform: (PackedStrategy),
69		},
70		packed_field {
71			name: PackedBinaryField1x32b,
72			scalar: BinaryField32b,
73			alpha_idx: _,
74			mul:       (if gfni_x86 PackedBinaryField4x32b else HybridRecursiveStrategy),
75			square:    (if gfni_x86 PackedBinaryField4x32b else PairwiseRecursiveStrategy),
76			invert:    (if gfni_x86 PackedBinaryField4x32b else PackedStrategy),
77			mul_alpha: (PairwiseRecursiveStrategy),
78			transform: (PairwiseStrategy),
79		},
80	]
81);