xref: /aosp_15_r20/external/compiler-rt/test/builtins/Unit/extendhfsf2_test.c (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot //===--------------- extendhfsf2_test.c - Test __extendhfsf2 --------------===//
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot //                     The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot //
5*7c3d14c8STreehugger Robot // This file is dual licensed under the MIT and the University of Illinois Open
6*7c3d14c8STreehugger Robot // Source Licenses. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot //
8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
9*7c3d14c8STreehugger Robot //
10*7c3d14c8STreehugger Robot // This file tests __extendhfsf2 for the compiler_rt library.
11*7c3d14c8STreehugger Robot //
12*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
13*7c3d14c8STreehugger Robot 
14*7c3d14c8STreehugger Robot #include <stdio.h>
15*7c3d14c8STreehugger Robot 
16*7c3d14c8STreehugger Robot #include "fp_test.h"
17*7c3d14c8STreehugger Robot 
18*7c3d14c8STreehugger Robot float __extendhfsf2(uint16_t a);
19*7c3d14c8STreehugger Robot 
test__extendhfsf2(uint16_t a,float expected)20*7c3d14c8STreehugger Robot int test__extendhfsf2(uint16_t a, float expected)
21*7c3d14c8STreehugger Robot {
22*7c3d14c8STreehugger Robot     float x = __extendhfsf2(a);
23*7c3d14c8STreehugger Robot     int ret = compareResultH(x, expected);
24*7c3d14c8STreehugger Robot 
25*7c3d14c8STreehugger Robot     if (ret){
26*7c3d14c8STreehugger Robot         printf("error in test__extendhfsf2(%#.4x) = %f, "
27*7c3d14c8STreehugger Robot                "expected %f\n", a, x, expected);
28*7c3d14c8STreehugger Robot     }
29*7c3d14c8STreehugger Robot     return ret;
30*7c3d14c8STreehugger Robot }
31*7c3d14c8STreehugger Robot 
32*7c3d14c8STreehugger Robot char assumption_1[sizeof(__fp16) * CHAR_BIT == 16] = {0};
33*7c3d14c8STreehugger Robot 
main()34*7c3d14c8STreehugger Robot int main()
35*7c3d14c8STreehugger Robot {
36*7c3d14c8STreehugger Robot     // qNaN
37*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7e00),
38*7c3d14c8STreehugger Robot                           makeQNaN32()))
39*7c3d14c8STreehugger Robot         return 1;
40*7c3d14c8STreehugger Robot     // NaN
41*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7e00),
42*7c3d14c8STreehugger Robot                           makeNaN32(UINT32_C(0x8000))))
43*7c3d14c8STreehugger Robot         return 1;
44*7c3d14c8STreehugger Robot     // inf
45*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7c00),
46*7c3d14c8STreehugger Robot                           makeInf32()))
47*7c3d14c8STreehugger Robot         return 1;
48*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0xfc00),
49*7c3d14c8STreehugger Robot                           -makeInf32()))
50*7c3d14c8STreehugger Robot         return 1;
51*7c3d14c8STreehugger Robot     // zero
52*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x0),
53*7c3d14c8STreehugger Robot                           0.0f))
54*7c3d14c8STreehugger Robot         return 1;
55*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x8000),
56*7c3d14c8STreehugger Robot                           -0.0f))
57*7c3d14c8STreehugger Robot         return 1;
58*7c3d14c8STreehugger Robot 
59*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x4248),
60*7c3d14c8STreehugger Robot                           3.1415926535f))
61*7c3d14c8STreehugger Robot         return 1;
62*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0xc248),
63*7c3d14c8STreehugger Robot                           -3.1415926535f))
64*7c3d14c8STreehugger Robot         return 1;
65*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7c00),
66*7c3d14c8STreehugger Robot                           0x1.987124876876324p+100f))
67*7c3d14c8STreehugger Robot         return 1;
68*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x6e62),
69*7c3d14c8STreehugger Robot                           0x1.988p+12f))
70*7c3d14c8STreehugger Robot         return 1;
71*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x3c00),
72*7c3d14c8STreehugger Robot                           0x1.0p+0f))
73*7c3d14c8STreehugger Robot         return 1;
74*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x0400),
75*7c3d14c8STreehugger Robot                           0x1.0p-14f))
76*7c3d14c8STreehugger Robot         return 1;
77*7c3d14c8STreehugger Robot     // denormal
78*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x0010),
79*7c3d14c8STreehugger Robot                           0x1.0p-20f))
80*7c3d14c8STreehugger Robot         return 1;
81*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x0001),
82*7c3d14c8STreehugger Robot                           0x1.0p-24f))
83*7c3d14c8STreehugger Robot         return 1;
84*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x8001),
85*7c3d14c8STreehugger Robot                           -0x1.0p-24f))
86*7c3d14c8STreehugger Robot         return 1;
87*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x0001),
88*7c3d14c8STreehugger Robot                           0x1.5p-25f))
89*7c3d14c8STreehugger Robot         return 1;
90*7c3d14c8STreehugger Robot     // and back to zero
91*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x0000),
92*7c3d14c8STreehugger Robot                           0x1.0p-25f))
93*7c3d14c8STreehugger Robot         return 1;
94*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x8000),
95*7c3d14c8STreehugger Robot                           -0x1.0p-25f))
96*7c3d14c8STreehugger Robot         return 1;
97*7c3d14c8STreehugger Robot     // max (precise)
98*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7bff),
99*7c3d14c8STreehugger Robot                           65504.0f))
100*7c3d14c8STreehugger Robot         return 1;
101*7c3d14c8STreehugger Robot     // max (rounded)
102*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7bff),
103*7c3d14c8STreehugger Robot                           65504.0f))
104*7c3d14c8STreehugger Robot         return 1;
105*7c3d14c8STreehugger Robot     // max (to +inf)
106*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0x7c00),
107*7c3d14c8STreehugger Robot                           makeInf32()))
108*7c3d14c8STreehugger Robot         return 1;
109*7c3d14c8STreehugger Robot     if (test__extendhfsf2(UINT16_C(0xfc00),
110*7c3d14c8STreehugger Robot                           -makeInf32()))
111*7c3d14c8STreehugger Robot         return 1;
112*7c3d14c8STreehugger Robot     return 0;
113*7c3d14c8STreehugger Robot }
114