1
2
3#include <stdint.h>
4#include <stdio.h>
5
6volatile long double ld_res;
7
8int main(void)
9{
10 short cw;
11 int ret = 0;
12
13
14 __asm__ volatile ("fnstcw %0" : "=m" (cw));
15 cw = (cw & ~0xc00) | 0x000;
16 __asm__ volatile ("fldcw %0" : : "m" (cw));
17 __asm__ volatile ("fldl2t" : "=t" (ld_res));
18 if (ld_res != 0x3.5269e12f346e2bf8p+0L) {
19 printf("FAIL: fldl2t N\n");
20 ret = 1;
21 }
22
23 __asm__ volatile ("fnstcw %0" : "=m" (cw));
24 cw = (cw & ~0xc00) | 0x400;
25 __asm__ volatile ("fldcw %0" : : "m" (cw));
26 __asm__ volatile ("fldl2t" : "=t" (ld_res));
27 if (ld_res != 0x3.5269e12f346e2bf8p+0L) {
28 printf("FAIL: fldl2t D\n");
29 ret = 1;
30 }
31
32 __asm__ volatile ("fnstcw %0" : "=m" (cw));
33 cw = (cw & ~0xc00) | 0xc00;
34 __asm__ volatile ("fldcw %0" : : "m" (cw));
35 __asm__ volatile ("fldl2t" : "=t" (ld_res));
36 if (ld_res != 0x3.5269e12f346e2bf8p+0L) {
37 printf("FAIL: fldl2t Z\n");
38 ret = 1;
39 }
40
41 __asm__ volatile ("fnstcw %0" : "=m" (cw));
42 cw = (cw & ~0xc00) | 0x800;
43 __asm__ volatile ("fldcw %0" : : "m" (cw));
44 __asm__ volatile ("fldl2t" : "=t" (ld_res));
45 if (ld_res != 0x3.5269e12f346e2bfcp+0L) {
46 printf("FAIL: fldl2t U\n");
47 ret = 1;
48 }
49
50
51 __asm__ volatile ("fnstcw %0" : "=m" (cw));
52 cw = (cw & ~0xc00) | 0x000;
53 __asm__ volatile ("fldcw %0" : : "m" (cw));
54 __asm__ volatile ("fldl2e" : "=t" (ld_res));
55 if (ld_res != 0x1.71547652b82fe178p+0L) {
56 printf("FAIL: fldl2e N\n");
57 ret = 1;
58 }
59
60 __asm__ volatile ("fnstcw %0" : "=m" (cw));
61 cw = (cw & ~0xc00) | 0x400;
62 __asm__ volatile ("fldcw %0" : : "m" (cw));
63 __asm__ volatile ("fldl2e" : "=t" (ld_res));
64 if (ld_res != 0x1.71547652b82fe176p+0L) {
65 printf("FAIL: fldl2e D\n");
66 ret = 1;
67 }
68
69 __asm__ volatile ("fnstcw %0" : "=m" (cw));
70 cw = (cw & ~0xc00) | 0xc00;
71 __asm__ volatile ("fldcw %0" : : "m" (cw));
72 __asm__ volatile ("fldl2e" : "=t" (ld_res));
73 if (ld_res != 0x1.71547652b82fe176p+0L) {
74 printf("FAIL: fldl2e Z\n");
75 ret = 1;
76 }
77
78 __asm__ volatile ("fnstcw %0" : "=m" (cw));
79 cw = (cw & ~0xc00) | 0x800;
80 __asm__ volatile ("fldcw %0" : : "m" (cw));
81 __asm__ volatile ("fldl2e" : "=t" (ld_res));
82 if (ld_res != 0x1.71547652b82fe178p+0L) {
83 printf("FAIL: fldl2e U\n");
84 ret = 1;
85 }
86
87
88 __asm__ volatile ("fnstcw %0" : "=m" (cw));
89 cw = (cw & ~0xc00) | 0x000;
90 __asm__ volatile ("fldcw %0" : : "m" (cw));
91 __asm__ volatile ("fldpi" : "=t" (ld_res));
92 if (ld_res != 0x3.243f6a8885a308d4p+0L) {
93 printf("FAIL: fldpi N\n");
94 ret = 1;
95 }
96
97 __asm__ volatile ("fnstcw %0" : "=m" (cw));
98 cw = (cw & ~0xc00) | 0x400;
99 __asm__ volatile ("fldcw %0" : : "m" (cw));
100 __asm__ volatile ("fldpi" : "=t" (ld_res));
101 if (ld_res != 0x3.243f6a8885a308dp+0L) {
102 printf("FAIL: fldpi D\n");
103 ret = 1;
104 }
105
106 __asm__ volatile ("fnstcw %0" : "=m" (cw));
107 cw = (cw & ~0xc00) | 0xc00;
108 __asm__ volatile ("fldcw %0" : : "m" (cw));
109 __asm__ volatile ("fldpi" : "=t" (ld_res));
110 if (ld_res != 0x3.243f6a8885a308dp+0L) {
111 printf("FAIL: fldpi Z\n");
112 ret = 1;
113 }
114
115 __asm__ volatile ("fnstcw %0" : "=m" (cw));
116 cw = (cw & ~0xc00) | 0x800;
117 __asm__ volatile ("fldcw %0" : : "m" (cw));
118 __asm__ volatile ("fldpi" : "=t" (ld_res));
119 if (ld_res != 0x3.243f6a8885a308d4p+0L) {
120 printf("FAIL: fldpi U\n");
121 ret = 1;
122 }
123
124
125 __asm__ volatile ("fnstcw %0" : "=m" (cw));
126 cw = (cw & ~0xc00) | 0x000;
127 __asm__ volatile ("fldcw %0" : : "m" (cw));
128 __asm__ volatile ("fldlg2" : "=t" (ld_res));
129 if (ld_res != 0x4.d104d427de7fbcc8p-4L) {
130 printf("FAIL: fldlg2 N\n");
131 ret = 1;
132 }
133
134 __asm__ volatile ("fnstcw %0" : "=m" (cw));
135 cw = (cw & ~0xc00) | 0x400;
136 __asm__ volatile ("fldcw %0" : : "m" (cw));
137 __asm__ volatile ("fldlg2" : "=t" (ld_res));
138 if (ld_res != 0x4.d104d427de7fbccp-4L) {
139 printf("FAIL: fldlg2 D\n");
140 ret = 1;
141 }
142
143 __asm__ volatile ("fnstcw %0" : "=m" (cw));
144 cw = (cw & ~0xc00) | 0xc00;
145 __asm__ volatile ("fldcw %0" : : "m" (cw));
146 __asm__ volatile ("fldlg2" : "=t" (ld_res));
147 if (ld_res != 0x4.d104d427de7fbccp-4L) {
148 printf("FAIL: fldlg2 Z\n");
149 ret = 1;
150 }
151
152 __asm__ volatile ("fnstcw %0" : "=m" (cw));
153 cw = (cw & ~0xc00) | 0x800;
154 __asm__ volatile ("fldcw %0" : : "m" (cw));
155 __asm__ volatile ("fldlg2" : "=t" (ld_res));
156 if (ld_res != 0x4.d104d427de7fbcc8p-4L) {
157 printf("FAIL: fldlg2 U\n");
158 ret = 1;
159 }
160
161
162 __asm__ volatile ("fnstcw %0" : "=m" (cw));
163 cw = (cw & ~0xc00) | 0x000;
164 __asm__ volatile ("fldcw %0" : : "m" (cw));
165 __asm__ volatile ("fldln2" : "=t" (ld_res));
166 if (ld_res != 0xb.17217f7d1cf79acp-4L) {
167 printf("FAIL: fldln2 N\n");
168 ret = 1;
169 }
170
171 __asm__ volatile ("fnstcw %0" : "=m" (cw));
172 cw = (cw & ~0xc00) | 0x400;
173 __asm__ volatile ("fldcw %0" : : "m" (cw));
174 __asm__ volatile ("fldln2" : "=t" (ld_res));
175 if (ld_res != 0xb.17217f7d1cf79abp-4L) {
176 printf("FAIL: fldln2 D\n");
177 ret = 1;
178 }
179
180 __asm__ volatile ("fnstcw %0" : "=m" (cw));
181 cw = (cw & ~0xc00) | 0xc00;
182 __asm__ volatile ("fldcw %0" : : "m" (cw));
183 __asm__ volatile ("fldln2" : "=t" (ld_res));
184 if (ld_res != 0xb.17217f7d1cf79abp-4L) {
185 printf("FAIL: fldln2 Z\n");
186 ret = 1;
187 }
188
189 __asm__ volatile ("fnstcw %0" : "=m" (cw));
190 cw = (cw & ~0xc00) | 0x800;
191 __asm__ volatile ("fldcw %0" : : "m" (cw));
192 __asm__ volatile ("fldln2" : "=t" (ld_res));
193 if (ld_res != 0xb.17217f7d1cf79acp-4L) {
194 printf("FAIL: fldln2 U\n");
195 ret = 1;
196 }
197
198 return ret;
199}
200