blob: 7254141a2749f367202b09bd320fdce1544ebe9a [file] [log] [blame]
Weiming Zhao9b7bbec2017-03-21 05:32:51 +00001// RUN: %clang_builtins %s %librt -o %t && %run %t
Joerg Sonnenbergerfee19282014-05-29 01:00:39 +00002//===--------------- extenddftf2_test.c - Test __extenddftf2 --------------===//
3//
4// The LLVM Compiler Infrastructure
5//
6// This file is dual licensed under the MIT and the University of Illinois Open
7// Source Licenses. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10//
11// This file tests __extenddftf2 for the compiler_rt library.
12//
13//===----------------------------------------------------------------------===//
14
Derek Schuffeb0ebc32015-04-24 15:45:57 +000015#include "int_lib.h"
Joerg Sonnenbergerfee19282014-05-29 01:00:39 +000016#include <stdio.h>
17
18#if __LDBL_MANT_DIG__ == 113
19
20#include "fp_test.h"
21
Derek Schuffeb0ebc32015-04-24 15:45:57 +000022COMPILER_RT_ABI long double __extenddftf2(double a);
Joerg Sonnenbergerfee19282014-05-29 01:00:39 +000023
24int test__extenddftf2(double a, uint64_t expectedHi, uint64_t expectedLo)
25{
26 long double x = __extenddftf2(a);
27 int ret = compareResultLD(x, expectedHi, expectedLo);
28
29 if (ret){
30 printf("error in test__extenddftf2(%f) = %.20Lf, "
31 "expected %.20Lf\n", a, x, fromRep128(expectedHi, expectedLo));
32 }
33 return ret;
34}
35
36char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
37
38#endif
39
40int main()
41{
42#if __LDBL_MANT_DIG__ == 113
43 // qNaN
44 if (test__extenddftf2(makeQNaN64(),
45 UINT64_C(0x7fff800000000000),
46 UINT64_C(0x0)))
47 return 1;
48 // NaN
49 if (test__extenddftf2(makeNaN64(UINT64_C(0x7100000000000)),
50 UINT64_C(0x7fff710000000000),
51 UINT64_C(0x0)))
52 return 1;
53 // inf
54 if (test__extenddftf2(makeInf64(),
55 UINT64_C(0x7fff000000000000),
56 UINT64_C(0x0)))
57 return 1;
58 // zero
59 if (test__extenddftf2(0.0, UINT64_C(0x0), UINT64_C(0x0)))
60 return 1;
61
62 if (test__extenddftf2(0x1.23456789abcdefp+5,
63 UINT64_C(0x400423456789abcd),
64 UINT64_C(0xf000000000000000)))
65 return 1;
66 if (test__extenddftf2(0x1.edcba987654321fp-9,
67 UINT64_C(0x3ff6edcba9876543),
68 UINT64_C(0x2000000000000000)))
69 return 1;
70 if (test__extenddftf2(0x1.23456789abcdefp+45,
71 UINT64_C(0x402c23456789abcd),
72 UINT64_C(0xf000000000000000)))
73 return 1;
74 if (test__extenddftf2(0x1.edcba987654321fp-45,
75 UINT64_C(0x3fd2edcba9876543),
76 UINT64_C(0x2000000000000000)))
77 return 1;
78
79#else
80 printf("skipped\n");
81
82#endif
83 return 0;
84}