mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c10f9dca91 | ||
|
|
51e20cee1d | ||
|
|
618af18519 | ||
|
|
0cbc101798 | ||
|
|
5d508c6e6d | ||
|
|
a4b138e406 | ||
|
|
7d21a272cc | ||
|
|
7ae8399e43 | ||
|
|
0d101fd928 | ||
|
|
6a2db55fc2 | ||
|
|
6214bc2067 | ||
|
|
4a4c8b2ef9 | ||
|
|
f3c4ee68cd | ||
|
|
0848048029 | ||
|
|
dfd3dc3170 | ||
|
|
5d705f3c30 |
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# $Id: GNUmakefile.68k,v 1.8 2004-08-25 15:27:27 obarthel Exp $
|
# $Id: GNUmakefile.68k,v 1.9 2004-09-20 17:16:06 obarthel Exp $
|
||||||
#
|
#
|
||||||
# :ts=8
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -307,6 +307,8 @@ C_LIB = \
|
|||||||
stdlib_startup.o \
|
stdlib_startup.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
stdlib_strtoul.o \
|
||||||
|
stdlib_strtoll.o \
|
||||||
|
stdlib_strtoull.o \
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_sysbase.o \
|
stdlib_sysbase.o \
|
||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# $Id: GNUmakefile.os4,v 1.6 2004-08-25 15:27:27 obarthel Exp $
|
# $Id: GNUmakefile.os4,v 1.8 2004-09-27 15:04:51 tfrieden Exp $
|
||||||
#
|
#
|
||||||
# :ts=8
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -65,7 +65,7 @@ $(LIBUNIX_OBJS)/%.o : %.c
|
|||||||
|
|
||||||
$(LIBM_OBJS)/%.o : %.c
|
$(LIBM_OBJS)/%.o : %.c
|
||||||
@echo "Compiling $< [$(TYPE):m]"
|
@echo "Compiling $< [$(TYPE):m]"
|
||||||
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -DPPC_FLOATING_POINT_SUPPORT $<
|
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) $<
|
||||||
|
|
||||||
$(LIBSTACK_OBJS)/%.o : %.c
|
$(LIBSTACK_OBJS)/%.o : %.c
|
||||||
@echo "Compiling $< [$(TYPE):stack]"
|
@echo "Compiling $< [$(TYPE):stack]"
|
||||||
@@ -86,11 +86,15 @@ $(LIBAMIGA_OBJS)/%.o : %.c
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
ifeq (small_data,$(TYPE))
|
ifeq (small_data,$(TYPE))
|
||||||
CODE_TYPE := -msdata=sysv -DSMALL_DATA
|
CODE_TYPE := -msdata=sysv -DSMALL_DATA -DPPC_FLOATING_POINT_SUPPORT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (large_data,$(TYPE))
|
ifeq (large_data,$(TYPE))
|
||||||
CODE_TYPE := -msdata=data
|
CODE_TYPE := -msdata=data -DPPC_FLOATING_POINT_SUPPORT
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (large_data_softfloat, $(TYPE))
|
||||||
|
CODE_TYPE := -msdata=data -msoft-float
|
||||||
endif
|
endif
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
@@ -302,6 +306,8 @@ C_LIB = \
|
|||||||
stdlib_startup.o \
|
stdlib_startup.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
stdlib_strtoul.o \
|
||||||
|
stdlib_strtoll.o \
|
||||||
|
stdlib_strtoull.o \
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
stdlib_termination_message.o \
|
stdlib_termination_message.o \
|
||||||
@@ -682,7 +688,12 @@ all: \
|
|||||||
lib/crtbegin.o \
|
lib/crtbegin.o \
|
||||||
lib/crtend.o \
|
lib/crtend.o \
|
||||||
lib/mainnb.o \
|
lib/mainnb.o \
|
||||||
lib/libm.a
|
lib/libm.a \
|
||||||
|
lib/small-data/libm.a \
|
||||||
|
lib/bcrt0.o \
|
||||||
|
lib/bcrtbegin.o \
|
||||||
|
lib/bcrtend.o \
|
||||||
|
lib/soft-float/libc.a
|
||||||
|
|
||||||
copy:
|
copy:
|
||||||
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
||||||
@@ -737,6 +748,12 @@ endif
|
|||||||
lib:
|
lib:
|
||||||
-$(MAKEDIR) $@
|
-$(MAKEDIR) $@
|
||||||
|
|
||||||
|
lib/small-data:
|
||||||
|
-$(MAKEDIR) $@
|
||||||
|
|
||||||
|
lib/soft-float:
|
||||||
|
-$(MAKEDIR) $@
|
||||||
|
|
||||||
lib/libm.a: lib
|
lib/libm.a: lib
|
||||||
$(MAKE) TYPE=large_data kitchen_sink
|
$(MAKE) TYPE=large_data kitchen_sink
|
||||||
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
|
||||||
@@ -745,6 +762,10 @@ lib/small-data/libm.a: lib lib/small-data
|
|||||||
$(MAKE) TYPE=small_data kitchen_sink
|
$(MAKE) TYPE=small_data kitchen_sink
|
||||||
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
|
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
|
||||||
|
|
||||||
|
lib/soft-float/libc.a: lib lib/soft-float
|
||||||
|
$(MAKE) TYPE=large_data_softfloat kitchen_sink
|
||||||
|
$(COPY) $(foreach file,$(LIBS),large_data_softfloat/$(file)) lib/soft-float
|
||||||
|
|
||||||
lib/crt0.o : lib crt0.o
|
lib/crt0.o : lib crt0.o
|
||||||
$(COPY) crt0.o lib
|
$(COPY) crt0.o lib
|
||||||
|
|
||||||
@@ -760,6 +781,15 @@ lib/mainnb.o : lib mainnb.o
|
|||||||
lib/mainb.o : lib mainb.o
|
lib/mainb.o : lib mainb.o
|
||||||
$(COPY) mainb.o lib
|
$(COPY) mainb.o lib
|
||||||
|
|
||||||
|
lib/bcrt0.o : lib bcrt0.o
|
||||||
|
$(COPY) bcrt0.o lib
|
||||||
|
|
||||||
|
lib/bcrtbegin.o : lib bcrtbegin.o
|
||||||
|
$(COPY) bcrtbegin.o lib
|
||||||
|
|
||||||
|
lib/bcrtend.o : lib bcrtend.o
|
||||||
|
$(COPY) bcrtend.o lib
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c
|
$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c
|
||||||
@@ -880,6 +910,13 @@ mainb.o : stdlib_main.c
|
|||||||
@echo "Compiling $<"
|
@echo "Compiling $<"
|
||||||
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA stdlib_main.c
|
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA stdlib_main.c
|
||||||
|
|
||||||
|
bcrtbegin.o : crtbegin.c
|
||||||
|
$(CC) -o bcrtbegin.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtbegin.c
|
||||||
|
|
||||||
|
bcrtend.o : crtend.c
|
||||||
|
$(CC) -o bcrtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c
|
||||||
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
mkid:
|
mkid:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "amiga.lib 1.173"
|
#define VERS "amiga.lib 1.176"
|
||||||
#define VSTRING "amiga.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "amiga.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: amiga.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: amiga.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "c.lib 1.173"
|
#define VERS "c.lib 1.176"
|
||||||
#define VSTRING "c.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "c.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: c.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: c.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,3 +1,36 @@
|
|||||||
|
- Added strtoll() and strtoull(), with further changes to <limits.h>
|
||||||
|
and <stdlib.h>.
|
||||||
|
|
||||||
|
|
||||||
|
c.lib 1.175 (10.9.2004)
|
||||||
|
|
||||||
|
- <stdarg.h> now tries to use the compiler supplied, machine specific
|
||||||
|
<stdarg.h> file and also includes the OS4-specifc <sys/amigaos-va.h>
|
||||||
|
file, if necessary.
|
||||||
|
|
||||||
|
- Added another test to <sys/time.h> to check if the "timeval" definition is
|
||||||
|
already in place. If it is, <exec/types.h> will not be included.
|
||||||
|
|
||||||
|
- <sys/time.h> can be made to define the timeval data structure locally if
|
||||||
|
the __USE_CLIB2_TIMEVAL preprocessor symbol is defined. In this case no
|
||||||
|
<exec/types.h> or <devices/timer.h> file will be read.
|
||||||
|
|
||||||
|
- The sprintf() family did not properly handle empty strings as format
|
||||||
|
specifications. This would result in a necessary buffer flush action
|
||||||
|
getting skipped, which consequently did not put the string termination
|
||||||
|
character into the output buffer.
|
||||||
|
|
||||||
|
|
||||||
|
c.lib 1.174 (27.8.2004)
|
||||||
|
|
||||||
|
- The parameters of atan2() were swapped. Fixed.
|
||||||
|
|
||||||
|
- Merged fdlibm 5.3 changes with __kernel_tan(), __exp() and __pow()
|
||||||
|
functions.
|
||||||
|
|
||||||
|
- Replaced the rint() and rintf() functions with the fdlibm code.
|
||||||
|
|
||||||
|
|
||||||
c.lib 1.173 (25.8.2004)
|
c.lib 1.173 (25.8.2004)
|
||||||
|
|
||||||
- The <assert.h> header file was missing the C++ 'extern "C" { .. }'
|
- The <assert.h> header file was missing the C++ 'extern "C" { .. }'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "debug.lib 1.173"
|
#define VERS "debug.lib 1.176"
|
||||||
#define VSTRING "debug.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "debug.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: debug.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: debug.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: limits.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
|
* $Id: limits.h,v 1.3 2004-09-20 17:16:07 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -58,6 +58,12 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#define LLONG_MIN (-0x7fffffffffffffffLL-1)
|
||||||
|
#define LLONG_MAX 0x7fffffffffffffffLL
|
||||||
|
#define ULLONG_MAX 0xffffffffffffffffULL
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
#define PATH_MAX 1024
|
#define PATH_MAX 1024
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdarg.h,v 1.1.1.1 2004-07-26 16:32:53 obarthel Exp $
|
* $Id: stdarg.h,v 1.2 2004-09-09 08:25:30 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -57,12 +57,25 @@ typedef char * va_list;
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#if defined(__GNUC__)
|
|
||||||
#undef _STDARG_H
|
/****************************************************************************/
|
||||||
#include_next "stdarg.h"
|
|
||||||
#else
|
#if defined(__GNUC__)
|
||||||
#error "Unknown compiler"
|
|
||||||
#endif /* __GNUC__ */
|
/* Use the compiler supplied, machine specific <stdarg.h> file. */
|
||||||
|
#undef _STDARG_H
|
||||||
|
#include_next "stdarg.h"
|
||||||
|
|
||||||
|
#include <sys/amigaos-va.h>
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "Unknown compiler"
|
||||||
|
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif /* __amigaos4__ */
|
#endif /* __amigaos4__ */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
|
* $Id: stdlib.h,v 1.3 2004-09-20 17:16:07 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -151,6 +151,11 @@ extern long atol(const char *str);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
extern long long strtoll(const char *str, char **ptr, int base);
|
||||||
|
extern unsigned long long strtoull(const char *str, char **ptr, int base);
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
#if defined(alloca)
|
#if defined(alloca)
|
||||||
#undef alloca
|
#undef alloca
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: time.h,v 1.2 2004-08-07 09:15:33 obarthel Exp $
|
* $Id: time.h,v 1.6 2004-09-10 07:39:20 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -52,7 +52,7 @@ extern "C" {
|
|||||||
structure and try to get by with this definition. Sometimes it works,
|
structure and try to get by with this definition. Sometimes it works,
|
||||||
sometimes it doesn't. Not sure if there really is a good solution for
|
sometimes it doesn't. Not sure if there really is a good solution for
|
||||||
this problem... */
|
this problem... */
|
||||||
#ifndef DEVICES_TIMER_H
|
#if !defined(__TIMEVAL_ALREADY_DEFINED) && !defined(__USE_CLIB2_TIMEVAL)
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -73,11 +73,23 @@ extern "C" {
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* This will define the 'struct timeval' */
|
/* This will define the 'struct timeval' */
|
||||||
|
#ifndef DEVICES_TIMER_H
|
||||||
#include <devices/timer.h>
|
#include <devices/timer.h>
|
||||||
|
#endif /* DEVICES_TIMER_H */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#else
|
#endif /* INCLUDE_VERSION */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* !__TIMEVAL_ALREADY_DEFINED && !__USE_CLIB2_TIMEVAL */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
/* If the timeval is still undefined or should be defined locally,
|
||||||
|
define our own now... */
|
||||||
|
#if !defined(__TIMEVAL_ALREADY_DEFINED)
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -94,11 +106,7 @@ struct timeval
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif /* INCLUDE_VERSION */
|
#endif /* !__TIMEVAL_ALREADY_DEFINED */
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
#endif /* DEVICES_TIMER_H */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "m.lib 1.173"
|
#define VERS "m.lib 1.176"
|
||||||
#define VSTRING "m.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "m.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: m.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: m.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "m881.lib 1.173"
|
#define VERS "m881.lib 1.176"
|
||||||
#define VSTRING "m881.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "m881.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: m881.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: m881.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_atan2.c,v 1.2 2004-08-21 18:57:40 obarthel Exp $
|
* $Id: math_atan2.c,v 1.3 2004-08-27 11:40:49 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -63,7 +63,7 @@ extern double __atan(double x);
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__atan2(double x,double y)
|
__atan2(double y,double x)
|
||||||
{
|
{
|
||||||
const double pi = 3.14159265358979323846;
|
const double pi = 3.14159265358979323846;
|
||||||
const double pi_over_2 = pi / 2.0;
|
const double pi_over_2 = pi / 2.0;
|
||||||
@@ -135,7 +135,7 @@ __atan(double x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__atan2(double x,double y)
|
__atan2(double y,double x)
|
||||||
{
|
{
|
||||||
double pi,pi_over_2;
|
double pi,pi_over_2;
|
||||||
double result;
|
double result;
|
||||||
@@ -210,7 +210,7 @@ pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
|
|||||||
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__atan2(double x,double y)
|
__atan2(double y,double x)
|
||||||
{
|
{
|
||||||
double z;
|
double z;
|
||||||
int k,m,hx,hy,ix,iy;
|
int k,m,hx,hy,ix,iy;
|
||||||
@@ -319,11 +319,11 @@ __atan2(double x,double y)
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
double
|
double
|
||||||
atan2(double x,double y)
|
atan2(double y,double x)
|
||||||
{
|
{
|
||||||
double result;
|
double result;
|
||||||
|
|
||||||
result = __atan2(x,y);
|
result = __atan2(y,x);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_exp.c,v 1.1.1.1 2004-07-26 16:30:41 obarthel Exp $
|
* $Id: math_exp.c,v 1.2 2004-08-27 11:40:49 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -194,7 +194,7 @@ __exp(double x)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
k = invln2*x+halF[xsb];
|
k = (int)(invln2*x+halF[xsb]);
|
||||||
t = k;
|
t = k;
|
||||||
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
|
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
|
||||||
lo = t*ln2LO[0];
|
lo = t*ln2LO[0];
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_fabs.c,v 1.1.1.1 2004-07-26 16:30:42 obarthel Exp $
|
* $Id: math_fabs.c,v 1.2 2004-09-27 15:06:16 tfrieden Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -141,6 +141,17 @@ __fabs(double x)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
INLINE static const double
|
||||||
|
__fabs(double x)
|
||||||
|
{
|
||||||
|
if (x > 0)
|
||||||
|
return x;
|
||||||
|
else
|
||||||
|
return -x;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* PPC_FLOATING_POINT_SUPPORT */
|
#endif /* PPC_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_headers.h,v 1.3 2004-08-21 18:57:40 obarthel Exp $
|
* $Id: math_headers.h,v 1.4 2004-08-27 13:49:17 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -148,6 +148,33 @@ do { \
|
|||||||
(d) = sl_u.value; \
|
(d) = sl_u.value; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* A union which permits us to convert between a float and a 32 bit
|
||||||
|
int. */
|
||||||
|
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
float value;
|
||||||
|
unsigned int word;
|
||||||
|
} ieee_float_shape_type;
|
||||||
|
|
||||||
|
/* Get a 32 bit int from a float. */
|
||||||
|
|
||||||
|
#define GET_FLOAT_WORD(i,d) \
|
||||||
|
do { \
|
||||||
|
ieee_float_shape_type gf_u; \
|
||||||
|
gf_u.value = (d); \
|
||||||
|
(i) = gf_u.word; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Set a float from a 32 bit int. */
|
||||||
|
|
||||||
|
#define SET_FLOAT_WORD(d,i) \
|
||||||
|
do { \
|
||||||
|
ieee_float_shape_type sf_u; \
|
||||||
|
sf_u.word = (i); \
|
||||||
|
(d) = sf_u.value; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
extern double __kernel_cos(double x, double y);
|
extern double __kernel_cos(double x, double y);
|
||||||
extern double __kernel_sin(double x, double y, int iy);
|
extern double __kernel_sin(double x, double y, int iy);
|
||||||
extern int __rem_pio2(double x, double *y);
|
extern int __rem_pio2(double x, double *y);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_kernel_tan.c,v 1.1.1.1 2004-07-26 16:30:48 obarthel Exp $
|
* $Id: math_kernel_tan.c,v 1.2 2004-08-27 11:40:49 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -82,7 +82,21 @@ double __kernel_tan(double x, double y, int iy)
|
|||||||
unsigned int low;
|
unsigned int low;
|
||||||
GET_LOW_WORD(low,x);
|
GET_LOW_WORD(low,x);
|
||||||
if(((ix|low)|(iy+1))==0) return one/fabs(x);
|
if(((ix|low)|(iy+1))==0) return one/fabs(x);
|
||||||
else return (iy==1)? x: -one/x;
|
else {
|
||||||
|
if (iy == 1)
|
||||||
|
return x;
|
||||||
|
else { /* compute -1 / (x+y) carefully */
|
||||||
|
double a, t;
|
||||||
|
|
||||||
|
z = w = x + y;
|
||||||
|
SET_LOW_WORD(z,0);
|
||||||
|
v = y - (z - x);
|
||||||
|
t = a = -one / w;
|
||||||
|
SET_LOW_WORD(t,0);
|
||||||
|
s = one + t * z;
|
||||||
|
return t + a * (s + t * v);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(ix>=0x3FE59428) { /* |x|>=0.6744 */
|
if(ix>=0x3FE59428) { /* |x|>=0.6744 */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_log.c,v 1.1.1.1 2004-07-26 16:30:49 obarthel Exp $
|
* $Id: math_log.c,v 1.2 2004-09-27 15:06:19 tfrieden Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -135,7 +135,7 @@ __log(double x)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
#if defined(__PPC__)
|
||||||
|
|
||||||
static const double
|
static const double
|
||||||
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
|
ln2_hi = 6.93147180369123816490e-01, /* 3fe62e42 fee00000 */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_modf.c,v 1.1.1.1 2004-07-26 16:30:50 obarthel Exp $
|
* $Id: math_modf.c,v 1.2 2004-09-27 15:06:19 tfrieden Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -109,7 +109,7 @@ __modf(double x,double *nptr)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
#if defined(__PPC__)
|
||||||
|
|
||||||
INLINE static const double
|
INLINE static const double
|
||||||
__modf(double x,double *nptr)
|
__modf(double x,double *nptr)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_pow.c,v 1.1.1.1 2004-07-26 16:30:52 obarthel Exp $
|
* $Id: math_pow.c,v 1.3 2004-09-27 15:06:19 tfrieden Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -171,7 +171,7 @@ __pow(double x,double y)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
#if defined(__PPC__)
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -286,11 +286,12 @@ __pow(double x,double y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (x<0)**(non-int) is NaN */
|
/* (x<0)**(non-int) is NaN */
|
||||||
/* REDHAT LOCAL: This used to be
|
n = ((unsigned int)hx>>31)+1;
|
||||||
if((((hx>>31)+1)|yisint)==0) return (x-x)/(x-x);
|
if((n|yisint)==0) return (x-x)/(x-x);
|
||||||
but ANSI C says a right shift of a signed negative quantity is
|
|
||||||
implementation defined. */
|
s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
|
||||||
if(((((unsigned int)hx>>31)-1)|yisint)==0) return (x-x)/(x-x);
|
if((n|(yisint-1))==0)
|
||||||
|
s = -one;/* (-ve)**(odd int) */
|
||||||
|
|
||||||
/* |y| is huge */
|
/* |y| is huge */
|
||||||
if(iy>0x41e00000) { /* if |y| > 2**31 */
|
if(iy>0x41e00000) { /* if |y| > 2**31 */
|
||||||
@@ -299,11 +300,11 @@ __pow(double x,double y)
|
|||||||
if(ix>=0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
|
if(ix>=0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
|
||||||
}
|
}
|
||||||
/* over/underflow if x is not close to one */
|
/* over/underflow if x is not close to one */
|
||||||
if(ix<0x3fefffff) return (hy<0)? huge*huge:tiny*tiny;
|
if(ix<0x3fefffff) return (hy<0)? s*huge*huge:s*tiny*tiny;
|
||||||
if(ix>0x3ff00000) return (hy>0)? huge*huge:tiny*tiny;
|
if(ix>0x3ff00000) return (hy>0)? s*huge*huge:s*tiny*tiny;
|
||||||
/* now |1-x| is tiny <= 2**-20, suffice to compute
|
/* now |1-x| is tiny <= 2**-20, suffice to compute
|
||||||
log(x) by x-x^2/2+x^3/3-x^4/4 */
|
log(x) by x-x^2/2+x^3/3-x^4/4 */
|
||||||
t = ax-1; /* t has 20 trailing zeros */
|
t = ax-one; /* t has 20 trailing zeros */
|
||||||
w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
|
w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25));
|
||||||
u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
|
u = ivln2_h*t; /* ivln2_h has 21 sig. bits */
|
||||||
v = t*ivln2_l-w*ivln2;
|
v = t*ivln2_l-w*ivln2;
|
||||||
@@ -311,7 +312,7 @@ __pow(double x,double y)
|
|||||||
SET_LOW_WORD(t1,0);
|
SET_LOW_WORD(t1,0);
|
||||||
t2 = v-(t1-u);
|
t2 = v-(t1-u);
|
||||||
} else {
|
} else {
|
||||||
double s2,s_h,s_l,t_h,t_l;
|
double ss,s2,s_h,s_l,t_h,t_l;
|
||||||
n = 0;
|
n = 0;
|
||||||
/* take care subnormal number */
|
/* take care subnormal number */
|
||||||
if(ix<0x00100000)
|
if(ix<0x00100000)
|
||||||
@@ -325,11 +326,11 @@ __pow(double x,double y)
|
|||||||
else {k=0;n+=1;ix -= 0x00100000;}
|
else {k=0;n+=1;ix -= 0x00100000;}
|
||||||
SET_HIGH_WORD(ax,ix);
|
SET_HIGH_WORD(ax,ix);
|
||||||
|
|
||||||
/* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
|
/* compute ss = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
|
||||||
u = ax-bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
|
u = ax-bp[k]; /* bp[0]=1.0, bp[1]=1.5 */
|
||||||
v = one/(ax+bp[k]);
|
v = one/(ax+bp[k]);
|
||||||
s = u*v;
|
ss = u*v;
|
||||||
s_h = s;
|
s_h = ss;
|
||||||
SET_LOW_WORD(s_h,0);
|
SET_LOW_WORD(s_h,0);
|
||||||
/* t_h=ax+bp[k] High */
|
/* t_h=ax+bp[k] High */
|
||||||
t_h = zero;
|
t_h = zero;
|
||||||
@@ -337,33 +338,29 @@ __pow(double x,double y)
|
|||||||
t_l = ax - (t_h-bp[k]);
|
t_l = ax - (t_h-bp[k]);
|
||||||
s_l = v*((u-s_h*t_h)-s_h*t_l);
|
s_l = v*((u-s_h*t_h)-s_h*t_l);
|
||||||
/* compute log(ax) */
|
/* compute log(ax) */
|
||||||
s2 = s*s;
|
s2 = ss*ss;
|
||||||
r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
|
r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6)))));
|
||||||
r += s_l*(s_h+s);
|
r += s_l*(s_h+ss);
|
||||||
s2 = s_h*s_h;
|
s2 = s_h*s_h;
|
||||||
t_h = 3.0+s2+r;
|
t_h = 3.0+s2+r;
|
||||||
SET_LOW_WORD(t_h,0);
|
SET_LOW_WORD(t_h,0);
|
||||||
t_l = r-((t_h-3.0)-s2);
|
t_l = r-((t_h-3.0)-s2);
|
||||||
/* u+v = s*(1+...) */
|
/* u+v = ss*(1+...) */
|
||||||
u = s_h*t_h;
|
u = s_h*t_h;
|
||||||
v = s_l*t_h+t_l*s;
|
v = s_l*t_h+t_l*ss;
|
||||||
/* 2/(3log2)*(s+...) */
|
/* 2/(3log2)*(ss+...) */
|
||||||
p_h = u+v;
|
p_h = u+v;
|
||||||
SET_LOW_WORD(p_h,0);
|
SET_LOW_WORD(p_h,0);
|
||||||
p_l = v-(p_h-u);
|
p_l = v-(p_h-u);
|
||||||
z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
|
z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */
|
||||||
z_l = cp_l*p_h+p_l*cp+dp_l[k];
|
z_l = cp_l*p_h+p_l*cp+dp_l[k];
|
||||||
/* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
|
/* log2(ax) = (ss+..)*2/(3*log2) = n + dp_h + z_h + z_l */
|
||||||
t = (double)n;
|
t = (double)n;
|
||||||
t1 = (((z_h+z_l)+dp_h[k])+t);
|
t1 = (((z_h+z_l)+dp_h[k])+t);
|
||||||
SET_LOW_WORD(t1,0);
|
SET_LOW_WORD(t1,0);
|
||||||
t2 = z_l-(((t1-t)-dp_h[k])-z_h);
|
t2 = z_l-(((t1-t)-dp_h[k])-z_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
s = one; /* s (sign of result -ve**odd) = -1 else = 1 */
|
|
||||||
if(((((unsigned int)hx>>31)-1)|(yisint-1))==0)
|
|
||||||
s = -one;/* (-ve)**(odd int) */
|
|
||||||
|
|
||||||
/* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
|
/* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
|
||||||
y1 = y;
|
y1 = y;
|
||||||
SET_LOW_WORD(y1,0);
|
SET_LOW_WORD(y1,0);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_rint.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
|
* $Id: math_rint.c,v 1.3 2004-08-27 13:49:17 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -54,6 +54,10 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
double
|
double
|
||||||
rint(double x)
|
rint(double x)
|
||||||
{
|
{
|
||||||
@@ -62,5 +66,71 @@ rint(double x)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif /* FLOATING_POINT_SUPPORT */
|
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
static const double
|
||||||
|
TWO52[2]={
|
||||||
|
4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */
|
||||||
|
-4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */
|
||||||
|
};
|
||||||
|
|
||||||
|
double
|
||||||
|
rint(double x)
|
||||||
|
{
|
||||||
|
int i0,j0,sx;
|
||||||
|
unsigned i,i1;
|
||||||
|
double w,t;
|
||||||
|
GET_HIGH_WORD(i0,x);
|
||||||
|
sx = (i0>>31)&1;
|
||||||
|
GET_LOW_WORD(i1,x);
|
||||||
|
j0 = ((i0>>20)&0x7ff)-0x3ff;
|
||||||
|
if(j0<20) {
|
||||||
|
if(j0<0) {
|
||||||
|
if(((i0&0x7fffffff)|i1)==0) return x;
|
||||||
|
i1 |= (i0&0x0fffff);
|
||||||
|
i0 &= 0xfffe0000;
|
||||||
|
i0 |= ((i1|-i1)>>12)&0x80000;
|
||||||
|
SET_HIGH_WORD(x,i0);
|
||||||
|
w = TWO52[sx]+x;
|
||||||
|
t = w-TWO52[sx];
|
||||||
|
GET_HIGH_WORD(i0,t);
|
||||||
|
SET_HIGH_WORD(t,(i0&0x7fffffff)|(sx<<31));
|
||||||
|
return t;
|
||||||
|
} else {
|
||||||
|
i = (0x000fffff)>>j0;
|
||||||
|
if(((i0&i)|i1)==0) return x; /* x is integral */
|
||||||
|
i>>=1;
|
||||||
|
if(((i0&i)|i1)!=0) {
|
||||||
|
if(j0==19) i1 = 0x40000000; else
|
||||||
|
i0 = (i0&(~i))|((0x20000)>>j0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (j0>51) {
|
||||||
|
if(j0==0x400) return x+x; /* inf or NaN */
|
||||||
|
else return x; /* x is integral */
|
||||||
|
} else {
|
||||||
|
i = ((unsigned)(0xffffffff))>>(j0-20);
|
||||||
|
if((i1&i)==0) return x; /* x is integral */
|
||||||
|
i>>=1;
|
||||||
|
if((i1&i)!=0) i1 = (i1&(~i))|((0x40000000)>>(j0-20));
|
||||||
|
}
|
||||||
|
|
||||||
|
SET_HIGH_WORD(x,i0);
|
||||||
|
SET_LOW_WORD(x,i1);
|
||||||
|
w = TWO52[sx]+x;
|
||||||
|
return w-TWO52[sx];
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* PPC_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* FLOATING_POINT_SUPPORT */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_rintf.c,v 1.1 2004-08-07 09:15:32 obarthel Exp $
|
* $Id: math_rintf.c,v 1.2 2004-08-27 13:49:17 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -54,6 +54,10 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
float
|
float
|
||||||
rintf(float x)
|
rintf(float x)
|
||||||
{
|
{
|
||||||
@@ -62,5 +66,64 @@ rintf(float x)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif /* FLOATING_POINT_SUPPORT */
|
#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
/* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
static const float
|
||||||
|
TWO23[2]={
|
||||||
|
8.3886080000e+06, /* 0x4b000000 */
|
||||||
|
-8.3886080000e+06, /* 0xcb000000 */
|
||||||
|
};
|
||||||
|
|
||||||
|
float
|
||||||
|
rintf(float x)
|
||||||
|
{
|
||||||
|
int i0,j0,sx;
|
||||||
|
unsigned int i,i1;
|
||||||
|
float w,t;
|
||||||
|
GET_FLOAT_WORD(i0,x);
|
||||||
|
sx = (i0>>31)&1;
|
||||||
|
j0 = ((i0>>23)&0xff)-0x7f;
|
||||||
|
if(j0<23) {
|
||||||
|
if(j0<0) {
|
||||||
|
if((i0&0x7fffffff)==0) return x;
|
||||||
|
i1 = (i0&0x07fffff);
|
||||||
|
i0 &= 0xfff00000;
|
||||||
|
i0 |= ((i1|-i1)>>9)&0x400000;
|
||||||
|
SET_FLOAT_WORD(x,i0);
|
||||||
|
w = TWO23[sx]+x;
|
||||||
|
t = w-TWO23[sx];
|
||||||
|
GET_FLOAT_WORD(i0,t);
|
||||||
|
SET_FLOAT_WORD(t,(i0&0x7fffffff)|(sx<<31));
|
||||||
|
return t;
|
||||||
|
} else {
|
||||||
|
i = (0x007fffff)>>j0;
|
||||||
|
if((i0&i)==0) return x; /* x is integral */
|
||||||
|
i>>=1;
|
||||||
|
if((i0&i)!=0) i0 = (i0&(~i))|((0x100000)>>j0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(j0==0x80) return x+x; /* inf or NaN */
|
||||||
|
else return x; /* x is integral */
|
||||||
|
}
|
||||||
|
SET_FLOAT_WORD(x,i0);
|
||||||
|
w = TWO23[sx]+x;
|
||||||
|
return w-TWO23[sx];
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* PPC_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* FLOATING_POINT_SUPPORT */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: math_sqrt.c,v 1.2 2004-08-21 18:57:40 obarthel Exp $
|
* $Id: math_sqrt.c,v 1.3 2004-09-27 15:06:19 tfrieden Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -135,7 +135,7 @@ __sqrt(double x)
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
#ifdef __PPC__
|
||||||
|
|
||||||
static const double one = 1.0, tiny=1.0e-300;
|
static const double one = 1.0, tiny=1.0e-300;
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ __sqrt(double x)
|
|||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* PPC_FLOATING_POINT_SUPPORT */
|
#endif
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "net.lib 1.173"
|
#define VERS "net.lib 1.176"
|
||||||
#define VSTRING "net.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "net.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: net.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: net.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
c.lib 1.173 (25.8.2004)
|
c.lib 1.175 (10.9.2004)
|
||||||
|
|
||||||
- You can now retrieve the low level file handle or socket descriptor
|
- The timeval definition in <sys/time.h> can now be used without
|
||||||
that is associated with a file descriptor, as used by this runtime
|
having to include <exec/types.h> and <devices/timer.h>. Just
|
||||||
library. The new function is called "__get_default_file()", and the
|
define the __USE_CLIB2_TIMEVAL preprocessor symbol. However,
|
||||||
function prototype and documentation can be found in the <dos.h>
|
this is intended only for code which for certain reasons cannot
|
||||||
header file.
|
include these header files. Don't use this approach if your
|
||||||
|
code may include <devices/timer.h> at some point.
|
||||||
|
|
||||||
|
- The sprintf() function family did not properly terminate the
|
||||||
|
output string if the format string itself was empty. Fixed.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# $Id: smakefile,v 1.7 2004-08-25 15:27:27 obarthel Exp $
|
# $Id: smakefile,v 1.8 2004-09-20 17:16:06 obarthel Exp $
|
||||||
#
|
#
|
||||||
# :ts=8
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -415,6 +415,8 @@ STDLIB_OBJ = \
|
|||||||
stdlib_strtod.o \
|
stdlib_strtod.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
stdlib_strtoul.o \
|
||||||
|
stdlib_strtoll.o \
|
||||||
|
stdlib_strtoull.o \
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_system.o \
|
stdlib_system.o \
|
||||||
stdlib_unsetenv.o \
|
stdlib_unsetenv.o \
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "stack.lib 1.173"
|
#define VERS "stack.lib 1.176"
|
||||||
#define VSTRING "stack.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "stack.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: stack.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: stack.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_puts.c,v 1.1.1.1 2004-07-26 16:31:40 obarthel Exp $
|
* $Id: stdio_puts.c,v 1.2 2004-09-10 07:39:19 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -94,7 +94,7 @@ puts(const char *s)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
/* Note: if buffering is disabled for this stdout, then we still
|
/* Note: if buffering is disabled for this stream, then we still
|
||||||
may have buffered data around, queued to be printed right now.
|
may have buffered data around, queued to be printed right now.
|
||||||
This is intended to improve performance as it takes more effort
|
This is intended to improve performance as it takes more effort
|
||||||
to write a single character to a file than to write a bunch. */
|
to write a single character to a file than to write a bunch. */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_vfprintf.c,v 1.4 2004-08-14 11:11:01 obarthel Exp $
|
* $Id: stdio_vfprintf.c,v 1.5 2004-09-10 07:39:19 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -262,7 +262,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -344,7 +343,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +564,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -623,7 +620,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1013,7 +1009,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1168,7 +1163,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1224,7 +1218,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(arg == NULL)
|
if(arg == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1243,7 +1236,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(short_ptr == NULL)
|
if(short_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1268,7 +1260,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(int_ptr == NULL)
|
if(int_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1289,7 +1280,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(int_ptr == NULL)
|
if(int_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1311,7 +1301,6 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
if(int_ptr == NULL)
|
if(int_ptr == NULL)
|
||||||
{
|
{
|
||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
result = EOF;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1524,7 +1513,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
may have buffered data around, queued to be printed right now.
|
may have buffered data around, queued to be printed right now.
|
||||||
This is intended to improve performance as it takes more effort
|
This is intended to improve performance as it takes more effort
|
||||||
to write a single character to a file than to write a bunch. */
|
to write a single character to a file than to write a bunch. */
|
||||||
if(result > 0 && (iob->iob_Flags & IOBF_BUFFER_MODE) == IOBF_BUFFER_MODE_NONE)
|
if(result != EOF && (iob->iob_Flags & IOBF_BUFFER_MODE) == IOBF_BUFFER_MODE_NONE)
|
||||||
{
|
{
|
||||||
if(__iob_write_buffer_is_valid(iob) && __flush_iob_write_buffer(iob) < 0)
|
if(__iob_write_buffer_is_valid(iob) && __flush_iob_write_buffer(iob) < 0)
|
||||||
result = EOF;
|
result = EOF;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib_main.c,v 1.1.1.1 2004-07-26 16:31:58 obarthel Exp $
|
* $Id: stdlib_main.c,v 1.2 2004-09-18 09:03:30 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -64,7 +64,10 @@ extern int main(int arg_c,char ** arg_v);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if 0
|
/* The SAS/C profiling hooks can be used to track call chains. Neat
|
||||||
|
trick, but not always necessary. Don't enable this unless you know
|
||||||
|
what you're doing... */
|
||||||
|
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -100,7 +103,7 @@ _EPILOG(REG(a0,char * id))
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#endif
|
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
@@ -164,14 +167,25 @@ call_main(void)
|
|||||||
/* Go through the constructor list */
|
/* Go through the constructor list */
|
||||||
_init();
|
_init();
|
||||||
|
|
||||||
//show_profile_names = TRUE;
|
/* If the SAS/C profiling code is set up for printing function
|
||||||
|
call chains, switch it on now. */
|
||||||
|
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
|
||||||
|
{
|
||||||
|
show_profile_names = TRUE;
|
||||||
|
}
|
||||||
|
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
|
||||||
|
|
||||||
/* After all these preparations, get this show on the road... */
|
/* After all these preparations, get this show on the road... */
|
||||||
exit(main((int)__argc,(char **)__argv));
|
exit(main((int)__argc,(char **)__argv));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
//show_profile_names = FALSE;
|
/* Switch off function name printing, if it was enabled. */
|
||||||
|
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
|
||||||
|
{
|
||||||
|
show_profile_names = FALSE;
|
||||||
|
}
|
||||||
|
#endif /* __USE_SAS_PROFILING_FOR_MONITORING */
|
||||||
|
|
||||||
/* If we end up here with the __stack_overflow variable
|
/* If we end up here with the __stack_overflow variable
|
||||||
* set then the stack overflow handler dropped into
|
* set then the stack overflow handler dropped into
|
||||||
@@ -398,8 +412,9 @@ _main(void)
|
|||||||
stack_size = (__stack_size + 15UL) & ~15UL;
|
stack_size = (__stack_size + 15UL) & ~15UL;
|
||||||
|
|
||||||
/* We allocate a little more memory so that we can align
|
/* We allocate a little more memory so that we can align
|
||||||
the stack to a 128 bit boundary. */
|
the stack to a 128 bit boundary. The extra 20 bytes are
|
||||||
stk = AllocVec(sizeof(*stk) + 15 + stack_size,MEMF_PUBLIC|MEMF_ANY);
|
to mimic the Task stack setup in dos.library/CreateProc. */
|
||||||
|
stk = AllocVec(sizeof(*stk) + 15 + 20 + stack_size,MEMF_PUBLIC|MEMF_ANY);
|
||||||
if(stk == NULL)
|
if(stk == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@@ -410,9 +425,12 @@ _main(void)
|
|||||||
lower = (((ULONG)(stk+1)) + 15UL) & ~15UL;
|
lower = (((ULONG)(stk+1)) + 15UL) & ~15UL;
|
||||||
upper = lower + stack_size;
|
upper = lower + stack_size;
|
||||||
|
|
||||||
|
/* Fill in the lower and upper bounds, then take care of
|
||||||
|
the stack pointer itself. This layout mimics the process
|
||||||
|
creation code in dos.library. */
|
||||||
stk->stk_Lower = (APTR)lower;
|
stk->stk_Lower = (APTR)lower;
|
||||||
stk->stk_Upper = upper;
|
stk->stk_Upper = upper - 4;
|
||||||
stk->stk_Pointer = (APTR)upper;
|
stk->stk_Pointer = (APTR)(upper - 20);
|
||||||
|
|
||||||
/* If necessary, set up for stack size usage measurement. */
|
/* If necessary, set up for stack size usage measurement. */
|
||||||
__stack_usage_init(stk);
|
__stack_usage_init(stk);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib_setjmp.c,v 1.1.1.1 2004-07-26 16:32:05 obarthel Exp $
|
* $Id: stdlib_setjmp.c,v 1.2 2004-09-27 15:07:20 tfrieden Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -283,6 +283,8 @@ l1: moveml a0@(4:W),d1-d7 | restore all data registers \n\
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef PPC_FLOATING_POINT_SUPPORT
|
||||||
|
|
||||||
__asm(" \n\
|
__asm(" \n\
|
||||||
\n\
|
\n\
|
||||||
.text \n\
|
.text \n\
|
||||||
@@ -358,6 +360,48 @@ longjmp: \n\
|
|||||||
blr \n\
|
blr \n\
|
||||||
\n\
|
\n\
|
||||||
");
|
");
|
||||||
|
#else
|
||||||
|
__asm(" \n\
|
||||||
|
\n\
|
||||||
|
.text \n\
|
||||||
|
.align 2 \n\
|
||||||
|
\n\
|
||||||
|
.globl setjmp \n\
|
||||||
|
\n\
|
||||||
|
setjmp: \n\
|
||||||
|
\n\
|
||||||
|
mflr r10 \n\
|
||||||
|
mfcr r11 \n\
|
||||||
|
mr r12, r1 \n\
|
||||||
|
stmw r10, 0(r3) \n\
|
||||||
|
li r3, 0 \n\
|
||||||
|
blr \n\
|
||||||
|
\n\
|
||||||
|
");
|
||||||
|
|
||||||
|
__asm(" \n\
|
||||||
|
.text \n\
|
||||||
|
.align 2 \n\
|
||||||
|
\n\
|
||||||
|
.globl longjmp \n\
|
||||||
|
\n\
|
||||||
|
longjmp: \n\
|
||||||
|
\n\
|
||||||
|
lmw r10,0(r3) \n\
|
||||||
|
mtlr r10 \n\
|
||||||
|
mtcr r11 \n\
|
||||||
|
mr r1,r12 \n\
|
||||||
|
cmpwi r4, 0 \n\
|
||||||
|
bne 1f \n\
|
||||||
|
li r3,1 \n\
|
||||||
|
blr \n\
|
||||||
|
1: \n\
|
||||||
|
mr r3, r4 \n\
|
||||||
|
blr \n\
|
||||||
|
\n\
|
||||||
|
");
|
||||||
|
|
||||||
|
#endif /* defined PPC_FLOATING_POINT_SUPPORT */
|
||||||
|
|
||||||
#endif /* defined STACK_EXTENSION */
|
#endif /* defined STACK_EXTENSION */
|
||||||
|
|
||||||
|
|||||||
204
library/stdlib_strtoll.c
Normal file
204
library/stdlib_strtoll.c
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdlib_strtoll.c,v 1.1 2004-09-20 17:16:06 obarthel Exp $
|
||||||
|
*
|
||||||
|
* :ts=4
|
||||||
|
*
|
||||||
|
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||||
|
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDLIB_HEADERS_H
|
||||||
|
#include "stdlib_headers.h"
|
||||||
|
#endif /* _STDLIB_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(USE_64_BIT_INTS)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
long long
|
||||||
|
strtoll(const char *str, char **ptr, int base)
|
||||||
|
{
|
||||||
|
BOOL is_negative;
|
||||||
|
long long result = 0;
|
||||||
|
long long new_sum;
|
||||||
|
long long sum;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
|
SHOWSTRING(str);
|
||||||
|
SHOWPOINTER(ptr);
|
||||||
|
SHOWVALUE(base);
|
||||||
|
|
||||||
|
assert(str != NULL && base >= 0);
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(str == NULL)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid str parameter");
|
||||||
|
|
||||||
|
errno = EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
if(base < 0)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid base parameter");
|
||||||
|
|
||||||
|
errno = ERANGE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skip all leading blanks. */
|
||||||
|
while((c = (*str)) != '\0')
|
||||||
|
{
|
||||||
|
if(NOT isspace(c))
|
||||||
|
break;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The first character may be a sign. */
|
||||||
|
if(c == '-')
|
||||||
|
{
|
||||||
|
/* It's a negative number. */
|
||||||
|
is_negative = TRUE;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* It's not going to be negative. */
|
||||||
|
is_negative = FALSE;
|
||||||
|
|
||||||
|
/* But there may be a sign we will choose to
|
||||||
|
* ignore.
|
||||||
|
*/
|
||||||
|
if(c == '+')
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = (*str);
|
||||||
|
|
||||||
|
/* There may be a leading '0x' to indicate that what
|
||||||
|
* follows is a hexadecimal number.
|
||||||
|
*/
|
||||||
|
if(base == 0 || base == 16)
|
||||||
|
{
|
||||||
|
if((c == '0') && (str[1] == 'x' || str[1] == 'X'))
|
||||||
|
{
|
||||||
|
base = 16;
|
||||||
|
|
||||||
|
str += 2;
|
||||||
|
|
||||||
|
c = (*str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we still don't know what base to use and the
|
||||||
|
* next letter to follow is a zero then this is
|
||||||
|
* probably a number in octal notation.
|
||||||
|
*/
|
||||||
|
if(base == 0)
|
||||||
|
{
|
||||||
|
if(c == '0')
|
||||||
|
base = 8;
|
||||||
|
else
|
||||||
|
base = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum = 0;
|
||||||
|
|
||||||
|
if(1 <= base && base <= 36)
|
||||||
|
{
|
||||||
|
while(c != '\0')
|
||||||
|
{
|
||||||
|
if('0' <= c && c <= '9')
|
||||||
|
c -= '0';
|
||||||
|
else if ('a' <= c)
|
||||||
|
c -= 'a' - 10;
|
||||||
|
else if ('A' <= c)
|
||||||
|
c -= 'A' - 10;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Ignore invalid numbers. */
|
||||||
|
if(c >= base)
|
||||||
|
break;
|
||||||
|
|
||||||
|
new_sum = base * sum + c;
|
||||||
|
if(new_sum < sum) /* overflow? */
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
|
||||||
|
if(is_negative)
|
||||||
|
result = LONG_MIN;
|
||||||
|
else
|
||||||
|
result = LONG_MAX;
|
||||||
|
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum = new_sum;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
|
||||||
|
c = (*str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_negative)
|
||||||
|
result = (-sum);
|
||||||
|
else
|
||||||
|
result = sum;
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
/* If desired, remember where we stopped reading the
|
||||||
|
* number from the buffer.
|
||||||
|
*/
|
||||||
|
if(ptr != NULL)
|
||||||
|
(*ptr) = (char *)str;
|
||||||
|
|
||||||
|
RETURN(result);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* USE_64_BIT_INTS */
|
||||||
201
library/stdlib_strtoull.c
Normal file
201
library/stdlib_strtoull.c
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdlib_strtoull.c,v 1.1 2004-09-20 17:16:06 obarthel Exp $
|
||||||
|
*
|
||||||
|
* :ts=4
|
||||||
|
*
|
||||||
|
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||||
|
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* - Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||||
|
* may be used to endorse or promote products derived from this
|
||||||
|
* software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDLIB_HEADERS_H
|
||||||
|
#include "stdlib_headers.h"
|
||||||
|
#endif /* _STDLIB_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#if defined(USE_64_BIT_INTS)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
unsigned long long
|
||||||
|
strtoull(const char *str, char **ptr, int base)
|
||||||
|
{
|
||||||
|
BOOL is_negative;
|
||||||
|
unsigned long long result = 0;
|
||||||
|
unsigned long long new_sum;
|
||||||
|
unsigned long long sum;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
|
SHOWSTRING(str);
|
||||||
|
SHOWPOINTER(ptr);
|
||||||
|
SHOWVALUE(base);
|
||||||
|
|
||||||
|
assert(str != NULL && base >= 0);
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(str == NULL)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid str parameter");
|
||||||
|
|
||||||
|
errno = EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
if(base < 0)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid base parameter");
|
||||||
|
|
||||||
|
errno = ERANGE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skip all leading blanks. */
|
||||||
|
while((c = (*str)) != '\0')
|
||||||
|
{
|
||||||
|
if(NOT isspace(c))
|
||||||
|
break;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The first character may be a sign. */
|
||||||
|
if(c == '-')
|
||||||
|
{
|
||||||
|
/* It's a negative number. */
|
||||||
|
is_negative = TRUE;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* It's not going to be negative. */
|
||||||
|
is_negative = FALSE;
|
||||||
|
|
||||||
|
/* But there may be a sign we will choose to
|
||||||
|
* ignore.
|
||||||
|
*/
|
||||||
|
if(c == '+')
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
c = (*str);
|
||||||
|
|
||||||
|
/* There may be a leading '0x' to indicate that what
|
||||||
|
* follows is a hexadecimal number.
|
||||||
|
*/
|
||||||
|
if(base == 0 || base == 16)
|
||||||
|
{
|
||||||
|
if((c == '0') && (str[1] == 'x' || str[1] == 'X'))
|
||||||
|
{
|
||||||
|
base = 16;
|
||||||
|
|
||||||
|
str += 2;
|
||||||
|
|
||||||
|
c = (*str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we still don't know what base to use and the
|
||||||
|
* next letter to follow is a zero then this is
|
||||||
|
* probably a number in octal notation.
|
||||||
|
*/
|
||||||
|
if(base == 0)
|
||||||
|
{
|
||||||
|
if(c == '0')
|
||||||
|
base = 8;
|
||||||
|
else
|
||||||
|
base = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum = 0;
|
||||||
|
|
||||||
|
if(1 <= base && base <= 36)
|
||||||
|
{
|
||||||
|
while(c != '\0')
|
||||||
|
{
|
||||||
|
if('0' <= c && c <= '9')
|
||||||
|
c -= '0';
|
||||||
|
else if ('a' <= c)
|
||||||
|
c -= 'a' - 10;
|
||||||
|
else if ('A' <= c)
|
||||||
|
c -= 'A' - 10;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Ignore invalid numbers. */
|
||||||
|
if(c >= base)
|
||||||
|
break;
|
||||||
|
|
||||||
|
new_sum = base * sum + c;
|
||||||
|
if(new_sum < sum) /* overflow? */
|
||||||
|
{
|
||||||
|
errno = ERANGE;
|
||||||
|
|
||||||
|
result = ULONG_MAX;
|
||||||
|
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum = new_sum;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
|
||||||
|
c = (*str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_negative)
|
||||||
|
result = (-sum);
|
||||||
|
else
|
||||||
|
result = sum;
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
/* If desired, remember where we stopped reading the
|
||||||
|
* number from the buffer.
|
||||||
|
*/
|
||||||
|
if(ptr != NULL)
|
||||||
|
(*ptr) = (char *)str;
|
||||||
|
|
||||||
|
RETURN(result);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#endif /* USE_64_BIT_INTS */
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#define VERSION 1
|
#define VERSION 1
|
||||||
#define REVISION 173
|
#define REVISION 176
|
||||||
#define DATE "25.8.2004"
|
#define DATE "27.9.2004"
|
||||||
#define VERS "unix.lib 1.173"
|
#define VERS "unix.lib 1.176"
|
||||||
#define VSTRING "unix.lib 1.173 (25.8.2004)\r\n"
|
#define VSTRING "unix.lib 1.176 (27.9.2004)\r\n"
|
||||||
#define VERSTAG "\0$VER: unix.lib 1.173 (25.8.2004)"
|
#define VERSTAG "\0$VER: unix.lib 1.176 (27.9.2004)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
173
|
176
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: usergroup_headers.h,v 1.1.1.1 2004-07-26 16:32:38 obarthel Exp $
|
* $Id: usergroup_headers.h,v 1.2 2004-09-16 08:45:03 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -519,14 +519,18 @@ extern int __root_egid;
|
|||||||
|
|
||||||
#define __umask(mask) ({ \
|
#define __umask(mask) ({ \
|
||||||
ULONG _umask_mask = (mask); \
|
ULONG _umask_mask = (mask); \
|
||||||
{ \
|
ULONG _umask__re = \
|
||||||
|
({ \
|
||||||
register struct Library * const __umask__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
register struct Library * const __umask__bn __asm("a6") = (struct Library *) (__UserGroupBase);\
|
||||||
|
register ULONG __umask__re __asm("d0"); \
|
||||||
register ULONG __umask_mask __asm("d0") = (_umask_mask); \
|
register ULONG __umask_mask __asm("d0") = (_umask_mask); \
|
||||||
__asm volatile ("jsr a6@(-192:W)" \
|
__asm volatile ("jsr a6@(-192:W)" \
|
||||||
: \
|
: "=r"(__umask__re) \
|
||||||
: "r"(__umask__bn), "r"(__umask_mask) \
|
: "r"(__umask__bn), "r"(__umask_mask) \
|
||||||
: "d0", "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
: "d1", "a0", "a1", "fp0", "fp1", "cc", "memory"); \
|
||||||
} \
|
__umask__re; \
|
||||||
|
}); \
|
||||||
|
_umask__re; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define __getumask() ({ \
|
#define __getumask() ({ \
|
||||||
@@ -718,7 +722,7 @@ VOID __endgrent(VOID);
|
|||||||
UBYTE *__crypt(UBYTE *key,UBYTE *set);
|
UBYTE *__crypt(UBYTE *key,UBYTE *set);
|
||||||
UBYTE *__ug_GetSalt(struct passwd *user,UBYTE *buf,ULONG size);
|
UBYTE *__ug_GetSalt(struct passwd *user,UBYTE *buf,ULONG size);
|
||||||
UBYTE *__getpass(UBYTE *prompt);
|
UBYTE *__getpass(UBYTE *prompt);
|
||||||
VOID __umask(ULONG mask);
|
UWORD __umask(ULONG mask);
|
||||||
UWORD __getumask(VOID);
|
UWORD __getumask(VOID);
|
||||||
LONG __setsid(VOID);
|
LONG __setsid(VOID);
|
||||||
LONG __getpgrp(VOID);
|
LONG __getpgrp(VOID);
|
||||||
|
|||||||
Reference in New Issue
Block a user