binius_field/arch/x86_64/
packed_128.rs1use 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);