summaryrefslogtreecommitdiff
path: root/ecos/packages/language/c/libc/stdlib/current/include
diff options
context:
space:
mode:
authorMichael Gielda <mgielda@antmicro.com>2014-04-03 14:53:04 +0200
committerMichael Gielda <mgielda@antmicro.com>2014-04-03 14:53:04 +0200
commitae1e4e08a1005a0c487f03ba189d7536e7fdcba6 (patch)
treef1c296f8a966a9a39876b0e98e16d9c5da1776dd /ecos/packages/language/c/libc/stdlib/current/include
parentf157da5337118d3c5cd464266796de4262ac9dbd (diff)
Added the OS files
Diffstat (limited to 'ecos/packages/language/c/libc/stdlib/current/include')
-rw-r--r--ecos/packages/language/c/libc/stdlib/current/include/abs.inl113
-rw-r--r--ecos/packages/language/c/libc/stdlib/current/include/atox.inl192
-rw-r--r--ecos/packages/language/c/libc/stdlib/current/include/div.inl217
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