/* sEmuHDieee.c */
/* Copyright (c) 1994 Xerox Corporation.  All rights reserved. */
/* Willie-s, June 29, 1994 1:01 pm PDT */

/*
*
* The ieee float constants here were taken from SunOS 4.1.3
*/

#include <math.h>

int
PCR←EmuHDieee←Dummy(double x)
{
    /* SVID & X/Open */
    x = erf(x);
    x = erfc(x);
    x = gamma(x);
    x = hypot(x,x);
    x = j0(x);
    x = j1(x);
    x = jn(11,x);
    x = lgamma(x);
    x = y0(x);
    x = y1(x);
    x = yn(11,x);
    /* SVID */
    x = acosh(x);
    x = asinh(x);
    x = atanh(x);
    return 0;
}

int
fp←class(double x)
{
    return (int) fpclass(x);
}

/* 
 * IEEE double precision constants 
 */
static double align←←double = 0.0;
    /* big-endian */
static long ln2x[] = 		{ 0x3fe62e42, 0xfefa39ef };
static long ln2hix[] = 		{ 0x3fe62e42, 0xfee00000 };
static long ln2lox[] = 		{ 0x3dea39ef, 0x35793c76 };
static long NaNx[] = 		{ 0x7fffffff, 0xffffffff };
static long sNaNx[] = 		{ 0x7ff00000, 0x00000001 };
static long Infx[] = 		{ 0x7ff00000, 0x00000000 };
static long two52x[] = 		{ 0x43300000, 0x00000000 };
static long twom52x[] = 	{ 0x3cb00000, 0x00000000 };
static long PI←RZx[] = 		{ 0x400921fb, 0x54442d18 };
static long sqrt2x[] = 		{ 0x3ff6a09e, 0x667f3bcd };/* rounded up */
static long sqrt2p1←hix[] = 	{ 0x4003504f, 0x333f9de6 };
static long sqrt2p1←lox[] = 	{ 0x3ca21165, 0xf626cdd5 };
static long fmaxx[] = 		{ 0x7fefffff, 0xffffffff };
static long fminx[] = 		{ 0x00000000, 0x00000001 };
static long fminnx[] = 		{ 0x00100000, 0x00000000 };
static long fmaxsx[] = 		{ 0x000fffff, 0xffffffff };
static long lnovftx[] = 	{ 0x40862e42, 0xfefa39ef };/* chopped */
static long lnunftx[] = 	{ 0xc0874910, 0xd52d3052 };/* ln(minf/2) chop*/
static long invln2x[] = 	{ 0x3ff71547, 0x652b82fe };

#define ln2 		(*(double*)ln2x)
#define NaN 		(*(double*)NaNx)
#define sNaN 		(*(double*)sNaNx)
#define Inf 		(*(double*)Infx)
#define two52 		(*(double*)two52x)
#define twom52 		(*(double*)twom52x)
#define ln2hi 		(*(double*)ln2hix)
#define ln2lo 		(*(double*)ln2lox)
#define PI←RZ 		(*(double*)PI←RZx)
#define sqrt2 		(*(double*)sqrt2x)
#define sqrt2p1←hi 	(*(double*)sqrt2p1←hix)
#define sqrt2p1←lo 	(*(double*)sqrt2p1←lox)
#define fmax 		(*(double*)fmaxx)
#define fmin 		(*(double*)fminx)
#define fminn 		(*(double*)fminnx)
#define fmaxs 		(*(double*)fmaxsx)
#define lnovft 		(*(double*)lnovftx)
#define lnunft 		(*(double*)lnunftx)
#define invln2 		(*(double*)invln2x)


double
min←subnormal(void)
{
    return fmin;
}

double
max←subnormal(void)
{
    return fmaxs;
}

double
min←normal(void)
{
    return fminn;
}

double
max←normal(void)
{
    return fmax;
}

double
infinity(void)
{
    return Inf;
}

double
quiet←nan(long n)
{
    return NaN;
}

double
signaling←nan(long n)
{
    return sNaN;
}