1*41602807SJoseph Myers /* Test pseudo-denormal operations.  */
2*41602807SJoseph Myers 
3*41602807SJoseph Myers #include <stdint.h>
4*41602807SJoseph Myers #include <stdio.h>
5*41602807SJoseph Myers 
6*41602807SJoseph Myers union u {
7*41602807SJoseph Myers     struct { uint64_t sig; uint16_t sign_exp; } s;
8*41602807SJoseph Myers     long double ld;
9*41602807SJoseph Myers };
10*41602807SJoseph Myers 
11*41602807SJoseph Myers volatile union u ld_pseudo_m16382 = { .s = { UINT64_C(1) << 63, 0 } };
12*41602807SJoseph Myers 
13*41602807SJoseph Myers volatile long double ld_res;
14*41602807SJoseph Myers 
15*41602807SJoseph Myers int main(void)
16*41602807SJoseph Myers {
17*41602807SJoseph Myers     int ret = 0;
18*41602807SJoseph Myers     ld_res = ld_pseudo_m16382.ld + ld_pseudo_m16382.ld;
19*41602807SJoseph Myers     if (ld_res != 0x1p-16381L) {
20*41602807SJoseph Myers         printf("FAIL: pseudo-denormal add\n");
21*41602807SJoseph Myers         ret = 1;
22*41602807SJoseph Myers     }
23*41602807SJoseph Myers     return ret;
24*41602807SJoseph Myers }
25