chen
2024-11-08 cc432b761c884a0bd8e9d83db0a4e26109fc08b1
keil/include/components/libc/libc_rom.h
对比新文件
@@ -0,0 +1,556 @@
/*
 * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
 * its subsidiaries and affiliates (collectly called MKSEMI).
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form, except as embedded into an MKSEMI
 *    integrated circuit in a product or a software update for such product,
 *    must reproduce the above copyright notice, this list of conditions and
 *    the following disclaimer in the documentation and/or other materials
 *    provided with the distribution.
 *
 * 3. Neither the name of MKSEMI nor the names of its contributors may be used
 *    to endorse or promote products derived from this software without
 *    specific prior written permission.
 *
 * 4. This software, with or without modification, must only be used with a
 *    MKSEMI integrated circuit.
 *
 * 5. Any software provided in binary form under this license must not be
 *    reverse engineered, decompiled, modified and/or disassembled.
 *
 * THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL MKSEMI 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 LIBC_ROM_H__
#define LIBC_ROM_H__
#include "stdint.h"
#include "stdbool.h"
#include "stdarg.h"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#ifndef STD_LIBC
#ifdef __cplusplus
extern "C" {
#endif
typedef void *(*__MEMCPY)(void *, const void *, size_t);
typedef void *(*__MEMMOVE)(void *, const void *, size_t);
typedef char *(*__STRCPY)(char *, const char *);
typedef char *(*__STRNCPY)(char *, const char *, size_t);
typedef char *(*__STRCAT)(char *, const char *);
typedef char *(*__STRNCAT)(char *, const char *, size_t);
typedef int (*__MEMCMP)(const void *, const void *, size_t);
typedef int (*__STRCMP)(const char *, const char *);
typedef int (*__STRNCMP)(const char *, const char *, size_t);
typedef int (*__STRCASECMP)(const char *, const char *);
typedef int (*__STRNCASECMP)(const char *, const char *, size_t);
typedef int (*__STRCOLL)(const char *, const char *);
typedef size_t (*__STRXFRM)(char *, const char *, size_t);
typedef void *(*__MEMCHR)(const void *, int, size_t);
typedef char *(*__STRCHR)(const char *, int);
typedef size_t (*__STRCSPN)(const char *, const char *);
typedef char *(*__STRPBRK)(const char *, const char *);
typedef char *(*__STRRCHR)(const char *, int);
typedef size_t (*__STRSPN)(const char *, const char *);
typedef char *(*__STRSTR)(const char *, const char *);
typedef char *(*__STRTOK)(char *, const char *);
typedef char *(*__STRTOK_R)(char *, const char *, char **);
typedef void *(*__MEMSET)(void *, int, size_t);
typedef char *(*__STRERROR)(int);
typedef size_t (*__STRLEN)(const char *);
typedef size_t (*__STRLCPY)(char *, const char *, size_t);
typedef size_t (*__STRLCAT)(char *, const char *, size_t);
typedef int (*__PRINTF)(const char *, ...);
typedef int (*__SCANF)(const char *, ...);
typedef int (*__SPRINTF)(char *buf, const char *fmt, ...);
typedef int (*__SNPRINTF)(char *buf, size_t len, const char *fmt, ...);
typedef int (*__SSCANF)(const char *buf, const char *fmt, ...);
typedef int (*__VSPRINTF)(char *buf, const char *fmt, va_list ap);
typedef int (*__VSNPRINTF)(char *buf, size_t size, const char *fmt, va_list ap);
typedef int (*__VSSCANF)(const char *fp, const char *fmt0, va_list ap);
typedef double (*__ATOF)(const char *);
typedef int (*__ATOI)(const char *);
typedef long int (*__ATOL)(const char *);
typedef long long (*__ATOLL)(const char *);
typedef double (*__STRTOD)(const char *, char **);
typedef float (*__STRTOF)(const char *, char **);
typedef long double (*__STRTOLD)(const char *, char **);
typedef long int (*__STRTOL)(const char *, char **, int);
typedef unsigned long int (*__STRTOUL)(const char *, char **, int);
typedef long long (*__STRTOLL)(const char *, char **, int);
typedef unsigned long long (*__STRTOULL)(const char *, char **, int);
typedef int (*__RAND)(void);
typedef void (*__SRAND)(unsigned int);
typedef void *(*__CALLOC)(size_t, size_t);
typedef void (*__FREE)(void *);
typedef void *(*__MALLOC)(size_t);
typedef void *(*__BSEARCH)(const void *, const void *, size_t, size_t, int (*)(const void *, const void *));
typedef void (*__QSORT)(void *, size_t, size_t, int (*)(const void *, const void *));
typedef int (*__ABS)(int);
typedef div_t (*__DIV)(int, int);
typedef long int (*__LABS)(long int);
typedef ldiv_t (*__LDIV)(long int, long int);
typedef long long (*__LLABS)(long long);
typedef lldiv_t (*__LLDIV)(long long, long long);
typedef int (*__MBLEN)(const char *, size_t);
typedef int (*__MBTOWC)(wchar_t *, const char *, size_t);
typedef int (*__WCTOMB)(char *, wchar_t);
typedef size_t (*__MBSTOWCS)(wchar_t *, const char *, size_t);
typedef size_t (*__WCSTOMBS)(char *, const wchar_t *, size_t);
typedef double (*__ACOS)(double);
typedef double (*__ASIN)(double);
typedef double (*__ATAN)(double);
typedef double (*__ATAN2)(double, double);
typedef double (*__COS)(double);
typedef double (*__SIN)(double);
typedef double (*__TAN)(double);
typedef double (*__COSH)(double);
typedef double (*__SINH)(double);
typedef double (*__TANH)(double);
typedef double (*__EXP)(double);
typedef double (*__FREXP)(double, int *);
typedef double (*__LDEXP)(double, int);
typedef double (*__LOG)(double);
typedef double (*__LOG10)(double);
typedef double (*__MODF)(double, double *);
typedef double (*__POW)(double, double);
typedef double (*__SQRT)(double);
typedef double (*__CEIL)(double);
typedef double (*__FABS)(double);
typedef double (*__FLOOR)(double);
typedef double (*__FMOD)(double, double);
typedef double (*__ACOSH)(double);
typedef double (*__ASINH)(double);
typedef double (*__ATANH)(double);
typedef double (*__CBRT)(double);
typedef double (*__ERF)(double);
typedef double (*__ERFC)(double);
typedef double (*__EXPM1)(double);
typedef double (*__HYPOT)(double, double);
typedef int (*__ILOGB)(double);
typedef int (*__ILOGBF)(float);
typedef int (*__ILOGBL)(long double);
typedef double (*__LGAMMA)(double);
typedef double (*__LOG1P)(double);
typedef double (*__LOGB)(double);
typedef float (*__LOGBF)(float);
typedef long double (*__LOGBL)(long double);
typedef double (*__NEXTAFTER)(double, double);
typedef float (*__NEXTAFTERF)(float, float);
typedef long double (*__NEXTAFTERL)(long double, long double);
typedef double (*__NEXTTOWARD)(double, long double);
typedef float (*__NEXTTOWARDF)(float, long double);
typedef long double (*__NEXTTOWARDL)(long double, long double);
typedef double (*__REMAINDER)(double, double);
typedef double (*__RINT)(double);
typedef double (*__SCALBLN)(double, long int);
typedef float (*__SCALBLNF)(float, long int);
typedef long double (*__SCALBLNL)(long double, long int);
// typedef double (*__SCALBN)(double, int);
// typedef float (*__SCALBNF)(float, int);
typedef long double (*__SCALBNL)(long double, int);
typedef float (*__FABSF)(float);
typedef float (*__SINF)(float);
typedef float (*__COSF)(float);
typedef float (*__TANF)(float);
typedef float (*__ACOSF)(float);
typedef float (*__ASINF)(float);
typedef float (*__ATANF)(float);
typedef float (*__ATAN2F)(float, float);
typedef float (*__SINHF)(float);
typedef float (*__COSHF)(float);
typedef float (*__TANHF)(float);
typedef float (*__EXPF)(float);
typedef float (*__LOGF)(float);
typedef float (*__LOG10F)(float);
typedef float (*__POWF)(float, float);
typedef float (*__SQRTF)(float);
typedef float (*__LDEXPF)(float, int);
typedef float (*__FREXPF)(float, int *);
typedef float (*__CEILF)(float);
typedef float (*__FLOORF)(float);
typedef float (*__FMODF)(float, float);
typedef float (*__MODFF)(float, float *);
/* C99 long double versions of functions. */
typedef long double (*__ACOSL)(long double);
typedef long double (*__ASINL)(long double);
typedef long double (*__ATANL)(long double);
typedef long double (*__ATAN2L)(long double, long double);
typedef long double (*__CEILL)(long double);
typedef long double (*__COSL)(long double);
typedef long double (*__COSHL)(long double);
typedef long double (*__EXPL)(long double);
typedef long double (*__FABSL)(long double);
typedef long double (*__FLOORL)(long double);
typedef long double (*__FMODL)(long double, long double);
typedef long double (*__FREXPL)(long double, int *);
typedef long double (*__LDEXPL)(long double, int);
typedef long double (*__LOGL)(long double);
typedef long double (*__LOG10L)(long double);
typedef long double (*__MODFL)(long double, long double *);
typedef long double (*__POWL)(long double, long double);
typedef long double (*__SINL)(long double);
typedef long double (*__SINHL)(long double);
typedef long double (*__SQRTL)(long double);
typedef long double (*__TANL)(long double);
typedef long double (*__TANHL)(long double);
typedef float (*__ACOSHF)(float);
typedef long double (*__ACOSHL)(long double);
typedef float (*__ASINHF)(float);
typedef long double (*__ASINHL)(long double);
typedef float (*__ATANHF)(float);
typedef long double (*__ATANHL)(long double);
typedef long double (*__COPYSIGNL)(long double, long double);
typedef float (*__CBRTF)(float);
typedef long double (*__CBRTL)(long double);
typedef float (*__ERFF)(float);
typedef long double (*__ERFL)(long double);
typedef float (*__ERFCF)(float);
typedef long double (*__ERFCL)(long double);
typedef float (*__EXPM1F)(float);
typedef long double (*__EXPM1L)(long double);
typedef float (*__LOG1PF)(float);
typedef long double (*__LOG1PL)(long double);
typedef float (*__HYPOTF)(float, float);
typedef long double (*__HYPOTL)(long double, long double);
typedef float (*__LGAMMAF)(float);
typedef long double (*__LGAMMAL)(long double);
typedef float (*__REMAINDERF)(float, float);
typedef long double (*__REMAINDERL)(long double, long double);
typedef float (*__RINTF)(float);
typedef long double (*__RINTL)(long double);
typedef double (*__EXP2)(double); /* * 2.^x. */
typedef float (*__EXP2F)(float);
typedef long double (*__EXP2L)(long double);
typedef double (*__FDIM)(double, double);
typedef float (*__FDIMF)(float, float);
typedef long double (*__FDIML)(long double, long double);
typedef double (*__FMA)(double, double, double);
typedef float (*__FMAF)(float, float, float);
typedef double (*__FMAX)(double, double);
typedef float (*__FMAXF)(float, float);
typedef long double (*__FMAXL)(long double, long double);
typedef double (*__FMIN)(double, double);
typedef float (*__FMINF)(float, float);
typedef long double (*__FMINL)(long double, long double);
typedef double (*__LOG2)(double); /* * log base 2 of x. */
typedef float (*__LOG2F)(float);
typedef long double (*__LOG2L)(long double);
typedef long (*__LRINT)(double);
typedef long (*__LRINTF)(float);
typedef long long (*__LLRINT)(double);
typedef long long (*__LLRINTF)(float);
typedef long (*__LROUND)(double);
typedef long (*__LROUNDF)(float);
typedef long long (*__LLROUND)(double);
typedef long long (*__LLROUNDF)(float);
typedef double (*__NAN)(const char *);
typedef float (*__NANF)(const char *);
typedef double (*__NEARBYINT)(double);
typedef float (*__NEARBYINTF)(float);
typedef long double (*__NEARBYINTL)(long double);
typedef double (*__REMQUO)(double, double, int *);
typedef float (*__REMQUOF)(float, float, int *);
typedef double (*__ROUND)(double);
typedef float (*__ROUNDF)(float);
typedef long double (*__ROUNDL)(long double);
typedef double (*__TGAMMA)(double); /* * The gamma function of x. */
typedef float (*__TGAMMAF)(float);
typedef long double (*__TGAMMAL)(long double);
typedef double (*__TRUNC)(double);
typedef float (*__TRUNCF)(float);
typedef long double (*__TRUNCL)(long double);
struct LIBC_ROM_T
{
    // string.h
    __MEMCPY memcpy;
    __MEMMOVE memmove;
    __STRCPY strcpy;
    __STRNCPY strncpy;
    __STRCAT strcat;
    __STRNCAT strncat;
    __MEMCMP memcmp;
    __STRCMP strcmp;
    __STRNCMP strncmp;
    __STRCASECMP strcasecmp;
    __STRNCASECMP strncasecmp;
    __STRCOLL strcoll;
    __STRXFRM strxfrm;
    __MEMCHR memchr;
    __STRCHR strchr;
    __STRCSPN strcspn;
    __STRPBRK strpbrk;
    __STRRCHR strrchr;
    __STRSPN strspn;
    __STRSTR strstr;
    __STRTOK strtok;
    //__STRTOK_R strtok_r;
    __MEMSET memset;
    __STRERROR strerror;
    __STRLEN strlen;
    __STRLCPY strlcpy;
    __STRLCAT strlcat;
    // stdio.h
    //__PRINTF printf;
    //__SCANF scanf;
    __SPRINTF sprintf;
    __SNPRINTF snprintf;
    __SSCANF sscanf;
    __VSSCANF vsscanf;
    __VSPRINTF vsprintf;
    __VSNPRINTF vsnprintf;
    // stdlib.h
    __ATOF atof;
    __ATOI atoi;
    __ATOL atol;
    __ATOLL atoll;
    __STRTOD strtod;
    __STRTOF strtof;
    __STRTOLD strtold;
    __STRTOL strtol;
    __STRTOUL strtoul;
    __STRTOLL strtoll;
    __STRTOULL strtoull;
    __RAND rand;
    __SRAND srand;
    //__CALLOC calloc;
    //__FREE free;
    //__MALLOC malloc;
    __BSEARCH bsearch;
    __QSORT qsort;
    __ABS abs;
    __DIV div;
    __LABS labs;
    __LDIV ldiv;
    __LLABS llabs;
    __LLDIV lldiv;
    //__MBLEN mblen;
    //__MBTOWC mbtowc;
    //__WCTOMB wctomb;
    //__MBSTOWCS mbstowcs;
    //__WCSTOMBS wcstombs;
    // math.h
    __ACOS acos;
    __ASIN asin;
    __ATAN2 atan2;
    __ATAN atan;
    __CEIL ceil;
    __COS cos;
    __COSH cosh;
    __EXP exp;
    __FABS fabs;
    __FLOOR floor;
    __FMOD fmod;
    __FREXP frexp;
    __LDEXP ldexp;
    __LOG10 log10;
    __LOG log;
    __MODF modf;
    __POW pow;
    __SIN sin;
    __SINH sinh;
    __SQRT sqrt;
    __TAN tan;
    __TANH tanh;
    /* C99 float and long double versions in already-C89-reserved namespace */
    __ACOSF acosf;
    __ACOSL acosl;
    __ASINF asinf;
    __ASINL asinl;
    __ATAN2F atan2f;
    __ATAN2L atan2l;
    __ATANF atanf;
    __ATANL atanl;
    __CEILF ceilf;
    __CEILL ceill;
    __COSF cosf;
    __COSHF coshf;
    __COSHL coshl;
    __COSL cosl;
    __EXPF expf;
    __EXPL expl;
    __FABSF fabsf;
    __FABSL fabsl;
    __FLOORF floorf;
    __FLOORL floorl;
    __FMODF fmodf;
    __FMODL fmodl;
    __FREXPF frexpf;
    __FREXPL frexpl;
    __LDEXPF ldexpf;
    __LDEXPL ldexpl;
    __LOG10F log10f;
    __LOG10L log10l;
    __LOGF logf;
    __LOGL logl;
    __MODFF modff;
    __MODFL modfl;
    __POWF powf;
    __POWL powl;
    __SINF sinf;
    __SINHF sinhf;
    __SINHL sinhl;
    __SINL sinl;
    __SQRTF sqrtf;
    __SQRTL sqrtl;
    __TANF tanf;
    __TANHF tanhf;
    __TANHL tanhl;
    __TANL tanl;
    __ACOSH acosh;
    __ASINH asinh;
    __ATANH atanh;
    __CBRT cbrt;
    __ERF erf;
    __ERFC erfc;
    __EXPM1 expm1;
    __HYPOT hypot;
    //__ILOGB ilogb;
    //__ILOGBF ilogbf;
    //__ILOGBL ilogbl;
    //__LGAMMA lgamma;
    __LOG1P log1p;
    //__LOGB logb;
    //__LOGBF logbf;
    //__LOGBL logbl;
    //__NEXTAFTER nextafter;
    //__NEXTAFTERF nextafterf;
    //__NEXTAFTERL nextafterl;
    //__NEXTTOWARD nexttoward;
    //__NEXTTOWARDF nexttowardf;
    //__NEXTTOWARDL nexttowardl;
    __REMAINDER remainder;
    __RINT rint;
    __SCALBLN scalbln;
    __SCALBLNF scalblnf;
    __SCALBLNL scalblnl;
    //__SCALBN scalbn;
    //__SCALBNF scalbnf;
    //__SCALBNL scalbnl;
    __ACOSHF acoshf;
    __ACOSHL acoshl;
    __ASINHF asinhf;
    __ASINHL asinhl;
    __ATANHF atanhf;
    __ATANHL atanhl;
    __COPYSIGNL copysignl;
    __CBRTF cbrtf;
    __CBRTL cbrtl;
    __ERFF erff;
    __ERFL erfl;
    __ERFCF erfcf;
    __ERFCL erfcl;
    __EXPM1F expm1f;
    __EXPM1L expm1l;
    __LOG1PF log1pf;
    __LOG1PL log1pl;
    __HYPOTF hypotf;
    __HYPOTL hypotl;
    //__LGAMMAF lgammaf;
    //__LGAMMAL lgammal;
    __REMAINDERF remainderf;
    __REMAINDERL remainderl;
    __RINTF rintf;
    __RINTL rintl;
    /* Functions new in C99. */
    __EXP2 exp2;
    __EXP2F exp2f;
    __EXP2L exp2l;
    __FDIM fdim;
    __FDIMF fdimf;
    __FDIML fdiml;
    __FMA fma;
    __FMAF fmaf;
    __FMAX fmax;
    __FMAXF fmaxf;
    __FMAXL fmaxl;
    __FMIN fmin;
    __FMINF fminf;
    __FMINL fminl;
    __LOG2 log2;
    __LOG2F log2f;
    __LOG2L log2l;
    __LRINT lrint;
    __LRINTF lrintf;
    __LLRINT llrint;
    __LLRINTF llrintf;
    __LROUND lround;
    __LROUNDF lroundf;
    __LLROUND llround;
    __LLROUNDF llroundf;
    __NAN nan;
    __NANF nanf;
    __NEARBYINT nearbyint;
    __NEARBYINTF nearbyintf;
    __NEARBYINTL nearbyintl;
    __REMQUO remquo;
    __REMQUOF remquof;
    __ROUND round;
    __ROUNDF roundf;
    __ROUNDL roundl;
    __TGAMMA tgamma;
    __TGAMMAF tgammaf;
    __TGAMMAL tgammal;
    __TRUNC trunc;
    __TRUNCF truncf;
    __TRUNCL truncl;
};
void update_libc_rom_table(void);
#ifdef __cplusplus
}
#endif
#endif
#endif /* LIBC_ROM_H__ */