From 37da2899f40661e3e9631e497da8dc59b971cbd0 Mon Sep 17 00:00:00 2001 From: "Charles.Forsyth" Date: Fri, 22 Dec 2006 17:07:39 +0000 Subject: 20060303a --- libkern/nan-sparc.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 libkern/nan-sparc.c (limited to 'libkern/nan-sparc.c') diff --git a/libkern/nan-sparc.c b/libkern/nan-sparc.c new file mode 100644 index 00000000..f1cfa0b0 --- /dev/null +++ b/libkern/nan-sparc.c @@ -0,0 +1,69 @@ +#include + +#define NANEXP (2047<<20) +#define NANMASK (2047<<20) +#define NANSIGN (1<<31) + +double +NaN(void) +{ + union + { + double d; + long x[2]; + } a; + + a.x[0] = NANEXP; + a.x[1] = 1; + return a.d; +} + +int +isNaN(double d) +{ + union + { + double d; + long x[2]; + } a; + + a.d = d; + if((a.x[0] & NANMASK) != NANEXP) + return 0; + return !isInf(d, 0); +} + +double +Inf(int sign) +{ + union + { + double d; + long x[2]; + } a; + + a.x[0] = NANEXP; + a.x[1] = 0; + if(sign < 0) + a.x[0] |= NANSIGN; + return a.d; +} + +int +isInf(double d, int sign) +{ + union + { + double d; + long x[2]; + } a; + + a.d = d; + if(a.x[1] != 0) + return 0; + if(a.x[0] == NANEXP) + return sign >= 0; + if(a.x[0] == (NANEXP|NANSIGN)) + return sign <= 0; + return 0; +} -- cgit v1.2.3