binius_field/arch/x86_64/
packed_aes_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::{packed::PackedPrimitiveType, packed_macros::*},
8	arithmetic_traits::{
9		impl_invert_with, impl_mul_alpha_with, impl_mul_with, impl_square_with,
10		impl_transformation_with_strategy,
11	},
12};
13
14define_packed_binary_fields!(
15	underlier: M128,
16	packed_fields: [
17		packed_field {
18			name: PackedAESBinaryField16x8b,
19			scalar: AESTowerField8b,
20			alpha_idx: _,
21			mul:       (if gfni GfniStrategy else PairwiseTableStrategy),
22			square:    (if gfni ReuseMultiplyStrategy else PairwiseTableStrategy),
23			invert:    (if gfni GfniStrategy else PairwiseTableStrategy),
24			mul_alpha: (if gfni ReuseMultiplyStrategy else PairwiseTableStrategy),
25			transform: (if gfni GfniStrategy else SimdStrategy),
26		},
27		packed_field {
28			name: PackedAESBinaryField8x16b,
29			scalar: AESTowerField16b,
30			alpha_idx: _,
31			mul: (SimdStrategy),
32			square: (SimdStrategy),
33			invert: (SimdStrategy),
34			mul_alpha: (SimdStrategy),
35			transform: (if gfni 2 else SimdStrategy),
36		},
37		packed_field {
38			name: PackedAESBinaryField4x32b,
39			scalar: AESTowerField32b,
40			alpha_idx: _,
41			mul: (SimdStrategy),
42			square: (SimdStrategy),
43			invert: (SimdStrategy),
44			mul_alpha: (SimdStrategy),
45			transform: (if gfni 4 else SimdStrategy),
46		},
47		packed_field {
48			name: PackedAESBinaryField2x64b,
49			scalar: AESTowerField64b,
50			alpha_idx: _,
51			mul: (SimdStrategy),
52			square: (SimdStrategy),
53			invert: (SimdStrategy),
54			mul_alpha: (SimdStrategy),
55			transform: (if gfni 8 else SimdStrategy),
56		},
57		packed_field {
58			name: PackedAESBinaryField1x128b,
59			scalar: AESTowerField128b,
60			alpha_idx: _,
61			mul: (SimdStrategy),
62			square: (SimdStrategy),
63			invert: (SimdStrategy),
64			mul_alpha: (SimdStrategy),
65			transform: (if gfni 16 else SimdStrategy),
66		},
67	]
68);