1 /* Test instructions loading floating-point constants. */
6 volatile long double ld_res
;
13 /* Round to nearest. */
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");
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");
31 /* Round toward zero. */
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");
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");
50 /* Round to nearest. */
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");
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");
68 /* Round toward zero. */
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");
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");
87 /* Round to nearest. */
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");
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");
105 /* Round toward zero. */
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");
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");
124 /* Round to nearest. */
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");
133 /* Round downward. */
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");
142 /* Round toward zero. */
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");
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");
161 /* Round to nearest. */
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");
170 /* Round downward. */
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");
179 /* Round toward zero. */
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");
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");