Skip to content

Commit a66d523

Browse files
committed
Make ssse3 functions const
1 parent 93b7900 commit a66d523

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

crates/core_arch/src/x86/ssse3.rs

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ use stdarch_test::assert_instr;
1616
#[target_feature(enable = "ssse3")]
1717
#[cfg_attr(test, assert_instr(pabsb))]
1818
#[stable(feature = "simd_x86", since = "1.27.0")]
19-
pub fn _mm_abs_epi8(a: __m128i) -> __m128i {
19+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
20+
pub const fn _mm_abs_epi8(a: __m128i) -> __m128i {
2021
unsafe {
2122
let a = a.as_i8x16();
2223
let zero = i8x16::ZERO;
@@ -34,7 +35,8 @@ pub fn _mm_abs_epi8(a: __m128i) -> __m128i {
3435
#[target_feature(enable = "ssse3")]
3536
#[cfg_attr(test, assert_instr(pabsw))]
3637
#[stable(feature = "simd_x86", since = "1.27.0")]
37-
pub fn _mm_abs_epi16(a: __m128i) -> __m128i {
38+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
39+
pub const fn _mm_abs_epi16(a: __m128i) -> __m128i {
3840
unsafe {
3941
let a = a.as_i16x8();
4042
let zero = i16x8::ZERO;
@@ -52,7 +54,8 @@ pub fn _mm_abs_epi16(a: __m128i) -> __m128i {
5254
#[target_feature(enable = "ssse3")]
5355
#[cfg_attr(test, assert_instr(pabsd))]
5456
#[stable(feature = "simd_x86", since = "1.27.0")]
55-
pub fn _mm_abs_epi32(a: __m128i) -> __m128i {
57+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
58+
pub const fn _mm_abs_epi32(a: __m128i) -> __m128i {
5659
unsafe {
5760
let a = a.as_i32x4();
5861
let zero = i32x4::ZERO;
@@ -104,7 +107,8 @@ pub fn _mm_shuffle_epi8(a: __m128i, b: __m128i) -> __m128i {
104107
#[cfg_attr(test, assert_instr(palignr, IMM8 = 15))]
105108
#[rustc_legacy_const_generics(2)]
106109
#[stable(feature = "simd_x86", since = "1.27.0")]
107-
pub fn _mm_alignr_epi8<const IMM8: i32>(a: __m128i, b: __m128i) -> __m128i {
110+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
111+
pub const fn _mm_alignr_epi8<const IMM8: i32>(a: __m128i, b: __m128i) -> __m128i {
108112
static_assert_uimm_bits!(IMM8, 8);
109113
// If palignr is shifting the pair of vectors more than the size of two
110114
// lanes, emit zero.
@@ -163,7 +167,8 @@ pub fn _mm_alignr_epi8<const IMM8: i32>(a: __m128i, b: __m128i) -> __m128i {
163167
#[target_feature(enable = "ssse3")]
164168
#[cfg_attr(test, assert_instr(phaddw))]
165169
#[stable(feature = "simd_x86", since = "1.27.0")]
166-
pub fn _mm_hadd_epi16(a: __m128i, b: __m128i) -> __m128i {
170+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
171+
pub const fn _mm_hadd_epi16(a: __m128i, b: __m128i) -> __m128i {
167172
let a = a.as_i16x8();
168173
let b = b.as_i16x8();
169174
unsafe {
@@ -194,7 +199,8 @@ pub fn _mm_hadds_epi16(a: __m128i, b: __m128i) -> __m128i {
194199
#[target_feature(enable = "ssse3")]
195200
#[cfg_attr(test, assert_instr(phaddd))]
196201
#[stable(feature = "simd_x86", since = "1.27.0")]
197-
pub fn _mm_hadd_epi32(a: __m128i, b: __m128i) -> __m128i {
202+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
203+
pub const fn _mm_hadd_epi32(a: __m128i, b: __m128i) -> __m128i {
198204
let a = a.as_i32x4();
199205
let b = b.as_i32x4();
200206
unsafe {
@@ -212,7 +218,8 @@ pub fn _mm_hadd_epi32(a: __m128i, b: __m128i) -> __m128i {
212218
#[target_feature(enable = "ssse3")]
213219
#[cfg_attr(test, assert_instr(phsubw))]
214220
#[stable(feature = "simd_x86", since = "1.27.0")]
215-
pub fn _mm_hsub_epi16(a: __m128i, b: __m128i) -> __m128i {
221+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
222+
pub const fn _mm_hsub_epi16(a: __m128i, b: __m128i) -> __m128i {
216223
let a = a.as_i16x8();
217224
let b = b.as_i16x8();
218225
unsafe {
@@ -244,7 +251,8 @@ pub fn _mm_hsubs_epi16(a: __m128i, b: __m128i) -> __m128i {
244251
#[target_feature(enable = "ssse3")]
245252
#[cfg_attr(test, assert_instr(phsubd))]
246253
#[stable(feature = "simd_x86", since = "1.27.0")]
247-
pub fn _mm_hsub_epi32(a: __m128i, b: __m128i) -> __m128i {
254+
#[rustc_const_unstable(feature = "stdarch_const_x86", issue = "149298")]
255+
pub const fn _mm_hsub_epi32(a: __m128i, b: __m128i) -> __m128i {
248256
let a = a.as_i32x4();
249257
let b = b.as_i32x4();
250258
unsafe {
@@ -353,24 +361,25 @@ unsafe extern "C" {
353361

354362
#[cfg(test)]
355363
mod tests {
364+
use crate::core_arch::assert_eq_const as assert_eq;
356365
use stdarch_test::simd_test;
357366

358367
use crate::core_arch::x86::*;
359368

360369
#[simd_test(enable = "ssse3")]
361-
unsafe fn test_mm_abs_epi8() {
370+
const unsafe fn test_mm_abs_epi8() {
362371
let r = _mm_abs_epi8(_mm_set1_epi8(-5));
363372
assert_eq_m128i(r, _mm_set1_epi8(5));
364373
}
365374

366375
#[simd_test(enable = "ssse3")]
367-
unsafe fn test_mm_abs_epi16() {
376+
const unsafe fn test_mm_abs_epi16() {
368377
let r = _mm_abs_epi16(_mm_set1_epi16(-5));
369378
assert_eq_m128i(r, _mm_set1_epi16(5));
370379
}
371380

372381
#[simd_test(enable = "ssse3")]
373-
unsafe fn test_mm_abs_epi32() {
382+
const unsafe fn test_mm_abs_epi32() {
374383
let r = _mm_abs_epi32(_mm_set1_epi32(-5));
375384
assert_eq_m128i(r, _mm_set1_epi32(5));
376385
}
@@ -400,7 +409,7 @@ mod tests {
400409
}
401410

402411
#[simd_test(enable = "ssse3")]
403-
unsafe fn test_mm_alignr_epi8() {
412+
const unsafe fn test_mm_alignr_epi8() {
404413
#[rustfmt::skip]
405414
let a = _mm_setr_epi8(
406415
1, 2, 3, 4, 5, 6, 7, 8,
@@ -440,7 +449,7 @@ mod tests {
440449
}
441450

442451
#[simd_test(enable = "ssse3")]
443-
unsafe fn test_mm_hadd_epi16() {
452+
const unsafe fn test_mm_hadd_epi16() {
444453
let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
445454
let b = _mm_setr_epi16(4, 128, 4, 3, 24, 12, 6, 19);
446455
let expected = _mm_setr_epi16(3, 7, 11, 15, 132, 7, 36, 25);
@@ -490,7 +499,7 @@ mod tests {
490499
}
491500

492501
#[simd_test(enable = "ssse3")]
493-
unsafe fn test_mm_hadd_epi32() {
502+
const unsafe fn test_mm_hadd_epi32() {
494503
let a = _mm_setr_epi32(1, 2, 3, 4);
495504
let b = _mm_setr_epi32(4, 128, 4, 3);
496505
let expected = _mm_setr_epi32(3, 7, 132, 7);
@@ -506,7 +515,7 @@ mod tests {
506515
}
507516

508517
#[simd_test(enable = "ssse3")]
509-
unsafe fn test_mm_hsub_epi16() {
518+
const unsafe fn test_mm_hsub_epi16() {
510519
let a = _mm_setr_epi16(1, 2, 3, 4, 5, 6, 7, 8);
511520
let b = _mm_setr_epi16(4, 128, 4, 3, 24, 12, 6, 19);
512521
let expected = _mm_setr_epi16(-1, -1, -1, -1, -124, 1, 12, -13);
@@ -556,7 +565,7 @@ mod tests {
556565
}
557566

558567
#[simd_test(enable = "ssse3")]
559-
unsafe fn test_mm_hsub_epi32() {
568+
const unsafe fn test_mm_hsub_epi32() {
560569
let a = _mm_setr_epi32(1, 2, 3, 4);
561570
let b = _mm_setr_epi32(4, 128, 4, 3);
562571
let expected = _mm_setr_epi32(-1, -1, -124, 1);

0 commit comments

Comments
 (0)