1 /* Tests for _FloatN / _FloatNx types: test conversions. */
3 /* { dg-options "" } */
4 /* { dg-add-options float16 } */
5 /* { dg-add-options float32 } */
6 /* { dg-add-options float64 } */
7 /* { dg-add-options float128 } */
8 /* { dg-add-options float32x } */
9 /* { dg-add-options float64x } */
10 /* { dg-add-options float128x } */
11 /* { dg-require-effective-target float32 } */
12 /* { dg-require-effective-target floatn_nx_runtime } */
14 #define __STDC_WANT_IEC_60559_TYPES_EXT__
18 # define _Float16 _Float32
19 # define FLT16_MAX FLT32_MAX
20 # define FLT16_MANT_DIG FLT32_MANT_DIG
21 # define FLT16_EPSILON FLT32_EPSILON
25 # define _Float64 _Float32
26 # define FLT64_MAX FLT32_MAX
27 # define FLT64_MANT_DIG FLT32_MANT_DIG
28 # define FLT64_EPSILON FLT32_EPSILON
32 # define _Float128 _Float32
33 # define FLT128_MAX FLT32_MAX
34 # define FLT128_MANT_DIG FLT32_MANT_DIG
35 # define FLT128_EPSILON FLT32_EPSILON
39 # define _Float32x _Float32
40 # define FLT32X_MAX FLT32_MAX
41 # define FLT32X_MANT_DIG FLT32_MANT_DIG
42 # define FLT32X_EPSILON FLT32_EPSILON
46 # define _Float64x _Float32
47 # define FLT64X_MAX FLT32_MAX
48 # define FLT64X_MANT_DIG FLT32_MANT_DIG
49 # define FLT64X_EPSILON FLT32_EPSILON
53 # define _Float128x _Float32
54 # define FLT128X_MAX FLT32_MAX
55 # define FLT128X_MANT_DIG FLT32_MANT_DIG
56 # define FLT128X_EPSILON FLT32_EPSILON
59 #define CONCATX(X, Y) X ## Y
60 #define CONCAT(X, Y) CONCATX (X, Y)
62 extern void exit (int);
63 extern void abort (void);
65 #define DO_TEST(TYPE1, PFX1, TYPE2, PFX2) \
68 volatile TYPE1 a = (TYPE1) 1 + CONCAT (PFX1, _EPSILON); \
69 volatile TYPE2 b = (TYPE2) a; \
70 volatile TYPE2 expected; \
71 if (CONCAT (PFX2, _MANT_DIG) < CONCAT (PFX1, _MANT_DIG)) \
72 expected = (TYPE2) 1; \
74 expected = (TYPE2) 1 + (TYPE2) CONCAT (PFX1, _EPSILON); \
80 #define DO_TEST1(TYPE1, PFX1) \
83 DO_TEST (TYPE1, PFX1, _Float16, FLT16); \
84 DO_TEST (TYPE1, PFX1, _Float32, FLT32); \
85 DO_TEST (TYPE1, PFX1, _Float64, FLT64); \
86 DO_TEST (TYPE1, PFX1, _Float128, FLT128); \
87 DO_TEST (TYPE1, PFX1, _Float32x, FLT32X); \
88 DO_TEST (TYPE1, PFX1, _Float64x, FLT64X); \
89 DO_TEST (TYPE1, PFX1, _Float128x, FLT128X); \
96 DO_TEST1 (_Float16
, FLT16
);
97 DO_TEST1 (_Float32
, FLT32
);
98 DO_TEST1 (_Float64
, FLT64
);
99 DO_TEST1 (_Float128
, FLT128
);
100 DO_TEST1 (_Float32x
, FLT32X
);
101 DO_TEST1 (_Float64x
, FLT64X
);
102 DO_TEST1 (_Float128x
, FLT128X
);