binius_field/arch/portable/
packed_64.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: u64,
19	packed_fields: [
20		packed_field {
21			name: PackedBinaryField64x1b,
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: PackedBinaryField32x2b,
32			scalar: BinaryField2b,
33			alpha_idx: 1,
34			mul:       (PackedStrategy),
35			square:    (PackedStrategy),
36			invert:    (PackedStrategy),
37			mul_alpha: (PackedStrategy),
38			transform: (PackedStrategy),
39		},
40		packed_field {
41			name: PackedBinaryField16x4b,
42			scalar: BinaryField4b,
43			alpha_idx: 2,
44			mul:       (PackedStrategy),
45			square:    (PackedStrategy),
46			invert:    (PackedStrategy),
47			mul_alpha: (PackedStrategy),
48			transform: (PackedStrategy),
49		},
50		packed_field {
51			name: PackedBinaryField8x8b,
52			scalar: BinaryField8b,
53			alpha_idx: 3,
54			mul:       (if gfni_x86 PackedBinaryField16x8b else PairwiseTableStrategy),
55			square:    (if gfni_x86 PackedBinaryField16x8b else PairwiseTableStrategy),
56			invert:    (if gfni_x86 PackedBinaryField16x8b else PairwiseTableStrategy),
57			mul_alpha: (PackedStrategy),
58			transform: (PackedStrategy),
59		},
60		packed_field {
61			name: PackedBinaryField4x16b,
62			scalar: BinaryField16b,
63			alpha_idx: 4,
64			mul:       (if gfni_x86 PackedBinaryField8x16b else PairwiseRecursiveStrategy),
65			square:    (if gfni_x86 PackedBinaryField8x16b else PairwiseStrategy),
66			invert:    (if gfni_x86 PackedBinaryField8x16b else PairwiseStrategy),
67			mul_alpha: (PackedStrategy),
68			transform: (PackedStrategy),
69		},
70		packed_field {
71			name: PackedBinaryField2x32b,
72			scalar: BinaryField32b,
73			alpha_idx: 5,
74			mul:       (if gfni_x86 PackedBinaryField4x32b else PairwiseRecursiveStrategy),
75			square:    (if gfni_x86 PackedBinaryField4x32b else PairwiseRecursiveStrategy),
76			invert:    (if gfni_x86 PackedBinaryField4x32b else PairwiseStrategy),
77			mul_alpha: (PackedStrategy),
78			transform: (PackedStrategy),
79		},
80		packed_field {
81			name: PackedBinaryField1x64b,
82			scalar: BinaryField64b,
83			alpha_idx: _,
84			mul:       (if gfni_x86 PackedBinaryField2x64b else PairwiseRecursiveStrategy),
85			square:    (if gfni_x86 PackedBinaryField2x64b else HybridRecursiveStrategy),
86			invert:    (if gfni_x86 PackedBinaryField2x64b else PairwiseRecursiveStrategy),
87			mul_alpha: (PairwiseRecursiveStrategy),
88			transform: (PairwiseStrategy),
89		},
90	]
91);