2 91c13e54 2004-02-29 devnull * 64-bit IEEE not-a-number routines.
3 91c13e54 2004-02-29 devnull * This is big/little-endian portable assuming that
4 91c13e54 2004-02-29 devnull * the 64-bit doubles and 64-bit integers have the
5 91c13e54 2004-02-29 devnull * same byte ordering.
8 e5aa96ac 2004-12-26 devnull #include "plan9.h"
9 e5aa96ac 2004-12-26 devnull #include "fmt.h"
10 e5aa96ac 2004-12-26 devnull #include "fmtdef.h"
12 984e3531 2004-08-22 devnull #if defined (__APPLE__) || (__powerpc__)
13 91c13e54 2004-02-29 devnull #define _NEEDLL
16 040d1d02 2004-09-23 devnull static uvlong uvnan = ((uvlong)0x7FF00000<<32)|0x00000001;
17 040d1d02 2004-09-23 devnull static uvlong uvinf = ((uvlong)0x7FF00000<<32)|0x00000000;
18 040d1d02 2004-09-23 devnull static uvlong uvneginf = ((uvlong)0xFFF00000<<32)|0x00000000;
21 91c13e54 2004-02-29 devnull __NaN(void)
23 91c13e54 2004-02-29 devnull uvlong *p;
25 91c13e54 2004-02-29 devnull /* gcc complains about "return *(double*)&uvnan;" */
26 91c13e54 2004-02-29 devnull p = &uvnan;
27 91c13e54 2004-02-29 devnull return *(double*)p;
31 91c13e54 2004-02-29 devnull __isNaN(double d)
33 91c13e54 2004-02-29 devnull uvlong x;
34 91c13e54 2004-02-29 devnull double *p;
37 91c13e54 2004-02-29 devnull x = *(uvlong*)p;
38 91c13e54 2004-02-29 devnull return (ulong)(x>>32)==0x7FF00000 && !__isInf(d, 0);
42 91c13e54 2004-02-29 devnull __Inf(int sign)
44 91c13e54 2004-02-29 devnull uvlong *p;
46 91c13e54 2004-02-29 devnull if(sign < 0)
47 91c13e54 2004-02-29 devnull p = &uvinf;
49 91c13e54 2004-02-29 devnull p = &uvneginf;
50 91c13e54 2004-02-29 devnull return *(double*)p;
54 91c13e54 2004-02-29 devnull __isInf(double d, int sign)
56 91c13e54 2004-02-29 devnull uvlong x;
57 91c13e54 2004-02-29 devnull double *p;
60 91c13e54 2004-02-29 devnull x = *(uvlong*)p;
61 91c13e54 2004-02-29 devnull if(sign == 0)
62 91c13e54 2004-02-29 devnull return x==uvinf || x==uvneginf;
63 91c13e54 2004-02-29 devnull else if(sign > 0)
64 91c13e54 2004-02-29 devnull return x==uvinf;
66 91c13e54 2004-02-29 devnull return x==uvneginf;