1
0
mirror of https://github.com/adtools/clib2.git synced 2025-12-08 14:59:05 +00:00

c.lib 1.169 (8.8.2004)

- Since the 'long double' data type is not really supported by the GCC
  versions we use (and not supported by SAS/C either) building the
  library with support code for it is now a configurable option. Unless
  enabled, 'long double' is now treated like 'double'.

- Reworked the HUGE_VAL definition which previously would default to
  Infinity. The new code properly defines this to the largest
  representable floating point number. The 'great' thing about the
  HUGE_VAL definition in this library is that it's a reference to
  a binary constant initialized by the library startup code. So any
  application checking for HUGE_VAL merely needs to be relinked
  rather than recompiled.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14703 87f5fb63-7c3d-0410-a384-fd976d0f7a62
This commit is contained in:
Olaf Barthel
2004-08-08 10:55:57 +00:00
parent 0a3962a105
commit 3f284b7fb8
24 changed files with 145 additions and 141 deletions

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "amiga.lib 1.168"
#define VSTRING "amiga.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "amiga.lib 1.169"
#define VSTRING "amiga.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "c.lib 1.168"
#define VSTRING "c.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: c.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "c.lib 1.169"
#define VSTRING "c.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: c.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "debug.lib 1.168"
#define VSTRING "debug.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "debug.lib 1.169"
#define VSTRING "debug.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "m.lib 1.168"
#define VSTRING "m.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: m.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "m.lib 1.169"
#define VSTRING "m.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: m.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "m881.lib 1.168"
#define VSTRING "m881.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "m881.lib 1.169"
#define VSTRING "m881.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,5 +1,5 @@
/*
* $Id: math_fp_support.h,v 1.1.1.1 2004-07-26 16:30:44 obarthel Exp $
* $Id: math_fp_support.h,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -36,9 +36,47 @@
/****************************************************************************/
/* If any of the three supported floating point support flavours is
enabled, make sure that the generic 'FLOATING_POINT_SUPPORT' symbol
is defined, too.*/
#if (defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) || defined(PPC_FLOATING_POINT_SUPPORT))
#define FLOATING_POINT_SUPPORT
#endif
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT || PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
/* This selects whether or not the 'long double' type should be used. So far,
only 'double' can be supported, and 'long double' defaults to 'double'. */
/*#define USE_LONG_DOUBLE*/
/****************************************************************************/
#if defined(USE_LONG_DOUBLE)
typedef long double __long_double_t;
#else
typedef double __long_double_t;
#endif /* USE_LONG_DOUBLE */
/****************************************************************************/
/* 'Portable' raw representations of three IEEE floating point formats. */
union ieee_long_double
{
long double value;
unsigned long raw[3];
};
union ieee_double
{
double value;
unsigned long raw[2];
};
union ieee_single
{
float value;
unsigned long raw[1];
};
/****************************************************************************/

View File

@ -1,5 +1,5 @@
/*
* $Id: math_init_exit.c,v 1.1.1.1 2004-07-26 16:30:46 obarthel Exp $
* $Id: math_init_exit.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -121,41 +121,45 @@ __math_init(void)
#endif /* IEEE_FLOATING_POINT_SUPPORT */
/* Now fill in the HUGE_VAL constant, which is set to
* +Infinity.
*/
the largest representable floating point value. */
if(sizeof(__huge_val) == 4) /* single precision */
{
static const unsigned long infinity[] =
static const unsigned long largest_fp_value[1] =
{
0x7F800000
/* Exponent = +126, Mantissa = 8,388,607 */
0x7f7fffff
};
assert( sizeof(infinity) == sizeof(__huge_val) );
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
memmove((void *)&__huge_val,infinity,sizeof(infinity));
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
}
else if (sizeof(__huge_val) == 8) /* double precision */
{
static const unsigned long infinity[] =
static const unsigned long largest_fp_value[2] =
{
0x7FF00000,0x00000000
/* Exponent = +1022, Mantissa = 4,503,599,627,370,495 */
0x7fefffff,0xffffffff
};
assert( sizeof(infinity) == sizeof(__huge_val) );
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
memmove((void *)&__huge_val,infinity,sizeof(infinity));
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
}
#if defined(USE_LONG_DOUBLE)
else if (sizeof(__huge_val) == 12) /* extended precision */
{
static const unsigned long infinity[] =
static const unsigned long largest_fp_value[3] =
{
0x7FFF0000,0x00000000,0x00000000
/* Exponent = +32766, Mantissa = 18,446,744,073,709,551,615 */
0x7ffe0000,0xffffffff,0xffffffff
};
assert( sizeof(infinity) == sizeof(__huge_val) );
assert( sizeof(largest_fp_value) == sizeof(__huge_val) );
memmove((void *)&__huge_val,infinity,sizeof(infinity));
memmove((void *)&__huge_val,largest_fp_value,sizeof(largest_fp_value));
}
#endif /* USE_LONG_DOUBLE */
result = OK;

