libc floating point and stdio floating point can now be turned on and off using
ACKCONF variables.
This commit is contained in:
parent
9bf1d548fc
commit
94ffa3ba88
|
@ -8,8 +8,11 @@
|
|||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
static double
|
||||
asin_acos(double x, int cosfl)
|
||||
{
|
||||
|
@ -90,3 +93,5 @@ acos(double x)
|
|||
{
|
||||
return asin_acos(x, 1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
atan(double x)
|
||||
{
|
||||
|
@ -75,3 +78,6 @@ atan(double x)
|
|||
x += a[n];
|
||||
return neg ? -x : x;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -8,8 +8,11 @@
|
|||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
atan2(double y, double x)
|
||||
{
|
||||
|
@ -46,3 +49,6 @@ atan2(double y, double x)
|
|||
}
|
||||
return val + M_PI;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
/* $Id$ */
|
||||
|
||||
#include <math.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
ceil(double x)
|
||||
|
@ -18,3 +21,6 @@ ceil(double x)
|
|||
fractional part
|
||||
*/
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
exp(double x)
|
||||
{
|
||||
|
@ -74,3 +77,6 @@ exp(double x)
|
|||
n += 1;
|
||||
return (ldexp(0.5 + x / (POLYNOM3(xn, q) - x), n));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -5,9 +5,15 @@
|
|||
* Author: Ceriel J.H. Jacobs
|
||||
*/
|
||||
/* $Id$ */
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
fabs(double x)
|
||||
{
|
||||
return x < 0 ? -x : x;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
/* $Id$ */
|
||||
|
||||
#include <math.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
floor(double x)
|
||||
|
@ -18,3 +21,6 @@ floor(double x)
|
|||
fractional part
|
||||
*/
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double(fmod)(double x, double y)
|
||||
{ /* compute fmod(x, y) */
|
||||
|
@ -37,3 +40,6 @@ double(fmod)(double x, double y)
|
|||
}
|
||||
return (neg ? -x : x);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -5,7 +5,11 @@
|
|||
*/
|
||||
/* $Id$ */
|
||||
|
||||
#include <ack/config.h>
|
||||
|
||||
mes 2,_EM_WSIZE,_EM_PSIZE
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
exp $frexp
|
||||
pro $frexp,0
|
||||
lal 0
|
||||
|
@ -16,3 +20,5 @@
|
|||
sti _EM_WSIZE
|
||||
ret _EM_DSIZE
|
||||
end
|
||||
#endif
|
||||
|
||||
|
|
|
@ -7,5 +7,11 @@
|
|||
/* $Id$ */
|
||||
|
||||
#include <math.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double __huge_val = 1.0e+1000; /* This will generate a warning */
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
|
@ -41,3 +44,6 @@ cabs(struct complex p_compl)
|
|||
{
|
||||
return hypot(p_compl.r, p_compl.i);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
#include <math.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
__IsNan(double d)
|
||||
{
|
||||
#if defined(__vax) || defined(__pdp)
|
||||
|
@ -9,3 +14,6 @@ __IsNan(double d)
|
|||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
ldexp(double fl, int exp)
|
||||
|
@ -63,3 +66,6 @@ ldexp(double fl, int exp)
|
|||
}
|
||||
return sign * fl;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
log(double x)
|
||||
{
|
||||
|
@ -73,3 +76,6 @@ log(double x)
|
|||
x += z * (-2.121944400546905827679e-4);
|
||||
return x + z * 0.693359375;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -8,8 +8,11 @@
|
|||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
log10(double x)
|
||||
{
|
||||
|
@ -31,3 +34,6 @@ log10(double x)
|
|||
|
||||
return log(x) / M_LN10;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -4,8 +4,11 @@
|
|||
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||||
*/
|
||||
/* $Id$ */
|
||||
#include <ack/config.h>
|
||||
|
||||
mes 2,_EM_WSIZE,_EM_PSIZE
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
exp $modf
|
||||
pro $modf,0
|
||||
lal 0
|
||||
|
@ -20,3 +23,4 @@
|
|||
sti _EM_DSIZE
|
||||
ret _EM_DSIZE
|
||||
end
|
||||
#endif
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
pow(double x, double y)
|
||||
|
@ -120,3 +123,6 @@ pow(double x, double y)
|
|||
}
|
||||
return ldexp(fp, newexp);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
static double
|
||||
sinus(double x, int cos_flag)
|
||||
{
|
||||
|
@ -106,3 +109,6 @@ cos(double x)
|
|||
x = -x;
|
||||
return sinus(x, 1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
static double
|
||||
sinh_cosh(double x, int cosh_flag)
|
||||
{
|
||||
|
@ -86,3 +89,6 @@ cosh(double x)
|
|||
x = -x;
|
||||
return sinh_cosh(x, 1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
#define NITER 5
|
||||
|
||||
|
@ -47,3 +50,6 @@ sqrt(double x)
|
|||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <math.h>
|
||||
#include <float.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
tan(double x)
|
||||
{
|
||||
|
@ -79,3 +82,6 @@ tan(double x)
|
|||
x = -x;
|
||||
return invert ? -y / x : x / y;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include <ack/config.h>
|
||||
#include "localmath.h"
|
||||
|
||||
#if ACKCONF_WANT_FLOAT
|
||||
|
||||
double
|
||||
tanh(double x)
|
||||
{
|
||||
|
@ -58,3 +61,6 @@ tanh(double x)
|
|||
}
|
||||
return negative ? -x : x;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -3,4 +3,12 @@
|
|||
|
||||
#include <ack/plat.h>
|
||||
|
||||
#ifndef ACKCONF_WANT_FLOAT
|
||||
#define ACKCONF_WANT_FLOAT 1
|
||||
#endif
|
||||
|
||||
#ifndef ACKCONF_WANT_STDIO_FLOAT
|
||||
#define ACKCONF_WANT_STDIO_FLOAT ACKCONF_WANT_FLOAT
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -311,7 +311,7 @@ int _doprnt(register const char* fmt, va_list ap, FILE* stream)
|
|||
case 'c':
|
||||
*s++ = va_arg(ap, int);
|
||||
break;
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
case 'G':
|
||||
case 'g':
|
||||
if ((flags & FL_PRECSPEC) && (precision == 0))
|
||||
|
@ -328,7 +328,7 @@ int _doprnt(register const char* fmt, va_list ap, FILE* stream)
|
|||
flags |= FL_SIGNEDCONV;
|
||||
s = _f_print(&ap, flags, s, c, precision);
|
||||
break;
|
||||
#endif /* ACKCONF_NO_STDIO_FLOAT */
|
||||
#endif
|
||||
case 'r':
|
||||
ap = va_arg(ap, va_list);
|
||||
fmt = va_arg(ap, char*);
|
||||
|
|
|
@ -108,7 +108,7 @@ o_collect(register int c, register FILE* stream, char type,
|
|||
return bufp - 1;
|
||||
}
|
||||
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
/* The function f_collect() reads a string that has the format of a
|
||||
* floating-point number. The function returns as soon as a format-error
|
||||
* is encountered, leaving the offending character in the input. This means
|
||||
|
@ -191,7 +191,7 @@ f_collect(register int c, register FILE* stream, register int width)
|
|||
*bufp = '\0';
|
||||
return bufp - 1;
|
||||
}
|
||||
#endif /* ACKCONF_NO_STDIO_FLOAT */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* the routine that does the scanning
|
||||
|
@ -211,7 +211,7 @@ int _doscan(register FILE* stream, const char* format, va_list ap)
|
|||
int reverse; /* reverse the checking in [...] */
|
||||
int kind;
|
||||
register int ic; /* the input character */
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
long double ld_val;
|
||||
#endif
|
||||
|
||||
|
@ -495,7 +495,7 @@ int _doscan(register FILE* stream, const char* format, va_list ap)
|
|||
*str = '\0';
|
||||
}
|
||||
break;
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
case 'e':
|
||||
case 'E':
|
||||
case 'f':
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "loc_incl.h"
|
||||
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
|
||||
#include "../stdlib/ext_fmt.h"
|
||||
void _dbl_ext_cvt(double value, struct EXTEND* e);
|
||||
|
@ -28,4 +28,4 @@ char* _fcvt(long double value, int ndigit, int* decpt, int* sign)
|
|||
return cvt(value, ndigit, decpt, sign, 0);
|
||||
}
|
||||
|
||||
#endif /* ACKCONF_NO_STDIO_FLOAT */
|
||||
#endif
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <stdarg.h>
|
||||
#include "loc_incl.h"
|
||||
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
|
||||
static char*
|
||||
_pfloat(long double r, register char* s, int n, int flags)
|
||||
|
@ -209,4 +209,4 @@ char* _f_print(va_list* ap, int flags, char* s, char c, int precision)
|
|||
}
|
||||
return s;
|
||||
}
|
||||
#endif /* ACKCONF_NO_STDIO_FLOAT */
|
||||
#endif
|
||||
|
|
|
@ -19,10 +19,10 @@ void __cleanup(void);
|
|||
FILE *popen(const char *command, const char *type);
|
||||
FILE *fdopen(int fd, const char *mode);
|
||||
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
char *_ecvt(long double value, int ndigit, int *decpt, int *sign);
|
||||
char *_fcvt(long double value, int ndigit, int *decpt, int *sign);
|
||||
#endif /* ACKCONF_NO_STDIO_FLOAT */
|
||||
#endif
|
||||
|
||||
#define FL_LJUST 0x0001 /* left-justify field */
|
||||
#define FL_SIGN 0x0002 /* sign in signed conversions */
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
/* $Id$ */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <ack/config.h>
|
||||
#include "ext_fmt.h"
|
||||
|
||||
#ifndef ACKCONF_NO_STDIO_FLOAT
|
||||
#if ACKCONF_WANT_STDIO_FLOAT
|
||||
|
||||
void _str_ext_cvt(const char* s, char** ss, struct EXTEND* e);
|
||||
double _ext_dbl_cvt(struct EXTEND* e);
|
||||
|
|
|
@ -11,9 +11,4 @@
|
|||
|
||||
#define ACKCONF_TIME_IS_A_SYSCALL
|
||||
|
||||
/* Since the i80 code generator doesn't support floating point, don't include
|
||||
* it in the stdio libraries. */
|
||||
|
||||
#define ACKCONF_NO_STDIO_FLOAT
|
||||
|
||||
#endif
|
||||
|
|
|
@ -11,8 +11,4 @@
|
|||
|
||||
/* #define ACKCONF_TIME_IS_A_SYSCALL */
|
||||
|
||||
/* We don't support floating point right now. */
|
||||
|
||||
/* #define ACKCONF_NO_STDIO_FLOAT */
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue