Skip to content

Commit f02793c

Browse files
committed
Fix std_example on x86
1 parent d24852f commit f02793c

File tree

1 file changed

+86
-72
lines changed

1 file changed

+86
-72
lines changed

example/std_example.rs

Lines changed: 86 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -230,51 +230,53 @@ unsafe fn test_crc32() {
230230
#[cfg(target_arch = "x86_64")]
231231
#[target_feature(enable = "sse2")]
232232
unsafe fn test_simd() {
233-
assert!(is_x86_feature_detected!("sse2"));
234-
235-
let x = _mm_setzero_si128();
236-
let y = _mm_set1_epi16(7);
237-
let or = _mm_or_si128(x, y);
238-
let cmp_eq = _mm_cmpeq_epi8(y, y);
239-
let cmp_lt = _mm_cmplt_epi8(y, y);
240-
241-
let (zero0, zero1) = std::mem::transmute::<_, (u64, u64)>(x);
242-
assert_eq!((zero0, zero1), (0, 0));
243-
assert_eq!(std::mem::transmute::<_, [u16; 8]>(or), [7, 7, 7, 7, 7, 7, 7, 7]);
244-
assert_eq!(
245-
std::mem::transmute::<_, [u16; 8]>(cmp_eq),
246-
[0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff]
247-
);
248-
assert_eq!(std::mem::transmute::<_, [u16; 8]>(cmp_lt), [0, 0, 0, 0, 0, 0, 0, 0]);
249-
250-
test_mm_slli_si128();
251-
test_mm_movemask_epi8();
252-
test_mm256_movemask_epi8();
253-
test_mm_add_epi8();
254-
test_mm_add_pd();
255-
test_mm_cvtepi8_epi16();
256-
#[cfg(not(jit))]
257-
test_mm_cvtps_epi32();
258-
test_mm_cvttps_epi32();
259-
test_mm_cvtsi128_si64();
260-
261-
test_mm_extract_epi8();
262-
test_mm_insert_epi16();
263-
test_mm_shuffle_epi8();
264-
265-
#[cfg(not(jit))]
266-
test_mm_cmpestri();
267-
268-
test_mm256_shuffle_epi8();
269-
test_mm256_permute2x128_si256();
270-
test_mm256_permutevar8x32_epi32();
271-
272-
#[rustfmt::skip]
233+
unsafe {
234+
assert!(is_x86_feature_detected!("sse2"));
235+
236+
let x = _mm_setzero_si128();
237+
let y = _mm_set1_epi16(7);
238+
let or = _mm_or_si128(x, y);
239+
let cmp_eq = _mm_cmpeq_epi8(y, y);
240+
let cmp_lt = _mm_cmplt_epi8(y, y);
241+
242+
let (zero0, zero1) = std::mem::transmute::<_, (u64, u64)>(x);
243+
assert_eq!((zero0, zero1), (0, 0));
244+
assert_eq!(std::mem::transmute::<_, [u16; 8]>(or), [7, 7, 7, 7, 7, 7, 7, 7]);
245+
assert_eq!(
246+
std::mem::transmute::<_, [u16; 8]>(cmp_eq),
247+
[0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff]
248+
);
249+
assert_eq!(std::mem::transmute::<_, [u16; 8]>(cmp_lt), [0, 0, 0, 0, 0, 0, 0, 0]);
250+
251+
test_mm_slli_si128();
252+
test_mm_movemask_epi8();
253+
test_mm256_movemask_epi8();
254+
test_mm_add_epi8();
255+
test_mm_add_pd();
256+
test_mm_cvtepi8_epi16();
257+
#[cfg(not(jit))]
258+
test_mm_cvtps_epi32();
259+
test_mm_cvttps_epi32();
260+
test_mm_cvtsi128_si64();
261+
262+
test_mm_extract_epi8();
263+
test_mm_insert_epi16();
264+
test_mm_shuffle_epi8();
265+
266+
#[cfg(not(jit))]
267+
test_mm_cmpestri();
268+
269+
test_mm256_shuffle_epi8();
270+
test_mm256_permute2x128_si256();
271+
test_mm256_permutevar8x32_epi32();
272+
273+
#[rustfmt::skip]
273274
let mask1 = _mm_movemask_epi8(dbg!(_mm_setr_epi8(255u8 as i8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)));
274-
assert_eq!(mask1, 1);
275+
assert_eq!(mask1, 1);
275276

276-
#[cfg(not(jit))]
277-
test_crc32();
277+
#[cfg(not(jit))]
278+
test_crc32();
279+
}
278280
}
279281

280282
#[cfg(target_arch = "x86_64")]
@@ -361,23 +363,27 @@ fn assert_eq_m128i(x: std::arch::x86_64::__m128i, y: std::arch::x86_64::__m128i)
361363

362364
#[cfg(target_arch = "x86_64")]
363365
#[target_feature(enable = "sse2")]
364-
pub unsafe fn assert_eq_m128d(a: __m128d, b: __m128d) {
366+
pub fn assert_eq_m128d(a: __m128d, b: __m128d) {
365367
if _mm_movemask_pd(_mm_cmpeq_pd(a, b)) != 0b11 {
366368
panic!("{:?} != {:?}", a, b);
367369
}
368370
}
369371

370372
#[cfg(target_arch = "x86_64")]
371373
#[target_feature(enable = "avx")]
372-
pub unsafe fn assert_eq_m256i(a: __m256i, b: __m256i) {
373-
assert_eq!(std::mem::transmute::<_, [u64; 4]>(a), std::mem::transmute::<_, [u64; 4]>(b))
374+
pub fn assert_eq_m256i(a: __m256i, b: __m256i) {
375+
unsafe {
376+
assert_eq!(std::mem::transmute::<_, [u64; 4]>(a), std::mem::transmute::<_, [u64; 4]>(b))
377+
}
374378
}
375379

376380
#[cfg(target_arch = "x86_64")]
377381
#[target_feature(enable = "sse2")]
378382
unsafe fn test_mm_cvtsi128_si64() {
379-
let r = _mm_cvtsi128_si64(std::mem::transmute::<[i64; 2], _>([5, 0]));
380-
assert_eq!(r, 5);
383+
unsafe {
384+
let r = _mm_cvtsi128_si64(std::mem::transmute::<[i64; 2], _>([5, 0]));
385+
assert_eq!(r, 5);
386+
}
381387
}
382388

383389
#[cfg(target_arch = "x86_64")]
@@ -445,20 +451,24 @@ unsafe fn test_mm_shuffle_epi8() {
445451
#[cfg(target_arch = "x86_64")]
446452
#[target_feature(enable = "sse4.2")]
447453
unsafe fn str_to_m128i(s: &[u8]) -> __m128i {
448-
assert!(s.len() <= 16);
449-
let slice = &mut [0u8; 16];
450-
std::ptr::copy_nonoverlapping(s.as_ptr(), slice.as_mut_ptr(), s.len());
451-
_mm_loadu_si128(slice.as_ptr() as *const _)
454+
unsafe {
455+
assert!(s.len() <= 16);
456+
let slice = &mut [0u8; 16];
457+
std::ptr::copy_nonoverlapping(s.as_ptr(), slice.as_mut_ptr(), s.len());
458+
_mm_loadu_si128(slice.as_ptr() as *const _)
459+
}
452460
}
453461

454462
#[cfg(not(jit))]
455463
#[cfg(target_arch = "x86_64")]
456464
#[target_feature(enable = "sse4.2")]
457465
unsafe fn test_mm_cmpestri() {
458-
let a = str_to_m128i(b"bar - garbage");
459-
let b = str_to_m128i(b"foobar");
460-
let i = _mm_cmpestri::<_SIDD_CMP_EQUAL_ORDERED>(a, 3, b, 6);
461-
assert_eq!(3, i);
466+
unsafe {
467+
let a = str_to_m128i(b"bar - garbage");
468+
let b = str_to_m128i(b"foobar");
469+
let i = _mm_cmpestri::<_SIDD_CMP_EQUAL_ORDERED>(a, 3, b, 6);
470+
assert_eq!(3, i);
471+
}
462472
}
463473

464474
#[cfg(target_arch = "x86_64")]
@@ -513,35 +523,39 @@ unsafe fn test_mm256_permutevar8x32_epi32() {
513523
#[target_feature(enable = "avx2")]
514524
#[cfg(not(jit))]
515525
unsafe fn test_mm_cvtps_epi32() {
516-
let floats: [f32; 4] = [1.5, -2.5, i32::MAX as f32 + 1.0, f32::NAN];
526+
unsafe {
527+
let floats: [f32; 4] = [1.5, -2.5, i32::MAX as f32 + 1.0, f32::NAN];
517528

518-
let float_vec = _mm_loadu_ps(floats.as_ptr());
519-
let int_vec = _mm_cvtps_epi32(float_vec);
529+
let float_vec = _mm_loadu_ps(floats.as_ptr());
530+
let int_vec = _mm_cvtps_epi32(float_vec);
520531

521-
let mut ints: [i32; 4] = [0; 4];
522-
_mm_storeu_si128(ints.as_mut_ptr() as *mut __m128i, int_vec);
532+
let mut ints: [i32; 4] = [0; 4];
533+
_mm_storeu_si128(ints.as_mut_ptr() as *mut __m128i, int_vec);
523534

524-
// this is very different from `floats.map(|f| f as i32)`!
525-
let expected_ints: [i32; 4] = [2, -2, i32::MIN, i32::MIN];
535+
// this is very different from `floats.map(|f| f as i32)`!
536+
let expected_ints: [i32; 4] = [2, -2, i32::MIN, i32::MIN];
526537

527-
assert_eq!(ints, expected_ints);
538+
assert_eq!(ints, expected_ints);
539+
}
528540
}
529541

530542
#[cfg(target_arch = "x86_64")]
531543
#[target_feature(enable = "avx2")]
532544
unsafe fn test_mm_cvttps_epi32() {
533-
let floats: [f32; 4] = [1.5, -2.5, i32::MAX as f32 + 1.0, f32::NAN];
545+
unsafe {
546+
let floats: [f32; 4] = [1.5, -2.5, i32::MAX as f32 + 1.0, f32::NAN];
534547

535-
let float_vec = _mm_loadu_ps(floats.as_ptr());
536-
let int_vec = _mm_cvttps_epi32(float_vec);
548+
let float_vec = _mm_loadu_ps(floats.as_ptr());
549+
let int_vec = _mm_cvttps_epi32(float_vec);
537550

538-
let mut ints: [i32; 4] = [0; 4];
539-
_mm_storeu_si128(ints.as_mut_ptr() as *mut __m128i, int_vec);
551+
let mut ints: [i32; 4] = [0; 4];
552+
_mm_storeu_si128(ints.as_mut_ptr() as *mut __m128i, int_vec);
540553

541-
// this is very different from `floats.map(|f| f as i32)`!
542-
let expected_ints: [i32; 4] = [1, -2, i32::MIN, i32::MIN];
554+
// this is very different from `floats.map(|f| f as i32)`!
555+
let expected_ints: [i32; 4] = [1, -2, i32::MIN, i32::MIN];
543556

544-
assert_eq!(ints, expected_ints);
557+
assert_eq!(ints, expected_ints);
558+
}
545559
}
546560

547561
fn test_checked_mul() {

0 commit comments

Comments
 (0)