View File

@ -1,5 +1,5 @@
/*
* $Id: math_isinf.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
* $Id: math_isinf.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -45,26 +45,6 @@
/****************************************************************************/
union ieee_long_double
{
long double value;
unsigned long raw[3];
};
union ieee_double
{
double value;
unsigned long raw[2];
};
union ieee_single
{
float value;
unsigned long raw[1];
};
/****************************************************************************/
int
isinf(double number)
{
@ -93,6 +73,7 @@ isinf(double number)
/* Exponent = 2047 and fraction = 0.0 */
is_infinity = (((x.raw[0] & 0x7FFFFFFF) == 0x7FF00000) && (x.raw[1] == 0));
}
#if defined(USE_LONG_DOUBLE)
else if (sizeof(number) == 12) /* extended precision */
{
union ieee_long_double x;
@ -102,6 +83,7 @@ isinf(double number)
/* Exponent = 32767 and fraction = 0.0 */
is_infinity = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && (x.raw[1] & 0x7FFFFFFF) == 0 && (x.raw[2] == 0));
}
#endif /* USE_LONG_DOUBLE */
else
{
/* Can't happen */

View File

@ -1,5 +1,5 @@
/*
* $Id: math_isnan.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
* $Id: math_isnan.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -45,26 +45,6 @@
/****************************************************************************/
union ieee_long_double
{
long double value;
unsigned long raw[3];
};
union ieee_double
{
double value;
unsigned long raw[2];
};
union ieee_single
{
float value;
unsigned long raw[1];
};
/****************************************************************************/
int
isnan(double number)
{
@ -92,15 +72,17 @@ isnan(double number)
/* Exponent = 2047 and fraction != 0.0 */
result = (((x.raw[0] & 0x7FF00000) == 0x7FF00000) && ((x.raw[0] & 0x000FFFFF) != 0 || (x.raw[1] != 0)));
}
#if defined(USE_LONG_DOUBLE)
else if (sizeof(number) == 12) /* extended precision */
{
union ieee_long_double x;
x.value = number;
/* Exponent = 32767 and fraction != 0.0 */
/* Exponent = 32766 and fraction != 0.0 */
result = (((x.raw[0] & 0x7FFF0000) == 0x7FFF0000) && ((x.raw[1] & 0x7FFFFFFF) != 0 || x.raw[2] != 0));
}
#endif /* USE_LONG_DOUBLE */
else
{
/* Can't happen */

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "net.lib 1.168"
#define VSTRING "net.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: net.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "net.lib 1.169"
#define VSTRING "net.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: net.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,3 +1,19 @@
c.lib 1.169 (8.8.2004)
- Since the 'long double' data type is not really supported by the GCC
versions we use (and not supported by SAS/C either) building the
library with support code for it is now a configurable option. Unless
enabled, 'long double' is now treated like 'double'.
- Reworked the HUGE_VAL definition which previously would default to
Infinity. The new code properly defines this to the largest
representable floating point number. The 'great' thing about the
HUGE_VAL definition in this library is that it's a reference to
a binary constant initialized by the library startup code. So any
application checking for HUGE_VAL merely needs to be relinked
rather than recompiled.
c.lib 1.168 (7.8.2004)
- Ditched __is_infinity() and __is_not_a_number(), brought them back

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "stack.lib 1.168"
#define VSTRING "stack.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "stack.lib 1.169"
#define VSTRING "stack.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169

View File

@ -1,5 +1,5 @@
/*
* $Id: stdio_protos.h,v 1.1.1.1 2004-07-26 16:31:39 obarthel Exp $
* $Id: stdio_protos.h,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -200,22 +200,4 @@ extern void __duplicate_fd(struct fd * duplicate_fd,struct fd * original_fd);
/****************************************************************************/
#if defined(FLOATING_POINT_SUPPORT)
/****************************************************************************/
/* stdio_isnotanumber.c */
extern int __is_not_a_number(long double number);
/****************************************************************************/
/* stdio_isinfinity.c */
extern int __is_infinity(long double number);
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT */
/****************************************************************************/
#endif /* _STDIO_PROTOS_H */

View File

@ -1,5 +1,5 @@
/*
* $Id: stdio_vfprintf.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
* $Id: stdio_vfprintf.c,v 1.3 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -72,7 +72,7 @@
/****************************************************************************/
static int
get_num_leading_digits(long double v)
get_num_leading_digits(__long_double_t v)
{
int num_digits;
@ -634,14 +634,14 @@ vfprintf(FILE * stream,const char * format, va_list arg)
const char * buffer_stop = &buffer[sizeof(buffer)-1];
char * buffer_start = buffer;
long double v;
__long_double_t v;
output_buffer = buffer_start;
D(("sizeof(long double) == %ld",sizeof(v)));
if(parameter_size == parameter_size_long_double)
v = va_arg(arg, long double);
v = va_arg(arg, __long_double_t);
else
v = va_arg(arg, double);
@ -676,7 +676,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
else
{
BOOL strip_trailing_zeroes = FALSE;
long double roundoff_fudge = 0.0;
__long_double_t roundoff_fudge = 0.0;
int max_digits = -1;
int exponent = 0;
int digit;
@ -713,7 +713,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
/* Figure out whether 'e' or 'f' format should be used. */
if(conversion_type == 'g' || conversion_type == 'e')
{
long double local_v = v;
__long_double_t local_v = v;
int local_exponent = 0;
/* Put one single digit in front of the decimal point. */
@ -978,7 +978,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
/* Remove the parameter from the argument vector and
don't produce any output. */
if(parameter_size == parameter_size_long_double)
(void)va_arg(arg, long double);
(void)va_arg(arg, __long_double_t);
else
(void)va_arg(arg, double);

View File

@ -1,5 +1,5 @@
/*
* $Id: stdio_vfscanf.c,v 1.1.1.1 2004-07-26 16:31:48 obarthel Exp $
* $Id: stdio_vfscanf.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@ -456,8 +456,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
#if defined(FLOATING_POINT_SUPPORT)
{
long double sum = 0.0;
long double new_sum;
__long_double_t sum = 0.0;
__long_double_t new_sum;
BOOL is_negative = FALSE;
BOOL decimal_point_matches = FALSE;
BOOL have_exponent = FALSE;
@ -495,7 +495,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("extended format (long double)");
next_parameter = va_arg(arg,long double *);
next_parameter = va_arg(arg,__long_double_t *);
}
assert( next_parameter != NULL );
@ -520,7 +520,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
else
{
*((long double *)next_parameter) = 0;
*((__long_double_t *)next_parameter) = 0;
}
}
@ -869,7 +869,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
else
{
*((long double *)next_parameter) = sum;
*((__long_double_t *)next_parameter) = sum;
}
num_assignments++;
@ -912,7 +912,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("extended format (long double)");
next_parameter = va_arg(arg,long double *);
next_parameter = va_arg(arg,__long_double_t *);
}
assert( next_parameter != NULL );

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 168
#define DATE "7.8.2004"
#define VERS "unix.lib 1.168"
#define VSTRING "unix.lib 1.168 (7.8.2004)\r\n"
#define VERSTAG "\0$VER: unix.lib 1.168 (7.8.2004)"
#define REVISION 169
#define DATE "8.8.2004"
#define VERS "unix.lib 1.169"
#define VSTRING "unix.lib 1.169 (8.8.2004)\r\n"
#define VERSTAG "\0$VER: unix.lib 1.169 (8.8.2004)"

View File

@ -1 +1 @@
168
169