1 /* Test various operators on __fp16 and mixed __fp16/float operands. */
5 #define CHECK(e,r) assert ((e) == r)
6 #define CHECK2(e,r) (assert ((e) == r), temp = (e), assert (temp == r))
7 #define TEST(e) assert (e)
8 #define TESTNOT(e) assert (!(e))
10 volatile __fp16 h0
= 0.0;
11 volatile __fp16 h1
= 1.0;
12 volatile __fp16 h42
= 42.0;
13 volatile __fp16 hm2
= -2.0;
16 volatile float f0
= 0.0;
17 volatile float f1
= 1.0;
18 volatile float f42
= 42.0;
19 volatile float fm2
= -2.0;
41 CHECK2 (h42
* hm2
, -84.0);
42 CHECK2 (h42
* (__fp16
) -2.0, -84.0);
43 CHECK2 (h42
* fm2
, -84.0);
44 CHECK2 (f42
* hm2
, -84.0);
46 CHECK2 (h42
/ hm2
, -21.0);
47 CHECK2 (h42
/ (__fp16
) -2.0, -21.0);
48 CHECK2 (h42
/ fm2
, -21.0);
49 CHECK2 (f42
/ hm2
, -21.0);
51 CHECK2 (hm2
+ h42
, 40.0);
52 CHECK2 ((__fp16
)-2.0 + h42
, 40.0);
53 CHECK2 (hm2
+ f42
, 40.0);
54 CHECK2 (fm2
+ h42
, 40.0);
56 CHECK2 (hm2
- h42
, -44.0);
57 CHECK2 ((__fp16
)-2.0 - h42
, -44.0);
58 CHECK2 (hm2
- f42
, -44.0);
59 CHECK2 (fm2
- h42
, -44.0);
62 TEST (hm2
< (__fp16
)42.0);
67 TEST ((__fp16
)42.0 > hm2
);
72 TEST (hm2
<= (__fp16
)42.0);
77 TEST (h42
>= (__fp16
)-2.0);
83 TEST (h1
== (__fp16
)1.0);
89 TESTNOT (h1
!= (__fp16
)1.0);
93 CHECK2 ((h1
? hm2
: h42
), -2.0);
94 CHECK2 ((h0
? hm2
: h42
), 42.0);
96 CHECK (h0
= h42
, 42.0);
98 CHECK (h0
= (__fp16
)-2.0, -2.0);
100 CHECK (h0
= f0
, 0.0);
103 CHECK (h0
+= h1
, 1.0);
105 CHECK (h0
+= (__fp16
)1.0, 2.0);
107 CHECK (h0
+= fm2
, 0.0);
110 CHECK (h0
-= h1
, -1.0);
112 CHECK (h0
-= (__fp16
)1.0, -2.0);
114 CHECK (h0
-= fm2
, 0.0);
118 CHECK (h0
*= hm2
, 4.0);
120 CHECK (h0
*= (__fp16
)-2.0, -8.0);
122 CHECK (h0
*= fm2
, 16.0);
125 CHECK (h0
/= hm2
, -8.0);
127 CHECK (h0
/= (__fp16
)-2.0, 4.0);
129 CHECK (h0
/= fm2
, -2.0);
132 CHECK ((h0
, h1
), 1.0);