systfloat.c revision 1.5 1 1.5 ross /* $NetBSD: systfloat.c,v 1.5 2001/03/22 12:22:18 ross Exp $ */
2 1.3 ross
3 1.3 ross /* This is a derivative work. */
4 1.3 ross
5 1.3 ross /*-
6 1.3 ross * Copyright (c) 2001 The NetBSD Foundation, Inc.
7 1.3 ross * All rights reserved.
8 1.3 ross *
9 1.3 ross * This code is derived from software contributed to The NetBSD Foundation
10 1.3 ross * by Ross Harvey.
11 1.3 ross *
12 1.3 ross * Redistribution and use in source and binary forms, with or without
13 1.3 ross * modification, are permitted provided that the following conditions
14 1.3 ross * are met:
15 1.3 ross * 1. Redistributions of source code must retain the above copyright
16 1.3 ross * notice, this list of conditions and the following disclaimer.
17 1.3 ross * 2. Redistributions in binary form must reproduce the above copyright
18 1.3 ross * notice, this list of conditions and the following disclaimer in the
19 1.3 ross * documentation and/or other materials provided with the distribution.
20 1.3 ross * 3. All advertising materials mentioning features or use of this software
21 1.3 ross * must display the following acknowledgement:
22 1.3 ross * This product includes software developed by the NetBSD
23 1.3 ross * Foundation, Inc. and its contributors.
24 1.3 ross * 4. Neither the name of The NetBSD Foundation nor the names of its
25 1.3 ross * contributors may be used to endorse or promote products derived
26 1.3 ross * from this software without specific prior written permission.
27 1.3 ross *
28 1.3 ross * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
29 1.3 ross * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
30 1.3 ross * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31 1.3 ross * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
32 1.3 ross * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33 1.3 ross * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34 1.3 ross * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35 1.3 ross * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36 1.3 ross * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37 1.3 ross * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38 1.3 ross * POSSIBILITY OF SUCH DAMAGE.
39 1.3 ross */
40 1.1 ross
41 1.1 ross /*
42 1.1 ross ===============================================================================
43 1.1 ross
44 1.1 ross This C source file is part of TestFloat, Release 2a, a package of programs
45 1.1 ross for testing the correctness of floating-point arithmetic complying to the
46 1.1 ross IEC/IEEE Standard for Floating-Point.
47 1.1 ross
48 1.1 ross Written by John R. Hauser. More information is available through the Web
49 1.1 ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
50 1.1 ross
51 1.1 ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
52 1.1 ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
53 1.1 ross TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
54 1.1 ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
55 1.1 ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
56 1.1 ross
57 1.1 ross Derivative works are acceptable, even for commercial purposes, so long as
58 1.1 ross (1) they include prominent notice that the work is derivative, and (2) they
59 1.1 ross include prominent notice akin to these four paragraphs for those parts of
60 1.1 ross this code that are retained.
61 1.1 ross
62 1.1 ross ===============================================================================
63 1.1 ross */
64 1.1 ross
65 1.4 ross #include <sys/cdefs.h>
66 1.4 ross #ifndef __lint
67 1.5 ross __RCSID("$NetBSD: systfloat.c,v 1.5 2001/03/22 12:22:18 ross Exp $");
68 1.4 ross #endif
69 1.4 ross
70 1.1 ross #include <math.h>
71 1.4 ross #include <ieeefp.h>
72 1.1 ross #include "milieu.h"
73 1.1 ross #include "softfloat.h"
74 1.1 ross #include "systfloat.h"
75 1.4 ross #include "systflags.h"
76 1.4 ross #include "systmodes.h"
77 1.4 ross
78 1.4 ross fp_except
79 1.4 ross syst_float_flags_clear(void)
80 1.4 ross {
81 1.5 ross return fpsetsticky(0)
82 1.5 ross & (FP_X_IMP | FP_X_UFL | FP_X_OFL | FP_X_DZ | FP_X_INV);
83 1.4 ross }
84 1.4 ross
85 1.4 ross void
86 1.4 ross syst_float_set_rounding_mode(fp_rnd direction)
87 1.4 ross {
88 1.4 ross fpsetround(direction);
89 1.4 ross fpsetmask(0);
90 1.4 ross }
91 1.1 ross
92 1.1 ross float32 syst_int32_to_float32( int32 a )
93 1.1 ross {
94 1.1 ross float32 z;
95 1.1 ross
96 1.1 ross *( (float *) &z ) = a;
97 1.1 ross return z;
98 1.1 ross
99 1.1 ross }
100 1.1 ross
101 1.1 ross float64 syst_int32_to_float64( int32 a )
102 1.1 ross {
103 1.1 ross float64 z;
104 1.1 ross
105 1.1 ross *( (double *) &z ) = a;
106 1.1 ross return z;
107 1.1 ross
108 1.1 ross }
109 1.1 ross
110 1.1 ross #if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
111 1.1 ross
112 1.1 ross floatx80 syst_int32_to_floatx80( int32 a )
113 1.1 ross {
114 1.1 ross floatx80 z;
115 1.1 ross
116 1.1 ross *( (long double *) &z ) = a;
117 1.1 ross return z;
118 1.1 ross
119 1.1 ross }
120 1.1 ross
121 1.1 ross #endif
122 1.1 ross
123 1.1 ross #if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
124 1.1 ross
125 1.1 ross float128 syst_int32_to_float128( int32 a )
126 1.1 ross {
127 1.1 ross float128 z;
128 1.1 ross
129 1.1 ross *( (long double *) &z ) = a;
130 1.1 ross return z;
131 1.1 ross
132 1.1 ross }
133 1.1 ross
134 1.1 ross #endif
135 1.1 ross
136 1.1 ross #ifdef BITS64
137 1.1 ross
138 1.1 ross float32 syst_int64_to_float32( int64 a )
139 1.1 ross {
140 1.1 ross float32 z;
141 1.1 ross
142 1.1 ross *( (float *) &z ) = a;
143 1.1 ross return z;
144 1.1 ross
145 1.1 ross }
146 1.1 ross
147 1.1 ross float64 syst_int64_to_float64( int64 a )
148 1.1 ross {
149 1.1 ross float64 z;
150 1.1 ross
151 1.1 ross *( (double *) &z ) = a;
152 1.1 ross return z;
153 1.1 ross
154 1.1 ross }
155 1.1 ross
156 1.1 ross #if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
157 1.1 ross
158 1.1 ross floatx80 syst_int64_to_floatx80( int64 a )
159 1.1 ross {
160 1.1 ross floatx80 z;
161 1.1 ross
162 1.1 ross *( (long double *) &z ) = a;
163 1.1 ross return z;
164 1.1 ross
165 1.1 ross }
166 1.1 ross
167 1.1 ross #endif
168 1.1 ross
169 1.1 ross #if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
170 1.1 ross
171 1.1 ross float128 syst_int64_to_float128( int64 a )
172 1.1 ross {
173 1.1 ross float128 z;
174 1.1 ross
175 1.1 ross *( (long double *) &z ) = a;
176 1.1 ross return z;
177 1.1 ross
178 1.1 ross }
179 1.1 ross
180 1.1 ross #endif
181 1.1 ross
182 1.1 ross #endif
183 1.1 ross
184 1.1 ross int32 syst_float32_to_int32_round_to_zero( float32 a )
185 1.1 ross {
186 1.1 ross
187 1.1 ross return *( (float *) &a );
188 1.1 ross
189 1.1 ross }
190 1.1 ross
191 1.1 ross #ifdef BITS64
192 1.1 ross
193 1.1 ross int64 syst_float32_to_int64_round_to_zero( float32 a )
194 1.1 ross {
195 1.1 ross
196 1.1 ross return *( (float *) &a );
197 1.1 ross
198 1.1 ross }
199 1.1 ross
200 1.1 ross #endif
201 1.1 ross
202 1.1 ross float64 syst_float32_to_float64( float32 a )
203 1.1 ross {
204 1.1 ross float64 z;
205 1.1 ross
206 1.1 ross *( (double *) &z ) = *( (float *) &a );
207 1.1 ross return z;
208 1.1 ross
209 1.1 ross }
210 1.1 ross
211 1.1 ross #if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
212 1.1 ross
213 1.1 ross floatx80 syst_float32_to_floatx80( float32 a )
214 1.1 ross {
215 1.1 ross floatx80 z;
216 1.1 ross
217 1.1 ross *( (long double *) &z ) = *( (float *) &a );
218 1.1 ross return z;
219 1.1 ross
220 1.1 ross }
221 1.1 ross
222 1.1 ross #endif
223 1.1 ross
224 1.1 ross #if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
225 1.1 ross
226 1.1 ross float128 syst_float32_to_float128( float32 a )
227 1.1 ross {
228 1.1 ross float128 z;
229 1.1 ross
230 1.1 ross *( (long double *) &z ) = *( (float *) &a );
231 1.1 ross return z;
232 1.1 ross
233 1.1 ross }
234 1.1 ross
235 1.1 ross #endif
236 1.1 ross
237 1.1 ross float32 syst_float32_add( float32 a, float32 b )
238 1.1 ross {
239 1.1 ross float32 z;
240 1.1 ross
241 1.1 ross *( (float *) &z ) = *( (float *) &a ) + *( (float *) &b );
242 1.1 ross return z;
243 1.1 ross
244 1.1 ross }
245 1.1 ross
246 1.1 ross float32 syst_float32_sub( float32 a, float32 b )
247 1.1 ross {
248 1.1 ross float32 z;
249 1.1 ross
250 1.1 ross *( (float *) &z ) = *( (float *) &a ) - *( (float *) &b );
251 1.1 ross return z;
252 1.1 ross
253 1.1 ross }
254 1.1 ross
255 1.1 ross float32 syst_float32_mul( float32 a, float32 b )
256 1.1 ross {
257 1.1 ross float32 z;
258 1.1 ross
259 1.1 ross *( (float *) &z ) = *( (float *) &a ) * *( (float *) &b );
260 1.1 ross return z;
261 1.1 ross
262 1.1 ross }
263 1.1 ross
264 1.1 ross float32 syst_float32_div( float32 a, float32 b )
265 1.1 ross {
266 1.1 ross float32 z;
267 1.1 ross
268 1.1 ross *( (float *) &z ) = *( (float *) &a ) / *( (float *) &b );
269 1.1 ross return z;
270 1.1 ross
271 1.1 ross }
272 1.1 ross
273 1.1 ross flag syst_float32_eq( float32 a, float32 b )
274 1.1 ross {
275 1.1 ross
276 1.1 ross return ( *( (float *) &a ) == *( (float *) &b ) );
277 1.1 ross
278 1.1 ross }
279 1.1 ross
280 1.1 ross flag syst_float32_le( float32 a, float32 b )
281 1.1 ross {
282 1.1 ross
283 1.1 ross return ( *( (float *) &a ) <= *( (float *) &b ) );
284 1.1 ross
285 1.1 ross }
286 1.1 ross
287 1.1 ross flag syst_float32_lt( float32 a, float32 b )
288 1.1 ross {
289 1.1 ross
290 1.1 ross return ( *( (float *) &a ) < *( (float *) &b ) );
291 1.1 ross
292 1.1 ross }
293 1.1 ross
294 1.1 ross int32 syst_float64_to_int32_round_to_zero( float64 a )
295 1.1 ross {
296 1.1 ross
297 1.1 ross return *( (double *) &a );
298 1.1 ross
299 1.1 ross }
300 1.1 ross
301 1.1 ross #ifdef BITS64
302 1.1 ross
303 1.1 ross int64 syst_float64_to_int64_round_to_zero( float64 a )
304 1.1 ross {
305 1.1 ross
306 1.1 ross return *( (double *) &a );
307 1.1 ross
308 1.1 ross }
309 1.1 ross
310 1.1 ross #endif
311 1.1 ross
312 1.1 ross float32 syst_float64_to_float32( float64 a )
313 1.1 ross {
314 1.1 ross float32 z;
315 1.1 ross
316 1.1 ross *( (float *) &z ) = *( (double *) &a );
317 1.1 ross return z;
318 1.1 ross
319 1.1 ross }
320 1.1 ross
321 1.1 ross #if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
322 1.1 ross
323 1.1 ross floatx80 syst_float64_to_floatx80( float64 a )
324 1.1 ross {
325 1.1 ross floatx80 z;
326 1.1 ross
327 1.1 ross *( (long double *) &z ) = *( (double *) &a );
328 1.1 ross return z;
329 1.1 ross
330 1.1 ross }
331 1.1 ross
332 1.1 ross #endif
333 1.1 ross
334 1.1 ross #if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
335 1.1 ross
336 1.1 ross float128 syst_float64_to_float128( float64 a )
337 1.1 ross {
338 1.1 ross float128 z;
339 1.1 ross
340 1.1 ross *( (long double *) &z ) = *( (double *) &a );
341 1.1 ross return z;
342 1.1 ross
343 1.1 ross }
344 1.1 ross
345 1.1 ross #endif
346 1.1 ross
347 1.1 ross float64 syst_float64_add( float64 a, float64 b )
348 1.1 ross {
349 1.1 ross float64 z;
350 1.1 ross
351 1.1 ross *( (double *) &z ) = *( (double *) &a ) + *( (double *) &b );
352 1.1 ross return z;
353 1.1 ross
354 1.1 ross }
355 1.1 ross
356 1.1 ross float64 syst_float64_sub( float64 a, float64 b )
357 1.1 ross {
358 1.1 ross float64 z;
359 1.1 ross
360 1.1 ross *( (double *) &z ) = *( (double *) &a ) - *( (double *) &b );
361 1.1 ross return z;
362 1.1 ross
363 1.1 ross }
364 1.1 ross
365 1.1 ross float64 syst_float64_mul( float64 a, float64 b )
366 1.1 ross {
367 1.1 ross float64 z;
368 1.1 ross
369 1.1 ross *( (double *) &z ) = *( (double *) &a ) * *( (double *) &b );
370 1.1 ross return z;
371 1.1 ross
372 1.1 ross }
373 1.1 ross
374 1.1 ross float64 syst_float64_div( float64 a, float64 b )
375 1.1 ross {
376 1.1 ross float64 z;
377 1.1 ross
378 1.1 ross *( (double *) &z ) = *( (double *) &a ) / *( (double *) &b );
379 1.1 ross return z;
380 1.1 ross
381 1.1 ross }
382 1.1 ross
383 1.1 ross float64 syst_float64_sqrt( float64 a )
384 1.1 ross {
385 1.1 ross float64 z;
386 1.1 ross
387 1.1 ross *( (double *) &z ) = sqrt( *( (double *) &a ) );
388 1.1 ross return z;
389 1.1 ross
390 1.1 ross }
391 1.1 ross
392 1.1 ross flag syst_float64_eq( float64 a, float64 b )
393 1.1 ross {
394 1.1 ross
395 1.1 ross return ( *( (double *) &a ) == *( (double *) &b ) );
396 1.1 ross
397 1.1 ross }
398 1.1 ross
399 1.1 ross flag syst_float64_le( float64 a, float64 b )
400 1.1 ross {
401 1.1 ross
402 1.1 ross return ( *( (double *) &a ) <= *( (double *) &b ) );
403 1.1 ross
404 1.1 ross }
405 1.1 ross
406 1.1 ross flag syst_float64_lt( float64 a, float64 b )
407 1.1 ross {
408 1.1 ross
409 1.1 ross return ( *( (double *) &a ) < *( (double *) &b ) );
410 1.1 ross
411 1.1 ross }
412 1.1 ross
413 1.1 ross #if defined( FLOATX80 ) && defined( LONG_DOUBLE_IS_FLOATX80 )
414 1.1 ross
415 1.1 ross int32 syst_floatx80_to_int32_round_to_zero( floatx80 a )
416 1.1 ross {
417 1.1 ross
418 1.1 ross return *( (long double *) &a );
419 1.1 ross
420 1.1 ross }
421 1.1 ross
422 1.1 ross #ifdef BITS64
423 1.1 ross
424 1.1 ross int64 syst_floatx80_to_int64_round_to_zero( floatx80 a )
425 1.1 ross {
426 1.1 ross
427 1.1 ross return *( (long double *) &a );
428 1.1 ross
429 1.1 ross }
430 1.1 ross
431 1.1 ross #endif
432 1.1 ross
433 1.1 ross float32 syst_floatx80_to_float32( floatx80 a )
434 1.1 ross {
435 1.1 ross float32 z;
436 1.1 ross
437 1.1 ross *( (float *) &z ) = *( (long double *) &a );
438 1.1 ross return z;
439 1.1 ross
440 1.1 ross }
441 1.1 ross
442 1.1 ross float64 syst_floatx80_to_float64( floatx80 a )
443 1.1 ross {
444 1.1 ross float64 z;
445 1.1 ross
446 1.1 ross *( (double *) &z ) = *( (long double *) &a );
447 1.1 ross return z;
448 1.1 ross
449 1.1 ross }
450 1.1 ross
451 1.1 ross floatx80 syst_floatx80_add( floatx80 a, floatx80 b )
452 1.1 ross {
453 1.1 ross floatx80 z;
454 1.1 ross
455 1.1 ross *( (long double *) &z ) =
456 1.1 ross *( (long double *) &a ) + *( (long double *) &b );
457 1.1 ross return z;
458 1.1 ross
459 1.1 ross }
460 1.1 ross
461 1.1 ross floatx80 syst_floatx80_sub( floatx80 a, floatx80 b )
462 1.1 ross {
463 1.1 ross floatx80 z;
464 1.1 ross
465 1.1 ross *( (long double *) &z ) =
466 1.1 ross *( (long double *) &a ) - *( (long double *) &b );
467 1.1 ross return z;
468 1.1 ross
469 1.1 ross }
470 1.1 ross
471 1.1 ross floatx80 syst_floatx80_mul( floatx80 a, floatx80 b )
472 1.1 ross {
473 1.1 ross floatx80 z;
474 1.1 ross
475 1.1 ross *( (long double *) &z ) =
476 1.1 ross *( (long double *) &a ) * *( (long double *) &b );
477 1.1 ross return z;
478 1.1 ross
479 1.1 ross }
480 1.1 ross
481 1.1 ross floatx80 syst_floatx80_div( floatx80 a, floatx80 b )
482 1.1 ross {
483 1.1 ross floatx80 z;
484 1.1 ross
485 1.1 ross *( (long double *) &z ) =
486 1.1 ross *( (long double *) &a ) / *( (long double *) &b );
487 1.1 ross return z;
488 1.1 ross
489 1.1 ross }
490 1.1 ross
491 1.1 ross flag syst_floatx80_eq( floatx80 a, floatx80 b )
492 1.1 ross {
493 1.1 ross
494 1.1 ross return ( *( (long double *) &a ) == *( (long double *) &b ) );
495 1.1 ross
496 1.1 ross }
497 1.1 ross
498 1.1 ross flag syst_floatx80_le( floatx80 a, floatx80 b )
499 1.1 ross {
500 1.1 ross
501 1.1 ross return ( *( (long double *) &a ) <= *( (long double *) &b ) );
502 1.1 ross
503 1.1 ross }
504 1.1 ross
505 1.1 ross flag syst_floatx80_lt( floatx80 a, floatx80 b )
506 1.1 ross {
507 1.1 ross
508 1.1 ross return ( *( (long double *) &a ) < *( (long double *) &b ) );
509 1.1 ross
510 1.1 ross }
511 1.1 ross
512 1.1 ross #endif
513 1.1 ross
514 1.1 ross #if defined( FLOAT128 ) && defined( LONG_DOUBLE_IS_FLOAT128 )
515 1.1 ross
516 1.1 ross int32 syst_float128_to_int32_round_to_zero( float128 a )
517 1.1 ross {
518 1.1 ross
519 1.1 ross return *( (long double *) &a );
520 1.1 ross
521 1.1 ross }
522 1.1 ross
523 1.1 ross #ifdef BITS64
524 1.1 ross
525 1.1 ross int64 syst_float128_to_int64_round_to_zero( float128 a )
526 1.1 ross {
527 1.1 ross
528 1.1 ross return *( (long double *) &a );
529 1.1 ross
530 1.1 ross }
531 1.1 ross
532 1.1 ross #endif
533 1.1 ross
534 1.1 ross float32 syst_float128_to_float32( float128 a )
535 1.1 ross {
536 1.1 ross float32 z;
537 1.1 ross
538 1.1 ross *( (float *) &z ) = *( (long double *) &a );
539 1.1 ross return z;
540 1.1 ross
541 1.1 ross }
542 1.1 ross
543 1.1 ross float64 syst_float128_to_float64( float128 a )
544 1.1 ross {
545 1.1 ross float64 z;
546 1.1 ross
547 1.1 ross *( (double *) &z ) = *( (long double *) &a );
548 1.1 ross return z;
549 1.1 ross
550 1.1 ross }
551 1.1 ross
552 1.1 ross float128 syst_float128_add( float128 a, float128 b )
553 1.1 ross {
554 1.1 ross float128 z;
555 1.1 ross
556 1.1 ross *( (long double *) &z ) =
557 1.1 ross *( (long double *) &a ) + *( (long double *) &b );
558 1.1 ross return z;
559 1.1 ross
560 1.1 ross }
561 1.1 ross
562 1.1 ross float128 syst_float128_sub( float128 a, float128 b )
563 1.1 ross {
564 1.1 ross float128 z;
565 1.1 ross
566 1.1 ross *( (long double *) &z ) =
567 1.1 ross *( (long double *) &a ) - *( (long double *) &b );
568 1.1 ross return z;
569 1.1 ross
570 1.1 ross }
571 1.1 ross
572 1.1 ross float128 syst_float128_mul( float128 a, float128 b )
573 1.1 ross {
574 1.1 ross float128 z;
575 1.1 ross
576 1.1 ross *( (long double *) &z ) =
577 1.1 ross *( (long double *) &a ) * *( (long double *) &b );
578 1.1 ross return z;
579 1.1 ross
580 1.1 ross }
581 1.1 ross
582 1.1 ross float128 syst_float128_div( float128 a, float128 b )
583 1.1 ross {
584 1.1 ross float128 z;
585 1.1 ross
586 1.1 ross *( (long double *) &z ) =
587 1.1 ross *( (long double *) &a ) / *( (long double *) &b );
588 1.1 ross return z;
589 1.1 ross
590 1.1 ross }
591 1.1 ross
592 1.1 ross flag syst_float128_eq( float128 a, float128 b )
593 1.1 ross {
594 1.1 ross
595 1.1 ross return ( *( (long double *) &a ) == *( (long double *) &b ) );
596 1.1 ross
597 1.1 ross }
598 1.1 ross
599 1.1 ross flag syst_float128_le( float128 a, float128 b )
600 1.1 ross {
601 1.1 ross
602 1.1 ross return ( *( (long double *) &a ) <= *( (long double *) &b ) );
603 1.1 ross
604 1.1 ross }
605 1.1 ross
606 1.1 ross flag syst_float128_lt( float128 a, float128 b )
607 1.1 ross {
608 1.1 ross
609 1.1 ross return ( *( (long double *) &a ) < *( (long double *) &b ) );
610 1.1 ross
611 1.1 ross }
612 1.1 ross
613 1.1 ross #endif
614 1.1 ross
615