binius_field/arch/portable/
packed_aes_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	packed_macros::impl_broadcast,
9};
10use crate::{
11	AESTowerField8b,
12	arch::portable::packed_macros::{portable_macros::*, *},
13	arithmetic_traits::{
14		impl_invert_with, impl_mul_alpha_with, impl_mul_with, impl_square_with,
15		impl_transformation_with_strategy,
16	},
17};
18
19define_packed_binary_fields!(
20	underlier: u64,
21	packed_fields: [
22		packed_field {
23			name: PackedAESBinaryField8x8b,
24			scalar: AESTowerField8b,
25			alpha_idx: _,
26			mul:       (if gfni_x86 PackedAESBinaryField16x8b else PairwiseTableStrategy),
27			square:    (if gfni_x86 PackedAESBinaryField16x8b else PairwiseTableStrategy),
28			invert:    (if gfni_x86 PackedAESBinaryField16x8b else PairwiseTableStrategy),
29			mul_alpha: (PairwiseTableStrategy),
30			transform: (PackedStrategy),
31		},
32		packed_field {
33			name: PackedAESBinaryField4x16b,
34			scalar: AESTowerField16b,
35			alpha_idx: 4,
36			mul:       (if gfni_x86 PackedAESBinaryField8x16b else PairwiseRecursiveStrategy),
37			square:    (if gfni_x86 PackedAESBinaryField8x16b else PairwiseRecursiveStrategy),
38			invert:    (if gfni_x86 PackedAESBinaryField8x16b else PairwiseRecursiveStrategy),
39			mul_alpha: (PackedStrategy),
40			transform: (PackedStrategy),
41		},
42		packed_field {
43			name: PackedAESBinaryField2x32b,
44			scalar: AESTowerField32b,
45			alpha_idx: 5,
46			mul:       (if gfni_x86 PackedAESBinaryField4x32b else PairwiseRecursiveStrategy),
47			square:    (if gfni_x86 PackedAESBinaryField4x32b else PairwiseRecursiveStrategy),
48			invert:    (if gfni_x86 PackedAESBinaryField4x32b else PairwiseRecursiveStrategy),
49			mul_alpha: (PackedStrategy),
50			transform: (PackedStrategy),
51		},
52		packed_field {
53			name: PackedAESBinaryField1x64b,
54			scalar: AESTowerField64b,
55			alpha_idx: _,
56			mul:       (if gfni_x86 PackedAESBinaryField2x64b else PairwiseRecursiveStrategy),
57			square:    (if gfni_x86 PackedAESBinaryField2x64b else PairwiseRecursiveStrategy),
58			invert:    (if gfni_x86 PackedAESBinaryField2x64b else PairwiseRecursiveStrategy),
59			mul_alpha: (PairwiseRecursiveStrategy),
60			transform: (PairwiseStrategy),
61		},
62	]
63);
64
65impl_tower_constants!(AESTowerField8b, u64, 0x00d300d300d300d3);