Ensure tests don't fail on i586 in CI · rust-lang/rust@0f643c4 (original) (raw)

`@@ -4,50 +4,54 @@

`

4

4

`// Test that floats (in particular signalling NaNs) are losslessly returned from functions.

`

5

5

``

6

6

`fn main() {

`

7

``

`-

let bits_f32 = std::hint::black_box([

`

8

``

`-

4.2_f32.to_bits(),

`

9

``

`-

f32::INFINITY.to_bits(),

`

10

``

`-

f32::NEG_INFINITY.to_bits(),

`

11

``

`-

f32::NAN.to_bits(),

`

12

``

`-

// These two masks cover all the mantissa bits. One of them is a signalling NaN, the other

`

13

``

`-

// is quiet.

`

14

``

`` -

// Similar to the masks in test_float_bits_conv in library/std/src/f32/tests.rs

``

15

``

`-

f32::NAN.to_bits() ^ 0x002A_AAAA,

`

16

``

`-

f32::NAN.to_bits() ^ 0x0055_5555,

`

17

``

`-

// Same as above but with the sign bit flipped.

`

18

``

`-

f32::NAN.to_bits() ^ 0x802A_AAAA,

`

19

``

`-

f32::NAN.to_bits() ^ 0x8055_5555,

`

20

``

`-

]);

`

21

``

`-

for bits in bits_f32 {

`

22

``

`-

assert_eq!(identity(f32::from_bits(bits)).to_bits(), bits);

`

23

``

`-

// Test types that are returned as scalar pairs.

`

24

``

`-

assert_eq!(identity((f32::from_bits(bits), 42)).0.to_bits(), bits);

`

25

``

`-

assert_eq!(identity((42, f32::from_bits(bits))).1.to_bits(), bits);

`

26

``

`-

let (a, b) = identity((f32::from_bits(bits), f32::from_bits(bits)));

`

27

``

`-

assert_eq!((a.to_bits(), b.to_bits()), (bits, bits));

`

28

``

`-

}

`

``

7

`` +

// FIXME(#114479): LLVM miscompiles loading and storing f32 and f64 when SSE is disabled on

``

``

8

`+

// x86.

`

``

9

`+

if cfg!(not(all(target_arch = "x86", not(target_feature = "sse2")))) {

`

``

10

`+

let bits_f32 = std::hint::black_box([

`

``

11

`+

4.2_f32.to_bits(),

`

``

12

`+

f32::INFINITY.to_bits(),

`

``

13

`+

f32::NEG_INFINITY.to_bits(),

`

``

14

`+

f32::NAN.to_bits(),

`

``

15

`+

// These two masks cover all the mantissa bits. One of them is a signalling NaN, the

`

``

16

`+

// other is quiet.

`

``

17

`` +

// Similar to the masks in test_float_bits_conv in library/std/src/f32/tests.rs

``

``

18

`+

f32::NAN.to_bits() ^ 0x002A_AAAA,

`

``

19

`+

f32::NAN.to_bits() ^ 0x0055_5555,

`

``

20

`+

// Same as above but with the sign bit flipped.

`

``

21

`+

f32::NAN.to_bits() ^ 0x802A_AAAA,

`

``

22

`+

f32::NAN.to_bits() ^ 0x8055_5555,

`

``

23

`+

]);

`

``

24

`+

for bits in bits_f32 {

`

``

25

`+

assert_eq!(identity(f32::from_bits(bits)).to_bits(), bits);

`

``

26

`+

// Test types that are returned as scalar pairs.

`

``

27

`+

assert_eq!(identity((f32::from_bits(bits), 42)).0.to_bits(), bits);

`

``

28

`+

assert_eq!(identity((42, f32::from_bits(bits))).1.to_bits(), bits);

`

``

29

`+

let (a, b) = identity((f32::from_bits(bits), f32::from_bits(bits)));

`

``

30

`+

assert_eq!((a.to_bits(), b.to_bits()), (bits, bits));

`

``

31

`+

}

`

29

32

``

30

``

`-

let bits_f64 = std::hint::black_box([

`

31

``

`-

4.2_f64.to_bits(),

`

32

``

`-

f64::INFINITY.to_bits(),

`

33

``

`-

f64::NEG_INFINITY.to_bits(),

`

34

``

`-

f64::NAN.to_bits(),

`

35

``

`-

// These two masks cover all the mantissa bits. One of them is a signalling NaN, the other

`

36

``

`-

// is quiet.

`

37

``

`` -

// Similar to the masks in test_float_bits_conv in library/std/src/f64/tests.rs

``

38

``

`-

f64::NAN.to_bits() ^ 0x000A_AAAA_AAAA_AAAA,

`

39

``

`-

f64::NAN.to_bits() ^ 0x0005_5555_5555_5555,

`

40

``

`-

// Same as above but with the sign bit flipped.

`

41

``

`-

f64::NAN.to_bits() ^ 0x800A_AAAA_AAAA_AAAA,

`

42

``

`-

f64::NAN.to_bits() ^ 0x8005_5555_5555_5555,

`

43

``

`-

]);

`

44

``

`-

for bits in bits_f64 {

`

45

``

`-

assert_eq!(identity(f64::from_bits(bits)).to_bits(), bits);

`

46

``

`-

// Test types that are returned as scalar pairs.

`

47

``

`-

assert_eq!(identity((f64::from_bits(bits), 42)).0.to_bits(), bits);

`

48

``

`-

assert_eq!(identity((42, f64::from_bits(bits))).1.to_bits(), bits);

`

49

``

`-

let (a, b) = identity((f64::from_bits(bits), f64::from_bits(bits)));

`

50

``

`-

assert_eq!((a.to_bits(), b.to_bits()), (bits, bits));

`

``

33

`+

let bits_f64 = std::hint::black_box([

`

``

34

`+

4.2_f64.to_bits(),

`

``

35

`+

f64::INFINITY.to_bits(),

`

``

36

`+

f64::NEG_INFINITY.to_bits(),

`

``

37

`+

f64::NAN.to_bits(),

`

``

38

`+

// These two masks cover all the mantissa bits. One of them is a signalling NaN, the

`

``

39

`+

// other is quiet.

`

``

40

`` +

// Similar to the masks in test_float_bits_conv in library/std/src/f64/tests.rs

``

``

41

`+

f64::NAN.to_bits() ^ 0x000A_AAAA_AAAA_AAAA,

`

``

42

`+

f64::NAN.to_bits() ^ 0x0005_5555_5555_5555,

`

``

43

`+

// Same as above but with the sign bit flipped.

`

``

44

`+

f64::NAN.to_bits() ^ 0x800A_AAAA_AAAA_AAAA,

`

``

45

`+

f64::NAN.to_bits() ^ 0x8005_5555_5555_5555,

`

``

46

`+

]);

`

``

47

`+

for bits in bits_f64 {

`

``

48

`+

assert_eq!(identity(f64::from_bits(bits)).to_bits(), bits);

`

``

49

`+

// Test types that are returned as scalar pairs.

`

``

50

`+

assert_eq!(identity((f64::from_bits(bits), 42)).0.to_bits(), bits);

`

``

51

`+

assert_eq!(identity((42, f64::from_bits(bits))).1.to_bits(), bits);

`

``

52

`+

let (a, b) = identity((f64::from_bits(bits), f64::from_bits(bits)));

`

``

53

`+

assert_eq!((a.to_bits(), b.to_bits()), (bits, bits));

`

``

54

`+

}

`

51

55

`}

`

52

56

`}

`

53

57

``