diff options
| author | Michael Gielda <mgielda@antmicro.com> | 2014-04-03 14:53:04 +0200 |
|---|---|---|
| committer | Michael Gielda <mgielda@antmicro.com> | 2014-04-03 14:53:04 +0200 |
| commit | ae1e4e08a1005a0c487f03ba189d7536e7fdcba6 (patch) | |
| tree | f1c296f8a966a9a39876b0e98e16d9c5da1776dd /ecos/packages/language/c/libc/stdlib/current/include | |
| parent | f157da5337118d3c5cd464266796de4262ac9dbd (diff) | |
Added the OS files
Diffstat (limited to 'ecos/packages/language/c/libc/stdlib/current/include')
3 files changed, 522 insertions, 0 deletions
diff --git a/ecos/packages/language/c/libc/stdlib/current/include/abs.inl b/ecos/packages/language/c/libc/stdlib/current/include/abs.inl new file mode 100644 index 0000000..3bbaae7 --- /dev/null +++ b/ecos/packages/language/c/libc/stdlib/current/include/abs.inl @@ -0,0 +1,113 @@ +#ifndef CYGONCE_LIBC_STDLIB_ABS_INL +#define CYGONCE_LIBC_STDLIB_ABS_INL +/*=========================================================================== +// +// abs.inl +// +// Inline implementations for the ISO standard utility functions +// abs() and labs() defined in section 7.10 of the standard +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2000-04-28 +// Purpose: +// Description: +// Usage: Do not include this file directly - include <stdlib.h> instead +// +//####DESCRIPTIONEND#### +// +//=========================================================================*/ + +/* INCLUDES */ + +#include <cyg/infra/cyg_trac.h> /* Tracing support */ + +/* FUNCTION PROTOTYPES */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern int +abs( int /* val */ ) __attribute__((__const__)); + +extern long +labs( long /* val */ ) __attribute__((__const__)); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* INLINE FUNCTIONS */ + +#ifndef CYGPRI_LIBC_STDLIB_ABS_INLINE +# define CYGPRI_LIBC_STDLIB_ABS_INLINE extern __inline__ +#endif + +CYGPRI_LIBC_STDLIB_ABS_INLINE int +abs( int __j ) +{ + int __retval; + + CYG_REPORT_FUNCNAMETYPE( "abs", "returning %d" ); + + __retval = (__j<0) ? -__j : __j; + + CYG_REPORT_RETVAL( __retval ); + + return __retval; +} /* abs() */ + +CYGPRI_LIBC_STDLIB_ABS_INLINE long +labs( long __j ) +{ + long __retval; + + CYG_REPORT_FUNCNAMETYPE( "abs", "returning %ld" ); + + __retval = (__j<0) ? -__j : __j; + + CYG_REPORT_RETVAL( __retval ); + + return __retval; +} /* labs() */ + + +#endif /* CYGONCE_LIBC_STDLIB_ABS_INL multiple inclusion protection */ + +/* EOF abs.inl */ diff --git a/ecos/packages/language/c/libc/stdlib/current/include/atox.inl b/ecos/packages/language/c/libc/stdlib/current/include/atox.inl new file mode 100644 index 0000000..6db9e92 --- /dev/null +++ b/ecos/packages/language/c/libc/stdlib/current/include/atox.inl @@ -0,0 +1,192 @@ +#ifndef CYGONCE_LIBC_STDLIB_ATOX_INL +#define CYGONCE_LIBC_STDLIB_ATOX_INL +/*=========================================================================== +// +// atox.inl +// +// Inline implementations for the ISO standard utility functions +// atoi(), atol() and atof() defined in section 7.10 of the standard +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2000-04-28 +// Purpose: +// Description: +// Usage: Do not include this file directly - include <stdlib.h> instead +// +//####DESCRIPTIONEND#### +// +//=========================================================================*/ + +/* CONFIGURATION */ + +#include <pkgconf/libc_stdlib.h> /* Configuration header */ + +/* INCLUDES */ + +#include <stddef.h> /* NULL */ +#include <cyg/infra/cyg_trac.h> /* Tracing support */ + +/* FUNCTION PROTOTYPES */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CYGFUN_LIBC_strtod +extern double +atof( const char * /* double_str */ ); +#endif + +extern int +atoi( const char * /* int_str */ ); + +extern long +atol( const char * /* long_str */ ); + +extern long long +atoll( const char * /* long_long_str */ ); + +#ifdef CYGFUN_LIBC_strtod +extern double +strtod( const char * /* double_str */, char ** /* endptr */ ); +#endif + +extern long +strtol( const char * /* long_str */, char ** /* endptr */, + int /* base */ ); + +extern unsigned long +strtoul( const char * /* ulong_str */, char ** /* endptr */, + int /* base */ ); + +#ifdef CYGFUN_LIBC_STDLIB_CONV_LONGLONG +extern long long +strtoll( const char * /* long_long_str */, char ** /* endptr */, + int /* base */ ); + +extern unsigned long long +strtoull( const char * /* ulong_long_str */, char ** /* endptr */, + int /* base */ ); +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* INLINE FUNCTIONS */ + +/* 7.10.1 String conversion functions */ + +#ifndef CYGPRI_LIBC_STDLIB_ATOX_INLINE +# define CYGPRI_LIBC_STDLIB_ATOX_INLINE extern __inline__ +#endif + + +#ifdef CYGFUN_LIBC_strtod +CYGPRI_LIBC_STDLIB_ATOX_INLINE double +atof( const char *__nptr ) +{ + double __retval; + + CYG_REPORT_FUNCNAMETYPE( "atof", "returning %f" ); + + CYG_CHECK_DATA_PTR( __nptr, "__nptr is an invalid pointer!" ); + + __retval = strtod( __nptr, (char **)NULL ); + + CYG_REPORT_RETVAL( __retval ); + + return __retval; +} /* atof() */ +#endif + +CYGPRI_LIBC_STDLIB_ATOX_INLINE int +atoi( const char *__nptr ) +{ + int __retval; + + CYG_REPORT_FUNCNAMETYPE( "atoi", "returning %d" ); + + CYG_CHECK_DATA_PTR( __nptr, "__nptr is an invalid pointer!" ); + + __retval = (int)strtol( __nptr, (char **)NULL, 10 ); + + CYG_REPORT_RETVAL( __retval ); + + return __retval; +} /* atoi() */ + + +CYGPRI_LIBC_STDLIB_ATOX_INLINE long +atol( const char *__nptr ) +{ + long __retval; + + CYG_REPORT_FUNCNAMETYPE( "atol", "returning %ld" ); + + CYG_CHECK_DATA_PTR( __nptr, "__nptr is an invalid pointer!" ); + + __retval = strtol( __nptr, (char **)NULL, 10 ); + + CYG_REPORT_RETVAL( __retval ); + + return __retval; +} /* atol() */ + +#ifdef CYGFUN_LIBC_STDLIB_CONV_LONGLONG +CYGPRI_LIBC_STDLIB_ATOX_INLINE long long +atoll( const char *__nptr ) +{ + long long __retval; + + CYG_REPORT_FUNCNAMETYPE( "atoll", "returning %lld" ); + + CYG_CHECK_DATA_PTR( __nptr, "__nptr is an invalid pointer!" ); + + __retval = strtoll( __nptr, (char **)NULL, 10 ); + + CYG_REPORT_RETVAL( __retval ); + + return __retval; +} /* atoll() */ +#endif + +#endif /* CYGONCE_LIBC_STDLIB_ATOX_INL multiple inclusion protection */ + +/* EOF atox.inl */ diff --git a/ecos/packages/language/c/libc/stdlib/current/include/div.inl b/ecos/packages/language/c/libc/stdlib/current/include/div.inl new file mode 100644 index 0000000..9b5d254 --- /dev/null +++ b/ecos/packages/language/c/libc/stdlib/current/include/div.inl @@ -0,0 +1,217 @@ +#ifndef CYGONCE_LIBC_STDLIB_DIV_INL +#define CYGONCE_LIBC_STDLIB_DIV_INL +/*=========================================================================== +// +// div.inl +// +// Inline implementations for the ISO standard utility functions +// div() and ldiv() +// +//=========================================================================== +// ####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later +// version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License +// along with eCos; if not, write to the Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// As a special exception, if other files instantiate templates or use +// macros or inline functions from this file, or you compile this file +// and link it with other works to produce a work based on this file, +// this file does not by itself cause the resulting work to be covered by +// the GNU General Public License. However the source code for this file +// must still be made available in accordance with section (3) of the GNU +// General Public License v2. +// +// This exception does not invalidate any other reasons why a work based +// on this file might be covered by the GNU General Public License. +// ------------------------------------------- +// ####ECOSGPLCOPYRIGHTEND#### +//=========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jlarmour +// Contributors: +// Date: 2000-04-28 +// Purpose: +// Description: +// Usage: Do not include this file directly - include <stdlib.h> instead +// +//####DESCRIPTIONEND#### +// +//=========================================================================*/ + +// CONFIGURATION + +#include <pkgconf/libc_stdlib.h> // Configuration header + +// INCLUDES + +#include <cyg/infra/cyg_ass.h> // Assertion support +#include <cyg/infra/cyg_trac.h> // Tracing support + +/* TYPE DEFINITIONS */ + +/* return type of the div() function */ + +typedef struct { + int quot; /* quotient */ + int rem; /* remainder */ +} div_t; + + +/* return type of the ldiv() function */ + +typedef struct { + long quot; /* quotient */ + long rem; /* remainder */ +} ldiv_t; + +/* FUNCTION PROTOTYPES */ + +#ifdef __cplusplus +extern "C" { +#endif + +extern div_t +div( int /* numerator */, int /* denominator */ ) __attribute__((__const__)); + +extern ldiv_t +ldiv( long /* numerator */, long /* denominator */ ) __attribute__((__const__)); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* FUNCTIONS */ + +#ifndef CYGPRI_LIBC_STDLIB_DIV_INLINE +# define CYGPRI_LIBC_STDLIB_DIV_INLINE extern __inline__ +#endif + +CYGPRI_LIBC_STDLIB_DIV_INLINE div_t +div( int __numer, int __denom ) +{ + div_t __ret; + + CYG_REPORT_FUNCNAMETYPE( "div", "quotient: %d"); + CYG_REPORT_FUNCARG2DV( __numer, __denom ); + // FIXME: what if they want it handled with SIGFPE? Should have option + CYG_PRECONDITION(__denom != 0, "division by zero attempted!"); + + __ret.quot = __numer / __denom; + __ret.rem = __numer % __denom; + + // But the modulo is implementation-defined for -ve numbers (ISO C 6.3.5) + // and we are required to "round" to zero (ISO C 7.10.6.2) + // + // The cases we have to deal with are inexact division of: + // a) + div + + // b) + div - + // c) - div + + // d) - div - + // + // a) can never go wrong and the quotient and remainder are always positive + // b) only goes wrong if the negative quotient has been "rounded" to + // -infinity - if so then the remainder will be negative when it + // should be positive or zero + // c) only goes wrong if the negative quotient has been "rounded" to + // -infinity - if so then the remainder will be positive when it + // should be negative or zero + // d) only goes wrong if the positive quotient has been rounded to + // +infinity - if so then the remainder will be positive when it + // should be negative or zero + // + // So the correct sign of the remainder corresponds to the sign of the + // numerator. Which means we can say that the result needs adjusting + // iff the sign of the numerator is different from the sign of the + // remainder. + // + // You may be interested to know that the Berkeley version of div() + // would get this wrong for e.g. (c) and (d) on some targets. + // e.g. for (-5)/4 it could leave the result as -2R3 + + if ((__ret.rem < 0) && (__numer > 0)) { + ++__ret.quot; + __ret.rem -= __denom; + } else if ((__ret.rem > 0) && (__numer < 0)) { + --__ret.quot; + __ret.rem += __denom; + } // else + + CYG_REPORT_RETVAL( __ret.quot ); + + return __ret; +} // div() + +CYGPRI_LIBC_STDLIB_DIV_INLINE ldiv_t +ldiv( long __numer, long __denom ) +{ + ldiv_t __ret; + + CYG_REPORT_FUNCNAMETYPE( "ldiv", "quotient: %d"); + CYG_REPORT_FUNCARG2DV( __numer, __denom ); + // FIXME: what if they want it handled with SIGFPE? Should have option + CYG_PRECONDITION(__denom != 0, "division by zero attempted!"); + + __ret.quot = __numer / __denom; + __ret.rem = __numer % __denom; + + // But the modulo is implementation-defined for -ve numbers (ISO C 6.3.5) + // and we are required to "round" to zero (ISO C 7.10.6.2) + // + // The cases we have to deal with are inexact division of: + // a) + div + + // b) + div - + // c) - div + + // d) - div - + // + // a) can never go wrong and the quotient and remainder are always positive + // b) only goes wrong if the negative quotient has been "rounded" to + // -infinity - if so then the remainder will be negative when it + // should be positive or zero + // c) only goes wrong if the negative quotient has been "rounded" to + // -infinity - if so then the remainder will be positive when it + // should be negative or zero + // d) only goes wrong if the positive quotient has been rounded to + // +infinity - if so then the remainder will be positive when it + // should be negative or zero + // + // So the correct sign of the remainder corresponds to the sign of the + // numerator. Which means we can say that the result needs adjusting + // iff the sign of the numerator is different from the sign of the + // remainder. + // + // You may be interested to know that the Berkeley version of ldiv() + // would get this wrong for e.g. (c) and (d) on some targets. + // e.g. for (-5)/4 it could leave the result as -2R3 + + if ((__ret.rem < 0) && (__numer > 0)) { + ++__ret.quot; + __ret.rem -= __denom; + } else if ((__ret.rem > 0) && (__numer < 0)) { + --__ret.quot; + __ret.rem += __denom; + } // else + + CYG_REPORT_RETVAL( __ret.quot ); + + return __ret; +} // ldiv() + + +#endif // CYGONCE_LIBC_STDLIB_DIV_INL multiple inclusion protection + +// EOF div.inl |
