Skip to content

Commit 2b6e568

Browse files
lqdAmanieu
authored andcommitted
convert _mm256_extracti128_si256 to const generics
1 parent be08cd6 commit 2b6e568

File tree

3 files changed

+18
-16
lines changed

3 files changed

+18
-16
lines changed

crates/core_arch/src/x86/avx2.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -989,24 +989,22 @@ pub unsafe fn _mm256_cvtepu8_epi64(a: __m128i) -> __m256i {
989989
transmute::<i64x4, _>(simd_cast(v32))
990990
}
991991

992-
/// Extracts 128 bits (of integer data) from `a` selected with `imm8`.
992+
/// Extracts 128 bits (of integer data) from `a` selected with `IMM1`.
993993
///
994994
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_extracti128_si256)
995995
#[inline]
996996
#[target_feature(enable = "avx2")]
997997
#[cfg_attr(
998998
all(test, not(target_os = "windows")),
999-
assert_instr(vextractf128, imm8 = 1)
999+
assert_instr(vextractf128, IMM1 = 1)
10001000
)]
1001-
#[rustc_args_required_const(1)]
1001+
#[rustc_legacy_const_generics(1)]
10021002
#[stable(feature = "simd_x86", since = "1.27.0")]
1003-
pub unsafe fn _mm256_extracti128_si256(a: __m256i, imm8: i32) -> __m128i {
1003+
pub unsafe fn _mm256_extracti128_si256<const IMM1: i32>(a: __m256i) -> __m128i {
1004+
static_assert_imm1!(IMM1);
10041005
let a = a.as_i64x4();
10051006
let b = _mm256_undefined_si256().as_i64x4();
1006-
let dst: i64x2 = match imm8 & 0b01 {
1007-
0 => simd_shuffle2(a, b, [0, 1]),
1008-
_ => simd_shuffle2(a, b, [2, 3]),
1009-
};
1007+
let dst: i64x2 = simd_shuffle2(a, b, [[0, 1], [2, 3]][IMM1 as usize]);
10101008
transmute(dst)
10111009
}
10121010

@@ -4412,7 +4410,7 @@ mod tests {
44124410
#[simd_test(enable = "avx2")]
44134411
unsafe fn test_mm256_extracti128_si256() {
44144412
let a = _mm256_setr_epi64x(1, 2, 3, 4);
4415-
let r = _mm256_extracti128_si256(a, 0b01);
4413+
let r = _mm256_extracti128_si256::<1>(a);
44164414
let e = _mm_setr_epi64x(3, 4);
44174415
assert_eq_m128i(r, e);
44184416
}

crates/core_arch/src/x86/avx512vaes.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -155,18 +155,18 @@ mod tests {
155155
0x978093862CDE7187,
156156
);
157157
let mut a_decomp = [_mm_setzero_si128(); 2];
158-
a_decomp[0] = _mm256_extracti128_si256(a, 0);
159-
a_decomp[1] = _mm256_extracti128_si256(a, 1);
158+
a_decomp[0] = _mm256_extracti128_si256::<0>(a);
159+
a_decomp[1] = _mm256_extracti128_si256::<1>(a);
160160
let mut k_decomp = [_mm_setzero_si128(); 2];
161-
k_decomp[0] = _mm256_extracti128_si256(k, 0);
162-
k_decomp[1] = _mm256_extracti128_si256(k, 1);
161+
k_decomp[0] = _mm256_extracti128_si256::<0>(k);
162+
k_decomp[1] = _mm256_extracti128_si256::<1>(k);
163163
let r = vectorized(a, k);
164164
let mut e_decomp = [_mm_setzero_si128(); 2];
165165
for i in 0..2 {
166166
e_decomp[i] = linear(a_decomp[i], k_decomp[i]);
167167
}
168-
assert_eq_m128i(_mm256_extracti128_si256(r, 0), e_decomp[0]);
169-
assert_eq_m128i(_mm256_extracti128_si256(r, 1), e_decomp[1]);
168+
assert_eq_m128i(_mm256_extracti128_si256::<0>(r), e_decomp[0]);
169+
assert_eq_m128i(_mm256_extracti128_si256::<1>(r), e_decomp[1]);
170170
}
171171

172172
#[target_feature(enable = "sse2")]

crates/core_arch/src/x86/avx512vpclmulqdq.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ mod tests {
125125
assert_eq_m128i($op($vec_res, 1), $lin_res[1]);
126126
assert_eq_m128i($op($vec_res, 0), $lin_res[0]);
127127
};
128+
(assert_eq_m128i($op:ident::<2>($vec_res:ident),$lin_res:ident[2]);) => {
129+
assert_eq_m128i($op::<1>($vec_res), $lin_res[1]);
130+
assert_eq_m128i($op::<0>($vec_res), $lin_res[0]);
131+
};
128132
}
129133

130134
// this function tests one of the possible 4 instances
@@ -209,7 +213,7 @@ mod tests {
209213
for i in 0..2 {
210214
e_decomp[i] = linear(a_decomp[i], b_decomp[i]);
211215
}
212-
unroll! {assert_eq_m128i(_mm256_extracti128_si256(r,2),e_decomp[2]);}
216+
unroll! {assert_eq_m128i(_mm256_extracti128_si256::<2>(r),e_decomp[2]);}
213217
}
214218

215219
#[simd_test(enable = "avx512vpclmulqdq,avx512f")]

0 commit comments

Comments
 (0)