对比新文件 |
| | |
| | | /* |
| | | * 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. |
| | | */ |
| | | |
| | | #include "libc_rom.h" |
| | | |
| | | #ifndef STD_LIBC |
| | | |
| | | #if defined(__ARMCC_VERSION) |
| | | static const struct LIBC_ROM_T *libc_rom __attribute__((section(".bss.noinit"))); |
| | | #elif defined(__ICCARM__) |
| | | __no_init static const struct LIBC_ROM_T *libc_rom; |
| | | #elif defined(__GNUC__) |
| | | static const struct LIBC_ROM_T *libc_rom __attribute__((section(".noinit"))); |
| | | #else |
| | | #warning "Confirm compiler version" |
| | | #endif |
| | | |
| | | void update_libc_rom_table(void) |
| | | { |
| | | // A4 |
| | | if (*(const volatile uint32_t *)(0x4000000C) == 0x00000020) |
| | | { |
| | | libc_rom = (const struct LIBC_ROM_T *)0x0301d624; |
| | | } |
| | | else |
| | | { |
| | | libc_rom = (const struct LIBC_ROM_T *)0x0301cf30; |
| | | } |
| | | } |
| | | |
| | | #if !defined(__ICCARM__) |
| | | void *memcpy(void *s1, const void *s2, size_t n) |
| | | { |
| | | return libc_rom->memcpy(s1, s2, n); |
| | | } |
| | | |
| | | void *memmove(void *s1, const void *s2, size_t n) |
| | | { |
| | | return libc_rom->memmove(s1, s2, n); |
| | | } |
| | | #endif |
| | | |
| | | char *strcpy(char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strcpy(s1, s2); |
| | | } |
| | | |
| | | char *strncpy(char *s1, const char *s2, size_t n) |
| | | { |
| | | return libc_rom->strncpy(s1, s2, n); |
| | | } |
| | | |
| | | char *strcat(char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strcat(s1, s2); |
| | | } |
| | | |
| | | char *strncat(char *s1, const char *s2, size_t n) |
| | | { |
| | | return libc_rom->strncat(s1, s2, n); |
| | | } |
| | | |
| | | int memcmp(const void *s1, const void *s2, size_t n) |
| | | { |
| | | return libc_rom->memcmp(s1, s2, n); |
| | | } |
| | | |
| | | int strcmp(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strcmp(s1, s2); |
| | | } |
| | | |
| | | int strncmp(const char *s1, const char *s2, size_t n) |
| | | { |
| | | return libc_rom->strncmp(s1, s2, n); |
| | | } |
| | | |
| | | int strcasecmp(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strcasecmp(s1, s2); |
| | | } |
| | | |
| | | int strncasecmp(const char *s1, const char *s2, size_t n) |
| | | { |
| | | return libc_rom->strncasecmp(s1, s2, n); |
| | | } |
| | | |
| | | int strcoll(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strcoll(s1, s2); |
| | | } |
| | | |
| | | size_t strxfrm(char *s1, const char *s2, size_t n) |
| | | { |
| | | return libc_rom->strxfrm(s1, s2, n); |
| | | } |
| | | |
| | | void *memchr(const void *s, int c, size_t n) |
| | | { |
| | | return libc_rom->memchr(s, c, n); |
| | | } |
| | | |
| | | char *strchr(const char *s, int c) |
| | | { |
| | | return libc_rom->strchr(s, c); |
| | | } |
| | | |
| | | size_t strcspn(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strcspn(s1, s2); |
| | | } |
| | | |
| | | char *strpbrk(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strpbrk(s1, s2); |
| | | } |
| | | |
| | | char *strrchr(const char *s, int c) |
| | | { |
| | | return libc_rom->strrchr(s, c); |
| | | } |
| | | |
| | | size_t strspn(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strspn(s1, s2); |
| | | } |
| | | |
| | | char *strstr(const char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strstr(s1, s2); |
| | | } |
| | | |
| | | char *strtok(char *s1, const char *s2) |
| | | { |
| | | return libc_rom->strtok(s1, s2); |
| | | } |
| | | |
| | | #if !defined(__ICCARM__) |
| | | void *memset(void *s, int c, size_t n) |
| | | { |
| | | return libc_rom->memset(s, c, n); |
| | | } |
| | | #endif |
| | | |
| | | char *strerror(int errnum) |
| | | { |
| | | return libc_rom->strerror(errnum); |
| | | } |
| | | |
| | | size_t strlen(const char *s) |
| | | { |
| | | return libc_rom->strlen(s); |
| | | } |
| | | |
| | | size_t strlcpy(char *dst, const char *src, size_t len) |
| | | { |
| | | return libc_rom->strlcpy(dst, src, len); |
| | | } |
| | | |
| | | size_t strlcat(char *dst, const char *src, size_t len) |
| | | { |
| | | return libc_rom->strlcat(dst, src, len); |
| | | } |
| | | |
| | | int sprintf(char *s, const char *format, ...) |
| | | { |
| | | va_list ap; |
| | | int len; |
| | | |
| | | va_start(ap, format); |
| | | len = libc_rom->vsnprintf(s, -(size_t)s, format, ap); |
| | | va_end(ap); |
| | | return (len); |
| | | } |
| | | |
| | | int snprintf(char *s, size_t n, const char *format, ...) |
| | | { |
| | | va_list ap; |
| | | int len; |
| | | |
| | | va_start(ap, format); |
| | | len = libc_rom->vsnprintf(s, n, format, ap); |
| | | va_end(ap); |
| | | return (len); |
| | | } |
| | | |
| | | int vsprintf(char *s, const char *format, va_list arg) |
| | | { |
| | | return libc_rom->vsprintf(s, format, arg); |
| | | } |
| | | |
| | | int vsnprintf(char *s, size_t n, const char *format, va_list arg) |
| | | { |
| | | return libc_rom->vsnprintf(s, n, format, arg); |
| | | } |
| | | |
| | | int sscanf(const char *s, const char *format, ...) |
| | | { |
| | | va_list args; |
| | | int i; |
| | | |
| | | va_start(args, format); |
| | | i = libc_rom->vsscanf(s, format, args); |
| | | va_end(args); |
| | | return i; |
| | | } |
| | | |
| | | int vsscanf(const char *s, const char *format, va_list arg) |
| | | { |
| | | return libc_rom->vsscanf(s, format, arg); |
| | | } |
| | | |
| | | double atof(const char *nptr) |
| | | { |
| | | return libc_rom->atof(nptr); |
| | | } |
| | | |
| | | int atoi(const char *nptr) |
| | | { |
| | | return libc_rom->atoi(nptr); |
| | | } |
| | | |
| | | long int atol(const char *nptr) |
| | | { |
| | | return libc_rom->atol(nptr); |
| | | } |
| | | |
| | | long long atoll(const char *nptr) |
| | | { |
| | | return libc_rom->atoll(nptr); |
| | | } |
| | | |
| | | double strtod(const char *nptr, char **endptr) |
| | | { |
| | | return libc_rom->strtod(nptr, endptr); |
| | | } |
| | | |
| | | long int strtol(const char *nptr, char **endptr, int base) |
| | | { |
| | | return libc_rom->strtol(nptr, endptr, base); |
| | | } |
| | | |
| | | unsigned long int strtoul(const char *nptr, char **endptr, int base) |
| | | { |
| | | return libc_rom->strtoul(nptr, endptr, base); |
| | | } |
| | | |
| | | long long strtoll(const char *nptr, char **endptr, int base) |
| | | { |
| | | return libc_rom->strtoll(nptr, endptr, base); |
| | | } |
| | | |
| | | unsigned long long strtoull(const char *nptr, char **endptr, int base) |
| | | { |
| | | return libc_rom->strtoull(nptr, endptr, base); |
| | | } |
| | | |
| | | int rand(void) |
| | | { |
| | | return libc_rom->rand(); |
| | | } |
| | | |
| | | void srand(unsigned int seed) |
| | | { |
| | | libc_rom->srand(seed); |
| | | } |
| | | |
| | | void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) |
| | | { |
| | | return libc_rom->bsearch(key, base, nmemb, size, compar); |
| | | } |
| | | |
| | | void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)) |
| | | { |
| | | libc_rom->qsort(base, nmemb, size, compar); |
| | | } |
| | | |
| | | #if !defined(__ICCARM__) |
| | | int abs(int j) |
| | | { |
| | | return libc_rom->abs(j); |
| | | } |
| | | |
| | | div_t div(int numer, int denom) |
| | | { |
| | | return libc_rom->div(numer, denom); |
| | | } |
| | | |
| | | long int labs(long int j) |
| | | { |
| | | return libc_rom->labs(j); |
| | | } |
| | | |
| | | ldiv_t ldiv(long int numer, long int denom) |
| | | { |
| | | return libc_rom->ldiv(numer, denom); |
| | | } |
| | | |
| | | long long llabs(long long j) |
| | | { |
| | | return libc_rom->llabs(j); |
| | | } |
| | | |
| | | lldiv_t lldiv(long long numer, long long denom) |
| | | { |
| | | return libc_rom->lldiv(numer, denom); |
| | | } |
| | | #endif |
| | | |
| | | double acos(double x) |
| | | { |
| | | return libc_rom->acos(x); |
| | | } |
| | | |
| | | double asin(double x) |
| | | { |
| | | return libc_rom->asin(x); |
| | | } |
| | | |
| | | double atan(double x) |
| | | { |
| | | return libc_rom->atan(x); |
| | | } |
| | | |
| | | double atan2(double y, double x) |
| | | { |
| | | return libc_rom->atan2(y, x); |
| | | } |
| | | |
| | | double cos(double x) |
| | | { |
| | | return libc_rom->cos(x); |
| | | } |
| | | |
| | | double sin(double x) |
| | | { |
| | | return libc_rom->sin(x); |
| | | } |
| | | |
| | | double tan(double x) |
| | | { |
| | | return libc_rom->tan(x); |
| | | } |
| | | |
| | | double cosh(double x) |
| | | { |
| | | return libc_rom->cosh(x); |
| | | } |
| | | |
| | | double sinh(double x) |
| | | { |
| | | return libc_rom->sinh(x); |
| | | } |
| | | |
| | | double tanh(double x) |
| | | { |
| | | return libc_rom->tanh(x); |
| | | } |
| | | |
| | | double exp(double x) |
| | | { |
| | | return libc_rom->exp(x); |
| | | } |
| | | |
| | | double frexp(double value, int *exp) |
| | | { |
| | | return libc_rom->frexp(value, exp); |
| | | } |
| | | |
| | | double ldexp(double x, int exp) |
| | | { |
| | | return libc_rom->ldexp(x, exp); |
| | | } |
| | | |
| | | double log(double x) |
| | | { |
| | | return libc_rom->log(x); |
| | | } |
| | | |
| | | double log10(double x) |
| | | { |
| | | return libc_rom->log10(x); |
| | | } |
| | | |
| | | double modf(double value, double *iptr) |
| | | { |
| | | return libc_rom->modf(value, iptr); |
| | | } |
| | | |
| | | double pow(double x, double y) |
| | | { |
| | | return libc_rom->pow(x, y); |
| | | } |
| | | |
| | | double sqrt(double x) |
| | | { |
| | | return libc_rom->sqrt(x); |
| | | } |
| | | |
| | | double ceil(double x) |
| | | { |
| | | return libc_rom->ceil(x); |
| | | } |
| | | |
| | | double fabs(double x) |
| | | { |
| | | return libc_rom->fabs(x); |
| | | } |
| | | |
| | | double floor(double d) |
| | | { |
| | | return libc_rom->floor(d); |
| | | } |
| | | |
| | | double fmod(double x, double y) |
| | | { |
| | | return libc_rom->fmod(x, y); |
| | | } |
| | | |
| | | double acosh(double x) |
| | | { |
| | | return libc_rom->acosh(x); |
| | | } |
| | | |
| | | double asinh(double x) |
| | | { |
| | | return libc_rom->asinh(x); |
| | | } |
| | | |
| | | double atanh(double x) |
| | | { |
| | | return libc_rom->atanh(x); |
| | | } |
| | | |
| | | double cbrt(double x) |
| | | { |
| | | return libc_rom->cbrt(x); |
| | | } |
| | | |
| | | double erf(double x) |
| | | { |
| | | return libc_rom->erf(x); |
| | | } |
| | | |
| | | double erfc(double x) |
| | | { |
| | | return libc_rom->erfc(x); |
| | | } |
| | | |
| | | double expm1(double x) |
| | | { |
| | | return libc_rom->expm1(x); |
| | | } |
| | | |
| | | double hypot(double x, double y) |
| | | { |
| | | return libc_rom->hypot(x, y); |
| | | } |
| | | |
| | | double remainder(double x, double y) |
| | | { |
| | | return libc_rom->remainder(x, y); |
| | | } |
| | | |
| | | double rint(double x) |
| | | { |
| | | return libc_rom->rint(x); |
| | | } |
| | | |
| | | double scalbln(double x, long int n) |
| | | { |
| | | return libc_rom->scalbln(x, n); |
| | | } |
| | | |
| | | float scalblnf(float x, long int n) |
| | | { |
| | | return libc_rom->scalblnf(x, n); |
| | | } |
| | | |
| | | long double scalblnl(long double x, long int n) |
| | | { |
| | | return libc_rom->scalblnl(x, n); |
| | | } |
| | | |
| | | float fabsf(float x) |
| | | { |
| | | return libc_rom->fabsf(x); |
| | | } |
| | | |
| | | float sinf(float x) |
| | | { |
| | | return libc_rom->sinf(x); |
| | | } |
| | | |
| | | float cosf(float x) |
| | | { |
| | | return libc_rom->cosf(x); |
| | | } |
| | | |
| | | float tanf(float x) |
| | | { |
| | | return libc_rom->tanf(x); |
| | | } |
| | | |
| | | float acosf(float x) |
| | | { |
| | | return libc_rom->acosf(x); |
| | | } |
| | | |
| | | float asinf(float x) |
| | | { |
| | | return libc_rom->asinf(x); |
| | | } |
| | | |
| | | float atanf(float x) |
| | | { |
| | | return libc_rom->atanf(x); |
| | | } |
| | | |
| | | float atan2f(float y, float x) |
| | | { |
| | | return libc_rom->atan2f(y, x); |
| | | } |
| | | |
| | | float sinhf(float x) |
| | | { |
| | | return libc_rom->sinhf(x); |
| | | } |
| | | |
| | | float coshf(float x) |
| | | { |
| | | return libc_rom->coshf(x); |
| | | } |
| | | |
| | | float tanhf(float x) |
| | | { |
| | | return libc_rom->tanhf(x); |
| | | } |
| | | |
| | | float expf(float x) |
| | | { |
| | | return libc_rom->expf(x); |
| | | } |
| | | |
| | | float logf(float x) |
| | | { |
| | | return libc_rom->logf(x); |
| | | } |
| | | |
| | | float log10f(float x) |
| | | { |
| | | return libc_rom->log10f(x); |
| | | } |
| | | |
| | | float powf(float x, float y) |
| | | { |
| | | return libc_rom->powf(x, y); |
| | | } |
| | | |
| | | float sqrtf(float x) |
| | | { |
| | | return libc_rom->sqrtf(x); |
| | | } |
| | | |
| | | float ldexpf(float x, int exp) |
| | | { |
| | | return libc_rom->ldexpf(x, exp); |
| | | } |
| | | |
| | | float frexpf(float value, int *exp) |
| | | { |
| | | return libc_rom->frexpf(value, exp); |
| | | } |
| | | |
| | | float ceilf(float x) |
| | | { |
| | | return libc_rom->ceilf(x); |
| | | } |
| | | |
| | | float floorf(float x) |
| | | { |
| | | return libc_rom->floorf(x); |
| | | } |
| | | |
| | | float fmodf(float x, float y) |
| | | { |
| | | return libc_rom->fmodf(x, y); |
| | | } |
| | | |
| | | float modff(float value, float *iptr) |
| | | { |
| | | return libc_rom->modff(value, iptr); |
| | | } |
| | | |
| | | long double acosl(long double x) |
| | | { |
| | | return libc_rom->acosl(x); |
| | | } |
| | | |
| | | long double asinl(long double x) |
| | | { |
| | | return libc_rom->asinl(x); |
| | | } |
| | | |
| | | long double atanl(long double x) |
| | | { |
| | | return libc_rom->atanl(x); |
| | | } |
| | | |
| | | long double atan2l(long double x, long double y) |
| | | { |
| | | return libc_rom->atan2l(x, y); |
| | | } |
| | | |
| | | long double ceill(long double x) |
| | | { |
| | | return libc_rom->ceill(x); |
| | | } |
| | | |
| | | long double cosl(long double x) |
| | | { |
| | | return libc_rom->cosl(x); |
| | | } |
| | | |
| | | long double coshl(long double x) |
| | | { |
| | | return libc_rom->coshl(x); |
| | | } |
| | | |
| | | long double expl(long double x) |
| | | { |
| | | return libc_rom->expl(x); |
| | | } |
| | | |
| | | long double fabsl(long double x) |
| | | { |
| | | return libc_rom->fabsl(x); |
| | | } |
| | | |
| | | long double floorl(long double x) |
| | | { |
| | | return libc_rom->floorl(x); |
| | | } |
| | | |
| | | long double fmodl(long double x, long double y) |
| | | { |
| | | return libc_rom->fmodl(x, y); |
| | | } |
| | | |
| | | long double frexpl(long double x, int *p) |
| | | { |
| | | return libc_rom->frexpl(x, p); |
| | | } |
| | | |
| | | long double ldexpl(long double x, int p) |
| | | { |
| | | return libc_rom->ldexpl(x, p); |
| | | } |
| | | |
| | | long double logl(long double x) |
| | | { |
| | | return libc_rom->logl(x); |
| | | } |
| | | |
| | | long double log10l(long double x) |
| | | { |
| | | return libc_rom->log10l(x); |
| | | } |
| | | |
| | | long double modfl(long double x, long double *p) |
| | | { |
| | | return libc_rom->modfl(x, p); |
| | | } |
| | | |
| | | long double powl(long double x, long double y) |
| | | { |
| | | return libc_rom->powl(x, y); |
| | | } |
| | | |
| | | long double sinl(long double x) |
| | | { |
| | | return libc_rom->sinl(x); |
| | | } |
| | | |
| | | long double sinhl(long double x) |
| | | { |
| | | return libc_rom->sinhl(x); |
| | | } |
| | | |
| | | long double sqrtl(long double x) |
| | | { |
| | | return libc_rom->sqrtl(x); |
| | | } |
| | | |
| | | long double tanl(long double x) |
| | | { |
| | | return libc_rom->tanl(x); |
| | | } |
| | | |
| | | long double tanhl(long double x) |
| | | { |
| | | return libc_rom->tanhl(x); |
| | | } |
| | | |
| | | float acoshf(float x) |
| | | { |
| | | return libc_rom->acoshf(x); |
| | | } |
| | | |
| | | long double acoshl(long double x) |
| | | { |
| | | return libc_rom->acoshl(x); |
| | | } |
| | | |
| | | float asinhf(float x) |
| | | { |
| | | return libc_rom->asinhf(x); |
| | | } |
| | | |
| | | long double asinhl(long double x) |
| | | { |
| | | return libc_rom->asinhl(x); |
| | | } |
| | | |
| | | float atanhf(float x) |
| | | { |
| | | return libc_rom->atanhf(x); |
| | | } |
| | | |
| | | long double atanhl(long double x) |
| | | { |
| | | return libc_rom->atanhl(x); |
| | | } |
| | | |
| | | long double copysignl(long double x, long double y) |
| | | { |
| | | return libc_rom->copysignl(x, y); |
| | | } |
| | | |
| | | float cbrtf(float x) |
| | | { |
| | | return libc_rom->cbrtf(x); |
| | | } |
| | | |
| | | long double cbrtl(long double x) |
| | | { |
| | | return libc_rom->cbrtl(x); |
| | | } |
| | | |
| | | float erff(float x) |
| | | { |
| | | return libc_rom->erff(x); |
| | | } |
| | | |
| | | long double erfl(long double x) |
| | | { |
| | | return libc_rom->erfl(x); |
| | | } |
| | | |
| | | float erfcf(float x) |
| | | { |
| | | return libc_rom->erfcf(x); |
| | | } |
| | | |
| | | long double erfcl(long double x) |
| | | { |
| | | return libc_rom->erfcl(x); |
| | | } |
| | | |
| | | float expm1f(float x) |
| | | { |
| | | return libc_rom->expm1f(x); |
| | | } |
| | | |
| | | long double expm1l(long double x) |
| | | { |
| | | return libc_rom->expm1l(x); |
| | | } |
| | | |
| | | float log1pf(float x) |
| | | { |
| | | return libc_rom->log1pf(x); |
| | | } |
| | | |
| | | long double log1pl(long double x) |
| | | { |
| | | return libc_rom->log1pl(x); |
| | | } |
| | | |
| | | float hypotf(float x, float y) |
| | | { |
| | | return libc_rom->hypotf(x, y); |
| | | } |
| | | |
| | | long double hypotl(long double x, long double y) |
| | | { |
| | | return libc_rom->hypotl(x, y); |
| | | } |
| | | |
| | | float remainderf(float x, float y) |
| | | { |
| | | return libc_rom->remainderf(x, y); |
| | | } |
| | | |
| | | long double remainderl(long double x, long double y) |
| | | { |
| | | return libc_rom->remainderl(x, y); |
| | | } |
| | | |
| | | float rintf(float x) |
| | | { |
| | | return libc_rom->rintf(x); |
| | | } |
| | | |
| | | long double rintl(long double x) |
| | | { |
| | | return libc_rom->rintl(x); |
| | | } |
| | | |
| | | double exp2(double x) |
| | | { |
| | | return libc_rom->exp2(x); |
| | | } |
| | | |
| | | float exp2f(float x) |
| | | { |
| | | return libc_rom->exp2f(x); |
| | | } |
| | | |
| | | long double exp2l(long double x) |
| | | { |
| | | return libc_rom->exp2l(x); |
| | | } |
| | | |
| | | double fdim(double x, double y) |
| | | { |
| | | return libc_rom->fdim(x, y); |
| | | } |
| | | |
| | | float fdimf(float x, float y) |
| | | { |
| | | return libc_rom->fdimf(x, y); |
| | | } |
| | | |
| | | long double fdiml(long double x, long double y) |
| | | { |
| | | return libc_rom->fdiml(x, y); |
| | | } |
| | | |
| | | double fma(double x, double y, double z) |
| | | { |
| | | return libc_rom->fma(x, y, z); |
| | | } |
| | | |
| | | float fmaf(float x, float y, float z) |
| | | { |
| | | return libc_rom->fmaf(x, y, z); |
| | | } |
| | | |
| | | double fmax(double x, double y) |
| | | { |
| | | return libc_rom->fmax(x, y); |
| | | } |
| | | |
| | | float fmaxf(float x, float y) |
| | | { |
| | | return libc_rom->fmaxf(x, y); |
| | | } |
| | | |
| | | long double fmaxl(long double x, long double y) |
| | | { |
| | | return libc_rom->fmaxl(x, y); |
| | | } |
| | | |
| | | double fmin(double x, double y) |
| | | { |
| | | return libc_rom->fmin(x, y); |
| | | } |
| | | |
| | | float fminf(float x, float y) |
| | | { |
| | | return libc_rom->fminf(x, y); |
| | | } |
| | | |
| | | long double fminl(long double x, long double y) |
| | | { |
| | | return libc_rom->fminl(x, y); |
| | | } |
| | | |
| | | #if !defined(__GNUC__) |
| | | double log2(double x) |
| | | { |
| | | return libc_rom->log2(x); |
| | | } |
| | | #endif |
| | | |
| | | float log2f(float x) |
| | | { |
| | | return libc_rom->log2f(x); |
| | | } |
| | | |
| | | long double log2l(long double x) |
| | | { |
| | | return libc_rom->log2l(x); |
| | | } |
| | | |
| | | long lrint(double x) |
| | | { |
| | | return libc_rom->lrint(x); |
| | | } |
| | | |
| | | long lrintf(float x) |
| | | { |
| | | return libc_rom->lrintf(x); |
| | | } |
| | | |
| | | long long llrint(double x) |
| | | { |
| | | return libc_rom->llrint(x); |
| | | } |
| | | |
| | | long long llrintf(float x) |
| | | { |
| | | return libc_rom->llrintf(x); |
| | | } |
| | | |
| | | long lround(double x) |
| | | { |
| | | return libc_rom->lround(x); |
| | | } |
| | | |
| | | long lroundf(float x) |
| | | { |
| | | return libc_rom->lroundf(x); |
| | | } |
| | | |
| | | long long llround(double x) |
| | | { |
| | | return libc_rom->llround(x); |
| | | } |
| | | |
| | | long long llroundf(float x) |
| | | { |
| | | return libc_rom->llroundf(x); |
| | | } |
| | | |
| | | double nan(const char *tagp) |
| | | { |
| | | return libc_rom->nan(tagp); |
| | | } |
| | | |
| | | float nanf(const char *tagp) |
| | | { |
| | | return libc_rom->nanf(tagp); |
| | | } |
| | | |
| | | double nearbyint(double x) |
| | | { |
| | | return libc_rom->nearbyint(x); |
| | | } |
| | | |
| | | float nearbyintf(float x) |
| | | { |
| | | return libc_rom->nearbyintf(x); |
| | | } |
| | | |
| | | long double nearbyintl(long double x) |
| | | { |
| | | return libc_rom->nearbyintl(x); |
| | | } |
| | | |
| | | double remquo(double x, double y, int *quo) |
| | | { |
| | | return libc_rom->remquo(x, y, quo); |
| | | } |
| | | |
| | | float remquof(float x, float y, int *quo) |
| | | { |
| | | return libc_rom->remquof(x, y, quo); |
| | | } |
| | | |
| | | double round(double x) |
| | | { |
| | | return libc_rom->round(x); |
| | | } |
| | | |
| | | float roundf(float x) |
| | | { |
| | | return libc_rom->roundf(x); |
| | | } |
| | | |
| | | long double roundl(long double x) |
| | | { |
| | | return libc_rom->roundl(x); |
| | | } |
| | | |
| | | double tgamma(double x) |
| | | { |
| | | return libc_rom->tgamma(x); |
| | | } |
| | | |
| | | float tgammaf(float x) |
| | | { |
| | | return libc_rom->tgammaf(x); |
| | | } |
| | | |
| | | long double tgammal(long double x) |
| | | { |
| | | return libc_rom->tgammal(x); |
| | | } |
| | | |
| | | double trunc(double x) |
| | | { |
| | | return libc_rom->trunc(x); |
| | | } |
| | | |
| | | float truncf(float x) |
| | | { |
| | | return libc_rom->truncf(x); |
| | | } |
| | | |
| | | long double truncl(long double x) |
| | | { |
| | | return libc_rom->truncl(x); |
| | | } |
| | | |
| | | #else |
| | | #if defined(__ARMCC_VERSION) |
| | | static const void *libc_rom __attribute__((section(".bss.noinit"), used)); |
| | | #endif |
| | | #endif |