systfloat.S revision 1.1 1 1.1 ross
2 1.1 ross /*
3 1.1 ross ===============================================================================
4 1.1 ross
5 1.1 ross This GNU assembler source file is part of TestFloat, Release 2a, a package
6 1.1 ross of programs for testing the correctness of floating-point arithmetic
7 1.1 ross complying to the IEC/IEEE Standard for Floating-Point.
8 1.1 ross
9 1.1 ross Written by John R. Hauser. More information is available through the Web
10 1.1 ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
11 1.1 ross
12 1.1 ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
13 1.1 ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
14 1.1 ross TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
15 1.1 ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
16 1.1 ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
17 1.1 ross
18 1.1 ross Derivative works are acceptable, even for commercial purposes, so long as
19 1.1 ross (1) they include prominent notice that the work is derivative, and (2) they
20 1.1 ross include prominent notice akin to these four paragraphs for those parts of
21 1.1 ross this code that are retained.
22 1.1 ross
23 1.1 ross ===============================================================================
24 1.1 ross */
25 1.1 ross
26 1.1 ross .text
27 1.1 ross
28 1.1 ross /*
29 1.1 ross -------------------------------------------------------------------------------
30 1.1 ross -------------------------------------------------------------------------------
31 1.1 ross */
32 1.1 ross .align 2
33 1.1 ross .globl _syst_int32_to_floatx80
34 1.1 ross _syst_int32_to_floatx80:
35 1.1 ross fildl 8(%esp)
36 1.1 ross movl 4(%esp),%eax
37 1.1 ross fstpt (%eax)
38 1.1 ross ret $4
39 1.1 ross
40 1.1 ross /*
41 1.1 ross -------------------------------------------------------------------------------
42 1.1 ross -------------------------------------------------------------------------------
43 1.1 ross */
44 1.1 ross .align 2
45 1.1 ross .globl _syst_int64_to_floatx80
46 1.1 ross _syst_int64_to_floatx80:
47 1.1 ross fildq 8(%esp)
48 1.1 ross movl 4(%esp),%eax
49 1.1 ross fstpt (%eax)
50 1.1 ross ret $4
51 1.1 ross
52 1.1 ross /*
53 1.1 ross -------------------------------------------------------------------------------
54 1.1 ross -------------------------------------------------------------------------------
55 1.1 ross */
56 1.1 ross .align 2
57 1.1 ross .globl _syst_float32_to_floatx80
58 1.1 ross _syst_float32_to_floatx80:
59 1.1 ross flds 8(%esp)
60 1.1 ross movl 4(%esp),%eax
61 1.1 ross fstpt (%eax)
62 1.1 ross ret $4
63 1.1 ross
64 1.1 ross /*
65 1.1 ross -------------------------------------------------------------------------------
66 1.1 ross -------------------------------------------------------------------------------
67 1.1 ross */
68 1.1 ross .align 2
69 1.1 ross .globl _syst_float64_to_floatx80
70 1.1 ross _syst_float64_to_floatx80:
71 1.1 ross fldl 8(%esp)
72 1.1 ross movl 4(%esp),%eax
73 1.1 ross fstpt (%eax)
74 1.1 ross ret $4
75 1.1 ross
76 1.1 ross /*
77 1.1 ross -------------------------------------------------------------------------------
78 1.1 ross -------------------------------------------------------------------------------
79 1.1 ross */
80 1.1 ross .align 2
81 1.1 ross .globl _syst_floatx80_to_int32
82 1.1 ross _syst_floatx80_to_int32:
83 1.1 ross fldt 4(%esp)
84 1.1 ross subl $4,%esp
85 1.1 ross fistpl (%esp)
86 1.1 ross movl (%esp),%eax
87 1.1 ross addl $4,%esp
88 1.1 ross ret
89 1.1 ross
90 1.1 ross /*
91 1.1 ross -------------------------------------------------------------------------------
92 1.1 ross -------------------------------------------------------------------------------
93 1.1 ross */
94 1.1 ross .align 2
95 1.1 ross .globl _syst_floatx80_to_int64
96 1.1 ross _syst_floatx80_to_int64:
97 1.1 ross fldt 4(%esp)
98 1.1 ross subl $8,%esp
99 1.1 ross fistpq (%esp)
100 1.1 ross movl (%esp),%eax
101 1.1 ross movl 4(%esp),%edx
102 1.1 ross addl $8,%esp
103 1.1 ross ret
104 1.1 ross
105 1.1 ross /*
106 1.1 ross -------------------------------------------------------------------------------
107 1.1 ross -------------------------------------------------------------------------------
108 1.1 ross */
109 1.1 ross .align 2
110 1.1 ross .globl _syst_floatx80_to_float32
111 1.1 ross _syst_floatx80_to_float32:
112 1.1 ross fldt 4(%esp)
113 1.1 ross subl $4,%esp
114 1.1 ross fstps (%esp)
115 1.1 ross movl (%esp),%eax
116 1.1 ross addl $4,%esp
117 1.1 ross ret
118 1.1 ross
119 1.1 ross /*
120 1.1 ross -------------------------------------------------------------------------------
121 1.1 ross -------------------------------------------------------------------------------
122 1.1 ross */
123 1.1 ross .align 2
124 1.1 ross .globl _syst_floatx80_to_float64
125 1.1 ross _syst_floatx80_to_float64:
126 1.1 ross fldt 4(%esp)
127 1.1 ross subl $8,%esp
128 1.1 ross fstpl (%esp)
129 1.1 ross movl 4(%esp),%edx
130 1.1 ross movl (%esp),%eax
131 1.1 ross addl $8,%esp
132 1.1 ross ret
133 1.1 ross
134 1.1 ross /*
135 1.1 ross -------------------------------------------------------------------------------
136 1.1 ross -------------------------------------------------------------------------------
137 1.1 ross */
138 1.1 ross .align 2
139 1.1 ross .globl _syst_floatx80_round_to_int
140 1.1 ross _syst_floatx80_round_to_int:
141 1.1 ross fldt 8(%esp)
142 1.1 ross frndint
143 1.1 ross movl 4(%esp),%eax
144 1.1 ross fstpt (%eax)
145 1.1 ross ret $4
146 1.1 ross
147 1.1 ross /*
148 1.1 ross -------------------------------------------------------------------------------
149 1.1 ross -------------------------------------------------------------------------------
150 1.1 ross */
151 1.1 ross .align 2
152 1.1 ross .globl _syst_floatx80_add
153 1.1 ross _syst_floatx80_add:
154 1.1 ross fldt 8(%esp)
155 1.1 ross fldt 20(%esp)
156 1.1 ross faddp
157 1.1 ross movl 4(%esp),%eax
158 1.1 ross fstpt (%eax)
159 1.1 ross ret $4
160 1.1 ross
161 1.1 ross /*
162 1.1 ross -------------------------------------------------------------------------------
163 1.1 ross -------------------------------------------------------------------------------
164 1.1 ross */
165 1.1 ross .align 2
166 1.1 ross .globl _syst_floatx80_sub
167 1.1 ross _syst_floatx80_sub:
168 1.1 ross fldt 8(%esp)
169 1.1 ross fldt 20(%esp)
170 1.1 ross fsubrp
171 1.1 ross movl 4(%esp),%eax
172 1.1 ross fstpt (%eax)
173 1.1 ross ret $4
174 1.1 ross
175 1.1 ross /*
176 1.1 ross -------------------------------------------------------------------------------
177 1.1 ross -------------------------------------------------------------------------------
178 1.1 ross */
179 1.1 ross .align 2
180 1.1 ross .globl _syst_floatx80_mul
181 1.1 ross _syst_floatx80_mul:
182 1.1 ross fldt 8(%esp)
183 1.1 ross fldt 20(%esp)
184 1.1 ross fmulp
185 1.1 ross movl 4(%esp),%eax
186 1.1 ross fstpt (%eax)
187 1.1 ross ret $4
188 1.1 ross
189 1.1 ross /*
190 1.1 ross -------------------------------------------------------------------------------
191 1.1 ross -------------------------------------------------------------------------------
192 1.1 ross */
193 1.1 ross .align 2
194 1.1 ross .globl _syst_floatx80_div
195 1.1 ross _syst_floatx80_div:
196 1.1 ross fldt 8(%esp)
197 1.1 ross fldt 20(%esp)
198 1.1 ross fdivrp
199 1.1 ross movl 4(%esp),%eax
200 1.1 ross fstpt (%eax)
201 1.1 ross ret $4
202 1.1 ross
203 1.1 ross /*
204 1.1 ross -------------------------------------------------------------------------------
205 1.1 ross -------------------------------------------------------------------------------
206 1.1 ross */
207 1.1 ross .align 2
208 1.1 ross .globl _syst_floatx80_rem
209 1.1 ross _syst_floatx80_rem:
210 1.1 ross fldt 20(%esp)
211 1.1 ross fldt 8(%esp)
212 1.1 ross floatx80_rem_loop:
213 1.1 ross fprem1
214 1.1 ross fnstsw %ax
215 1.1 ross btw $10,%ax
216 1.1 ross jc floatx80_rem_loop
217 1.1 ross movl 4(%esp),%eax
218 1.1 ross fstpt (%eax)
219 1.1 ross fstp %st(0)
220 1.1 ross ret $4
221 1.1 ross
222 1.1 ross /*
223 1.1 ross -------------------------------------------------------------------------------
224 1.1 ross -------------------------------------------------------------------------------
225 1.1 ross */
226 1.1 ross .align 2
227 1.1 ross .globl _syst_floatx80_sqrt
228 1.1 ross _syst_floatx80_sqrt:
229 1.1 ross fldt 8(%esp)
230 1.1 ross fsqrt
231 1.1 ross movl 4(%esp),%eax
232 1.1 ross fstpt (%eax)
233 1.1 ross ret $4
234 1.1 ross
235 1.1 ross /*
236 1.1 ross -------------------------------------------------------------------------------
237 1.1 ross -------------------------------------------------------------------------------
238 1.1 ross */
239 1.1 ross .align 2
240 1.1 ross .globl _syst_floatx80_eq
241 1.1 ross _syst_floatx80_eq:
242 1.1 ross fldt 16(%esp)
243 1.1 ross fldt 4(%esp)
244 1.1 ross fucompp
245 1.1 ross fnstsw %ax
246 1.1 ross andw $17664,%ax
247 1.1 ross cmpw $16384,%ax
248 1.1 ross seteb %al
249 1.1 ross movzb %al,%eax
250 1.1 ross ret
251 1.1 ross
252 1.1 ross /*
253 1.1 ross -------------------------------------------------------------------------------
254 1.1 ross -------------------------------------------------------------------------------
255 1.1 ross */
256 1.1 ross .align 2
257 1.1 ross .globl _syst_floatx80_le
258 1.1 ross _syst_floatx80_le:
259 1.1 ross fldt 4(%esp)
260 1.1 ross fldt 16(%esp)
261 1.1 ross fcompp
262 1.1 ross fnstsw %ax
263 1.1 ross notl %eax
264 1.1 ross shrl $8,%eax
265 1.1 ross andl $1,%eax
266 1.1 ross ret
267 1.1 ross
268 1.1 ross /*
269 1.1 ross -------------------------------------------------------------------------------
270 1.1 ross -------------------------------------------------------------------------------
271 1.1 ross */
272 1.1 ross .align 2
273 1.1 ross .globl _syst_floatx80_lt
274 1.1 ross _syst_floatx80_lt:
275 1.1 ross fldt 4(%esp)
276 1.1 ross fldt 16(%esp)
277 1.1 ross fcompp
278 1.1 ross fnstsw %ax
279 1.1 ross andw $17664,%ax
280 1.1 ross setzb %al
281 1.1 ross movzb %al,%eax
282 1.1 ross ret
283 1.1 ross
284 1.1 ross /*
285 1.1 ross -------------------------------------------------------------------------------
286 1.1 ross -------------------------------------------------------------------------------
287 1.1 ross */
288 1.1 ross .align 2
289 1.1 ross .globl _syst_floatx80_eq_signaling
290 1.1 ross _syst_floatx80_eq_signaling:
291 1.1 ross fldt 16(%esp)
292 1.1 ross fldt 4(%esp)
293 1.1 ross fcompp
294 1.1 ross fnstsw %ax
295 1.1 ross andw $17664,%ax
296 1.1 ross cmpw $16384,%ax
297 1.1 ross seteb %al
298 1.1 ross movzb %al,%eax
299 1.1 ross ret
300 1.1 ross
301 1.1 ross /*
302 1.1 ross -------------------------------------------------------------------------------
303 1.1 ross -------------------------------------------------------------------------------
304 1.1 ross */
305 1.1 ross .align 2
306 1.1 ross .globl _syst_floatx80_le_quiet
307 1.1 ross _syst_floatx80_le_quiet:
308 1.1 ross fldt 4(%esp)
309 1.1 ross fldt 16(%esp)
310 1.1 ross fucompp
311 1.1 ross fnstsw %ax
312 1.1 ross notl %eax
313 1.1 ross shrl $8,%eax
314 1.1 ross andl $1,%eax
315 1.1 ross ret
316 1.1 ross
317 1.1 ross /*
318 1.1 ross -------------------------------------------------------------------------------
319 1.1 ross -------------------------------------------------------------------------------
320 1.1 ross */
321 1.1 ross .align 2
322 1.1 ross .globl _syst_floatx80_lt_quiet
323 1.1 ross _syst_floatx80_lt_quiet:
324 1.1 ross fldt 4(%esp)
325 1.1 ross fldt 16(%esp)
326 1.1 ross fucompp
327 1.1 ross fnstsw %ax
328 1.1 ross andw $17664,%ax
329 1.1 ross setzb %al
330 1.1 ross movzb %al,%eax
331 1.1 ross ret
332 1.1 ross
333