Implement double precision log10 function correctly rounded for all rounding modes. This implementation currently needs FMA instructions for correctness. Use 2 passes: Fast pass: - 1 step range reduction with a lookup table of `2^7 = 128` elements to reduce the ranges to `[-2^-7, 2^-7]`. - Use a degree-7 minimax polynomial generated by Sollya, evaluated using a mixed of double-double and double precisions. - Apply Ziv's test for accuracy. Accurate pass: - Apply 5 more range reduction steps to reduce the ranges further to [-2^-27, 2^-27]. - Use a degree-4 minimax polynomial generated by Sollya, evaluated using 192-bit precisions. - By the result of Lefevre (add quote), this is more than enough for correct rounding to all rounding modes. In progress: Adding detail documentations about the algorithm. Depend on: https://reviews.llvm.org/D136799 Reviewed By: zimmermann6 Differential Revision: https://reviews.llvm.org/D139846
220 lines
5.4 KiB
Plaintext
220 lines
5.4 KiB
Plaintext
set(TARGET_LIBC_ENTRYPOINTS
|
|
# ctype.h entrypoints
|
|
libc.src.ctype.isalnum
|
|
libc.src.ctype.isalpha
|
|
libc.src.ctype.isascii
|
|
libc.src.ctype.isblank
|
|
libc.src.ctype.iscntrl
|
|
libc.src.ctype.isdigit
|
|
libc.src.ctype.isgraph
|
|
libc.src.ctype.islower
|
|
libc.src.ctype.isprint
|
|
libc.src.ctype.ispunct
|
|
libc.src.ctype.isspace
|
|
libc.src.ctype.isupper
|
|
libc.src.ctype.isxdigit
|
|
libc.src.ctype.toascii
|
|
libc.src.ctype.tolower
|
|
libc.src.ctype.toupper
|
|
|
|
# string.h entrypoints
|
|
libc.src.string.bcmp
|
|
libc.src.string.bcopy
|
|
libc.src.string.bzero
|
|
libc.src.string.memccpy
|
|
libc.src.string.memchr
|
|
libc.src.string.memcmp
|
|
libc.src.string.memcpy
|
|
libc.src.string.memmove
|
|
libc.src.string.mempcpy
|
|
libc.src.string.memrchr
|
|
libc.src.string.memset
|
|
libc.src.string.stpcpy
|
|
libc.src.string.stpncpy
|
|
libc.src.string.strcat
|
|
libc.src.string.strchr
|
|
libc.src.string.strcmp
|
|
libc.src.string.strcpy
|
|
libc.src.string.strcspn
|
|
libc.src.string.strlcat
|
|
libc.src.string.strlcpy
|
|
libc.src.string.strlen
|
|
libc.src.string.strncat
|
|
libc.src.string.strncmp
|
|
libc.src.string.strncpy
|
|
libc.src.string.strnlen
|
|
libc.src.string.strpbrk
|
|
libc.src.string.strrchr
|
|
libc.src.string.strspn
|
|
libc.src.string.strstr
|
|
libc.src.string.strtok
|
|
libc.src.string.strtok_r
|
|
|
|
# string.h entrypoints that depend on malloc
|
|
libc.src.string.strdup
|
|
libc.src.string.strndup
|
|
|
|
# inttypes.h entrypoints
|
|
libc.src.inttypes.imaxabs
|
|
libc.src.inttypes.imaxdiv
|
|
libc.src.inttypes.strtoimax
|
|
libc.src.inttypes.strtoumax
|
|
|
|
# stdlib.h entrypoints
|
|
libc.src.stdlib.abs
|
|
libc.src.stdlib.atoi
|
|
libc.src.stdlib.atof
|
|
libc.src.stdlib.atol
|
|
libc.src.stdlib.atoll
|
|
libc.src.stdlib.bsearch
|
|
libc.src.stdlib.div
|
|
libc.src.stdlib.labs
|
|
libc.src.stdlib.ldiv
|
|
libc.src.stdlib.llabs
|
|
libc.src.stdlib.lldiv
|
|
libc.src.stdlib.qsort
|
|
libc.src.stdlib.strtod
|
|
libc.src.stdlib.strtof
|
|
libc.src.stdlib.strtol
|
|
libc.src.stdlib.strtold
|
|
libc.src.stdlib.strtoll
|
|
libc.src.stdlib.strtoul
|
|
libc.src.stdlib.strtoull
|
|
|
|
# stdlib.h external entrypoints
|
|
libc.src.stdlib.malloc
|
|
libc.src.stdlib.calloc
|
|
libc.src.stdlib.realloc
|
|
libc.src.stdlib.aligned_alloc
|
|
libc.src.stdlib.free
|
|
)
|
|
|
|
set(TARGET_LIBM_ENTRYPOINTS
|
|
# fenv.h entrypoints
|
|
libc.src.fenv.feclearexcept
|
|
libc.src.fenv.fedisableexcept
|
|
libc.src.fenv.feenableexcept
|
|
libc.src.fenv.fegetenv
|
|
libc.src.fenv.fegetexcept
|
|
libc.src.fenv.fegetexceptflag
|
|
libc.src.fenv.fegetround
|
|
libc.src.fenv.feholdexcept
|
|
libc.src.fenv.fesetenv
|
|
libc.src.fenv.fesetexceptflag
|
|
libc.src.fenv.fesetround
|
|
libc.src.fenv.feraiseexcept
|
|
libc.src.fenv.fetestexcept
|
|
libc.src.fenv.feupdateenv
|
|
|
|
# math.h entrypoints
|
|
libc.src.math.acosf
|
|
libc.src.math.asin
|
|
libc.src.math.asinf
|
|
libc.src.math.atanf
|
|
libc.src.math.atanhf
|
|
libc.src.math.copysign
|
|
libc.src.math.copysignf
|
|
libc.src.math.copysignl
|
|
libc.src.math.ceil
|
|
libc.src.math.ceilf
|
|
libc.src.math.ceill
|
|
libc.src.math.cos
|
|
libc.src.math.cosf
|
|
libc.src.math.coshf
|
|
libc.src.math.expf
|
|
libc.src.math.exp10f
|
|
libc.src.math.exp2f
|
|
libc.src.math.expm1f
|
|
libc.src.math.fabs
|
|
libc.src.math.fabsf
|
|
libc.src.math.fabsl
|
|
libc.src.math.fdim
|
|
libc.src.math.fdimf
|
|
libc.src.math.fdiml
|
|
libc.src.math.floor
|
|
libc.src.math.floorf
|
|
libc.src.math.floorl
|
|
libc.src.math.fma
|
|
libc.src.math.fmaf
|
|
libc.src.math.fmin
|
|
libc.src.math.fminf
|
|
libc.src.math.fminl
|
|
libc.src.math.fmax
|
|
libc.src.math.fmaxf
|
|
libc.src.math.fmaxl
|
|
libc.src.math.fmod
|
|
libc.src.math.fmodf
|
|
libc.src.math.frexp
|
|
libc.src.math.frexpf
|
|
libc.src.math.frexpl
|
|
libc.src.math.hypot
|
|
libc.src.math.hypotf
|
|
libc.src.math.ilogb
|
|
libc.src.math.ilogbf
|
|
libc.src.math.ilogbl
|
|
libc.src.math.ldexp
|
|
libc.src.math.ldexpf
|
|
libc.src.math.ldexpl
|
|
libc.src.math.llrint
|
|
libc.src.math.llrintf
|
|
libc.src.math.llrintl
|
|
libc.src.math.llround
|
|
libc.src.math.llroundf
|
|
libc.src.math.llroundl
|
|
libc.src.math.log10
|
|
libc.src.math.log10f
|
|
libc.src.math.log1pf
|
|
libc.src.math.log2f
|
|
libc.src.math.logf
|
|
libc.src.math.logb
|
|
libc.src.math.logbf
|
|
libc.src.math.logbl
|
|
libc.src.math.lrint
|
|
libc.src.math.lrintf
|
|
libc.src.math.lrintl
|
|
libc.src.math.lround
|
|
libc.src.math.lroundf
|
|
libc.src.math.lroundl
|
|
libc.src.math.modf
|
|
libc.src.math.modff
|
|
libc.src.math.modfl
|
|
libc.src.math.nearbyint
|
|
libc.src.math.nearbyintf
|
|
libc.src.math.nearbyintl
|
|
libc.src.math.nextafter
|
|
libc.src.math.nextafterf
|
|
libc.src.math.nextafterl
|
|
libc.src.math.pow
|
|
libc.src.math.remainderf
|
|
libc.src.math.remainder
|
|
libc.src.math.remainderl
|
|
libc.src.math.remquof
|
|
libc.src.math.remquo
|
|
libc.src.math.remquol
|
|
libc.src.math.rint
|
|
libc.src.math.rintf
|
|
libc.src.math.rintl
|
|
libc.src.math.round
|
|
libc.src.math.roundf
|
|
libc.src.math.roundl
|
|
libc.src.math.sin
|
|
libc.src.math.sincosf
|
|
libc.src.math.sinf
|
|
libc.src.math.sinhf
|
|
libc.src.math.sqrt
|
|
libc.src.math.sqrtf
|
|
libc.src.math.sqrtl
|
|
libc.src.math.tan
|
|
libc.src.math.tanf
|
|
libc.src.math.tanhf
|
|
libc.src.math.trunc
|
|
libc.src.math.truncf
|
|
libc.src.math.truncl
|
|
)
|
|
|
|
set(TARGET_LLVMLIBC_ENTRYPOINTS
|
|
${TARGET_LIBC_ENTRYPOINTS}
|
|
${TARGET_LIBM_ENTRYPOINTS}
|
|
)
|
|
|