Skip to content

Commit 0dfeef2

Browse files
authored
Merge pull request #2041 from ArunTamil21/add-alias-tests
Add missing runtime tests for SSE alias intrinsics
2 parents 2e50b0d + eec5cd9 commit 0dfeef2

2 files changed

Lines changed: 114 additions & 74 deletions

File tree

crates/core_arch/src/x86/sse.rs

Lines changed: 113 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2997,66 +2997,87 @@ mod tests {
29972997
}
29982998
}
29992999

3000+
macro_rules! test_mm_cvtss_si32_impl {
3001+
($alias:ident) => {
3002+
let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1];
3003+
let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520];
3004+
for i in 0..inputs.len() {
3005+
let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0);
3006+
let e = result[i];
3007+
let r = $alias(x);
3008+
assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e);
3009+
}
3010+
};
3011+
}
3012+
30003013
#[simd_test(enable = "sse")]
30013014
fn test_mm_cvtss_si32() {
3002-
let inputs = &[42.0f32, -3.1, 4.0e10, 4.0e-20, NAN, 2147483500.1];
3003-
let result = &[42i32, -3, i32::MIN, 0, i32::MIN, 2147483520];
3004-
for i in 0..inputs.len() {
3005-
let x = _mm_setr_ps(inputs[i], 1.0, 3.0, 4.0);
3006-
let e = result[i];
3007-
let r = _mm_cvtss_si32(x);
3008-
assert_eq!(
3009-
e, r,
3010-
"TestCase #{} _mm_cvtss_si32({:?}) = {}, expected: {}",
3011-
i, x, r, e
3012-
);
3013-
}
3015+
test_mm_cvtss_si32_impl!(_mm_cvtss_si32);
3016+
}
3017+
3018+
#[simd_test(enable = "sse")]
3019+
fn test_mm_cvt_ss2si() {
3020+
test_mm_cvtss_si32_impl!(_mm_cvt_ss2si);
3021+
}
3022+
3023+
macro_rules! test_cvttss_si32_impl {
3024+
($alias:ident) => {
3025+
let inputs = &[
3026+
(42.0f32, 42i32),
3027+
(-31.4, -31),
3028+
(-33.5, -33),
3029+
(-34.5, -34),
3030+
(10.999, 10),
3031+
(-5.99, -5),
3032+
(4.0e10, i32::MIN),
3033+
(4.0e-10, 0),
3034+
(NAN, i32::MIN),
3035+
(2147483500.1, 2147483520),
3036+
];
3037+
for (i, &(xi, e)) in inputs.iter().enumerate() {
3038+
let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0);
3039+
let r = $alias(x);
3040+
assert_eq!(e, r, "TestCase #{} f({:?}) = {}, expected: {}", i, x, r, e);
3041+
}
3042+
};
30143043
}
30153044

30163045
#[simd_test(enable = "sse")]
30173046
fn test_mm_cvttss_si32() {
3018-
let inputs = &[
3019-
(42.0f32, 42i32),
3020-
(-31.4, -31),
3021-
(-33.5, -33),
3022-
(-34.5, -34),
3023-
(10.999, 10),
3024-
(-5.99, -5),
3025-
(4.0e10, i32::MIN),
3026-
(4.0e-10, 0),
3027-
(NAN, i32::MIN),
3028-
(2147483500.1, 2147483520),
3029-
];
3030-
for (i, &(xi, e)) in inputs.iter().enumerate() {
3031-
let x = _mm_setr_ps(xi, 1.0, 3.0, 4.0);
3032-
let r = _mm_cvttss_si32(x);
3033-
assert_eq!(
3034-
e, r,
3035-
"TestCase #{} _mm_cvttss_si32({:?}) = {}, expected: {}",
3036-
i, x, r, e
3037-
);
3038-
}
3047+
test_cvttss_si32_impl!(_mm_cvttss_si32);
30393048
}
30403049

