1 // RUN: %clang_builtins %s %librt -o %t && %run %t
3 #define DOUBLE_PRECISION
9 int test__compiler_rt_fmax(fp_t x
, fp_t y
) {
10 fp_t crt_value
= __compiler_rt_fmax(x
, y
);
11 fp_t libm_value
= fmax(x
, y
);
12 // Consider +0 and -0 equal, and also disregard the sign/payload of two NaNs.
13 if (crt_value
!= libm_value
&&
14 !(crt_isnan(crt_value
) && crt_isnan(libm_value
))) {
15 printf("error: in __compiler_rt_fmax(%a [%llX], %a [%llX]) = %a [%llX] "
17 x
, (unsigned long long)toRep(x
),
18 y
, (unsigned long long)toRep(y
),
19 crt_value
, (unsigned long long)toRep(crt_value
),
20 libm_value
, (unsigned long long)toRep(libm_value
));
27 -NAN
, NAN
, -INFINITY
, INFINITY
, -0.0, 0.0, -1, 1, -2, 2,
28 -0x1.0p
-1023, 0x1.0p
-1023, -0x1.0p
-1024, 0x1.0p
-1024, // subnormals
29 -1.001, 1.001, -1.002, 1.002,
33 const unsigned N
= sizeof(cases
) / sizeof(cases
[0]);
35 for (i
= 0; i
< N
; ++i
) {
36 for (j
= 0; j
< N
; ++j
) {
37 if (test__compiler_rt_fmax(cases
[i
], cases
[j
])) return 1;