]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/simd/simd-intrinsic-float-minmax.rs
4 // Test that the simd_f{min,max} intrinsics produce the correct results.
6 #![feature(repr_simd, platform_intrinsics)]
7 #![allow(non_camel_case_types)]
10 #[derive(Copy, Clone, PartialEq, Debug)]
11 struct f32x4(pub f32, pub f32, pub f32, pub f32);
13 extern "platform-intrinsic" {
14 fn simd_fmin
<T
>(x
: T
, y
: T
) -> T
;
15 fn simd_fmax
<T
>(x
: T
, y
: T
) -> T
;
19 let x
= f32x4(1.0, 2.0, 3.0, 4.0);
20 let y
= f32x4(2.0, 1.0, 4.0, 3.0);
22 #[cfg(not(any(target_arch = "mips", target_arch = "mips64")))]
23 let nan
= ::std
::f32::NAN
;
24 // MIPS hardware treats f32::NAN as SNAN. Clear the signaling bit.
25 // See https://github.com/rust-lang/rust/issues/52746.
26 #[cfg(any(target_arch = "mips", target_arch = "mips64"))]
27 let nan
= f32::from_bits(::std
::f32::NAN
.to_bits() - 1);
29 let n
= f32x4(nan
, nan
, nan
, nan
);
32 let min0
= simd_fmin(x
, y
);
33 let min1
= simd_fmin(y
, x
);
34 assert_eq
!(min0
, min1
);
35 let e
= f32x4(1.0, 1.0, 3.0, 3.0);
37 let minn
= simd_fmin(x
, n
);
39 let minn
= simd_fmin(y
, n
);
42 let max0
= simd_fmax(x
, y
);
43 let max1
= simd_fmax(y
, x
);
44 assert_eq
!(max0
, max1
);
45 let e
= f32x4(2.0, 2.0, 4.0, 4.0);
47 let maxn
= simd_fmax(x
, n
);
49 let maxn
= simd_fmax(y
, n
);