@@ -48,25 +48,24 @@ fn write_130_wide(f: &mut fmt::Formatter<'_>, limbs: [u64; 5]) -> fmt::Result {
48
48
}
49
49
50
50
/// Derives the Poly1305 addition and polynomial keys.
51
- pub ( super ) fn prepare_keys ( key : & Key ) -> ( AdditionKey , PrecomputedMultiplier ) {
52
- unsafe {
53
- // [k7, k6, k5, k4, k3, k2, k1, k0]
54
- let key = _mm256_loadu_si256 ( key. as_ptr ( ) as * const _ ) ;
55
-
56
- // Prepare addition key: [0, k7, 0, k6, 0, k5, 0, k4]
57
- let k = AdditionKey ( _mm256_and_si256 (
58
- _mm256_permutevar8x32_epi32 ( key, _mm256_set_epi32 ( 3 , 7 , 2 , 6 , 1 , 5 , 0 , 4 ) ) ,
59
- _mm256_set_epi32 ( 0 , -1 , 0 , -1 , 0 , -1 , 0 , -1 ) ,
60
- ) ) ;
61
-
62
- // Prepare polynomial key R = k & 0xffffffc0ffffffc0ffffffc0fffffff:
63
- let r = Aligned130 :: new ( _mm256_and_si256 (
64
- key,
65
- _mm256_set_epi32 ( 0 , 0 , 0 , 0 , 0x0ffffffc , 0x0ffffffc , 0x0ffffffc , 0x0fffffff ) ,
66
- ) ) ;
67
-
68
- ( k, r. into ( ) )
69
- }
51
+ #[ target_feature( enable = "avx2" ) ]
52
+ pub ( super ) unsafe fn prepare_keys ( key : & Key ) -> ( AdditionKey , PrecomputedMultiplier ) {
53
+ // [k7, k6, k5, k4, k3, k2, k1, k0]
54
+ let key = _mm256_loadu_si256 ( key. as_ptr ( ) as * const _ ) ;
55
+
56
+ // Prepare addition key: [0, k7, 0, k6, 0, k5, 0, k4]
57
+ let k = AdditionKey ( _mm256_and_si256 (
58
+ _mm256_permutevar8x32_epi32 ( key, _mm256_set_epi32 ( 3 , 7 , 2 , 6 , 1 , 5 , 0 , 4 ) ) ,
59
+ _mm256_set_epi32 ( 0 , -1 , 0 , -1 , 0 , -1 , 0 , -1 ) ,
60
+ ) ) ;
61
+
62
+ // Prepare polynomial key R = k & 0xffffffc0ffffffc0ffffffc0fffffff:
63
+ let r = Aligned130 :: new ( _mm256_and_si256 (
64
+ key,
65
+ _mm256_set_epi32 ( 0 , 0 , 0 , 0 , 0x0ffffffc , 0x0ffffffc , 0x0ffffffc , 0x0fffffff ) ,
66
+ ) ) ;
67
+
68
+ ( k, r. into ( ) )
70
69
}
71
70
72
71
/// A 130-bit integer aligned across five 26-bit limbs.
0 commit comments