30413050
#[simd_test(enable = "sse")]
3042-
const fn test_mm_cvtsi32_ss() {
3043-
let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0);
3051+
fn test_mm_cvtt_ss2si() {
3052+
test_cvttss_si32_impl!(_mm_cvtt_ss2si);
3053+
}
30443054

3045-
let r = _mm_cvtsi32_ss(a, 4555);
3046-
let e = _mm_setr_ps(4555.0, 6.0, 7.0, 8.0);
3047-
assert_eq_m128(e, r);
3055+
macro_rules! test_mm_cvtsi32_ss_impl {
3056+
($alias:ident) => {
3057+
let a = _mm_setr_ps(5.0, 6.0, 7.0, 8.0);
30483058

3049-
let r = _mm_cvtsi32_ss(a, 322223333);
3050-
let e = _mm_setr_ps(322223333.0, 6.0, 7.0, 8.0);
3051-
assert_eq_m128(e, r);
3059+
let r = $alias(a, 4555);
3060+
assert_eq_m128(_mm_setr_ps(4555.0, 6.0, 7.0, 8.0), r);
30523061

3053-
let r = _mm_cvtsi32_ss(a, -432);
3054-
let e = _mm_setr_ps(-432.0, 6.0, 7.0, 8.0);
3055-
assert_eq_m128(e, r);
3062+
let r = $alias(a, 322223333);
3063+
assert_eq_m128(_mm_setr_ps(322223333.0, 6.0, 7.0, 8.0), r);
30563064

3057-
let r = _mm_cvtsi32_ss(a, -322223333);
3058-
let e = _mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0);
3059-
assert_eq_m128(e, r);
3065+
let r = $alias(a, -432);
3066+
assert_eq_m128(_mm_setr_ps(-432.0, 6.0, 7.0, 8.0), r);
3067+
3068+
let r = $alias(a, -322223333);
3069+
assert_eq_m128(_mm_setr_ps(-322223333.0, 6.0, 7.0, 8.0), r);
3070+
};
3071+
}
3072+
3073+
#[simd_test(enable = "sse")]
3074+
const fn test_mm_cvtsi32_ss() {
3075+
test_mm_cvtsi32_ss_impl!(_mm_cvtsi32_ss);
3076+
}
3077+
3078+
#[simd_test(enable = "sse")]
3079+
fn test_mm_cvt_si2ss() {
3080+
test_mm_cvtsi32_ss_impl!(_mm_cvt_si2ss);
30603081
}
30613082

30623083
#[simd_test(enable = "sse")]
@@ -3071,18 +3092,24 @@ mod tests {
30713092
assert_eq_m128(r, _mm_setr_ps(4.25, 0.0, 0.0, 0.0));
30723093
}
30733094

3095+
macro_rules! test_mm_set1_ps_impl {
3096+
($alias:ident) => {
3097+
let r = $alias(black_box(4.25));
3098+
assert_eq!(get_m128(r, 0), 4.25);
3099+
assert_eq!(get_m128(r, 1), 4.25);
3100+
assert_eq!(get_m128(r, 2), 4.25);
3101+
assert_eq!(get_m128(r, 3), 4.25);
3102+
};
3103+
}
3104+
30743105
#[simd_test(enable = "sse")]
30753106
const fn test_mm_set1_ps() {
3076-
let r1 = _mm_set1_ps(black_box(4.25));
3077-
let r2 = _mm_set_ps1(black_box(4.25));
3078-
assert_eq!(get_m128(r1, 0), 4.25);
3079-
assert_eq!(get_m128(r1, 1), 4.25);
3080-
assert_eq!(get_m128(r1, 2), 4.25);
3081-
assert_eq!(get_m128(r1, 3), 4.25);
3082-
assert_eq!(get_m128(r2, 0), 4.25);
3083-
assert_eq!(get_m128(r2, 1), 4.25);
3084-
assert_eq!(get_m128(r2, 2), 4.25);
3085-
assert_eq!(get_m128(r2, 3), 4.25);
3107+
test_mm_set1_ps_impl!(_mm_set1_ps);
3108+
}
3109+
3110+
#[simd_test(enable = "sse")]
3111+
const fn test_mm_set_ps1() {
3112+
test_mm_set1_ps_impl!(_mm_set_ps1);
30863113
}
30873114

