/* * 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__ */