binius_field/arch/x86_64/
packed_128.rs

1// Copyright 2024-2025 Irreducible Inc.
2
3use cfg_if::cfg_if;
4
5use super::{m128::M128, packed_macros::*};
6use crate::{
7	arch::portable::{
8		packed::PackedPrimitiveType,
9		packed_arithmetic::{alphas, impl_tower_constants},
10		packed_macros::*,
11	},
12	arithmetic_traits::{
13		impl_invert_with, impl_mul_alpha_with, impl_mul_with, impl_square_with,
14		impl_transformation_with_strategy,
15	},
16};
17
18define_packed_binary_fields!(
19	underlier: M128,
20	packed_fields: [
21		packed_field {
22			name: PackedBinaryField128x1b,
23			scalar: BinaryField1b,
24			alpha_idx: 0,
25			mul:       (None),
26			square:    (None),
27			invert:    (None),
28			mul_alpha: (None),
29			transform: (SimdStrategy),
30		},
31		packed_field {
32			name: PackedBinaryField64x2b,
33			scalar: BinaryField2b,
34			alpha_idx: 1,
35			mul:       (PackedStrategy),
36			square:    (PackedStrategy),
37			invert:    (PackedStrategy),
38			mul_alpha: (PackedStrategy),
39			transform: (SimdStrategy),
40		},
41		packed_field {
42			name: PackedBinaryField32x4b,
43			scalar: BinaryField4b,
44			alpha_idx: 2,
45			mul:       (PackedStrategy),
46			square:    (PackedStrategy),
47			invert:    (PackedStrategy),
48			mul_alpha: (PackedStrategy),
49			transform: (SimdStrategy),
50		},
51		packed_field {
52			name: PackedBinaryField16x8b,
53			scalar: BinaryField8b,
54			alpha_idx: 3,
55			mul:       (if gfni AESIsomorphicStrategy else PairwiseTableStrategy),
56			square:    (if gfni AESIsomorphicStrategy else PairwiseTableStrategy),
57			invert:    (if gfni GfniStrategy else PairwiseTableStrategy),
58			mul_alpha: (if gfni ReuseMultiplyStrategy else PairwiseTableStrategy),
59			transform: (if gfni GfniStrategy else SimdStrategy),
60		},
61		packed_field {
62			name: PackedBinaryField8x16b,
63			scalar: BinaryField16b,
64			alpha_idx: 4,
65			mul:       (if gfni AESIsomorphicStrategy else SimdStrategy),
66			square:    (if gfni AESIsomorphicStrategy else SimdStrategy),
67			invert:    (if gfni AESIsomorphicStrategy else SimdStrategy),
68			mul_alpha: (SimdStrategy),
69			transform: (if gfni 2 else SimdStrategy),
70		},
71		packed_field {
72			name: PackedBinaryField4x32b,
73			scalar: BinaryField32b,
74			alpha_idx: 5,
75			mul:       (if gfni AESIsomorphicStrategy else SimdStrategy),
76			square:    (if gfni AESIsomorphicStrategy else SimdStrategy),
77			invert:    (if gfni AESIsomorphicStrategy else SimdStrategy),
78			mul_alpha: (SimdStrategy),
79			transform: (if gfni 4 else SimdStrategy),
80		},
81		packed_field {
82			name: PackedBinaryField2x64b,
83			scalar: BinaryField64b,
84			alpha_idx: 6,
85			mul:       (if gfni AESIsomorphicStrategy else SimdStrategy),
86			square:    (if gfni AESIsomorphicStrategy else SimdStrategy),
87			invert:    (if gfni AESIsomorphicStrategy else SimdStrategy),
88			mul_alpha: (SimdStrategy),
89			transform: (if gfni 8 else SimdStrategy),
90		},
91		packed_field {
92			name: PackedBinaryField1x128b,
93			scalar: BinaryField128b,
94			alpha_idx: _,
95			mul:       (if gfni AESIsomorphicStrategy else SimdStrategy),
96			square:    (if gfni AESIsomorphicStrategy else SimdStrategy),
97			invert:    (if gfni AESIsomorphicStrategy else SimdStrategy),
98			mul_alpha: (SimdStrategy),
99			transform: (if gfni 16 else SimdStrategy),
100		},
101	]
102);