30883115
#[simd_test(enable = "sse")]
@@ -3171,11 +3198,22 @@ mod tests {
31713198
assert_eq_m128(r, _mm_setr_ps(42.0, 0.0, 0.0, 0.0));
31723199
}
31733200

3201+
macro_rules! test_mm_load1_ps_impl {
3202+
($alias:ident) => {
3203+
let a = 42.0f32;
3204+
let r = unsafe { $alias(ptr::addr_of!(a)) };
3205+
assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0));
3206+
};
3207+
}
3208+
31743209
#[simd_test(enable = "sse")]
31753210
const fn test_mm_load1_ps() {
3176-
let a = 42.0f32;
3177-
let r = unsafe { _mm_load1_ps(ptr::addr_of!(a)) };
3178-
assert_eq_m128(r, _mm_setr_ps(42.0, 42.0, 42.0, 42.0));
3211+
test_mm_load1_ps_impl!(_mm_load1_ps);
3212+
}
3213+
3214+
#[simd_test(enable = "sse")]
3215+
const fn test_mm_load_ps1() {
3216+
test_mm_load1_ps_impl!(_mm_load_ps1);
31793217
}
31803218

31813219
#[simd_test(enable = "sse")]
@@ -3227,19 +3265,24 @@ mod tests {
32273265
assert_eq!(vals[2], 0.0);
32283266
}
32293267

3268+
macro_rules! test_mm_store1_ps_impl {
3269+
($alias:ident) => {
3270+
let mut vals = Memory { data: [0.0f32; 4] };
3271+
let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0);
3272+
let p = vals.data.as_mut_ptr();
3273+
unsafe { $alias(p, *black_box(&a)) };
3274+
assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]);
3275+
};
3276+
}
3277+
32303278
#[simd_test(enable = "sse")]
32313279
const fn test_mm_store1_ps() {
3232-
let mut vals = Memory { data: [0.0f32; 4] };
3233-
let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0);
3234-
3235-
// guaranteed to be aligned to 16 bytes
3236-
let p = vals.data.as_mut_ptr();
3237-
3238-
unsafe {
3239-
_mm_store1_ps(p, *black_box(&a));
3240-
}
3280+
test_mm_store1_ps_impl!(_mm_store1_ps);
3281+
}
32413282

3242-
assert_eq!(vals.data, [1.0, 1.0, 1.0, 1.0]);
3283+
#[simd_test(enable = "sse")]
3284+
const fn test_mm_store_ps1() {
3285+
test_mm_store1_ps_impl!(_mm_store_ps1);
32433286
}
32443287

32453288
#[simd_test(enable = "sse")]

crates/stdarch-verify/tests/x86-intel.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ fn verify_all_signatures() {
214214
"_m_prefetchrs",
215215
// CMPXCHG
216216
"cmpxchg16b",
217-
// Undefined
217+
// Undefined,
218218
"_mm_undefined_ps",
219219
"_mm_undefined_pd",
220220
"_mm_undefined_si128",
@@ -250,9 +250,6 @@ fn verify_all_signatures() {
250250
"_mm_cvt_ss2si",
251251
"_mm_cvtt_ss2si",
252252
"_mm_cvt_si2ss",
253-
"_mm_set_ps1",
254-
"_mm_load_ps1",
255-
"_mm_store_ps1",
256253
"_mm_bslli_si128",
257254
"_mm_bsrli_si128",
258255
"_bextr2_u32",

0 commit comments

Comments
 (0)