[libc-commits] [libc] [libc][math][c++23] Add Fmabf16 math function (PR #182836)

via libc-commits libc-commits at lists.llvm.org
Mon Mar 9 23:52:19 PDT 2026


https://github.com/Sukumarsawant updated https://github.com/llvm/llvm-project/pull/182836

>From 8cfad59c0f96fb371efa11fedaa6ee52d866e331 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 9 Feb 2026 13:15:49 +0530
Subject: [PATCH 01/50] Conflicts

---
 libc/config/baremetal/aarch64/entrypoints.txt |  933 +++
 libc/config/baremetal/arm/entrypoints.txt     |  944 +++
 libc/config/baremetal/riscv/entrypoints.txt   |  942 +++
 libc/config/darwin/aarch64/entrypoints.txt    |  748 ++
 libc/config/darwin/x86_64/entrypoints.txt     |  621 +-
 libc/config/gpu/amdgpu/entrypoints.txt        |  694 ++
 libc/config/gpu/nvptx/entrypoints.txt         |  696 ++
 libc/config/linux/aarch64/entrypoints.txt     | 1185 +++
 libc/config/linux/arm/entrypoints.txt         |  538 ++
 libc/config/linux/riscv/entrypoints.txt       | 1332 ++++
 libc/config/linux/x86_64/entrypoints.txt      | 1403 ++++
 libc/config/windows/entrypoints.txt           |  385 +
 libc/src/math/CMakeLists.txt                  |  646 ++
 libc/src/math/ffmal.h                         |   40 +-
 libc/src/math/fmabf16.h                       |   21 +
 libc/src/math/generic/CMakeLists.txt          |   14 +
 libc/src/math/generic/fmabf16.cpp             |   21 +
 libc/test/src/math/CMakeLists.txt             | 3482 +++++++++
 libc/test/src/math/bf16mul_test.cpp           |   30 +-
 libc/test/src/math/fmabf16_test.cpp           |   29 +
 libc/test/src/math/smoke/CMakeLists.txt       | 6531 +++++++++++++++++
 libc/test/src/math/smoke/fmabf16_test.cpp     |   14 +
 22 files changed, 20904 insertions(+), 345 deletions(-)
 create mode 100644 libc/src/math/fmabf16.h
 create mode 100644 libc/src/math/generic/fmabf16.cpp
 create mode 100644 libc/test/src/math/fmabf16_test.cpp
 create mode 100644 libc/test/src/math/smoke/fmabf16_test.cpp

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 278e1f5afde70..32d8201d9c53c 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -935,3 +935,936 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+set(TARGET_LIBC_ENTRYPOINTS
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # compiler entrypoints (no corresponding header)
+    libc.src.compiler.__stack_chk_fail
+
+    # 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
+
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper_l
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    libc.src.string.memmove
+    libc.src.string.mempcpy
+    libc.src.string.memrchr
+    libc.src.string.memset
+    libc.src.string.memset_explicit
+    libc.src.string.stpcpy
+    libc.src.string.stpncpy
+    libc.src.string.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    libc.src.string.strerror_r
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+
+    # string.h entrypoints
+    libc.src.string.strcoll_l
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.ffs
+    libc.src.strings.ffsl
+    libc.src.strings.ffsll
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # strings.h entrypoints
+    libc.src.strings.strcasecmp_l
+    libc.src.strings.strncasecmp_l
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdio.h entrypoints
+    libc.src.stdio.asprintf
+    libc.src.stdio.feof
+    libc.src.stdio.ferror
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgets
+    libc.src.stdio.fprintf
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fscanf
+    libc.src.stdio.fwrite
+    libc.src.stdio.getchar
+    libc.src.stdio.printf
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.remove
+    libc.src.stdio.scanf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vasprintf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.vprintf
+    libc.src.stdio.vscanf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vsscanf
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.a64l
+    libc.src.stdlib.abort
+    libc.src.stdlib.abs
+    libc.src.stdlib.aligned_alloc
+    libc.src.stdlib.atexit
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.calloc
+    libc.src.stdlib.div
+    libc.src.stdlib.exit
+    libc.src.stdlib.free
+    libc.src.stdlib.l64a
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.malloc
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.realloc
+    libc.src.stdlib.srand
+    # libc.src.stdlib.strfromd
+    # libc.src.stdlib.strfromf
+    # libc.src.stdlib.strfroml
+    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 entrypoints
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull_l
+
+    # time.h entrypoints
+    libc.src.time.asctime
+    libc.src.time.asctime_r
+    libc.src.time.clock
+    libc.src.time.ctime
+    libc.src.time.ctime_r
+    libc.src.time.difftime
+    libc.src.time.gmtime
+    libc.src.time.gmtime_r
+    libc.src.time.localtime
+    libc.src.time.localtime_r
+    libc.src.time.mktime
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.timespec_get
+
+    # wchar.h entrypoints
+    libc.src.wchar.btowc
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # internal entrypoints
+    libc.startup.baremetal.init
+    libc.startup.baremetal.fini
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    # libc.src.math.atan2l
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp10m1f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  if(LIBC_TYPES_HAS_FLOAT128)
+    list(APPEND TARGET_LIBM_ENTRYPOINTS
+      # math.h C23 mixed _Float16 and _Float128 entrypoints
+      libc.src.math.f16addf128
+      libc.src.math.f16divf128
+      libc.src.math.f16fmaf128
+      libc.src.math.f16mulf128
+      libc.src.math.f16sqrtf128
+      libc.src.math.f16subf128
+    )
+  endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16divf128
+    libc.src.math.bf16fmaf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LIBC_COMPILER_HAS_FIXED_POINT)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # stdfix.h _Fract and _Accum entrypoints
+    libc.src.stdfix.abshk
+    libc.src.stdfix.abshr
+    libc.src.stdfix.absk
+    libc.src.stdfix.abslk
+    libc.src.stdfix.abslr
+    libc.src.stdfix.absr
+    libc.src.stdfix.exphk
+    libc.src.stdfix.expk
+    libc.src.stdfix.roundhk
+    libc.src.stdfix.roundhr
+    libc.src.stdfix.roundk
+    libc.src.stdfix.roundlk
+    libc.src.stdfix.roundlr
+    libc.src.stdfix.roundr
+    libc.src.stdfix.rounduhk
+    libc.src.stdfix.rounduhr
+    libc.src.stdfix.rounduk
+    libc.src.stdfix.roundulk
+    libc.src.stdfix.roundulr
+    libc.src.stdfix.roundur
+    libc.src.stdfix.sqrtuhk
+    libc.src.stdfix.sqrtuhr
+    libc.src.stdfix.sqrtuk
+    libc.src.stdfix.sqrtur
+    # libc.src.stdfix.sqrtulk
+    libc.src.stdfix.sqrtulr
+    libc.src.stdfix.uhksqrtus
+    libc.src.stdfix.uksqrtui
+    libc.src.stdfix.hrbits
+    libc.src.stdfix.uhrbits
+    libc.src.stdfix.rbits
+    libc.src.stdfix.urbits
+    libc.src.stdfix.lrbits
+    libc.src.stdfix.ulrbits
+    libc.src.stdfix.hkbits
+    libc.src.stdfix.uhkbits
+    libc.src.stdfix.kbits
+    libc.src.stdfix.ukbits
+    libc.src.stdfix.lkbits
+    libc.src.stdfix.ulkbits
+    libc.src.stdfix.bitshr
+    libc.src.stdfix.bitsr
+    libc.src.stdfix.bitslr
+    libc.src.stdfix.bitshk
+    libc.src.stdfix.bitsk
+    libc.src.stdfix.bitslk
+    libc.src.stdfix.bitsuhr
+    libc.src.stdfix.bitsur
+    libc.src.stdfix.bitsulr
+    libc.src.stdfix.bitsuhk
+    libc.src.stdfix.bitsuk
+    libc.src.stdfix.bitsulk
+    libc.src.stdfix.countlshr
+    libc.src.stdfix.countlsr
+    libc.src.stdfix.countlslr
+    libc.src.stdfix.countlshk
+    libc.src.stdfix.countlsk
+    libc.src.stdfix.countlslk
+    libc.src.stdfix.countlsuhr
+    libc.src.stdfix.countlsur
+    libc.src.stdfix.countlsulr
+    libc.src.stdfix.countlsuhk
+    libc.src.stdfix.countlsuk
+    libc.src.stdfix.countlsulk
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 955dc643586e9..03dacfdc97df9 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -947,3 +947,947 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+set(TARGET_LIBC_ENTRYPOINTS
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # compiler entrypoints (no corresponding header)
+    libc.src.compiler.__stack_chk_fail
+
+    # 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
+
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper_l
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    libc.src.string.memmove
+    libc.src.string.mempcpy
+    libc.src.string.memrchr
+    libc.src.string.memset
+    libc.src.string.memset_explicit
+    libc.src.string.stpcpy
+    libc.src.string.stpncpy
+    libc.src.string.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    libc.src.string.strerror_r
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+
+    # string.h entrypoints
+    libc.src.string.strcoll_l
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.ffs
+    libc.src.strings.ffsl
+    libc.src.strings.ffsll
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # strings.h entrypoints
+    libc.src.strings.strcasecmp_l
+    libc.src.strings.strncasecmp_l
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdio.h entrypoints
+    libc.src.stdio.asprintf
+    libc.src.stdio.feof
+    libc.src.stdio.ferror
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgets
+    libc.src.stdio.fprintf
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fscanf
+    libc.src.stdio.fwrite
+    libc.src.stdio.getchar
+    libc.src.stdio.printf
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.remove
+    libc.src.stdio.scanf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vasprintf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.vprintf
+    libc.src.stdio.vscanf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vsscanf
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.a64l
+    libc.src.stdlib.abort
+    libc.src.stdlib.abs
+    libc.src.stdlib.aligned_alloc
+    libc.src.stdlib.atexit
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.calloc
+    libc.src.stdlib.div
+    libc.src.stdlib.exit
+    libc.src.stdlib.free
+    libc.src.stdlib.l64a
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.malloc
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.realloc
+    libc.src.stdlib.srand
+    # libc.src.stdlib.strfromd
+    # libc.src.stdlib.strfromf
+    # libc.src.stdlib.strfroml
+    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 entrypoints
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull_l
+
+    # time.h entrypoints
+    libc.src.time.asctime
+    libc.src.time.asctime_r
+    libc.src.time.clock
+    libc.src.time.ctime
+    libc.src.time.ctime_r
+    libc.src.time.difftime
+    libc.src.time.gmtime
+    libc.src.time.gmtime_r
+    libc.src.time.localtime
+    libc.src.time.localtime_r
+    libc.src.time.mktime
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.timespec_get
+
+    # wchar.h entrypoints
+    libc.src.wchar.btowc
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+
+    # internal entrypoints
+    libc.startup.baremetal.init
+    libc.startup.baremetal.fini
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan2l
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp10m1f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  if(LIBC_TYPES_HAS_FLOAT128)
+    list(APPEND TARGET_LIBM_ENTRYPOINTS
+      # math.h C23 mixed _Float16 and _Float128 entrypoints
+      libc.src.math.f16addf128
+      libc.src.math.f16divf128
+      libc.src.math.f16fmaf128
+      libc.src.math.f16mulf128
+      libc.src.math.f16sqrtf128
+      libc.src.math.f16subf128
+    )
+  endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16divf128
+    libc.src.math.bf16fmaf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LIBC_COMPILER_HAS_FIXED_POINT)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # stdfix.h _Fract and _Accum entrypoints
+    libc.src.stdfix.abshk
+    libc.src.stdfix.abshr
+    libc.src.stdfix.absk
+    libc.src.stdfix.abslk
+    libc.src.stdfix.abslr
+    libc.src.stdfix.absr
+    libc.src.stdfix.exphk
+    libc.src.stdfix.expk
+    libc.src.stdfix.roundhk
+    libc.src.stdfix.roundhr
+    libc.src.stdfix.roundk
+    libc.src.stdfix.roundlk
+    libc.src.stdfix.roundlr
+    libc.src.stdfix.roundr
+    libc.src.stdfix.rounduhk
+    libc.src.stdfix.rounduhr
+    libc.src.stdfix.rounduk
+    libc.src.stdfix.roundulk
+    libc.src.stdfix.roundulr
+    libc.src.stdfix.roundur
+    libc.src.stdfix.sqrtuhk
+    libc.src.stdfix.sqrtuhr
+    libc.src.stdfix.sqrtuk
+    libc.src.stdfix.sqrtur
+    # libc.src.stdfix.sqrtulk
+    libc.src.stdfix.sqrtulr
+    libc.src.stdfix.uhksqrtus
+    libc.src.stdfix.uksqrtui
+    libc.src.stdfix.hrbits
+    libc.src.stdfix.uhrbits
+    libc.src.stdfix.rbits
+    libc.src.stdfix.urbits
+    libc.src.stdfix.lrbits
+    libc.src.stdfix.ulrbits
+    libc.src.stdfix.hkbits
+    libc.src.stdfix.uhkbits
+    libc.src.stdfix.kbits
+    libc.src.stdfix.ukbits
+    libc.src.stdfix.lkbits
+    libc.src.stdfix.ulkbits
+    libc.src.stdfix.bitshr
+    libc.src.stdfix.bitsr
+    libc.src.stdfix.bitslr
+    libc.src.stdfix.bitshk
+    libc.src.stdfix.bitsk
+    libc.src.stdfix.bitslk
+    libc.src.stdfix.bitsuhr
+    libc.src.stdfix.bitsur
+    libc.src.stdfix.bitsulr
+    libc.src.stdfix.bitsuhk
+    libc.src.stdfix.bitsuk
+    libc.src.stdfix.bitsulk
+    libc.src.stdfix.countlshr
+    libc.src.stdfix.countlsr
+    libc.src.stdfix.countlslr
+    libc.src.stdfix.countlshk
+    libc.src.stdfix.countlsk
+    libc.src.stdfix.countlslk
+    libc.src.stdfix.countlsuhr
+    libc.src.stdfix.countlsur
+    libc.src.stdfix.countlsulr
+    libc.src.stdfix.countlsuhk
+    libc.src.stdfix.countlsuk
+    libc.src.stdfix.countlsulk
+    libc.src.stdfix.idivr
+    libc.src.stdfix.idivlr
+    libc.src.stdfix.idivk
+    libc.src.stdfix.idivlk
+    libc.src.stdfix.idivur
+    libc.src.stdfix.idivulr
+    libc.src.stdfix.idivuk
+    libc.src.stdfix.idivulk
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 472792e48fa01..43e713ede585b 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -942,3 +942,945 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+set(TARGET_LIBC_ENTRYPOINTS
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # compiler entrypoints (no corresponding header)
+    libc.src.compiler.__stack_chk_fail
+
+    # 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
+
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper_l
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+
+    # setjmp.h entrypoints
+    # libc.src.setjmp.longjmp
+    # libc.src.setjmp.setjmp
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    libc.src.string.memmove
+    libc.src.string.mempcpy
+    libc.src.string.memrchr
+    libc.src.string.memset
+    libc.src.string.memset_explicit
+    libc.src.string.stpcpy
+    libc.src.string.stpncpy
+    libc.src.string.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    libc.src.string.strerror_r
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+
+    # string.h entrypoints
+    libc.src.string.strcoll_l
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.ffs
+    libc.src.strings.ffsl
+    libc.src.strings.ffsll
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # strings.h entrypoints
+    libc.src.strings.strcasecmp_l
+    libc.src.strings.strncasecmp_l
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdio.h entrypoints
+    libc.src.stdio.asprintf
+    libc.src.stdio.feof
+    libc.src.stdio.ferror
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgets
+    libc.src.stdio.fprintf
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fscanf
+    libc.src.stdio.fwrite
+    libc.src.stdio.getchar
+    libc.src.stdio.printf
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.remove
+    libc.src.stdio.scanf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vasprintf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.vprintf
+    libc.src.stdio.vscanf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vsscanf
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.a64l
+    libc.src.stdlib.abort
+    libc.src.stdlib.abs
+    libc.src.stdlib.aligned_alloc
+    libc.src.stdlib.atexit
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.calloc
+    libc.src.stdlib.div
+    libc.src.stdlib.exit
+    libc.src.stdlib.free
+    libc.src.stdlib.l64a
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.malloc
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.realloc
+    libc.src.stdlib.srand
+    # libc.src.stdlib.strfromd
+    # libc.src.stdlib.strfromf
+    # libc.src.stdlib.strfroml
+    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 entrypoints
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull_l
+
+    # time.h entrypoints
+    libc.src.time.asctime
+    libc.src.time.asctime_r
+    libc.src.time.clock
+    libc.src.time.ctime
+    libc.src.time.ctime_r
+    libc.src.time.difftime
+    libc.src.time.gmtime
+    libc.src.time.gmtime_r
+    libc.src.time.localtime
+    libc.src.time.localtime_r
+    libc.src.time.mktime
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.timespec_get
+
+    # wchar.h entrypoints
+    libc.src.wchar.btowc
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+
+    # internal entrypoints
+    libc.startup.baremetal.init
+    libc.startup.baremetal.fini
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    # libc.src.math.atan2l
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp10m1f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    # libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  if(LIBC_TYPES_HAS_FLOAT128)
+    list(APPEND TARGET_LIBM_ENTRYPOINTS
+      # math.h C23 mixed _Float16 and _Float128 entrypoints
+      libc.src.math.f16addf128
+      libc.src.math.f16divf128
+      libc.src.math.f16fmaf128
+      libc.src.math.f16mulf128
+      libc.src.math.f16sqrtf128
+      libc.src.math.f16subf128
+    )
+  endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    # libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16divf128
+    libc.src.math.bf16fmaf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LIBC_COMPILER_HAS_FIXED_POINT)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # stdfix.h _Fract and _Accum entrypoints
+    libc.src.stdfix.abshk
+    libc.src.stdfix.abshr
+    libc.src.stdfix.absk
+    libc.src.stdfix.abslk
+    libc.src.stdfix.abslr
+    libc.src.stdfix.absr
+    libc.src.stdfix.exphk
+    libc.src.stdfix.expk
+    libc.src.stdfix.roundhk
+    libc.src.stdfix.roundhr
+    libc.src.stdfix.roundk
+    libc.src.stdfix.roundlk
+    libc.src.stdfix.roundlr
+    libc.src.stdfix.roundr
+    libc.src.stdfix.rounduhk
+    libc.src.stdfix.rounduhr
+    libc.src.stdfix.rounduk
+    libc.src.stdfix.roundulk
+    libc.src.stdfix.roundulr
+    libc.src.stdfix.roundur
+    libc.src.stdfix.sqrtuhk
+    libc.src.stdfix.sqrtuhr
+    libc.src.stdfix.sqrtuk
+    libc.src.stdfix.sqrtur
+    # libc.src.stdfix.sqrtulk
+    libc.src.stdfix.sqrtulr
+    libc.src.stdfix.uhksqrtus
+    libc.src.stdfix.uksqrtui
+    libc.src.stdfix.hrbits
+    libc.src.stdfix.uhrbits
+    libc.src.stdfix.rbits
+    libc.src.stdfix.urbits
+    libc.src.stdfix.lrbits
+    libc.src.stdfix.ulrbits
+    libc.src.stdfix.hkbits
+    libc.src.stdfix.uhkbits
+    libc.src.stdfix.kbits
+    libc.src.stdfix.ukbits
+    libc.src.stdfix.lkbits
+    libc.src.stdfix.ulkbits
+    libc.src.stdfix.bitshr
+    libc.src.stdfix.bitsr
+    libc.src.stdfix.bitslr
+    libc.src.stdfix.bitshk
+    libc.src.stdfix.bitsk
+    libc.src.stdfix.bitslk
+    libc.src.stdfix.bitsuhr
+    libc.src.stdfix.bitsur
+    libc.src.stdfix.bitsulr
+    libc.src.stdfix.bitsuhk
+    libc.src.stdfix.bitsuk
+    libc.src.stdfix.bitsulk
+    libc.src.stdfix.countlshr
+    libc.src.stdfix.countlsr
+    libc.src.stdfix.countlslr
+    libc.src.stdfix.countlshk
+    libc.src.stdfix.countlsk
+    libc.src.stdfix.countlslk
+    libc.src.stdfix.countlsuhr
+    libc.src.stdfix.countlsur
+    libc.src.stdfix.countlsulr
+    libc.src.stdfix.countlsuhk
+    libc.src.stdfix.countlsuk
+    libc.src.stdfix.countlsulk
+    libc.src.stdfix.idivr
+    libc.src.stdfix.idivlr
+    libc.src.stdfix.idivk
+    libc.src.stdfix.idivlk
+    libc.src.stdfix.idivur
+    libc.src.stdfix.idivulr
+    libc.src.stdfix.idivuk
+    libc.src.stdfix.idivulk
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 051ab45f450fa..082afc196356d 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -748,3 +748,751 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+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
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    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
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # 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.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    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.free
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+)
+
+if(LLVM_LIBC_FULL_BUILD)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+    libc.src.setjmp.siglongjmp
+    libc.src.setjmp.sigsetjmp
+    libc.src.stdlib._Exit
+  )
+endif()
+
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp10m1f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.tanpif
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  if(LIBC_TYPES_HAS_FLOAT128)
+    list(APPEND TARGET_LIBM_ENTRYPOINTS
+      # math.h C23 mixed _Float16 and _Float128 entrypoints
+      libc.src.math.f16addf128
+      libc.src.math.f16divf128
+      libc.src.math.f16fmaf128
+      libc.src.math.f16mulf128
+      libc.src.math.f16sqrtf128
+      libc.src.math.f16subf128
+    )
+  endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LIBC_COMPILER_HAS_FIXED_POINT)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # stdfix.h _Fract and _Accum entrypoints
+    libc.src.stdfix.abshk
+    libc.src.stdfix.abshr
+    libc.src.stdfix.absk
+    libc.src.stdfix.abslk
+    libc.src.stdfix.abslr
+    libc.src.stdfix.absr
+    libc.src.stdfix.exphk
+    libc.src.stdfix.expk
+    libc.src.stdfix.roundhk
+    libc.src.stdfix.roundhr
+    libc.src.stdfix.roundk
+    libc.src.stdfix.roundlk
+    libc.src.stdfix.roundlr
+    libc.src.stdfix.roundr
+    libc.src.stdfix.rounduhk
+    libc.src.stdfix.rounduhr
+    libc.src.stdfix.rounduk
+    libc.src.stdfix.roundulk
+    libc.src.stdfix.roundulr
+    libc.src.stdfix.roundur
+    libc.src.stdfix.sqrtuhk
+    libc.src.stdfix.sqrtuhr
+    libc.src.stdfix.sqrtuk
+    libc.src.stdfix.sqrtur
+    # libc.src.stdfix.sqrtulk
+    libc.src.stdfix.sqrtulr
+    libc.src.stdfix.uhksqrtus
+    libc.src.stdfix.uksqrtui
+    libc.src.stdfix.hrbits
+    libc.src.stdfix.uhrbits
+    libc.src.stdfix.rbits
+    libc.src.stdfix.urbits
+    libc.src.stdfix.lrbits
+    libc.src.stdfix.ulrbits
+    libc.src.stdfix.hkbits
+    libc.src.stdfix.uhkbits
+    libc.src.stdfix.kbits
+    libc.src.stdfix.ukbits
+    libc.src.stdfix.lkbits
+    libc.src.stdfix.ulkbits
+    libc.src.stdfix.bitshr
+    libc.src.stdfix.bitsr
+    libc.src.stdfix.bitslr
+    libc.src.stdfix.bitshk
+    libc.src.stdfix.bitsk
+    libc.src.stdfix.bitslk
+    libc.src.stdfix.bitsuhr
+    libc.src.stdfix.bitsur
+    libc.src.stdfix.bitsulr
+    libc.src.stdfix.bitsuhk
+    libc.src.stdfix.bitsuk
+    libc.src.stdfix.bitsulk
+    libc.src.stdfix.countlshr
+    libc.src.stdfix.countlsr
+    libc.src.stdfix.countlslr
+    libc.src.stdfix.countlshk
+    libc.src.stdfix.countlsk
+    libc.src.stdfix.countlslk
+    libc.src.stdfix.countlsuhr
+    libc.src.stdfix.countlsur
+    libc.src.stdfix.countlsulr
+    libc.src.stdfix.countlsuhk
+    libc.src.stdfix.countlsuk
+    libc.src.stdfix.countlsulk
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index e899bf97ea3f6..d27510602df62 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -1,310 +1,311 @@
-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
-
-    # search.h entrypoints
-    libc.src.search.lfind
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strchrnul
-    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
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bzero
-
-    # 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.memalignment
-    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.free
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # fenv disabled on x86_64 MacOS for now.
-    # # 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.fesetexcept
-    # libc.src.fenv.fesetexceptflag
-    # libc.src.fenv.fesetround
-    # libc.src.fenv.feraiseexcept
-    # libc.src.fenv.fetestexcept
-    # libc.src.fenv.fetestexceptflag
-    # libc.src.fenv.feupdateenv
-
-    ## Currently disabled for failing tests.
-    # math.h entrypoints
-    #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.coshf
-    #libc.src.math.cosf
-    #libc.src.math.daddl
-    #libc.src.math.ddivl
-    #libc.src.math.dfmal
-    #libc.src.math.dsqrtl
-    #libc.src.math.dsubl
-    #libc.src.math.expf
-    #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.fdiv
-    #libc.src.math.fdivl
-    #libc.src.math.ffma
-    #libc.src.math.ffmal
-    #libc.src.math.floor
-    #libc.src.math.floorf
-    #libc.src.math.floorl
-    #libc.src.math.fma
-    #libc.src.math.fmaf
-    #libc.src.math.fmax
-    #libc.src.math.fmaxf
-    #libc.src.math.fmaxl
-    #libc.src.math.fmin
-    #libc.src.math.fminf
-    #libc.src.math.fminl
-    #libc.src.math.fmod
-    #libc.src.math.fmodf
-    #libc.src.math.frexp
-    #libc.src.math.frexpf
-    #libc.src.math.frexpl
-    #libc.src.math.fsub
-    #libc.src.math.fsubl
-    #libc.src.math.hypot
-    #libc.src.math.hypotf
-    #libc.src.math.ilogb
-    #libc.src.math.ilogbf
-    #libc.src.math.ilogbl
-    #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.lrint
-    #libc.src.math.lrintf
-    #libc.src.math.lrintl
-    #libc.src.math.lround
-    #libc.src.math.lroundf
-    #libc.src.math.lroundl
-    #libc.src.math.ldexp
-    #libc.src.math.ldexpf
-    #libc.src.math.ldexpl
-    #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.modf
-    #libc.src.math.modff
-    #libc.src.math.modfl
-    #libc.src.math.nan
-    #libc.src.math.nanf
-    #libc.src.math.nanl
-    #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.nexttoward
-    #libc.src.math.nexttowardf
-    #libc.src.math.nexttowardl
-    #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.sincosf
-    #libc.src.math.sinhf
-    #libc.src.math.sinf
-    #libc.src.math.sqrt
-    #libc.src.math.sqrtf
-    #libc.src.math.sqrtl
-    #libc.src.math.tanf
-    #libc.src.math.tanhf
-    #libc.src.math.totalordermag
-    #libc.src.math.totalordermagf
-    #libc.src.math.totalordermagl
-    #libc.src.math.trunc
-    #libc.src.math.truncf
-    #libc.src.math.truncl
-)
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
+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
+
+    # search.h entrypoints
+    libc.src.search.lfind
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strchrnul
+    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
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bzero
+
+    # 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.memalignment
+    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.free
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # fenv disabled on x86_64 MacOS for now.
+    # # 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.fesetexcept
+    # libc.src.fenv.fesetexceptflag
+    # libc.src.fenv.fesetround
+    # libc.src.fenv.feraiseexcept
+    # libc.src.fenv.fetestexcept
+    # libc.src.fenv.fetestexceptflag
+    # libc.src.fenv.feupdateenv
+
+    ## Currently disabled for failing tests.
+    # math.h entrypoints
+    #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.coshf
+    #libc.src.math.cosf
+    #libc.src.math.daddl
+    #libc.src.math.ddivl
+    #libc.src.math.dfmal
+    #libc.src.math.dsqrtl
+    #libc.src.math.dsubl
+    #libc.src.math.expf
+    #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.fdiv
+    #libc.src.math.fdivl
+    #libc.src.math.ffma
+    #libc.src.math.ffmal
+    #libc.src.math.floor
+    #libc.src.math.floorf
+    #libc.src.math.floorl
+    #libc.src.math.fma
+    #libc.src.math.fmabf16
+    #libc.src.math.fmaf
+    #libc.src.math.fmax
+    #libc.src.math.fmaxf
+    #libc.src.math.fmaxl
+    #libc.src.math.fmin
+    #libc.src.math.fminf
+    #libc.src.math.fminl
+    #libc.src.math.fmod
+    #libc.src.math.fmodf
+    #libc.src.math.frexp
+    #libc.src.math.frexpf
+    #libc.src.math.frexpl
+    #libc.src.math.fsub
+    #libc.src.math.fsubl
+    #libc.src.math.hypot
+    #libc.src.math.hypotf
+    #libc.src.math.ilogb
+    #libc.src.math.ilogbf
+    #libc.src.math.ilogbl
+    #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.lrint
+    #libc.src.math.lrintf
+    #libc.src.math.lrintl
+    #libc.src.math.lround
+    #libc.src.math.lroundf
+    #libc.src.math.lroundl
+    #libc.src.math.ldexp
+    #libc.src.math.ldexpf
+    #libc.src.math.ldexpl
+    #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.modf
+    #libc.src.math.modff
+    #libc.src.math.modfl
+    #libc.src.math.nan
+    #libc.src.math.nanf
+    #libc.src.math.nanl
+    #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.nexttoward
+    #libc.src.math.nexttowardf
+    #libc.src.math.nexttowardl
+    #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.sincosf
+    #libc.src.math.sinhf
+    #libc.src.math.sinf
+    #libc.src.math.sqrt
+    #libc.src.math.sqrtf
+    #libc.src.math.sqrtl
+    #libc.src.math.tanf
+    #libc.src.math.tanhf
+    #libc.src.math.totalordermag
+    #libc.src.math.totalordermagf
+    #libc.src.math.totalordermagl
+    #libc.src.math.trunc
+    #libc.src.math.truncf
+    #libc.src.math.truncl
+)
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index a65b6f0274fd8..c8a22b8aaf25c 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -693,3 +693,697 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+set(TARGET_LIBC_ENTRYPOINTS
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isascii
+    libc.src.ctype.isblank
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.toascii
+    libc.src.ctype.tolower
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper
+    libc.src.ctype.toupper_l
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcoll_l
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
+    libc.src.stdlib.abs
+    libc.src.stdlib.atexit
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.div
+    libc.src.stdlib.exit
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.stdlib.strtod
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull
+    libc.src.stdlib.strtoull_l
+    libc.src.stdlib.at_quick_exit
+    libc.src.stdlib.quick_exit
+    libc.src.stdlib.getenv
+    libc.src.stdlib.system
+
+    # TODO: Implement these correctly
+    libc.src.stdlib.aligned_alloc
+    libc.src.stdlib.calloc
+    libc.src.stdlib.free
+    libc.src.stdlib.malloc
+    libc.src.stdlib.realloc
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # stdio.h entrypoints
+    libc.src.stdio.clearerr
+    libc.src.stdio.fclose
+    libc.src.stdio.printf
+    libc.src.stdio.vprintf
+    libc.src.stdio.fprintf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.asprintf
+    libc.src.stdio.vasprintf
+    libc.src.stdio.scanf
+    libc.src.stdio.vscanf
+    libc.src.stdio.fscanf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vsscanf
+    libc.src.stdio.feof
+    libc.src.stdio.ferror
+    libc.src.stdio.fflush
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgets
+    libc.src.stdio.fopen
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fseek
+    libc.src.stdio.ftell
+    libc.src.stdio.fwrite
+    libc.src.stdio.getc
+    libc.src.stdio.getchar
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.remove
+    libc.src.stdio.rename
+    libc.src.stdio.stderr
+    libc.src.stdio.stdin
+    libc.src.stdio.stdout
+    libc.src.stdio.ungetc
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # time.h entrypoints
+    libc.src.time.clock
+    libc.src.time.clock_gettime
+    libc.src.time.timespec_get
+    libc.src.time.nanosleep
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.mktime
+
+    # wchar.h entrypoints
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan2l
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.ddivl
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.lgamma
+    libc.src.math.lgamma_r
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.round
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.tanpif
+    libc.src.math.tgamma
+    libc.src.math.tgammaf
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.acospif16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.atanf16
+    libc.src.math.atanhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    # libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index fee0038c88cc0..c557b751c5b6e 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -695,3 +695,699 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+set(TARGET_LIBC_ENTRYPOINTS
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isascii
+    libc.src.ctype.isblank
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.toascii
+    libc.src.ctype.tolower
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper
+    libc.src.ctype.toupper_l
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcoll_l
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
+    libc.src.stdlib.abs
+    libc.src.stdlib.atexit
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.div
+    libc.src.stdlib.exit
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.stdlib.strtod
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull
+    libc.src.stdlib.strtoull_l
+    libc.src.stdlib.at_quick_exit
+    libc.src.stdlib.quick_exit
+    libc.src.stdlib.getenv
+    libc.src.stdlib.system
+
+    # TODO: Implement these correctly
+    libc.src.stdlib.aligned_alloc
+    libc.src.stdlib.calloc
+    libc.src.stdlib.free
+    libc.src.stdlib.malloc
+    libc.src.stdlib.realloc
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # stdio.h entrypoints
+    libc.src.stdio.clearerr
+    libc.src.stdio.fclose
+    libc.src.stdio.printf
+    libc.src.stdio.vprintf
+    libc.src.stdio.fprintf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.asprintf
+    libc.src.stdio.vasprintf
+    libc.src.stdio.scanf
+    libc.src.stdio.vscanf
+    libc.src.stdio.fscanf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vsscanf
+    libc.src.stdio.feof
+    libc.src.stdio.ferror
+    libc.src.stdio.fflush
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgets
+    libc.src.stdio.fopen
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fseek
+    libc.src.stdio.ftell
+    libc.src.stdio.fwrite
+    libc.src.stdio.getc
+    libc.src.stdio.getchar
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.remove
+    libc.src.stdio.rename
+    libc.src.stdio.stderr
+    libc.src.stdio.stdin
+    libc.src.stdio.stdout
+    libc.src.stdio.ungetc
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # time.h entrypoints
+    libc.src.time.clock
+    libc.src.time.clock_gettime
+    libc.src.time.timespec_get
+    libc.src.time.nanosleep
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.mktime
+
+    # wchar.h entrypoints
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan2l
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.ddivl
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    # FIXME: Broken.
+    # libc.src.math.fromfp
+    # libc.src.math.fromfpf
+    # libc.src.math.fromfpl
+    # libc.src.math.fromfpx
+    # libc.src.math.fromfpxf
+    # libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.lgamma
+    libc.src.math.lgamma_r
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.round
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.tanpif
+    libc.src.math.tgamma
+    libc.src.math.tgammaf
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    # FIXME: Broken.
+    # libc.src.math.ufromfp
+    # libc.src.math.ufromfpf
+    # libc.src.math.ufromfpl
+    # libc.src.math.ufromfpx
+    # libc.src.math.ufromfpxf
+    # libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.acospif16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.atanf16
+    libc.src.math.atanhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index bdca0baf478c7..609e85bebc9d6 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -1194,3 +1194,1188 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBM_ENTRYPOINTS}
   ${TARGET_LIBMVEC_ENTRYPOINTS}
 )
+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
+
+    # dlfcn.h entrypoints
+    libc.src.dlfcn.dlclose
+    libc.src.dlfcn.dlerror
+    libc.src.dlfcn.dlopen
+    libc.src.dlfcn.dlsym
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # fcntl.h entrypoints
+    libc.src.fcntl.creat
+    libc.src.fcntl.fcntl
+    libc.src.fcntl.open
+    libc.src.fcntl.openat
+
+    # poll.h entrypoints
+    libc.src.poll.poll
+
+    # sched.h entrypoints
+    libc.src.sched.sched_get_priority_max
+    libc.src.sched.sched_get_priority_min
+    libc.src.sched.sched_getaffinity
+    libc.src.sched.sched_getparam
+    libc.src.sched.sched_getscheduler
+    libc.src.sched.sched_rr_get_interval
+    libc.src.sched.sched_setaffinity
+    libc.src.sched.sched_setparam
+    libc.src.sched.sched_setscheduler
+    libc.src.sched.sched_yield
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    libc.src.string.memmove
+    libc.src.string.mempcpy
+    libc.src.string.memrchr
+    libc.src.string.memset
+    libc.src.string.memset_explicit
+    libc.src.string.stpcpy
+    libc.src.string.stpncpy
+    libc.src.string.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    libc.src.string.strerror_r
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strsignal
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.ffs
+    libc.src.strings.ffsl
+    libc.src.strings.ffsll
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib.abs
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    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.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.stdlib.strfromd
+    libc.src.stdlib.strfromf
+    # TODO: long double support is buggy with clang-11. Re-enable when buildbots are upgraded.
+    # libc.src.stdlib.strfroml
+    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.aligned_alloc
+    libc.src.stdlib.calloc
+    libc.src.stdlib.free
+    libc.src.stdlib.malloc
+    libc.src.stdlib.realloc
+
+    # stdio.h entrypoints
+    libc.src.stdio.fprintf
+    libc.src.stdio.fscanf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.printf
+    libc.src.stdio.remove
+    libc.src.stdio.rename
+    libc.src.stdio.scanf
+    libc.src.stdio.vscanf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.asprintf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vsscanf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.vprintf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vasprintf
+
+    # sys/epoll.h entrypoints
+    libc.src.sys.epoll.epoll_create
+    libc.src.sys.epoll.epoll_create1
+    libc.src.sys.epoll.epoll_ctl
+    libc.src.sys.epoll.epoll_pwait
+    libc.src.sys.epoll.epoll_wait
+    # TODO: Need to check if pwait2 is available before providing.
+    # https://github.com/llvm/llvm-project/issues/80060
+    # libc.src.sys.epoll.epoll_pwait2
+
+    # sys/ioctl.h entrypoints
+    libc.src.sys.ioctl.ioctl
+
+    # sys/mman.h entrypoints
+    libc.src.sys.mman.madvise
+    libc.src.sys.mman.mincore
+    libc.src.sys.mman.mlock
+    libc.src.sys.mman.mlock2
+    libc.src.sys.mman.mlockall
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.mremap
+    libc.src.sys.mman.mprotect
+    libc.src.sys.mman.msync
+    libc.src.sys.mman.munlock
+    libc.src.sys.mman.munlockall
+    libc.src.sys.mman.munmap
+    libc.src.sys.mman.remap_file_pages
+    libc.src.sys.mman.posix_madvise
+    libc.src.sys.mman.shm_open
+    libc.src.sys.mman.shm_unlink
+
+    # sys/random.h entrypoints
+    libc.src.sys.random.getrandom
+
+    # sys/resource.h entrypoints
+    libc.src.sys.resource.getrlimit
+    libc.src.sys.resource.setrlimit
+
+    # sys/sendfile entrypoints
+    libc.src.sys.sendfile.sendfile
+
+    # sys/stat.h entrypoints
+    libc.src.sys.stat.chmod
+    libc.src.sys.stat.fchmod
+    libc.src.sys.stat.fchmodat
+    libc.src.sys.stat.fstat
+    libc.src.sys.stat.lstat
+    libc.src.sys.stat.mkdir
+    libc.src.sys.stat.mkdirat
+    libc.src.sys.stat.stat
+
+    # sys/statvfs.h
+    libc.src.sys.statvfs.fstatvfs
+    libc.src.sys.statvfs.statvfs
+
+    # sys/utsname.h entrypoints
+    libc.src.sys.utsname.uname
+
+    # sys/wait.h entrypoints
+    libc.src.sys.wait.wait
+    libc.src.sys.wait.wait4
+    libc.src.sys.wait.waitpid
+
+    # sys/prctl.h entrypoints
+    libc.src.sys.prctl.prctl
+
+    # sys/auxv.h entrypoints
+    libc.src.sys.auxv.getauxval
+
+    # termios.h entrypoints
+    libc.src.termios.cfgetispeed
+    libc.src.termios.cfgetospeed
+    libc.src.termios.cfsetispeed
+    libc.src.termios.cfsetospeed
+    libc.src.termios.tcdrain
+    libc.src.termios.tcflow
+    libc.src.termios.tcflush
+    libc.src.termios.tcgetattr
+    libc.src.termios.tcgetsid
+    libc.src.termios.tcsendbreak
+    libc.src.termios.tcsetattr
+
+    # unistd.h entrypoints
+    libc.src.unistd.access
+    libc.src.unistd.chdir
+    libc.src.unistd.close
+    libc.src.unistd.dup
+    libc.src.unistd.dup2
+    libc.src.unistd.dup3
+    libc.src.unistd.execve
+    libc.src.unistd.faccessat
+    libc.src.unistd.fchdir
+    libc.src.unistd.fchown
+    libc.src.unistd.fpathconf
+    libc.src.unistd.fsync
+    libc.src.unistd.ftruncate
+    libc.src.unistd.getcwd
+    libc.src.unistd.getentropy
+    libc.src.unistd.geteuid
+    libc.src.unistd.gethostname
+    libc.src.unistd.getpagesize
+    libc.src.unistd.getpid
+    libc.src.unistd.getppid
+    libc.src.unistd.getsid
+    libc.src.unistd.gettid
+    libc.src.unistd.getuid
+    libc.src.unistd.isatty
+    libc.src.unistd.link
+    libc.src.unistd.linkat
+    libc.src.unistd.lseek
+    libc.src.unistd.pathconf
+    libc.src.unistd.pipe
+    libc.src.unistd.pipe2
+    libc.src.unistd.pread
+    libc.src.unistd.pwrite
+    libc.src.unistd.read
+    libc.src.unistd.readlink
+    libc.src.unistd.readlinkat
+    libc.src.unistd.rmdir
+    libc.src.unistd.setsid
+    libc.src.unistd.symlink
+    libc.src.unistd.symlinkat
+    libc.src.unistd.sysconf
+    libc.src.unistd.truncate
+    libc.src.unistd.unlink
+    libc.src.unistd.unlinkat
+    libc.src.unistd.write
+
+    # wchar.h entrypoints
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+
+    # sys/uio.h entrypoints
+    libc.src.sys.uio.writev
+    libc.src.sys.uio.readv
+
+    # sys/time.h entrypoints
+    libc.src.sys.time.setitimer
+    libc.src.sys.time.getitimer
+)
+
+if(LLVM_LIBC_INCLUDE_SCUDO)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # malloc.h external entrypoints
+    libc.src.stdlib.mallopt
+  )
+endif()
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    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.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.tanpif
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acoshf16
+    libc.src.math.asinpif16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cospif16
+    libc.src.math.expf16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    # libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    # libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    # libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    # libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    # libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    # libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    # libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.logbf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    # libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    # Temporarily disable nexttowardf16 on aarch64 because the conversion
+    # between _Float16 and long double will crash clang-11.  This is fixed in
+    # clang-12 and after: https://godbolt.org/z/8ceT9454c
+    # libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.rsqrtf
+    libc.src.math.rsqrtf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  # if(LIBC_TYPES_HAS_FLOAT128)
+  #   list(APPEND TARGET_LIBM_ENTRYPOINTS
+  #     # math.h C23 mixed _Float16 and _Float128 entrypoints
+  #     libc.src.math.f16addf128
+  #     libc.src.math.f16divf128
+  #     libc.src.math.f16fmaf128
+  #     libc.src.math.f16mulf128
+  #     libc.src.math.f16sqrtf128
+  #     libc.src.math.f16subf128
+  #   )
+  # endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16divf128
+    libc.src.math.bf16fmaf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LLVM_LIBC_FULL_BUILD)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # compiler entrypoints (no corresponding header)
+    libc.src.compiler.__stack_chk_fail
+
+    # dirent.h entrypoints
+    libc.src.dirent.closedir
+    libc.src.dirent.dirfd
+    libc.src.dirent.opendir
+    libc.src.dirent.readdir
+
+    # arpa/inet.h entrypoints
+    libc.src.arpa.inet.htonl
+    libc.src.arpa.inet.htons
+    libc.src.arpa.inet.inet_addr
+    libc.src.arpa.inet.inet_aton
+    libc.src.arpa.inet.ntohl
+    libc.src.arpa.inet.ntohs
+
+    # pthread.h entrypoints
+    libc.src.pthread.pthread_atfork
+    libc.src.pthread.pthread_attr_destroy
+    libc.src.pthread.pthread_attr_getdetachstate
+    libc.src.pthread.pthread_attr_getguardsize
+    libc.src.pthread.pthread_attr_getstack
+    libc.src.pthread.pthread_attr_getstacksize
+    libc.src.pthread.pthread_attr_init
+    libc.src.pthread.pthread_attr_setdetachstate
+    libc.src.pthread.pthread_attr_setguardsize
+    libc.src.pthread.pthread_attr_setstack
+    libc.src.pthread.pthread_attr_setstacksize
+    libc.src.pthread.pthread_condattr_destroy
+    libc.src.pthread.pthread_condattr_getclock
+    libc.src.pthread.pthread_condattr_getpshared
+    libc.src.pthread.pthread_condattr_init
+    libc.src.pthread.pthread_condattr_setclock
+    libc.src.pthread.pthread_condattr_setpshared
+    libc.src.pthread.pthread_create
+    libc.src.pthread.pthread_detach
+    libc.src.pthread.pthread_equal
+    libc.src.pthread.pthread_exit
+    libc.src.pthread.pthread_getname_np
+    libc.src.pthread.pthread_getspecific
+    libc.src.pthread.pthread_join
+    libc.src.pthread.pthread_key_create
+    libc.src.pthread.pthread_key_delete
+    libc.src.pthread.pthread_mutex_destroy
+    libc.src.pthread.pthread_mutex_init
+    libc.src.pthread.pthread_mutex_lock
+    libc.src.pthread.pthread_mutex_unlock
+    libc.src.pthread.pthread_mutexattr_destroy
+    libc.src.pthread.pthread_mutexattr_getpshared
+    libc.src.pthread.pthread_mutexattr_getrobust
+    libc.src.pthread.pthread_mutexattr_gettype
+    libc.src.pthread.pthread_mutexattr_init
+    libc.src.pthread.pthread_mutexattr_setpshared
+    libc.src.pthread.pthread_mutexattr_setrobust
+    libc.src.pthread.pthread_mutexattr_settype
+    libc.src.pthread.pthread_once
+    libc.src.pthread.pthread_rwlock_clockrdlock
+    libc.src.pthread.pthread_rwlock_clockwrlock
+    libc.src.pthread.pthread_rwlock_destroy
+    libc.src.pthread.pthread_rwlock_init
+    libc.src.pthread.pthread_rwlock_rdlock
+    libc.src.pthread.pthread_rwlock_timedrdlock
+    libc.src.pthread.pthread_rwlock_timedwrlock
+    libc.src.pthread.pthread_rwlock_tryrdlock
+    libc.src.pthread.pthread_rwlock_trywrlock
+    libc.src.pthread.pthread_rwlock_unlock
+    libc.src.pthread.pthread_rwlock_wrlock
+    libc.src.pthread.pthread_rwlockattr_destroy
+    libc.src.pthread.pthread_rwlockattr_getkind_np
+    libc.src.pthread.pthread_rwlockattr_getpshared
+    libc.src.pthread.pthread_rwlockattr_init
+    libc.src.pthread.pthread_rwlockattr_setkind_np
+    libc.src.pthread.pthread_rwlockattr_setpshared
+    libc.src.pthread.pthread_spin_destroy
+    libc.src.pthread.pthread_spin_init
+    libc.src.pthread.pthread_spin_lock
+    libc.src.pthread.pthread_spin_trylock
+    libc.src.pthread.pthread_spin_unlock
+    libc.src.pthread.pthread_self
+    libc.src.pthread.pthread_setname_np
+    libc.src.pthread.pthread_setspecific
+
+    # sched.h entrypoints
+    libc.src.sched.__sched_getcpucount
+    libc.src.sched.__sched_setcpuzero
+    libc.src.sched.__sched_setcpuset
+    libc.src.sched.__sched_getcpuisset
+
+    # strings.h entrypoints
+    libc.src.strings.strcasecmp_l
+    libc.src.strings.strncasecmp_l
+
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+    libc.src.setjmp.siglongjmp
+    libc.src.setjmp.sigsetjmp
+
+    # stdio.h entrypoints
+    libc.src.stdio.clearerr
+    libc.src.stdio.clearerr_unlocked
+    libc.src.stdio.fclose
+    libc.src.stdio.fdopen
+    libc.src.stdio.feof
+    libc.src.stdio.feof_unlocked
+    libc.src.stdio.ferror
+    libc.src.stdio.ferror_unlocked
+    libc.src.stdio.fflush
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgetc_unlocked
+    libc.src.stdio.fgets
+    libc.src.stdio.fileno
+    libc.src.stdio.flockfile
+    libc.src.stdio.fopen
+    libc.src.stdio.fopencookie
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fread_unlocked
+    libc.src.stdio.fseek
+    libc.src.stdio.fseeko
+    libc.src.stdio.ftell
+    libc.src.stdio.ftello
+    libc.src.stdio.funlockfile
+    libc.src.stdio.fwrite
+    libc.src.stdio.fwrite_unlocked
+    libc.src.stdio.getc
+    libc.src.stdio.getc_unlocked
+    libc.src.stdio.getchar
+    libc.src.stdio.getchar_unlocked
+    libc.src.stdio.perror
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.setbuf
+    libc.src.stdio.setvbuf
+    libc.src.stdio.stderr
+    libc.src.stdio.stdin
+    libc.src.stdio.stdout
+    libc.src.stdio.ungetc
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
+    libc.src.stdlib.at_quick_exit
+    libc.src.stdlib.atexit
+    libc.src.stdlib.exit
+    libc.src.stdlib.getenv
+    libc.src.stdlib.quick_exit
+
+    # signal.h entrypoints
+    libc.src.signal.kill
+    libc.src.signal.raise
+    libc.src.signal.sigaction
+    libc.src.signal.sigaddset
+    libc.src.signal.sigaltstack
+    libc.src.signal.sigdelset
+    libc.src.signal.sigemptyset
+    libc.src.signal.sigfillset
+    libc.src.signal.signal
+    libc.src.signal.sigprocmask
+
+    # spawn.h entrypoints
+    libc.src.spawn.posix_spawn
+    libc.src.spawn.posix_spawn_file_actions_addclose
+    libc.src.spawn.posix_spawn_file_actions_adddup2
+    libc.src.spawn.posix_spawn_file_actions_addopen
+    libc.src.spawn.posix_spawn_file_actions_destroy
+    libc.src.spawn.posix_spawn_file_actions_init
+
+    # search.h entrypoints
+    libc.src.search.hcreate
+    libc.src.search.hcreate_r
+    libc.src.search.hdestroy
+    libc.src.search.hdestroy_r
+    libc.src.search.hsearch
+    libc.src.search.hsearch_r
+    libc.src.search.insque
+    libc.src.search.lfind
+    libc.src.search.lsearch
+    libc.src.search.remque
+
+    # threads.h entrypoints
+    libc.src.threads.call_once
+    libc.src.threads.cnd_broadcast
+    libc.src.threads.cnd_destroy
+    libc.src.threads.cnd_init
+    libc.src.threads.cnd_signal
+    libc.src.threads.cnd_wait
+    libc.src.threads.mtx_destroy
+    libc.src.threads.mtx_init
+    libc.src.threads.mtx_lock
+    libc.src.threads.mtx_unlock
+    libc.src.threads.thrd_create
+    libc.src.threads.thrd_current
+    libc.src.threads.thrd_detach
+    libc.src.threads.thrd_equal
+    libc.src.threads.thrd_exit
+    libc.src.threads.thrd_join
+    libc.src.threads.tss_create
+    libc.src.threads.tss_delete
+    libc.src.threads.tss_get
+    libc.src.threads.tss_set
+
+    # time.h entrypoints
+    libc.src.time.asctime
+    libc.src.time.asctime_r
+    libc.src.time.ctime
+    libc.src.time.ctime_r
+    libc.src.time.clock
+    libc.src.time.clock_gettime
+    libc.src.time.clock_settime
+    libc.src.time.difftime
+    libc.src.time.gettimeofday
+    libc.src.time.gmtime
+    libc.src.time.gmtime_r
+    libc.src.time.mktime
+    libc.src.time.nanosleep
+    libc.src.time.time
+    libc.src.time.timespec_get
+
+    # unistd.h entrypoints
+    libc.src.unistd.__llvm_libc_syscall
+    libc.src.unistd._exit
+    libc.src.unistd.environ
+    libc.src.unistd.execv
+    libc.src.unistd.fork
+    libc.src.unistd.getopt
+    libc.src.unistd.optarg
+    libc.src.unistd.opterr
+    libc.src.unistd.optind
+    libc.src.unistd.optopt
+    libc.src.unistd.swab
+
+    # sys/select.h entrypoints
+    libc.src.sys.select.select
+
+    # sys/socket.h entrypoints
+    libc.src.sys.socket.bind
+    libc.src.sys.socket.socket
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 3d3e77d826b06..9c298499fda36 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -538,3 +538,541 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+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
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # poll.h entrypoints
+    libc.src.poll.poll
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    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.strsep
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib.abs
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    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.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    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.aligned_alloc
+    libc.src.stdlib.free
+    libc.src.stdlib.malloc
+
+    # sys/ioctl.h entrypoints
+    libc.src.sys.ioctl.ioctl
+
+    # sys/mman.h entrypoints
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.munmap
+
+    # sys/prctl.h entrypoints
+    libc.src.sys.prctl.prctl
+
+    # sys/epoll.h entrypoints
+    # Disabled due to epoll_wait syscalls not being available on this platform.
+    # libc.src.sys.epoll.epoll_wait
+    # libc.src.sys.epoll.epoll_pwait
+    # libc.src.sys.epoll.epoll_pwait2
+
+    # sys/time.h entrypoints
+    libc.src.sys.time.setitimer
+    libc.src.sys.time.getitimer
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+)
+
+if(LLVM_LIBC_FULL_BUILD)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # search.h entrypoints
+    libc.src.search.lfind
+
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+    libc.src.setjmp.siglongjmp
+    libc.src.setjmp.sigsetjmp
+  )
+endif()
+
+if(LLVM_LIBC_INCLUDE_SCUDO)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # malloc.h external entrypoints
+    libc.src.stdlib.mallopt
+  )
+endif()
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.dfmal
+    libc.src.math.dsqrtl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmul
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    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.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    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.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    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.tanpif
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 13343dea76fe3..7c0eee0a1f1e2 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -1332,3 +1332,1335 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBC_ENTRYPOINTS}
   ${TARGET_LIBM_ENTRYPOINTS}
 )
+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
+
+    # dlfcn.h entrypoints
+    libc.src.dlfcn.dlclose
+    libc.src.dlfcn.dlerror
+    libc.src.dlfcn.dlopen
+    libc.src.dlfcn.dlsym
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # fcntl.h entrypoints
+    libc.src.fcntl.creat
+    libc.src.fcntl.fcntl
+    libc.src.fcntl.open
+    libc.src.fcntl.openat
+
+    # poll.h entrypoints
+    libc.src.poll.poll
+
+    # sched.h entrypoints
+    libc.src.sched.sched_get_priority_max
+    libc.src.sched.sched_get_priority_min
+    libc.src.sched.sched_getaffinity
+    libc.src.sched.sched_getparam
+    libc.src.sched.sched_getscheduler
+    libc.src.sched.sched_rr_get_interval
+    libc.src.sched.sched_setaffinity
+    libc.src.sched.sched_setparam
+    libc.src.sched.sched_setscheduler
+    libc.src.sched.sched_yield
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    libc.src.string.memmove
+    libc.src.string.mempcpy
+    libc.src.string.memrchr
+    libc.src.string.memset
+    libc.src.string.memset_explicit
+    libc.src.string.stpcpy
+    libc.src.string.stpncpy
+    libc.src.string.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    libc.src.string.strerror_r
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strsignal
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.ffs
+    libc.src.strings.ffsl
+    libc.src.strings.ffsll
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib.a64l
+    libc.src.stdlib.abs
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.div
+    libc.src.stdlib.l64a
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.stdlib.strfromd
+    libc.src.stdlib.strfromf
+    libc.src.stdlib.strfroml
+    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.aligned_alloc
+    libc.src.stdlib.calloc
+    libc.src.stdlib.free
+    libc.src.stdlib.malloc
+    libc.src.stdlib.realloc
+
+    # stdio.h entrypoints
+    libc.src.stdio.fprintf
+    libc.src.stdio.fscanf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.printf
+    libc.src.stdio.remove
+    libc.src.stdio.rename
+    libc.src.stdio.scanf
+    libc.src.stdio.vscanf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.asprintf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vsscanf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.vprintf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vasprintf
+
+    # sys/epoll.h entrypoints
+    libc.src.sys.epoll.epoll_create
+    libc.src.sys.epoll.epoll_create1
+    libc.src.sys.epoll.epoll_ctl
+    libc.src.sys.epoll.epoll_pwait
+    libc.src.sys.epoll.epoll_wait
+    # TODO: Need to check if pwait2 is available before providing.
+    # https://github.com/llvm/llvm-project/issues/80060
+    # libc.src.sys.epoll.epoll_pwait2
+
+    # sys/ioctl.h entrypoints
+    libc.src.sys.ioctl.ioctl
+
+    # sys/mman.h entrypoints
+    libc.src.sys.mman.madvise
+    libc.src.sys.mman.mincore
+    libc.src.sys.mman.mlock
+    libc.src.sys.mman.mlock2
+    libc.src.sys.mman.mlockall
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.mremap
+    libc.src.sys.mman.mprotect
+    libc.src.sys.mman.msync
+    libc.src.sys.mman.munlock
+    libc.src.sys.mman.munlockall
+    libc.src.sys.mman.munmap
+    libc.src.sys.mman.remap_file_pages
+    libc.src.sys.mman.posix_madvise
+    libc.src.sys.mman.shm_open
+    libc.src.sys.mman.shm_unlink
+
+    # sys/random.h entrypoints
+    libc.src.sys.random.getrandom
+
+    # sys/resource.h entrypoints
+    libc.src.sys.resource.getrlimit
+    libc.src.sys.resource.setrlimit
+
+    # sys/sendfile entrypoints
+    libc.src.sys.sendfile.sendfile
+
+    # sys/stat.h entrypoints
+    libc.src.sys.stat.chmod
+    libc.src.sys.stat.fchmod
+    libc.src.sys.stat.fchmodat
+    libc.src.sys.stat.fstat
+    libc.src.sys.stat.lstat
+    libc.src.sys.stat.mkdir
+    libc.src.sys.stat.mkdirat
+    libc.src.sys.stat.stat
+
+    # sys/statvfs.h
+    libc.src.sys.statvfs.fstatvfs
+    libc.src.sys.statvfs.statvfs
+
+    # sys/utimes.h entrypoints
+    libc.src.sys.time.utimes
+
+    # sys/utsname.h entrypoints
+    libc.src.sys.utsname.uname
+
+    # sys/wait.h entrypoints
+    libc.src.sys.wait.wait
+    libc.src.sys.wait.wait4
+    libc.src.sys.wait.waitpid
+
+    # sys/prctl.h entrypoints
+    libc.src.sys.prctl.prctl
+
+    # sys/auxv.h entrypoints
+    libc.src.sys.auxv.getauxval
+
+    # termios.h entrypoints
+    libc.src.termios.cfgetispeed
+    libc.src.termios.cfgetospeed
+    libc.src.termios.cfsetispeed
+    libc.src.termios.cfsetospeed
+    libc.src.termios.tcdrain
+    libc.src.termios.tcflow
+    libc.src.termios.tcflush
+    libc.src.termios.tcgetattr
+    libc.src.termios.tcgetsid
+    libc.src.termios.tcsendbreak
+    libc.src.termios.tcsetattr
+
+    # unistd.h entrypoints
+    libc.src.unistd.access
+    libc.src.unistd.chdir
+    libc.src.unistd.close
+    libc.src.unistd.dup
+    libc.src.unistd.dup2
+    libc.src.unistd.dup3
+    libc.src.unistd.execve
+    libc.src.unistd.faccessat
+    libc.src.unistd.fchdir
+    libc.src.unistd.fpathconf
+    libc.src.unistd.fsync
+    libc.src.unistd.ftruncate
+    libc.src.unistd.getcwd
+    libc.src.unistd.getentropy
+    libc.src.unistd.geteuid
+    libc.src.unistd.gethostname
+    libc.src.unistd.getpagesize
+    libc.src.unistd.getpid
+    libc.src.unistd.getppid
+    libc.src.unistd.getsid
+    libc.src.unistd.gettid
+    libc.src.unistd.getuid
+    libc.src.unistd.isatty
+    libc.src.unistd.link
+    libc.src.unistd.linkat
+    libc.src.unistd.lseek
+    libc.src.unistd.pathconf
+    libc.src.unistd.pipe
+    libc.src.unistd.pipe2
+    libc.src.unistd.pread
+    libc.src.unistd.pwrite
+    libc.src.unistd.read
+    libc.src.unistd.readlink
+    libc.src.unistd.readlinkat
+    libc.src.unistd.rmdir
+    libc.src.unistd.setsid
+    libc.src.unistd.symlink
+    libc.src.unistd.symlinkat
+    libc.src.unistd.sysconf
+    libc.src.unistd.truncate
+    libc.src.unistd.unlink
+    libc.src.unistd.unlinkat
+    libc.src.unistd.write
+
+    # wchar.h entrypoints
+    libc.src.wchar.btowc
+    libc.src.wchar.wcslen
+    libc.src.wchar.wctob
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+
+    # sys/uio.h entrypoints
+    libc.src.sys.uio.writev
+    libc.src.sys.uio.readv
+
+    # sys/time.h entrypoints
+    libc.src.sys.time.setitimer
+    libc.src.sys.time.getitimer
+)
+
+if(LLVM_LIBC_INCLUDE_SCUDO)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # malloc.h external entrypoints
+    libc.src.stdlib.mallopt
+  )
+endif()
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp10m1f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.tanpif
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.acospif16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.atanhf16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.rsqrtf
+    libc.src.math.rsqrtf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  if(LIBC_TYPES_HAS_FLOAT128)
+    list(APPEND TARGET_LIBM_ENTRYPOINTS
+      # math.h C23 mixed _Float16 and _Float128 entrypoints
+      libc.src.math.f16addf128
+      libc.src.math.f16divf128
+      libc.src.math.f16fmaf128
+      libc.src.math.f16mulf128
+      libc.src.math.f16sqrtf128
+      libc.src.math.f16subf128
+    )
+  endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16divf128
+    libc.src.math.bf16fmaf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LIBC_COMPILER_HAS_FIXED_POINT)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # stdfix.h _Fract and _Accum entrypoints
+    libc.src.stdfix.abshk
+    libc.src.stdfix.abshr
+    libc.src.stdfix.absk
+    libc.src.stdfix.abslk
+    libc.src.stdfix.abslr
+    libc.src.stdfix.absr
+    libc.src.stdfix.exphk
+    libc.src.stdfix.expk
+    libc.src.stdfix.roundhk
+    libc.src.stdfix.roundhr
+    libc.src.stdfix.roundk
+    libc.src.stdfix.roundlk
+    libc.src.stdfix.roundlr
+    libc.src.stdfix.roundr
+    libc.src.stdfix.rounduhk
+    libc.src.stdfix.rounduhr
+    libc.src.stdfix.rounduk
+    libc.src.stdfix.roundulk
+    libc.src.stdfix.roundulr
+    libc.src.stdfix.roundur
+    libc.src.stdfix.sqrtuhk
+    libc.src.stdfix.sqrtuhr
+    libc.src.stdfix.sqrtuk
+    libc.src.stdfix.sqrtur
+    # libc.src.stdfix.sqrtulk
+    libc.src.stdfix.sqrtulr
+    libc.src.stdfix.uhksqrtus
+    libc.src.stdfix.uksqrtui
+    libc.src.stdfix.hrbits
+    libc.src.stdfix.uhrbits
+    libc.src.stdfix.rbits
+    libc.src.stdfix.urbits
+    libc.src.stdfix.lrbits
+    libc.src.stdfix.ulrbits
+    libc.src.stdfix.hkbits
+    libc.src.stdfix.uhkbits
+    libc.src.stdfix.kbits
+    libc.src.stdfix.ukbits
+    libc.src.stdfix.lkbits
+    libc.src.stdfix.ulkbits
+    libc.src.stdfix.bitshr
+    libc.src.stdfix.bitsr
+    libc.src.stdfix.bitslr
+    libc.src.stdfix.bitshk
+    libc.src.stdfix.bitsk
+    libc.src.stdfix.bitslk
+    libc.src.stdfix.bitsuhr
+    libc.src.stdfix.bitsur
+    libc.src.stdfix.bitsulr
+    libc.src.stdfix.bitsuhk
+    libc.src.stdfix.bitsuk
+    libc.src.stdfix.bitsulk
+    libc.src.stdfix.countlshr
+    libc.src.stdfix.countlsr
+    libc.src.stdfix.countlslr
+    libc.src.stdfix.countlshk
+    libc.src.stdfix.countlsk
+    libc.src.stdfix.countlslk
+    libc.src.stdfix.countlsuhr
+    libc.src.stdfix.countlsur
+    libc.src.stdfix.countlsulr
+    libc.src.stdfix.countlsuhk
+    libc.src.stdfix.countlsuk
+    libc.src.stdfix.countlsulk
+    libc.src.stdfix.idivr
+    libc.src.stdfix.idivlr
+    libc.src.stdfix.idivk
+    libc.src.stdfix.idivlk
+    libc.src.stdfix.idivur
+    libc.src.stdfix.idivulr
+    libc.src.stdfix.idivuk
+    libc.src.stdfix.idivulk
+    libc.src.stdfix.rdivi
+  )
+endif()
+
+if(LLVM_LIBC_FULL_BUILD)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper_l
+
+    # stdlib.h entrypoints
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull_l
+
+    # string.h entrypoints
+    libc.src.string.strcoll_l
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.strcasecmp_l
+    libc.src.strings.strncasecmp_l
+
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # compiler entrypoints (no corresponding header)
+    libc.src.compiler.__stack_chk_fail
+
+    # dirent.h entrypoints
+    libc.src.dirent.closedir
+    libc.src.dirent.dirfd
+    libc.src.dirent.opendir
+    libc.src.dirent.readdir
+
+    # arpa/inet.h entrypoints
+    libc.src.arpa.inet.htonl
+    libc.src.arpa.inet.htons
+    libc.src.arpa.inet.inet_addr
+    libc.src.arpa.inet.inet_aton
+    libc.src.arpa.inet.ntohl
+    libc.src.arpa.inet.ntohs
+
+    # pthread.h entrypoints
+    libc.src.pthread.pthread_atfork
+    libc.src.pthread.pthread_attr_destroy
+    libc.src.pthread.pthread_attr_getdetachstate
+    libc.src.pthread.pthread_attr_getguardsize
+    libc.src.pthread.pthread_attr_getstack
+    libc.src.pthread.pthread_attr_getstacksize
+    libc.src.pthread.pthread_attr_init
+    libc.src.pthread.pthread_attr_setdetachstate
+    libc.src.pthread.pthread_attr_setguardsize
+    libc.src.pthread.pthread_attr_setstack
+    libc.src.pthread.pthread_attr_setstacksize
+    libc.src.pthread.pthread_condattr_destroy
+    libc.src.pthread.pthread_condattr_getclock
+    libc.src.pthread.pthread_condattr_getpshared
+    libc.src.pthread.pthread_condattr_init
+    libc.src.pthread.pthread_condattr_setclock
+    libc.src.pthread.pthread_condattr_setpshared
+    libc.src.pthread.pthread_create
+    libc.src.pthread.pthread_detach
+    libc.src.pthread.pthread_equal
+    libc.src.pthread.pthread_exit
+    libc.src.pthread.pthread_getname_np
+    libc.src.pthread.pthread_getspecific
+    libc.src.pthread.pthread_join
+    libc.src.pthread.pthread_key_create
+    libc.src.pthread.pthread_key_delete
+    libc.src.pthread.pthread_mutex_destroy
+    libc.src.pthread.pthread_mutex_init
+    libc.src.pthread.pthread_mutex_lock
+    libc.src.pthread.pthread_mutex_unlock
+    libc.src.pthread.pthread_mutexattr_destroy
+    libc.src.pthread.pthread_mutexattr_getpshared
+    libc.src.pthread.pthread_mutexattr_getrobust
+    libc.src.pthread.pthread_mutexattr_gettype
+    libc.src.pthread.pthread_mutexattr_init
+    libc.src.pthread.pthread_mutexattr_setpshared
+    libc.src.pthread.pthread_mutexattr_setrobust
+    libc.src.pthread.pthread_mutexattr_settype
+    libc.src.pthread.pthread_once
+    libc.src.pthread.pthread_rwlock_clockrdlock
+    libc.src.pthread.pthread_rwlock_clockwrlock
+    libc.src.pthread.pthread_rwlock_destroy
+    libc.src.pthread.pthread_rwlock_init
+    libc.src.pthread.pthread_rwlock_rdlock
+    libc.src.pthread.pthread_rwlock_timedrdlock
+    libc.src.pthread.pthread_rwlock_timedwrlock
+    libc.src.pthread.pthread_rwlock_tryrdlock
+    libc.src.pthread.pthread_rwlock_trywrlock
+    libc.src.pthread.pthread_rwlock_unlock
+    libc.src.pthread.pthread_rwlock_wrlock
+    libc.src.pthread.pthread_rwlockattr_destroy
+    libc.src.pthread.pthread_rwlockattr_getkind_np
+    libc.src.pthread.pthread_rwlockattr_getpshared
+    libc.src.pthread.pthread_rwlockattr_init
+    libc.src.pthread.pthread_rwlockattr_setkind_np
+    libc.src.pthread.pthread_rwlockattr_setpshared
+    libc.src.pthread.pthread_spin_destroy
+    libc.src.pthread.pthread_spin_init
+    libc.src.pthread.pthread_spin_lock
+    libc.src.pthread.pthread_spin_trylock
+    libc.src.pthread.pthread_spin_unlock
+    libc.src.pthread.pthread_self
+    libc.src.pthread.pthread_setname_np
+    libc.src.pthread.pthread_setspecific
+
+    # sched.h entrypoints
+    libc.src.sched.__sched_getcpucount
+    libc.src.sched.__sched_setcpuzero
+    libc.src.sched.__sched_setcpuset
+    libc.src.sched.__sched_getcpuisset
+
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+    libc.src.setjmp.siglongjmp
+    libc.src.setjmp.sigsetjmp
+
+    # stdio.h entrypoints
+    libc.src.stdio.clearerr
+    libc.src.stdio.clearerr_unlocked
+    libc.src.stdio.fclose
+    libc.src.stdio.fdopen
+    libc.src.stdio.feof
+    libc.src.stdio.feof_unlocked
+    libc.src.stdio.ferror
+    libc.src.stdio.ferror_unlocked
+    libc.src.stdio.fflush
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgetc_unlocked
+    libc.src.stdio.fgets
+    libc.src.stdio.fileno
+    libc.src.stdio.flockfile
+    libc.src.stdio.fopen
+    libc.src.stdio.fopencookie
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fread_unlocked
+    libc.src.stdio.fseek
+    libc.src.stdio.fseeko
+    libc.src.stdio.ftell
+    libc.src.stdio.ftello
+    libc.src.stdio.funlockfile
+    libc.src.stdio.fwrite
+    libc.src.stdio.fwrite_unlocked
+    libc.src.stdio.getc
+    libc.src.stdio.getc_unlocked
+    libc.src.stdio.getchar
+    libc.src.stdio.getchar_unlocked
+    libc.src.stdio.perror
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.setbuf
+    libc.src.stdio.setvbuf
+    libc.src.stdio.stderr
+    libc.src.stdio.stdin
+    libc.src.stdio.stdout
+    libc.src.stdio.ungetc
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
+    libc.src.stdlib.at_quick_exit
+    libc.src.stdlib.atexit
+    libc.src.stdlib.exit
+    libc.src.stdlib.getenv
+    libc.src.stdlib.quick_exit
+
+    # signal.h entrypoints
+    libc.src.signal.kill
+    libc.src.signal.raise
+    libc.src.signal.sigaction
+    libc.src.signal.sigaddset
+    libc.src.signal.sigaltstack
+    libc.src.signal.sigdelset
+    libc.src.signal.sigemptyset
+    libc.src.signal.sigfillset
+    libc.src.signal.signal
+    libc.src.signal.sigprocmask
+
+    # spawn.h entrypoints
+    libc.src.spawn.posix_spawn
+    libc.src.spawn.posix_spawn_file_actions_addclose
+    libc.src.spawn.posix_spawn_file_actions_adddup2
+    libc.src.spawn.posix_spawn_file_actions_addopen
+    libc.src.spawn.posix_spawn_file_actions_destroy
+    libc.src.spawn.posix_spawn_file_actions_init
+
+    # search.h entrypoints
+    libc.src.search.hcreate
+    libc.src.search.hcreate_r
+    libc.src.search.hdestroy
+    libc.src.search.hdestroy_r
+    libc.src.search.hsearch
+    libc.src.search.hsearch_r
+    libc.src.search.insque
+    libc.src.search.lfind
+    libc.src.search.lsearch
+    libc.src.search.remque
+
+    # threads.h entrypoints
+    libc.src.threads.call_once
+    libc.src.threads.cnd_broadcast
+    libc.src.threads.cnd_destroy
+    libc.src.threads.cnd_init
+    libc.src.threads.cnd_signal
+    libc.src.threads.cnd_wait
+    libc.src.threads.mtx_destroy
+    libc.src.threads.mtx_init
+    libc.src.threads.mtx_lock
+    libc.src.threads.mtx_unlock
+    libc.src.threads.thrd_create
+    libc.src.threads.thrd_current
+    libc.src.threads.thrd_detach
+    libc.src.threads.thrd_equal
+    libc.src.threads.thrd_exit
+    libc.src.threads.thrd_join
+    libc.src.threads.tss_create
+    libc.src.threads.tss_delete
+    libc.src.threads.tss_get
+    libc.src.threads.tss_set
+
+    # time.h entrypoints
+    libc.src.time.asctime
+    libc.src.time.asctime_r
+    libc.src.time.ctime
+    libc.src.time.ctime_r
+    libc.src.time.clock
+    libc.src.time.clock_gettime
+    libc.src.time.clock_settime
+    libc.src.time.difftime
+    libc.src.time.gettimeofday
+    libc.src.time.gmtime
+    libc.src.time.gmtime_r
+    libc.src.time.mktime
+    libc.src.time.nanosleep
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.time
+    libc.src.time.timespec_get
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+
+    # unistd.h entrypoints
+    libc.src.unistd.__llvm_libc_syscall
+    libc.src.unistd._exit
+    libc.src.unistd.environ
+    libc.src.unistd.execv
+    libc.src.unistd.fork
+    libc.src.unistd.getopt
+    libc.src.unistd.optarg
+    libc.src.unistd.opterr
+    libc.src.unistd.optind
+    libc.src.unistd.optopt
+    libc.src.unistd.swab
+
+    # sys/select.h entrypoints
+    libc.src.sys.select.select
+
+    # sys/socket.h entrypoints
+    libc.src.sys.socket.bind
+    libc.src.sys.socket.socket
+    libc.src.sys.socket.socketpair
+    libc.src.sys.socket.send
+    libc.src.sys.socket.sendto
+    libc.src.sys.socket.sendmsg
+    libc.src.sys.socket.recv
+    libc.src.sys.socket.recvfrom
+    libc.src.sys.socket.recvmsg
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 24df7e63e3ebf..1ae4f0f31cbb0 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -1416,3 +1416,1406 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBM_ENTRYPOINTS}
   ${TARGET_LIBMVEC_ENTRYPOINTS}
 )
+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
+
+    # dlfcn.h entrypoints
+    libc.src.dlfcn.dladdr
+    libc.src.dlfcn.dlclose
+    libc.src.dlfcn.dlerror
+    libc.src.dlfcn.dlopen
+    libc.src.dlfcn.dlsym
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # fcntl.h entrypoints
+    libc.src.fcntl.creat
+    libc.src.fcntl.fcntl
+    libc.src.fcntl.open
+    libc.src.fcntl.openat
+
+    # poll.h entrypoints
+    libc.src.poll.poll
+
+    # sched.h entrypoints
+    libc.src.sched.getcpu
+    libc.src.sched.sched_get_priority_max
+    libc.src.sched.sched_get_priority_min
+    libc.src.sched.sched_getaffinity
+    libc.src.sched.sched_getparam
+    libc.src.sched.sched_getscheduler
+    libc.src.sched.sched_rr_get_interval
+    libc.src.sched.sched_setaffinity
+    libc.src.sched.sched_setparam
+    libc.src.sched.sched_setscheduler
+    libc.src.sched.sched_yield
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    libc.src.string.memmove
+    libc.src.string.mempcpy
+    libc.src.string.memrchr
+    libc.src.string.memset
+    libc.src.string.memset_explicit
+    libc.src.string.stpcpy
+    libc.src.string.stpncpy
+    libc.src.string.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    libc.src.string.strcmp
+    libc.src.string.strcoll
+    libc.src.string.strcpy
+    libc.src.string.strcspn
+    libc.src.string.strdup
+    libc.src.string.strerror
+    libc.src.string.strerror_r
+    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.strndup
+    libc.src.string.strnlen
+    libc.src.string.strpbrk
+    libc.src.string.strrchr
+    libc.src.string.strsep
+    libc.src.string.strsignal
+    libc.src.string.strspn
+    libc.src.string.strstr
+    libc.src.string.strtok
+    libc.src.string.strtok_r
+    libc.src.string.strxfrm
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.ffs
+    libc.src.strings.ffsl
+    libc.src.strings.ffsll
+    libc.src.strings.index
+    libc.src.strings.rindex
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # inttypes.h entrypoints
+    libc.src.inttypes.imaxabs
+    libc.src.inttypes.imaxdiv
+    libc.src.inttypes.strtoimax
+    libc.src.inttypes.strtoumax
+
+    # stdbit.h entrypoints
+    libc.src.stdbit.stdc_bit_ceil_uc
+    libc.src.stdbit.stdc_bit_ceil_ui
+    libc.src.stdbit.stdc_bit_ceil_ul
+    libc.src.stdbit.stdc_bit_ceil_ull
+    libc.src.stdbit.stdc_bit_ceil_us
+    libc.src.stdbit.stdc_bit_floor_uc
+    libc.src.stdbit.stdc_bit_floor_ui
+    libc.src.stdbit.stdc_bit_floor_ul
+    libc.src.stdbit.stdc_bit_floor_ull
+    libc.src.stdbit.stdc_bit_floor_us
+    libc.src.stdbit.stdc_bit_width_uc
+    libc.src.stdbit.stdc_bit_width_ui
+    libc.src.stdbit.stdc_bit_width_ul
+    libc.src.stdbit.stdc_bit_width_ull
+    libc.src.stdbit.stdc_bit_width_us
+    libc.src.stdbit.stdc_count_ones_uc
+    libc.src.stdbit.stdc_count_ones_ui
+    libc.src.stdbit.stdc_count_ones_ul
+    libc.src.stdbit.stdc_count_ones_ull
+    libc.src.stdbit.stdc_count_ones_us
+    libc.src.stdbit.stdc_count_zeros_uc
+    libc.src.stdbit.stdc_count_zeros_ui
+    libc.src.stdbit.stdc_count_zeros_ul
+    libc.src.stdbit.stdc_count_zeros_ull
+    libc.src.stdbit.stdc_count_zeros_us
+    libc.src.stdbit.stdc_first_leading_one_uc
+    libc.src.stdbit.stdc_first_leading_one_ui
+    libc.src.stdbit.stdc_first_leading_one_ul
+    libc.src.stdbit.stdc_first_leading_one_ull
+    libc.src.stdbit.stdc_first_leading_one_us
+    libc.src.stdbit.stdc_first_leading_zero_uc
+    libc.src.stdbit.stdc_first_leading_zero_ui
+    libc.src.stdbit.stdc_first_leading_zero_ul
+    libc.src.stdbit.stdc_first_leading_zero_ull
+    libc.src.stdbit.stdc_first_leading_zero_us
+    libc.src.stdbit.stdc_first_trailing_one_uc
+    libc.src.stdbit.stdc_first_trailing_one_ui
+    libc.src.stdbit.stdc_first_trailing_one_ul
+    libc.src.stdbit.stdc_first_trailing_one_ull
+    libc.src.stdbit.stdc_first_trailing_one_us
+    libc.src.stdbit.stdc_first_trailing_zero_uc
+    libc.src.stdbit.stdc_first_trailing_zero_ui
+    libc.src.stdbit.stdc_first_trailing_zero_ul
+    libc.src.stdbit.stdc_first_trailing_zero_ull
+    libc.src.stdbit.stdc_first_trailing_zero_us
+    libc.src.stdbit.stdc_has_single_bit_uc
+    libc.src.stdbit.stdc_has_single_bit_ui
+    libc.src.stdbit.stdc_has_single_bit_ul
+    libc.src.stdbit.stdc_has_single_bit_ull
+    libc.src.stdbit.stdc_has_single_bit_us
+    libc.src.stdbit.stdc_leading_ones_uc
+    libc.src.stdbit.stdc_leading_ones_ui
+    libc.src.stdbit.stdc_leading_ones_ul
+    libc.src.stdbit.stdc_leading_ones_ull
+    libc.src.stdbit.stdc_leading_ones_us
+    libc.src.stdbit.stdc_leading_zeros_uc
+    libc.src.stdbit.stdc_leading_zeros_ui
+    libc.src.stdbit.stdc_leading_zeros_ul
+    libc.src.stdbit.stdc_leading_zeros_ull
+    libc.src.stdbit.stdc_leading_zeros_us
+    libc.src.stdbit.stdc_trailing_ones_uc
+    libc.src.stdbit.stdc_trailing_ones_ui
+    libc.src.stdbit.stdc_trailing_ones_ul
+    libc.src.stdbit.stdc_trailing_ones_ull
+    libc.src.stdbit.stdc_trailing_ones_us
+    libc.src.stdbit.stdc_trailing_zeros_uc
+    libc.src.stdbit.stdc_trailing_zeros_ui
+    libc.src.stdbit.stdc_trailing_zeros_ul
+    libc.src.stdbit.stdc_trailing_zeros_ull
+    libc.src.stdbit.stdc_trailing_zeros_us
+
+    # stdlib.h entrypoints
+    libc.src.stdlib.a64l
+    libc.src.stdlib.abs
+    libc.src.stdlib.atof
+    libc.src.stdlib.atoi
+    libc.src.stdlib.atol
+    libc.src.stdlib.atoll
+    libc.src.stdlib.bsearch
+    libc.src.stdlib.div
+    libc.src.stdlib.l64a
+    libc.src.stdlib.labs
+    libc.src.stdlib.ldiv
+    libc.src.stdlib.llabs
+    libc.src.stdlib.lldiv
+    libc.src.stdlib.memalignment
+    libc.src.stdlib.qsort
+    libc.src.stdlib.qsort_r
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.stdlib.strfromd
+    libc.src.stdlib.strfromf
+    libc.src.stdlib.strfroml
+    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.aligned_alloc
+    libc.src.stdlib.calloc
+    libc.src.stdlib.free
+    libc.src.stdlib.malloc
+    libc.src.stdlib.realloc
+
+    # stdio.h entrypoints
+    libc.src.stdio.fprintf
+    libc.src.stdio.fscanf
+    libc.src.stdio.vfscanf
+    libc.src.stdio.printf
+    libc.src.stdio.remove
+    libc.src.stdio.rename
+    libc.src.stdio.scanf
+    libc.src.stdio.vscanf
+    libc.src.stdio.snprintf
+    libc.src.stdio.sprintf
+    libc.src.stdio.asprintf
+    libc.src.stdio.sscanf
+    libc.src.stdio.vsscanf
+    libc.src.stdio.vfprintf
+    libc.src.stdio.vprintf
+    libc.src.stdio.vsnprintf
+    libc.src.stdio.vsprintf
+    libc.src.stdio.vasprintf
+
+    # sys/epoll.h entrypoints
+    libc.src.sys.epoll.epoll_create
+    libc.src.sys.epoll.epoll_create1
+    libc.src.sys.epoll.epoll_ctl
+    libc.src.sys.epoll.epoll_pwait
+    libc.src.sys.epoll.epoll_wait
+    # TODO: Need to check if pwait2 is available before providing.
+    # https://github.com/llvm/llvm-project/issues/80060
+    # libc.src.sys.epoll.epoll_pwait2
+
+    # sys/ioctl.h entrypoints
+    libc.src.sys.ioctl.ioctl
+
+    # sys/mman.h entrypoints
+    libc.src.sys.mman.madvise
+    libc.src.sys.mman.mincore
+    libc.src.sys.mman.mlock
+    libc.src.sys.mman.mlock2
+    libc.src.sys.mman.mlockall
+    libc.src.sys.mman.mmap
+    libc.src.sys.mman.mremap
+    libc.src.sys.mman.mprotect
+    libc.src.sys.mman.msync
+    libc.src.sys.mman.munlock
+    libc.src.sys.mman.munlockall
+    libc.src.sys.mman.munmap
+    libc.src.sys.mman.pkey_alloc
+    libc.src.sys.mman.pkey_free
+    libc.src.sys.mman.pkey_get
+    libc.src.sys.mman.pkey_mprotect
+    libc.src.sys.mman.pkey_set
+    libc.src.sys.mman.remap_file_pages
+    libc.src.sys.mman.posix_madvise
+    libc.src.sys.mman.shm_open
+    libc.src.sys.mman.shm_unlink
+
+    # sys/random.h entrypoints
+    libc.src.sys.random.getrandom
+
+    # sys/resource.h entrypoints
+    libc.src.sys.resource.getrlimit
+    libc.src.sys.resource.setrlimit
+
+    # sys/sendfile entrypoints
+    libc.src.sys.sendfile.sendfile
+
+    # sys/stat.h entrypoints
+    libc.src.sys.stat.chmod
+    libc.src.sys.stat.fchmod
+    libc.src.sys.stat.fchmodat
+    libc.src.sys.stat.fstat
+    libc.src.sys.stat.lstat
+    libc.src.sys.stat.mkdir
+    libc.src.sys.stat.mkdirat
+    libc.src.sys.stat.stat
+
+    # sys/statvfs.h
+    libc.src.sys.statvfs.fstatvfs
+    libc.src.sys.statvfs.statvfs
+
+    # sys/utimes.h entrypoints
+    libc.src.sys.time.utimes
+
+    # sys/utsname.h entrypoints
+    libc.src.sys.utsname.uname
+
+    # sys/wait.h entrypoints
+    libc.src.sys.wait.wait
+    libc.src.sys.wait.wait4
+    libc.src.sys.wait.waitpid
+
+    # sys/prctl.h entrypoints
+    libc.src.sys.prctl.prctl
+
+    # sys/auxv.h entrypoints
+    libc.src.sys.auxv.getauxval
+
+    # termios.h entrypoints
+    libc.src.termios.cfgetispeed
+    libc.src.termios.cfgetospeed
+    libc.src.termios.cfsetispeed
+    libc.src.termios.cfsetospeed
+    libc.src.termios.tcdrain
+    libc.src.termios.tcflow
+    libc.src.termios.tcflush
+    libc.src.termios.tcgetattr
+    libc.src.termios.tcgetsid
+    libc.src.termios.tcsendbreak
+    libc.src.termios.tcsetattr
+
+    # unistd.h entrypoints
+    libc.src.unistd.access
+    libc.src.unistd.chdir
+    libc.src.unistd.chown
+    libc.src.unistd.close
+    libc.src.unistd.dup
+    libc.src.unistd.dup2
+    libc.src.unistd.dup3
+    libc.src.unistd.execve
+    libc.src.unistd.faccessat
+    libc.src.unistd.fchdir
+    libc.src.unistd.fchown
+    libc.src.unistd.fpathconf
+    libc.src.unistd.fsync
+    libc.src.unistd.ftruncate
+    libc.src.unistd.getcwd
+    libc.src.unistd.getentropy
+    libc.src.unistd.geteuid
+    libc.src.unistd.gethostname
+    libc.src.unistd.getpagesize
+    libc.src.unistd.getpid
+    libc.src.unistd.getppid
+    libc.src.unistd.getsid
+    libc.src.unistd.gettid
+    libc.src.unistd.getgid
+    libc.src.unistd.getuid
+    libc.src.unistd.isatty
+    libc.src.unistd.link
+    libc.src.unistd.linkat
+    libc.src.unistd.lseek
+    libc.src.unistd.pathconf
+    libc.src.unistd.pipe
+    libc.src.unistd.pipe2
+    libc.src.unistd.pread
+    libc.src.unistd.pwrite
+    libc.src.unistd.read
+    libc.src.unistd.readlink
+    libc.src.unistd.readlinkat
+    libc.src.unistd.rmdir
+    libc.src.unistd.setsid
+    libc.src.unistd.symlink
+    libc.src.unistd.symlinkat
+    libc.src.unistd.sysconf
+    libc.src.unistd.truncate
+    libc.src.unistd.unlink
+    libc.src.unistd.unlinkat
+    libc.src.unistd.write
+
+    # wchar.h entrypoints
+    libc.src.wchar.btowc
+    libc.src.wchar.wcslen
+    libc.src.wchar.wcsnlen
+    libc.src.wchar.wctob
+    libc.src.wchar.wmemmove
+    libc.src.wchar.wmemset
+    libc.src.wchar.wcschr
+    libc.src.wchar.wcsncmp
+    libc.src.wchar.wcscmp
+    libc.src.wchar.wcspbrk
+    libc.src.wchar.wcsrchr
+    libc.src.wchar.wcsspn
+    libc.src.wchar.wcscspn
+    libc.src.wchar.wcsdup
+    libc.src.wchar.wmemcmp
+    libc.src.wchar.wmempcpy
+    libc.src.wchar.wmemcpy
+    libc.src.wchar.wcsncpy
+    libc.src.wchar.wcscat
+    libc.src.wchar.wcsstr
+    libc.src.wchar.wcsncat
+    libc.src.wchar.wcslcat
+    libc.src.wchar.wcscpy
+    libc.src.wchar.wcslcpy
+    libc.src.wchar.wmemchr
+    libc.src.wchar.wcpcpy
+    libc.src.wchar.wcpncpy
+    libc.src.wchar.wcstod
+    libc.src.wchar.wcstof
+    libc.src.wchar.wcstok
+    libc.src.wchar.wcstol
+    libc.src.wchar.wcstold
+    libc.src.wchar.wcstoll
+    libc.src.wchar.wcstoul
+    libc.src.wchar.wcstoull
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+
+    # sys/uio.h entrypoints
+    libc.src.sys.uio.writev
+    libc.src.sys.uio.readv
+
+    # sys/time.h entrypoints
+    libc.src.sys.time.setitimer
+    libc.src.sys.time.getitimer
+)
+
+if(LLVM_LIBC_INCLUDE_SCUDO)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # malloc.h external entrypoints
+    libc.src.stdlib.mallopt
+  )
+endif()
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # complex.h entrypoints
+    libc.src.complex.creal
+    libc.src.complex.crealf
+    libc.src.complex.creall
+    libc.src.complex.cimag
+    libc.src.complex.cimagf
+    libc.src.complex.cimagl
+    libc.src.complex.conj
+    libc.src.complex.conjf
+    libc.src.complex.conjl
+    libc.src.complex.cproj
+    libc.src.complex.cprojf
+    libc.src.complex.cprojl
+
+    # 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.feraiseexcept
+    libc.src.fenv.fesetenv
+    libc.src.fenv.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.canonicalize
+    libc.src.math.canonicalizef
+    libc.src.math.canonicalizel
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    libc.src.math.ceil
+    libc.src.math.ceilf
+    libc.src.math.ceill
+    libc.src.math.copysign
+    libc.src.math.copysignf
+    libc.src.math.copysignl
+    libc.src.math.cos
+    libc.src.math.cosf
+    libc.src.math.coshf
+    libc.src.math.cospif
+    libc.src.math.dfmal
+    libc.src.math.dmull
+    libc.src.math.dsqrtl
+    libc.src.math.daddl
+    libc.src.math.ddivl
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp10m1f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.exp2m1f
+    libc.src.math.expf
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fadd
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    libc.src.math.fmaf
+    libc.src.math.fmax
+    libc.src.math.fmaxf
+    libc.src.math.fmaximum
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaxl
+    libc.src.math.fmin
+    libc.src.math.fminf
+    libc.src.math.fminimum
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminl
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.fmul
+    libc.src.math.fmull
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fromfp
+    libc.src.math.fromfpf
+    libc.src.math.fromfpl
+    libc.src.math.fromfpx
+    libc.src.math.fromfpxf
+    libc.src.math.fromfpxl
+    libc.src.math.fsqrt
+    libc.src.math.fsqrtl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    libc.src.math.getpayload
+    libc.src.math.getpayloadf
+    libc.src.math.getpayloadl
+    libc.src.math.hypot
+    libc.src.math.hypotf
+    libc.src.math.ilogb
+    libc.src.math.ilogbf
+    libc.src.math.ilogbl
+    libc.src.math.iscanonical
+    libc.src.math.iscanonicalf
+    libc.src.math.iscanonicall
+    libc.src.math.isnan
+    libc.src.math.isnanf
+    libc.src.math.isnanl
+    libc.src.math.issignaling
+    libc.src.math.issignalingf
+    libc.src.math.issignalingl
+    libc.src.math.ldexp
+    libc.src.math.ldexpf
+    libc.src.math.ldexpl
+    libc.src.math.llogb
+    libc.src.math.llogbf
+    libc.src.math.llogbl
+    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.log
+    libc.src.math.log10
+    libc.src.math.log10f
+    libc.src.math.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.logb
+    libc.src.math.logbf
+    libc.src.math.logbl
+    libc.src.math.logf
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nextdown
+    libc.src.math.nextdownf
+    libc.src.math.nextdownl
+    libc.src.math.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.nextup
+    libc.src.math.nextupf
+    libc.src.math.nextupl
+    libc.src.math.pow
+    libc.src.math.powf
+    libc.src.math.remainder
+    libc.src.math.remainderf
+    libc.src.math.remainderl
+    libc.src.math.remquo
+    libc.src.math.remquof
+    libc.src.math.remquol
+    libc.src.math.rint
+    libc.src.math.rintf
+    libc.src.math.rintl
+    libc.src.math.round
+    libc.src.math.roundeven
+    libc.src.math.roundevenf
+    libc.src.math.roundevenl
+    libc.src.math.roundf
+    libc.src.math.roundl
+    libc.src.math.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.setpayload
+    libc.src.math.setpayloadf
+    libc.src.math.setpayloadl
+    libc.src.math.setpayloadsig
+    libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigl
+    libc.src.math.sin
+    libc.src.math.sincos
+    libc.src.math.sincosf
+    libc.src.math.sinf
+    libc.src.math.sinhf
+    libc.src.math.sinpif
+    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.tanpif
+    libc.src.math.totalorder
+    libc.src.math.totalorderf
+    libc.src.math.totalorderl
+    libc.src.math.totalordermag
+    libc.src.math.totalordermagf
+    libc.src.math.totalordermagl
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+    libc.src.math.ufromfp
+    libc.src.math.ufromfpf
+    libc.src.math.ufromfpl
+    libc.src.math.ufromfpx
+    libc.src.math.ufromfpxf
+    libc.src.math.ufromfpxl
+)
+
+if(LIBC_TYPES_HAS_CFLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float16 entrypoints
+    libc.src.complex.crealf16
+    libc.src.complex.cimagf16
+    libc.src.complex.conjf16
+    libc.src.complex.cprojf16
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT16)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float16 entrypoints
+    libc.src.math.acosf16
+    libc.src.math.acoshf16
+    libc.src.math.acospif16
+    libc.src.math.asinf16
+    libc.src.math.asinhf16
+    libc.src.math.asinpif16
+    libc.src.math.atanf16
+    libc.src.math.atanhf16
+    libc.src.math.atanpif16
+    libc.src.math.canonicalizef16
+    libc.src.math.ceilf16
+    libc.src.math.copysignf16
+    libc.src.math.cosf16
+    libc.src.math.coshf16
+    libc.src.math.cospif16
+    libc.src.math.exp10f16
+    libc.src.math.exp10m1f16
+    libc.src.math.exp2f16
+    libc.src.math.exp2m1f16
+    libc.src.math.expf16
+    libc.src.math.expm1f16
+    libc.src.math.f16add
+    libc.src.math.f16addf
+    libc.src.math.f16addl
+    libc.src.math.f16div
+    libc.src.math.f16divf
+    libc.src.math.f16divl
+    libc.src.math.f16fma
+    libc.src.math.f16fmaf
+    libc.src.math.f16fmal
+    libc.src.math.f16mul
+    libc.src.math.f16mulf
+    libc.src.math.f16mull
+    libc.src.math.f16sqrt
+    libc.src.math.f16sqrtf
+    libc.src.math.f16sqrtl
+    libc.src.math.f16sub
+    libc.src.math.f16subf
+    libc.src.math.f16subl
+    libc.src.math.fabsf16
+    libc.src.math.fdimf16
+    libc.src.math.floorf16
+    libc.src.math.fmaf16
+    libc.src.math.fmaxf16
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.math.fmaximum_magf16
+    libc.src.math.fmaximum_numf16
+    libc.src.math.fmaximumf16
+    libc.src.math.fminf16
+    libc.src.math.fminimum_mag_numf16
+    libc.src.math.fminimum_magf16
+    libc.src.math.fminimum_numf16
+    libc.src.math.fminimumf16
+    libc.src.math.fmodf16
+    libc.src.math.frexpf16
+    libc.src.math.fromfpf16
+    libc.src.math.fromfpxf16
+    libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
+    libc.src.math.ilogbf16
+    libc.src.math.iscanonicalf16
+    libc.src.math.issignalingf16
+    libc.src.math.ldexpf16
+    libc.src.math.llogbf16
+    libc.src.math.llrintf16
+    libc.src.math.llroundf16
+    libc.src.math.log10f16
+    libc.src.math.log2f16
+    libc.src.math.logbf16
+    libc.src.math.logf16
+    libc.src.math.lrintf16
+    libc.src.math.lroundf16
+    libc.src.math.modff16
+    libc.src.math.nanf16
+    libc.src.math.nearbyintf16
+    libc.src.math.nextafterf16
+    libc.src.math.nextdownf16
+    libc.src.math.nexttowardf16
+    libc.src.math.nextupf16
+    libc.src.math.remainderf16
+    libc.src.math.remquof16
+    libc.src.math.rintf16
+    libc.src.math.roundevenf16
+    libc.src.math.roundf16
+    libc.src.math.rsqrtf
+    libc.src.math.rsqrtf16
+    libc.src.math.scalblnf16
+    libc.src.math.scalbnf16
+    libc.src.math.setpayloadf16
+    libc.src.math.setpayloadsigf16
+    libc.src.math.sinf16
+    libc.src.math.sinhf16
+    libc.src.math.sinpif16
+    libc.src.math.sqrtf16
+    libc.src.math.tanf16
+    libc.src.math.tanhf16
+    libc.src.math.tanpif16
+    libc.src.math.totalorderf16
+    libc.src.math.totalordermagf16
+    libc.src.math.truncf16
+    libc.src.math.ufromfpf16
+    libc.src.math.ufromfpxf16
+  )
+
+  if(LIBC_TYPES_HAS_FLOAT128)
+    list(APPEND TARGET_LIBM_ENTRYPOINTS
+      # math.h C23 mixed _Float16 and _Float128 entrypoints
+      libc.src.math.f16addf128
+      libc.src.math.f16divf128
+      libc.src.math.f16fmaf128
+      libc.src.math.f16mulf128
+      libc.src.math.f16sqrtf128
+      libc.src.math.f16subf128
+    )
+  endif()
+endif()
+
+if(LIBC_TYPES_HAS_CFLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # complex.h C23 _Complex _Float128 entrypoints
+    libc.src.complex.crealf128
+    libc.src.complex.cimagf128
+    libc.src.complex.conjf128
+    libc.src.complex.cprojf128
+  )
+endif()
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C23 _Float128 entrypoints
+    libc.src.math.atan2f128
+    libc.src.math.canonicalizef128
+    libc.src.math.ceilf128
+    libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
+    libc.src.math.dmulf128
+    libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
+    libc.src.math.fabsf128
+    libc.src.math.faddf128
+    libc.src.math.fdimf128
+    libc.src.math.fdivf128
+    libc.src.math.ffmaf128
+    libc.src.math.floorf128
+    libc.src.math.fmaxf128
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.math.fmaximum_magf128
+    libc.src.math.fmaximum_numf128
+    libc.src.math.fmaximumf128
+    libc.src.math.fminf128
+    libc.src.math.fminimum_mag_numf128
+    libc.src.math.fminimum_magf128
+    libc.src.math.fminimum_numf128
+    libc.src.math.fminimumf128
+    libc.src.math.fmodf128
+    libc.src.math.fmulf128
+    libc.src.math.frexpf128
+    libc.src.math.fromfpf128
+    libc.src.math.fromfpxf128
+    libc.src.math.fsqrtf128
+    libc.src.math.fsubf128
+    libc.src.math.getpayloadf128
+    libc.src.math.ilogbf128
+    libc.src.math.iscanonicalf128
+    libc.src.math.issignalingf128
+    libc.src.math.ldexpf128
+    libc.src.math.llogbf128
+    libc.src.math.llrintf128
+    libc.src.math.llroundf128
+    libc.src.math.logbf128
+    libc.src.math.lrintf128
+    libc.src.math.lroundf128
+    libc.src.math.modff128
+    libc.src.math.nanf128
+    libc.src.math.nearbyintf128
+    libc.src.math.nextafterf128
+    libc.src.math.nextdownf128
+    libc.src.math.nextupf128
+    libc.src.math.remainderf128
+    libc.src.math.remquof128
+    libc.src.math.rintf128
+    libc.src.math.roundevenf128
+    libc.src.math.roundf128
+    libc.src.math.scalblnf128
+    libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
+    libc.src.math.setpayloadsigf128
+    libc.src.math.sqrtf128
+    libc.src.math.totalorderf128
+    libc.src.math.totalordermagf128
+    libc.src.math.truncf128
+    libc.src.math.ufromfpf128
+    libc.src.math.ufromfpxf128
+  )
+endif()
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+if(LIBC_TYPES_HAS_FLOAT128)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
+    libc.src.math.bf16addf128
+    libc.src.math.bf16divf128
+    libc.src.math.bf16fmaf128
+    libc.src.math.bf16mulf128
+    libc.src.math.bf16subf128
+  )
+endif()
+
+if(LIBC_COMPILER_HAS_FIXED_POINT)
+  list(APPEND TARGET_LIBM_ENTRYPOINTS
+    # stdfix.h _Fract and _Accum entrypoints
+    libc.src.stdfix.abshk
+    libc.src.stdfix.abshr
+    libc.src.stdfix.absk
+    libc.src.stdfix.abslk
+    libc.src.stdfix.abslr
+    libc.src.stdfix.absr
+    libc.src.stdfix.exphk
+    libc.src.stdfix.expk
+    libc.src.stdfix.roundhk
+    libc.src.stdfix.roundhr
+    libc.src.stdfix.roundk
+    libc.src.stdfix.roundlk
+    libc.src.stdfix.roundlr
+    libc.src.stdfix.roundr
+    libc.src.stdfix.rounduhk
+    libc.src.stdfix.rounduhr
+    libc.src.stdfix.rounduk
+    libc.src.stdfix.roundulk
+    libc.src.stdfix.roundulr
+    libc.src.stdfix.roundur
+    libc.src.stdfix.sqrtuhk
+    libc.src.stdfix.sqrtuhr
+    libc.src.stdfix.sqrtuk
+    libc.src.stdfix.sqrtur
+    # libc.src.stdfix.sqrtulk
+    libc.src.stdfix.sqrtulr
+    libc.src.stdfix.uhksqrtus
+    libc.src.stdfix.uksqrtui
+    libc.src.stdfix.hrbits
+    libc.src.stdfix.uhrbits
+    libc.src.stdfix.rbits
+    libc.src.stdfix.urbits
+    libc.src.stdfix.lrbits
+    libc.src.stdfix.ulrbits
+    libc.src.stdfix.hkbits
+    libc.src.stdfix.uhkbits
+    libc.src.stdfix.kbits
+    libc.src.stdfix.ukbits
+    libc.src.stdfix.lkbits
+    libc.src.stdfix.ulkbits
+    libc.src.stdfix.bitshr
+    libc.src.stdfix.bitsr
+    libc.src.stdfix.bitslr
+    libc.src.stdfix.bitshk
+    libc.src.stdfix.bitsk
+    libc.src.stdfix.bitslk
+    libc.src.stdfix.bitsuhr
+    libc.src.stdfix.bitsur
+    libc.src.stdfix.bitsulr
+    libc.src.stdfix.bitsuhk
+    libc.src.stdfix.bitsuk
+    libc.src.stdfix.bitsulk
+    libc.src.stdfix.countlshr
+    libc.src.stdfix.countlsr
+    libc.src.stdfix.countlslr
+    libc.src.stdfix.countlshk
+    libc.src.stdfix.countlsk
+    libc.src.stdfix.countlslk
+    libc.src.stdfix.countlsuhr
+    libc.src.stdfix.countlsur
+    libc.src.stdfix.countlsulr
+    libc.src.stdfix.countlsuhk
+    libc.src.stdfix.countlsuk
+    libc.src.stdfix.countlsulk
+    libc.src.stdfix.idivr
+    libc.src.stdfix.idivlr
+    libc.src.stdfix.idivk
+    libc.src.stdfix.idivlk
+    libc.src.stdfix.idivur
+    libc.src.stdfix.idivulr
+    libc.src.stdfix.idivuk
+    libc.src.stdfix.idivulk
+    libc.src.stdfix.rdivi
+  )
+endif()
+
+if(LLVM_LIBC_FULL_BUILD)
+  list(APPEND TARGET_LIBC_ENTRYPOINTS
+    # ctype.h entrypoints
+    libc.src.ctype.isalnum_l
+    libc.src.ctype.isalpha_l
+    libc.src.ctype.isblank_l
+    libc.src.ctype.iscntrl_l
+    libc.src.ctype.isdigit_l
+    libc.src.ctype.isgraph_l
+    libc.src.ctype.islower_l
+    libc.src.ctype.isprint_l
+    libc.src.ctype.ispunct_l
+    libc.src.ctype.isspace_l
+    libc.src.ctype.isupper_l
+    libc.src.ctype.isxdigit_l
+    libc.src.ctype.tolower_l
+    libc.src.ctype.toupper_l
+
+    # stdlib.h entrypoints
+    libc.src.stdlib.strtod_l
+    libc.src.stdlib.strtof_l
+    libc.src.stdlib.strtol_l
+    libc.src.stdlib.strtold_l
+    libc.src.stdlib.strtoll_l
+    libc.src.stdlib.strtoul_l
+    libc.src.stdlib.strtoull_l
+
+    # string.h entrypoints
+    libc.src.string.strcoll_l
+    libc.src.string.strxfrm_l
+
+    # strings.h entrypoints
+    libc.src.strings.strcasecmp_l
+    libc.src.strings.strncasecmp_l
+
+    # assert.h entrypoints
+    libc.src.assert.__assert_fail
+
+    # compiler entrypoints (no corresponding header)
+    libc.src.compiler.__stack_chk_fail
+
+    # dirent.h entrypoints
+    libc.src.dirent.closedir
+    libc.src.dirent.dirfd
+    libc.src.dirent.opendir
+    libc.src.dirent.readdir
+
+    # arpa/inet.h entrypoints
+    libc.src.arpa.inet.htonl
+    libc.src.arpa.inet.htons
+    libc.src.arpa.inet.inet_addr
+    libc.src.arpa.inet.inet_aton
+    libc.src.arpa.inet.ntohl
+    libc.src.arpa.inet.ntohs
+
+    # pthread.h entrypoints
+    libc.src.pthread.pthread_atfork
+    libc.src.pthread.pthread_attr_destroy
+    libc.src.pthread.pthread_attr_getdetachstate
+    libc.src.pthread.pthread_attr_getguardsize
+    libc.src.pthread.pthread_attr_getstack
+    libc.src.pthread.pthread_attr_getstacksize
+    libc.src.pthread.pthread_attr_init
+    libc.src.pthread.pthread_attr_setdetachstate
+    libc.src.pthread.pthread_attr_setguardsize
+    libc.src.pthread.pthread_attr_setstack
+    libc.src.pthread.pthread_attr_setstacksize
+    libc.src.pthread.pthread_condattr_destroy
+    libc.src.pthread.pthread_condattr_getclock
+    libc.src.pthread.pthread_condattr_getpshared
+    libc.src.pthread.pthread_condattr_init
+    libc.src.pthread.pthread_condattr_setclock
+    libc.src.pthread.pthread_condattr_setpshared
+    libc.src.pthread.pthread_create
+    libc.src.pthread.pthread_detach
+    libc.src.pthread.pthread_equal
+    libc.src.pthread.pthread_exit
+    libc.src.pthread.pthread_getname_np
+    libc.src.pthread.pthread_getspecific
+    libc.src.pthread.pthread_join
+    libc.src.pthread.pthread_key_create
+    libc.src.pthread.pthread_key_delete
+    libc.src.pthread.pthread_barrier_init
+    libc.src.pthread.pthread_barrier_wait
+    libc.src.pthread.pthread_barrier_destroy
+    libc.src.pthread.pthread_mutex_destroy
+    libc.src.pthread.pthread_mutex_init
+    libc.src.pthread.pthread_mutex_lock
+    libc.src.pthread.pthread_mutex_unlock
+    libc.src.pthread.pthread_mutexattr_destroy
+    libc.src.pthread.pthread_mutexattr_getpshared
+    libc.src.pthread.pthread_mutexattr_getrobust
+    libc.src.pthread.pthread_mutexattr_gettype
+    libc.src.pthread.pthread_mutexattr_init
+    libc.src.pthread.pthread_mutexattr_setpshared
+    libc.src.pthread.pthread_mutexattr_setrobust
+    libc.src.pthread.pthread_mutexattr_settype
+    libc.src.pthread.pthread_once
+    libc.src.pthread.pthread_rwlock_clockrdlock
+    libc.src.pthread.pthread_rwlock_clockwrlock
+    libc.src.pthread.pthread_rwlock_destroy
+    libc.src.pthread.pthread_rwlock_init
+    libc.src.pthread.pthread_rwlock_rdlock
+    libc.src.pthread.pthread_rwlock_timedrdlock
+    libc.src.pthread.pthread_rwlock_timedwrlock
+    libc.src.pthread.pthread_rwlock_tryrdlock
+    libc.src.pthread.pthread_rwlock_trywrlock
+    libc.src.pthread.pthread_rwlock_unlock
+    libc.src.pthread.pthread_rwlock_wrlock
+    libc.src.pthread.pthread_rwlockattr_destroy
+    libc.src.pthread.pthread_rwlockattr_getkind_np
+    libc.src.pthread.pthread_rwlockattr_getpshared
+    libc.src.pthread.pthread_rwlockattr_init
+    libc.src.pthread.pthread_rwlockattr_setkind_np
+    libc.src.pthread.pthread_rwlockattr_setpshared
+    libc.src.pthread.pthread_spin_destroy
+    libc.src.pthread.pthread_spin_init
+    libc.src.pthread.pthread_spin_lock
+    libc.src.pthread.pthread_spin_trylock
+    libc.src.pthread.pthread_spin_unlock
+    libc.src.pthread.pthread_self
+    libc.src.pthread.pthread_setname_np
+    libc.src.pthread.pthread_setspecific
+
+    # sched.h entrypoints
+    libc.src.sched.__sched_getcpucount
+    libc.src.sched.__sched_setcpuzero
+    libc.src.sched.__sched_setcpuset
+    libc.src.sched.__sched_getcpuisset
+
+    # setjmp.h entrypoints
+    libc.src.setjmp.longjmp
+    libc.src.setjmp.setjmp
+    libc.src.setjmp.siglongjmp
+    libc.src.setjmp.sigsetjmp
+
+    # stdio.h entrypoints
+    libc.src.stdio.clearerr
+    libc.src.stdio.clearerr_unlocked
+    libc.src.stdio.fclose
+    libc.src.stdio.fdopen
+    libc.src.stdio.feof
+    libc.src.stdio.feof_unlocked
+    libc.src.stdio.ferror
+    libc.src.stdio.ferror_unlocked
+    libc.src.stdio.fflush
+    libc.src.stdio.fgetc
+    libc.src.stdio.fgetc_unlocked
+    libc.src.stdio.fgets
+    libc.src.stdio.fileno
+    libc.src.stdio.flockfile
+    libc.src.stdio.fopen
+    libc.src.stdio.fopencookie
+    libc.src.stdio.fputc
+    libc.src.stdio.fputs
+    libc.src.stdio.fread
+    libc.src.stdio.fread_unlocked
+    libc.src.stdio.fseek
+    libc.src.stdio.fseeko
+    libc.src.stdio.ftell
+    libc.src.stdio.ftello
+    libc.src.stdio.funlockfile
+    libc.src.stdio.fwrite
+    libc.src.stdio.fwrite_unlocked
+    libc.src.stdio.getc
+    libc.src.stdio.getc_unlocked
+    libc.src.stdio.getchar
+    libc.src.stdio.getchar_unlocked
+    libc.src.stdio.perror
+    libc.src.stdio.putc
+    libc.src.stdio.putchar
+    libc.src.stdio.puts
+    libc.src.stdio.setbuf
+    libc.src.stdio.setvbuf
+    libc.src.stdio.stderr
+    libc.src.stdio.stdin
+    libc.src.stdio.stdout
+    libc.src.stdio.ungetc
+
+    # stdlib.h entrypoints
+    libc.src.stdlib._Exit
+    libc.src.stdlib.abort
+    libc.src.stdlib.at_quick_exit
+    libc.src.stdlib.atexit
+    libc.src.stdlib.exit
+    libc.src.stdlib.getenv
+    libc.src.stdlib.mbstowcs
+    libc.src.stdlib.mbtowc
+    libc.src.stdlib.quick_exit
+    libc.src.stdlib.wcstombs
+    libc.src.stdlib.wctomb
+
+    # signal.h entrypoints
+    libc.src.signal.kill
+    libc.src.signal.raise
+    libc.src.signal.sigaction
+    libc.src.signal.sigaddset
+    libc.src.signal.sigaltstack
+    libc.src.signal.sigdelset
+    libc.src.signal.sigemptyset
+    libc.src.signal.sigfillset
+    libc.src.signal.signal
+    libc.src.signal.sigprocmask
+
+    # spawn.h entrypoints
+    libc.src.spawn.posix_spawn
+    libc.src.spawn.posix_spawn_file_actions_addclose
+    libc.src.spawn.posix_spawn_file_actions_adddup2
+    libc.src.spawn.posix_spawn_file_actions_addopen
+    libc.src.spawn.posix_spawn_file_actions_destroy
+    libc.src.spawn.posix_spawn_file_actions_init
+
+    # search.h entrypoints
+    libc.src.search.hcreate
+    libc.src.search.hcreate_r
+    libc.src.search.hdestroy
+    libc.src.search.hdestroy_r
+    libc.src.search.hsearch
+    libc.src.search.hsearch_r
+    libc.src.search.insque
+    libc.src.search.lfind
+    libc.src.search.lsearch
+    libc.src.search.remque
+
+    # threads.h entrypoints
+    libc.src.threads.call_once
+    libc.src.threads.cnd_broadcast
+    libc.src.threads.cnd_destroy
+    libc.src.threads.cnd_init
+    libc.src.threads.cnd_signal
+    libc.src.threads.cnd_wait
+    libc.src.threads.mtx_destroy
+    libc.src.threads.mtx_init
+    libc.src.threads.mtx_lock
+    libc.src.threads.mtx_unlock
+    libc.src.threads.thrd_create
+    libc.src.threads.thrd_current
+    libc.src.threads.thrd_detach
+    libc.src.threads.thrd_equal
+    libc.src.threads.thrd_exit
+    libc.src.threads.thrd_join
+    libc.src.threads.tss_create
+    libc.src.threads.tss_delete
+    libc.src.threads.tss_get
+    libc.src.threads.tss_set
+
+    # time.h entrypoints
+    libc.src.time.asctime
+    libc.src.time.asctime_r
+    libc.src.time.ctime
+    libc.src.time.ctime_r
+    libc.src.time.clock
+    libc.src.time.clock_gettime
+    libc.src.time.clock_settime
+    libc.src.time.difftime
+    libc.src.time.gettimeofday
+    libc.src.time.gmtime
+    libc.src.time.gmtime_r
+    libc.src.time.localtime
+    libc.src.time.localtime_r
+    libc.src.time.mktime
+    libc.src.time.nanosleep
+    libc.src.time.strftime
+    libc.src.time.strftime_l
+    libc.src.time.time
+    libc.src.time.timespec_get
+
+    # locale.h entrypoints
+    libc.src.locale.localeconv
+    libc.src.locale.duplocale
+    libc.src.locale.freelocale
+    libc.src.locale.localeconv
+    libc.src.locale.newlocale
+    libc.src.locale.setlocale
+    libc.src.locale.uselocale
+
+    # unistd.h entrypoints
+    libc.src.unistd.__llvm_libc_syscall
+    libc.src.unistd._exit
+    libc.src.unistd.environ
+    libc.src.unistd.execv
+    libc.src.unistd.fork
+    libc.src.unistd.getopt
+    libc.src.unistd.optarg
+    libc.src.unistd.opterr
+    libc.src.unistd.optind
+    libc.src.unistd.optopt
+    libc.src.unistd.swab
+
+    # sys/select.h entrypoints
+    libc.src.sys.select.select
+
+    # sys/socket.h entrypoints
+    libc.src.sys.socket.socket
+    libc.src.sys.socket.bind
+    libc.src.sys.socket.socketpair
+    libc.src.sys.socket.send
+    libc.src.sys.socket.sendto
+    libc.src.sys.socket.sendmsg
+    libc.src.sys.socket.recv
+    libc.src.sys.socket.recvfrom
+    libc.src.sys.socket.recvmsg
+
+    # wchar.h entrypoints
+    libc.src.wchar.mblen
+    libc.src.wchar.mbrlen
+    libc.src.wchar.mbsinit
+    libc.src.wchar.mbrtowc
+    libc.src.wchar.mbsrtowcs
+    libc.src.wchar.mbsnrtowcs
+    libc.src.wchar.wcrtomb
+    libc.src.wchar.wcsrtombs
+    libc.src.wchar.wcsnrtombs
+
+    # nl_types.h entrypoints
+    libc.src.nl_types.catopen 
+    libc.src.nl_types.catclose
+    libc.src.nl_types.catgets
+  )
+endif()
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index f777fc6c94bc2..7f5913a1cce3c 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -384,3 +384,388 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBM_ENTRYPOINTS}
 )
 
+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.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strcasestr
+    libc.src.string.strcat
+    libc.src.string.strchr
+    libc.src.string.strchrnul
+    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
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bcopy
+    libc.src.strings.bzero
+    libc.src.strings.strcasecmp
+    libc.src.strings.strncasecmp
+
+    # 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.memalignment
+    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
+
+    # errno.h entrypoints
+    libc.src.errno.errno
+
+    # time.h entrypoints
+    libc.src.time.time
+    libc.src.time.clock_getres
+
+    # unistd.h entrypoints
+    libc.src.unistd.getentropy
+
+    # wctype.h entrypoints
+    libc.src.wctype.iswalpha
+)
+
+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.fesetexcept
+    libc.src.fenv.fesetexceptflag
+    libc.src.fenv.fesetround
+    libc.src.fenv.feraiseexcept
+    libc.src.fenv.fetestexcept
+    libc.src.fenv.fetestexceptflag
+    libc.src.fenv.feupdateenv
+
+    # math.h entrypoints
+    libc.src.math.acos
+    libc.src.math.acosf
+    libc.src.math.acoshf
+    libc.src.math.asin
+    libc.src.math.asinf
+    libc.src.math.asinhf
+    libc.src.math.atan2
+    libc.src.math.atan2f
+    libc.src.math.atan
+    libc.src.math.atanf
+    libc.src.math.atanhf
+    libc.src.math.cbrt
+    libc.src.math.cbrtf
+    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.daddl
+    libc.src.math.ddivl
+    libc.src.math.dfmal
+    libc.src.math.dsubl
+    libc.src.math.erff
+    libc.src.math.exp
+    libc.src.math.expf
+    libc.src.math.exp10
+    libc.src.math.exp10f
+    libc.src.math.exp2
+    libc.src.math.exp2f
+    libc.src.math.expm1
+    libc.src.math.expm1f
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.math.fabsl
+    libc.src.math.fadd
+    libc.src.math.faddl
+    libc.src.math.fdim
+    libc.src.math.fdimf
+    libc.src.math.fdiml
+    libc.src.math.fdiv
+    libc.src.math.fdivl
+    libc.src.math.ffma
+    libc.src.math.ffmal
+    libc.src.math.floor
+    libc.src.math.floorf
+    libc.src.math.floorl
+    libc.src.math.fma
+    libc.src.math.fmabf16
+    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.fmaximum
+    libc.src.math.fmaximumf
+    libc.src.math.fmaximuml
+    libc.src.math.fmaximum_num
+    libc.src.math.fmaximum_numf
+    libc.src.math.fmaximum_numl
+    libc.src.math.fmaximum_mag
+    libc.src.math.fmaximum_magf
+    libc.src.math.fmaximum_magl
+    libc.src.math.fmaximum_mag_num
+    libc.src.math.fmaximum_mag_numf
+    libc.src.math.fmaximum_mag_numl
+    libc.src.math.fminimum
+    libc.src.math.fminimumf
+    libc.src.math.fminimuml
+    libc.src.math.fminimum_num
+    libc.src.math.fminimum_numf
+    libc.src.math.fminimum_numl
+    libc.src.math.fminimum_mag
+    libc.src.math.fminimum_magf
+    libc.src.math.fminimum_magl
+    libc.src.math.fminimum_mag_num
+    libc.src.math.fminimum_mag_numf
+    libc.src.math.fminimum_mag_numl
+    libc.src.math.fmul
+    libc.src.math.fmod
+    libc.src.math.fmodf
+    libc.src.math.fmodl
+    libc.src.math.frexp
+    libc.src.math.frexpf
+    libc.src.math.frexpl
+    libc.src.math.fsub
+    libc.src.math.fsubl
+    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.log1p
+    libc.src.math.log1pf
+    libc.src.math.log2
+    libc.src.math.log2f
+    libc.src.math.log
+    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.nan
+    libc.src.math.nanf
+    libc.src.math.nanl
+    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.nexttoward
+    libc.src.math.nexttowardf
+    libc.src.math.nexttowardl
+    libc.src.math.pow
+    libc.src.math.powf
+    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.scalbln
+    libc.src.math.scalblnf
+    libc.src.math.scalblnl
+    libc.src.math.scalbn
+    libc.src.math.scalbnf
+    libc.src.math.scalbnl
+    libc.src.math.sin
+    libc.src.math.sincosf
+    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.tanpif
+    libc.src.math.trunc
+    libc.src.math.truncf
+    libc.src.math.truncl
+)
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
+
diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index e617950368994..21620d9cf89da 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -645,3 +645,649 @@ add_math_entrypoint_object(bf16sub)
 add_math_entrypoint_object(bf16subf)
 add_math_entrypoint_object(bf16subl)
 add_math_entrypoint_object(bf16subf128)
+add_subdirectory(generic)
+if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_ARCHITECTURE})
+  add_subdirectory(${LIBC_TARGET_ARCHITECTURE})
+endif()
+
+function(add_math_entrypoint_object name)
+  # We prefer machine specific implementation if available. Hence we check
+  # that first and return early if we are able to add an alias target for the
+  # machine specific implementation.
+  get_fq_target_name("${LIBC_TARGET_ARCHITECTURE}.${name}" fq_machine_specific_target_name)
+  if(TARGET ${fq_machine_specific_target_name})
+    add_entrypoint_object(
+      ${name}
+      ALIAS
+      DEPENDS
+        .${LIBC_TARGET_ARCHITECTURE}.${name}
+    )
+    return()
+  endif()
+
+  get_fq_target_name("generic.${name}" fq_generic_target_name)
+  if(TARGET ${fq_generic_target_name})
+    add_entrypoint_object(
+      ${name}
+      ALIAS
+      DEPENDS
+        .generic.${name}
+    )
+    return()
+  endif()
+
+  # Add a dummy entrypoint object for missing implementations. They will be skipped
+  # anyway as there will be no entry for them in the target entrypoints list.
+  add_entrypoint_object(
+    ${name}
+    SRCS
+      dummy_srcs
+    HDRS
+      dummy_hdrs
+  )
+endfunction()
+
+add_math_entrypoint_object(acos)
+add_math_entrypoint_object(acosf)
+add_math_entrypoint_object(acosf16)
+
+add_math_entrypoint_object(acosh)
+add_math_entrypoint_object(acoshf)
+add_math_entrypoint_object(acoshf16)
+
+add_math_entrypoint_object(acospif16)
+ 
+add_math_entrypoint_object(asin)
+add_math_entrypoint_object(asinf)
+add_math_entrypoint_object(asinf16)
+
+add_math_entrypoint_object(asinh)
+add_math_entrypoint_object(asinhf)
+add_math_entrypoint_object(asinhf16)
+
+add_math_entrypoint_object(asinpif16)
+
+add_math_entrypoint_object(atan)
+add_math_entrypoint_object(atanf)
+add_math_entrypoint_object(atanf16)
+
+add_math_entrypoint_object(atan2)
+add_math_entrypoint_object(atan2f)
+add_math_entrypoint_object(atan2l)
+add_math_entrypoint_object(atan2f128)
+
+add_math_entrypoint_object(atanh)
+add_math_entrypoint_object(atanhf)
+add_math_entrypoint_object(atanhf16)
+
+add_math_entrypoint_object(atanpif16)
+
+add_math_entrypoint_object(canonicalize)
+add_math_entrypoint_object(canonicalizef)
+add_math_entrypoint_object(canonicalizel)
+add_math_entrypoint_object(canonicalizef16)
+add_math_entrypoint_object(canonicalizef128)
+add_math_entrypoint_object(canonicalizebf16)
+
+add_math_entrypoint_object(iscanonical)
+add_math_entrypoint_object(iscanonicalf)
+add_math_entrypoint_object(iscanonicall)
+add_math_entrypoint_object(iscanonicalf16)
+add_math_entrypoint_object(iscanonicalf128)
+add_math_entrypoint_object(iscanonicalbf16)
+
+add_math_entrypoint_object(cbrt)
+add_math_entrypoint_object(cbrtf)
+
+add_math_entrypoint_object(ceil)
+add_math_entrypoint_object(ceilf)
+add_math_entrypoint_object(ceill)
+add_math_entrypoint_object(ceilf16)
+add_math_entrypoint_object(ceilf128)
+add_math_entrypoint_object(ceilbf16)
+
+add_math_entrypoint_object(copysign)
+add_math_entrypoint_object(copysignf)
+add_math_entrypoint_object(copysignl)
+add_math_entrypoint_object(copysignf16)
+add_math_entrypoint_object(copysignf128)
+add_math_entrypoint_object(copysignbf16)
+
+add_math_entrypoint_object(cos)
+add_math_entrypoint_object(cosf)
+add_math_entrypoint_object(cosf16)
+
+add_math_entrypoint_object(cosh)
+add_math_entrypoint_object(coshf)
+add_math_entrypoint_object(coshf16)
+
+add_math_entrypoint_object(cospif)
+add_math_entrypoint_object(cospif16)
+
+add_math_entrypoint_object(daddl)
+add_math_entrypoint_object(daddf128)
+add_math_entrypoint_object(ddivl)
+add_math_entrypoint_object(ddivf128)
+add_math_entrypoint_object(dmull)
+add_math_entrypoint_object(dmulf128)
+
+add_math_entrypoint_object(dfmal)
+add_math_entrypoint_object(dfmaf128)
+
+add_math_entrypoint_object(dsqrtl)
+add_math_entrypoint_object(dsqrtf128)
+
+add_math_entrypoint_object(dsubl)
+add_math_entrypoint_object(dsubf128)
+
+add_math_entrypoint_object(erf)
+add_math_entrypoint_object(erff)
+
+add_math_entrypoint_object(exp)
+add_math_entrypoint_object(expf)
+add_math_entrypoint_object(expf16)
+
+add_math_entrypoint_object(exp2)
+add_math_entrypoint_object(exp2f)
+add_math_entrypoint_object(exp2f16)
+
+add_math_entrypoint_object(exp2m1f)
+add_math_entrypoint_object(exp2m1f16)
+
+add_math_entrypoint_object(exp10)
+add_math_entrypoint_object(exp10f)
+add_math_entrypoint_object(exp10f16)
+
+add_math_entrypoint_object(exp10m1f)
+add_math_entrypoint_object(exp10m1f16)
+
+add_math_entrypoint_object(expm1)
+add_math_entrypoint_object(expm1f)
+add_math_entrypoint_object(expm1f16)
+
+add_math_entrypoint_object(f16add)
+add_math_entrypoint_object(f16addf)
+add_math_entrypoint_object(f16addl)
+add_math_entrypoint_object(f16addf128)
+
+add_math_entrypoint_object(f16div)
+add_math_entrypoint_object(f16divf)
+add_math_entrypoint_object(f16divl)
+add_math_entrypoint_object(f16divf128)
+
+add_math_entrypoint_object(f16fma)
+add_math_entrypoint_object(f16fmaf)
+add_math_entrypoint_object(f16fmal)
+add_math_entrypoint_object(f16fmaf128)
+
+add_math_entrypoint_object(f16mul)
+add_math_entrypoint_object(f16mulf)
+add_math_entrypoint_object(f16mull)
+add_math_entrypoint_object(f16mulf128)
+
+add_math_entrypoint_object(f16sqrt)
+add_math_entrypoint_object(f16sqrtf)
+add_math_entrypoint_object(f16sqrtl)
+add_math_entrypoint_object(f16sqrtf128)
+
+add_math_entrypoint_object(fsqrt)
+add_math_entrypoint_object(fsqrtl)
+add_math_entrypoint_object(fsqrtf128)
+
+add_math_entrypoint_object(f16sub)
+add_math_entrypoint_object(f16subf)
+add_math_entrypoint_object(f16subl)
+add_math_entrypoint_object(f16subf128)
+
+add_math_entrypoint_object(fabs)
+add_math_entrypoint_object(fabsf)
+add_math_entrypoint_object(fabsl)
+add_math_entrypoint_object(fabsf16)
+add_math_entrypoint_object(fabsf128)
+add_math_entrypoint_object(fabsbf16)
+
+add_math_entrypoint_object(fadd)
+add_math_entrypoint_object(faddl)
+add_math_entrypoint_object(faddf128)
+
+add_math_entrypoint_object(fdim)
+add_math_entrypoint_object(fdimf)
+add_math_entrypoint_object(fdiml)
+add_math_entrypoint_object(fdimf16)
+add_math_entrypoint_object(fdimf128)
+add_math_entrypoint_object(fdimbf16)
+
+add_math_entrypoint_object(fdiv)
+add_math_entrypoint_object(fdivl)
+add_math_entrypoint_object(fdivf128)
+
+add_math_entrypoint_object(ffma)
+add_math_entrypoint_object(ffmal)
+add_math_entrypoint_object(ffmaf128)
+
+add_math_entrypoint_object(floor)
+add_math_entrypoint_object(floorf)
+add_math_entrypoint_object(floorl)
+add_math_entrypoint_object(floorf16)
+add_math_entrypoint_object(floorf128)
+add_math_entrypoint_object(floorbf16)
+
+add_math_entrypoint_object(fma)
+add_math_entrypoint_object(fmaf)
+add_math_entrypoint_object(fmaf16)
+add_math_entrypoint_object(fmabf16)
+
+add_math_entrypoint_object(fmax)
+add_math_entrypoint_object(fmaxf)
+add_math_entrypoint_object(fmaxl)
+add_math_entrypoint_object(fmaxf128)
+add_math_entrypoint_object(fmaxf16)
+add_math_entrypoint_object(fmaxbf16)
+
+add_math_entrypoint_object(fmin)
+add_math_entrypoint_object(fminf)
+add_math_entrypoint_object(fminl)
+add_math_entrypoint_object(fminf128)
+add_math_entrypoint_object(fminf16)
+add_math_entrypoint_object(fminbf16)
+
+add_math_entrypoint_object(fmaximum)
+add_math_entrypoint_object(fmaximumf)
+add_math_entrypoint_object(fmaximuml)
+add_math_entrypoint_object(fmaximumf16)
+add_math_entrypoint_object(fmaximumf128)
+add_math_entrypoint_object(fmaximumbf16)
+
+add_math_entrypoint_object(fmaximum_num)
+add_math_entrypoint_object(fmaximum_numf)
+add_math_entrypoint_object(fmaximum_numl)
+add_math_entrypoint_object(fmaximum_numf16)
+add_math_entrypoint_object(fmaximum_numf128)
+add_math_entrypoint_object(fmaximum_numbf16)
+
+add_math_entrypoint_object(fmaximum_mag)
+add_math_entrypoint_object(fmaximum_magf)
+add_math_entrypoint_object(fmaximum_magl)
+add_math_entrypoint_object(fmaximum_magf16)
+add_math_entrypoint_object(fmaximum_magf128)
+add_math_entrypoint_object(fmaximum_magbf16)
+
+add_math_entrypoint_object(fmaximum_mag_num)
+add_math_entrypoint_object(fmaximum_mag_numf)
+add_math_entrypoint_object(fmaximum_mag_numl)
+add_math_entrypoint_object(fmaximum_mag_numf16)
+add_math_entrypoint_object(fmaximum_mag_numf128)
+add_math_entrypoint_object(fmaximum_mag_numbf16)
+
+add_math_entrypoint_object(fminimum)
+add_math_entrypoint_object(fminimumf)
+add_math_entrypoint_object(fminimuml)
+add_math_entrypoint_object(fminimumf16)
+add_math_entrypoint_object(fminimumf128)
+add_math_entrypoint_object(fminimumbf16)
+
+add_math_entrypoint_object(fminimum_num)
+add_math_entrypoint_object(fminimum_numf)
+add_math_entrypoint_object(fminimum_numl)
+add_math_entrypoint_object(fminimum_numf16)
+add_math_entrypoint_object(fminimum_numf128)
+add_math_entrypoint_object(fminimum_numbf16)
+
+add_math_entrypoint_object(fminimum_mag)
+add_math_entrypoint_object(fminimum_magf)
+add_math_entrypoint_object(fminimum_magl)
+add_math_entrypoint_object(fminimum_magf16)
+add_math_entrypoint_object(fminimum_magf128)
+add_math_entrypoint_object(fminimum_magbf16)
+
+add_math_entrypoint_object(fminimum_mag_num)
+add_math_entrypoint_object(fminimum_mag_numf)
+add_math_entrypoint_object(fminimum_mag_numl)
+add_math_entrypoint_object(fminimum_mag_numf16)
+add_math_entrypoint_object(fminimum_mag_numf128)
+add_math_entrypoint_object(fminimum_mag_numbf16)
+
+add_math_entrypoint_object(fmul)
+add_math_entrypoint_object(fmull)
+add_math_entrypoint_object(fmulf128)
+
+add_math_entrypoint_object(fmod)
+add_math_entrypoint_object(fmodf)
+add_math_entrypoint_object(fmodl)
+add_math_entrypoint_object(fmodf16)
+add_math_entrypoint_object(fmodf128)
+add_math_entrypoint_object(fmodbf16)
+
+add_math_entrypoint_object(frexp)
+add_math_entrypoint_object(frexpf)
+add_math_entrypoint_object(frexpl)
+add_math_entrypoint_object(frexpf16)
+add_math_entrypoint_object(frexpf128)
+add_math_entrypoint_object(frexpbf16)
+
+add_math_entrypoint_object(fromfp)
+add_math_entrypoint_object(fromfpf)
+add_math_entrypoint_object(fromfpl)
+add_math_entrypoint_object(fromfpf16)
+add_math_entrypoint_object(fromfpf128)
+add_math_entrypoint_object(fromfpbf16)
+
+add_math_entrypoint_object(fromfpx)
+add_math_entrypoint_object(fromfpxf)
+add_math_entrypoint_object(fromfpxl)
+add_math_entrypoint_object(fromfpxf16)
+add_math_entrypoint_object(fromfpxf128)
+add_math_entrypoint_object(fromfpxbf16)
+
+add_math_entrypoint_object(fsub)
+add_math_entrypoint_object(fsubl)
+add_math_entrypoint_object(fsubf128)
+
+add_math_entrypoint_object(getpayload)
+add_math_entrypoint_object(getpayloadf)
+add_math_entrypoint_object(getpayloadl)
+add_math_entrypoint_object(getpayloadf16)
+add_math_entrypoint_object(getpayloadf128)
+add_math_entrypoint_object(getpayloadbf16)
+
+add_math_entrypoint_object(hypot)
+add_math_entrypoint_object(hypotf)
+add_math_entrypoint_object(hypotf16)
+
+add_math_entrypoint_object(ilogb)
+add_math_entrypoint_object(ilogbf)
+add_math_entrypoint_object(ilogbl)
+add_math_entrypoint_object(ilogbf16)
+add_math_entrypoint_object(ilogbf128)
+add_math_entrypoint_object(ilogbbf16)
+
+add_math_entrypoint_object(isnan)
+add_math_entrypoint_object(isnanf)
+add_math_entrypoint_object(isnanl)
+
+add_math_entrypoint_object(issignaling)
+add_math_entrypoint_object(issignalingf)
+add_math_entrypoint_object(issignalingl)
+add_math_entrypoint_object(issignalingf16)
+add_math_entrypoint_object(issignalingf128)
+add_math_entrypoint_object(issignalingbf16)
+
+add_math_entrypoint_object(llogb)
+add_math_entrypoint_object(llogbf)
+add_math_entrypoint_object(llogbl)
+add_math_entrypoint_object(llogbf16)
+add_math_entrypoint_object(llogbf128)
+add_math_entrypoint_object(llogbbf16)
+
+add_math_entrypoint_object(ldexp)
+add_math_entrypoint_object(ldexpf)
+add_math_entrypoint_object(ldexpl)
+add_math_entrypoint_object(ldexpf16)
+add_math_entrypoint_object(ldexpf128)
+add_math_entrypoint_object(ldexpbf16)
+
+add_math_entrypoint_object(log10)
+add_math_entrypoint_object(log10f)
+add_math_entrypoint_object(log10f16)
+
+add_math_entrypoint_object(log1p)
+add_math_entrypoint_object(log1pf)
+
+add_math_entrypoint_object(log2)
+add_math_entrypoint_object(log2f)
+add_math_entrypoint_object(log2f16)
+
+add_math_entrypoint_object(log)
+add_math_entrypoint_object(logf)
+add_math_entrypoint_object(logf16)
+add_math_entrypoint_object(log_bf16)
+
+add_math_entrypoint_object(logb)
+add_math_entrypoint_object(logbf)
+add_math_entrypoint_object(logbl)
+add_math_entrypoint_object(logbf16)
+add_math_entrypoint_object(logbf128)
+add_math_entrypoint_object(logbbf16)
+
+add_math_entrypoint_object(llrint)
+add_math_entrypoint_object(llrintf)
+add_math_entrypoint_object(llrintl)
+add_math_entrypoint_object(llrintf16)
+add_math_entrypoint_object(llrintf128)
+add_math_entrypoint_object(llrintbf16)
+
+add_math_entrypoint_object(llround)
+add_math_entrypoint_object(llroundf)
+add_math_entrypoint_object(llroundl)
+add_math_entrypoint_object(llroundf16)
+add_math_entrypoint_object(llroundf128)
+add_math_entrypoint_object(llroundbf16)
+
+add_math_entrypoint_object(lrint)
+add_math_entrypoint_object(lrintf)
+add_math_entrypoint_object(lrintl)
+add_math_entrypoint_object(lrintf16)
+add_math_entrypoint_object(lrintf128)
+add_math_entrypoint_object(lrintbf16)
+
+add_math_entrypoint_object(lround)
+add_math_entrypoint_object(lroundf)
+add_math_entrypoint_object(lroundl)
+add_math_entrypoint_object(lroundf16)
+add_math_entrypoint_object(lroundf128)
+add_math_entrypoint_object(lroundbf16)
+
+add_math_entrypoint_object(modf)
+add_math_entrypoint_object(modff)
+add_math_entrypoint_object(modfl)
+add_math_entrypoint_object(modff16)
+add_math_entrypoint_object(modff128)
+add_math_entrypoint_object(modfbf16)
+
+add_math_entrypoint_object(nan)
+add_math_entrypoint_object(nanf)
+add_math_entrypoint_object(nanl)
+add_math_entrypoint_object(nanf16)
+add_math_entrypoint_object(nanf128)
+add_math_entrypoint_object(nanbf16)
+
+add_math_entrypoint_object(nearbyint)
+add_math_entrypoint_object(nearbyintf)
+add_math_entrypoint_object(nearbyintl)
+add_math_entrypoint_object(nearbyintf16)
+add_math_entrypoint_object(nearbyintf128)
+add_math_entrypoint_object(nearbyintbf16)
+
+add_math_entrypoint_object(nextafter)
+add_math_entrypoint_object(nextafterf)
+add_math_entrypoint_object(nextafterl)
+add_math_entrypoint_object(nextafterf16)
+add_math_entrypoint_object(nextafterf128)
+add_math_entrypoint_object(nextafterbf16)
+
+add_math_entrypoint_object(nexttoward)
+add_math_entrypoint_object(nexttowardf)
+add_math_entrypoint_object(nexttowardl)
+add_math_entrypoint_object(nexttowardf16)
+add_math_entrypoint_object(nexttowardbf16)
+
+add_math_entrypoint_object(nextdown)
+add_math_entrypoint_object(nextdownf)
+add_math_entrypoint_object(nextdownl)
+add_math_entrypoint_object(nextdownf16)
+add_math_entrypoint_object(nextdownf128)
+add_math_entrypoint_object(nextdownbf16)
+
+add_math_entrypoint_object(nextup)
+add_math_entrypoint_object(nextupf)
+add_math_entrypoint_object(nextupl)
+add_math_entrypoint_object(nextupf16)
+add_math_entrypoint_object(nextupf128)
+add_math_entrypoint_object(nextupbf16)
+
+add_math_entrypoint_object(pow)
+add_math_entrypoint_object(powf)
+add_math_entrypoint_object(powi)
+add_math_entrypoint_object(powif)
+
+add_math_entrypoint_object(remainder)
+add_math_entrypoint_object(remainderf)
+add_math_entrypoint_object(remainderl)
+add_math_entrypoint_object(remainderf16)
+add_math_entrypoint_object(remainderf128)
+add_math_entrypoint_object(remainderbf16)
+
+add_math_entrypoint_object(remquo)
+add_math_entrypoint_object(remquof)
+add_math_entrypoint_object(remquol)
+add_math_entrypoint_object(remquof16)
+add_math_entrypoint_object(remquof128)
+add_math_entrypoint_object(remquobf16)
+
+add_math_entrypoint_object(rint)
+add_math_entrypoint_object(rintf)
+add_math_entrypoint_object(rintl)
+add_math_entrypoint_object(rintf16)
+add_math_entrypoint_object(rintf128)
+add_math_entrypoint_object(rintbf16)
+
+add_math_entrypoint_object(round)
+add_math_entrypoint_object(roundf)
+add_math_entrypoint_object(roundl)
+add_math_entrypoint_object(roundf16)
+add_math_entrypoint_object(roundf128)
+add_math_entrypoint_object(roundbf16)
+
+add_math_entrypoint_object(roundeven)
+add_math_entrypoint_object(roundevenf)
+add_math_entrypoint_object(roundevenl)
+add_math_entrypoint_object(roundevenf16)
+add_math_entrypoint_object(roundevenf128)
+add_math_entrypoint_object(roundevenbf16)
+
+add_math_entrypoint_object(rsqrtf)
+add_math_entrypoint_object(rsqrtf16)
+
+add_math_entrypoint_object(scalbln)
+add_math_entrypoint_object(scalblnf)
+add_math_entrypoint_object(scalblnl)
+add_math_entrypoint_object(scalblnf16)
+add_math_entrypoint_object(scalblnf128)
+add_math_entrypoint_object(scalblnbf16)
+
+add_math_entrypoint_object(scalbn)
+add_math_entrypoint_object(scalbnf)
+add_math_entrypoint_object(scalbnl)
+add_math_entrypoint_object(scalbnf16)
+add_math_entrypoint_object(scalbnf128)
+add_math_entrypoint_object(scalbnbf16)
+
+add_math_entrypoint_object(setpayload)
+add_math_entrypoint_object(setpayloadf)
+add_math_entrypoint_object(setpayloadl)
+add_math_entrypoint_object(setpayloadf16)
+add_math_entrypoint_object(setpayloadf128)
+add_math_entrypoint_object(setpayloadbf16)
+
+add_math_entrypoint_object(setpayloadsig)
+add_math_entrypoint_object(setpayloadsigf)
+add_math_entrypoint_object(setpayloadsigl)
+add_math_entrypoint_object(setpayloadsigf16)
+add_math_entrypoint_object(setpayloadsigf128)
+add_math_entrypoint_object(setpayloadsigbf16)
+
+add_math_entrypoint_object(sincos)
+add_math_entrypoint_object(sincosf)
+
+add_math_entrypoint_object(sin)
+add_math_entrypoint_object(sinf)
+add_math_entrypoint_object(sinf16)
+add_math_entrypoint_object(sinpif)
+add_math_entrypoint_object(sinpif16)
+
+add_math_entrypoint_object(sinh)
+add_math_entrypoint_object(sinhf)
+add_math_entrypoint_object(sinhf16)
+
+add_math_entrypoint_object(sqrt)
+add_math_entrypoint_object(sqrtf)
+add_math_entrypoint_object(sqrtl)
+add_math_entrypoint_object(sqrtf16)
+add_math_entrypoint_object(sqrtf128)
+add_math_entrypoint_object(sqrtbf16)
+
+add_math_entrypoint_object(tan)
+add_math_entrypoint_object(tanf)
+add_math_entrypoint_object(tanf16)
+
+add_math_entrypoint_object(tanh)
+add_math_entrypoint_object(tanhf)
+add_math_entrypoint_object(tanhf16)
+
+add_math_entrypoint_object(tanpif)
+add_math_entrypoint_object(tanpif16)
+
+add_math_entrypoint_object(tgamma)
+add_math_entrypoint_object(tgammaf)
+add_math_entrypoint_object(lgamma)
+add_math_entrypoint_object(lgamma_r)
+
+add_math_entrypoint_object(totalorder)
+add_math_entrypoint_object(totalorderf)
+add_math_entrypoint_object(totalorderl)
+add_math_entrypoint_object(totalorderf16)
+add_math_entrypoint_object(totalorderf128)
+add_math_entrypoint_object(totalorderbf16)
+
+add_math_entrypoint_object(totalordermag)
+add_math_entrypoint_object(totalordermagf)
+add_math_entrypoint_object(totalordermagl)
+add_math_entrypoint_object(totalordermagf16)
+add_math_entrypoint_object(totalordermagf128)
+add_math_entrypoint_object(totalordermagbf16)
+
+add_math_entrypoint_object(trunc)
+add_math_entrypoint_object(truncf)
+add_math_entrypoint_object(truncl)
+add_math_entrypoint_object(truncf16)
+add_math_entrypoint_object(truncf128)
+add_math_entrypoint_object(truncbf16)
+
+add_math_entrypoint_object(ufromfp)
+add_math_entrypoint_object(ufromfpf)
+add_math_entrypoint_object(ufromfpl)
+add_math_entrypoint_object(ufromfpf16)
+add_math_entrypoint_object(ufromfpf128)
+add_math_entrypoint_object(ufromfpbf16)
+
+add_math_entrypoint_object(ufromfpx)
+add_math_entrypoint_object(ufromfpxf)
+add_math_entrypoint_object(ufromfpxl)
+add_math_entrypoint_object(ufromfpxf16)
+add_math_entrypoint_object(ufromfpxf128)
+add_math_entrypoint_object(ufromfpxbf16)
+
+add_math_entrypoint_object(bf16add)
+add_math_entrypoint_object(bf16addf)
+add_math_entrypoint_object(bf16addl)
+add_math_entrypoint_object(bf16addf128)
+
+add_math_entrypoint_object(bf16div)
+add_math_entrypoint_object(bf16divf)
+add_math_entrypoint_object(bf16divl)
+add_math_entrypoint_object(bf16divf128)
+
+add_math_entrypoint_object(bf16fma)
+add_math_entrypoint_object(bf16fmaf)
+add_math_entrypoint_object(bf16fmal)
+add_math_entrypoint_object(bf16fmaf128)
+
+add_math_entrypoint_object(bf16mul)
+add_math_entrypoint_object(bf16mulf)
+add_math_entrypoint_object(bf16mull)
+add_math_entrypoint_object(bf16mulf128)
+
+add_math_entrypoint_object(bf16sub)
+add_math_entrypoint_object(bf16subf)
+add_math_entrypoint_object(bf16subl)
+add_math_entrypoint_object(bf16subf128)
diff --git a/libc/src/math/ffmal.h b/libc/src/math/ffmal.h
index 75fd40a0a92a2..1cbb61dcd2134 100644
--- a/libc/src/math/ffmal.h
+++ b/libc/src/math/ffmal.h
@@ -1,20 +1,20 @@
-//===-- Implementation header for ffmal -------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_SRC_MATH_FFMAL_H
-#define LLVM_LIBC_SRC_MATH_FFMAL_H
-
-#include "src/__support/macros/config.h"
-
-namespace LIBC_NAMESPACE_DECL {
-
-float ffmal(long double x, long double y, long double z);
-
-} // namespace LIBC_NAMESPACE_DECL
-
-#endif // LLVM_LIBC_SRC_MATH_FFMAL_H
+//===-- Implementation header for ffmal -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_FFMAL_H
+#define LLVM_LIBC_SRC_MATH_FFMAL_H
+
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+float ffmal(long double x, long double y, long double z);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_FFMAL_H
diff --git a/libc/src/math/fmabf16.h b/libc/src/math/fmabf16.h
new file mode 100644
index 0000000000000..5ba0876894f9a
--- /dev/null
+++ b/libc/src/math/fmabf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for fmabf16 -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_FMABF16_H
+#define LLVM_LIBC_SRC_MATH_FMABF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+bfloat16 fmabf16(bfloat16 x, bfloat16 y, bfloat16 z);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_FMABF16_H
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 418cf85b84a20..9f31dc934da46 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -4361,6 +4361,20 @@ add_entrypoint_object(
     libc.src.__support.macros.properties.types
 )
 
+add_entrypoint_object(
+  fmabf16
+  SRCS
+    fmabf16.cpp
+  HDRS
+    ../fmabf16.h
+  DEPENDS
+    libc.src.__support.common
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.FMA
+    libc.src.__support.macros.config
+    libc.src.__support.macros.properties.types
+)
+
 add_entrypoint_object(
   fma
   SRCS
diff --git a/libc/src/math/generic/fmabf16.cpp b/libc/src/math/generic/fmabf16.cpp
new file mode 100644
index 0000000000000..233dbc9089f9c
--- /dev/null
+++ b/libc/src/math/generic/fmabf16.cpp
@@ -0,0 +1,21 @@
+//===-- Implementation of fmabf16 function --------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/fmabf16.h"
+#include "src/__support/common.h"
+#include "src/__support/FPUtil/FMA.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(bfloat16, fmabf16, (bfloat16 x, bfloat16 y, bfloat16 z)) {
+  return fputil::fma<bfloat16>(x, y, z);
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index 73b5ebf5a856e..82fdc874b36f5 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -3501,3 +3501,3485 @@ if(NOT LLVM_LIBC_FULL_BUILD)
   add_subdirectory(exhaustive)
   add_subdirectory(performance_testing)
 endif()
+add_custom_target(libc-math-unittests)
+
+add_fp_unittest(
+  cosf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cosf_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.cosf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  cosf_float_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cosf_float_test.cpp
+  DEPENDS
+    libc.src.__support.math.sincosf_utils
+    libc.src.__support.FPUtil.fp_bits
+  FLAGS
+    FMA_OPT__ONLY
+)
+
+add_fp_unittest(
+  cos_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cos_test.cpp
+  DEPENDS
+    libc.src.math.cos
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  cosf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cosf16_test.cpp
+  DEPENDS
+    libc.src.math.cosf16
+)
+
+add_fp_unittest(
+  cospif_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cospif_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.cospif
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+
+add_fp_unittest(
+  cospif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cospif16_test.cpp
+  DEPENDS
+    libc.src.math.cospif16
+)
+
+add_fp_unittest(
+  daddl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    daddl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.daddl
+)
+
+add_fp_unittest(
+  sinf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinf_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sinf_float_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinf_float_test.cpp
+  DEPENDS
+    libc.src.__support.math.sincosf_utils
+    libc.src.__support.FPUtil.fp_bits
+  FLAGS
+    FMA_OPT__ONLY
+)
+
+add_fp_unittest(
+  sinf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinf16_test.cpp
+  DEPENDS
+    libc.src.math.sinf16
+)
+
+add_fp_unittest(
+  sinpif_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinpif_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinpif
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sinpif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinpif16_test.cpp
+  DEPENDS
+    libc.src.math.sinpif16
+)
+
+add_fp_unittest(
+  sin_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sin_test.cpp
+  DEPENDS
+    libc.src.math.sin
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sincosf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sincosf_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sincosf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sincos_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sincos_test.cpp
+  DEPENDS
+    libc.src.math.sincos
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tanf_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.tanf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tanf16_test.cpp
+  DEPENDS
+    libc.src.math.tanf16
+)
+
+add_fp_unittest(
+  tanpif_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tanpif_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.src.math.tanpif
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanpif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tanpif16_test.cpp
+  DEPENDS
+    libc.src.math.tanpif16
+)
+
+add_fp_unittest(
+  fabs_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fabs_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabs
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fabsf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fabsf_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabsf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fabsl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fabsl_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabsl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fadd_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fadd_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.fadd
+    libc.src.__support.FPUtil.basic_operations
+)
+
+add_fp_unittest(
+  faddl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    faddl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.faddl
+)
+
+add_fp_unittest(
+  trunc_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    trunc_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.trunc
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    truncf_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    truncl_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    truncf16_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceil_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ceil_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceil
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceilf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ceilf_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceilf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceill_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ceill_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceill
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceilf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ceilf16_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceilf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floor_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    floor_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floor
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    floorf_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    floorl_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    floorf16_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  round_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    round_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.round
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundf_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundl_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundf16_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundeven_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundeven_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundeven
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundevenf_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundevenl_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    roundevenf16_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lround_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lround_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.lround
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lroundf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.lroundf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lroundl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.lroundl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lroundf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.lroundf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lroundbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.lroundbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llround_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llround_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.llround
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llroundf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.llroundf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llroundl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.llroundl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llroundf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.llroundf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llroundbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.errno.errno
+    libc.src.math.llroundbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nearbyint_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    nearbyint_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.src.math.nearbyint
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.array
+)
+
+add_fp_unittest(
+  nearbyintf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    nearbyintf_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.src.math.nearbyintf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.array
+)
+
+add_fp_unittest(
+  nearbyintl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    nearbyintl_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.src.math.nearbyintl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.array
+)
+
+add_fp_unittest(
+  nearbyintf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    nearbyintf16_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.src.math.nearbyintf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.array
+)
+
+add_fp_unittest(
+  nearbyintbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    nearbyintbf16_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.src.math.nearbyintbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  rint_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rint_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.rint
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rintf_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.rintf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rintl_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.rintl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rintf16_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.rintf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rintbf16_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.rintbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrint_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lrint_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.lrint
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lrintf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.lrintf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lrintl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.lrintl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lrintf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.lrintf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    lrintbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.lrintbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrint_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llrint_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.llrint
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llrintf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.llrintf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llrintl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.llrintl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llrintf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.llrintf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    llrintbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.math.llrintbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp_test.cpp
+  DEPENDS
+    libc.src.math.exp
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    expf_test.cpp
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.expf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    expf16_test.cpp
+  DEPENDS
+    libc.src.math.expf16
+)
+
+add_fp_unittest(
+  exp2_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp2_test.cpp
+  DEPENDS
+    libc.src.math.exp2
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp2f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp2f_test.cpp
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.exp2f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp2f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp2f16_test.cpp
+  DEPENDS
+    libc.src.math.exp2f16
+)
+
+add_fp_unittest(
+  exp2m1f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp2m1f_test.cpp
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.exp2m1f
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp2m1f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp2m1f16_test.cpp
+  DEPENDS
+    libc.src.math.exp2m1f16
+)
+
+add_fp_unittest(
+  exp10_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp10_test.cpp
+  DEPENDS
+    libc.src.math.exp10
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp10f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp10f_test.cpp
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.exp10f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp10f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp10f16_test.cpp
+  DEPENDS
+    libc.src.math.exp10f16
+)
+
+add_fp_unittest(
+  exp10m1f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp10m1f16_test.cpp
+  DEPENDS
+    libc.src.math.exp10m1f16
+)
+
+add_fp_unittest(
+  exp10m1f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    exp10m1f_test.cpp
+  DEPENDS
+    libc.hdr.math_macros
+    libc.src.errno.errno
+    libc.src.math.exp10m1f
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  copysign_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    copysign_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysign
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  copysignf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    copysignf_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignf
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  copysignl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    copysignl_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignl
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  frexp_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    frexp_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexp
+    libc.src.__support.FPUtil.basic_operations
+)
+
+add_fp_unittest(
+  frexpf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    frexpf_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpf
+    libc.src.__support.FPUtil.basic_operations
+)
+
+add_fp_unittest(
+  frexpl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    frexpl_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpl
+    libc.src.__support.FPUtil.basic_operations
+)
+
+add_fp_unittest(
+  ilogb_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    ilogb_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogb
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    ilogbf_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbf
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    ilogbl_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbl
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ldexp_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    ldexp_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexp
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    ldexpf_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpf
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    ldexpl_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpl
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  logb_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    logb_test.cpp
+  DEPENDS
+    libc.src.math.logb
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    logbf_test.cpp
+  DEPENDS
+    libc.src.math.logbf
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    logbl_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logbl
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  modf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    modf_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modf
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+  # Requires C++ limits.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  modff_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    modff_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modff
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+  # Requires C++ limits.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  modfl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    modfl_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modfl
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  fdimf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fdimf_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdimf
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdim_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fdim_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdim
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdiml_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fdiml_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdiml
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fminf_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmin_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmin_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fmin
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fminl_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmaxf_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmax_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmax_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmax
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmaxl_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sqrtf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sqrtf_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtf
+)
+
+add_fp_unittest(
+  sqrt_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrt
+)
+
+add_fp_unittest(
+  sqrtl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtl
+)
+
+add_fp_unittest(
+  rsqrtf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rsqrtf_test.cpp
+  DEPENDS
+    libc.src.math.rsqrtf
+)
+
+add_fp_unittest(
+  rsqrtf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    rsqrtf16_test.cpp
+  DEPENDS
+    libc.src.math.rsqrtf16
+)
+
+add_fp_unittest(
+  sqrtf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sqrtf16_test.cpp
+  DEPENDS
+    libc.src.math.sqrtf16
+)
+
+add_fp_unittest(
+  sqrtf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sqrtf128_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtf128
+)
+
+add_fp_unittest(
+  sqrtbf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sqrtbf16_test.cpp
+  DEPENDS
+    libc.src.math.sqrtbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  generic_sqrtf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    generic_sqrtf_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtf
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  generic_sqrt_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    generic_sqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrt
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  generic_sqrtl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    generic_sqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtl
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  remquof_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    remquof_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquof
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquo_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    remquo_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquo
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquol_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    remquol_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquol
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  hypotf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    hypotf_test.cpp
+  DEPENDS
+    libc.src.math.hypotf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  hypot_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    hypot_test.cpp
+  DEPENDS
+    libc.src.math.hypot
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  hypotf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    hypotf16_test.cpp
+  DEPENDS
+    libc.src.math.hypotf16
+)
+
+add_fp_unittest(
+  nextafter_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    nextafter_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.src.math.nextafter
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    nextafterf_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.src.math.nextafterf
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterl_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    nextafterl_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.src.math.nextafterl
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterf128_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    nextafterf128_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.src.math.nextafterf128
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+# TODO(lntue): The current implementation of fputil::general::fma<float> is only
+# correctly rounded for the default rounding mode round-to-nearest tie-to-even.
+add_fp_unittest(
+  fmaf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmaf_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fmaf
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+  FLAGS
+    FMA_OPT__ONLY
+)
+
+add_fp_unittest(
+  fmaf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmaf16_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fmaf16
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  fmabf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmabf16_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fmabf16
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  fma_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fma
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  tan_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tan_test.cpp
+  DEPENDS
+    libc.src.math.tan
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expm1_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    expm1_test.cpp
+  DEPENDS
+    libc.src.math.expm1
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expm1f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    expm1f_test.cpp
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.expm1f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expm1f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    expm1f16_test.cpp
+  DEPENDS
+    libc.src.math.expm1f16
+)
+
+add_fp_unittest(
+ log_test
+ NEED_MPFR
+ SUITE
+   libc-math-unittests
+ SRCS
+   log_test.cpp
+ DEPENDS
+   libc.src.math.log
+   libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  logf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    logf_test.cpp
+  DEPENDS
+    libc.src.math.logf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  logf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    logf16_test.cpp
+  DEPENDS
+    libc.src.math.logf16
+)
+
+add_fp_unittest(
+  log_bf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    log_bf16_test.cpp
+  DEPENDS
+    libc.src.math.log_bf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+log2_test
+ NEED_MPFR
+ SUITE
+   libc-math-unittests
+ SRCS
+   log2_test.cpp
+ DEPENDS
+   libc.src.math.log2
+   libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log2f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    log2f_test.cpp
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.log2f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log2f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    log2f16_test.cpp
+  DEPENDS
+    libc.src.math.log2f16
+)
+
+add_fp_unittest(
+ log10_test
+ NEED_MPFR
+ SUITE
+   libc-math-unittests
+ SRCS
+   log10_test.cpp
+ DEPENDS
+   libc.src.math.log10
+   libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log10f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    log10f_test.cpp
+  DEPENDS
+    libc.src.math.log10f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log10f16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    log10f16_test.cpp
+  DEPENDS
+    libc.src.math.log10f16
+)
+
+add_fp_unittest(
+log1p_test
+ NEED_MPFR
+ SUITE
+   libc-math-unittests
+ SRCS
+   log1p_test.cpp
+ DEPENDS
+   libc.src.math.log1p
+   libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log1pf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    log1pf_test.cpp
+  DEPENDS
+    libc.src.math.log1pf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmodf_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmodf_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.fmodf
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  fmod_test
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmod_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.fmod
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  explogxf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  HDRS
+    in_float_range_test_helper.h
+  SRCS
+    explogxf_test.cpp
+  DEPENDS
+    libc.src.math.generic.explogxf
+    libc.src.math.fabs
+    libc.src.math.fabsf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  coshf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    coshf_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.coshf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  coshf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    coshf16_test.cpp
+  DEPENDS
+    libc.src.math.coshf16
+)
+
+add_fp_unittest(
+  sinhf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinhf_test.cpp
+  HDRS
+    sdcomp26094.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinhf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sinhf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sinhf16_test.cpp
+  DEPENDS
+    libc.src.math.sinhf16
+)
+
+add_fp_unittest(
+  tanhf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tanhf_test.cpp
+  DEPENDS
+    libc.src.math.tanhf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanhf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    tanhf16_test.cpp
+  DEPENDS
+    libc.src.math.tanhf16
+)
+
+add_fp_unittest(
+  atanhf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atanhf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.atanhf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atanhf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atanhf16_test.cpp
+  DEPENDS
+    libc.src.math.atanhf16
+)
+
+add_fp_unittest(
+  atanpif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atanpif16_test.cpp
+  DEPENDS
+    libc.src.math.atanpif16
+)
+
+add_fp_unittest(
+  fmul_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.fmul
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  fmull_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fmull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.fmull
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  asinhf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asinhf_test.cpp
+  DEPENDS
+    libc.src.math.asinhf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  asinhf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asinhf16_test.cpp
+  DEPENDS
+    libc.src.math.asinhf16
+)
+
+add_fp_unittest(
+  acoshf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    acoshf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acoshf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  acoshf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    acoshf16_test.cpp
+  DEPENDS
+    libc.src.math.acoshf16
+)
+
+add_fp_unittest(
+  asinf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asinf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.asinf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  asin_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asin_test.cpp
+  DEPENDS
+    libc.src.math.asin
+)
+
+add_fp_unittest(
+  asinf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asinf16_test.cpp
+  DEPENDS
+    libc.src.math.asinf16  
+)
+
+add_fp_unittest(
+  asinpif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asinpif16_test.cpp
+  DEPENDS
+    libc.src.math.asinpif16
+)
+
+add_fp_unittest(
+  acosf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    acosf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acosf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  acos_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    acos_test.cpp
+  DEPENDS
+    libc.src.math.acos
+)
+
+add_fp_unittest(
+  acosf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    acosf16_test.cpp
+  DEPENDS
+    libc.src.math.acosf16  
+)
+
+add_fp_unittest(
+  acospif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    acospif16_test.cpp
+  DEPENDS
+    libc.src.math.acospif16  
+)
+
+add_fp_unittest(
+  atanf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atanf_test.cpp
+  DEPENDS
+    libc.src.math.atanf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atan_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atan_test.cpp
+  DEPENDS
+    libc.src.math.atan
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atanf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atanf16_test.cpp
+  DEPENDS
+    libc.src.math.atanf16
+)
+
+add_fp_unittest(
+  scalbn_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    scalbn_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbn
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    scalbnf_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnf
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    scalbnl_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnl
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    scalbnf128_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnf128
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  erff_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    erff_test.cpp
+  DEPENDS
+    libc.src.math.erff
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  pow_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    pow_test.cpp
+  DEPENDS
+    libc.src.math.pow
+)
+
+add_fp_unittest(
+  powf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    powf_test.cpp
+  DEPENDS
+    libc.src.math.powf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atan2f_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atan2f_test.cpp
+  DEPENDS
+    libc.src.math.atan2f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atan2_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atan2_test.cpp
+  DEPENDS
+    libc.src.math.atan2
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atan2f128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atan2f128_test.cpp
+  DEPENDS
+    libc.src.math.atan2f128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  f16add_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16add_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.f16add
+)
+
+add_fp_unittest(
+  f16addf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16addf_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.f16addf
+)
+
+add_fp_unittest(
+  f16addl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16addl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.f16addl
+)
+
+add_fp_unittest(
+  f16sub_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16sub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.f16sub
+)
+
+add_fp_unittest(
+  f16subf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16subf_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.f16subf
+)
+
+add_fp_unittest(
+  f16subl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16subl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.f16subl
+)
+
+add_fp_unittest(
+  f16div_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16div_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.f16div
+)
+
+add_fp_unittest(
+  f16divf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16divf_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.f16divf
+)
+
+add_fp_unittest(
+  f16divl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16divl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.f16divl
+)
+
+add_fp_unittest(
+  f16fma_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16fma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fma
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  f16fmaf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16fmaf_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fmaf
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  f16fmal_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16fmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fmal
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  f16sqrt_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16sqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrt
+)
+
+add_fp_unittest(
+  f16sqrtf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16sqrtf_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrtf
+)
+
+add_fp_unittest(
+  f16sqrtl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16sqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrtl
+)
+
+add_fp_unittest(
+  fsqrt_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fsqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.fsqrt
+)
+
+add_fp_unittest(
+  fsqrtl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fsqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.fsqrtl
+)
+
+add_fp_unittest(
+  fsub_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fsub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.fsub
+)
+
+add_fp_unittest(
+  fsubl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fsubl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.fsubl
+)
+
+add_fp_unittest(
+  dsqrtl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    dsqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.dsqrtl
+)
+
+add_fp_unittest(
+  cbrtf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cbrtf_test.cpp
+  DEPENDS
+    libc.src.math.cbrtf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  cbrt_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    cbrt_test.cpp
+  DEPENDS
+    libc.src.math.cbrt
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  dmull_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    dmull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.dmull
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  f16mul_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16mul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.f16mul
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  f16mulf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16mulf_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.f16mulf
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  f16mull_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    f16mull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.f16mull
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  ddivl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ddivl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.ddivl
+)
+
+add_fp_unittest(
+  dfmal_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    dfmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.dfmal
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  dsubl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    dsubl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.dsubl
+)
+
+add_fp_unittest(
+  fdiv_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fdiv_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.fdiv
+)
+
+add_fp_unittest(
+  fdivl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    fdivl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.fdivl
+)
+
+add_fp_unittest(
+  ffma_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ffma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.ffma
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  ffmal_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    ffmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.ffmal
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+)
+
+add_fp_unittest(
+  add_same_type_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    add_same_type_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.generic.add_sub
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  sub_same_type_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    sub_same_type_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.generic.add_sub
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  bf16add_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16add_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.bf16add
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16addf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16addf_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.bf16addf
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16addl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16addl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.bf16addl
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16addf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16addf128_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.math.bf16addf128
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16div_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16div_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.bf16div
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16divf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16divf_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.bf16divf
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16divl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16divl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.bf16divl
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16divf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16divf128_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.bf16divf128
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fma_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16fma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.bf16fma
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fmaf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16fmaf_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.bf16fmaf
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fmal_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16fmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.bf16fmal
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fmaf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16fmaf128_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.bf16fmaf128
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mul_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16mul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.bf16mul
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mulf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16mulf_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.bf16mulf
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mull_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16mull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.bf16mull
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mulf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16mulf128_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.math.bf16mulf128
+    libc.src.stdlib.rand
+    libc.src.stdlib.srand
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16sub_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16sub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.bf16sub
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16subf_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16subf_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.bf16subf
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16subl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16subl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.bf16subl
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16subf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    bf16subf128_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.math.bf16subf128
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_subdirectory(generic)
+add_subdirectory(smoke)
+
+if(NOT LLVM_LIBC_FULL_BUILD)
+  add_subdirectory(exhaustive)
+  add_subdirectory(performance_testing)
+endif()
diff --git a/libc/test/src/math/bf16mul_test.cpp b/libc/test/src/math/bf16mul_test.cpp
index 3682705556b0a..76bd3dba42566 100644
--- a/libc/test/src/math/bf16mul_test.cpp
+++ b/libc/test/src/math/bf16mul_test.cpp
@@ -1,15 +1,15 @@
-//===-- Unittests for bf16mul ---------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "MulTest.h"
-
-#include "src/math/bf16mul.h"
-
-#include "src/__support/FPUtil/bfloat16.h"
-
-LIST_MUL_TESTS(bfloat16, double, LIBC_NAMESPACE::bf16mul)
+//===-- Unittests for bf16mul ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "MulTest.h"
+
+#include "src/math/bf16mul.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+
+LIST_MUL_TESTS(bfloat16, double, LIBC_NAMESPACE::bf16mul)
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
new file mode 100644
index 0000000000000..ae01948c21ca5
--- /dev/null
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -0,0 +1,29 @@
+// //===-- Exhaustive test for fmabf16 ---------------------------------------===//
+// //
+// // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// // See https://llvm.org/LICENSE.txt for license information.
+// // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+// //
+// //===----------------------------------------------------------------------===//
+
+// #include "src/__support/FPUtil/bfloat16.h"
+// #include "src/math/fmabf16.h"
+// #include "test/UnitTest/FPMatcher.h"
+// #include "test/UnitTest/Test.h"
+// #include "utils/MPFRWrapper/MPFRUtils.h"
+
+// using LlvmLibcFmabf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
+
+// namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+// // range: [0, inf]
+// static constexpr uint16_t POS_START = 0x0000U;
+// static constexpr uint16_t POS_STOP = 0x7f80U;
+
+// TEST_F(LlvmLibcSqrtf16Test, PositiveRange) {
+//   for (uint16_t v = POS_START; v <= POS_STOP; ++v) {
+//     bfloat16 x = FPBits(v).get_val();
+//     EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Sqrt, x,
+//                                    LIBC_NAMESPACE::sqrtbf16(x), 0.5);
+//   }
+// }
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 3d52873c40bb8..92a8ccbd6f6da 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -6487,6 +6487,6537 @@ add_fp_unittest(
 )
 
 
+add_fp_unittest(
+  bf16sub_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16sub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16sub
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16subf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16subf_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16subf
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16subl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16subl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16subl
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16subf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16subf128_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16subf128
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+add_custom_target(libc-math-smoke-tests)
+add_dependencies(libc-math-unittests libc-math-smoke-tests)
+
+add_fp_unittest(
+  cosf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cosf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.cosf
+)
+
+add_fp_unittest(
+  cosf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cosf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.cosf16
+)
+
+add_fp_unittest(
+  cospif_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cospif_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.cospif
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  cospif16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cospif16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.cospif16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  sinf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sinf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sinf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sinf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  sinpif_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sinpif_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinpif
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sinpif16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sinpif16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinpif16
+)
+
+add_fp_unittest(
+  sincosf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sincosf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sincosf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tanf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.tanf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tanf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.tanf16
+)
+
+add_fp_unittest(
+  tanpif_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tanpif_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.tanpif
+)
+
+add_fp_unittest(
+  tanpif16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tanpif16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.tanpif16
+)
+
+add_fp_unittest(
+  fabs_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fabs_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabs
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fabsf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fabsf_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabsf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fabsl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fabsl_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabsl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fabsf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fabsf16_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabsf16
+)
+
+add_fp_unittest(
+  fabsf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fabsf128_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.math.fabsf128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fabsbf16_test
+  SUITE
+  libc-math-smoke-tests
+  SRCS
+    fabsbf16_test.cpp
+  HDRS
+    FAbsTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.math.fabsbf16
+)
+
+add_fp_unittest(
+  fadd_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fadd_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fadd
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  faddl_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    faddl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.faddl
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  faddf128_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    faddf128_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.faddf128
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  trunc_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    trunc_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.trunc
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    truncf_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    truncl_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    truncf16_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncf16
+)
+
+add_fp_unittest(
+  truncf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    truncf128_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncf128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  truncbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    truncbf16_test.cpp
+  HDRS
+    TruncTest.h
+  DEPENDS
+    libc.src.math.truncbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  canonicalize_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    canonicalize_test.cpp
+  HDRS
+    CanonicalizeTest.h
+  DEPENDS
+    libc.src.math.canonicalize
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.integer_literals
+)
+
+add_fp_unittest(
+  canonicalizef_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    canonicalizef_test.cpp
+  HDRS
+    CanonicalizeTest.h
+  DEPENDS
+    libc.src.math.canonicalizef
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.integer_literals
+)
+
+add_fp_unittest(
+  canonicalizef16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    canonicalizef16_test.cpp
+  HDRS
+    CanonicalizeTest.h
+  DEPENDS
+    libc.src.math.canonicalizef16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.integer_literals
+)
+
+add_fp_unittest(
+  canonicalizef128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    canonicalizef128_test.cpp
+  HDRS
+    CanonicalizeTest.h
+  DEPENDS
+    libc.src.math.canonicalizef128
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.integer_literals
+)
+
+add_fp_unittest(
+  canonicalizel_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    canonicalizel_test.cpp
+  HDRS
+    CanonicalizeTest.h
+  DEPENDS
+    libc.src.math.canonicalizel
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.integer_literals
+)
+
+add_fp_unittest(
+  canonicalizebf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    canonicalizebf16_test.cpp
+  HDRS
+    CanonicalizeTest.h
+  DEPENDS
+    libc.src.math.canonicalizebf16
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.integer_literals
+)
+
+add_fp_unittest(
+  iscanonical_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    iscanonical_test.cpp
+  HDRS
+    IsCanonicalTest.h
+  DEPENDS
+    libc.src.math.iscanonical
+)
+
+add_fp_unittest(
+  iscanonicalf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    iscanonicalf_test.cpp
+  HDRS
+    IsCanonicalTest.h
+  DEPENDS
+    libc.src.math.iscanonicalf
+)
+
+add_fp_unittest(
+  iscanonicall_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    iscanonicall_test.cpp
+  HDRS
+    IsCanonicalTest.h
+  DEPENDS
+    libc.src.math.iscanonicall
+)
+
+add_fp_unittest(
+  iscanonicalf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    iscanonicalf16_test.cpp
+  HDRS
+    IsCanonicalTest.h
+  DEPENDS
+    libc.src.math.iscanonicalf16
+)
+
+add_fp_unittest(
+  iscanonicalf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    iscanonicalf128_test.cpp
+  HDRS
+    IsCanonicalTest.h
+  DEPENDS
+    libc.src.math.iscanonicalf128
+)
+
+add_fp_unittest(
+  iscanonicalbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    iscanonicalbf16_test.cpp
+  HDRS
+    IsCanonicalTest.h
+  DEPENDS
+    libc.src.math.iscanonicalbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  ceil_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ceil_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceil
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceilf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ceilf_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceilf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceill_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ceill_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceill
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceilf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ceilf16_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceilf16
+)
+
+add_fp_unittest(
+  ceilf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ceilf128_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceilf128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  ceilbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ceilbf16_test.cpp
+  HDRS
+    CeilTest.h
+  DEPENDS
+    libc.src.math.ceilbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  dfmal_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dfmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.dfmal
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  dfmaf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dfmaf128_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.dfmaf128
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  dsubl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dsubl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.dsubl
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  dsubf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dsubf128_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.dsubf128
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  floor_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    floor_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floor
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    floorf_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    floorl_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    floorf16_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorf16
+)
+
+add_fp_unittest(
+  floorf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    floorf128_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorf128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  floorbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    floorbf16_test.cpp
+  HDRS
+    FloorTest.h
+  DEPENDS
+    libc.src.math.floorbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  round_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    round_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.round
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundf_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundl_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundf16_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundf16
+)
+
+add_fp_unittest(
+  roundf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundf128_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundf128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundbf16_test.cpp
+  HDRS
+    RoundTest.h
+  DEPENDS
+    libc.src.math.roundbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  roundeven_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundeven_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundeven
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundevenf_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundevenl_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundevenf16_test.cpp
+  HDRS
+    RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenf16
+)
+
+add_fp_unittest(
+  roundevenf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundevenf128_test.cpp
+  HDRS
+  RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenf128
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  roundevenbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    roundevenbf16_test.cpp
+  HDRS
+    RoundEvenTest.h
+  DEPENDS
+    libc.src.math.roundevenbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  lround_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lround_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lround
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lroundf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lroundf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lroundl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lroundl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lroundf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lroundf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lroundf128_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lroundf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lroundbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lroundbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lroundbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llround_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llround_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llround
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llroundf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llroundf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llroundl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llroundl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llroundf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llroundf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llroundf128_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llroundf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llroundbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llroundbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llroundbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rint_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rint_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.src.math.rint
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rintf_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.src.math.rintf
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rintl_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.src.math.rintl
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rintf16_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.src.math.rintf16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rintf128_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.src.math.rintf128
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  rintbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rintbf16_test.cpp
+  HDRS
+    RIntTest.h
+  DEPENDS
+    libc.src.math.rintbf16
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrint_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lrint_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lrint
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lrintf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lrintf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lrintl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lrintl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lrintf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lrintf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lrintf128_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lrintf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  lrintbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    lrintbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.lrintbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrint_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llrint_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llrint
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llrintf_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llrintf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llrintl_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llrintl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llrintf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llrintf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llrintf128_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llrintf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  llrintbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llrintbf16_test.cpp
+  HDRS
+    RoundToIntegerTest.h
+  DEPENDS
+    libc.src.errno.errno
+    libc.src.math.llrintbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    expf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.expf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    expf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.expf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  exp2_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp2_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp2
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp2f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp2f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp2f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp2f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp2f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.exp2f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  exp2m1f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp2m1f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp2m1f
+)
+
+add_fp_unittest(
+  exp2m1f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp2m1f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.exp2m1f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  exp10_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp10_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp10
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp10f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp10f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp10f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  exp10f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp10f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.exp10f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  exp10m1f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp10m1f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.exp10m1f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  exp10m1f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    exp10m1f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.exp10m1f
+)
+
+add_fp_unittest(
+  copysign_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    copysign_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysign
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  copysignf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    copysignf_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  copysignl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    copysignl_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  copysignf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    copysignf16_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  copysignf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    copysignf128_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  copysignbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    copysignbf16_test.cpp
+  HDRS
+    CopySignTest.h
+  DEPENDS
+    libc.src.math.copysignbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  frexp_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    frexp_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexp
+)
+
+add_fp_unittest(
+  frexpf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    frexpf_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpf
+)
+
+add_fp_unittest(
+  frexpl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    frexpl_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpl
+)
+
+add_fp_unittest(
+  frexpf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    frexpf16_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpf16
+)
+
+add_fp_unittest(
+  frexpf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    frexpf128_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpf128
+)
+
+add_fp_unittest(
+  frexpbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    frexpbf16_test.cpp
+  HDRS
+    FrexpTest.h
+  DEPENDS
+    libc.src.math.frexpbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  fromfp_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfp_test.cpp
+  HDRS
+    FromfpTest.h
+  DEPENDS
+    libc.src.math.fromfp
+)
+
+add_fp_unittest(
+  fromfpf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpf_test.cpp
+  HDRS
+    FromfpTest.h
+  DEPENDS
+    libc.src.math.fromfpf
+)
+
+add_fp_unittest(
+  fromfpl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpl_test.cpp
+  HDRS
+    FromfpTest.h
+  DEPENDS
+    libc.src.math.fromfpl
+)
+
+add_fp_unittest(
+  fromfpf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpf16_test.cpp
+  HDRS
+    FromfpTest.h
+  DEPENDS
+    libc.src.math.fromfpf16
+)
+
+add_fp_unittest(
+  fromfpf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpf128_test.cpp
+  HDRS
+    FromfpTest.h
+  DEPENDS
+    libc.src.math.fromfpf128
+)
+
+add_fp_unittest(
+  fromfpbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpbf16_test.cpp
+  HDRS
+    FromfpTest.h
+  DEPENDS
+    libc.src.math.fromfpbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  fromfpx_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpx_test.cpp
+  HDRS
+    FromfpxTest.h
+  DEPENDS
+    libc.src.math.fromfpx
+)
+
+add_fp_unittest(
+  fromfpxf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpxf_test.cpp
+  HDRS
+    FromfpxTest.h
+  DEPENDS
+    libc.src.math.fromfpxf
+)
+
+add_fp_unittest(
+  fromfpxl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpxl_test.cpp
+  HDRS
+    FromfpxTest.h
+  DEPENDS
+    libc.src.math.fromfpxl
+)
+
+add_fp_unittest(
+  fromfpxf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpxf16_test.cpp
+  HDRS
+    FromfpxTest.h
+  DEPENDS
+    libc.src.math.fromfpxf16
+)
+
+add_fp_unittest(
+  fromfpxf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpxf128_test.cpp
+  HDRS
+    FromfpxTest.h
+  DEPENDS
+    libc.src.math.fromfpxf128
+)
+
+add_fp_unittest(
+  fromfpxbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fromfpxbf16_test.cpp
+  HDRS
+    FromfpxTest.h
+  DEPENDS
+    libc.src.math.fromfpxbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+
+add_fp_unittest(
+  ufromfp_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfp_test.cpp
+  HDRS
+    UfromfpTest.h
+  DEPENDS
+    libc.src.math.ufromfp
+)
+
+add_fp_unittest(
+  ufromfpf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpf_test.cpp
+  HDRS
+    UfromfpTest.h
+  DEPENDS
+    libc.src.math.ufromfpf
+)
+
+add_fp_unittest(
+  ufromfpl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpl_test.cpp
+  HDRS
+    UfromfpTest.h
+  DEPENDS
+    libc.src.math.ufromfpl
+)
+
+add_fp_unittest(
+  ufromfpf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpf16_test.cpp
+  HDRS
+    UfromfpTest.h
+  DEPENDS
+    libc.src.math.ufromfpf16
+)
+
+add_fp_unittest(
+  ufromfpf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpf128_test.cpp
+  HDRS
+    UfromfpTest.h
+  DEPENDS
+    libc.src.math.ufromfpf128
+)
+
+add_fp_unittest(
+  ufromfpbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpbf16_test.cpp
+  HDRS
+    UfromfpTest.h
+  DEPENDS
+    libc.src.math.ufromfpbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  ufromfpx_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpx_test.cpp
+  HDRS
+    UfromfpxTest.h
+  DEPENDS
+    libc.src.math.ufromfpx
+)
+
+add_fp_unittest(
+  ufromfpxf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpxf_test.cpp
+  HDRS
+    UfromfpxTest.h
+  DEPENDS
+    libc.src.math.ufromfpxf
+)
+
+add_fp_unittest(
+  ufromfpxl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpxl_test.cpp
+  HDRS
+    UfromfpxTest.h
+  DEPENDS
+    libc.src.math.ufromfpxl
+)
+
+add_fp_unittest(
+  ufromfpxf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpxf16_test.cpp
+  HDRS
+    UfromfpxTest.h
+  DEPENDS
+    libc.src.math.ufromfpxf16
+)
+
+add_fp_unittest(
+  ufromfpxf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpxf128_test.cpp
+  HDRS
+    UfromfpxTest.h
+  DEPENDS
+    libc.src.math.ufromfpxf128
+)
+
+add_fp_unittest(
+  ufromfpxbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ufromfpxbf16_test.cpp
+  HDRS
+    UfromfpxTest.h
+  DEPENDS
+    libc.src.math.ufromfpxbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  ilogb_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ilogb_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogb
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ilogbf_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ilogbl_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ilogbf16_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ilogbf128_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ilogbbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ilogbbf16_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.ilogbbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  issignaling_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    issignaling_test.cpp
+  HDRS
+    IsSignalingTest.h
+  DEPENDS
+    libc.src.math.issignaling
+)
+
+add_fp_unittest(
+  issignalingf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    issignalingf_test.cpp
+  HDRS
+    IsSignalingTest.h
+  DEPENDS
+    libc.src.math.issignalingf
+)
+
+add_fp_unittest(
+  issignalingl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    issignalingl_test.cpp
+  HDRS
+    IsSignalingTest.h
+  DEPENDS
+    libc.src.math.issignalingl
+)
+
+add_fp_unittest(
+  issignalingf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    issignalingf16_test.cpp
+  HDRS
+    IsSignalingTest.h
+  DEPENDS
+    libc.src.math.issignalingf16
+)
+
+add_fp_unittest(
+  issignalingf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    issignalingf128_test.cpp
+  HDRS
+    IsSignalingTest.h
+  DEPENDS
+    libc.src.math.issignalingf128
+)
+
+add_fp_unittest(
+  issignalingbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    issignalingbf16_test.cpp
+  HDRS
+    IsSignalingTest.h
+  DEPENDS
+    libc.src.math.issignalingbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  llogb_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llogb_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.llogb
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  llogbf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llogbf_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.llogbf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  llogbl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llogbl_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.llogbl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  llogbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llogbf16_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.llogbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  llogbf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llogbf128_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.llogbf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  llogbbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    llogbbf16_test.cpp
+  HDRS
+    ILogbTest.h
+  DEPENDS
+    libc.src.math.llogbbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  ldexp_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ldexp_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexp
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ldexpf_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ldexpl_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ldexpf16_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ldexpf128_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  ldexpbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ldexpbf16_test.cpp
+  HDRS
+    LdExpTest.h
+  DEPENDS
+    libc.src.math.ldexpbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  logb_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logb_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logb
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logbf_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logbf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logbl_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logbl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logbf16_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logbf128_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logbf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  logbbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logbbf16_test.cpp
+  HDRS
+    LogbTest.h
+  DEPENDS
+    libc.src.math.logbbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.manipulation_functions
+)
+
+add_fp_unittest(
+  modf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modf_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  modff_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modff_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modff
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  modfl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modfl_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modfl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  modff16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modff16_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modff16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  modff128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modff128_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modff128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  modfbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    modfbf16_test.cpp
+  HDRS
+    ModfTest.h
+  DEPENDS
+    libc.src.math.modfbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.nearest_integer_operations
+)
+
+add_fp_unittest(
+  fdimf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdimf_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdimf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdim_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdim_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdim
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdiml_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdiml_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdiml
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdimf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdimf16_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdimf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdimf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdimf128_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdimf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fdimbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdimbf16_test.cpp
+  HDRS
+    FDimTest.h
+  DEPENDS
+    libc.src.math.fdimbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminf_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmin_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmin_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fmin
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminl_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminf128_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminf16_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminbf16_test.cpp
+  HDRS
+    FMinTest.h
+  DEPENDS
+    libc.src.math.fminbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaxf_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmax_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmax_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmax
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaxl_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaxf128_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaxf16_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaxbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaxbf16_test.cpp
+  HDRS
+    FMaxTest.h
+  DEPENDS
+    libc.src.math.fmaxbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximuml_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximuml_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximuml
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximumf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximumf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximumf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximumf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximumf128_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximumf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximum
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximumf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximumf_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximumf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_numf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_numf_test.cpp
+  HDRS
+    FMaximumNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_numf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximumbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximumbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximumbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_num_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_num_test.cpp
+  HDRS
+    FMaximumNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_num
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_numl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_numl_test.cpp
+  HDRS
+    FMaximumNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_numl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_numf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_numf16_test.cpp
+  HDRS
+    FMaximumNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_numf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_numf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_numf128_test.cpp
+  HDRS
+    FMaximumNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_numf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_numbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_numbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_numbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_magf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_magf_test.cpp
+  HDRS
+    FMaximumMagTest.h
+  DEPENDS
+    libc.src.math.fmaximum_magf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_test.cpp
+  HDRS
+    FMaximumMagTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_magl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_magl_test.cpp
+  HDRS
+    FMaximumMagTest.h
+  DEPENDS
+    libc.src.math.fmaximum_magl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_magf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_magf16_test.cpp
+  HDRS
+    FMaximumMagTest.h
+  DEPENDS
+    libc.src.math.fmaximum_magf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_magf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_magf128_test.cpp
+  HDRS
+    FMaximumMagTest.h
+  DEPENDS
+    libc.src.math.fmaximum_magf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_magbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_magbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_magbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_numf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_numf_test.cpp
+  HDRS
+    FMaximumMagNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag_numf
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_num_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_num_test.cpp
+  HDRS
+    FMaximumMagNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag_num
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_numl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_numl_test.cpp
+  HDRS
+    FMaximumMagNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag_numl
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_numf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_numf16_test.cpp
+  HDRS
+    FMaximumMagNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag_numf16
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_numf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_numf128_test.cpp
+  HDRS
+    FMaximumMagNumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag_numf128
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmaximum_mag_numbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaximum_mag_numbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fmaximum_mag_numbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimuml_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimuml_test.cpp
+  HDRS
+    FMinimumTest.h
+  DEPENDS
+    libc.src.math.fminimuml
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimumf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimumf16_test.cpp
+  HDRS
+    FMinimumTest.h
+  DEPENDS
+    libc.src.math.fminimumf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimumf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimumf128_test.cpp
+  HDRS
+    FMinimumTest.h
+  DEPENDS
+    libc.src.math.fminimumf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_test.cpp
+  HDRS
+    FMinimumTest.h
+  DEPENDS
+    libc.src.math.fminimum
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimumf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimumf_test.cpp
+  HDRS
+    FMinimumTest.h
+  DEPENDS
+    libc.src.math.fminimumf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimumbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimumbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fminimumbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_numf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_numf_test.cpp
+  HDRS
+    FMinimumNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_numf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_num_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_num_test.cpp
+  HDRS
+    FMinimumNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_num
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_numl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_numl_test.cpp
+  HDRS
+    FMinimumNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_numl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_numf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_numf16_test.cpp
+  HDRS
+    FMinimumNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_numf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_numf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_numf128_test.cpp
+  HDRS
+    FMinimumNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_numf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_numbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_numf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fminimum_numf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_magf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_magf_test.cpp
+  HDRS
+    FMinimumMagTest.h
+  DEPENDS
+    libc.src.math.fminimum_magf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_test.cpp
+  HDRS
+    FMinimumMagTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_magl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_magl_test.cpp
+  HDRS
+    FMinimumMagTest.h
+  DEPENDS
+    libc.src.math.fminimum_magl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_magf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_magf16_test.cpp
+  HDRS
+    FMinimumMagTest.h
+  DEPENDS
+    libc.src.math.fminimum_magf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_magf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_magf128_test.cpp
+  HDRS
+    FMinimumMagTest.h
+  DEPENDS
+    libc.src.math.fminimum_magf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_magbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_magbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fminimum_magbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_numf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_numf_test.cpp
+  HDRS
+    FMinimumMagNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag_numf
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_num_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_num_test.cpp
+  HDRS
+    FMinimumMagNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag_num
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_numl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_numl_test.cpp
+  HDRS
+    FMinimumMagNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag_numl
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_numf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_numf16_test.cpp
+  HDRS
+    FMinimumMagNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag_numf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_numf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_numf128_test.cpp
+  HDRS
+    FMinimumMagNumTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag_numf128
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fminimum_mag_numbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fminimum_mag_numbf16_test.cpp
+  HDRS
+    FMaximumTest.h
+  DEPENDS
+    libc.src.math.fminimum_mag_numbf16
+    libc.src.__support.CPP.algorithm
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmul_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.fmul
+)
+
+add_fp_unittest(
+  fmull_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.fmull
+)
+
+add_fp_unittest(
+  sqrtf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sqrtf_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtf
+)
+
+add_fp_unittest(
+  sqrt_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrt
+)
+
+add_fp_unittest(
+  sqrtl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtl
+)
+
+add_fp_unittest(
+  rsqrtf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rsqrtf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros  
+    libc.hdr.fenv_macros  
+    libc.src.math.rsqrtf 
+)
+
+add_fp_unittest(
+  rsqrtf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    rsqrtf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros  
+    libc.hdr.fenv_macros 
+    libc.src.math.rsqrtf16
+)
+
+add_fp_unittest(
+  sqrtf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sqrtf16_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtf16
+)
+
+add_fp_unittest(
+  sqrtf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sqrtf128_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtf128
+)
+
+add_fp_unittest(
+  sqrtbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sqrtbf16_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.sqrtbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  generic_sqrtf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    generic_sqrtf_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  generic_sqrt_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    generic_sqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  generic_sqrtl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    generic_sqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  generic_sqrtf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    generic_sqrtf128_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    # The dependency on sqrtf128 is used to disable the test when float128
+    # support is not available.
+    libc.src.math.sqrtf128
+    libc.src.__support.FPUtil.generic.sqrt
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+)
+
+add_fp_unittest(
+  remquof_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquof_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquof
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquof128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquof128_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquof128
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquo_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquo_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquo
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquol_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquol_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquol
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquof16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquof16_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquof16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  remquobf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    remquobf16_test.cpp
+  HDRS
+    RemQuoTest.h
+  DEPENDS
+    libc.src.math.remquobf16
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  hypotf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    hypotf_test.cpp
+  HDRS
+    HypotTest.h
+  DEPENDS
+    libc.src.math.hypotf
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.macros.properties.architectures
+)
+
+add_fp_unittest(
+  hypotf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    hypotf16_test.cpp
+  HDRS
+    HypotTest.h
+  DEPENDS
+    libc.src.math.hypotf16
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  hypot_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    hypot_test.cpp
+  HDRS
+    HypotTest.h
+  DEPENDS
+    libc.src.math.hypot
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.macros.properties.architectures
+)
+
+add_fp_unittest(
+  nanf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nanf_test.cpp
+  DEPENDS
+    libc.hdr.signal_macros
+    libc.src.math.nanf
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: The nan tests currently have death tests, which aren't supported for
+  # hermetic tests.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  nan_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nan_test.cpp
+  DEPENDS
+    libc.hdr.signal_macros
+    libc.src.math.nan
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: The nan tests currently have death tests, which aren't supported for
+  # hermetic tests.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  nanl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nanl_test.cpp
+  DEPENDS
+    libc.hdr.signal_macros
+    libc.src.math.nanl
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: The nan tests currently have death tests, which aren't supported for
+  # hermetic tests.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  nanf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nanf16_test.cpp
+  DEPENDS
+    libc.hdr.signal_macros
+    libc.src.math.nanf16
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: The nan tests currently have death tests, which aren't supported for
+  # hermetic tests.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  nanf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nanf128_test.cpp
+  DEPENDS
+    libc.hdr.signal_macros
+    libc.src.math.nanf128
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: The nan tests currently have death tests, which aren't supported for
+  # hermetic tests.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  nanbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nanbf16_test.cpp
+  DEPENDS
+    libc.hdr.signal_macros
+    libc.src.math.nanbf16
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+  # FIXME: The nan tests currently have death tests, which aren't supported for
+  # hermetic tests.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  nearbyint_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nearbyint_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nearbyint
+)
+
+add_fp_unittest(
+  nearbyintf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nearbyintf_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nearbyintf
+)
+
+add_fp_unittest(
+  nearbyintl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nearbyintl_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nearbyintl
+)
+
+add_fp_unittest(
+  nearbyintf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nearbyintf16_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nearbyintf16
+)
+
+add_fp_unittest(
+  nearbyintf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nearbyintf128_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nearbyintf128
+)
+
+add_fp_unittest(
+  nearbyintbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nearbyintbf16_test.cpp
+  HDRS
+    NearbyIntTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nearbyintbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  nextafter_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextafter_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nextafter
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextafterf_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nextafterf
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextafterl_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nextafterl
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextafterf16_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nextafterf16
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextafterf128_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nextafterf128
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextafterbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextafterbf16_test.cpp
+  HDRS
+    NextAfterTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nextafterbf16
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+# FIXME: These tests are currently spurious for the GPU.
+if(NOT LIBC_TARGET_OS_IS_GPU)
+  add_fp_unittest(
+    nexttoward_test
+    SUITE
+      libc-math-smoke-tests
+    SRCS
+      nexttoward_test.cpp
+    HDRS
+      NextTowardTest.h
+    DEPENDS
+      libc.hdr.fenv_macros
+      libc.src.math.nexttoward
+      libc.src.__support.CPP.bit
+      libc.src.__support.FPUtil.fenv_impl
+      libc.src.__support.FPUtil.fp_bits
+  )
+
+  add_fp_unittest(
+    nexttowardf_test
+    SUITE
+      libc-math-smoke-tests
+    SRCS
+      nexttowardf_test.cpp
+    HDRS
+      NextTowardTest.h
+    DEPENDS
+      libc.hdr.fenv_macros
+      libc.src.math.nexttowardf
+      libc.src.__support.CPP.bit
+      libc.src.__support.FPUtil.fenv_impl
+      libc.src.__support.FPUtil.fp_bits
+  )
+endif()
+
+add_fp_unittest(
+  nexttowardl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nexttowardl_test.cpp
+  HDRS
+    NextTowardTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nexttowardl
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nexttowardf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nexttowardf16_test.cpp
+  HDRS
+    NextTowardTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nexttowardf16
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nexttowardbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nexttowardbf16_test.cpp
+  HDRS
+    NextTowardTest.h
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.nexttowardbf16
+    libc.src.__support.CPP.bit
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  nextdown_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextdown_test.cpp
+  HDRS
+    NextDownTest.h
+  DEPENDS
+    libc.src.math.nextdown
+)
+
+add_fp_unittest(
+  nextdownf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextdownf_test.cpp
+  HDRS
+    NextDownTest.h
+  DEPENDS
+    libc.src.math.nextdownf
+)
+
+add_fp_unittest(
+  nextdownl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextdownl_test.cpp
+  HDRS
+    NextDownTest.h
+  DEPENDS
+    libc.src.math.nextdownl
+)
+
+add_fp_unittest(
+  nextdownf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextdownf16_test.cpp
+  HDRS
+    NextDownTest.h
+  DEPENDS
+    libc.src.math.nextdownf16
+)
+
+add_fp_unittest(
+  nextdownf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextdownf128_test.cpp
+  HDRS
+    NextDownTest.h
+  DEPENDS
+    libc.src.math.nextdownf128
+)
+
+add_fp_unittest(
+  nextdownbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextdownbf16_test.cpp
+  HDRS
+    NextDownTest.h
+  DEPENDS
+    libc.src.math.nextdownbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  nextup_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextup_test.cpp
+  HDRS
+    NextUpTest.h
+  DEPENDS
+    libc.src.math.nextup
+)
+
+add_fp_unittest(
+  nextupf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextupf_test.cpp
+  HDRS
+    NextUpTest.h
+  DEPENDS
+    libc.src.math.nextupf
+)
+
+add_fp_unittest(
+  nextupl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextupl_test.cpp
+  HDRS
+    NextUpTest.h
+  DEPENDS
+    libc.src.math.nextupl
+)
+
+add_fp_unittest(
+  nextupf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextupf16_test.cpp
+  HDRS
+    NextUpTest.h
+  DEPENDS
+    libc.src.math.nextupf16
+)
+
+add_fp_unittest(
+  nextupf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextupf128_test.cpp
+  HDRS
+    NextUpTest.h
+  DEPENDS
+    libc.src.math.nextupf128
+)
+
+add_fp_unittest(
+  nextupbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    nextupbf16_test.cpp
+  HDRS
+    NextUpTest.h
+  DEPENDS
+    libc.src.math.nextupbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+# TODO(lntue): The current implementation of fputil::general::fma<float> is only
+# correctly rounded for the default rounding mode round-to-nearest tie-to-even.
+add_fp_unittest(
+  fmaf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaf_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fmaf
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  fmaf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmaf16_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fmaf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  fmabf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmabf16_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fmabf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  fma_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.fma
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  expm1_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    expm1_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.expm1
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expm1f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    expm1f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.expm1f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  expm1f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    expm1f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.expm1f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  log_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  logf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.logf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  logf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    logf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.logf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  log_bf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log_bf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.log_bf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  log2_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log2_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log2
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log2f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log2f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log2f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log2f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log2f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.log2f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  log10_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log10_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log10
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log10f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log10f_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log10f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log10f16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log10f16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.log10f16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  log1p_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log1p_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log1p
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  log1pf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    log1pf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.log1pf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  fmodf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmodf_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fmodf
+    libc.src.__support.FPUtil.fenv_impl
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  fmod_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmod_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fmod
+    libc.src.__support.FPUtil.fenv_impl
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  fmodl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmodl_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fmodl
+    libc.src.__support.FPUtil.fenv_impl
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  fmodf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmodf16_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fmodf16
+    libc.src.__support.FPUtil.fenv_impl
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  fmodf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmodf128_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fmodf128
+    libc.src.__support.FPUtil.fenv_impl
+  # FIXME: Currently fails on the GPU build.
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  fmodbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fmodbf16_test.cpp
+  HDRS
+    FModTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fmodbf16
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fenv_impl
+  UNIT_TEST_ONLY
+)
+
+add_fp_unittest(
+  coshf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    coshf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.coshf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  coshf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    coshf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.coshf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  sinhf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sinhf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sinhf
+    libc.src.__support.CPP.array
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  sinhf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sinhf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.sinhf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  tanhf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tanhf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.tanhf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  tanhf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tanhf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.tanhf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  atanhf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atanhf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.atanhf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atanhf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atanhf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.atanhf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  atanpif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    atanpif16_test.cpp
+  DEPENDS
+    libc.src.math.atanpif16
+)
+
+add_fp_unittest(
+  asinhf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    asinhf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.asinhf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  asinhf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    asinhf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.asinhf16
+)
+
+add_fp_unittest(
+  asinpif16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    asinpif16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.asinpif16
+)
+
+add_fp_unittest(
+  acoshf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    acoshf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acoshf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  acoshf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    acoshf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acoshf16
+    libc.src.__support.FPUtil.cast
+)
+
+add_fp_unittest(
+  asinf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    asinf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.asinf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  asin_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    asin_test.cpp
+  DEPENDS
+    libc.src.math.asin
+)
+
+add_fp_unittest(
+  asinf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    asinf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.asinf16
+)
+
+add_fp_unittest(
+  acosf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    acosf_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acosf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  acos_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    acos_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.acos
+)
+
+add_fp_unittest(
+  acosf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    acosf16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acosf16
+)
+
+add_fp_unittest(
+  acospif16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    acospif16_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.acospif16
+)
+
+add_fp_unittest(
+  atanf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atanf_test.cpp
+  DEPENDS
+    libc.src.math.atanf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atan_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atan_test.cpp
+  DEPENDS
+    libc.src.math.atan
+)
+
+add_fp_unittest(
+  atanf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atanf16_test.cpp
+  DEPENDS
+    libc.src.math.atanf16
+)
+
+add_fp_unittest(
+  atan2f_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atan2f_test.cpp
+  DEPENDS
+    libc.src.math.atan2f
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  atan2_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atan2_test.cpp
+  DEPENDS
+    libc.src.math.atan2
+)
+
+add_fp_unittest(
+  atan2f128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    atan2f128_test.cpp
+  DEPENDS
+    libc.src.math.atan2f128
+)
+
+add_fp_unittest(
+  scalbln_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbln_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbln
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalblnf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalblnf_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalblnf
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalblnl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalblnl_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalblnl
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalblnf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalblnf16_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalblnf16
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalblnf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalblnf128_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalblnf128
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalblnbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalblnbf16_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalblnbf16
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbn_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbn_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbn
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbnf_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnf
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbnl_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnl
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbnf16_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnf16
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbnf128_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnf128
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  scalbnbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    scalbnbf16_test.cpp
+  HDRS
+    ScalbnTest.h
+  DEPENDS
+    libc.src.math.scalbnbf16
+    libc.src.__support.CPP.limits
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.normal_float
+)
+
+add_fp_unittest(
+  erff_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    erff_test.cpp
+  DEPENDS
+    libc.src.math.erff
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  pow_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    pow_test.cpp
+  DEPENDS
+    libc.hdr.fenv_macros
+    libc.src.math.pow
+)
+
+add_fp_unittest(
+  powf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    powf_test.cpp
+  DEPENDS
+    libc.src.math.powf
+    libc.src.__support.FPUtil.fp_bits
+)
+
+add_fp_unittest(
+  totalorder_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorder_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorder
+)
+
+add_fp_unittest(
+  totalorderf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorderf_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorderf
+)
+
+add_fp_unittest(
+  totalorderl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorderl_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorderl
+)
+
+add_fp_unittest(
+  totalorderf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorderf16_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorderf16
+)
+
+add_fp_unittest(
+  totalorderf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorderf128_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorderf128
+)
+
+add_fp_unittest(
+  totalorderbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalorderbf16_test.cpp
+  HDRS
+    TotalOrderTest.h
+  DEPENDS
+    libc.src.math.totalorderbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  totalordermag_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermag_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermag
+)
+
+add_fp_unittest(
+  totalordermagf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermagf_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermagf
+)
+
+add_fp_unittest(
+  totalordermagl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermagl_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermagl
+)
+
+add_fp_unittest(
+  totalordermagf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermagf16_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermagf16
+)
+
+add_fp_unittest(
+  totalordermagf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermagf128_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermagf128
+)
+
+add_fp_unittest(
+  totalordermagbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    totalordermagbf16_test.cpp
+  HDRS
+    TotalOrderMagTest.h
+  DEPENDS
+    libc.src.math.totalordermagbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  getpayload_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    getpayload_test.cpp
+  HDRS
+    GetPayloadTest.h
+  DEPENDS
+    libc.src.math.getpayload
+)
+
+add_fp_unittest(
+  getpayloadf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    getpayloadf_test.cpp
+  HDRS
+    GetPayloadTest.h
+  DEPENDS
+    libc.src.math.getpayloadf
+)
+
+add_fp_unittest(
+  getpayloadl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    getpayloadl_test.cpp
+  HDRS
+    GetPayloadTest.h
+  DEPENDS
+    libc.src.math.getpayloadl
+)
+
+add_fp_unittest(
+  getpayloadf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    getpayloadf16_test.cpp
+  HDRS
+    GetPayloadTest.h
+  DEPENDS
+    libc.src.math.getpayloadf16
+)
+
+add_fp_unittest(
+  getpayloadf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    getpayloadf128_test.cpp
+  HDRS
+    GetPayloadTest.h
+  DEPENDS
+    libc.src.math.getpayloadf128
+)
+
+add_fp_unittest(
+  getpayloadbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    getpayloadbf16_test.cpp
+  HDRS
+    GetPayloadTest.h
+  DEPENDS
+    libc.src.math.getpayloadbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  setpayload_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayload_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayload
+)
+
+add_fp_unittest(
+  setpayloadf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadf_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayloadf
+)
+
+add_fp_unittest(
+  setpayloadl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadl_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayloadl
+)
+
+add_fp_unittest(
+  setpayloadf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadf16_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayloadf16
+)
+
+add_fp_unittest(
+  setpayloadf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadf128_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayloadf128
+)
+
+add_fp_unittest(
+  setpayloadbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadbf16_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayloadbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  setpayloadsig_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadsig_test.cpp
+  HDRS
+    SetPayloadSigTest.h
+  DEPENDS
+    libc.src.math.setpayloadsig
+)
+
+add_fp_unittest(
+  setpayloadsigf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadsigf_test.cpp
+  HDRS
+    SetPayloadSigTest.h
+  DEPENDS
+    libc.src.math.setpayloadsigf
+)
+
+add_fp_unittest(
+  setpayloadsigl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadsigl_test.cpp
+  HDRS
+    SetPayloadSigTest.h
+  DEPENDS
+    libc.src.math.setpayloadsigl
+)
+
+add_fp_unittest(
+  setpayloadsigf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadsigf16_test.cpp
+  HDRS
+    SetPayloadSigTest.h
+  DEPENDS
+    libc.src.math.setpayloadsigf16
+)
+
+add_fp_unittest(
+  setpayloadsigf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadsigf128_test.cpp
+  HDRS
+    SetPayloadSigTest.h
+  DEPENDS
+    libc.src.math.setpayloadsigf128
+)
+
+add_fp_unittest(
+  setpayloadsigbf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    setpayloadsigbf16_test.cpp
+  HDRS
+    SetPayloadTest.h
+  DEPENDS
+    libc.src.math.setpayloadsigbf16
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  f16add_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16add_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16add
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16addf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16addf_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16addf
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16addl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16addl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16addl
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16addf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16addf128_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16addf128
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16sub_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16sub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16sub
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16subf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16subf_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16subf
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16subl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16subl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16subl
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16subf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16subf128_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16subf128
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  f16div_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16div_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16div
+)
+
+add_fp_unittest(
+  f16divf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16divf_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16divf
+)
+
+add_fp_unittest(
+  f16divl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16divl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16divl
+)
+
+add_fp_unittest(
+  f16divf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16divf128_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.f16divf128
+)
+
+add_fp_unittest(
+  f16fma_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16fma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fma
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  f16fmaf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16fmaf_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fmaf
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  f16fmal_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16fmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fmal
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  f16fmaf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16fmaf128_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.f16fmaf128
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  f16sqrt_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16sqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrt
+)
+
+add_fp_unittest(
+  f16sqrtf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16sqrtf_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrtf
+)
+
+add_fp_unittest(
+  f16sqrtl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16sqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrtl
+)
+
+add_fp_unittest(
+  f16sqrtf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16sqrtf128_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.f16sqrtf128
+)
+
+add_fp_unittest(
+  fdiv_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdiv_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fdiv
+)
+
+add_fp_unittest(
+  fdivl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdivl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fdivl
+)
+
+add_fp_unittest(
+  fdivf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fdivf128_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fdivf128
+)
+
+add_fp_unittest(
+  ffma_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ffma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.ffma
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  ffmal_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ffmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.ffmal
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  ffmaf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ffmaf128_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.src.math.ffmaf128
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  fsqrt_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fsqrt_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.fsqrt
+)
+
+
+add_fp_unittest(
+  fsqrtl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fsqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.fsqrtl
+)
+
+add_fp_unittest(
+  fsqrtf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fsqrtf128_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.fsqrtf128
+)
+
+add_fp_unittest(
+  fsub_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fsub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fsub
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  fsubl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fsubl_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fsubl
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  fsubf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    fsubf128_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.fsubf128
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  dsqrtl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dsqrtl_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.dsqrtl
+)
+
+add_fp_unittest(
+  dsqrtf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dsqrtf128_test.cpp
+  HDRS
+    SqrtTest.h
+  DEPENDS
+    libc.src.math.dsqrtf128
+)
+
+add_fp_unittest(
+  sin_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sin_test.cpp
+  DEPENDS
+    libc.src.math.sin
+)
+
+add_fp_unittest(
+  cos_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cos_test.cpp
+  DEPENDS
+    libc.src.math.cos
+)
+
+add_fp_unittest(
+  sincos_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sincos_test.cpp
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.src.math.sincos
+)
+
+add_fp_unittest(
+  tan_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    tan_test.cpp
+  DEPENDS
+    libc.src.math.tan
+)
+
+add_fp_unittest(
+  cbrtf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cbrtf_test.cpp
+  DEPENDS
+    libc.src.math.cbrtf
+)
+
+add_fp_unittest(
+  cbrt_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    cbrt_test.cpp
+  DEPENDS
+    libc.src.math.cbrt
+)
+
+add_fp_unittest(
+  dmull_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    dmull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.dmull
+)
+
+add_fp_unittest(
+  f16mul_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16mul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.f16mul
+)
+
+add_fp_unittest(
+  f16mulf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16mulf_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.f16mulf
+)
+
+add_fp_unittest(
+  f16mull_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16mull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.f16mull
+)
+
+add_fp_unittest(
+  f16mulf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    f16mulf128_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.math.f16mulf128
+)
+
+add_fp_unittest(
+  daddl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    daddl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.daddl
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  daddf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    daddf128_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.daddf128
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  ddivl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ddivl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.ddivl
+)
+
+add_fp_unittest(
+  ddivf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    ddivf128_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.math.ddivf128
+)
+
+add_fp_unittest(
+  bfloat16_add_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bfloat16_add_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.generic.add_sub
+    libc.src.__support.macros.properties.os
+    libc.src.__support.macros.properties.types
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+)
+
+add_fp_unittest(
+  bfloat16_div_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bfloat16_div_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.bfloat16
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+)
+
+add_fp_unittest(
+  bfloat16_mul_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bfloat16_mul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.basic_operations
+    libc.src.__support.FPUtil.bfloat16
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+)
+
+add_fp_unittest(
+  bfloat16_sub_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bfloat16_sub_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.FPUtil.generic.add_sub
+    libc.src.__support.macros.properties.os
+    libc.src.__support.macros.properties.types
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+)
+
+add_fp_unittest(
+  add_same_type_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    add_same_type_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.generic.add_sub
+    libc.src.__support.macros.properties.os
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  sub_same_type_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    sub_same_type_test.cpp
+  HDRS
+    SubTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.__support.FPUtil.generic.add_sub
+    libc.src.__support.macros.properties.os
+    libc.src.__support.macros.properties.types
+)
+
+add_fp_unittest(
+  bf16add_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16add_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16add
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16addf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16addf_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16addf
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16addl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16addl_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16addl
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16addf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16addf128_test.cpp
+  HDRS
+    AddTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16addf128
+    libc.src.__support.FPUtil.bfloat16
+    libc.src.__support.macros.properties.os
+)
+
+add_fp_unittest(
+  bf16fma_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16fma_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16fma
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fmaf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16fmaf_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16fmaf
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fmal_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16fmal_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16fmal
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16fmaf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16fmaf128_test.cpp
+  HDRS
+    FmaTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16fmaf128
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16div_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16div_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16div
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16divf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16divf_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16divf
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16divl_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16divl_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16divl
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16divf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16divf128_test.cpp
+  HDRS
+    DivTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16divf128
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mul_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16mul_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16mul
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mulf_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16mulf_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16mulf
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mull_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16mull_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16mull
+    libc.src.__support.FPUtil.bfloat16
+)
+
+add_fp_unittest(
+  bf16mulf128_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    bf16mulf128_test.cpp
+  HDRS
+    MulTest.h
+  DEPENDS
+    libc.hdr.errno_macros
+    libc.hdr.fenv_macros
+    libc.src.math.bf16mulf128
+    libc.src.__support.FPUtil.bfloat16
+)
+
+
 add_fp_unittest(
   bf16sub_test
   SUITE
diff --git a/libc/test/src/math/smoke/fmabf16_test.cpp b/libc/test/src/math/smoke/fmabf16_test.cpp
new file mode 100644
index 0000000000000..4b1ececf40d74
--- /dev/null
+++ b/libc/test/src/math/smoke/fmabf16_test.cpp
@@ -0,0 +1,14 @@
+//===-- Unittests for fmabf16 ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "FmaTest.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/fmabf16.h"
+
+LIST_FMA_TESTS(bfloat16, LIBC_NAMESPACE::fmabf16)

>From 210f29fac5472365f1a448424237e03427557e9e Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 9 Feb 2026 18:46:46 +0530
Subject: [PATCH 02/50] crlf-lf 2

---
 libc/config/darwin/aarch64/entrypoints.txt |   3 +
 libc/config/darwin/x86_64/entrypoints.txt  | 622 ++++++++++-----------
 libc/config/linux/arm/entrypoints.txt      |   3 +
 3 files changed, 317 insertions(+), 311 deletions(-)

diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 082afc196356d..aebfd4ec13376 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -102,6 +102,7 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
+<<<<<<< HEAD
     libc.src.wctype.iswdigit
 )
 
@@ -852,6 +853,8 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
+=======
+>>>>>>> 868c4689fec2 (crlf-lf 2)
 )
 
 if(LLVM_LIBC_FULL_BUILD)
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index d27510602df62..13e92f75d020f 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -1,311 +1,311 @@
-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
-
-    # search.h entrypoints
-    libc.src.search.lfind
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strchrnul
-    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
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bzero
-
-    # 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.memalignment
-    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.free
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # fenv disabled on x86_64 MacOS for now.
-    # # 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.fesetexcept
-    # libc.src.fenv.fesetexceptflag
-    # libc.src.fenv.fesetround
-    # libc.src.fenv.feraiseexcept
-    # libc.src.fenv.fetestexcept
-    # libc.src.fenv.fetestexceptflag
-    # libc.src.fenv.feupdateenv
-
-    ## Currently disabled for failing tests.
-    # math.h entrypoints
-    #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.coshf
-    #libc.src.math.cosf
-    #libc.src.math.daddl
-    #libc.src.math.ddivl
-    #libc.src.math.dfmal
-    #libc.src.math.dsqrtl
-    #libc.src.math.dsubl
-    #libc.src.math.expf
-    #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.fdiv
-    #libc.src.math.fdivl
-    #libc.src.math.ffma
-    #libc.src.math.ffmal
-    #libc.src.math.floor
-    #libc.src.math.floorf
-    #libc.src.math.floorl
-    #libc.src.math.fma
-    #libc.src.math.fmabf16
-    #libc.src.math.fmaf
-    #libc.src.math.fmax
-    #libc.src.math.fmaxf
-    #libc.src.math.fmaxl
-    #libc.src.math.fmin
-    #libc.src.math.fminf
-    #libc.src.math.fminl
-    #libc.src.math.fmod
-    #libc.src.math.fmodf
-    #libc.src.math.frexp
-    #libc.src.math.frexpf
-    #libc.src.math.frexpl
-    #libc.src.math.fsub
-    #libc.src.math.fsubl
-    #libc.src.math.hypot
-    #libc.src.math.hypotf
-    #libc.src.math.ilogb
-    #libc.src.math.ilogbf
-    #libc.src.math.ilogbl
-    #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.lrint
-    #libc.src.math.lrintf
-    #libc.src.math.lrintl
-    #libc.src.math.lround
-    #libc.src.math.lroundf
-    #libc.src.math.lroundl
-    #libc.src.math.ldexp
-    #libc.src.math.ldexpf
-    #libc.src.math.ldexpl
-    #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.modf
-    #libc.src.math.modff
-    #libc.src.math.modfl
-    #libc.src.math.nan
-    #libc.src.math.nanf
-    #libc.src.math.nanl
-    #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.nexttoward
-    #libc.src.math.nexttowardf
-    #libc.src.math.nexttowardl
-    #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.sincosf
-    #libc.src.math.sinhf
-    #libc.src.math.sinf
-    #libc.src.math.sqrt
-    #libc.src.math.sqrtf
-    #libc.src.math.sqrtl
-    #libc.src.math.tanf
-    #libc.src.math.tanhf
-    #libc.src.math.totalordermag
-    #libc.src.math.totalordermagf
-    #libc.src.math.totalordermagl
-    #libc.src.math.trunc
-    #libc.src.math.truncf
-    #libc.src.math.truncl
-)
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
+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
+
+    # search.h entrypoints
+    libc.src.search.lfind
+
+    # string.h entrypoints
+    libc.src.string.memccpy
+    libc.src.string.memchr
+    libc.src.string.memcmp
+    libc.src.string.memcpy
+    libc.src.string.memmem
+    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.strchrnul
+    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
+
+    # strings.h entrypoints
+    libc.src.strings.bcmp
+    libc.src.strings.bzero
+
+    # 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.memalignment
+    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.free
+)
+
+set(TARGET_LIBM_ENTRYPOINTS
+    # fenv disabled on x86_64 MacOS for now.
+    # # 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.fesetexcept
+    # libc.src.fenv.fesetexceptflag
+    # libc.src.fenv.fesetround
+    # libc.src.fenv.feraiseexcept
+    # libc.src.fenv.fetestexcept
+    # libc.src.fenv.fetestexceptflag
+    # libc.src.fenv.feupdateenv
+
+    ## Currently disabled for failing tests.
+    # math.h entrypoints
+    #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.coshf
+    #libc.src.math.cosf
+    #libc.src.math.daddl
+    #libc.src.math.ddivl
+    #libc.src.math.dfmal
+    #libc.src.math.dsqrtl
+    #libc.src.math.dsubl
+    #libc.src.math.expf
+    #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.fdiv
+    #libc.src.math.fdivl
+    #libc.src.math.ffma
+    #libc.src.math.ffmal
+    #libc.src.math.floor
+    #libc.src.math.floorf
+    #libc.src.math.floorl
+    #libc.src.math.fma
+    #libc.src.math.fmabf16
+    #libc.src.math.fmaf
+    #libc.src.math.fmax
+    #libc.src.math.fmaxf
+    #libc.src.math.fmaxl
+    #libc.src.math.fmin
+    #libc.src.math.fminf
+    #libc.src.math.fminl
+    #libc.src.math.fmod
+    #libc.src.math.fmodf
+    #libc.src.math.frexp
+    #libc.src.math.frexpf
+    #libc.src.math.frexpl
+    #libc.src.math.fsub
+    #libc.src.math.fsubl
+    #libc.src.math.hypot
+    #libc.src.math.hypotf
+    #libc.src.math.ilogb
+    #libc.src.math.ilogbf
+    #libc.src.math.ilogbl
+    #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.lrint
+    #libc.src.math.lrintf
+    #libc.src.math.lrintl
+    #libc.src.math.lround
+    #libc.src.math.lroundf
+    #libc.src.math.lroundl
+    #libc.src.math.ldexp
+    #libc.src.math.ldexpf
+    #libc.src.math.ldexpl
+    #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.modf
+    #libc.src.math.modff
+    #libc.src.math.modfl
+    #libc.src.math.nan
+    #libc.src.math.nanf
+    #libc.src.math.nanl
+    #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.nexttoward
+    #libc.src.math.nexttowardf
+    #libc.src.math.nexttowardl
+    #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.sincosf
+    #libc.src.math.sinhf
+    #libc.src.math.sinf
+    #libc.src.math.sqrt
+    #libc.src.math.sqrtf
+    #libc.src.math.sqrtl
+    #libc.src.math.tanf
+    #libc.src.math.tanhf
+    #libc.src.math.totalordermag
+    #libc.src.math.totalordermagf
+    #libc.src.math.totalordermagl
+    #libc.src.math.trunc
+    #libc.src.math.truncf
+    #libc.src.math.truncl
+)
+
+list(APPEND TARGET_LIBM_ENTRYPOINTS
+  # bfloat16 entrypoints
+  libc.src.math.bf16add
+  libc.src.math.bf16addf
+  libc.src.math.bf16addl
+  libc.src.math.bf16div
+  libc.src.math.bf16divf
+  libc.src.math.bf16divl
+  libc.src.math.bf16fma
+  libc.src.math.bf16fmaf
+  libc.src.math.bf16fmal
+  libc.src.math.bf16mul
+  libc.src.math.bf16mulf
+  libc.src.math.bf16mull
+  libc.src.math.bf16sub
+  libc.src.math.bf16subf
+  libc.src.math.bf16subl
+  libc.src.math.canonicalizebf16
+  libc.src.math.ceilbf16
+  libc.src.math.copysignbf16
+  libc.src.math.fabsbf16
+  libc.src.math.fdimbf16
+  libc.src.math.floorbf16
+  libc.src.math.fmaxbf16
+  libc.src.math.fmaximumbf16
+  libc.src.math.fmaximum_magbf16
+  libc.src.math.fmaximum_mag_numbf16
+  libc.src.math.fmaximum_numbf16
+  libc.src.math.fminbf16
+  libc.src.math.fminimumbf16
+  libc.src.math.fminimum_magbf16
+  libc.src.math.fminimum_mag_numbf16
+  libc.src.math.fminimum_numbf16
+  libc.src.math.fmodbf16
+  libc.src.math.frexpbf16
+  libc.src.math.fromfpbf16
+  libc.src.math.fromfpxbf16
+  libc.src.math.getpayloadbf16
+  libc.src.math.ilogbbf16
+  libc.src.math.iscanonicalbf16
+  libc.src.math.issignalingbf16
+  libc.src.math.ldexpbf16
+  libc.src.math.llogbbf16
+  libc.src.math.llrintbf16
+  libc.src.math.llroundbf16
+  libc.src.math.log_bf16
+  libc.src.math.logbbf16
+  libc.src.math.lrintbf16
+  libc.src.math.lroundbf16
+  libc.src.math.modfbf16
+  libc.src.math.nanbf16
+  libc.src.math.nearbyintbf16
+  libc.src.math.nextafterbf16
+  libc.src.math.nextdownbf16
+  libc.src.math.nexttowardbf16
+  libc.src.math.nextupbf16
+  libc.src.math.remainderbf16
+  libc.src.math.remquobf16
+  libc.src.math.rintbf16
+  libc.src.math.roundbf16
+  libc.src.math.roundevenbf16
+  libc.src.math.scalblnbf16
+  libc.src.math.scalbnbf16
+  libc.src.math.setpayloadbf16
+  libc.src.math.setpayloadsigbf16
+  libc.src.math.sqrtbf16
+  libc.src.math.truncbf16
+  libc.src.math.totalorderbf16
+  libc.src.math.totalordermagbf16
+  libc.src.math.ufromfpbf16
+  libc.src.math.ufromfpxbf16
+)
+
+set(TARGET_LLVMLIBC_ENTRYPOINTS
+  ${TARGET_LIBC_ENTRYPOINTS}
+  ${TARGET_LIBM_ENTRYPOINTS}
+)
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 9c298499fda36..024c41cfcaf79 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -194,6 +194,7 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
+<<<<<<< HEAD
     libc.src.wctype.iswdigit
 )
 
@@ -734,6 +735,8 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
+=======
+>>>>>>> 868c4689fec2 (crlf-lf 2)
 )
 
 if(LLVM_LIBC_FULL_BUILD)

>From 729d30b0a600bed3bddb10442b250684b9e31cb9 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 9 Feb 2026 18:49:19 +0530
Subject: [PATCH 03/50] crlf-lf

---
 libc/src/math/ffmal.h | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/libc/src/math/ffmal.h b/libc/src/math/ffmal.h
index 1cbb61dcd2134..75fd40a0a92a2 100644
--- a/libc/src/math/ffmal.h
+++ b/libc/src/math/ffmal.h
@@ -1,20 +1,20 @@
-//===-- Implementation header for ffmal -------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_SRC_MATH_FFMAL_H
-#define LLVM_LIBC_SRC_MATH_FFMAL_H
-
-#include "src/__support/macros/config.h"
-
-namespace LIBC_NAMESPACE_DECL {
-
-float ffmal(long double x, long double y, long double z);
-
-} // namespace LIBC_NAMESPACE_DECL
-
-#endif // LLVM_LIBC_SRC_MATH_FFMAL_H
+//===-- Implementation header for ffmal -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_FFMAL_H
+#define LLVM_LIBC_SRC_MATH_FFMAL_H
+
+#include "src/__support/macros/config.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+float ffmal(long double x, long double y, long double z);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_FFMAL_H

>From 73919bd9a613a81969fcbcb40b6bf4e964a7d898 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 9 Feb 2026 18:50:42 +0530
Subject: [PATCH 04/50] crlf->lf 4

---
 libc/test/src/math/CMakeLists.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index 82fdc874b36f5..c6bb38922191b 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -5497,7 +5497,11 @@ add_fp_unittest(
   DEPENDS
     libc.src.math.fmabf16
     libc.src.stdlib.rand
+<<<<<<< HEAD
     libc.src.stdlib.srand
+=======
+    libc.src.stdlib.srandq
+>>>>>>> 2ee10dd30003 (crlf->lf 4)
     libc.src.__support.FPUtil.bfloat16
 )
 

>From 357bff82bf4200c8634b29e097eae47eca346406 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 9 Feb 2026 18:52:11 +0530
Subject: [PATCH 05/50] crl->lf 5

---
 libc/test/src/math/bf16mul_test.cpp | 30 ++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/libc/test/src/math/bf16mul_test.cpp b/libc/test/src/math/bf16mul_test.cpp
index 76bd3dba42566..3682705556b0a 100644
--- a/libc/test/src/math/bf16mul_test.cpp
+++ b/libc/test/src/math/bf16mul_test.cpp
@@ -1,15 +1,15 @@
-//===-- Unittests for bf16mul ---------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "MulTest.h"
-
-#include "src/math/bf16mul.h"
-
-#include "src/__support/FPUtil/bfloat16.h"
-
-LIST_MUL_TESTS(bfloat16, double, LIBC_NAMESPACE::bf16mul)
+//===-- Unittests for bf16mul ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "MulTest.h"
+
+#include "src/math/bf16mul.h"
+
+#include "src/__support/FPUtil/bfloat16.h"
+
+LIST_MUL_TESTS(bfloat16, double, LIBC_NAMESPACE::bf16mul)

>From 8e9a197b99a34021d85e276d13ce5047f4417a39 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 14 Feb 2026 11:29:49 +0530
Subject: [PATCH 06/50] other than smoke test

---
 libc/test/src/math/fmabf16_test.cpp | 50 +++++++++++++++--------------
 libc/test/src/math/sqrt_test.cpp    | 26 +++++++--------
 2 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index ae01948c21ca5..033d864d4aa8a 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -1,29 +1,31 @@
-// //===-- Exhaustive test for fmabf16 ---------------------------------------===//
-// //
-// // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// // See https://llvm.org/LICENSE.txt for license information.
-// // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-// //
-// //===----------------------------------------------------------------------===//
+//===-- Exhaustive test for fmabf16 ---------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
 
-// #include "src/__support/FPUtil/bfloat16.h"
-// #include "src/math/fmabf16.h"
-// #include "test/UnitTest/FPMatcher.h"
-// #include "test/UnitTest/Test.h"
-// #include "utils/MPFRWrapper/MPFRUtils.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/fmabf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "test/UnitTest/Test.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
 
-// using LlvmLibcFmabf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
+using LlvmLibcFmabf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
 
-// namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
 
-// // range: [0, inf]
-// static constexpr uint16_t POS_START = 0x0000U;
-// static constexpr uint16_t POS_STOP = 0x7f80U;
+// range: [0, inf]
+static constexpr uint16_t POS_START = 0x0000U;
+static constexpr uint16_t POS_STOP = 0x7f80U;
+
+// cover 
+// normal
+//subnormal 
+// NaN +-
+// inf +-
+// 0 +-
+
+// something better than smoke tests -> uses FmaTest.h 
 
-// TEST_F(LlvmLibcSqrtf16Test, PositiveRange) {
-//   for (uint16_t v = POS_START; v <= POS_STOP; ++v) {
-//     bfloat16 x = FPBits(v).get_val();
-//     EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Sqrt, x,
-//                                    LIBC_NAMESPACE::sqrtbf16(x), 0.5);
-//   }
-// }
diff --git a/libc/test/src/math/sqrt_test.cpp b/libc/test/src/math/sqrt_test.cpp
index 1551b31d6f715..3eebc38fe5f4d 100644
--- a/libc/test/src/math/sqrt_test.cpp
+++ b/libc/test/src/math/sqrt_test.cpp
@@ -1,13 +1,13 @@
-//===-- Unittests for sqrt ------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "SqrtTest.h"
-
-#include "src/math/sqrt.h"
-
-LIST_SQRT_TESTS(double, LIBC_NAMESPACE::sqrt)
+//===-- Unittests for sqrt ------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "SqrtTest.h"
+
+#include "src/math/sqrt.h"
+
+LIST_SQRT_TESTS(double, LIBC_NAMESPACE::sqrt)

>From 162ce5da55448e9833be2975fa112fb7c42d19bf Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 21 Feb 2026 17:25:21 +0530
Subject: [PATCH 07/50] added exhaustive tests for fmabf16 (<2^32)

---
 libc/test/src/math/fmabf16_test.cpp  |   87 +-
 libc/utils/MPFRWrapper/MPFRUtils.cpp | 1696 +++++++++++++-------------
 2 files changed, 927 insertions(+), 856 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 033d864d4aa8a..ed2349f10e799 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -6,13 +6,14 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include <vector>
 #include "src/__support/FPUtil/bfloat16.h"
 #include "src/math/fmabf16.h"
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
 #include "utils/MPFRWrapper/MPFRUtils.h"
 
-using LlvmLibcFmabf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
+using LlvmLibcFmaBf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
 
 namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
 
@@ -20,12 +21,82 @@ namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
 static constexpr uint16_t POS_START = 0x0000U;
 static constexpr uint16_t POS_STOP = 0x7f80U;
 
-// cover 
-// normal
-//subnormal 
-// NaN +-
-// inf +-
-// 0 +-
+// range: [-0, -inf]
+static constexpr uint16_t NEG_START = 0x8000U;
+static constexpr uint16_t NEG_STOP = 0xff80U; //-inf
 
-// something better than smoke tests -> uses FmaTest.h 
+//covers normal range since special cases covered in unit tests 
 
+
+
+TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
+  
+  std::vector<bfloat16> z_val = {
+      FPBits(0x0000).get_val(),
+      FPBits(0x8000).get_val(),
+      FPBits(0x3f80).get_val(),
+      FPBits(0xbf80).get_val(),
+      FPBits::min_subnormal().get_val(),
+      FPBits::max_normal().get_val(),
+      FPBits::inf().get_val(),
+      FPBits::quiet_nan().get_val()
+  };
+  for(bfloat16 z : z_val){
+    for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
+      for(uint16_t v2 = POS_START; v2<= POS_STOP; v2+=256) {
+      
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }  
+    }
+  }
+}
+
+TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
+  
+  std::vector<bfloat16> z_val = {
+      FPBits(0x0000).get_val(),
+      FPBits(0x8000).get_val(),
+      FPBits(0x3f80).get_val(),
+      FPBits(0xbf80).get_val(),
+      FPBits::min_subnormal().get_val(),
+      FPBits::max_normal().get_val(),
+      FPBits::inf().get_val(),
+      FPBits::quiet_nan().get_val()
+  };
+  for(bfloat16 z : z_val){
+    for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
+      for(uint16_t v2 = NEG_START; v2<= NEG_STOP; v2+=256) {
+      
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }  
+    }
+  }
+}
+TEST_F(LlvmLibcFmaBf16Test, CancellationTest) {
+
+  for (uint16_t v1 = 0; v1 <= 0xFFFF; v1 += 13) {
+    for (uint16_t v2 = 0; v2 <= 0xFFFF; v2 += 17) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      bfloat16 z = -(x * y);
+
+      mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+  }
+}
+}
\ No newline at end of file
diff --git a/libc/utils/MPFRWrapper/MPFRUtils.cpp b/libc/utils/MPFRWrapper/MPFRUtils.cpp
index a7d307b47c3e8..98e4480543edb 100644
--- a/libc/utils/MPFRWrapper/MPFRUtils.cpp
+++ b/libc/utils/MPFRWrapper/MPFRUtils.cpp
@@ -1,848 +1,848 @@
-//===-- Utils which wrap MPFR ---------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "MPFRUtils.h"
-#include "MPCommon.h"
-
-#include "src/__support/CPP/array.h"
-#include "src/__support/CPP/stringstream.h"
-#include "src/__support/FPUtil/bfloat16.h"
-#include "src/__support/FPUtil/fpbits_str.h"
-#include "src/__support/macros/config.h"
-#include "src/__support/macros/properties/types.h"
-
-namespace LIBC_NAMESPACE_DECL {
-namespace testing {
-namespace mpfr {
-namespace internal {
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-unary_operation(Operation op, InputType input, unsigned int precision,
-                RoundingMode rounding) {
-  MPFRNumber mpfrInput(input, precision, rounding);
-  switch (op) {
-  case Operation::Abs:
-    return mpfrInput.abs();
-  case Operation::Acos:
-    return mpfrInput.acos();
-  case Operation::Acosh:
-    return mpfrInput.acosh();
-  case Operation::Acospi:
-    return mpfrInput.acospi();
-  case Operation::Asin:
-    return mpfrInput.asin();
-  case Operation::Asinh:
-    return mpfrInput.asinh();
-  case Operation::Asinpi:
-    return mpfrInput.asinpi();
-  case Operation::Atan:
-    return mpfrInput.atan();
-  case Operation::Atanh:
-    return mpfrInput.atanh();
-  case Operation::Atanpi:
-    return mpfrInput.atanpi();
-  case Operation::Cbrt:
-    return mpfrInput.cbrt();
-  case Operation::Ceil:
-    return mpfrInput.ceil();
-  case Operation::Cos:
-    return mpfrInput.cos();
-  case Operation::Cosh:
-    return mpfrInput.cosh();
-  case Operation::Cospi:
-    return mpfrInput.cospi();
-  case Operation::Erf:
-    return mpfrInput.erf();
-  case Operation::Exp:
-    return mpfrInput.exp();
-  case Operation::Exp2:
-    return mpfrInput.exp2();
-  case Operation::Exp2m1:
-    return mpfrInput.exp2m1();
-  case Operation::Exp10:
-    return mpfrInput.exp10();
-  case Operation::Exp10m1:
-    return mpfrInput.exp10m1();
-  case Operation::Expm1:
-    return mpfrInput.expm1();
-  case Operation::Floor:
-    return mpfrInput.floor();
-  case Operation::Log:
-    return mpfrInput.log();
-  case Operation::Log2:
-    return mpfrInput.log2();
-  case Operation::Log10:
-    return mpfrInput.log10();
-  case Operation::Log1p:
-    return mpfrInput.log1p();
-  case Operation::Mod2PI:
-    return mpfrInput.mod_2pi();
-  case Operation::ModPIOver2:
-    return mpfrInput.mod_pi_over_2();
-  case Operation::ModPIOver4:
-    return mpfrInput.mod_pi_over_4();
-  case Operation::Round:
-    return mpfrInput.round();
-  case Operation::RoundEven:
-    return mpfrInput.roundeven();
-  case Operation::Rsqrt:
-    return mpfrInput.rsqrt();
-  case Operation::Sin:
-    return mpfrInput.sin();
-  case Operation::Sinpi:
-    return mpfrInput.sinpi();
-  case Operation::Sinh:
-    return mpfrInput.sinh();
-  case Operation::Sqrt:
-    return mpfrInput.sqrt();
-  case Operation::Tan:
-    return mpfrInput.tan();
-  case Operation::Tanh:
-    return mpfrInput.tanh();
-  case Operation::Tanpi:
-    return mpfrInput.tanpi();
-  case Operation::Trunc:
-    return mpfrInput.trunc();
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-unary_operation_two_outputs(Operation op, InputType input, int &output,
-                            unsigned int precision, RoundingMode rounding) {
-  MPFRNumber mpfrInput(input, precision, rounding);
-  switch (op) {
-  case Operation::Frexp:
-    return mpfrInput.frexp(output);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-binary_operation_one_output(Operation op, InputType x, InputType y,
-                            unsigned int precision, RoundingMode rounding) {
-  MPFRNumber inputX(x, precision, rounding);
-  MPFRNumber inputY(y, precision, rounding);
-  switch (op) {
-  case Operation::Add:
-    return inputX.add(inputY);
-  case Operation::Atan2:
-    return inputX.atan2(inputY);
-  case Operation::Div:
-    return inputX.div(inputY);
-  case Operation::Fmod:
-    return inputX.fmod(inputY);
-  case Operation::Hypot:
-    return inputX.hypot(inputY);
-  case Operation::Mul:
-    return inputX.mul(inputY);
-  case Operation::Pow:
-    return inputX.pow(inputY);
-  case Operation::Sub:
-    return inputX.sub(inputY);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-binary_operation_two_outputs(Operation op, InputType x, InputType y,
-                             int &output, unsigned int precision,
-                             RoundingMode rounding) {
-  MPFRNumber inputX(x, precision, rounding);
-  MPFRNumber inputY(y, precision, rounding);
-  switch (op) {
-  case Operation::RemQuo:
-    return inputX.remquo(inputY, output);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-ternary_operation_one_output(Operation op, InputType x, InputType y,
-                             InputType z, unsigned int precision,
-                             RoundingMode rounding) {
-  // For FMA function, we just need to compare with the mpfr_fma with the same
-  // precision as InputType.  Using higher precision as the intermediate results
-  // to compare might incorrectly fail due to double-rounding errors.
-  MPFRNumber inputX(x, precision, rounding);
-  MPFRNumber inputY(y, precision, rounding);
-  MPFRNumber inputZ(z, precision, rounding);
-  switch (op) {
-  case Operation::Fma:
-    return inputX.fma(inputY, inputZ);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-// Remark: For all the explain_*_error functions, we will use std::stringstream
-// to build the complete error messages before sending it to the outstream `OS`
-// once at the end.  This will stop the error messages from interleaving when
-// the tests are running concurrently.
-template <typename InputType, typename OutputType>
-void explain_unary_operation_single_output_error(Operation op, InputType input,
-                                                 OutputType matchValue,
-                                                 double ulp_tolerance,
-                                                 RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfrInput(input, precision);
-  MPFRNumber mpfr_result;
-  mpfr_result = unary_operation(op, input, precision, rounding);
-  MPFRNumber mpfrMatchValue(matchValue);
-  cpp::array<char, 1024> msg_buf;
-  cpp::StringStream msg(msg_buf);
-  msg << "Match value not within tolerance value of MPFR result:\n"
-      << "  Input decimal: " << mpfrInput.str() << '\n';
-  msg << "     Input bits: " << str(FPBits<InputType>(input)) << '\n';
-  msg << '\n' << "  Match decimal: " << mpfrMatchValue.str() << '\n';
-  msg << "     Match bits: " << str(FPBits<OutputType>(matchValue)) << '\n';
-  msg << '\n' << "    MPFR result: " << mpfr_result.str() << '\n';
-  msg << "   MPFR rounded: "
-      << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
-  msg << '\n';
-  msg << "      ULP error: " << mpfr_result.ulp_as_mpfr_number(matchValue).str()
-      << '\n';
-  if (msg.overflow())
-    __builtin_unreachable();
-  tlog << msg.str();
-}
-
-template void explain_unary_operation_single_output_error(Operation op, float,
-                                                          float, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, double,
-                                                          double, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double,
-                                                          long double, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, double,
-                                                          float, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double, float,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double, double,
-                                                          double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template void explain_unary_operation_single_output_error(Operation op, float16,
-                                                          float16, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, float,
-                                                          float16, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, double,
-                                                          float16, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double, float16,
-                                                          double, RoundingMode);
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, float16,
-                                                          double, RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, float128,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, float,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, double,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, long double,
-                                                          double, RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          bfloat16, bfloat16,
-                                                          double, RoundingMode);
-
-template <typename T>
-void explain_unary_operation_two_outputs_error(
-    Operation op, T input, const BinaryOutput<T> &libc_result,
-    double ulp_tolerance, RoundingMode rounding) {
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfrInput(input, precision);
-  int mpfrIntResult;
-  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
-                                                       precision, rounding);
-
-  if (mpfrIntResult != libc_result.i) {
-    tlog << "MPFR integral result: " << mpfrIntResult << '\n'
-         << "Libc integral result: " << libc_result.i << '\n';
-  } else {
-    tlog << "Integral result from libc matches integral result from MPFR.\n";
-  }
-
-  MPFRNumber mpfrMatchValue(libc_result.f);
-  tlog
-      << "Libc floating point result is not within tolerance value of the MPFR "
-      << "result.\n\n";
-
-  tlog << "            Input decimal: " << mpfrInput.str() << "\n\n";
-
-  tlog << "Libc floating point value: " << mpfrMatchValue.str() << '\n';
-  tlog << " Libc floating point bits: " << str(FPBits<T>(libc_result.f))
-       << '\n';
-  tlog << "\n\n";
-
-  tlog << "              MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "             MPFR rounded: " << str(FPBits<T>(mpfr_result.as<T>()))
-       << '\n';
-  tlog << '\n'
-       << "                ULP error: "
-       << mpfr_result.ulp_as_mpfr_number(libc_result.f).str() << '\n';
-}
-
-template void explain_unary_operation_two_outputs_error<float>(
-    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
-template void explain_unary_operation_two_outputs_error<double>(
-    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
-template void explain_unary_operation_two_outputs_error<long double>(
-    Operation, long double, const BinaryOutput<long double> &, double,
-    RoundingMode);
-
-template <typename T>
-void explain_binary_operation_two_outputs_error(
-    Operation op, const BinaryInput<T> &input,
-    const BinaryOutput<T> &libc_result, double ulp_tolerance,
-    RoundingMode rounding) {
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfrX(input.x, precision);
-  MPFRNumber mpfrY(input.y, precision);
-  int mpfrIntResult;
-  MPFRNumber mpfr_result = binary_operation_two_outputs(
-      op, input.x, input.y, mpfrIntResult, precision, rounding);
-  MPFRNumber mpfrMatchValue(libc_result.f);
-
-  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n'
-       << "MPFR integral result: " << mpfrIntResult << '\n'
-       << "Libc integral result: " << libc_result.i << '\n'
-       << "Libc floating point result: " << mpfrMatchValue.str() << '\n'
-       << "               MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "Libc floating point result bits: " << str(FPBits<T>(libc_result.f))
-       << '\n';
-  tlog << "              MPFR rounded bits: "
-       << str(FPBits<T>(mpfr_result.as<T>())) << '\n';
-  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result.f).str()
-       << '\n';
-}
-
-template void explain_binary_operation_two_outputs_error<float>(
-    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
-    RoundingMode);
-template void explain_binary_operation_two_outputs_error<double>(
-    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
-    double, RoundingMode);
-template void explain_binary_operation_two_outputs_error<long double>(
-    Operation, const BinaryInput<long double> &,
-    const BinaryOutput<long double> &, double, RoundingMode);
-
-template <typename InputType, typename OutputType>
-void explain_binary_operation_one_output_error(
-    Operation op, const BinaryInput<InputType> &input, OutputType libc_result,
-    double ulp_tolerance, RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfrX(input.x, precision);
-  MPFRNumber mpfrY(input.y, precision);
-  FPBits<InputType> xbits(input.x);
-  FPBits<InputType> ybits(input.y);
-  MPFRNumber mpfr_result =
-      binary_operation_one_output(op, input.x, input.y, precision, rounding);
-  MPFRNumber mpfrMatchValue(libc_result);
-
-  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n';
-  tlog << "First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
-  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
-
-  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
-       << "MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "Libc floating point result bits: "
-       << str(FPBits<OutputType>(libc_result)) << '\n';
-  tlog << "              MPFR rounded bits: "
-       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
-  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
-       << '\n';
-}
-
-template void
-explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
-                                          float, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, float, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, double, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<long double> &, float, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<long double> &, double, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation,
-                                          const BinaryInput<long double> &,
-                                          long double, double, RoundingMode);
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<float16> &, float16, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
-                                          float16, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, float16, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<long double> &, float16, double, RoundingMode);
-#endif
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<float128> &, float128, double, RoundingMode);
-#endif
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<bfloat16> &, bfloat16, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
-                                          bfloat16, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, bfloat16, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation,
-                                          const BinaryInput<long double> &,
-                                          bfloat16, double, RoundingMode);
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<float128> &, bfloat16, double, RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-
-template <typename InputType, typename OutputType>
-void explain_ternary_operation_one_output_error(
-    Operation op, const TernaryInput<InputType> &input, OutputType libc_result,
-    double ulp_tolerance, RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfrX(input.x, precision);
-  MPFRNumber mpfrY(input.y, precision);
-  MPFRNumber mpfrZ(input.z, precision);
-  FPBits<InputType> xbits(input.x);
-  FPBits<InputType> ybits(input.y);
-  FPBits<InputType> zbits(input.z);
-  MPFRNumber mpfr_result = ternary_operation_one_output(
-      op, input.x, input.y, input.z, precision, rounding);
-  MPFRNumber mpfrMatchValue(libc_result);
-
-  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str()
-       << " z: " << mpfrZ.str() << '\n';
-  tlog << " First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
-  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
-  tlog << " Third input bits: " << str(FPBits<InputType>(input.z)) << '\n';
-
-  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
-       << "MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "Libc floating point result bits: "
-       << str(FPBits<OutputType>(libc_result)) << '\n';
-  tlog << "              MPFR rounded bits: "
-       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
-  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
-       << '\n';
-}
-
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float> &, float, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, float, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, double, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
-template void
-explain_ternary_operation_one_output_error(Operation,
-                                           const TernaryInput<long double> &,
-                                           long double, double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float16> &, float16, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float> &, float16, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, float16, double, RoundingMode);
-template void
-explain_ternary_operation_one_output_error(Operation,
-                                           const TernaryInput<long double> &,
-                                           float16, double, RoundingMode);
-#endif
-
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float> &, bfloat16, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, bfloat16, double, RoundingMode);
-template void
-explain_ternary_operation_one_output_error(Operation,
-                                           const TernaryInput<long double> &,
-                                           bfloat16, double, RoundingMode);
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float128> &, bfloat16, double, RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-
-template <typename InputType, typename OutputType>
-bool compare_unary_operation_single_output(Operation op, InputType input,
-                                           OutputType libc_result,
-                                           double ulp_tolerance,
-                                           RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfr_result;
-  mpfr_result = unary_operation(op, input, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result);
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_unary_operation_single_output(Operation, float, float,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, double, double,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    long double, double,
-                                                    RoundingMode);
-template bool compare_unary_operation_single_output(Operation, double, float,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    float, double,
-                                                    RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    double, double,
-                                                    RoundingMode);
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool compare_unary_operation_single_output(Operation, float16, float16,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float, float16,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, double, float16,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    float16, double,
-                                                    RoundingMode);
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool compare_unary_operation_single_output(Operation, float128,
-                                                    float16, double,
-                                                    RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool compare_unary_operation_single_output(Operation, float128,
-                                                    float128, double,
-                                                    RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float128, float,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float128, double,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float128,
-                                                    long double, double,
-                                                    RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool compare_unary_operation_single_output(Operation, bfloat16,
-                                                    bfloat16, double,
-                                                    RoundingMode);
-
-template <typename T>
-bool compare_unary_operation_two_outputs(Operation op, T input,
-                                         const BinaryOutput<T> &libc_result,
-                                         double ulp_tolerance,
-                                         RoundingMode rounding) {
-  int mpfrIntResult;
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
-                                                       precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result.f);
-
-  if (mpfrIntResult != libc_result.i)
-    return false;
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_unary_operation_two_outputs<float>(
-    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
-template bool compare_unary_operation_two_outputs<double>(
-    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
-template bool compare_unary_operation_two_outputs<long double>(
-    Operation, long double, const BinaryOutput<long double> &, double,
-    RoundingMode);
-
-template <typename T>
-bool compare_binary_operation_two_outputs(Operation op,
-                                          const BinaryInput<T> &input,
-                                          const BinaryOutput<T> &libc_result,
-                                          double ulp_tolerance,
-                                          RoundingMode rounding) {
-  int mpfrIntResult;
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfr_result = binary_operation_two_outputs(
-      op, input.x, input.y, mpfrIntResult, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result.f);
-
-  if (mpfrIntResult != libc_result.i) {
-    if (op == Operation::RemQuo) {
-      if ((0x7 & mpfrIntResult) != (0x7 & libc_result.i))
-        return false;
-    } else {
-      return false;
-    }
-  }
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_binary_operation_two_outputs<float>(
-    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
-    RoundingMode);
-template bool compare_binary_operation_two_outputs<double>(
-    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
-    double, RoundingMode);
-template bool compare_binary_operation_two_outputs<long double>(
-    Operation, const BinaryInput<long double> &,
-    const BinaryOutput<long double> &, double, RoundingMode);
-
-template <typename InputType, typename OutputType>
-bool compare_binary_operation_one_output(Operation op,
-                                         const BinaryInput<InputType> &input,
-                                         OutputType libc_result,
-                                         double ulp_tolerance,
-                                         RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfr_result =
-      binary_operation_one_output(op, input.x, input.y, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result);
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float> &,
-                                                  float, double, RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  double, double, RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    float, double, RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    double, double, RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    long double, double, RoundingMode);
-
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  float, double, RoundingMode);
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float16> &,
-                                                  float16, double,
-                                                  RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float> &,
-                                                  float16, double,
-                                                  RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  float16, double,
-                                                  RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    float16, double, RoundingMode);
-#endif
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float128> &,
-                                                  float128, double,
-                                                  RoundingMode);
-#endif
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<bfloat16> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    bfloat16, double, RoundingMode);
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float128> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template <typename InputType, typename OutputType>
-bool compare_ternary_operation_one_output(Operation op,
-                                          const TernaryInput<InputType> &input,
-                                          OutputType libc_result,
-                                          double ulp_tolerance,
-                                          RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfr_result = ternary_operation_one_output(
-      op, input.x, input.y, input.z, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result);
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<float> &,
-                                                   float, double, RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   float, double, RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   double, double,
-                                                   RoundingMode);
-template bool compare_ternary_operation_one_output(
-    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
-template bool compare_ternary_operation_one_output(
-    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
-template bool
-compare_ternary_operation_one_output(Operation,
-                                     const TernaryInput<long double> &,
-                                     long double, double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool
-compare_ternary_operation_one_output(Operation, const TernaryInput<float16> &,
-                                     float16, double, RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<float> &,
-                                                   float16, double,
-                                                   RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   float16, double,
-                                                   RoundingMode);
-template bool
-compare_ternary_operation_one_output(Operation,
-                                     const TernaryInput<long double> &, float16,
-                                     double, RoundingMode);
-#endif
-
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<float> &,
-                                                   bfloat16, double,
-                                                   RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   bfloat16, double,
-                                                   RoundingMode);
-template bool
-compare_ternary_operation_one_output(Operation,
-                                     const TernaryInput<long double> &,
-                                     bfloat16, double, RoundingMode);
-
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template bool
-compare_ternary_operation_one_output(Operation, const TernaryInput<float128> &,
-                                     bfloat16, double, RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-
-} // namespace internal
-
-template <typename T> bool round_to_long(T x, long &result) {
-  MPFRNumber mpfr(x);
-  return mpfr.round_to_long(result);
-}
-
-template bool round_to_long<float>(float, long &);
-template bool round_to_long<double>(double, long &);
-template bool round_to_long<long double>(long double, long &);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool round_to_long<float16>(float16, long &);
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool round_to_long<float128>(float128, long &);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template bool round_to_long<bfloat16>(bfloat16, long &);
-
-template <typename T> bool round_to_long(T x, RoundingMode mode, long &result) {
-  MPFRNumber mpfr(x);
-  return mpfr.round_to_long(get_mpfr_rounding_mode(mode), result);
-}
-
-template bool round_to_long<float>(float, RoundingMode, long &);
-template bool round_to_long<double>(double, RoundingMode, long &);
-template bool round_to_long<long double>(long double, RoundingMode, long &);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool round_to_long<float16>(float16, RoundingMode, long &);
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool round_to_long<float128>(float128, RoundingMode, long &);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template bool round_to_long<bfloat16>(bfloat16, RoundingMode, long &);
-
-template <typename T> T round(T x, RoundingMode mode) {
-  MPFRNumber mpfr(x);
-  MPFRNumber result = mpfr.rint(get_mpfr_rounding_mode(mode));
-  return result.as<T>();
-}
-
-template float round<float>(float, RoundingMode);
-template double round<double>(double, RoundingMode);
-template long double round<long double>(long double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template float16 round<float16>(float16, RoundingMode);
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template float128 round<float128>(float128, RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template bfloat16 round<bfloat16>(bfloat16, RoundingMode);
-
-} // namespace mpfr
-} // namespace testing
-} // namespace LIBC_NAMESPACE_DECL
+//===-- Utils which wrap MPFR ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "MPFRUtils.h"
+#include "MPCommon.h"
+
+#include "src/__support/CPP/array.h"
+#include "src/__support/CPP/stringstream.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/FPUtil/fpbits_str.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace testing {
+namespace mpfr {
+namespace internal {
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+unary_operation(Operation op, InputType input, unsigned int precision,
+                RoundingMode rounding) {
+  MPFRNumber mpfrInput(input, precision, rounding);
+  switch (op) {
+  case Operation::Abs:
+    return mpfrInput.abs();
+  case Operation::Acos:
+    return mpfrInput.acos();
+  case Operation::Acosh:
+    return mpfrInput.acosh();
+  case Operation::Acospi:
+    return mpfrInput.acospi();
+  case Operation::Asin:
+    return mpfrInput.asin();
+  case Operation::Asinh:
+    return mpfrInput.asinh();
+  case Operation::Asinpi:
+    return mpfrInput.asinpi();
+  case Operation::Atan:
+    return mpfrInput.atan();
+  case Operation::Atanh:
+    return mpfrInput.atanh();
+  case Operation::Atanpi:
+    return mpfrInput.atanpi();
+  case Operation::Cbrt:
+    return mpfrInput.cbrt();
+  case Operation::Ceil:
+    return mpfrInput.ceil();
+  case Operation::Cos:
+    return mpfrInput.cos();
+  case Operation::Cosh:
+    return mpfrInput.cosh();
+  case Operation::Cospi:
+    return mpfrInput.cospi();
+  case Operation::Erf:
+    return mpfrInput.erf();
+  case Operation::Exp:
+    return mpfrInput.exp();
+  case Operation::Exp2:
+    return mpfrInput.exp2();
+  case Operation::Exp2m1:
+    return mpfrInput.exp2m1();
+  case Operation::Exp10:
+    return mpfrInput.exp10();
+  case Operation::Exp10m1:
+    return mpfrInput.exp10m1();
+  case Operation::Expm1:
+    return mpfrInput.expm1();
+  case Operation::Floor:
+    return mpfrInput.floor();
+  case Operation::Log:
+    return mpfrInput.log();
+  case Operation::Log2:
+    return mpfrInput.log2();
+  case Operation::Log10:
+    return mpfrInput.log10();
+  case Operation::Log1p:
+    return mpfrInput.log1p();
+  case Operation::Mod2PI:
+    return mpfrInput.mod_2pi();
+  case Operation::ModPIOver2:
+    return mpfrInput.mod_pi_over_2();
+  case Operation::ModPIOver4:
+    return mpfrInput.mod_pi_over_4();
+  case Operation::Round:
+    return mpfrInput.round();
+  case Operation::RoundEven:
+    return mpfrInput.roundeven();
+  case Operation::Rsqrt:
+    return mpfrInput.rsqrt();
+  case Operation::Sin:
+    return mpfrInput.sin();
+  case Operation::Sinpi:
+    return mpfrInput.sinpi();
+  case Operation::Sinh:
+    return mpfrInput.sinh();
+  case Operation::Sqrt:
+    return mpfrInput.sqrt();
+  case Operation::Tan:
+    return mpfrInput.tan();
+  case Operation::Tanh:
+    return mpfrInput.tanh();
+  case Operation::Tanpi:
+    return mpfrInput.tanpi();
+  case Operation::Trunc:
+    return mpfrInput.trunc();
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+unary_operation_two_outputs(Operation op, InputType input, int &output,
+                            unsigned int precision, RoundingMode rounding) {
+  MPFRNumber mpfrInput(input, precision, rounding);
+  switch (op) {
+  case Operation::Frexp:
+    return mpfrInput.frexp(output);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+binary_operation_one_output(Operation op, InputType x, InputType y,
+                            unsigned int precision, RoundingMode rounding) {
+  MPFRNumber inputX(x, precision, rounding);
+  MPFRNumber inputY(y, precision, rounding);
+  switch (op) {
+  case Operation::Add:
+    return inputX.add(inputY);
+  case Operation::Atan2:
+    return inputX.atan2(inputY);
+  case Operation::Div:
+    return inputX.div(inputY);
+  case Operation::Fmod:
+    return inputX.fmod(inputY);
+  case Operation::Hypot:
+    return inputX.hypot(inputY);
+  case Operation::Mul:
+    return inputX.mul(inputY);
+  case Operation::Pow:
+    return inputX.pow(inputY);
+  case Operation::Sub:
+    return inputX.sub(inputY);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+binary_operation_two_outputs(Operation op, InputType x, InputType y,
+                             int &output, unsigned int precision,
+                             RoundingMode rounding) {
+  MPFRNumber inputX(x, precision, rounding);
+  MPFRNumber inputY(y, precision, rounding);
+  switch (op) {
+  case Operation::RemQuo:
+    return inputX.remquo(inputY, output);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+ternary_operation_one_output(Operation op, InputType x, InputType y,
+                             InputType z, unsigned int precision,
+                             RoundingMode rounding) {
+  // For FMA function, we just need to compare with the mpfr_fma with the same
+  // precision as InputType.  Using higher precision as the intermediate results
+  // to compare might incorrectly fail due to double-rounding errors.
+  MPFRNumber inputX(x, precision, rounding);
+  MPFRNumber inputY(y, precision, rounding);
+  MPFRNumber inputZ(z, precision, rounding);
+  switch (op) {
+  case Operation::Fma:
+    return inputX.fma(inputY, inputZ);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+// Remark: For all the explain_*_error functions, we will use std::stringstream
+// to build the complete error messages before sending it to the outstream `OS`
+// once at the end.  This will stop the error messages from interleaving when
+// the tests are running concurrently.
+template <typename InputType, typename OutputType>
+void explain_unary_operation_single_output_error(Operation op, InputType input,
+                                                 OutputType matchValue,
+                                                 double ulp_tolerance,
+                                                 RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfrInput(input, precision);
+  MPFRNumber mpfr_result;
+  mpfr_result = unary_operation(op, input, precision, rounding);
+  MPFRNumber mpfrMatchValue(matchValue);
+  cpp::array<char, 1024> msg_buf;
+  cpp::StringStream msg(msg_buf);
+  msg << "Match value not within tolerance value of MPFR result:\n"
+      << "  Input decimal: " << mpfrInput.str() << '\n';
+  msg << "     Input bits: " << str(FPBits<InputType>(input)) << '\n';
+  msg << '\n' << "  Match decimal: " << mpfrMatchValue.str() << '\n';
+  msg << "     Match bits: " << str(FPBits<OutputType>(matchValue)) << '\n';
+  msg << '\n' << "    MPFR result: " << mpfr_result.str() << '\n';
+  msg << "   MPFR rounded: "
+      << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
+  msg << '\n';
+  msg << "      ULP error: " << mpfr_result.ulp_as_mpfr_number(matchValue).str()
+      << '\n';
+  if (msg.overflow())
+    __builtin_unreachable();
+  tlog << msg.str();
+}
+
+template void explain_unary_operation_single_output_error(Operation op, float,
+                                                          float, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, double,
+                                                          double, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double,
+                                                          long double, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, double,
+                                                          float, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double, float,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double, double,
+                                                          double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template void explain_unary_operation_single_output_error(Operation op, float16,
+                                                          float16, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, float,
+                                                          float16, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, double,
+                                                          float16, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double, float16,
+                                                          double, RoundingMode);
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, float16,
+                                                          double, RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, float128,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, float,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, double,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, long double,
+                                                          double, RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          bfloat16, bfloat16,
+                                                          double, RoundingMode);
+
+template <typename T>
+void explain_unary_operation_two_outputs_error(
+    Operation op, T input, const BinaryOutput<T> &libc_result,
+    double ulp_tolerance, RoundingMode rounding) {
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfrInput(input, precision);
+  int mpfrIntResult;
+  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
+                                                       precision, rounding);
+
+  if (mpfrIntResult != libc_result.i) {
+    tlog << "MPFR integral result: " << mpfrIntResult << '\n'
+         << "Libc integral result: " << libc_result.i << '\n';
+  } else {
+    tlog << "Integral result from libc matches integral result from MPFR.\n";
+  }
+
+  MPFRNumber mpfrMatchValue(libc_result.f);
+  tlog
+      << "Libc floating point result is not within tolerance value of the MPFR "
+      << "result.\n\n";
+
+  tlog << "            Input decimal: " << mpfrInput.str() << "\n\n";
+
+  tlog << "Libc floating point value: " << mpfrMatchValue.str() << '\n';
+  tlog << " Libc floating point bits: " << str(FPBits<T>(libc_result.f))
+       << '\n';
+  tlog << "\n\n";
+
+  tlog << "              MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "             MPFR rounded: " << str(FPBits<T>(mpfr_result.as<T>()))
+       << '\n';
+  tlog << '\n'
+       << "                ULP error: "
+       << mpfr_result.ulp_as_mpfr_number(libc_result.f).str() << '\n';
+}
+
+template void explain_unary_operation_two_outputs_error<float>(
+    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
+template void explain_unary_operation_two_outputs_error<double>(
+    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
+template void explain_unary_operation_two_outputs_error<long double>(
+    Operation, long double, const BinaryOutput<long double> &, double,
+    RoundingMode);
+
+template <typename T>
+void explain_binary_operation_two_outputs_error(
+    Operation op, const BinaryInput<T> &input,
+    const BinaryOutput<T> &libc_result, double ulp_tolerance,
+    RoundingMode rounding) {
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfrX(input.x, precision);
+  MPFRNumber mpfrY(input.y, precision);
+  int mpfrIntResult;
+  MPFRNumber mpfr_result = binary_operation_two_outputs(
+      op, input.x, input.y, mpfrIntResult, precision, rounding);
+  MPFRNumber mpfrMatchValue(libc_result.f);
+
+  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n'
+       << "MPFR integral result: " << mpfrIntResult << '\n'
+       << "Libc integral result: " << libc_result.i << '\n'
+       << "Libc floating point result: " << mpfrMatchValue.str() << '\n'
+       << "               MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "Libc floating point result bits: " << str(FPBits<T>(libc_result.f))
+       << '\n';
+  tlog << "              MPFR rounded bits: "
+       << str(FPBits<T>(mpfr_result.as<T>())) << '\n';
+  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result.f).str()
+       << '\n';
+}
+
+template void explain_binary_operation_two_outputs_error<float>(
+    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
+    RoundingMode);
+template void explain_binary_operation_two_outputs_error<double>(
+    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
+    double, RoundingMode);
+template void explain_binary_operation_two_outputs_error<long double>(
+    Operation, const BinaryInput<long double> &,
+    const BinaryOutput<long double> &, double, RoundingMode);
+
+template <typename InputType, typename OutputType>
+void explain_binary_operation_one_output_error(
+    Operation op, const BinaryInput<InputType> &input, OutputType libc_result,
+    double ulp_tolerance, RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfrX(input.x, precision);
+  MPFRNumber mpfrY(input.y, precision);
+  FPBits<InputType> xbits(input.x);
+  FPBits<InputType> ybits(input.y);
+  MPFRNumber mpfr_result =
+      binary_operation_one_output(op, input.x, input.y, precision, rounding);
+  MPFRNumber mpfrMatchValue(libc_result);
+
+  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n';
+  tlog << "First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
+  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
+
+  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
+       << "MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "Libc floating point result bits: "
+       << str(FPBits<OutputType>(libc_result)) << '\n';
+  tlog << "              MPFR rounded bits: "
+       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
+  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
+       << '\n';
+}
+
+template void
+explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
+                                          float, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, float, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, double, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<long double> &, float, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<long double> &, double, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation,
+                                          const BinaryInput<long double> &,
+                                          long double, double, RoundingMode);
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<float16> &, float16, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
+                                          float16, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, float16, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<long double> &, float16, double, RoundingMode);
+#endif
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<float128> &, float128, double, RoundingMode);
+#endif
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<bfloat16> &, bfloat16, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
+                                          bfloat16, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, bfloat16, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation,
+                                          const BinaryInput<long double> &,
+                                          bfloat16, double, RoundingMode);
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<float128> &, bfloat16, double, RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+
+template <typename InputType, typename OutputType>
+void explain_ternary_operation_one_output_error(
+    Operation op, const TernaryInput<InputType> &input, OutputType libc_result,
+    double ulp_tolerance, RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfrX(input.x, precision);
+  MPFRNumber mpfrY(input.y, precision);
+  MPFRNumber mpfrZ(input.z, precision);
+  FPBits<InputType> xbits(input.x);
+  FPBits<InputType> ybits(input.y);
+  FPBits<InputType> zbits(input.z);
+  MPFRNumber mpfr_result = ternary_operation_one_output(
+      op, input.x, input.y, input.z, precision, rounding);
+  MPFRNumber mpfrMatchValue(libc_result);
+
+  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str()
+       << " z: " << mpfrZ.str() << '\n';
+  tlog << " First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
+  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
+  tlog << " Third input bits: " << str(FPBits<InputType>(input.z)) << '\n';
+
+  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
+       << "MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "Libc floating point result bits: "
+       << str(FPBits<OutputType>(libc_result)) << '\n';
+  tlog << "              MPFR rounded bits: "
+       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
+  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
+       << '\n';
+}
+
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float> &, float, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, float, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, double, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
+template void
+explain_ternary_operation_one_output_error(Operation,
+                                           const TernaryInput<long double> &,
+                                           long double, double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float16> &, float16, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float> &, float16, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, float16, double, RoundingMode);
+template void
+explain_ternary_operation_one_output_error(Operation,
+                                           const TernaryInput<long double> &,
+                                           float16, double, RoundingMode);
+#endif
+
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float> &, bfloat16, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, bfloat16, double, RoundingMode);
+template void
+explain_ternary_operation_one_output_error(Operation,
+                                           const TernaryInput<long double> &,
+                                           bfloat16, double, RoundingMode);
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float128> &, bfloat16, double, RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+
+template <typename InputType, typename OutputType>
+bool compare_unary_operation_single_output(Operation op, InputType input,
+                                           OutputType libc_result,
+                                           double ulp_tolerance,
+                                           RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfr_result;
+  mpfr_result = unary_operation(op, input, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result);
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_unary_operation_single_output(Operation, float, float,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, double, double,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    long double, double,
+                                                    RoundingMode);
+template bool compare_unary_operation_single_output(Operation, double, float,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    float, double,
+                                                    RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    double, double,
+                                                    RoundingMode);
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool compare_unary_operation_single_output(Operation, float16, float16,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float, float16,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, double, float16,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    float16, double,
+                                                    RoundingMode);
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool compare_unary_operation_single_output(Operation, float128,
+                                                    float16, double,
+                                                    RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool compare_unary_operation_single_output(Operation, float128,
+                                                    float128, double,
+                                                    RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float128, float,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float128, double,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float128,
+                                                    long double, double,
+                                                    RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool compare_unary_operation_single_output(Operation, bfloat16,
+                                                    bfloat16, double,
+                                                    RoundingMode);
+
+template <typename T>
+bool compare_unary_operation_two_outputs(Operation op, T input,
+                                         const BinaryOutput<T> &libc_result,
+                                         double ulp_tolerance,
+                                         RoundingMode rounding) {
+  int mpfrIntResult;
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
+                                                       precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result.f);
+
+  if (mpfrIntResult != libc_result.i)
+    return false;
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_unary_operation_two_outputs<float>(
+    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
+template bool compare_unary_operation_two_outputs<double>(
+    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
+template bool compare_unary_operation_two_outputs<long double>(
+    Operation, long double, const BinaryOutput<long double> &, double,
+    RoundingMode);
+
+template <typename T>
+bool compare_binary_operation_two_outputs(Operation op,
+                                          const BinaryInput<T> &input,
+                                          const BinaryOutput<T> &libc_result,
+                                          double ulp_tolerance,
+                                          RoundingMode rounding) {
+  int mpfrIntResult;
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfr_result = binary_operation_two_outputs(
+      op, input.x, input.y, mpfrIntResult, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result.f);
+
+  if (mpfrIntResult != libc_result.i) {
+    if (op == Operation::RemQuo) {
+      if ((0x7 & mpfrIntResult) != (0x7 & libc_result.i))
+        return false;
+    } else {
+      return false;
+    }
+  }
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_binary_operation_two_outputs<float>(
+    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
+    RoundingMode);
+template bool compare_binary_operation_two_outputs<double>(
+    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
+    double, RoundingMode);
+template bool compare_binary_operation_two_outputs<long double>(
+    Operation, const BinaryInput<long double> &,
+    const BinaryOutput<long double> &, double, RoundingMode);
+
+template <typename InputType, typename OutputType>
+bool compare_binary_operation_one_output(Operation op,
+                                         const BinaryInput<InputType> &input,
+                                         OutputType libc_result,
+                                         double ulp_tolerance,
+                                         RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfr_result =
+      binary_operation_one_output(op, input.x, input.y, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result);
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float> &,
+                                                  float, double, RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  double, double, RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    float, double, RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    double, double, RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    long double, double, RoundingMode);
+
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  float, double, RoundingMode);
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float16> &,
+                                                  float16, double,
+                                                  RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float> &,
+                                                  float16, double,
+                                                  RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  float16, double,
+                                                  RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    float16, double, RoundingMode);
+#endif
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float128> &,
+                                                  float128, double,
+                                                  RoundingMode);
+#endif
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<bfloat16> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    bfloat16, double, RoundingMode);
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float128> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template <typename InputType, typename OutputType>
+bool compare_ternary_operation_one_output(Operation op,
+                                          const TernaryInput<InputType> &input,
+                                          OutputType libc_result,
+                                          double ulp_tolerance,
+                                          RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfr_result = ternary_operation_one_output(
+      op, input.x, input.y, input.z, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result);
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<float> &,
+                                                   float, double, RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   float, double, RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   double, double,
+                                                   RoundingMode);
+template bool compare_ternary_operation_one_output(
+    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
+template bool compare_ternary_operation_one_output(
+    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation,
+                                     const TernaryInput<long double> &,
+                                     long double, double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool
+compare_ternary_operation_one_output(Operation, const TernaryInput<float16> &,
+                                     float16, double, RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<float> &,
+                                                   float16, double,
+                                                   RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   float16, double,
+                                                   RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation,
+                                     const TernaryInput<long double> &, float16,
+                                     double, RoundingMode);
+#endif
+
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<float> &,
+                                                   bfloat16, double,
+                                                   RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   bfloat16, double,
+                                                   RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation,
+                                     const TernaryInput<long double> &,
+                                     bfloat16, double, RoundingMode);
+
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template bool
+compare_ternary_operation_one_output(Operation, const TernaryInput<float128> &,
+                                     bfloat16, double, RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+
+} // namespace internal
+
+template <typename T> bool round_to_long(T x, long &result) {
+  MPFRNumber mpfr(x);
+  return mpfr.round_to_long(result);
+}
+
+template bool round_to_long<float>(float, long &);
+template bool round_to_long<double>(double, long &);
+template bool round_to_long<long double>(long double, long &);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool round_to_long<float16>(float16, long &);
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool round_to_long<float128>(float128, long &);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template bool round_to_long<bfloat16>(bfloat16, long &);
+
+template <typename T> bool round_to_long(T x, RoundingMode mode, long &result) {
+  MPFRNumber mpfr(x);
+  return mpfr.round_to_long(get_mpfr_rounding_mode(mode), result);
+}
+
+template bool round_to_long<float>(float, RoundingMode, long &);
+template bool round_to_long<double>(double, RoundingMode, long &);
+template bool round_to_long<long double>(long double, RoundingMode, long &);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool round_to_long<float16>(float16, RoundingMode, long &);
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool round_to_long<float128>(float128, RoundingMode, long &);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template bool round_to_long<bfloat16>(bfloat16, RoundingMode, long &);
+
+template <typename T> T round(T x, RoundingMode mode) {
+  MPFRNumber mpfr(x);
+  MPFRNumber result = mpfr.rint(get_mpfr_rounding_mode(mode));
+  return result.as<T>();
+}
+
+template float round<float>(float, RoundingMode);
+template double round<double>(double, RoundingMode);
+template long double round<long double>(long double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template float16 round<float16>(float16, RoundingMode);
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template float128 round<float128>(float128, RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template bfloat16 round<bfloat16>(bfloat16, RoundingMode);
+
+} // namespace mpfr
+} // namespace testing
+} // namespace LIBC_NAMESPACE_DECL

>From ecb562ec7b724e4b45d76b03897ea7b4a36a2127 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 21 Feb 2026 17:34:10 +0530
Subject: [PATCH 08/50] lf issue fixed

---
 libc/test/src/math/fmabf16_test.cpp  |   58 +-
 libc/utils/MPFRWrapper/MPFRUtils.cpp | 1696 +++++++++++++-------------
 2 files changed, 871 insertions(+), 883 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index ed2349f10e799..431fa36864a57 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -6,12 +6,12 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <vector>
 #include "src/__support/FPUtil/bfloat16.h"
 #include "src/math/fmabf16.h"
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
 #include "utils/MPFRWrapper/MPFRUtils.h"
+#include <vector>
 
 using LlvmLibcFmaBf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
 
@@ -25,62 +25,50 @@ static constexpr uint16_t POS_STOP = 0x7f80U;
 static constexpr uint16_t NEG_START = 0x8000U;
 static constexpr uint16_t NEG_STOP = 0xff80U; //-inf
 
-//covers normal range since special cases covered in unit tests 
-
-
+// covers normal range since special cases covered in unit tests
 
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
-  
+
   std::vector<bfloat16> z_val = {
-      FPBits(0x0000).get_val(),
-      FPBits(0x8000).get_val(),
-      FPBits(0x3f80).get_val(),
-      FPBits(0xbf80).get_val(),
-      FPBits::min_subnormal().get_val(),
-      FPBits::max_normal().get_val(),
-      FPBits::inf().get_val(),
-      FPBits::quiet_nan().get_val()
-  };
-  for(bfloat16 z : z_val){
+      FPBits(0x0000).get_val(),          FPBits(0x8000).get_val(),
+      FPBits(0x3f80).get_val(),          FPBits(0xbf80).get_val(),
+      FPBits::min_subnormal().get_val(), FPBits::max_normal().get_val(),
+      FPBits::inf().get_val(),           FPBits::quiet_nan().get_val()};
+  for (bfloat16 z : z_val) {
     for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
-      for(uint16_t v2 = POS_START; v2<= POS_STOP; v2+=256) {
-      
+      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
+
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
 
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }  
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
     }
   }
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-  
+
   std::vector<bfloat16> z_val = {
-      FPBits(0x0000).get_val(),
-      FPBits(0x8000).get_val(),
-      FPBits(0x3f80).get_val(),
-      FPBits(0xbf80).get_val(),
-      FPBits::min_subnormal().get_val(),
-      FPBits::max_normal().get_val(),
-      FPBits::inf().get_val(),
-      FPBits::quiet_nan().get_val()
-  };
-  for(bfloat16 z : z_val){
+      FPBits(0x0000).get_val(),          FPBits(0x8000).get_val(),
+      FPBits(0x3f80).get_val(),          FPBits(0xbf80).get_val(),
+      FPBits::min_subnormal().get_val(), FPBits::max_normal().get_val(),
+      FPBits::inf().get_val(),           FPBits::quiet_nan().get_val()};
+  for (bfloat16 z : z_val) {
     for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
-      for(uint16_t v2 = NEG_START; v2<= NEG_STOP; v2+=256) {
-      
+      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
+
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
 
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }  
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
     }
   }
 }
@@ -97,6 +85,6 @@ TEST_F(LlvmLibcFmaBf16Test, CancellationTest) {
 
       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                      LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+    }
   }
-}
 }
\ No newline at end of file
diff --git a/libc/utils/MPFRWrapper/MPFRUtils.cpp b/libc/utils/MPFRWrapper/MPFRUtils.cpp
index 98e4480543edb..a7d307b47c3e8 100644
--- a/libc/utils/MPFRWrapper/MPFRUtils.cpp
+++ b/libc/utils/MPFRWrapper/MPFRUtils.cpp
@@ -1,848 +1,848 @@
-//===-- Utils which wrap MPFR ---------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "MPFRUtils.h"
-#include "MPCommon.h"
-
-#include "src/__support/CPP/array.h"
-#include "src/__support/CPP/stringstream.h"
-#include "src/__support/FPUtil/bfloat16.h"
-#include "src/__support/FPUtil/fpbits_str.h"
-#include "src/__support/macros/config.h"
-#include "src/__support/macros/properties/types.h"
-
-namespace LIBC_NAMESPACE_DECL {
-namespace testing {
-namespace mpfr {
-namespace internal {
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-unary_operation(Operation op, InputType input, unsigned int precision,
-                RoundingMode rounding) {
-  MPFRNumber mpfrInput(input, precision, rounding);
-  switch (op) {
-  case Operation::Abs:
-    return mpfrInput.abs();
-  case Operation::Acos:
-    return mpfrInput.acos();
-  case Operation::Acosh:
-    return mpfrInput.acosh();
-  case Operation::Acospi:
-    return mpfrInput.acospi();
-  case Operation::Asin:
-    return mpfrInput.asin();
-  case Operation::Asinh:
-    return mpfrInput.asinh();
-  case Operation::Asinpi:
-    return mpfrInput.asinpi();
-  case Operation::Atan:
-    return mpfrInput.atan();
-  case Operation::Atanh:
-    return mpfrInput.atanh();
-  case Operation::Atanpi:
-    return mpfrInput.atanpi();
-  case Operation::Cbrt:
-    return mpfrInput.cbrt();
-  case Operation::Ceil:
-    return mpfrInput.ceil();
-  case Operation::Cos:
-    return mpfrInput.cos();
-  case Operation::Cosh:
-    return mpfrInput.cosh();
-  case Operation::Cospi:
-    return mpfrInput.cospi();
-  case Operation::Erf:
-    return mpfrInput.erf();
-  case Operation::Exp:
-    return mpfrInput.exp();
-  case Operation::Exp2:
-    return mpfrInput.exp2();
-  case Operation::Exp2m1:
-    return mpfrInput.exp2m1();
-  case Operation::Exp10:
-    return mpfrInput.exp10();
-  case Operation::Exp10m1:
-    return mpfrInput.exp10m1();
-  case Operation::Expm1:
-    return mpfrInput.expm1();
-  case Operation::Floor:
-    return mpfrInput.floor();
-  case Operation::Log:
-    return mpfrInput.log();
-  case Operation::Log2:
-    return mpfrInput.log2();
-  case Operation::Log10:
-    return mpfrInput.log10();
-  case Operation::Log1p:
-    return mpfrInput.log1p();
-  case Operation::Mod2PI:
-    return mpfrInput.mod_2pi();
-  case Operation::ModPIOver2:
-    return mpfrInput.mod_pi_over_2();
-  case Operation::ModPIOver4:
-    return mpfrInput.mod_pi_over_4();
-  case Operation::Round:
-    return mpfrInput.round();
-  case Operation::RoundEven:
-    return mpfrInput.roundeven();
-  case Operation::Rsqrt:
-    return mpfrInput.rsqrt();
-  case Operation::Sin:
-    return mpfrInput.sin();
-  case Operation::Sinpi:
-    return mpfrInput.sinpi();
-  case Operation::Sinh:
-    return mpfrInput.sinh();
-  case Operation::Sqrt:
-    return mpfrInput.sqrt();
-  case Operation::Tan:
-    return mpfrInput.tan();
-  case Operation::Tanh:
-    return mpfrInput.tanh();
-  case Operation::Tanpi:
-    return mpfrInput.tanpi();
-  case Operation::Trunc:
-    return mpfrInput.trunc();
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-unary_operation_two_outputs(Operation op, InputType input, int &output,
-                            unsigned int precision, RoundingMode rounding) {
-  MPFRNumber mpfrInput(input, precision, rounding);
-  switch (op) {
-  case Operation::Frexp:
-    return mpfrInput.frexp(output);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-binary_operation_one_output(Operation op, InputType x, InputType y,
-                            unsigned int precision, RoundingMode rounding) {
-  MPFRNumber inputX(x, precision, rounding);
-  MPFRNumber inputY(y, precision, rounding);
-  switch (op) {
-  case Operation::Add:
-    return inputX.add(inputY);
-  case Operation::Atan2:
-    return inputX.atan2(inputY);
-  case Operation::Div:
-    return inputX.div(inputY);
-  case Operation::Fmod:
-    return inputX.fmod(inputY);
-  case Operation::Hypot:
-    return inputX.hypot(inputY);
-  case Operation::Mul:
-    return inputX.mul(inputY);
-  case Operation::Pow:
-    return inputX.pow(inputY);
-  case Operation::Sub:
-    return inputX.sub(inputY);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-binary_operation_two_outputs(Operation op, InputType x, InputType y,
-                             int &output, unsigned int precision,
-                             RoundingMode rounding) {
-  MPFRNumber inputX(x, precision, rounding);
-  MPFRNumber inputY(y, precision, rounding);
-  switch (op) {
-  case Operation::RemQuo:
-    return inputX.remquo(inputY, output);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-template <typename InputType>
-cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
-ternary_operation_one_output(Operation op, InputType x, InputType y,
-                             InputType z, unsigned int precision,
-                             RoundingMode rounding) {
-  // For FMA function, we just need to compare with the mpfr_fma with the same
-  // precision as InputType.  Using higher precision as the intermediate results
-  // to compare might incorrectly fail due to double-rounding errors.
-  MPFRNumber inputX(x, precision, rounding);
-  MPFRNumber inputY(y, precision, rounding);
-  MPFRNumber inputZ(z, precision, rounding);
-  switch (op) {
-  case Operation::Fma:
-    return inputX.fma(inputY, inputZ);
-  default:
-    __builtin_unreachable();
-  }
-}
-
-// Remark: For all the explain_*_error functions, we will use std::stringstream
-// to build the complete error messages before sending it to the outstream `OS`
-// once at the end.  This will stop the error messages from interleaving when
-// the tests are running concurrently.
-template <typename InputType, typename OutputType>
-void explain_unary_operation_single_output_error(Operation op, InputType input,
-                                                 OutputType matchValue,
-                                                 double ulp_tolerance,
-                                                 RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfrInput(input, precision);
-  MPFRNumber mpfr_result;
-  mpfr_result = unary_operation(op, input, precision, rounding);
-  MPFRNumber mpfrMatchValue(matchValue);
-  cpp::array<char, 1024> msg_buf;
-  cpp::StringStream msg(msg_buf);
-  msg << "Match value not within tolerance value of MPFR result:\n"
-      << "  Input decimal: " << mpfrInput.str() << '\n';
-  msg << "     Input bits: " << str(FPBits<InputType>(input)) << '\n';
-  msg << '\n' << "  Match decimal: " << mpfrMatchValue.str() << '\n';
-  msg << "     Match bits: " << str(FPBits<OutputType>(matchValue)) << '\n';
-  msg << '\n' << "    MPFR result: " << mpfr_result.str() << '\n';
-  msg << "   MPFR rounded: "
-      << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
-  msg << '\n';
-  msg << "      ULP error: " << mpfr_result.ulp_as_mpfr_number(matchValue).str()
-      << '\n';
-  if (msg.overflow())
-    __builtin_unreachable();
-  tlog << msg.str();
-}
-
-template void explain_unary_operation_single_output_error(Operation op, float,
-                                                          float, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, double,
-                                                          double, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double,
-                                                          long double, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, double,
-                                                          float, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double, float,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double, double,
-                                                          double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template void explain_unary_operation_single_output_error(Operation op, float16,
-                                                          float16, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, float,
-                                                          float16, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op, double,
-                                                          float16, double,
-                                                          RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          long double, float16,
-                                                          double, RoundingMode);
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, float16,
-                                                          double, RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, float128,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, float,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, double,
-                                                          double, RoundingMode);
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          float128, long double,
-                                                          double, RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template void explain_unary_operation_single_output_error(Operation op,
-                                                          bfloat16, bfloat16,
-                                                          double, RoundingMode);
-
-template <typename T>
-void explain_unary_operation_two_outputs_error(
-    Operation op, T input, const BinaryOutput<T> &libc_result,
-    double ulp_tolerance, RoundingMode rounding) {
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfrInput(input, precision);
-  int mpfrIntResult;
-  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
-                                                       precision, rounding);
-
-  if (mpfrIntResult != libc_result.i) {
-    tlog << "MPFR integral result: " << mpfrIntResult << '\n'
-         << "Libc integral result: " << libc_result.i << '\n';
-  } else {
-    tlog << "Integral result from libc matches integral result from MPFR.\n";
-  }
-
-  MPFRNumber mpfrMatchValue(libc_result.f);
-  tlog
-      << "Libc floating point result is not within tolerance value of the MPFR "
-      << "result.\n\n";
-
-  tlog << "            Input decimal: " << mpfrInput.str() << "\n\n";
-
-  tlog << "Libc floating point value: " << mpfrMatchValue.str() << '\n';
-  tlog << " Libc floating point bits: " << str(FPBits<T>(libc_result.f))
-       << '\n';
-  tlog << "\n\n";
-
-  tlog << "              MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "             MPFR rounded: " << str(FPBits<T>(mpfr_result.as<T>()))
-       << '\n';
-  tlog << '\n'
-       << "                ULP error: "
-       << mpfr_result.ulp_as_mpfr_number(libc_result.f).str() << '\n';
-}
-
-template void explain_unary_operation_two_outputs_error<float>(
-    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
-template void explain_unary_operation_two_outputs_error<double>(
-    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
-template void explain_unary_operation_two_outputs_error<long double>(
-    Operation, long double, const BinaryOutput<long double> &, double,
-    RoundingMode);
-
-template <typename T>
-void explain_binary_operation_two_outputs_error(
-    Operation op, const BinaryInput<T> &input,
-    const BinaryOutput<T> &libc_result, double ulp_tolerance,
-    RoundingMode rounding) {
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfrX(input.x, precision);
-  MPFRNumber mpfrY(input.y, precision);
-  int mpfrIntResult;
-  MPFRNumber mpfr_result = binary_operation_two_outputs(
-      op, input.x, input.y, mpfrIntResult, precision, rounding);
-  MPFRNumber mpfrMatchValue(libc_result.f);
-
-  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n'
-       << "MPFR integral result: " << mpfrIntResult << '\n'
-       << "Libc integral result: " << libc_result.i << '\n'
-       << "Libc floating point result: " << mpfrMatchValue.str() << '\n'
-       << "               MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "Libc floating point result bits: " << str(FPBits<T>(libc_result.f))
-       << '\n';
-  tlog << "              MPFR rounded bits: "
-       << str(FPBits<T>(mpfr_result.as<T>())) << '\n';
-  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result.f).str()
-       << '\n';
-}
-
-template void explain_binary_operation_two_outputs_error<float>(
-    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
-    RoundingMode);
-template void explain_binary_operation_two_outputs_error<double>(
-    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
-    double, RoundingMode);
-template void explain_binary_operation_two_outputs_error<long double>(
-    Operation, const BinaryInput<long double> &,
-    const BinaryOutput<long double> &, double, RoundingMode);
-
-template <typename InputType, typename OutputType>
-void explain_binary_operation_one_output_error(
-    Operation op, const BinaryInput<InputType> &input, OutputType libc_result,
-    double ulp_tolerance, RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfrX(input.x, precision);
-  MPFRNumber mpfrY(input.y, precision);
-  FPBits<InputType> xbits(input.x);
-  FPBits<InputType> ybits(input.y);
-  MPFRNumber mpfr_result =
-      binary_operation_one_output(op, input.x, input.y, precision, rounding);
-  MPFRNumber mpfrMatchValue(libc_result);
-
-  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n';
-  tlog << "First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
-  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
-
-  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
-       << "MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "Libc floating point result bits: "
-       << str(FPBits<OutputType>(libc_result)) << '\n';
-  tlog << "              MPFR rounded bits: "
-       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
-  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
-       << '\n';
-}
-
-template void
-explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
-                                          float, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, float, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, double, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<long double> &, float, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<long double> &, double, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation,
-                                          const BinaryInput<long double> &,
-                                          long double, double, RoundingMode);
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<float16> &, float16, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
-                                          float16, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, float16, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<long double> &, float16, double, RoundingMode);
-#endif
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<float128> &, float128, double, RoundingMode);
-#endif
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<bfloat16> &, bfloat16, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
-                                          bfloat16, double, RoundingMode);
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<double> &, bfloat16, double, RoundingMode);
-template void
-explain_binary_operation_one_output_error(Operation,
-                                          const BinaryInput<long double> &,
-                                          bfloat16, double, RoundingMode);
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template void explain_binary_operation_one_output_error(
-    Operation, const BinaryInput<float128> &, bfloat16, double, RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-
-template <typename InputType, typename OutputType>
-void explain_ternary_operation_one_output_error(
-    Operation op, const TernaryInput<InputType> &input, OutputType libc_result,
-    double ulp_tolerance, RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfrX(input.x, precision);
-  MPFRNumber mpfrY(input.y, precision);
-  MPFRNumber mpfrZ(input.z, precision);
-  FPBits<InputType> xbits(input.x);
-  FPBits<InputType> ybits(input.y);
-  FPBits<InputType> zbits(input.z);
-  MPFRNumber mpfr_result = ternary_operation_one_output(
-      op, input.x, input.y, input.z, precision, rounding);
-  MPFRNumber mpfrMatchValue(libc_result);
-
-  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str()
-       << " z: " << mpfrZ.str() << '\n';
-  tlog << " First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
-  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
-  tlog << " Third input bits: " << str(FPBits<InputType>(input.z)) << '\n';
-
-  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
-       << "MPFR result: " << mpfr_result.str() << '\n';
-  tlog << "Libc floating point result bits: "
-       << str(FPBits<OutputType>(libc_result)) << '\n';
-  tlog << "              MPFR rounded bits: "
-       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
-  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
-       << '\n';
-}
-
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float> &, float, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, float, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, double, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
-template void
-explain_ternary_operation_one_output_error(Operation,
-                                           const TernaryInput<long double> &,
-                                           long double, double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float16> &, float16, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float> &, float16, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, float16, double, RoundingMode);
-template void
-explain_ternary_operation_one_output_error(Operation,
-                                           const TernaryInput<long double> &,
-                                           float16, double, RoundingMode);
-#endif
-
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float> &, bfloat16, double, RoundingMode);
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<double> &, bfloat16, double, RoundingMode);
-template void
-explain_ternary_operation_one_output_error(Operation,
-                                           const TernaryInput<long double> &,
-                                           bfloat16, double, RoundingMode);
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template void explain_ternary_operation_one_output_error(
-    Operation, const TernaryInput<float128> &, bfloat16, double, RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-
-template <typename InputType, typename OutputType>
-bool compare_unary_operation_single_output(Operation op, InputType input,
-                                           OutputType libc_result,
-                                           double ulp_tolerance,
-                                           RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfr_result;
-  mpfr_result = unary_operation(op, input, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result);
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_unary_operation_single_output(Operation, float, float,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, double, double,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    long double, double,
-                                                    RoundingMode);
-template bool compare_unary_operation_single_output(Operation, double, float,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    float, double,
-                                                    RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    double, double,
-                                                    RoundingMode);
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool compare_unary_operation_single_output(Operation, float16, float16,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float, float16,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, double, float16,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, long double,
-                                                    float16, double,
-                                                    RoundingMode);
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool compare_unary_operation_single_output(Operation, float128,
-                                                    float16, double,
-                                                    RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool compare_unary_operation_single_output(Operation, float128,
-                                                    float128, double,
-                                                    RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float128, float,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float128, double,
-                                                    double, RoundingMode);
-template bool compare_unary_operation_single_output(Operation, float128,
-                                                    long double, double,
-                                                    RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool compare_unary_operation_single_output(Operation, bfloat16,
-                                                    bfloat16, double,
-                                                    RoundingMode);
-
-template <typename T>
-bool compare_unary_operation_two_outputs(Operation op, T input,
-                                         const BinaryOutput<T> &libc_result,
-                                         double ulp_tolerance,
-                                         RoundingMode rounding) {
-  int mpfrIntResult;
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
-                                                       precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result.f);
-
-  if (mpfrIntResult != libc_result.i)
-    return false;
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_unary_operation_two_outputs<float>(
-    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
-template bool compare_unary_operation_two_outputs<double>(
-    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
-template bool compare_unary_operation_two_outputs<long double>(
-    Operation, long double, const BinaryOutput<long double> &, double,
-    RoundingMode);
-
-template <typename T>
-bool compare_binary_operation_two_outputs(Operation op,
-                                          const BinaryInput<T> &input,
-                                          const BinaryOutput<T> &libc_result,
-                                          double ulp_tolerance,
-                                          RoundingMode rounding) {
-  int mpfrIntResult;
-  unsigned int precision = get_precision<T>(ulp_tolerance);
-  MPFRNumber mpfr_result = binary_operation_two_outputs(
-      op, input.x, input.y, mpfrIntResult, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result.f);
-
-  if (mpfrIntResult != libc_result.i) {
-    if (op == Operation::RemQuo) {
-      if ((0x7 & mpfrIntResult) != (0x7 & libc_result.i))
-        return false;
-    } else {
-      return false;
-    }
-  }
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_binary_operation_two_outputs<float>(
-    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
-    RoundingMode);
-template bool compare_binary_operation_two_outputs<double>(
-    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
-    double, RoundingMode);
-template bool compare_binary_operation_two_outputs<long double>(
-    Operation, const BinaryInput<long double> &,
-    const BinaryOutput<long double> &, double, RoundingMode);
-
-template <typename InputType, typename OutputType>
-bool compare_binary_operation_one_output(Operation op,
-                                         const BinaryInput<InputType> &input,
-                                         OutputType libc_result,
-                                         double ulp_tolerance,
-                                         RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfr_result =
-      binary_operation_one_output(op, input.x, input.y, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result);
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float> &,
-                                                  float, double, RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  double, double, RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    float, double, RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    double, double, RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    long double, double, RoundingMode);
-
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  float, double, RoundingMode);
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float16> &,
-                                                  float16, double,
-                                                  RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float> &,
-                                                  float16, double,
-                                                  RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  float16, double,
-                                                  RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    float16, double, RoundingMode);
-#endif
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float128> &,
-                                                  float128, double,
-                                                  RoundingMode);
-#endif
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<bfloat16> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<double> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-template bool
-compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
-                                    bfloat16, double, RoundingMode);
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template bool compare_binary_operation_one_output(Operation,
-                                                  const BinaryInput<float128> &,
-                                                  bfloat16, double,
-                                                  RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template <typename InputType, typename OutputType>
-bool compare_ternary_operation_one_output(Operation op,
-                                          const TernaryInput<InputType> &input,
-                                          OutputType libc_result,
-                                          double ulp_tolerance,
-                                          RoundingMode rounding) {
-  unsigned int precision = get_precision<InputType>(ulp_tolerance);
-  MPFRNumber mpfr_result = ternary_operation_one_output(
-      op, input.x, input.y, input.z, precision, rounding);
-  double ulp = mpfr_result.ulp(libc_result);
-
-  return (ulp <= ulp_tolerance);
-}
-
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<float> &,
-                                                   float, double, RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   float, double, RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   double, double,
-                                                   RoundingMode);
-template bool compare_ternary_operation_one_output(
-    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
-template bool compare_ternary_operation_one_output(
-    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
-template bool
-compare_ternary_operation_one_output(Operation,
-                                     const TernaryInput<long double> &,
-                                     long double, double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool
-compare_ternary_operation_one_output(Operation, const TernaryInput<float16> &,
-                                     float16, double, RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<float> &,
-                                                   float16, double,
-                                                   RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   float16, double,
-                                                   RoundingMode);
-template bool
-compare_ternary_operation_one_output(Operation,
-                                     const TernaryInput<long double> &, float16,
-                                     double, RoundingMode);
-#endif
-
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<float> &,
-                                                   bfloat16, double,
-                                                   RoundingMode);
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<double> &,
-                                                   bfloat16, double,
-                                                   RoundingMode);
-template bool
-compare_ternary_operation_one_output(Operation,
-                                     const TernaryInput<long double> &,
-                                     bfloat16, double, RoundingMode);
-
-#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
-    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-template bool
-compare_ternary_operation_one_output(Operation, const TernaryInput<float128> &,
-                                     bfloat16, double, RoundingMode);
-#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
-       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
-
-} // namespace internal
-
-template <typename T> bool round_to_long(T x, long &result) {
-  MPFRNumber mpfr(x);
-  return mpfr.round_to_long(result);
-}
-
-template bool round_to_long<float>(float, long &);
-template bool round_to_long<double>(double, long &);
-template bool round_to_long<long double>(long double, long &);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool round_to_long<float16>(float16, long &);
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool round_to_long<float128>(float128, long &);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template bool round_to_long<bfloat16>(bfloat16, long &);
-
-template <typename T> bool round_to_long(T x, RoundingMode mode, long &result) {
-  MPFRNumber mpfr(x);
-  return mpfr.round_to_long(get_mpfr_rounding_mode(mode), result);
-}
-
-template bool round_to_long<float>(float, RoundingMode, long &);
-template bool round_to_long<double>(double, RoundingMode, long &);
-template bool round_to_long<long double>(long double, RoundingMode, long &);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template bool round_to_long<float16>(float16, RoundingMode, long &);
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template bool round_to_long<float128>(float128, RoundingMode, long &);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template bool round_to_long<bfloat16>(bfloat16, RoundingMode, long &);
-
-template <typename T> T round(T x, RoundingMode mode) {
-  MPFRNumber mpfr(x);
-  MPFRNumber result = mpfr.rint(get_mpfr_rounding_mode(mode));
-  return result.as<T>();
-}
-
-template float round<float>(float, RoundingMode);
-template double round<double>(double, RoundingMode);
-template long double round<long double>(long double, RoundingMode);
-
-#ifdef LIBC_TYPES_HAS_FLOAT16
-template float16 round<float16>(float16, RoundingMode);
-#endif // LIBC_TYPES_HAS_FLOAT16
-
-#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-template float128 round<float128>(float128, RoundingMode);
-#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
-
-template bfloat16 round<bfloat16>(bfloat16, RoundingMode);
-
-} // namespace mpfr
-} // namespace testing
-} // namespace LIBC_NAMESPACE_DECL
+//===-- Utils which wrap MPFR ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "MPFRUtils.h"
+#include "MPCommon.h"
+
+#include "src/__support/CPP/array.h"
+#include "src/__support/CPP/stringstream.h"
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/FPUtil/fpbits_str.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace testing {
+namespace mpfr {
+namespace internal {
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+unary_operation(Operation op, InputType input, unsigned int precision,
+                RoundingMode rounding) {
+  MPFRNumber mpfrInput(input, precision, rounding);
+  switch (op) {
+  case Operation::Abs:
+    return mpfrInput.abs();
+  case Operation::Acos:
+    return mpfrInput.acos();
+  case Operation::Acosh:
+    return mpfrInput.acosh();
+  case Operation::Acospi:
+    return mpfrInput.acospi();
+  case Operation::Asin:
+    return mpfrInput.asin();
+  case Operation::Asinh:
+    return mpfrInput.asinh();
+  case Operation::Asinpi:
+    return mpfrInput.asinpi();
+  case Operation::Atan:
+    return mpfrInput.atan();
+  case Operation::Atanh:
+    return mpfrInput.atanh();
+  case Operation::Atanpi:
+    return mpfrInput.atanpi();
+  case Operation::Cbrt:
+    return mpfrInput.cbrt();
+  case Operation::Ceil:
+    return mpfrInput.ceil();
+  case Operation::Cos:
+    return mpfrInput.cos();
+  case Operation::Cosh:
+    return mpfrInput.cosh();
+  case Operation::Cospi:
+    return mpfrInput.cospi();
+  case Operation::Erf:
+    return mpfrInput.erf();
+  case Operation::Exp:
+    return mpfrInput.exp();
+  case Operation::Exp2:
+    return mpfrInput.exp2();
+  case Operation::Exp2m1:
+    return mpfrInput.exp2m1();
+  case Operation::Exp10:
+    return mpfrInput.exp10();
+  case Operation::Exp10m1:
+    return mpfrInput.exp10m1();
+  case Operation::Expm1:
+    return mpfrInput.expm1();
+  case Operation::Floor:
+    return mpfrInput.floor();
+  case Operation::Log:
+    return mpfrInput.log();
+  case Operation::Log2:
+    return mpfrInput.log2();
+  case Operation::Log10:
+    return mpfrInput.log10();
+  case Operation::Log1p:
+    return mpfrInput.log1p();
+  case Operation::Mod2PI:
+    return mpfrInput.mod_2pi();
+  case Operation::ModPIOver2:
+    return mpfrInput.mod_pi_over_2();
+  case Operation::ModPIOver4:
+    return mpfrInput.mod_pi_over_4();
+  case Operation::Round:
+    return mpfrInput.round();
+  case Operation::RoundEven:
+    return mpfrInput.roundeven();
+  case Operation::Rsqrt:
+    return mpfrInput.rsqrt();
+  case Operation::Sin:
+    return mpfrInput.sin();
+  case Operation::Sinpi:
+    return mpfrInput.sinpi();
+  case Operation::Sinh:
+    return mpfrInput.sinh();
+  case Operation::Sqrt:
+    return mpfrInput.sqrt();
+  case Operation::Tan:
+    return mpfrInput.tan();
+  case Operation::Tanh:
+    return mpfrInput.tanh();
+  case Operation::Tanpi:
+    return mpfrInput.tanpi();
+  case Operation::Trunc:
+    return mpfrInput.trunc();
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+unary_operation_two_outputs(Operation op, InputType input, int &output,
+                            unsigned int precision, RoundingMode rounding) {
+  MPFRNumber mpfrInput(input, precision, rounding);
+  switch (op) {
+  case Operation::Frexp:
+    return mpfrInput.frexp(output);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+binary_operation_one_output(Operation op, InputType x, InputType y,
+                            unsigned int precision, RoundingMode rounding) {
+  MPFRNumber inputX(x, precision, rounding);
+  MPFRNumber inputY(y, precision, rounding);
+  switch (op) {
+  case Operation::Add:
+    return inputX.add(inputY);
+  case Operation::Atan2:
+    return inputX.atan2(inputY);
+  case Operation::Div:
+    return inputX.div(inputY);
+  case Operation::Fmod:
+    return inputX.fmod(inputY);
+  case Operation::Hypot:
+    return inputX.hypot(inputY);
+  case Operation::Mul:
+    return inputX.mul(inputY);
+  case Operation::Pow:
+    return inputX.pow(inputY);
+  case Operation::Sub:
+    return inputX.sub(inputY);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+binary_operation_two_outputs(Operation op, InputType x, InputType y,
+                             int &output, unsigned int precision,
+                             RoundingMode rounding) {
+  MPFRNumber inputX(x, precision, rounding);
+  MPFRNumber inputY(y, precision, rounding);
+  switch (op) {
+  case Operation::RemQuo:
+    return inputX.remquo(inputY, output);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+template <typename InputType>
+cpp::enable_if_t<cpp::is_floating_point_v<InputType>, MPFRNumber>
+ternary_operation_one_output(Operation op, InputType x, InputType y,
+                             InputType z, unsigned int precision,
+                             RoundingMode rounding) {
+  // For FMA function, we just need to compare with the mpfr_fma with the same
+  // precision as InputType.  Using higher precision as the intermediate results
+  // to compare might incorrectly fail due to double-rounding errors.
+  MPFRNumber inputX(x, precision, rounding);
+  MPFRNumber inputY(y, precision, rounding);
+  MPFRNumber inputZ(z, precision, rounding);
+  switch (op) {
+  case Operation::Fma:
+    return inputX.fma(inputY, inputZ);
+  default:
+    __builtin_unreachable();
+  }
+}
+
+// Remark: For all the explain_*_error functions, we will use std::stringstream
+// to build the complete error messages before sending it to the outstream `OS`
+// once at the end.  This will stop the error messages from interleaving when
+// the tests are running concurrently.
+template <typename InputType, typename OutputType>
+void explain_unary_operation_single_output_error(Operation op, InputType input,
+                                                 OutputType matchValue,
+                                                 double ulp_tolerance,
+                                                 RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfrInput(input, precision);
+  MPFRNumber mpfr_result;
+  mpfr_result = unary_operation(op, input, precision, rounding);
+  MPFRNumber mpfrMatchValue(matchValue);
+  cpp::array<char, 1024> msg_buf;
+  cpp::StringStream msg(msg_buf);
+  msg << "Match value not within tolerance value of MPFR result:\n"
+      << "  Input decimal: " << mpfrInput.str() << '\n';
+  msg << "     Input bits: " << str(FPBits<InputType>(input)) << '\n';
+  msg << '\n' << "  Match decimal: " << mpfrMatchValue.str() << '\n';
+  msg << "     Match bits: " << str(FPBits<OutputType>(matchValue)) << '\n';
+  msg << '\n' << "    MPFR result: " << mpfr_result.str() << '\n';
+  msg << "   MPFR rounded: "
+      << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
+  msg << '\n';
+  msg << "      ULP error: " << mpfr_result.ulp_as_mpfr_number(matchValue).str()
+      << '\n';
+  if (msg.overflow())
+    __builtin_unreachable();
+  tlog << msg.str();
+}
+
+template void explain_unary_operation_single_output_error(Operation op, float,
+                                                          float, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, double,
+                                                          double, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double,
+                                                          long double, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, double,
+                                                          float, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double, float,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double, double,
+                                                          double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template void explain_unary_operation_single_output_error(Operation op, float16,
+                                                          float16, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, float,
+                                                          float16, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op, double,
+                                                          float16, double,
+                                                          RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          long double, float16,
+                                                          double, RoundingMode);
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, float16,
+                                                          double, RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, float128,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, float,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, double,
+                                                          double, RoundingMode);
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          float128, long double,
+                                                          double, RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template void explain_unary_operation_single_output_error(Operation op,
+                                                          bfloat16, bfloat16,
+                                                          double, RoundingMode);
+
+template <typename T>
+void explain_unary_operation_two_outputs_error(
+    Operation op, T input, const BinaryOutput<T> &libc_result,
+    double ulp_tolerance, RoundingMode rounding) {
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfrInput(input, precision);
+  int mpfrIntResult;
+  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
+                                                       precision, rounding);
+
+  if (mpfrIntResult != libc_result.i) {
+    tlog << "MPFR integral result: " << mpfrIntResult << '\n'
+         << "Libc integral result: " << libc_result.i << '\n';
+  } else {
+    tlog << "Integral result from libc matches integral result from MPFR.\n";
+  }
+
+  MPFRNumber mpfrMatchValue(libc_result.f);
+  tlog
+      << "Libc floating point result is not within tolerance value of the MPFR "
+      << "result.\n\n";
+
+  tlog << "            Input decimal: " << mpfrInput.str() << "\n\n";
+
+  tlog << "Libc floating point value: " << mpfrMatchValue.str() << '\n';
+  tlog << " Libc floating point bits: " << str(FPBits<T>(libc_result.f))
+       << '\n';
+  tlog << "\n\n";
+
+  tlog << "              MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "             MPFR rounded: " << str(FPBits<T>(mpfr_result.as<T>()))
+       << '\n';
+  tlog << '\n'
+       << "                ULP error: "
+       << mpfr_result.ulp_as_mpfr_number(libc_result.f).str() << '\n';
+}
+
+template void explain_unary_operation_two_outputs_error<float>(
+    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
+template void explain_unary_operation_two_outputs_error<double>(
+    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
+template void explain_unary_operation_two_outputs_error<long double>(
+    Operation, long double, const BinaryOutput<long double> &, double,
+    RoundingMode);
+
+template <typename T>
+void explain_binary_operation_two_outputs_error(
+    Operation op, const BinaryInput<T> &input,
+    const BinaryOutput<T> &libc_result, double ulp_tolerance,
+    RoundingMode rounding) {
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfrX(input.x, precision);
+  MPFRNumber mpfrY(input.y, precision);
+  int mpfrIntResult;
+  MPFRNumber mpfr_result = binary_operation_two_outputs(
+      op, input.x, input.y, mpfrIntResult, precision, rounding);
+  MPFRNumber mpfrMatchValue(libc_result.f);
+
+  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n'
+       << "MPFR integral result: " << mpfrIntResult << '\n'
+       << "Libc integral result: " << libc_result.i << '\n'
+       << "Libc floating point result: " << mpfrMatchValue.str() << '\n'
+       << "               MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "Libc floating point result bits: " << str(FPBits<T>(libc_result.f))
+       << '\n';
+  tlog << "              MPFR rounded bits: "
+       << str(FPBits<T>(mpfr_result.as<T>())) << '\n';
+  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result.f).str()
+       << '\n';
+}
+
+template void explain_binary_operation_two_outputs_error<float>(
+    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
+    RoundingMode);
+template void explain_binary_operation_two_outputs_error<double>(
+    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
+    double, RoundingMode);
+template void explain_binary_operation_two_outputs_error<long double>(
+    Operation, const BinaryInput<long double> &,
+    const BinaryOutput<long double> &, double, RoundingMode);
+
+template <typename InputType, typename OutputType>
+void explain_binary_operation_one_output_error(
+    Operation op, const BinaryInput<InputType> &input, OutputType libc_result,
+    double ulp_tolerance, RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfrX(input.x, precision);
+  MPFRNumber mpfrY(input.y, precision);
+  FPBits<InputType> xbits(input.x);
+  FPBits<InputType> ybits(input.y);
+  MPFRNumber mpfr_result =
+      binary_operation_one_output(op, input.x, input.y, precision, rounding);
+  MPFRNumber mpfrMatchValue(libc_result);
+
+  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str() << '\n';
+  tlog << "First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
+  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
+
+  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
+       << "MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "Libc floating point result bits: "
+       << str(FPBits<OutputType>(libc_result)) << '\n';
+  tlog << "              MPFR rounded bits: "
+       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
+  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
+       << '\n';
+}
+
+template void
+explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
+                                          float, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, float, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, double, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<long double> &, float, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<long double> &, double, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation,
+                                          const BinaryInput<long double> &,
+                                          long double, double, RoundingMode);
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<float16> &, float16, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
+                                          float16, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, float16, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<long double> &, float16, double, RoundingMode);
+#endif
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<float128> &, float128, double, RoundingMode);
+#endif
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<bfloat16> &, bfloat16, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation, const BinaryInput<float> &,
+                                          bfloat16, double, RoundingMode);
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<double> &, bfloat16, double, RoundingMode);
+template void
+explain_binary_operation_one_output_error(Operation,
+                                          const BinaryInput<long double> &,
+                                          bfloat16, double, RoundingMode);
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template void explain_binary_operation_one_output_error(
+    Operation, const BinaryInput<float128> &, bfloat16, double, RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+
+template <typename InputType, typename OutputType>
+void explain_ternary_operation_one_output_error(
+    Operation op, const TernaryInput<InputType> &input, OutputType libc_result,
+    double ulp_tolerance, RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfrX(input.x, precision);
+  MPFRNumber mpfrY(input.y, precision);
+  MPFRNumber mpfrZ(input.z, precision);
+  FPBits<InputType> xbits(input.x);
+  FPBits<InputType> ybits(input.y);
+  FPBits<InputType> zbits(input.z);
+  MPFRNumber mpfr_result = ternary_operation_one_output(
+      op, input.x, input.y, input.z, precision, rounding);
+  MPFRNumber mpfrMatchValue(libc_result);
+
+  tlog << "Input decimal: x: " << mpfrX.str() << " y: " << mpfrY.str()
+       << " z: " << mpfrZ.str() << '\n';
+  tlog << " First input bits: " << str(FPBits<InputType>(input.x)) << '\n';
+  tlog << "Second input bits: " << str(FPBits<InputType>(input.y)) << '\n';
+  tlog << " Third input bits: " << str(FPBits<InputType>(input.z)) << '\n';
+
+  tlog << "Libc result: " << mpfrMatchValue.str() << '\n'
+       << "MPFR result: " << mpfr_result.str() << '\n';
+  tlog << "Libc floating point result bits: "
+       << str(FPBits<OutputType>(libc_result)) << '\n';
+  tlog << "              MPFR rounded bits: "
+       << str(FPBits<OutputType>(mpfr_result.as<OutputType>())) << '\n';
+  tlog << "ULP error: " << mpfr_result.ulp_as_mpfr_number(libc_result).str()
+       << '\n';
+}
+
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float> &, float, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, float, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, double, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
+template void
+explain_ternary_operation_one_output_error(Operation,
+                                           const TernaryInput<long double> &,
+                                           long double, double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float16> &, float16, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float> &, float16, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, float16, double, RoundingMode);
+template void
+explain_ternary_operation_one_output_error(Operation,
+                                           const TernaryInput<long double> &,
+                                           float16, double, RoundingMode);
+#endif
+
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float> &, bfloat16, double, RoundingMode);
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<double> &, bfloat16, double, RoundingMode);
+template void
+explain_ternary_operation_one_output_error(Operation,
+                                           const TernaryInput<long double> &,
+                                           bfloat16, double, RoundingMode);
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<float128> &, bfloat16, double, RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+
+template <typename InputType, typename OutputType>
+bool compare_unary_operation_single_output(Operation op, InputType input,
+                                           OutputType libc_result,
+                                           double ulp_tolerance,
+                                           RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfr_result;
+  mpfr_result = unary_operation(op, input, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result);
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_unary_operation_single_output(Operation, float, float,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, double, double,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    long double, double,
+                                                    RoundingMode);
+template bool compare_unary_operation_single_output(Operation, double, float,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    float, double,
+                                                    RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    double, double,
+                                                    RoundingMode);
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool compare_unary_operation_single_output(Operation, float16, float16,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float, float16,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, double, float16,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, long double,
+                                                    float16, double,
+                                                    RoundingMode);
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool compare_unary_operation_single_output(Operation, float128,
+                                                    float16, double,
+                                                    RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool compare_unary_operation_single_output(Operation, float128,
+                                                    float128, double,
+                                                    RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float128, float,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float128, double,
+                                                    double, RoundingMode);
+template bool compare_unary_operation_single_output(Operation, float128,
+                                                    long double, double,
+                                                    RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool compare_unary_operation_single_output(Operation, bfloat16,
+                                                    bfloat16, double,
+                                                    RoundingMode);
+
+template <typename T>
+bool compare_unary_operation_two_outputs(Operation op, T input,
+                                         const BinaryOutput<T> &libc_result,
+                                         double ulp_tolerance,
+                                         RoundingMode rounding) {
+  int mpfrIntResult;
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfr_result = unary_operation_two_outputs(op, input, mpfrIntResult,
+                                                       precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result.f);
+
+  if (mpfrIntResult != libc_result.i)
+    return false;
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_unary_operation_two_outputs<float>(
+    Operation, float, const BinaryOutput<float> &, double, RoundingMode);
+template bool compare_unary_operation_two_outputs<double>(
+    Operation, double, const BinaryOutput<double> &, double, RoundingMode);
+template bool compare_unary_operation_two_outputs<long double>(
+    Operation, long double, const BinaryOutput<long double> &, double,
+    RoundingMode);
+
+template <typename T>
+bool compare_binary_operation_two_outputs(Operation op,
+                                          const BinaryInput<T> &input,
+                                          const BinaryOutput<T> &libc_result,
+                                          double ulp_tolerance,
+                                          RoundingMode rounding) {
+  int mpfrIntResult;
+  unsigned int precision = get_precision<T>(ulp_tolerance);
+  MPFRNumber mpfr_result = binary_operation_two_outputs(
+      op, input.x, input.y, mpfrIntResult, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result.f);
+
+  if (mpfrIntResult != libc_result.i) {
+    if (op == Operation::RemQuo) {
+      if ((0x7 & mpfrIntResult) != (0x7 & libc_result.i))
+        return false;
+    } else {
+      return false;
+    }
+  }
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_binary_operation_two_outputs<float>(
+    Operation, const BinaryInput<float> &, const BinaryOutput<float> &, double,
+    RoundingMode);
+template bool compare_binary_operation_two_outputs<double>(
+    Operation, const BinaryInput<double> &, const BinaryOutput<double> &,
+    double, RoundingMode);
+template bool compare_binary_operation_two_outputs<long double>(
+    Operation, const BinaryInput<long double> &,
+    const BinaryOutput<long double> &, double, RoundingMode);
+
+template <typename InputType, typename OutputType>
+bool compare_binary_operation_one_output(Operation op,
+                                         const BinaryInput<InputType> &input,
+                                         OutputType libc_result,
+                                         double ulp_tolerance,
+                                         RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfr_result =
+      binary_operation_one_output(op, input.x, input.y, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result);
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float> &,
+                                                  float, double, RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  double, double, RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    float, double, RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    double, double, RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    long double, double, RoundingMode);
+
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  float, double, RoundingMode);
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float16> &,
+                                                  float16, double,
+                                                  RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float> &,
+                                                  float16, double,
+                                                  RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  float16, double,
+                                                  RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    float16, double, RoundingMode);
+#endif
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float128> &,
+                                                  float128, double,
+                                                  RoundingMode);
+#endif
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<bfloat16> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<double> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+template bool
+compare_binary_operation_one_output(Operation, const BinaryInput<long double> &,
+                                    bfloat16, double, RoundingMode);
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template bool compare_binary_operation_one_output(Operation,
+                                                  const BinaryInput<float128> &,
+                                                  bfloat16, double,
+                                                  RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template <typename InputType, typename OutputType>
+bool compare_ternary_operation_one_output(Operation op,
+                                          const TernaryInput<InputType> &input,
+                                          OutputType libc_result,
+                                          double ulp_tolerance,
+                                          RoundingMode rounding) {
+  unsigned int precision = get_precision<InputType>(ulp_tolerance);
+  MPFRNumber mpfr_result = ternary_operation_one_output(
+      op, input.x, input.y, input.z, precision, rounding);
+  double ulp = mpfr_result.ulp(libc_result);
+
+  return (ulp <= ulp_tolerance);
+}
+
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<float> &,
+                                                   float, double, RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   float, double, RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   double, double,
+                                                   RoundingMode);
+template bool compare_ternary_operation_one_output(
+    Operation, const TernaryInput<long double> &, float, double, RoundingMode);
+template bool compare_ternary_operation_one_output(
+    Operation, const TernaryInput<long double> &, double, double, RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation,
+                                     const TernaryInput<long double> &,
+                                     long double, double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool
+compare_ternary_operation_one_output(Operation, const TernaryInput<float16> &,
+                                     float16, double, RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<float> &,
+                                                   float16, double,
+                                                   RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   float16, double,
+                                                   RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation,
+                                     const TernaryInput<long double> &, float16,
+                                     double, RoundingMode);
+#endif
+
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<float> &,
+                                                   bfloat16, double,
+                                                   RoundingMode);
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<double> &,
+                                                   bfloat16, double,
+                                                   RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation,
+                                     const TernaryInput<long double> &,
+                                     bfloat16, double, RoundingMode);
+
+#if defined(LIBC_TYPES_HAS_FLOAT128) &&                                        \
+    defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+template bool
+compare_ternary_operation_one_output(Operation, const TernaryInput<float128> &,
+                                     bfloat16, double, RoundingMode);
+#endif // defined(LIBC_TYPES_HAS_FLOAT128) &&
+       // defined(LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE)
+
+} // namespace internal
+
+template <typename T> bool round_to_long(T x, long &result) {
+  MPFRNumber mpfr(x);
+  return mpfr.round_to_long(result);
+}
+
+template bool round_to_long<float>(float, long &);
+template bool round_to_long<double>(double, long &);
+template bool round_to_long<long double>(long double, long &);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool round_to_long<float16>(float16, long &);
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool round_to_long<float128>(float128, long &);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template bool round_to_long<bfloat16>(bfloat16, long &);
+
+template <typename T> bool round_to_long(T x, RoundingMode mode, long &result) {
+  MPFRNumber mpfr(x);
+  return mpfr.round_to_long(get_mpfr_rounding_mode(mode), result);
+}
+
+template bool round_to_long<float>(float, RoundingMode, long &);
+template bool round_to_long<double>(double, RoundingMode, long &);
+template bool round_to_long<long double>(long double, RoundingMode, long &);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template bool round_to_long<float16>(float16, RoundingMode, long &);
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template bool round_to_long<float128>(float128, RoundingMode, long &);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template bool round_to_long<bfloat16>(bfloat16, RoundingMode, long &);
+
+template <typename T> T round(T x, RoundingMode mode) {
+  MPFRNumber mpfr(x);
+  MPFRNumber result = mpfr.rint(get_mpfr_rounding_mode(mode));
+  return result.as<T>();
+}
+
+template float round<float>(float, RoundingMode);
+template double round<double>(double, RoundingMode);
+template long double round<long double>(long double, RoundingMode);
+
+#ifdef LIBC_TYPES_HAS_FLOAT16
+template float16 round<float16>(float16, RoundingMode);
+#endif // LIBC_TYPES_HAS_FLOAT16
+
+#ifdef LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+template float128 round<float128>(float128, RoundingMode);
+#endif // LIBC_TYPES_FLOAT128_IS_NOT_LONG_DOUBLE
+
+template bfloat16 round<bfloat16>(bfloat16, RoundingMode);
+
+} // namespace mpfr
+} // namespace testing
+} // namespace LIBC_NAMESPACE_DECL

>From 1747ea0d18ce0bf896e5f918727574ea4d4e6094 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 21 Feb 2026 18:04:45 +0530
Subject: [PATCH 09/50] lf2

---
 libc/test/src/math/sqrt_test.cpp | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/libc/test/src/math/sqrt_test.cpp b/libc/test/src/math/sqrt_test.cpp
index 3eebc38fe5f4d..1551b31d6f715 100644
--- a/libc/test/src/math/sqrt_test.cpp
+++ b/libc/test/src/math/sqrt_test.cpp
@@ -1,13 +1,13 @@
-//===-- Unittests for sqrt ------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "SqrtTest.h"
-
-#include "src/math/sqrt.h"
-
-LIST_SQRT_TESTS(double, LIBC_NAMESPACE::sqrt)
+//===-- Unittests for sqrt ------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "SqrtTest.h"
+
+#include "src/math/sqrt.h"
+
+LIST_SQRT_TESTS(double, LIBC_NAMESPACE::sqrt)

>From 6f36e82b42cb6a35a15642d73bc076bfd47393cf Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sat, 21 Feb 2026 19:26:53 +0530
Subject: [PATCH 10/50] fixing CMAKE errors

---
 libc/src/math/generic/CMakeLists.txt | 2 +-
 libc/test/src/math/CMakeLists.txt    | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 9f31dc934da46..0aa2b5c1270c0 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -4370,7 +4370,7 @@ add_entrypoint_object(
   DEPENDS
     libc.src.__support.common
     libc.src.__support.FPUtil.bfloat16
-    libc.src.__support.FPUtil.FMA
+    libc.src.__support.FPUtil.fma
     libc.src.__support.macros.config
     libc.src.__support.macros.properties.types
 )
diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index c6bb38922191b..541e3c8026873 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -5497,11 +5497,8 @@ add_fp_unittest(
   DEPENDS
     libc.src.math.fmabf16
     libc.src.stdlib.rand
-<<<<<<< HEAD
     libc.src.stdlib.srand
-=======
     libc.src.stdlib.srandq
->>>>>>> 2ee10dd30003 (crlf->lf 4)
     libc.src.__support.FPUtil.bfloat16
 )
 

>From 9435c709c04a1fdd36d12f0948c941a2a568b369 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sun, 22 Feb 2026 18:04:18 +0530
Subject: [PATCH 11/50] unsigned int

---
 libc/test/src/math/fmabf16_test.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 431fa36864a57..190496dd4f577 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -30,8 +30,8 @@ static constexpr uint16_t NEG_STOP = 0xff80U; //-inf
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
   std::vector<bfloat16> z_val = {
-      FPBits(0x0000).get_val(),          FPBits(0x8000).get_val(),
-      FPBits(0x3f80).get_val(),          FPBits(0xbf80).get_val(),
+      FPBits(0x0000U).get_val(),          FPBits(0x8000U).get_val(),
+      FPBits(0x3f80U).get_val(),          FPBits(0xbf80U).get_val(),
       FPBits::min_subnormal().get_val(), FPBits::max_normal().get_val(),
       FPBits::inf().get_val(),           FPBits::quiet_nan().get_val()};
   for (bfloat16 z : z_val) {
@@ -53,8 +53,8 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
 
   std::vector<bfloat16> z_val = {
-      FPBits(0x0000).get_val(),          FPBits(0x8000).get_val(),
-      FPBits(0x3f80).get_val(),          FPBits(0xbf80).get_val(),
+      FPBits(0x0000U).get_val(),          FPBits(0x8000U).get_val(),
+      FPBits(0x3f80U).get_val(),          FPBits(0xbf80U).get_val(),
       FPBits::min_subnormal().get_val(), FPBits::max_normal().get_val(),
       FPBits::inf().get_val(),           FPBits::quiet_nan().get_val()};
   for (bfloat16 z : z_val) {

>From a372b87a53ab6ca29034e2f8fe1fb165c52f27ea Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sun, 22 Feb 2026 18:10:56 +0530
Subject: [PATCH 12/50] shifting to only checking +0 and -0 along with -x*y

---
 libc/test/src/math/fmabf16_test.cpp | 22 +++++++---------------
 1 file changed, 7 insertions(+), 15 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 190496dd4f577..c10df50c0ffc6 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -29,40 +29,32 @@ static constexpr uint16_t NEG_STOP = 0xff80U; //-inf
 
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
-  std::vector<bfloat16> z_val = {
-      FPBits(0x0000U).get_val(),          FPBits(0x8000U).get_val(),
-      FPBits(0x3f80U).get_val(),          FPBits(0xbf80U).get_val(),
-      FPBits::min_subnormal().get_val(), FPBits::max_normal().get_val(),
-      FPBits::inf().get_val(),           FPBits::quiet_nan().get_val()};
-  for (bfloat16 z : z_val) {
+  
     for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
       for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
-
+        bfloat16 z = FPBits(POS_START).get_val();
+        
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
     }
-  }
+  
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
 
-  std::vector<bfloat16> z_val = {
-      FPBits(0x0000U).get_val(),          FPBits(0x8000U).get_val(),
-      FPBits(0x3f80U).get_val(),          FPBits(0xbf80U).get_val(),
-      FPBits::min_subnormal().get_val(), FPBits::max_normal().get_val(),
-      FPBits::inf().get_val(),           FPBits::quiet_nan().get_val()};
-  for (bfloat16 z : z_val) {
+  bfloat16 z = 
     for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
       for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
+        bfloat16 z = FPBits(NEG_START).get_val();
 
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
@@ -70,7 +62,7 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
     }
-  }
+  
 }
 TEST_F(LlvmLibcFmaBf16Test, CancellationTest) {
 

>From af405a950dafa91e62391c3ffcb9a8e056e3db2a Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sun, 22 Feb 2026 18:41:08 +0530
Subject: [PATCH 13/50] testing for special num

---
 libc/src/__support/FPUtil/generic/add_sub.h | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/libc/src/__support/FPUtil/generic/add_sub.h b/libc/src/__support/FPUtil/generic/add_sub.h
index 4ef9ce06ebf95..aabc7fa59d840 100644
--- a/libc/src/__support/FPUtil/generic/add_sub.h
+++ b/libc/src/__support/FPUtil/generic/add_sub.h
@@ -96,13 +96,15 @@ add_or_sub(InType x, InType y) {
 
     if (x_bits.is_zero()) {
       if (y_bits.is_zero()) {
-        if (is_effectively_add)
+        if (is_effectively_add) {
           return OutFPBits::zero(x_bits.sign()).get_val();
-        switch (quick_get_round()) {
-        case FE_DOWNWARD:
-          return OutFPBits::zero(Sign::NEG).get_val();
-        default:
-          return OutFPBits::zero(Sign::POS).get_val();
+        } else {
+          switch (quick_get_round()) {
+          case FE_DOWNWARD:
+            return OutFPBits::zero(Sign::NEG).get_val();
+          default:
+            return OutFPBits::zero(Sign::POS).get_val();
+          }
         }
       }
 

>From 445c58cfa9546e6bc9b80e1ee184001240972355 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sun, 22 Feb 2026 18:54:09 +0530
Subject: [PATCH 14/50] syn err

---
 libc/test/src/math/fmabf16_test.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index c10df50c0ffc6..a2241be0f568c 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -47,9 +47,7 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-
-  bfloat16 z = 
-    for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
+  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
       for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
@@ -79,4 +77,4 @@ TEST_F(LlvmLibcFmaBf16Test, CancellationTest) {
                                      LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
     }
   }
-}
\ No newline at end of file
+}

>From 75765e3b75ae39eb43a2d207f6c717a8326a23fe Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sun, 22 Feb 2026 19:03:41 +0530
Subject: [PATCH 15/50] testing terney for bfloat16-bfloat16

---
 libc/utils/MPFRWrapper/MPFRUtils.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libc/utils/MPFRWrapper/MPFRUtils.cpp b/libc/utils/MPFRWrapper/MPFRUtils.cpp
index a7d307b47c3e8..22617c0ee3f99 100644
--- a/libc/utils/MPFRWrapper/MPFRUtils.cpp
+++ b/libc/utils/MPFRWrapper/MPFRUtils.cpp
@@ -496,6 +496,8 @@ explain_ternary_operation_one_output_error(Operation,
                                            float16, double, RoundingMode);
 #endif
 
+template void explain_ternary_operation_one_output_error(
+    Operation, const TernaryInput<bfloat16> &, bfloat16, double, RoundingMode);
 template void explain_ternary_operation_one_output_error(
     Operation, const TernaryInput<float> &, bfloat16, double, RoundingMode);
 template void explain_ternary_operation_one_output_error(
@@ -762,6 +764,10 @@ compare_ternary_operation_one_output(Operation,
                                      double, RoundingMode);
 #endif
 
+template bool compare_ternary_operation_one_output(Operation,
+                                                   const TernaryInput<bfloat16> &,
+                                                   bfloat16, double,
+                                                   RoundingMode);
 template bool compare_ternary_operation_one_output(Operation,
                                                    const TernaryInput<float> &,
                                                    bfloat16, double,

>From 2b7693aa5753e6db02937c39ab70a6a8ae2806b9 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Sun, 22 Feb 2026 20:52:35 +0530
Subject: [PATCH 16/50] removed -x*y test ( to be added )

---
 libc/test/src/math/fmabf16_test.cpp | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index a2241be0f568c..68ee2208beb1f 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -25,8 +25,6 @@ static constexpr uint16_t POS_STOP = 0x7f80U;
 static constexpr uint16_t NEG_START = 0x8000U;
 static constexpr uint16_t NEG_STOP = 0xff80U; //-inf
 
-// covers normal range since special cases covered in unit tests
-
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
   
@@ -61,20 +59,4 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
       }
     }
   
-}
-TEST_F(LlvmLibcFmaBf16Test, CancellationTest) {
-
-  for (uint16_t v1 = 0; v1 <= 0xFFFF; v1 += 13) {
-    for (uint16_t v2 = 0; v2 <= 0xFFFF; v2 += 17) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      bfloat16 z = -(x * y);
-
-      mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-    }
-  }
-}
+}
\ No newline at end of file

>From 204790091e4e80415ba859073c6c3468da7e6377 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 07:04:29 +0530
Subject: [PATCH 17/50] EOF

---
 libc/src/__support/FPUtil/bfloat16.h |  4 ++--
 libc/test/src/math/fmabf16_test.cpp  | 35 ++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/libc/src/__support/FPUtil/bfloat16.h b/libc/src/__support/FPUtil/bfloat16.h
index 7d64b441bf9b2..4629a3d950290 100644
--- a/libc/src/__support/FPUtil/bfloat16.h
+++ b/libc/src/__support/FPUtil/bfloat16.h
@@ -115,8 +115,8 @@ struct BFloat16 {
   }
 
   LIBC_INLINE BFloat16 &operator*=(const BFloat16 &other) {
-    *this = *this * other;
-    return *this;
+  *this = *this * other;
+  return *this;
   }
 }; // struct BFloat16
 
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 68ee2208beb1f..862f019122c15 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -59,4 +59,39 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
       }
     }
   
+}
+TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
+
+  
+    for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
+      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
+
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+        bfloat16 z = -(x * y);
+        
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+    }
+  
+}
+
+TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
+  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
+      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
+
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+        bfloat16 z = -(x * y);
+
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+    }
+  
 }
\ No newline at end of file

>From c9ac7ab67d50ebecc4466342ec31cedf3e7fdea6 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 07:12:47 +0530
Subject: [PATCH 18/50] test edit rm

---
 libc/test/src/math/fmabf16_test.cpp | 35 -----------------------------
 1 file changed, 35 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 862f019122c15..da5f6db2696cc 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -60,38 +60,3 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
     }
   
 }
-TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
-
-  
-    for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
-      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
-
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        bfloat16 z = -(x * y);
-        
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-    }
-  
-}
-
-TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
-      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
-
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        bfloat16 z = -(x * y);
-
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-    }
-  
-}
\ No newline at end of file

>From 3281d9d0c96ea5c9e9d56054598a7a3c90bab4b6 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 11:39:27 +0530
Subject: [PATCH 19/50] chceking if its time limit constrain for ubuntu 24.04 (
 reduced to 2^16)

---
 libc/src/__support/FPUtil/bfloat16.h | 4 ++--
 libc/test/src/math/fmabf16_test.cpp  | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/libc/src/__support/FPUtil/bfloat16.h b/libc/src/__support/FPUtil/bfloat16.h
index 4629a3d950290..7d64b441bf9b2 100644
--- a/libc/src/__support/FPUtil/bfloat16.h
+++ b/libc/src/__support/FPUtil/bfloat16.h
@@ -115,8 +115,8 @@ struct BFloat16 {
   }
 
   LIBC_INLINE BFloat16 &operator*=(const BFloat16 &other) {
-  *this = *this * other;
-  return *this;
+    *this = *this * other;
+    return *this;
   }
 }; // struct BFloat16
 
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index da5f6db2696cc..4ebc029a72387 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -29,7 +29,7 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
   
     for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
-      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
+      // for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
@@ -39,14 +39,14 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
+      // }
     }
   
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
   for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
-      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
+      // for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
@@ -57,6 +57,6 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
-    }
+    // }
   
 }

>From 2a57f92befac8a74e9bca1b588e10877d75b6f90 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 11:49:01 +0530
Subject: [PATCH 20/50] continued prev

---
 libc/test/src/math/fmabf16_test.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 4ebc029a72387..f57af0b6272a8 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,7 +32,7 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
       // for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
+        bfloat16 y = FPBits(POS_START).get_val();
         bfloat16 z = FPBits(POS_START).get_val();
         
         mpfr::TernaryInput<bfloat16> input{x, y, z};
@@ -49,7 +49,7 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
       // for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
+        bfloat16 y = FPBits(NEG_START).get_val();
         bfloat16 z = FPBits(NEG_START).get_val();
 
         mpfr::TernaryInput<bfloat16> input{x, y, z};

>From 3908ad7b32fa8f530c3e6ecf75801502b1b4bc7e Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 12:31:41 +0530
Subject: [PATCH 21/50] github CI passes for single bf16 input space - testing
 for 2 + 1 fixed

---
 libc/test/src/math/fmabf16_test.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index f57af0b6272a8..da5f6db2696cc 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -29,27 +29,27 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
   
     for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
-      // for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
+      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(POS_START).get_val();
+        bfloat16 y = FPBits(v2).get_val();
         bfloat16 z = FPBits(POS_START).get_val();
         
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      // }
+      }
     }
   
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
   for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
-      // for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
+      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
 
         bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(NEG_START).get_val();
+        bfloat16 y = FPBits(v2).get_val();
         bfloat16 z = FPBits(NEG_START).get_val();
 
         mpfr::TernaryInput<bfloat16> input{x, y, z};
@@ -57,6 +57,6 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
-    // }
+    }
   
 }

>From a15e500dd1a3b1bd73b45737f6c3f26f3d1bfa77 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 13:27:05 +0530
Subject: [PATCH 22/50] reducing the input space while checking proper cases at
 the same time + adding into math website

---
 libc/docs/headers/math/index.rst    |   2 +-
 libc/test/src/math/fmabf16_test.cpp | 122 +++++++++++++++++++++++++---
 2 files changed, 112 insertions(+), 12 deletions(-)

diff --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst
index e8b3fe63b2a6c..0390c56b8e795 100644
--- a/libc/docs/headers/math/index.rst
+++ b/libc/docs/headers/math/index.rst
@@ -309,7 +309,7 @@ Higher Math Functions
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | expm1     | |check|          | |check|         |                        | |check|              |                        |                        | 7.12.6.6               | F.10.3.6                   |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| fma       | |check|          | |check|         |                        | |check|              |                        |                        | 7.12.13.1              | F.10.10.1                  |
+| fma       | |check|          | |check|         |                        | |check|              | |check|                |                        | 7.12.13.1              | F.10.10.1                  |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | f16sqrt   | |check|\*        | |check|\*       | |check|\*              | N/A                  | |check|                |                        | 7.12.14.6              | F.10.11                    |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index da5f6db2696cc..a95c38b6dfbac 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -11,7 +11,6 @@
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
 #include "utils/MPFRWrapper/MPFRUtils.h"
-#include <vector>
 
 using LlvmLibcFmaBf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
 
@@ -23,39 +22,140 @@ static constexpr uint16_t POS_STOP = 0x7f80U;
 
 // range: [-0, -inf]
 static constexpr uint16_t NEG_START = 0x8000U;
-static constexpr uint16_t NEG_STOP = 0xff80U; //-inf
+static constexpr uint16_t NEG_STOP = 0xff80U;
+
+// subnormal range (positive)
+static constexpr uint16_t SUBNORM_POS_START = 0x0001U;
+static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
+
+// subnormal range (negative)
+static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
+static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
+
+static constexpr uint16_t STEP = 256;
 
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
-  
-    for (uint16_t v1 = POS_START; v1 <= POS_STOP; ++v1) {
-      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += 256) {
+  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+    for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
 
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
-        bfloat16 z = FPBits(POS_START).get_val();
         
+        for (bfloat16 z : z_values) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+        }
+        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
       }
     }
   
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; ++v1) {
-      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += 256) {
+  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1+= STEP) {
+      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
 
         bfloat16 x = FPBits(v1).get_val();
         bfloat16 y = FPBits(v2).get_val();
-        bfloat16 z = FPBits(NEG_START).get_val();
+        for (bfloat16 z : z_values) {  
+          mpfr::TernaryInput<bfloat16> input{x, y, z};
 
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
+          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+        }
+        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+      }
+    }
+  
+}
+TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
+  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1+= STEP) {
+      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
 
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+        for (bfloat16 z : z_values) {  
+          mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+        }
+        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+      }
+    }
+  
+}
+
+TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
+  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = SUBNORM_POS_START; v1 <= SUBNORM_POS_STOP; v1++) {
+      for (uint16_t v2 = SUBNORM_POS_START; v2 <= SUBNORM_POS_STOP; v2++) {
+
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+        for (bfloat16 z : z_values) {  
+          mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+        }
+        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);  
+      }
+    }
+  
+}
+
+TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
+  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
+      for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
+
+        bfloat16 x = FPBits(v1).get_val();
+        bfloat16 y = FPBits(v2).get_val();
+        for (bfloat16 z : z_values) {  
+          mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+        }
+        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+      }
+    }
+  
+}
+
+TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
+  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  const bfloat16 x_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  const bfloat16 y_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+
+  for (bfloat16 x : x_values) {
+      for (bfloat16 y : y_values) {
+        for (bfloat16 z : z_values) {  
+          mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+        }
+        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
       }
     }
   

>From dca3f895677f50a4e10637eae360f3ef8db66d9b Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 13:27:45 +0530
Subject: [PATCH 23/50] formatted

---
 libc/test/src/math/fmabf16_test.cpp | 216 +++++++++++++++++-----------
 1 file changed, 136 insertions(+), 80 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index a95c38b6dfbac..f06670eb0f10b 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -36,127 +36,183 @@ static constexpr uint16_t STEP = 256;
 
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
-  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
-    for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-      for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
-
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        
-        for (bfloat16 z : z_values) {
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+    for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+
+      for (bfloat16 z : z_values) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-        }
-        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
-  
+  }
 }
 
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
-  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1+= STEP) {
-      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        for (bfloat16 z : z_values) {  
-          mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-        }
-        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
+    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
-  
+  }
 }
 TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
-  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
-  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1+= STEP) {
-      for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        for (bfloat16 z : z_values) {  
-          mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-        }
-        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
-  
+  }
 }
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
-  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
   for (uint16_t v1 = SUBNORM_POS_START; v1 <= SUBNORM_POS_STOP; v1++) {
-      for (uint16_t v2 = SUBNORM_POS_START; v2 <= SUBNORM_POS_STOP; v2++) {
+    for (uint16_t v2 = SUBNORM_POS_START; v2 <= SUBNORM_POS_STOP; v2++) {
 
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        for (bfloat16 z : z_values) {  
-          mpfr::TernaryInput<bfloat16> input{x, y, z};
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
 
-          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-        }
-        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);  
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
-  
+  }
 }
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
-  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
   for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
-      for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
+    for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
 
-        bfloat16 x = FPBits(v1).get_val();
-        bfloat16 y = FPBits(v2).get_val();
-        for (bfloat16 z : z_values) {  
-          mpfr::TernaryInput<bfloat16> input{x, y, z};
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
 
-          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-        }
-        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
-  
+  }
 }
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  const bfloat16 z_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
-  const bfloat16 x_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
-  const bfloat16 y_values[] = {zero, neg_zero, FPBits(0x3f80U).get_val(), FPBits(0xbf80U).get_val(), inf, neg_inf, min_normal, max_normal};
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  const bfloat16 x_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  const bfloat16 y_values[] = {zero,
+                               neg_zero,
+                               FPBits(0x3f80U).get_val(),
+                               FPBits(0xbf80U).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
 
   for (bfloat16 x : x_values) {
-      for (bfloat16 y : y_values) {
-        for (bfloat16 z : z_values) {  
-          mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-          EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-        }
-        mpfr::TernaryInput<bfloat16> input{x, y, -x*y};
+    for (bfloat16 y : y_values) {
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                         LIBC_NAMESPACE::fmabf16(x, y,- x*y), 0.5);
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
-  
+  }
 }

>From f17d86c157360222753d32df33b5fc2c175f004a Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 13:35:59 +0530
Subject: [PATCH 24/50] uint32_t error fixed ( declar at top or static cast )

---
 libc/test/src/math/fmabf16_test.cpp | 33 +++++++++++++++--------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index f06670eb0f10b..3c6fe802bf447 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,14 +32,15 @@ static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
+
 static constexpr uint16_t STEP = 256;
 
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
@@ -67,8 +68,8 @@ TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
@@ -94,8 +95,8 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
 TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
@@ -122,8 +123,8 @@ TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
 TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
@@ -150,8 +151,8 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
@@ -178,24 +179,24 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
                                max_normal};
   const bfloat16 x_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
                                max_normal};
   const bfloat16 y_values[] = {zero,
                                neg_zero,
-                               FPBits(0x3f80U).get_val(),
-                               FPBits(0xbf80U).get_val(),
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,

>From e7316767cdc8764f1e131c64ba3837e47c76b9f1 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 13:48:25 +0530
Subject: [PATCH 25/50] testin without Normal range

---
 libc/test/src/math/fmabf16_test.cpp | 172 ++++++++++++++--------------
 1 file changed, 86 insertions(+), 86 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 3c6fe802bf447..bfbae70935edc 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -33,92 +33,92 @@ static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 
-static constexpr uint16_t STEP = 256;
-
-TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
-
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-    for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
-
-TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
-    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
-TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
+static constexpr uint16_t STEP = 512;
+
+// TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
+
+//   const bfloat16 z_values[] = {zero,
+//                                neg_zero,
+//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+//                                inf,
+//                                neg_inf,
+//                                min_normal,
+//                                max_normal};
+//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+//     for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
+
+//       bfloat16 x = FPBits(v1).get_val();
+//       bfloat16 y = FPBits(v2).get_val();
+
+//       for (bfloat16 z : z_values) {
+//         mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+//       }
+//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+//                                      0.5);
+//     }
+//   }
+// }
+
+// TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
+//   const bfloat16 z_values[] = {zero,
+//                                neg_zero,
+//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+//                                inf,
+//                                neg_inf,
+//                                min_normal,
+//                                max_normal};
+//   for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
+//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+//       bfloat16 x = FPBits(v1).get_val();
+//       bfloat16 y = FPBits(v2).get_val();
+//       for (bfloat16 z : z_values) {
+//         mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+//       }
+//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+//                                      0.5);
+//     }
+//   }
+// }
+// TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
+//   const bfloat16 z_values[] = {zero,
+//                                neg_zero,
+//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+//                                inf,
+//                                neg_inf,
+//                                min_normal,
+//                                max_normal};
+//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+//       bfloat16 x = FPBits(v1).get_val();
+//       bfloat16 y = FPBits(v2).get_val();
+//       for (bfloat16 z : z_values) {
+//         mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+//       }
+//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+//                                      0.5);
+//     }
+//   }
+// }
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
   const bfloat16 z_values[] = {zero,

>From 5dc4b93f8b18117eaf0b20a93cf0c14b87da60e1 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 14:01:48 +0530
Subject: [PATCH 26/50] test

---
 libc/test/src/math/fmabf16_test.cpp | 88 -----------------------------
 1 file changed, 88 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index bfbae70935edc..974a905bc1b22 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,94 +32,6 @@ static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
-
-static constexpr uint16_t STEP = 512;
-
-// TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
-
-//   const bfloat16 z_values[] = {zero,
-//                                neg_zero,
-//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-//                                inf,
-//                                neg_inf,
-//                                min_normal,
-//                                max_normal};
-//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-//     for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
-
-//       bfloat16 x = FPBits(v1).get_val();
-//       bfloat16 y = FPBits(v2).get_val();
-
-//       for (bfloat16 z : z_values) {
-//         mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-//       }
-//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-//                                      0.5);
-//     }
-//   }
-// }
-
-// TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-//   const bfloat16 z_values[] = {zero,
-//                                neg_zero,
-//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-//                                inf,
-//                                neg_inf,
-//                                min_normal,
-//                                max_normal};
-//   for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
-//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-//       bfloat16 x = FPBits(v1).get_val();
-//       bfloat16 y = FPBits(v2).get_val();
-//       for (bfloat16 z : z_values) {
-//         mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-//       }
-//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-//                                      0.5);
-//     }
-//   }
-// }
-// TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
-//   const bfloat16 z_values[] = {zero,
-//                                neg_zero,
-//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-//                                inf,
-//                                neg_inf,
-//                                min_normal,
-//                                max_normal};
-//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-//       bfloat16 x = FPBits(v1).get_val();
-//       bfloat16 y = FPBits(v2).get_val();
-//       for (bfloat16 z : z_values) {
-//         mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-//       }
-//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-//                                      0.5);
-//     }
-//   }
-// }
-
 TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,

>From c2b4fa8b056cfb0b7847596e327befeba8ec4e14 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 14:08:55 +0530
Subject: [PATCH 27/50] only for limited exhaust

---
 libc/test/src/math/fmabf16_test.cpp | 61 -----------------------------
 1 file changed, 61 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 974a905bc1b22..df49e7bbaf9de 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,83 +32,22 @@ static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
-TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = SUBNORM_POS_START; v1 <= SUBNORM_POS_STOP; v1++) {
-    for (uint16_t v2 = SUBNORM_POS_START; v2 <= SUBNORM_POS_STOP; v2++) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
-
-TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
-    for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
                                max_normal};
   const bfloat16 x_values[] = {zero,
                                neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,
                                max_normal};
   const bfloat16 y_values[] = {zero,
                                neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
                                inf,
                                neg_inf,
                                min_normal,

>From 20360f82ad8cecf4dce202d0828e97f899ee06ff Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 14:23:30 +0530
Subject: [PATCH 28/50] test

---
 libc/test/src/math/fmabf16_test.cpp | 25 +++----------------------
 1 file changed, 3 insertions(+), 22 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index df49e7bbaf9de..76e62c80f88ba 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -34,24 +34,9 @@ static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  const bfloat16 x_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  const bfloat16 y_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
+  const bfloat16 z_values[] = {zero, neg_zero, min_normal};
+  const bfloat16 x_values[] = {zero, neg_zero, min_normal};
+  const bfloat16 y_values[] = {zero, neg_zero, min_normal};
 
   for (bfloat16 x : x_values) {
     for (bfloat16 y : y_values) {
@@ -61,10 +46,6 @@ TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
     }
   }
 }

>From 85abb031fa6b5392588b55e8cd79b95e9dbdc9f2 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 14:43:21 +0530
Subject: [PATCH 29/50] testing for max/min normal + special

---
 libc/test/src/math/fmabf16_test.cpp | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 76e62c80f88ba..df49e7bbaf9de 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -34,9 +34,24 @@ static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  const bfloat16 z_values[] = {zero, neg_zero, min_normal};
-  const bfloat16 x_values[] = {zero, neg_zero, min_normal};
-  const bfloat16 y_values[] = {zero, neg_zero, min_normal};
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  const bfloat16 x_values[] = {zero,
+                               neg_zero,
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  const bfloat16 y_values[] = {zero,
+                               neg_zero,
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
 
   for (bfloat16 x : x_values) {
     for (bfloat16 y : y_values) {
@@ -46,6 +61,10 @@ TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
     }
   }
 }

>From 81b5db9cdd6314a69e18e3680f824b4d372c43d3 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 15:51:57 +0530
Subject: [PATCH 30/50] checking if adding condn for that specific test helps

---
 libc/src/__support/FPUtil/generic/FMA.h | 581 ++++++++++++------------
 libc/test/src/math/fmabf16_test.cpp     |   5 +-
 2 files changed, 296 insertions(+), 290 deletions(-)

diff --git a/libc/src/__support/FPUtil/generic/FMA.h b/libc/src/__support/FPUtil/generic/FMA.h
index bec312e44b1b1..2db280af94aaf 100644
--- a/libc/src/__support/FPUtil/generic/FMA.h
+++ b/libc/src/__support/FPUtil/generic/FMA.h
@@ -1,288 +1,293 @@
-//===-- Common header for FMA implementations -------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
-#define LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
-
-#include "src/__support/CPP/bit.h"
-#include "src/__support/CPP/limits.h"
-#include "src/__support/CPP/type_traits.h"
-#include "src/__support/FPUtil/BasicOperations.h"
-#include "src/__support/FPUtil/FPBits.h"
-#include "src/__support/FPUtil/cast.h"
-#include "src/__support/FPUtil/dyadic_float.h"
-#include "src/__support/FPUtil/rounding_mode.h"
-#include "src/__support/big_int.h"
-#include "src/__support/macros/attributes.h"   // LIBC_INLINE
-#include "src/__support/macros/config.h"
-#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
-
-#include "hdr/fenv_macros.h"
-
-namespace LIBC_NAMESPACE_DECL {
-namespace fputil {
-namespace generic {
-
-template <typename OutType, typename InType>
-LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
-                                 cpp::is_floating_point_v<InType> &&
-                                 sizeof(OutType) <= sizeof(InType),
-                             OutType>
-fma(InType x, InType y, InType z);
-
-// TODO(lntue): Implement fmaf that is correctly rounded to all rounding modes.
-// The implementation below only is only correct for the default rounding mode,
-// round-to-nearest tie-to-even.
-template <> LIBC_INLINE float fma<float>(float x, float y, float z) {
-  // Product is exact.
-  double prod = static_cast<double>(x) * static_cast<double>(y);
-  double z_d = static_cast<double>(z);
-  double sum = prod + z_d;
-  fputil::FPBits<double> bit_prod(prod), bitz(z_d), bit_sum(sum);
-
-  if (!(bit_sum.is_inf_or_nan() || bit_sum.is_zero())) {
-    // Since the sum is computed in double precision, rounding might happen
-    // (for instance, when bitz.exponent > bit_prod.exponent + 5, or
-    // bit_prod.exponent > bitz.exponent + 40).  In that case, when we round
-    // the sum back to float, double rounding error might occur.
-    // A concrete example of this phenomenon is as follows:
-    //   x = y = 1 + 2^(-12), z = 2^(-53)
-    // The exact value of x*y + z is 1 + 2^(-11) + 2^(-24) + 2^(-53)
-    // So when rounding to float, fmaf(x, y, z) = 1 + 2^(-11) + 2^(-23)
-    // On the other hand, with the default rounding mode,
-    //   double(x*y + z) = 1 + 2^(-11) + 2^(-24)
-    // and casting again to float gives us:
-    //   float(double(x*y + z)) = 1 + 2^(-11).
-    //
-    // In order to correct this possible double rounding error, first we use
-    // Dekker's 2Sum algorithm to find t such that sum - t = prod + z exactly,
-    // assuming the (default) rounding mode is round-to-the-nearest,
-    // tie-to-even.  Moreover, t satisfies the condition that t < eps(sum),
-    // i.e., t.exponent < sum.exponent - 52. So if t is not 0, meaning rounding
-    // occurs when computing the sum, we just need to use t to adjust (any) last
-    // bit of sum, so that the sticky bits used when rounding sum to float are
-    // correct (when it matters).
-    fputil::FPBits<double> t(
-        (bit_prod.get_biased_exponent() >= bitz.get_biased_exponent())
-            ? ((bit_sum.get_val() - bit_prod.get_val()) - bitz.get_val())
-            : ((bit_sum.get_val() - bitz.get_val()) - bit_prod.get_val()));
-
-    // Update sticky bits if t != 0.0 and the least (52 - 23 - 1 = 28) bits are
-    // zero.
-    if (!t.is_zero() && ((bit_sum.get_mantissa() & 0xfff'ffffULL) == 0)) {
-      if (bit_sum.sign() != t.sign())
-        bit_sum.set_mantissa(bit_sum.get_mantissa() + 1);
-      else if (bit_sum.get_mantissa())
-        bit_sum.set_mantissa(bit_sum.get_mantissa() - 1);
-    }
-  }
-
-  return static_cast<float>(bit_sum.get_val());
-}
-
-namespace internal {
-
-// Extract the sticky bits and shift the `mantissa` to the right by
-// `shift_length`.
-template <typename T>
-LIBC_INLINE cpp::enable_if_t<is_unsigned_integral_or_big_int_v<T>, bool>
-shift_mantissa(int shift_length, T &mant) {
-  if (shift_length >= cpp::numeric_limits<T>::digits) {
-    mant = 0;
-    return true; // prod_mant is non-zero.
-  }
-  T mask = (T(1) << shift_length) - 1;
-  bool sticky_bits = (mant & mask) != 0;
-  mant >>= shift_length;
-  return sticky_bits;
-}
-
-} // namespace internal
-
-template <typename OutType, typename InType>
-LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
-                                 cpp::is_floating_point_v<InType> &&
-                                 sizeof(OutType) <= sizeof(InType),
-                             OutType>
-fma(InType x, InType y, InType z) {
-  using OutFPBits = FPBits<OutType>;
-  using OutStorageType = typename OutFPBits::StorageType;
-  using InFPBits = FPBits<InType>;
-  using InStorageType = typename InFPBits::StorageType;
-
-  constexpr int IN_EXPLICIT_MANT_LEN = InFPBits::FRACTION_LEN + 1;
-  constexpr size_t PROD_LEN = 2 * IN_EXPLICIT_MANT_LEN;
-  constexpr size_t TMP_RESULT_LEN = cpp::bit_ceil(PROD_LEN + 1);
-  using TmpResultType = UInt<TMP_RESULT_LEN>;
-  using DyadicFloat = DyadicFloat<TMP_RESULT_LEN>;
-
-  InFPBits x_bits(x), y_bits(y), z_bits(z);
-
-  if (LIBC_UNLIKELY(x_bits.is_nan() || y_bits.is_nan() || z_bits.is_nan())) {
-    if (x_bits.is_nan() || y_bits.is_nan()) {
-      if (x_bits.is_signaling_nan() || y_bits.is_signaling_nan() ||
-          z_bits.is_signaling_nan())
-        raise_except_if_required(FE_INVALID);
-
-      if (x_bits.is_quiet_nan()) {
-        InStorageType x_payload = x_bits.get_mantissa();
-        x_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
-        return OutFPBits::quiet_nan(x_bits.sign(),
-                                    static_cast<OutStorageType>(x_payload))
-            .get_val();
-      }
-
-      if (y_bits.is_quiet_nan()) {
-        InStorageType y_payload = y_bits.get_mantissa();
-        y_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
-        return OutFPBits::quiet_nan(y_bits.sign(),
-                                    static_cast<OutStorageType>(y_payload))
-            .get_val();
-      }
-
-      if (z_bits.is_quiet_nan()) {
-        InStorageType z_payload = z_bits.get_mantissa();
-        z_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
-        return OutFPBits::quiet_nan(z_bits.sign(),
-                                    static_cast<OutStorageType>(z_payload))
-            .get_val();
-      }
-
-      return OutFPBits::quiet_nan().get_val();
-    }
-  }
-
-  if (LIBC_UNLIKELY(x == 0 || y == 0 || z == 0))
-    return cast<OutType>(x * y + z);
-
-  int x_exp = 0;
-  int y_exp = 0;
-  int z_exp = 0;
-
-  // Denormal scaling = 2^(fraction length).
-  constexpr InStorageType IMPLICIT_MASK =
-      InFPBits::SIG_MASK - InFPBits::FRACTION_MASK;
-
-  constexpr InType DENORMAL_SCALING =
-      InFPBits::create_value(
-          Sign::POS, InFPBits::FRACTION_LEN + InFPBits::EXP_BIAS, IMPLICIT_MASK)
-          .get_val();
-
-  // Normalize denormal inputs.
-  if (LIBC_UNLIKELY(InFPBits(x).is_subnormal())) {
-    x_exp -= InFPBits::FRACTION_LEN;
-    x *= DENORMAL_SCALING;
-  }
-  if (LIBC_UNLIKELY(InFPBits(y).is_subnormal())) {
-    y_exp -= InFPBits::FRACTION_LEN;
-    y *= DENORMAL_SCALING;
-  }
-  if (LIBC_UNLIKELY(InFPBits(z).is_subnormal())) {
-    z_exp -= InFPBits::FRACTION_LEN;
-    z *= DENORMAL_SCALING;
-  }
-
-  x_bits = InFPBits(x);
-  y_bits = InFPBits(y);
-  z_bits = InFPBits(z);
-  const Sign z_sign = z_bits.sign();
-  Sign prod_sign = (x_bits.sign() == y_bits.sign()) ? Sign::POS : Sign::NEG;
-  x_exp += x_bits.get_biased_exponent();
-  y_exp += y_bits.get_biased_exponent();
-  z_exp += z_bits.get_biased_exponent();
-
-  if (LIBC_UNLIKELY(x_exp == InFPBits::MAX_BIASED_EXPONENT ||
-                    y_exp == InFPBits::MAX_BIASED_EXPONENT ||
-                    z_exp == InFPBits::MAX_BIASED_EXPONENT))
-    return cast<OutType>(x * y + z);
-
-  // Extract mantissa and append hidden leading bits.
-  InStorageType x_mant = x_bits.get_explicit_mantissa();
-  InStorageType y_mant = y_bits.get_explicit_mantissa();
-  TmpResultType z_mant = z_bits.get_explicit_mantissa();
-
-  // If the exponent of the product x*y > the exponent of z, then no extra
-  // precision beside the entire product x*y is needed.  On the other hand, when
-  // the exponent of z >= the exponent of the product x*y, the worst-case that
-  // we need extra precision is when there is cancellation and the most
-  // significant bit of the product is aligned exactly with the second most
-  // significant bit of z:
-  //      z :    10aa...a
-  // - prod :     1bb...bb....b
-  // In that case, in order to store the exact result, we need at least
-  //     (Length of prod) - (Fraction length of z)
-  //   = 2*(Length of input explicit mantissa) - (Fraction length of z) bits.
-  // Overall, before aligning the mantissas and exponents, we can simply left-
-  // shift the mantissa of z by that amount.  After that, it is enough to align
-  // the least significant bit, given that we keep track of the round and sticky
-  // bits after the least significant bit.
-
-  TmpResultType prod_mant = TmpResultType(x_mant) * y_mant;
-  int prod_lsb_exp =
-      x_exp + y_exp - (InFPBits::EXP_BIAS + 2 * InFPBits::FRACTION_LEN);
-
-  constexpr int RESULT_MIN_LEN = PROD_LEN - InFPBits::FRACTION_LEN;
-  z_mant <<= RESULT_MIN_LEN;
-  int z_lsb_exp = z_exp - (InFPBits::FRACTION_LEN + RESULT_MIN_LEN);
-  bool sticky_bits = false;
-  bool z_shifted = false;
-
-  // Align exponents.
-  if (prod_lsb_exp < z_lsb_exp) {
-    sticky_bits = internal::shift_mantissa(z_lsb_exp - prod_lsb_exp, prod_mant);
-    prod_lsb_exp = z_lsb_exp;
-  } else if (z_lsb_exp < prod_lsb_exp) {
-    z_shifted = true;
-    sticky_bits = internal::shift_mantissa(prod_lsb_exp - z_lsb_exp, z_mant);
-  }
-
-  // Perform the addition:
-  //   (-1)^prod_sign * prod_mant + (-1)^z_sign * z_mant.
-  // The final result will be stored in prod_sign and prod_mant.
-  if (prod_sign == z_sign) {
-    // Effectively an addition.
-    prod_mant += z_mant;
-  } else {
-    // Subtraction cases.
-    if (prod_mant >= z_mant) {
-      if (z_shifted && sticky_bits) {
-        // Add 1 more to the subtrahend so that the sticky bits remain
-        // positive. This would simplify the rounding logic.
-        ++z_mant;
-      }
-      prod_mant -= z_mant;
-    } else {
-      if (!z_shifted && sticky_bits) {
-        // Add 1 more to the subtrahend so that the sticky bits remain
-        // positive. This would simplify the rounding logic.
-        ++prod_mant;
-      }
-      prod_mant = z_mant - prod_mant;
-      prod_sign = z_sign;
-    }
-  }
-
-  if (prod_mant == 0) {
-    // When there is exact cancellation, i.e., x*y == -z exactly, return -0.0 if
-    // rounding downward and +0.0 for other rounding modes.
-    if (quick_get_round() == FE_DOWNWARD)
-      prod_sign = Sign::NEG;
-    else
-      prod_sign = Sign::POS;
-  }
-
-  DyadicFloat result(prod_sign, prod_lsb_exp - InFPBits::EXP_BIAS, prod_mant);
-  result.mantissa |= static_cast<unsigned int>(sticky_bits);
-  return result.template as<OutType, /*ShouldSignalExceptions=*/true>();
-}
-
-} // namespace generic
-} // namespace fputil
-} // namespace LIBC_NAMESPACE_DECL
-
-#endif // LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
+//===-- Common header for FMA implementations -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
+#define LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
+
+#include "src/__support/CPP/bit.h"
+#include "src/__support/CPP/limits.h"
+#include "src/__support/CPP/type_traits.h"
+#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/cast.h"
+#include "src/__support/FPUtil/dyadic_float.h"
+#include "src/__support/FPUtil/rounding_mode.h"
+#include "src/__support/big_int.h"
+#include "src/__support/macros/attributes.h"   // LIBC_INLINE
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
+
+#include "hdr/fenv_macros.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace fputil {
+namespace generic {
+
+template <typename OutType, typename InType>
+LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
+                                 cpp::is_floating_point_v<InType> &&
+                                 sizeof(OutType) <= sizeof(InType),
+                             OutType>
+fma(InType x, InType y, InType z);
+
+// TODO(lntue): Implement fmaf that is correctly rounded to all rounding modes.
+// The implementation below only is only correct for the default rounding mode,
+// round-to-nearest tie-to-even.
+template <> LIBC_INLINE float fma<float>(float x, float y, float z) {
+  // Product is exact.
+  double prod = static_cast<double>(x) * static_cast<double>(y);
+  double z_d = static_cast<double>(z);
+  double sum = prod + z_d;
+  fputil::FPBits<double> bit_prod(prod), bitz(z_d), bit_sum(sum);
+
+  if (!(bit_sum.is_inf_or_nan() || bit_sum.is_zero())) {
+    // Since the sum is computed in double precision, rounding might happen
+    // (for instance, when bitz.exponent > bit_prod.exponent + 5, or
+    // bit_prod.exponent > bitz.exponent + 40).  In that case, when we round
+    // the sum back to float, double rounding error might occur.
+    // A concrete example of this phenomenon is as follows:
+    //   x = y = 1 + 2^(-12), z = 2^(-53)
+    // The exact value of x*y + z is 1 + 2^(-11) + 2^(-24) + 2^(-53)
+    // So when rounding to float, fmaf(x, y, z) = 1 + 2^(-11) + 2^(-23)
+    // On the other hand, with the default rounding mode,
+    //   double(x*y + z) = 1 + 2^(-11) + 2^(-24)
+    // and casting again to float gives us:
+    //   float(double(x*y + z)) = 1 + 2^(-11).
+    //
+    // In order to correct this possible double rounding error, first we use
+    // Dekker's 2Sum algorithm to find t such that sum - t = prod + z exactly,
+    // assuming the (default) rounding mode is round-to-the-nearest,
+    // tie-to-even.  Moreover, t satisfies the condition that t < eps(sum),
+    // i.e., t.exponent < sum.exponent - 52. So if t is not 0, meaning rounding
+    // occurs when computing the sum, we just need to use t to adjust (any) last
+    // bit of sum, so that the sticky bits used when rounding sum to float are
+    // correct (when it matters).
+    fputil::FPBits<double> t(
+        (bit_prod.get_biased_exponent() >= bitz.get_biased_exponent())
+            ? ((bit_sum.get_val() - bit_prod.get_val()) - bitz.get_val())
+            : ((bit_sum.get_val() - bitz.get_val()) - bit_prod.get_val()));
+
+    // Update sticky bits if t != 0.0 and the least (52 - 23 - 1 = 28) bits are
+    // zero.
+    if (!t.is_zero() && ((bit_sum.get_mantissa() & 0xfff'ffffULL) == 0)) {
+      if (bit_sum.sign() != t.sign())
+        bit_sum.set_mantissa(bit_sum.get_mantissa() + 1);
+      else if (bit_sum.get_mantissa())
+        bit_sum.set_mantissa(bit_sum.get_mantissa() - 1);
+    }
+  }
+
+  return static_cast<float>(bit_sum.get_val());
+}
+
+namespace internal {
+
+// Extract the sticky bits and shift the `mantissa` to the right by
+// `shift_length`.
+template <typename T>
+LIBC_INLINE cpp::enable_if_t<is_unsigned_integral_or_big_int_v<T>, bool>
+shift_mantissa(int shift_length, T &mant) {
+  if (shift_length >= cpp::numeric_limits<T>::digits) {
+    mant = 0;
+    return true; // prod_mant is non-zero.
+  }
+  T mask = (T(1) << shift_length) - 1;
+  bool sticky_bits = (mant & mask) != 0;
+  mant >>= shift_length;
+  return sticky_bits;
+}
+
+} // namespace internal
+
+template <typename OutType, typename InType>
+LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
+                                 cpp::is_floating_point_v<InType> &&
+                                 sizeof(OutType) <= sizeof(InType),
+                             OutType>
+fma(InType x, InType y, InType z) {
+  using OutFPBits = FPBits<OutType>;
+  using OutStorageType = typename OutFPBits::StorageType;
+  using InFPBits = FPBits<InType>;
+  using InStorageType = typename InFPBits::StorageType;
+
+  constexpr int IN_EXPLICIT_MANT_LEN = InFPBits::FRACTION_LEN + 1;
+  constexpr size_t PROD_LEN = 2 * IN_EXPLICIT_MANT_LEN;
+  constexpr size_t TMP_RESULT_LEN = cpp::bit_ceil(PROD_LEN + 1);
+  using TmpResultType = UInt<TMP_RESULT_LEN>;
+  using DyadicFloat = DyadicFloat<TMP_RESULT_LEN>;
+
+  InFPBits x_bits(x), y_bits(y), z_bits(z);
+
+  if (LIBC_UNLIKELY(x_bits.is_nan() || y_bits.is_nan() || z_bits.is_nan())) {
+    if (x_bits.is_nan() || y_bits.is_nan()) {
+      if (x_bits.is_signaling_nan() || y_bits.is_signaling_nan() ||
+          z_bits.is_signaling_nan())
+        raise_except_if_required(FE_INVALID);
+
+      if (x_bits.is_quiet_nan()) {
+        InStorageType x_payload = x_bits.get_mantissa();
+        x_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
+        return OutFPBits::quiet_nan(x_bits.sign(),
+                                    static_cast<OutStorageType>(x_payload))
+            .get_val();
+      }
+
+      if (y_bits.is_quiet_nan()) {
+        InStorageType y_payload = y_bits.get_mantissa();
+        y_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
+        return OutFPBits::quiet_nan(y_bits.sign(),
+                                    static_cast<OutStorageType>(y_payload))
+            .get_val();
+      }
+
+      if (z_bits.is_quiet_nan()) {
+        InStorageType z_payload = z_bits.get_mantissa();
+        z_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
+        return OutFPBits::quiet_nan(z_bits.sign(),
+                                    static_cast<OutStorageType>(z_payload))
+            .get_val();
+      }
+
+      return OutFPBits::quiet_nan().get_val();
+    }
+  }
+
+  if (LIBC_UNLIKELY(x == 0 || y == 0 || z == 0))
+    return cast<OutType>(x * y + z);
+
+  int x_exp = 0;
+  int y_exp = 0;
+  int z_exp = 0;
+
+  // Denormal scaling = 2^(fraction length).
+  constexpr InStorageType IMPLICIT_MASK =
+      InFPBits::SIG_MASK - InFPBits::FRACTION_MASK;
+
+  constexpr InType DENORMAL_SCALING =
+      InFPBits::create_value(
+          Sign::POS, InFPBits::FRACTION_LEN + InFPBits::EXP_BIAS, IMPLICIT_MASK)
+          .get_val();
+
+  // Normalize denormal inputs.
+  if (LIBC_UNLIKELY(InFPBits(x).is_subnormal())) {
+    x_exp -= InFPBits::FRACTION_LEN;
+    x *= DENORMAL_SCALING;
+  }
+  if (LIBC_UNLIKELY(InFPBits(y).is_subnormal())) {
+    y_exp -= InFPBits::FRACTION_LEN;
+    y *= DENORMAL_SCALING;
+  }
+  if (LIBC_UNLIKELY(InFPBits(z).is_subnormal())) {
+    z_exp -= InFPBits::FRACTION_LEN;
+    z *= DENORMAL_SCALING;
+  }
+
+  x_bits = InFPBits(x);
+  y_bits = InFPBits(y);
+  z_bits = InFPBits(z);
+  const Sign z_sign = z_bits.sign();
+  Sign prod_sign = (x_bits.sign() == y_bits.sign()) ? Sign::POS : Sign::NEG;
+  x_exp += x_bits.get_biased_exponent();
+  y_exp += y_bits.get_biased_exponent();
+  z_exp += z_bits.get_biased_exponent();
+
+  if (LIBC_UNLIKELY(x_exp != InFPBits::MAX_BIASED_EXPONENT &&
+                    y_exp != InFPBits::MAX_BIASED_EXPONENT &&
+                    z_bits.is_inf()))
+    return cast<OutType>(z);
+
+  if (LIBC_UNLIKELY(x_exp == InFPBits::MAX_BIASED_EXPONENT ||
+                    y_exp == InFPBits::MAX_BIASED_EXPONENT ||
+                    z_exp == InFPBits::MAX_BIASED_EXPONENT))
+    return cast<OutType>(x * y + z);
+
+  // Extract mantissa and append hidden leading bits.
+  InStorageType x_mant = x_bits.get_explicit_mantissa();
+  InStorageType y_mant = y_bits.get_explicit_mantissa();
+  TmpResultType z_mant = z_bits.get_explicit_mantissa();
+
+  // If the exponent of the product x*y > the exponent of z, then no extra
+  // precision beside the entire product x*y is needed.  On the other hand, when
+  // the exponent of z >= the exponent of the product x*y, the worst-case that
+  // we need extra precision is when there is cancellation and the most
+  // significant bit of the product is aligned exactly with the second most
+  // significant bit of z:
+  //      z :    10aa...a
+  // - prod :     1bb...bb....b
+  // In that case, in order to store the exact result, we need at least
+  //     (Length of prod) - (Fraction length of z)
+  //   = 2*(Length of input explicit mantissa) - (Fraction length of z) bits.
+  // Overall, before aligning the mantissas and exponents, we can simply left-
+  // shift the mantissa of z by that amount.  After that, it is enough to align
+  // the least significant bit, given that we keep track of the round and sticky
+  // bits after the least significant bit.
+
+  TmpResultType prod_mant = TmpResultType(x_mant) * y_mant;
+  int prod_lsb_exp =
+      x_exp + y_exp - (InFPBits::EXP_BIAS + 2 * InFPBits::FRACTION_LEN);
+
+  constexpr int RESULT_MIN_LEN = PROD_LEN - InFPBits::FRACTION_LEN;
+  z_mant <<= RESULT_MIN_LEN;
+  int z_lsb_exp = z_exp - (InFPBits::FRACTION_LEN + RESULT_MIN_LEN);
+  bool sticky_bits = false;
+  bool z_shifted = false;
+
+  // Align exponents.
+  if (prod_lsb_exp < z_lsb_exp) {
+    sticky_bits = internal::shift_mantissa(z_lsb_exp - prod_lsb_exp, prod_mant);
+    prod_lsb_exp = z_lsb_exp;
+  } else if (z_lsb_exp < prod_lsb_exp) {
+    z_shifted = true;
+    sticky_bits = internal::shift_mantissa(prod_lsb_exp - z_lsb_exp, z_mant);
+  }
+
+  // Perform the addition:
+  //   (-1)^prod_sign * prod_mant + (-1)^z_sign * z_mant.
+  // The final result will be stored in prod_sign and prod_mant.
+  if (prod_sign == z_sign) {
+    // Effectively an addition.
+    prod_mant += z_mant;
+  } else {
+    // Subtraction cases.
+    if (prod_mant >= z_mant) {
+      if (z_shifted && sticky_bits) {
+        // Add 1 more to the subtrahend so that the sticky bits remain
+        // positive. This would simplify the rounding logic.
+        ++z_mant;
+      }
+      prod_mant -= z_mant;
+    } else {
+      if (!z_shifted && sticky_bits) {
+        // Add 1 more to the subtrahend so that the sticky bits remain
+        // positive. This would simplify the rounding logic.
+        ++prod_mant;
+      }
+      prod_mant = z_mant - prod_mant;
+      prod_sign = z_sign;
+    }
+  }
+
+  if (prod_mant == 0) {
+    // When there is exact cancellation, i.e., x*y == -z exactly, return -0.0 if
+    // rounding downward and +0.0 for other rounding modes.
+    if (quick_get_round() == FE_DOWNWARD)
+      prod_sign = Sign::NEG;
+    else
+      prod_sign = Sign::POS;
+  }
+
+  DyadicFloat result(prod_sign, prod_lsb_exp - InFPBits::EXP_BIAS, prod_mant);
+  result.mantissa |= static_cast<unsigned int>(sticky_bits);
+  return result.template as<OutType, /*ShouldSignalExceptions=*/true>();
+}
+
+} // namespace generic
+} // namespace fputil
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index df49e7bbaf9de..e009330904364 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -61,9 +61,10 @@ TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      bfloat16 neg_xy = -(x * y);
+      mpfr::TernaryInput<bfloat16> input{x, y, neg_xy};
       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     LIBC_NAMESPACE::fmabf16(x, y, neg_xy),
                                      0.5);
     }
   }

>From 51291f55d16842b3fbba839d531af3ee57184ede Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 16:10:50 +0530
Subject: [PATCH 31/50] testing with all together ~ 2^20 input spc

---
 libc/test/src/math/fmabf16_test.cpp | 113 ++++++++++++++++++++++++++++
 1 file changed, 113 insertions(+)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index e009330904364..878c5ecb02cba 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,6 +32,119 @@ static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
+static constexpr uint16_t STEP = 512;
+
+TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
+
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+    for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
+    }
+  }
+}
+
+TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
+    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
+    }
+  }
+}
+TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
+    }
+  }
+}
+
+TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
+  const bfloat16 z_values[] = {zero,
+                               neg_zero,
+                               inf,
+                               neg_inf,
+                               min_normal,
+                               max_normal};
+  for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
+    for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (bfloat16 z : z_values) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     0.5);
+    }
+  }
+}
+
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   const bfloat16 z_values[] = {zero,

>From ca1318f996ea6d26601aa759d8b2c88528aee0fd Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 16:29:56 +0530
Subject: [PATCH 32/50] 2^17

---
 libc/test/src/math/fmabf16_test.cpp | 29 +----------------------------
 1 file changed, 1 insertion(+), 28 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 878c5ecb02cba..97bc82dcd230c 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,7 +32,7 @@ static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
-static constexpr uint16_t STEP = 512;
+static constexpr uint16_t STEP = 1024;
 
 TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
 
@@ -91,33 +91,6 @@ TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
     }
   }
 }
-TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   const bfloat16 z_values[] = {zero,

>From 1b188b4716f58a32d1ea64d81594d0401aab6ee9 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 16:36:17 +0530
Subject: [PATCH 33/50] testing for 2

---
 libc/test/src/math/fmabf16_test.cpp | 145 +++++++++++++++++-----------
 1 file changed, 86 insertions(+), 59 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 97bc82dcd230c..23727022a444b 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -32,65 +32,92 @@ static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
-static constexpr uint16_t STEP = 1024;
-
-TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
-
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-    for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
-
-TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-                               FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
-    for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-      bfloat16 x = FPBits(v1).get_val();
-      bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
-        mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-      }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-      EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-                                     0.5);
-    }
-  }
-}
+// static constexpr uint16_t STEP = 512;
+
+// TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
+
+//   const bfloat16 z_values[] = {zero,
+//                                neg_zero,
+//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+//                                inf,
+//                                neg_inf,
+//                                min_normal,
+//                                max_normal};
+//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+//     for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
+
+//       bfloat16 x = FPBits(v1).get_val();
+//       bfloat16 y = FPBits(v2).get_val();
+
+//       for (bfloat16 z : z_values) {
+//         mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+//       }
+//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+//                                      0.5);
+//     }
+//   }
+// }
+
+// TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
+//   const bfloat16 z_values[] = {zero,
+//                                neg_zero,
+//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+//                                inf,
+//                                neg_inf,
+//                                min_normal,
+//                                max_normal};
+//   for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
+//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+//       bfloat16 x = FPBits(v1).get_val();
+//       bfloat16 y = FPBits(v2).get_val();
+//       for (bfloat16 z : z_values) {
+//         mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+//       }
+//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+//                                      0.5);
+//     }
+//   }
+// }
+// TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
+//   const bfloat16 z_values[] = {zero,
+//                                neg_zero,
+//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
+//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
+//                                inf,
+//                                neg_inf,
+//                                min_normal,
+//                                max_normal};
+//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
+//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
+
+//       bfloat16 x = FPBits(v1).get_val();
+//       bfloat16 y = FPBits(v2).get_val();
+//       for (bfloat16 z : z_values) {
+//         mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+//       }
+//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+//                                      0.5);
+//     }
+//   }
+// }
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   const bfloat16 z_values[] = {zero,

>From 19a572d85c6bfc99806140eb0ca95d8d45169fe5 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 17:00:23 +0530
Subject: [PATCH 34/50]  0 err

---
 libc/src/__support/FPUtil/generic/FMA.h | 586 ++++++++++++------------
 libc/test/src/math/fmabf16_test.cpp     |   5 +-
 2 files changed, 296 insertions(+), 295 deletions(-)

diff --git a/libc/src/__support/FPUtil/generic/FMA.h b/libc/src/__support/FPUtil/generic/FMA.h
index 2db280af94aaf..dc45957f80ff4 100644
--- a/libc/src/__support/FPUtil/generic/FMA.h
+++ b/libc/src/__support/FPUtil/generic/FMA.h
@@ -1,293 +1,293 @@
-//===-- Common header for FMA implementations -------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
-#define LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
-
-#include "src/__support/CPP/bit.h"
-#include "src/__support/CPP/limits.h"
-#include "src/__support/CPP/type_traits.h"
-#include "src/__support/FPUtil/BasicOperations.h"
-#include "src/__support/FPUtil/FPBits.h"
-#include "src/__support/FPUtil/cast.h"
-#include "src/__support/FPUtil/dyadic_float.h"
-#include "src/__support/FPUtil/rounding_mode.h"
-#include "src/__support/big_int.h"
-#include "src/__support/macros/attributes.h"   // LIBC_INLINE
-#include "src/__support/macros/config.h"
-#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
-
-#include "hdr/fenv_macros.h"
-
-namespace LIBC_NAMESPACE_DECL {
-namespace fputil {
-namespace generic {
-
-template <typename OutType, typename InType>
-LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
-                                 cpp::is_floating_point_v<InType> &&
-                                 sizeof(OutType) <= sizeof(InType),
-                             OutType>
-fma(InType x, InType y, InType z);
-
-// TODO(lntue): Implement fmaf that is correctly rounded to all rounding modes.
-// The implementation below only is only correct for the default rounding mode,
-// round-to-nearest tie-to-even.
-template <> LIBC_INLINE float fma<float>(float x, float y, float z) {
-  // Product is exact.
-  double prod = static_cast<double>(x) * static_cast<double>(y);
-  double z_d = static_cast<double>(z);
-  double sum = prod + z_d;
-  fputil::FPBits<double> bit_prod(prod), bitz(z_d), bit_sum(sum);
-
-  if (!(bit_sum.is_inf_or_nan() || bit_sum.is_zero())) {
-    // Since the sum is computed in double precision, rounding might happen
-    // (for instance, when bitz.exponent > bit_prod.exponent + 5, or
-    // bit_prod.exponent > bitz.exponent + 40).  In that case, when we round
-    // the sum back to float, double rounding error might occur.
-    // A concrete example of this phenomenon is as follows:
-    //   x = y = 1 + 2^(-12), z = 2^(-53)
-    // The exact value of x*y + z is 1 + 2^(-11) + 2^(-24) + 2^(-53)
-    // So when rounding to float, fmaf(x, y, z) = 1 + 2^(-11) + 2^(-23)
-    // On the other hand, with the default rounding mode,
-    //   double(x*y + z) = 1 + 2^(-11) + 2^(-24)
-    // and casting again to float gives us:
-    //   float(double(x*y + z)) = 1 + 2^(-11).
-    //
-    // In order to correct this possible double rounding error, first we use
-    // Dekker's 2Sum algorithm to find t such that sum - t = prod + z exactly,
-    // assuming the (default) rounding mode is round-to-the-nearest,
-    // tie-to-even.  Moreover, t satisfies the condition that t < eps(sum),
-    // i.e., t.exponent < sum.exponent - 52. So if t is not 0, meaning rounding
-    // occurs when computing the sum, we just need to use t to adjust (any) last
-    // bit of sum, so that the sticky bits used when rounding sum to float are
-    // correct (when it matters).
-    fputil::FPBits<double> t(
-        (bit_prod.get_biased_exponent() >= bitz.get_biased_exponent())
-            ? ((bit_sum.get_val() - bit_prod.get_val()) - bitz.get_val())
-            : ((bit_sum.get_val() - bitz.get_val()) - bit_prod.get_val()));
-
-    // Update sticky bits if t != 0.0 and the least (52 - 23 - 1 = 28) bits are
-    // zero.
-    if (!t.is_zero() && ((bit_sum.get_mantissa() & 0xfff'ffffULL) == 0)) {
-      if (bit_sum.sign() != t.sign())
-        bit_sum.set_mantissa(bit_sum.get_mantissa() + 1);
-      else if (bit_sum.get_mantissa())
-        bit_sum.set_mantissa(bit_sum.get_mantissa() - 1);
-    }
-  }
-
-  return static_cast<float>(bit_sum.get_val());
-}
-
-namespace internal {
-
-// Extract the sticky bits and shift the `mantissa` to the right by
-// `shift_length`.
-template <typename T>
-LIBC_INLINE cpp::enable_if_t<is_unsigned_integral_or_big_int_v<T>, bool>
-shift_mantissa(int shift_length, T &mant) {
-  if (shift_length >= cpp::numeric_limits<T>::digits) {
-    mant = 0;
-    return true; // prod_mant is non-zero.
-  }
-  T mask = (T(1) << shift_length) - 1;
-  bool sticky_bits = (mant & mask) != 0;
-  mant >>= shift_length;
-  return sticky_bits;
-}
-
-} // namespace internal
-
-template <typename OutType, typename InType>
-LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
-                                 cpp::is_floating_point_v<InType> &&
-                                 sizeof(OutType) <= sizeof(InType),
-                             OutType>
-fma(InType x, InType y, InType z) {
-  using OutFPBits = FPBits<OutType>;
-  using OutStorageType = typename OutFPBits::StorageType;
-  using InFPBits = FPBits<InType>;
-  using InStorageType = typename InFPBits::StorageType;
-
-  constexpr int IN_EXPLICIT_MANT_LEN = InFPBits::FRACTION_LEN + 1;
-  constexpr size_t PROD_LEN = 2 * IN_EXPLICIT_MANT_LEN;
-  constexpr size_t TMP_RESULT_LEN = cpp::bit_ceil(PROD_LEN + 1);
-  using TmpResultType = UInt<TMP_RESULT_LEN>;
-  using DyadicFloat = DyadicFloat<TMP_RESULT_LEN>;
-
-  InFPBits x_bits(x), y_bits(y), z_bits(z);
-
-  if (LIBC_UNLIKELY(x_bits.is_nan() || y_bits.is_nan() || z_bits.is_nan())) {
-    if (x_bits.is_nan() || y_bits.is_nan()) {
-      if (x_bits.is_signaling_nan() || y_bits.is_signaling_nan() ||
-          z_bits.is_signaling_nan())
-        raise_except_if_required(FE_INVALID);
-
-      if (x_bits.is_quiet_nan()) {
-        InStorageType x_payload = x_bits.get_mantissa();
-        x_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
-        return OutFPBits::quiet_nan(x_bits.sign(),
-                                    static_cast<OutStorageType>(x_payload))
-            .get_val();
-      }
-
-      if (y_bits.is_quiet_nan()) {
-        InStorageType y_payload = y_bits.get_mantissa();
-        y_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
-        return OutFPBits::quiet_nan(y_bits.sign(),
-                                    static_cast<OutStorageType>(y_payload))
-            .get_val();
-      }
-
-      if (z_bits.is_quiet_nan()) {
-        InStorageType z_payload = z_bits.get_mantissa();
-        z_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
-        return OutFPBits::quiet_nan(z_bits.sign(),
-                                    static_cast<OutStorageType>(z_payload))
-            .get_val();
-      }
-
-      return OutFPBits::quiet_nan().get_val();
-    }
-  }
-
-  if (LIBC_UNLIKELY(x == 0 || y == 0 || z == 0))
-    return cast<OutType>(x * y + z);
-
-  int x_exp = 0;
-  int y_exp = 0;
-  int z_exp = 0;
-
-  // Denormal scaling = 2^(fraction length).
-  constexpr InStorageType IMPLICIT_MASK =
-      InFPBits::SIG_MASK - InFPBits::FRACTION_MASK;
-
-  constexpr InType DENORMAL_SCALING =
-      InFPBits::create_value(
-          Sign::POS, InFPBits::FRACTION_LEN + InFPBits::EXP_BIAS, IMPLICIT_MASK)
-          .get_val();
-
-  // Normalize denormal inputs.
-  if (LIBC_UNLIKELY(InFPBits(x).is_subnormal())) {
-    x_exp -= InFPBits::FRACTION_LEN;
-    x *= DENORMAL_SCALING;
-  }
-  if (LIBC_UNLIKELY(InFPBits(y).is_subnormal())) {
-    y_exp -= InFPBits::FRACTION_LEN;
-    y *= DENORMAL_SCALING;
-  }
-  if (LIBC_UNLIKELY(InFPBits(z).is_subnormal())) {
-    z_exp -= InFPBits::FRACTION_LEN;
-    z *= DENORMAL_SCALING;
-  }
-
-  x_bits = InFPBits(x);
-  y_bits = InFPBits(y);
-  z_bits = InFPBits(z);
-  const Sign z_sign = z_bits.sign();
-  Sign prod_sign = (x_bits.sign() == y_bits.sign()) ? Sign::POS : Sign::NEG;
-  x_exp += x_bits.get_biased_exponent();
-  y_exp += y_bits.get_biased_exponent();
-  z_exp += z_bits.get_biased_exponent();
-
-  if (LIBC_UNLIKELY(x_exp != InFPBits::MAX_BIASED_EXPONENT &&
-                    y_exp != InFPBits::MAX_BIASED_EXPONENT &&
-                    z_bits.is_inf()))
-    return cast<OutType>(z);
-
-  if (LIBC_UNLIKELY(x_exp == InFPBits::MAX_BIASED_EXPONENT ||
-                    y_exp == InFPBits::MAX_BIASED_EXPONENT ||
-                    z_exp == InFPBits::MAX_BIASED_EXPONENT))
-    return cast<OutType>(x * y + z);
-
-  // Extract mantissa and append hidden leading bits.
-  InStorageType x_mant = x_bits.get_explicit_mantissa();
-  InStorageType y_mant = y_bits.get_explicit_mantissa();
-  TmpResultType z_mant = z_bits.get_explicit_mantissa();
-
-  // If the exponent of the product x*y > the exponent of z, then no extra
-  // precision beside the entire product x*y is needed.  On the other hand, when
-  // the exponent of z >= the exponent of the product x*y, the worst-case that
-  // we need extra precision is when there is cancellation and the most
-  // significant bit of the product is aligned exactly with the second most
-  // significant bit of z:
-  //      z :    10aa...a
-  // - prod :     1bb...bb....b
-  // In that case, in order to store the exact result, we need at least
-  //     (Length of prod) - (Fraction length of z)
-  //   = 2*(Length of input explicit mantissa) - (Fraction length of z) bits.
-  // Overall, before aligning the mantissas and exponents, we can simply left-
-  // shift the mantissa of z by that amount.  After that, it is enough to align
-  // the least significant bit, given that we keep track of the round and sticky
-  // bits after the least significant bit.
-
-  TmpResultType prod_mant = TmpResultType(x_mant) * y_mant;
-  int prod_lsb_exp =
-      x_exp + y_exp - (InFPBits::EXP_BIAS + 2 * InFPBits::FRACTION_LEN);
-
-  constexpr int RESULT_MIN_LEN = PROD_LEN - InFPBits::FRACTION_LEN;
-  z_mant <<= RESULT_MIN_LEN;
-  int z_lsb_exp = z_exp - (InFPBits::FRACTION_LEN + RESULT_MIN_LEN);
-  bool sticky_bits = false;
-  bool z_shifted = false;
-
-  // Align exponents.
-  if (prod_lsb_exp < z_lsb_exp) {
-    sticky_bits = internal::shift_mantissa(z_lsb_exp - prod_lsb_exp, prod_mant);
-    prod_lsb_exp = z_lsb_exp;
-  } else if (z_lsb_exp < prod_lsb_exp) {
-    z_shifted = true;
-    sticky_bits = internal::shift_mantissa(prod_lsb_exp - z_lsb_exp, z_mant);
-  }
-
-  // Perform the addition:
-  //   (-1)^prod_sign * prod_mant + (-1)^z_sign * z_mant.
-  // The final result will be stored in prod_sign and prod_mant.
-  if (prod_sign == z_sign) {
-    // Effectively an addition.
-    prod_mant += z_mant;
-  } else {
-    // Subtraction cases.
-    if (prod_mant >= z_mant) {
-      if (z_shifted && sticky_bits) {
-        // Add 1 more to the subtrahend so that the sticky bits remain
-        // positive. This would simplify the rounding logic.
-        ++z_mant;
-      }
-      prod_mant -= z_mant;
-    } else {
-      if (!z_shifted && sticky_bits) {
-        // Add 1 more to the subtrahend so that the sticky bits remain
-        // positive. This would simplify the rounding logic.
-        ++prod_mant;
-      }
-      prod_mant = z_mant - prod_mant;
-      prod_sign = z_sign;
-    }
-  }
-
-  if (prod_mant == 0) {
-    // When there is exact cancellation, i.e., x*y == -z exactly, return -0.0 if
-    // rounding downward and +0.0 for other rounding modes.
-    if (quick_get_round() == FE_DOWNWARD)
-      prod_sign = Sign::NEG;
-    else
-      prod_sign = Sign::POS;
-  }
-
-  DyadicFloat result(prod_sign, prod_lsb_exp - InFPBits::EXP_BIAS, prod_mant);
-  result.mantissa |= static_cast<unsigned int>(sticky_bits);
-  return result.template as<OutType, /*ShouldSignalExceptions=*/true>();
-}
-
-} // namespace generic
-} // namespace fputil
-} // namespace LIBC_NAMESPACE_DECL
-
-#endif // LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
+//===-- Common header for FMA implementations -------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
+#define LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
+
+#include "src/__support/CPP/bit.h"
+#include "src/__support/CPP/limits.h"
+#include "src/__support/CPP/type_traits.h"
+#include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/cast.h"
+#include "src/__support/FPUtil/dyadic_float.h"
+#include "src/__support/FPUtil/rounding_mode.h"
+#include "src/__support/big_int.h"
+#include "src/__support/macros/attributes.h"   // LIBC_INLINE
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
+
+#include "hdr/fenv_macros.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace fputil {
+namespace generic {
+
+template <typename OutType, typename InType>
+LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
+                                 cpp::is_floating_point_v<InType> &&
+                                 sizeof(OutType) <= sizeof(InType),
+                             OutType>
+fma(InType x, InType y, InType z);
+
+// TODO(lntue): Implement fmaf that is correctly rounded to all rounding modes.
+// The implementation below only is only correct for the default rounding mode,
+// round-to-nearest tie-to-even.
+template <> LIBC_INLINE float fma<float>(float x, float y, float z) {
+  // Product is exact.
+  double prod = static_cast<double>(x) * static_cast<double>(y);
+  double z_d = static_cast<double>(z);
+  double sum = prod + z_d;
+  fputil::FPBits<double> bit_prod(prod), bitz(z_d), bit_sum(sum);
+
+  if (!(bit_sum.is_inf_or_nan() || bit_sum.is_zero())) {
+    // Since the sum is computed in double precision, rounding might happen
+    // (for instance, when bitz.exponent > bit_prod.exponent + 5, or
+    // bit_prod.exponent > bitz.exponent + 40).  In that case, when we round
+    // the sum back to float, double rounding error might occur.
+    // A concrete example of this phenomenon is as follows:
+    //   x = y = 1 + 2^(-12), z = 2^(-53)
+    // The exact value of x*y + z is 1 + 2^(-11) + 2^(-24) + 2^(-53)
+    // So when rounding to float, fmaf(x, y, z) = 1 + 2^(-11) + 2^(-23)
+    // On the other hand, with the default rounding mode,
+    //   double(x*y + z) = 1 + 2^(-11) + 2^(-24)
+    // and casting again to float gives us:
+    //   float(double(x*y + z)) = 1 + 2^(-11).
+    //
+    // In order to correct this possible double rounding error, first we use
+    // Dekker's 2Sum algorithm to find t such that sum - t = prod + z exactly,
+    // assuming the (default) rounding mode is round-to-the-nearest,
+    // tie-to-even.  Moreover, t satisfies the condition that t < eps(sum),
+    // i.e., t.exponent < sum.exponent - 52. So if t is not 0, meaning rounding
+    // occurs when computing the sum, we just need to use t to adjust (any) last
+    // bit of sum, so that the sticky bits used when rounding sum to float are
+    // correct (when it matters).
+    fputil::FPBits<double> t(
+        (bit_prod.get_biased_exponent() >= bitz.get_biased_exponent())
+            ? ((bit_sum.get_val() - bit_prod.get_val()) - bitz.get_val())
+            : ((bit_sum.get_val() - bitz.get_val()) - bit_prod.get_val()));
+
+    // Update sticky bits if t != 0.0 and the least (52 - 23 - 1 = 28) bits are
+    // zero.
+    if (!t.is_zero() && ((bit_sum.get_mantissa() & 0xfff'ffffULL) == 0)) {
+      if (bit_sum.sign() != t.sign())
+        bit_sum.set_mantissa(bit_sum.get_mantissa() + 1);
+      else if (bit_sum.get_mantissa())
+        bit_sum.set_mantissa(bit_sum.get_mantissa() - 1);
+    }
+  }
+
+  return static_cast<float>(bit_sum.get_val());
+}
+
+namespace internal {
+
+// Extract the sticky bits and shift the `mantissa` to the right by
+// `shift_length`.
+template <typename T>
+LIBC_INLINE cpp::enable_if_t<is_unsigned_integral_or_big_int_v<T>, bool>
+shift_mantissa(int shift_length, T &mant) {
+  if (shift_length >= cpp::numeric_limits<T>::digits) {
+    mant = 0;
+    return true; // prod_mant is non-zero.
+  }
+  T mask = (T(1) << shift_length) - 1;
+  bool sticky_bits = (mant & mask) != 0;
+  mant >>= shift_length;
+  return sticky_bits;
+}
+
+} // namespace internal
+
+template <typename OutType, typename InType>
+LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<OutType> &&
+                                 cpp::is_floating_point_v<InType> &&
+                                 sizeof(OutType) <= sizeof(InType),
+                             OutType>
+fma(InType x, InType y, InType z) {
+  using OutFPBits = FPBits<OutType>;
+  using OutStorageType = typename OutFPBits::StorageType;
+  using InFPBits = FPBits<InType>;
+  using InStorageType = typename InFPBits::StorageType;
+
+  constexpr int IN_EXPLICIT_MANT_LEN = InFPBits::FRACTION_LEN + 1;
+  constexpr size_t PROD_LEN = 2 * IN_EXPLICIT_MANT_LEN;
+  constexpr size_t TMP_RESULT_LEN = cpp::bit_ceil(PROD_LEN + 1);
+  using TmpResultType = UInt<TMP_RESULT_LEN>;
+  using DyadicFloat = DyadicFloat<TMP_RESULT_LEN>;
+
+  InFPBits x_bits(x), y_bits(y), z_bits(z);
+
+  if (LIBC_UNLIKELY(x_bits.is_nan() || y_bits.is_nan() || z_bits.is_nan())) {
+    if (x_bits.is_nan() || y_bits.is_nan()) {
+      if (x_bits.is_signaling_nan() || y_bits.is_signaling_nan() ||
+          z_bits.is_signaling_nan())
+        raise_except_if_required(FE_INVALID);
+
+      if (x_bits.is_quiet_nan()) {
+        InStorageType x_payload = x_bits.get_mantissa();
+        x_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
+        return OutFPBits::quiet_nan(x_bits.sign(),
+                                    static_cast<OutStorageType>(x_payload))
+            .get_val();
+      }
+
+      if (y_bits.is_quiet_nan()) {
+        InStorageType y_payload = y_bits.get_mantissa();
+        y_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
+        return OutFPBits::quiet_nan(y_bits.sign(),
+                                    static_cast<OutStorageType>(y_payload))
+            .get_val();
+      }
+
+      if (z_bits.is_quiet_nan()) {
+        InStorageType z_payload = z_bits.get_mantissa();
+        z_payload >>= InFPBits::FRACTION_LEN - OutFPBits::FRACTION_LEN;
+        return OutFPBits::quiet_nan(z_bits.sign(),
+                                    static_cast<OutStorageType>(z_payload))
+            .get_val();
+      }
+
+      return OutFPBits::quiet_nan().get_val();
+    }
+  }
+
+  if (LIBC_UNLIKELY(x == 0 || y == 0 || z == 0))
+    return cast<OutType>(x * y + z);
+
+  int x_exp = 0;
+  int y_exp = 0;
+  int z_exp = 0;
+
+  // Denormal scaling = 2^(fraction length).
+  constexpr InStorageType IMPLICIT_MASK =
+      InFPBits::SIG_MASK - InFPBits::FRACTION_MASK;
+
+  constexpr InType DENORMAL_SCALING =
+      InFPBits::create_value(
+          Sign::POS, InFPBits::FRACTION_LEN + InFPBits::EXP_BIAS, IMPLICIT_MASK)
+          .get_val();
+
+  // Normalize denormal inputs.
+  if (LIBC_UNLIKELY(InFPBits(x).is_subnormal())) {
+    x_exp -= InFPBits::FRACTION_LEN;
+    x *= DENORMAL_SCALING;
+  }
+  if (LIBC_UNLIKELY(InFPBits(y).is_subnormal())) {
+    y_exp -= InFPBits::FRACTION_LEN;
+    y *= DENORMAL_SCALING;
+  }
+  if (LIBC_UNLIKELY(InFPBits(z).is_subnormal())) {
+    z_exp -= InFPBits::FRACTION_LEN;
+    z *= DENORMAL_SCALING;
+  }
+
+  x_bits = InFPBits(x);
+  y_bits = InFPBits(y);
+  z_bits = InFPBits(z);
+  const Sign z_sign = z_bits.sign();
+  Sign prod_sign = (x_bits.sign() == y_bits.sign()) ? Sign::POS : Sign::NEG;
+  x_exp += x_bits.get_biased_exponent();
+  y_exp += y_bits.get_biased_exponent();
+  z_exp += z_bits.get_biased_exponent();
+
+  if (LIBC_UNLIKELY(x_exp != InFPBits::MAX_BIASED_EXPONENT &&
+                    y_exp != InFPBits::MAX_BIASED_EXPONENT &&
+                    z_bits.is_inf()))
+    return cast<OutType>(z);
+
+  if (LIBC_UNLIKELY(x_exp == InFPBits::MAX_BIASED_EXPONENT ||
+                    y_exp == InFPBits::MAX_BIASED_EXPONENT ||
+                    z_exp == InFPBits::MAX_BIASED_EXPONENT))
+    return cast<OutType>(x * y + z);
+
+  // Extract mantissa and append hidden leading bits.
+  InStorageType x_mant = x_bits.get_explicit_mantissa();
+  InStorageType y_mant = y_bits.get_explicit_mantissa();
+  TmpResultType z_mant = z_bits.get_explicit_mantissa();
+
+  // If the exponent of the product x*y > the exponent of z, then no extra
+  // precision beside the entire product x*y is needed.  On the other hand, when
+  // the exponent of z >= the exponent of the product x*y, the worst-case that
+  // we need extra precision is when there is cancellation and the most
+  // significant bit of the product is aligned exactly with the second most
+  // significant bit of z:
+  //      z :    10aa...a
+  // - prod :     1bb...bb....b
+  // In that case, in order to store the exact result, we need at least
+  //     (Length of prod) - (Fraction length of z)
+  //   = 2*(Length of input explicit mantissa) - (Fraction length of z) bits.
+  // Overall, before aligning the mantissas and exponents, we can simply left-
+  // shift the mantissa of z by that amount.  After that, it is enough to align
+  // the least significant bit, given that we keep track of the round and sticky
+  // bits after the least significant bit.
+
+  TmpResultType prod_mant = TmpResultType(x_mant) * y_mant;
+  int prod_lsb_exp =
+      x_exp + y_exp - (InFPBits::EXP_BIAS + 2 * InFPBits::FRACTION_LEN);
+
+  constexpr int RESULT_MIN_LEN = PROD_LEN - InFPBits::FRACTION_LEN;
+  z_mant <<= RESULT_MIN_LEN;
+  int z_lsb_exp = z_exp - (InFPBits::FRACTION_LEN + RESULT_MIN_LEN);
+  bool sticky_bits = false;
+  bool z_shifted = false;
+
+  // Align exponents.
+  if (prod_lsb_exp < z_lsb_exp) {
+    sticky_bits = internal::shift_mantissa(z_lsb_exp - prod_lsb_exp, prod_mant);
+    prod_lsb_exp = z_lsb_exp;
+  } else if (z_lsb_exp < prod_lsb_exp) {
+    z_shifted = true;
+    sticky_bits = internal::shift_mantissa(prod_lsb_exp - z_lsb_exp, z_mant);
+  }
+
+  // Perform the addition:
+  //   (-1)^prod_sign * prod_mant + (-1)^z_sign * z_mant.
+  // The final result will be stored in prod_sign and prod_mant.
+  if (prod_sign == z_sign) {
+    // Effectively an addition.
+    prod_mant += z_mant;
+  } else {
+    // Subtraction cases.
+    if (prod_mant >= z_mant) {
+      if (z_shifted && sticky_bits) {
+        // Add 1 more to the subtrahend so that the sticky bits remain
+        // positive. This would simplify the rounding logic.
+        ++z_mant;
+      }
+      prod_mant -= z_mant;
+    } else {
+      if (!z_shifted && sticky_bits) {
+        // Add 1 more to the subtrahend so that the sticky bits remain
+        // positive. This would simplify the rounding logic.
+        ++prod_mant;
+      }
+      prod_mant = z_mant - prod_mant;
+      prod_sign = z_sign;
+    }
+  }
+
+  if (prod_mant == 0) {
+    // When there is exact cancellation, i.e., x*y == -z exactly, return -0.0 if
+    // rounding downward and +0.0 for other rounding modes.
+    if (quick_get_round() == FE_DOWNWARD)
+      prod_sign = Sign::NEG;
+    else
+      prod_sign = Sign::POS;
+  }
+
+  DyadicFloat result(prod_sign, prod_lsb_exp - InFPBits::EXP_BIAS, prod_mant);
+  result.mantissa |= static_cast<unsigned int>(sticky_bits);
+  return result.template as<OutType, /*ShouldSignalExceptions=*/true>();
+}
+
+} // namespace generic
+} // namespace fputil
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC___SUPPORT_FPUTIL_GENERIC_FMA_H
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 23727022a444b..9e576a80295a0 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -137,9 +137,10 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
       }
-      mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
+      bfloat16 neg_xy = -(x * y);
+      mpfr::TernaryInput<bfloat16> input{x, y, neg_xy};
       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-                                     LIBC_NAMESPACE::fmabf16(x, y, -x * y),
+                                     LIBC_NAMESPACE::fmabf16(x, y, neg_xy),
                                      0.5);
     }
   }

>From 7adb7820d334c74b80219670a579ed72621aa330 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 17:15:03 +0530
Subject: [PATCH 35/50] final commit before PR

---
 libc/src/__support/FPUtil/generic/FMA.h |  5 +-
 libc/test/src/math/fmabf16_test.cpp     | 99 -------------------------
 2 files changed, 2 insertions(+), 102 deletions(-)

diff --git a/libc/src/__support/FPUtil/generic/FMA.h b/libc/src/__support/FPUtil/generic/FMA.h
index dc45957f80ff4..e9652cd30066a 100644
--- a/libc/src/__support/FPUtil/generic/FMA.h
+++ b/libc/src/__support/FPUtil/generic/FMA.h
@@ -18,7 +18,7 @@
 #include "src/__support/FPUtil/dyadic_float.h"
 #include "src/__support/FPUtil/rounding_mode.h"
 #include "src/__support/big_int.h"
-#include "src/__support/macros/attributes.h"   // LIBC_INLINE
+#include "src/__support/macros/attributes.h" // LIBC_INLINE
 #include "src/__support/macros/config.h"
 #include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
 
@@ -197,8 +197,7 @@ fma(InType x, InType y, InType z) {
   z_exp += z_bits.get_biased_exponent();
 
   if (LIBC_UNLIKELY(x_exp != InFPBits::MAX_BIASED_EXPONENT &&
-                    y_exp != InFPBits::MAX_BIASED_EXPONENT &&
-                    z_bits.is_inf()))
+                    y_exp != InFPBits::MAX_BIASED_EXPONENT && z_bits.is_inf()))
     return cast<OutType>(z);
 
   if (LIBC_UNLIKELY(x_exp == InFPBits::MAX_BIASED_EXPONENT ||
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 9e576a80295a0..408a17c49a2c5 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -16,109 +16,10 @@ using LlvmLibcFmaBf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
 
 namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
 
-// range: [0, inf]
-static constexpr uint16_t POS_START = 0x0000U;
-static constexpr uint16_t POS_STOP = 0x7f80U;
-
-// range: [-0, -inf]
-static constexpr uint16_t NEG_START = 0x8000U;
-static constexpr uint16_t NEG_STOP = 0xff80U;
-
-// subnormal range (positive)
-static constexpr uint16_t SUBNORM_POS_START = 0x0001U;
-static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
-
 // subnormal range (negative)
 static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
-// static constexpr uint16_t STEP = 512;
-
-// TEST_F(LlvmLibcFmaBf16Test, PositiveRange) {
-
-//   const bfloat16 z_values[] = {zero,
-//                                neg_zero,
-//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-//                                inf,
-//                                neg_inf,
-//                                min_normal,
-//                                max_normal};
-//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-//     for (uint16_t v2 = POS_START; v2 <= POS_STOP; v2 += STEP) {
-
-//       bfloat16 x = FPBits(v1).get_val();
-//       bfloat16 y = FPBits(v2).get_val();
-
-//       for (bfloat16 z : z_values) {
-//         mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-//       }
-//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-//                                      0.5);
-//     }
-//   }
-// }
-
-// TEST_F(LlvmLibcFmaBf16Test, NegativeRange) {
-//   const bfloat16 z_values[] = {zero,
-//                                neg_zero,
-//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-//                                inf,
-//                                neg_inf,
-//                                min_normal,
-//                                max_normal};
-//   for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1 += STEP) {
-//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-//       bfloat16 x = FPBits(v1).get_val();
-//       bfloat16 y = FPBits(v2).get_val();
-//       for (bfloat16 z : z_values) {
-//         mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-//       }
-//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-//                                      0.5);
-//     }
-//   }
-// }
-// TEST_F(LlvmLibcFmaBf16Test, OppositeSignRange) {
-//   const bfloat16 z_values[] = {zero,
-//                                neg_zero,
-//                                FPBits(static_cast<uint16_t>(0x3f80U)).get_val(),
-//                                FPBits(static_cast<uint16_t>(0xbf80U)).get_val(),
-//                                inf,
-//                                neg_inf,
-//                                min_normal,
-//                                max_normal};
-//   for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1 += STEP) {
-//     for (uint16_t v2 = NEG_START; v2 <= NEG_STOP; v2 += STEP) {
-
-//       bfloat16 x = FPBits(v1).get_val();
-//       bfloat16 y = FPBits(v2).get_val();
-//       for (bfloat16 z : z_values) {
-//         mpfr::TernaryInput<bfloat16> input{x, y, z};
-
-//         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                        LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
-//       }
-//       mpfr::TernaryInput<bfloat16> input{x, y, -x * y};
-//       EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
-//                                      LIBC_NAMESPACE::fmabf16(x, y, -x * y),
-//                                      0.5);
-//     }
-//   }
-// }
-
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   const bfloat16 z_values[] = {zero,
                                neg_zero,

>From aabe7d6b2db13bfaec8fb87c99b647a340652fdc Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 17:19:23 +0530
Subject: [PATCH 36/50] if change 1 needed

---
 libc/src/__support/FPUtil/generic/add_sub.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/src/__support/FPUtil/generic/add_sub.h b/libc/src/__support/FPUtil/generic/add_sub.h
index aabc7fa59d840..2c46c97790f82 100644
--- a/libc/src/__support/FPUtil/generic/add_sub.h
+++ b/libc/src/__support/FPUtil/generic/add_sub.h
@@ -96,16 +96,16 @@ add_or_sub(InType x, InType y) {
 
     if (x_bits.is_zero()) {
       if (y_bits.is_zero()) {
-        if (is_effectively_add) {
-          return OutFPBits::zero(x_bits.sign()).get_val();
-        } else {
+        // if (is_effectively_add) {
+        //   return OutFPBits::zero(x_bits.sign()).get_val();
+        // } else {
           switch (quick_get_round()) {
           case FE_DOWNWARD:
             return OutFPBits::zero(Sign::NEG).get_val();
           default:
             return OutFPBits::zero(Sign::POS).get_val();
           }
-        }
+        // }
       }
 
       if constexpr (cpp::is_same_v<InType, bfloat16> &&

>From edac5f8e9abe7280e7c4a90dae39ba8630cfa47f Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 17:25:55 +0530
Subject: [PATCH 37/50] +0 -0 condn needed as gives output sign mismatch

---
 libc/src/__support/FPUtil/generic/add_sub.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/src/__support/FPUtil/generic/add_sub.h b/libc/src/__support/FPUtil/generic/add_sub.h
index 2c46c97790f82..aabc7fa59d840 100644
--- a/libc/src/__support/FPUtil/generic/add_sub.h
+++ b/libc/src/__support/FPUtil/generic/add_sub.h
@@ -96,16 +96,16 @@ add_or_sub(InType x, InType y) {
 
     if (x_bits.is_zero()) {
       if (y_bits.is_zero()) {
-        // if (is_effectively_add) {
-        //   return OutFPBits::zero(x_bits.sign()).get_val();
-        // } else {
+        if (is_effectively_add) {
+          return OutFPBits::zero(x_bits.sign()).get_val();
+        } else {
           switch (quick_get_round()) {
           case FE_DOWNWARD:
             return OutFPBits::zero(Sign::NEG).get_val();
           default:
             return OutFPBits::zero(Sign::POS).get_val();
           }
-        // }
+        }
       }
 
       if constexpr (cpp::is_same_v<InType, bfloat16> &&

>From 6d105d161ebd9201b7c8c91f0677179ac873682c Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 17:49:09 +0530
Subject: [PATCH 38/50] format

---
 libc/src/math/generic/fmabf16.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/src/math/generic/fmabf16.cpp b/libc/src/math/generic/fmabf16.cpp
index 233dbc9089f9c..ab221dd19ac8d 100644
--- a/libc/src/math/generic/fmabf16.cpp
+++ b/libc/src/math/generic/fmabf16.cpp
@@ -7,9 +7,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/fmabf16.h"
-#include "src/__support/common.h"
 #include "src/__support/FPUtil/FMA.h"
 #include "src/__support/FPUtil/bfloat16.h"
+#include "src/__support/common.h"
 #include "src/__support/macros/config.h"
 
 namespace LIBC_NAMESPACE_DECL {

>From 654c87b2a993afc96b084d18c610ed9cf3528c88 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 17:58:13 +0530
Subject: [PATCH 39/50] formatted acc to gitac

---
 libc/test/src/math/fmabf16_test.cpp  | 32 +++++++---------------------
 libc/utils/MPFRWrapper/MPFRUtils.cpp |  7 +++---
 2 files changed, 11 insertions(+), 28 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 408a17c49a2c5..0b36b882c06e8 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -21,12 +21,8 @@ static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
+  const bfloat16 z_values[] = {zero,    neg_zero,   inf,
+                               neg_inf, min_normal, max_normal};
   for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
     for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
 
@@ -49,24 +45,12 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  const bfloat16 z_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  const bfloat16 x_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
-  const bfloat16 y_values[] = {zero,
-                               neg_zero,
-                               inf,
-                               neg_inf,
-                               min_normal,
-                               max_normal};
+  const bfloat16 z_values[] = {zero,    neg_zero,   inf,
+                               neg_inf, min_normal, max_normal};
+  const bfloat16 x_values[] = {zero,    neg_zero,   inf,
+                               neg_inf, min_normal, max_normal};
+  const bfloat16 y_values[] = {zero,    neg_zero,   inf,
+                               neg_inf, min_normal, max_normal};
 
   for (bfloat16 x : x_values) {
     for (bfloat16 y : y_values) {
diff --git a/libc/utils/MPFRWrapper/MPFRUtils.cpp b/libc/utils/MPFRWrapper/MPFRUtils.cpp
index 22617c0ee3f99..4c5c891bcfe9a 100644
--- a/libc/utils/MPFRWrapper/MPFRUtils.cpp
+++ b/libc/utils/MPFRWrapper/MPFRUtils.cpp
@@ -764,10 +764,9 @@ compare_ternary_operation_one_output(Operation,
                                      double, RoundingMode);
 #endif
 
-template bool compare_ternary_operation_one_output(Operation,
-                                                   const TernaryInput<bfloat16> &,
-                                                   bfloat16, double,
-                                                   RoundingMode);
+template bool
+compare_ternary_operation_one_output(Operation, const TernaryInput<bfloat16> &,
+                                     bfloat16, double, RoundingMode);
 template bool compare_ternary_operation_one_output(Operation,
                                                    const TernaryInput<float> &,
                                                    bfloat16, double,

>From 0edf7d6a57336086cd1cefe2567deb4580fee998 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 18:06:20 +0530
Subject: [PATCH 40/50] line-space

---
 libc/test/src/math/fmabf16_test.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 0b36b882c06e8..565225bcb71bf 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -43,7 +43,6 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   }
 }
 
-
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   const bfloat16 z_values[] = {zero,    neg_zero,   inf,
                                neg_inf, min_normal, max_normal};

>From 1c2e9001ad33d5c4b5e9f8a819e260966a7d6bb4 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 21:51:20 +0530
Subject: [PATCH 41/50] shifted (norm,norm,INF) condn + moved Bfloat16 *=
 operator

---
 libc/src/__support/FPUtil/bfloat16.h    |  5 -----
 libc/src/__support/FPUtil/generic/FMA.h | 11 ++++++-----
 2 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/libc/src/__support/FPUtil/bfloat16.h b/libc/src/__support/FPUtil/bfloat16.h
index 7d64b441bf9b2..13e151208567d 100644
--- a/libc/src/__support/FPUtil/bfloat16.h
+++ b/libc/src/__support/FPUtil/bfloat16.h
@@ -113,11 +113,6 @@ struct BFloat16 {
   LIBC_INLINE BFloat16 operator/(BFloat16 other) const {
     return fputil::generic::div<bfloat16>(*this, other);
   }
-
-  LIBC_INLINE BFloat16 &operator*=(const BFloat16 &other) {
-    *this = *this * other;
-    return *this;
-  }
 }; // struct BFloat16
 
 } // namespace fputil
diff --git a/libc/src/__support/FPUtil/generic/FMA.h b/libc/src/__support/FPUtil/generic/FMA.h
index e9652cd30066a..e9023a8e09d5c 100644
--- a/libc/src/__support/FPUtil/generic/FMA.h
+++ b/libc/src/__support/FPUtil/generic/FMA.h
@@ -196,14 +196,15 @@ fma(InType x, InType y, InType z) {
   y_exp += y_bits.get_biased_exponent();
   z_exp += z_bits.get_biased_exponent();
 
-  if (LIBC_UNLIKELY(x_exp != InFPBits::MAX_BIASED_EXPONENT &&
-                    y_exp != InFPBits::MAX_BIASED_EXPONENT && z_bits.is_inf()))
-    return cast<OutType>(z);
-
   if (LIBC_UNLIKELY(x_exp == InFPBits::MAX_BIASED_EXPONENT ||
                     y_exp == InFPBits::MAX_BIASED_EXPONENT ||
-                    z_exp == InFPBits::MAX_BIASED_EXPONENT))
+                    z_exp == InFPBits::MAX_BIASED_EXPONENT)) {
+    if (LIBC_UNLIKELY(x_exp != InFPBits::MAX_BIASED_EXPONENT &&
+                      y_exp != InFPBits::MAX_BIASED_EXPONENT &&
+                      z_bits.is_inf()))
+      return cast<OutType>(z);
     return cast<OutType>(x * y + z);
+  }
 
   // Extract mantissa and append hidden leading bits.
   InStorageType x_mant = x_bits.get_explicit_mantissa();

>From 48666a5e4804534203913b6e0be10eec9f9649d8 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Mon, 23 Feb 2026 23:04:28 +0530
Subject: [PATCH 42/50] fixed a blank space

---
 libc/src/__support/FPUtil/generic/FMA.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/src/__support/FPUtil/generic/FMA.h b/libc/src/__support/FPUtil/generic/FMA.h
index e9023a8e09d5c..9ca6d5f594c94 100644
--- a/libc/src/__support/FPUtil/generic/FMA.h
+++ b/libc/src/__support/FPUtil/generic/FMA.h
@@ -18,7 +18,7 @@
 #include "src/__support/FPUtil/dyadic_float.h"
 #include "src/__support/FPUtil/rounding_mode.h"
 #include "src/__support/big_int.h"
-#include "src/__support/macros/attributes.h" // LIBC_INLINE
+#include "src/__support/macros/attributes.h"   // LIBC_INLINE
 #include "src/__support/macros/config.h"
 #include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
 

>From c3867a81f06479749350b53010667be81189c33d Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 24 Feb 2026 13:43:23 +0530
Subject: [PATCH 43/50] [CHANGE] some nits and constexpr

---
 libc/test/src/math/fmabf16_test.cpp | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 565225bcb71bf..041a64badee0d 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -21,14 +21,14 @@ static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
-  const bfloat16 z_values[] = {zero,    neg_zero,   inf,
+  static constexpr bfloat16 z_values[] = {zero,    neg_zero,   inf,
                                neg_inf, min_normal, max_normal};
   for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
     for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
 
       bfloat16 x = FPBits(v1).get_val();
       bfloat16 y = FPBits(v2).get_val();
-      for (bfloat16 z : z_values) {
+      for (const bfloat16 &z : z_values) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
@@ -44,16 +44,16 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 }
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  const bfloat16 z_values[] = {zero,    neg_zero,   inf,
+  static constexpr bfloat16 z_values[] = {zero,    neg_zero,   inf,
                                neg_inf, min_normal, max_normal};
-  const bfloat16 x_values[] = {zero,    neg_zero,   inf,
+  static constexpr bfloat16 x_values[] = {zero,    neg_zero,   inf,
                                neg_inf, min_normal, max_normal};
-  const bfloat16 y_values[] = {zero,    neg_zero,   inf,
+  static constexpr bfloat16 y_values[] = {zero,    neg_zero,   inf,
                                neg_inf, min_normal, max_normal};
 
-  for (bfloat16 x : x_values) {
-    for (bfloat16 y : y_values) {
-      for (bfloat16 z : z_values) {
+  for (const bfloat16 &x : x_values) {
+    for (const bfloat16 &y : y_values) {
+      for (const bfloat16 &z : z_values) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,

>From c376ac971c6201195787f9adc16890091993f82d Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 24 Feb 2026 13:45:30 +0530
Subject: [PATCH 44/50] fixed math index.rst reflecting bfloat support for fma

---
 libc/docs/headers/math/index.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst
index 0390c56b8e795..4fe7bb4f81978 100644
--- a/libc/docs/headers/math/index.rst
+++ b/libc/docs/headers/math/index.rst
@@ -309,7 +309,7 @@ Higher Math Functions
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | expm1     | |check|          | |check|         |                        | |check|              |                        |                        | 7.12.6.6               | F.10.3.6                   |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
-| fma       | |check|          | |check|         |                        | |check|              | |check|                |                        | 7.12.13.1              | F.10.10.1                  |
+| fma       | |check|          | |check|         |                        | |check|              |                        | |check|                | 7.12.13.1              | F.10.10.1                  |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+
 | f16sqrt   | |check|\*        | |check|\*       | |check|\*              | N/A                  | |check|                |                        | 7.12.14.6              | F.10.11                    |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+------------------------+----------------------------+

>From a1ee59306dedae6e9238563e7956135c9f517b29 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 24 Feb 2026 23:40:14 +0530
Subject: [PATCH 45/50] removed static

---
 libc/test/src/math/fmabf16_test.cpp | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 041a64badee0d..bde2d74f66f72 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -21,14 +21,14 @@ static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
 static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
-  static constexpr bfloat16 z_values[] = {zero,    neg_zero,   inf,
-                               neg_inf, min_normal, max_normal};
+  constexpr bfloat16 Z_VALUES[] = {zero,    neg_zero,   inf,
+                                          neg_inf, min_normal, max_normal};
   for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
     for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
 
       bfloat16 x = FPBits(v1).get_val();
       bfloat16 y = FPBits(v2).get_val();
-      for (const bfloat16 &z : z_values) {
+      for (const bfloat16 &z : Z_VALUES) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
@@ -44,16 +44,16 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 }
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  static constexpr bfloat16 z_values[] = {zero,    neg_zero,   inf,
-                               neg_inf, min_normal, max_normal};
-  static constexpr bfloat16 x_values[] = {zero,    neg_zero,   inf,
-                               neg_inf, min_normal, max_normal};
-  static constexpr bfloat16 y_values[] = {zero,    neg_zero,   inf,
-                               neg_inf, min_normal, max_normal};
+  constexpr bfloat16 Z_VALUES[] = {zero,    neg_zero,   inf,
+                                          neg_inf, min_normal, max_normal};
+  constexpr bfloat16 X_VALUES[] = {zero,    neg_zero,   inf,
+                                          neg_inf, min_normal, max_normal};
+  constexpr bfloat16 Y_VALUES[] = {zero,    neg_zero,   inf,
+                                          neg_inf, min_normal, max_normal};
 
-  for (const bfloat16 &x : x_values) {
-    for (const bfloat16 &y : y_values) {
-      for (const bfloat16 &z : z_values) {
+  for (const bfloat16 &x : X_VALUES) {
+    for (const bfloat16 &y : Y_VALUES) {
+      for (const bfloat16 &z : Z_VALUES) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,

>From 6272fc1d360aa2eca2d5ebda28d88659c4b62940 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 24 Feb 2026 23:40:43 +0530
Subject: [PATCH 46/50] formatted

---
 libc/test/src/math/fmabf16_test.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index bde2d74f66f72..747ebe5a7d252 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -22,7 +22,7 @@ static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
 
 TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   constexpr bfloat16 Z_VALUES[] = {zero,    neg_zero,   inf,
-                                          neg_inf, min_normal, max_normal};
+                                   neg_inf, min_normal, max_normal};
   for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
     for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
 
@@ -45,11 +45,11 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   constexpr bfloat16 Z_VALUES[] = {zero,    neg_zero,   inf,
-                                          neg_inf, min_normal, max_normal};
+                                   neg_inf, min_normal, max_normal};
   constexpr bfloat16 X_VALUES[] = {zero,    neg_zero,   inf,
-                                          neg_inf, min_normal, max_normal};
+                                   neg_inf, min_normal, max_normal};
   constexpr bfloat16 Y_VALUES[] = {zero,    neg_zero,   inf,
-                                          neg_inf, min_normal, max_normal};
+                                   neg_inf, min_normal, max_normal};
 
   for (const bfloat16 &x : X_VALUES) {
     for (const bfloat16 &y : Y_VALUES) {

>From 6bec2d1f5defb23d3bd108006ded1641ceeb6576 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Wed, 25 Feb 2026 12:09:45 +0530
Subject: [PATCH 47/50] ordered CMAKE according to entrypoints (only reordered
 for fmabf16 ) + redundancy removed

---
 libc/src/math/CMakeLists.txt         |  2 +-
 libc/src/math/generic/CMakeLists.txt | 20 ++++++++++----------
 libc/test/src/math/fmabf16_test.cpp  | 17 +++++++----------
 3 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index 21620d9cf89da..3a24b4e85c5ee 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -873,9 +873,9 @@ add_math_entrypoint_object(floorf128)
 add_math_entrypoint_object(floorbf16)
 
 add_math_entrypoint_object(fma)
+add_math_entrypoint_object(fmabf16)
 add_math_entrypoint_object(fmaf)
 add_math_entrypoint_object(fmaf16)
-add_math_entrypoint_object(fmabf16)
 
 add_math_entrypoint_object(fmax)
 add_math_entrypoint_object(fmaxf)
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 0aa2b5c1270c0..77200921d982d 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -4362,27 +4362,27 @@ add_entrypoint_object(
 )
 
 add_entrypoint_object(
-  fmabf16
+  fma
   SRCS
-    fmabf16.cpp
+    fma.cpp
   HDRS
-    ../fmabf16.h
+    ../fma.h
   DEPENDS
-    libc.src.__support.common
-    libc.src.__support.FPUtil.bfloat16
     libc.src.__support.FPUtil.fma
-    libc.src.__support.macros.config
-    libc.src.__support.macros.properties.types
 )
 
 add_entrypoint_object(
-  fma
+  fmabf16
   SRCS
-    fma.cpp
+    fmabf16.cpp
   HDRS
-    ../fma.h
+    ../fmabf16.h
   DEPENDS
+    libc.src.__support.common
+    libc.src.__support.FPUtil.bfloat16
     libc.src.__support.FPUtil.fma
+    libc.src.__support.macros.config
+    libc.src.__support.macros.properties.types
 )
 
 add_entrypoint_object(
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 747ebe5a7d252..3b958aa6c0c19 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -24,7 +24,7 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
   constexpr bfloat16 Z_VALUES[] = {zero,    neg_zero,   inf,
                                    neg_inf, min_normal, max_normal};
   for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
-    for (uint16_t v2 = SUBNORM_NEG_START; v2 <= SUBNORM_NEG_STOP; v2++) {
+    for (uint16_t v2 = v1; v2 <= SUBNORM_NEG_STOP; v2++) {
 
       bfloat16 x = FPBits(v1).get_val();
       bfloat16 y = FPBits(v2).get_val();
@@ -44,16 +44,13 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 }
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
-  constexpr bfloat16 Z_VALUES[] = {zero,    neg_zero,   inf,
-                                   neg_inf, min_normal, max_normal};
-  constexpr bfloat16 X_VALUES[] = {zero,    neg_zero,   inf,
-                                   neg_inf, min_normal, max_normal};
-  constexpr bfloat16 Y_VALUES[] = {zero,    neg_zero,   inf,
+  constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
                                    neg_inf, min_normal, max_normal};
-
-  for (const bfloat16 &x : X_VALUES) {
-    for (const bfloat16 &y : Y_VALUES) {
-      for (const bfloat16 &z : Z_VALUES) {
+  for (int i = 0 ; i< 6 ;++i) {
+    for (int j =i ; j< 6 ;++j) {
+      bfloat16 x = VALUES[i];
+      bfloat16 y = VALUES[j];
+      for (const bfloat16 &z : VALUES) {
         mpfr::TernaryInput<bfloat16> input{x, y, z};
 
         EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,

>From 071138d291e821e9feeeb365682a79b79ff7eb06 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Wed, 25 Feb 2026 12:10:09 +0530
Subject: [PATCH 48/50] formatted

---
 libc/test/src/math/fmabf16_test.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 3b958aa6c0c19..413a572d2a47c 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -45,9 +45,9 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
-                                   neg_inf, min_normal, max_normal};
-  for (int i = 0 ; i< 6 ;++i) {
-    for (int j =i ; j< 6 ;++j) {
+                                 neg_inf, min_normal, max_normal};
+  for (int i = 0; i < 6; ++i) {
+    for (int j = i; j < 6; ++j) {
       bfloat16 x = VALUES[i];
       bfloat16 y = VALUES[j];
       for (const bfloat16 &z : VALUES) {

>From d60932164fc5f85ee76df0eed44d348b5332f420 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Thu, 26 Feb 2026 13:42:23 +0530
Subject: [PATCH 49/50] reflected requested changes & added exhaustive test

---
 libc/test/src/math/exhaustive/CMakeLists.txt  |  17 +++
 .../test/src/math/exhaustive/fmabf16_test.cpp | 105 ++++++++++++++++++
 libc/test/src/math/fmabf16_test.cpp           |   4 +-
 3 files changed, 124 insertions(+), 2 deletions(-)
 create mode 100644 libc/test/src/math/exhaustive/fmabf16_test.cpp

diff --git a/libc/test/src/math/exhaustive/CMakeLists.txt b/libc/test/src/math/exhaustive/CMakeLists.txt
index a21e208312c56..66c183b736d92 100644
--- a/libc/test/src/math/exhaustive/CMakeLists.txt
+++ b/libc/test/src/math/exhaustive/CMakeLists.txt
@@ -293,6 +293,23 @@ add_fp_unittest(
     -lpthread
 )
 
+add_fp_unittest(
+  fmabf16_test
+  NO_RUN_POSTBUILD
+  NEED_MPFR
+  SUITE
+    libc_math_exhaustive_tests
+  SRCS
+    fmabf16_test.cpp
+  DEPENDS
+    .exhaustive_test
+    libc.src.math.fmabf16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.bfloat16
+  LINK_LIBRARIES
+    -lpthread
+)
+
 add_fp_unittest(
   logf_test
   NO_RUN_POSTBUILD
diff --git a/libc/test/src/math/exhaustive/fmabf16_test.cpp b/libc/test/src/math/exhaustive/fmabf16_test.cpp
new file mode 100644
index 0000000000000..dce60d0594108
--- /dev/null
+++ b/libc/test/src/math/exhaustive/fmabf16_test.cpp
@@ -0,0 +1,105 @@
+//===-- Exhaustive test for fmabf16 -------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/__support/FPUtil/bfloat16.h"
+#include "src/math/fmabf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "test/UnitTest/Test.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
+
+using LlvmLibcFmaBf16Test = LIBC_NAMESPACE::testing::FPTest<bfloat16>;
+
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+// Normal range: [+0, +int]
+static constexpr uint16_t POS_START = 0x0000U;
+static constexpr uint16_t POS_STOP = 0x7f80U;
+
+// Normal range: [-0, -int]
+static constexpr uint16_t NEG_START = 0x8000U;
+static constexpr uint16_t NEG_STOP = 0xff80U;
+
+// Subnormal range (positive)
+static constexpr uint16_t SUBNORM_POS_START = 0x0001U;
+static constexpr uint16_t SUBNORM_POS_STOP = 0x007FU;
+
+// Subnormal range (negative)
+static constexpr uint16_t SUBNORM_NEG_START = 0x8001U;
+static constexpr uint16_t SUBNORM_NEG_STOP = 0x807FU;
+
+TEST_F(LlvmLibcFmaBf16Test, NormalPositiveRange) {
+  constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
+                                 neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = POS_START; v1 <= POS_STOP; v1++) {
+    for (uint16_t v2 = v1; v2 <= POS_STOP; v2++) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (const bfloat16 &z : VALUES) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+    }
+  }
+}
+
+TEST_F(LlvmLibcFmaBf16Test, NormalNegativeRange) {
+  constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
+                                 neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = NEG_START; v1 <= NEG_STOP; v1++) {
+    for (uint16_t v2 = v1; v2 <= NEG_STOP; v2++) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (const bfloat16 &z : VALUES) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+    }
+  }
+}
+
+TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
+  constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
+                                 neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = SUBNORM_NEG_START; v1 <= SUBNORM_NEG_STOP; v1++) {
+    for (uint16_t v2 = v1; v2 <= SUBNORM_NEG_STOP; v2++) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (const bfloat16 &z : VALUES) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+    }
+  }
+}
+
+TEST_F(LlvmLibcFmaBf16Test, SubnormalPositiveRange) {
+  constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
+                                 neg_inf, min_normal, max_normal};
+  for (uint16_t v1 = SUBNORM_POS_START; v1 <= SUBNORM_POS_STOP; v1++) {
+    for (uint16_t v2 = v1; v2 <= SUBNORM_POS_STOP; v2++) {
+
+      bfloat16 x = FPBits(v1).get_val();
+      bfloat16 y = FPBits(v2).get_val();
+      for (const bfloat16 &z : VALUES) {
+        mpfr::TernaryInput<bfloat16> input{x, y, z};
+
+        EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
+                                       LIBC_NAMESPACE::fmabf16(x, y, z), 0.5);
+      }
+    }
+  }
+}
diff --git a/libc/test/src/math/fmabf16_test.cpp b/libc/test/src/math/fmabf16_test.cpp
index 413a572d2a47c..4b7a9e90b7226 100644
--- a/libc/test/src/math/fmabf16_test.cpp
+++ b/libc/test/src/math/fmabf16_test.cpp
@@ -46,8 +46,8 @@ TEST_F(LlvmLibcFmaBf16Test, SubnormalNegativeRange) {
 TEST_F(LlvmLibcFmaBf16Test, SpecialNumbers) {
   constexpr bfloat16 VALUES[] = {zero,    neg_zero,   inf,
                                  neg_inf, min_normal, max_normal};
-  for (int i = 0; i < 6; ++i) {
-    for (int j = i; j < 6; ++j) {
+  for (size_t i = 0; i < 6; ++i) {
+    for (size_t j = i; j < 6; ++j) {
       bfloat16 x = VALUES[i];
       bfloat16 y = VALUES[j];
       for (const bfloat16 &z : VALUES) {

>From 5f0e30aabd0646c4dbb740ee696a77d3455cf450 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 10 Mar 2026 12:21:28 +0530
Subject: [PATCH 50/50] entrypoints conflicts resolved

---
 libc/config/baremetal/aarch64/entrypoints.txt |  932 -----------
 libc/config/baremetal/arm/entrypoints.txt     |  944 -----------
 libc/config/baremetal/riscv/entrypoints.txt   |  942 -----------
 libc/config/darwin/aarch64/entrypoints.txt    |  751 ---------
 libc/config/gpu/amdgpu/entrypoints.txt        |  693 --------
 libc/config/gpu/nvptx/entrypoints.txt         |  695 --------
 libc/config/linux/aarch64/entrypoints.txt     | 1187 +-------------
 libc/config/linux/arm/entrypoints.txt         |  541 -------
 libc/config/linux/riscv/entrypoints.txt       | 1332 ----------------
 libc/config/linux/x86_64/entrypoints.txt      | 1408 +----------------
 libc/config/windows/entrypoints.txt           |  384 -----
 11 files changed, 2 insertions(+), 9807 deletions(-)

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 32d8201d9c53c..6564999e22455 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -399,938 +399,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  if(LIBC_TYPES_HAS_FLOAT128)
-    list(APPEND TARGET_LIBM_ENTRYPOINTS
-      # math.h C23 mixed _Float16 and _Float128 entrypoints
-      libc.src.math.f16addf128
-      libc.src.math.f16divf128
-      libc.src.math.f16fmaf128
-      libc.src.math.f16mulf128
-      libc.src.math.f16sqrtf128
-      libc.src.math.f16subf128
-    )
-  endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16divf128
-    libc.src.math.bf16fmaf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LIBC_COMPILER_HAS_FIXED_POINT)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # stdfix.h _Fract and _Accum entrypoints
-    libc.src.stdfix.abshk
-    libc.src.stdfix.abshr
-    libc.src.stdfix.absk
-    libc.src.stdfix.abslk
-    libc.src.stdfix.abslr
-    libc.src.stdfix.absr
-    libc.src.stdfix.exphk
-    libc.src.stdfix.expk
-    libc.src.stdfix.roundhk
-    libc.src.stdfix.roundhr
-    libc.src.stdfix.roundk
-    libc.src.stdfix.roundlk
-    libc.src.stdfix.roundlr
-    libc.src.stdfix.roundr
-    libc.src.stdfix.rounduhk
-    libc.src.stdfix.rounduhr
-    libc.src.stdfix.rounduk
-    libc.src.stdfix.roundulk
-    libc.src.stdfix.roundulr
-    libc.src.stdfix.roundur
-    libc.src.stdfix.sqrtuhk
-    libc.src.stdfix.sqrtuhr
-    libc.src.stdfix.sqrtuk
-    libc.src.stdfix.sqrtur
-    # libc.src.stdfix.sqrtulk
-    libc.src.stdfix.sqrtulr
-    libc.src.stdfix.uhksqrtus
-    libc.src.stdfix.uksqrtui
-    libc.src.stdfix.hrbits
-    libc.src.stdfix.uhrbits
-    libc.src.stdfix.rbits
-    libc.src.stdfix.urbits
-    libc.src.stdfix.lrbits
-    libc.src.stdfix.ulrbits
-    libc.src.stdfix.hkbits
-    libc.src.stdfix.uhkbits
-    libc.src.stdfix.kbits
-    libc.src.stdfix.ukbits
-    libc.src.stdfix.lkbits
-    libc.src.stdfix.ulkbits
-    libc.src.stdfix.bitshr
-    libc.src.stdfix.bitsr
-    libc.src.stdfix.bitslr
-    libc.src.stdfix.bitshk
-    libc.src.stdfix.bitsk
-    libc.src.stdfix.bitslk
-    libc.src.stdfix.bitsuhr
-    libc.src.stdfix.bitsur
-    libc.src.stdfix.bitsulr
-    libc.src.stdfix.bitsuhk
-    libc.src.stdfix.bitsuk
-    libc.src.stdfix.bitsulk
-    libc.src.stdfix.countlshr
-    libc.src.stdfix.countlsr
-    libc.src.stdfix.countlslr
-    libc.src.stdfix.countlshk
-    libc.src.stdfix.countlsk
-    libc.src.stdfix.countlslk
-    libc.src.stdfix.countlsuhr
-    libc.src.stdfix.countlsur
-    libc.src.stdfix.countlsulr
-    libc.src.stdfix.countlsuhk
-    libc.src.stdfix.countlsuk
-    libc.src.stdfix.countlsulk
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-set(TARGET_LIBC_ENTRYPOINTS
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # compiler entrypoints (no corresponding header)
-    libc.src.compiler.__stack_chk_fail
-
-    # 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
-
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper_l
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    libc.src.string.memmove
-    libc.src.string.mempcpy
-    libc.src.string.memrchr
-    libc.src.string.memset
-    libc.src.string.memset_explicit
-    libc.src.string.stpcpy
-    libc.src.string.stpncpy
-    libc.src.string.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    libc.src.string.strerror_r
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-
-    # string.h entrypoints
-    libc.src.string.strcoll_l
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.ffs
-    libc.src.strings.ffsl
-    libc.src.strings.ffsll
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # strings.h entrypoints
-    libc.src.strings.strcasecmp_l
-    libc.src.strings.strncasecmp_l
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdio.h entrypoints
-    libc.src.stdio.asprintf
-    libc.src.stdio.feof
-    libc.src.stdio.ferror
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgets
-    libc.src.stdio.fprintf
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fscanf
-    libc.src.stdio.fwrite
-    libc.src.stdio.getchar
-    libc.src.stdio.printf
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.remove
-    libc.src.stdio.scanf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vasprintf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.vprintf
-    libc.src.stdio.vscanf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.vsscanf
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.a64l
-    libc.src.stdlib.abort
-    libc.src.stdlib.abs
-    libc.src.stdlib.aligned_alloc
-    libc.src.stdlib.atexit
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.calloc
-    libc.src.stdlib.div
-    libc.src.stdlib.exit
-    libc.src.stdlib.free
-    libc.src.stdlib.l64a
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.malloc
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.realloc
-    libc.src.stdlib.srand
-    # libc.src.stdlib.strfromd
-    # libc.src.stdlib.strfromf
-    # libc.src.stdlib.strfroml
-    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 entrypoints
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull_l
-
-    # time.h entrypoints
-    libc.src.time.asctime
-    libc.src.time.asctime_r
-    libc.src.time.clock
-    libc.src.time.ctime
-    libc.src.time.ctime_r
-    libc.src.time.difftime
-    libc.src.time.gmtime
-    libc.src.time.gmtime_r
-    libc.src.time.localtime
-    libc.src.time.localtime_r
-    libc.src.time.mktime
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.timespec_get
-
-    # wchar.h entrypoints
-    libc.src.wchar.btowc
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # internal entrypoints
-    libc.startup.baremetal.init
-    libc.startup.baremetal.fini
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    # libc.src.math.atan2l
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp10m1f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 03dacfdc97df9..da718392e4a6e 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -299,7 +299,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-    libc.src.wctype.iswdigit
 
     # internal entrypoints
     libc.startup.baremetal.init
@@ -403,949 +402,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  if(LIBC_TYPES_HAS_FLOAT128)
-    list(APPEND TARGET_LIBM_ENTRYPOINTS
-      # math.h C23 mixed _Float16 and _Float128 entrypoints
-      libc.src.math.f16addf128
-      libc.src.math.f16divf128
-      libc.src.math.f16fmaf128
-      libc.src.math.f16mulf128
-      libc.src.math.f16sqrtf128
-      libc.src.math.f16subf128
-    )
-  endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16divf128
-    libc.src.math.bf16fmaf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LIBC_COMPILER_HAS_FIXED_POINT)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # stdfix.h _Fract and _Accum entrypoints
-    libc.src.stdfix.abshk
-    libc.src.stdfix.abshr
-    libc.src.stdfix.absk
-    libc.src.stdfix.abslk
-    libc.src.stdfix.abslr
-    libc.src.stdfix.absr
-    libc.src.stdfix.exphk
-    libc.src.stdfix.expk
-    libc.src.stdfix.roundhk
-    libc.src.stdfix.roundhr
-    libc.src.stdfix.roundk
-    libc.src.stdfix.roundlk
-    libc.src.stdfix.roundlr
-    libc.src.stdfix.roundr
-    libc.src.stdfix.rounduhk
-    libc.src.stdfix.rounduhr
-    libc.src.stdfix.rounduk
-    libc.src.stdfix.roundulk
-    libc.src.stdfix.roundulr
-    libc.src.stdfix.roundur
-    libc.src.stdfix.sqrtuhk
-    libc.src.stdfix.sqrtuhr
-    libc.src.stdfix.sqrtuk
-    libc.src.stdfix.sqrtur
-    # libc.src.stdfix.sqrtulk
-    libc.src.stdfix.sqrtulr
-    libc.src.stdfix.uhksqrtus
-    libc.src.stdfix.uksqrtui
-    libc.src.stdfix.hrbits
-    libc.src.stdfix.uhrbits
-    libc.src.stdfix.rbits
-    libc.src.stdfix.urbits
-    libc.src.stdfix.lrbits
-    libc.src.stdfix.ulrbits
-    libc.src.stdfix.hkbits
-    libc.src.stdfix.uhkbits
-    libc.src.stdfix.kbits
-    libc.src.stdfix.ukbits
-    libc.src.stdfix.lkbits
-    libc.src.stdfix.ulkbits
-    libc.src.stdfix.bitshr
-    libc.src.stdfix.bitsr
-    libc.src.stdfix.bitslr
-    libc.src.stdfix.bitshk
-    libc.src.stdfix.bitsk
-    libc.src.stdfix.bitslk
-    libc.src.stdfix.bitsuhr
-    libc.src.stdfix.bitsur
-    libc.src.stdfix.bitsulr
-    libc.src.stdfix.bitsuhk
-    libc.src.stdfix.bitsuk
-    libc.src.stdfix.bitsulk
-    libc.src.stdfix.countlshr
-    libc.src.stdfix.countlsr
-    libc.src.stdfix.countlslr
-    libc.src.stdfix.countlshk
-    libc.src.stdfix.countlsk
-    libc.src.stdfix.countlslk
-    libc.src.stdfix.countlsuhr
-    libc.src.stdfix.countlsur
-    libc.src.stdfix.countlsulr
-    libc.src.stdfix.countlsuhk
-    libc.src.stdfix.countlsuk
-    libc.src.stdfix.countlsulk
-    libc.src.stdfix.idivr
-    libc.src.stdfix.idivlr
-    libc.src.stdfix.idivk
-    libc.src.stdfix.idivlk
-    libc.src.stdfix.idivur
-    libc.src.stdfix.idivulr
-    libc.src.stdfix.idivuk
-    libc.src.stdfix.idivulk
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-set(TARGET_LIBC_ENTRYPOINTS
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # compiler entrypoints (no corresponding header)
-    libc.src.compiler.__stack_chk_fail
-
-    # 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
-
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper_l
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    libc.src.string.memmove
-    libc.src.string.mempcpy
-    libc.src.string.memrchr
-    libc.src.string.memset
-    libc.src.string.memset_explicit
-    libc.src.string.stpcpy
-    libc.src.string.stpncpy
-    libc.src.string.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    libc.src.string.strerror_r
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-
-    # string.h entrypoints
-    libc.src.string.strcoll_l
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.ffs
-    libc.src.strings.ffsl
-    libc.src.strings.ffsll
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # strings.h entrypoints
-    libc.src.strings.strcasecmp_l
-    libc.src.strings.strncasecmp_l
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdio.h entrypoints
-    libc.src.stdio.asprintf
-    libc.src.stdio.feof
-    libc.src.stdio.ferror
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgets
-    libc.src.stdio.fprintf
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fscanf
-    libc.src.stdio.fwrite
-    libc.src.stdio.getchar
-    libc.src.stdio.printf
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.remove
-    libc.src.stdio.scanf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vasprintf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.vprintf
-    libc.src.stdio.vscanf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.vsscanf
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.a64l
-    libc.src.stdlib.abort
-    libc.src.stdlib.abs
-    libc.src.stdlib.aligned_alloc
-    libc.src.stdlib.atexit
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.calloc
-    libc.src.stdlib.div
-    libc.src.stdlib.exit
-    libc.src.stdlib.free
-    libc.src.stdlib.l64a
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.malloc
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.realloc
-    libc.src.stdlib.srand
-    # libc.src.stdlib.strfromd
-    # libc.src.stdlib.strfromf
-    # libc.src.stdlib.strfroml
-    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 entrypoints
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull_l
-
-    # time.h entrypoints
-    libc.src.time.asctime
-    libc.src.time.asctime_r
-    libc.src.time.clock
-    libc.src.time.ctime
-    libc.src.time.ctime_r
-    libc.src.time.difftime
-    libc.src.time.gmtime
-    libc.src.time.gmtime_r
-    libc.src.time.localtime
-    libc.src.time.localtime_r
-    libc.src.time.mktime
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.timespec_get
-
-    # wchar.h entrypoints
-    libc.src.wchar.btowc
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-
-    # internal entrypoints
-    libc.startup.baremetal.init
-    libc.startup.baremetal.fini
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan2l
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp10m1f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 43e713ede585b..a2cbf102f42da 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -296,7 +296,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-    libc.src.wctype.iswdigit
 
     # internal entrypoints
     libc.startup.baremetal.init
@@ -398,947 +397,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    # libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  if(LIBC_TYPES_HAS_FLOAT128)
-    list(APPEND TARGET_LIBM_ENTRYPOINTS
-      # math.h C23 mixed _Float16 and _Float128 entrypoints
-      libc.src.math.f16addf128
-      libc.src.math.f16divf128
-      libc.src.math.f16fmaf128
-      libc.src.math.f16mulf128
-      libc.src.math.f16sqrtf128
-      libc.src.math.f16subf128
-    )
-  endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    # libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16divf128
-    libc.src.math.bf16fmaf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LIBC_COMPILER_HAS_FIXED_POINT)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # stdfix.h _Fract and _Accum entrypoints
-    libc.src.stdfix.abshk
-    libc.src.stdfix.abshr
-    libc.src.stdfix.absk
-    libc.src.stdfix.abslk
-    libc.src.stdfix.abslr
-    libc.src.stdfix.absr
-    libc.src.stdfix.exphk
-    libc.src.stdfix.expk
-    libc.src.stdfix.roundhk
-    libc.src.stdfix.roundhr
-    libc.src.stdfix.roundk
-    libc.src.stdfix.roundlk
-    libc.src.stdfix.roundlr
-    libc.src.stdfix.roundr
-    libc.src.stdfix.rounduhk
-    libc.src.stdfix.rounduhr
-    libc.src.stdfix.rounduk
-    libc.src.stdfix.roundulk
-    libc.src.stdfix.roundulr
-    libc.src.stdfix.roundur
-    libc.src.stdfix.sqrtuhk
-    libc.src.stdfix.sqrtuhr
-    libc.src.stdfix.sqrtuk
-    libc.src.stdfix.sqrtur
-    # libc.src.stdfix.sqrtulk
-    libc.src.stdfix.sqrtulr
-    libc.src.stdfix.uhksqrtus
-    libc.src.stdfix.uksqrtui
-    libc.src.stdfix.hrbits
-    libc.src.stdfix.uhrbits
-    libc.src.stdfix.rbits
-    libc.src.stdfix.urbits
-    libc.src.stdfix.lrbits
-    libc.src.stdfix.ulrbits
-    libc.src.stdfix.hkbits
-    libc.src.stdfix.uhkbits
-    libc.src.stdfix.kbits
-    libc.src.stdfix.ukbits
-    libc.src.stdfix.lkbits
-    libc.src.stdfix.ulkbits
-    libc.src.stdfix.bitshr
-    libc.src.stdfix.bitsr
-    libc.src.stdfix.bitslr
-    libc.src.stdfix.bitshk
-    libc.src.stdfix.bitsk
-    libc.src.stdfix.bitslk
-    libc.src.stdfix.bitsuhr
-    libc.src.stdfix.bitsur
-    libc.src.stdfix.bitsulr
-    libc.src.stdfix.bitsuhk
-    libc.src.stdfix.bitsuk
-    libc.src.stdfix.bitsulk
-    libc.src.stdfix.countlshr
-    libc.src.stdfix.countlsr
-    libc.src.stdfix.countlslr
-    libc.src.stdfix.countlshk
-    libc.src.stdfix.countlsk
-    libc.src.stdfix.countlslk
-    libc.src.stdfix.countlsuhr
-    libc.src.stdfix.countlsur
-    libc.src.stdfix.countlsulr
-    libc.src.stdfix.countlsuhk
-    libc.src.stdfix.countlsuk
-    libc.src.stdfix.countlsulk
-    libc.src.stdfix.idivr
-    libc.src.stdfix.idivlr
-    libc.src.stdfix.idivk
-    libc.src.stdfix.idivlk
-    libc.src.stdfix.idivur
-    libc.src.stdfix.idivulr
-    libc.src.stdfix.idivuk
-    libc.src.stdfix.idivulk
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-set(TARGET_LIBC_ENTRYPOINTS
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # compiler entrypoints (no corresponding header)
-    libc.src.compiler.__stack_chk_fail
-
-    # 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
-
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper_l
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-
-    # setjmp.h entrypoints
-    # libc.src.setjmp.longjmp
-    # libc.src.setjmp.setjmp
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    libc.src.string.memmove
-    libc.src.string.mempcpy
-    libc.src.string.memrchr
-    libc.src.string.memset
-    libc.src.string.memset_explicit
-    libc.src.string.stpcpy
-    libc.src.string.stpncpy
-    libc.src.string.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    libc.src.string.strerror_r
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-
-    # string.h entrypoints
-    libc.src.string.strcoll_l
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.ffs
-    libc.src.strings.ffsl
-    libc.src.strings.ffsll
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # strings.h entrypoints
-    libc.src.strings.strcasecmp_l
-    libc.src.strings.strncasecmp_l
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdio.h entrypoints
-    libc.src.stdio.asprintf
-    libc.src.stdio.feof
-    libc.src.stdio.ferror
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgets
-    libc.src.stdio.fprintf
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fscanf
-    libc.src.stdio.fwrite
-    libc.src.stdio.getchar
-    libc.src.stdio.printf
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.remove
-    libc.src.stdio.scanf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vasprintf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.vprintf
-    libc.src.stdio.vscanf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.vsscanf
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.a64l
-    libc.src.stdlib.abort
-    libc.src.stdlib.abs
-    libc.src.stdlib.aligned_alloc
-    libc.src.stdlib.atexit
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.calloc
-    libc.src.stdlib.div
-    libc.src.stdlib.exit
-    libc.src.stdlib.free
-    libc.src.stdlib.l64a
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.malloc
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.realloc
-    libc.src.stdlib.srand
-    # libc.src.stdlib.strfromd
-    # libc.src.stdlib.strfromf
-    # libc.src.stdlib.strfroml
-    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 entrypoints
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull_l
-
-    # time.h entrypoints
-    libc.src.time.asctime
-    libc.src.time.asctime_r
-    libc.src.time.clock
-    libc.src.time.ctime
-    libc.src.time.ctime_r
-    libc.src.time.difftime
-    libc.src.time.gmtime
-    libc.src.time.gmtime_r
-    libc.src.time.localtime
-    libc.src.time.localtime_r
-    libc.src.time.mktime
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.timespec_get
-
-    # wchar.h entrypoints
-    libc.src.wchar.btowc
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-
-    # internal entrypoints
-    libc.startup.baremetal.init
-    libc.startup.baremetal.fini
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    # libc.src.math.atan2l
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp10m1f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index aebfd4ec13376..3ec54b2b27e50 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -102,8 +102,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-<<<<<<< HEAD
-    libc.src.wctype.iswdigit
 )
 
 if(LLVM_LIBC_FULL_BUILD)
@@ -214,755 +212,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.tanpif
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  if(LIBC_TYPES_HAS_FLOAT128)
-    list(APPEND TARGET_LIBM_ENTRYPOINTS
-      # math.h C23 mixed _Float16 and _Float128 entrypoints
-      libc.src.math.f16addf128
-      libc.src.math.f16divf128
-      libc.src.math.f16fmaf128
-      libc.src.math.f16mulf128
-      libc.src.math.f16sqrtf128
-      libc.src.math.f16subf128
-    )
-  endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LIBC_COMPILER_HAS_FIXED_POINT)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # stdfix.h _Fract and _Accum entrypoints
-    libc.src.stdfix.abshk
-    libc.src.stdfix.abshr
-    libc.src.stdfix.absk
-    libc.src.stdfix.abslk
-    libc.src.stdfix.abslr
-    libc.src.stdfix.absr
-    libc.src.stdfix.exphk
-    libc.src.stdfix.expk
-    libc.src.stdfix.roundhk
-    libc.src.stdfix.roundhr
-    libc.src.stdfix.roundk
-    libc.src.stdfix.roundlk
-    libc.src.stdfix.roundlr
-    libc.src.stdfix.roundr
-    libc.src.stdfix.rounduhk
-    libc.src.stdfix.rounduhr
-    libc.src.stdfix.rounduk
-    libc.src.stdfix.roundulk
-    libc.src.stdfix.roundulr
-    libc.src.stdfix.roundur
-    libc.src.stdfix.sqrtuhk
-    libc.src.stdfix.sqrtuhr
-    libc.src.stdfix.sqrtuk
-    libc.src.stdfix.sqrtur
-    # libc.src.stdfix.sqrtulk
-    libc.src.stdfix.sqrtulr
-    libc.src.stdfix.uhksqrtus
-    libc.src.stdfix.uksqrtui
-    libc.src.stdfix.hrbits
-    libc.src.stdfix.uhrbits
-    libc.src.stdfix.rbits
-    libc.src.stdfix.urbits
-    libc.src.stdfix.lrbits
-    libc.src.stdfix.ulrbits
-    libc.src.stdfix.hkbits
-    libc.src.stdfix.uhkbits
-    libc.src.stdfix.kbits
-    libc.src.stdfix.ukbits
-    libc.src.stdfix.lkbits
-    libc.src.stdfix.ulkbits
-    libc.src.stdfix.bitshr
-    libc.src.stdfix.bitsr
-    libc.src.stdfix.bitslr
-    libc.src.stdfix.bitshk
-    libc.src.stdfix.bitsk
-    libc.src.stdfix.bitslk
-    libc.src.stdfix.bitsuhr
-    libc.src.stdfix.bitsur
-    libc.src.stdfix.bitsulr
-    libc.src.stdfix.bitsuhk
-    libc.src.stdfix.bitsuk
-    libc.src.stdfix.bitsulk
-    libc.src.stdfix.countlshr
-    libc.src.stdfix.countlsr
-    libc.src.stdfix.countlslr
-    libc.src.stdfix.countlshk
-    libc.src.stdfix.countlsk
-    libc.src.stdfix.countlslk
-    libc.src.stdfix.countlsuhr
-    libc.src.stdfix.countlsur
-    libc.src.stdfix.countlsulr
-    libc.src.stdfix.countlsuhk
-    libc.src.stdfix.countlsuk
-    libc.src.stdfix.countlsulk
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-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
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    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
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # 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.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.rand
-    libc.src.stdlib.srand
-    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.free
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-=======
->>>>>>> 868c4689fec2 (crlf-lf 2)
-)
-
-if(LLVM_LIBC_FULL_BUILD)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-    libc.src.setjmp.siglongjmp
-    libc.src.setjmp.sigsetjmp
-    libc.src.stdlib._Exit
-  )
-endif()
-
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp10m1f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index c8a22b8aaf25c..bf5844a2d0279 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -339,699 +339,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.lgamma
-    libc.src.math.lgamma_r
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.round
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.tanpif
-    libc.src.math.tgamma
-    libc.src.math.tgammaf
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.acospif16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.atanf16
-    libc.src.math.atanhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    # libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-set(TARGET_LIBC_ENTRYPOINTS
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isascii
-    libc.src.ctype.isblank
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.toascii
-    libc.src.ctype.tolower
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper
-    libc.src.ctype.toupper_l
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcoll_l
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.abort
-    libc.src.stdlib.abs
-    libc.src.stdlib.atexit
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.div
-    libc.src.stdlib.exit
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.srand
-    libc.src.stdlib.strtod
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull
-    libc.src.stdlib.strtoull_l
-    libc.src.stdlib.at_quick_exit
-    libc.src.stdlib.quick_exit
-    libc.src.stdlib.getenv
-    libc.src.stdlib.system
-
-    # TODO: Implement these correctly
-    libc.src.stdlib.aligned_alloc
-    libc.src.stdlib.calloc
-    libc.src.stdlib.free
-    libc.src.stdlib.malloc
-    libc.src.stdlib.realloc
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # stdio.h entrypoints
-    libc.src.stdio.clearerr
-    libc.src.stdio.fclose
-    libc.src.stdio.printf
-    libc.src.stdio.vprintf
-    libc.src.stdio.fprintf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.asprintf
-    libc.src.stdio.vasprintf
-    libc.src.stdio.scanf
-    libc.src.stdio.vscanf
-    libc.src.stdio.fscanf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vsscanf
-    libc.src.stdio.feof
-    libc.src.stdio.ferror
-    libc.src.stdio.fflush
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgets
-    libc.src.stdio.fopen
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fseek
-    libc.src.stdio.ftell
-    libc.src.stdio.fwrite
-    libc.src.stdio.getc
-    libc.src.stdio.getchar
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.remove
-    libc.src.stdio.rename
-    libc.src.stdio.stderr
-    libc.src.stdio.stdin
-    libc.src.stdio.stdout
-    libc.src.stdio.ungetc
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # time.h entrypoints
-    libc.src.time.clock
-    libc.src.time.clock_gettime
-    libc.src.time.timespec_get
-    libc.src.time.nanosleep
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.mktime
-
-    # wchar.h entrypoints
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan2l
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.ddivl
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index c557b751c5b6e..42f96930128b8 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -339,701 +339,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    # FIXME: Broken.
-    # libc.src.math.fromfp
-    # libc.src.math.fromfpf
-    # libc.src.math.fromfpl
-    # libc.src.math.fromfpx
-    # libc.src.math.fromfpxf
-    # libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.lgamma
-    libc.src.math.lgamma_r
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.round
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.tanpif
-    libc.src.math.tgamma
-    libc.src.math.tgammaf
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    # FIXME: Broken.
-    # libc.src.math.ufromfp
-    # libc.src.math.ufromfpf
-    # libc.src.math.ufromfpl
-    # libc.src.math.ufromfpx
-    # libc.src.math.ufromfpxf
-    # libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.acospif16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.atanf16
-    libc.src.math.atanhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-set(TARGET_LIBC_ENTRYPOINTS
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isascii
-    libc.src.ctype.isblank
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.toascii
-    libc.src.ctype.tolower
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper
-    libc.src.ctype.toupper_l
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcoll_l
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.abort
-    libc.src.stdlib.abs
-    libc.src.stdlib.atexit
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.div
-    libc.src.stdlib.exit
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.srand
-    libc.src.stdlib.strtod
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull
-    libc.src.stdlib.strtoull_l
-    libc.src.stdlib.at_quick_exit
-    libc.src.stdlib.quick_exit
-    libc.src.stdlib.getenv
-    libc.src.stdlib.system
-
-    # TODO: Implement these correctly
-    libc.src.stdlib.aligned_alloc
-    libc.src.stdlib.calloc
-    libc.src.stdlib.free
-    libc.src.stdlib.malloc
-    libc.src.stdlib.realloc
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # stdio.h entrypoints
-    libc.src.stdio.clearerr
-    libc.src.stdio.fclose
-    libc.src.stdio.printf
-    libc.src.stdio.vprintf
-    libc.src.stdio.fprintf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.asprintf
-    libc.src.stdio.vasprintf
-    libc.src.stdio.scanf
-    libc.src.stdio.vscanf
-    libc.src.stdio.fscanf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vsscanf
-    libc.src.stdio.feof
-    libc.src.stdio.ferror
-    libc.src.stdio.fflush
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgets
-    libc.src.stdio.fopen
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fseek
-    libc.src.stdio.ftell
-    libc.src.stdio.fwrite
-    libc.src.stdio.getc
-    libc.src.stdio.getchar
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.remove
-    libc.src.stdio.rename
-    libc.src.stdio.stderr
-    libc.src.stdio.stdin
-    libc.src.stdio.stdout
-    libc.src.stdio.ungetc
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # time.h entrypoints
-    libc.src.time.clock
-    libc.src.time.clock_gettime
-    libc.src.time.timespec_get
-    libc.src.time.nanosleep
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.mktime
-
-    # wchar.h entrypoints
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-)
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan2l
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.ddivl
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 609e85bebc9d6..c8694c4a3cbd5 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -369,7 +369,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-    libc.src.wctype.iswdigit
 
     # sys/uio.h entrypoints
     libc.src.sys.uio.writev
@@ -478,6 +477,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
+    libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
     libc.src.math.fmaxf
@@ -1194,1188 +1194,3 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBM_ENTRYPOINTS}
   ${TARGET_LIBMVEC_ENTRYPOINTS}
 )
-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
-
-    # dlfcn.h entrypoints
-    libc.src.dlfcn.dlclose
-    libc.src.dlfcn.dlerror
-    libc.src.dlfcn.dlopen
-    libc.src.dlfcn.dlsym
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # fcntl.h entrypoints
-    libc.src.fcntl.creat
-    libc.src.fcntl.fcntl
-    libc.src.fcntl.open
-    libc.src.fcntl.openat
-
-    # poll.h entrypoints
-    libc.src.poll.poll
-
-    # sched.h entrypoints
-    libc.src.sched.sched_get_priority_max
-    libc.src.sched.sched_get_priority_min
-    libc.src.sched.sched_getaffinity
-    libc.src.sched.sched_getparam
-    libc.src.sched.sched_getscheduler
-    libc.src.sched.sched_rr_get_interval
-    libc.src.sched.sched_setaffinity
-    libc.src.sched.sched_setparam
-    libc.src.sched.sched_setscheduler
-    libc.src.sched.sched_yield
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    libc.src.string.memmove
-    libc.src.string.mempcpy
-    libc.src.string.memrchr
-    libc.src.string.memset
-    libc.src.string.memset_explicit
-    libc.src.string.stpcpy
-    libc.src.string.stpncpy
-    libc.src.string.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    libc.src.string.strerror_r
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strsignal
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.ffs
-    libc.src.strings.ffsl
-    libc.src.strings.ffsll
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib.abs
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    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.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.srand
-    libc.src.stdlib.strfromd
-    libc.src.stdlib.strfromf
-    # TODO: long double support is buggy with clang-11. Re-enable when buildbots are upgraded.
-    # libc.src.stdlib.strfroml
-    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.aligned_alloc
-    libc.src.stdlib.calloc
-    libc.src.stdlib.free
-    libc.src.stdlib.malloc
-    libc.src.stdlib.realloc
-
-    # stdio.h entrypoints
-    libc.src.stdio.fprintf
-    libc.src.stdio.fscanf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.printf
-    libc.src.stdio.remove
-    libc.src.stdio.rename
-    libc.src.stdio.scanf
-    libc.src.stdio.vscanf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.asprintf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vsscanf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.vprintf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.vasprintf
-
-    # sys/epoll.h entrypoints
-    libc.src.sys.epoll.epoll_create
-    libc.src.sys.epoll.epoll_create1
-    libc.src.sys.epoll.epoll_ctl
-    libc.src.sys.epoll.epoll_pwait
-    libc.src.sys.epoll.epoll_wait
-    # TODO: Need to check if pwait2 is available before providing.
-    # https://github.com/llvm/llvm-project/issues/80060
-    # libc.src.sys.epoll.epoll_pwait2
-
-    # sys/ioctl.h entrypoints
-    libc.src.sys.ioctl.ioctl
-
-    # sys/mman.h entrypoints
-    libc.src.sys.mman.madvise
-    libc.src.sys.mman.mincore
-    libc.src.sys.mman.mlock
-    libc.src.sys.mman.mlock2
-    libc.src.sys.mman.mlockall
-    libc.src.sys.mman.mmap
-    libc.src.sys.mman.mremap
-    libc.src.sys.mman.mprotect
-    libc.src.sys.mman.msync
-    libc.src.sys.mman.munlock
-    libc.src.sys.mman.munlockall
-    libc.src.sys.mman.munmap
-    libc.src.sys.mman.remap_file_pages
-    libc.src.sys.mman.posix_madvise
-    libc.src.sys.mman.shm_open
-    libc.src.sys.mman.shm_unlink
-
-    # sys/random.h entrypoints
-    libc.src.sys.random.getrandom
-
-    # sys/resource.h entrypoints
-    libc.src.sys.resource.getrlimit
-    libc.src.sys.resource.setrlimit
-
-    # sys/sendfile entrypoints
-    libc.src.sys.sendfile.sendfile
-
-    # sys/stat.h entrypoints
-    libc.src.sys.stat.chmod
-    libc.src.sys.stat.fchmod
-    libc.src.sys.stat.fchmodat
-    libc.src.sys.stat.fstat
-    libc.src.sys.stat.lstat
-    libc.src.sys.stat.mkdir
-    libc.src.sys.stat.mkdirat
-    libc.src.sys.stat.stat
-
-    # sys/statvfs.h
-    libc.src.sys.statvfs.fstatvfs
-    libc.src.sys.statvfs.statvfs
-
-    # sys/utsname.h entrypoints
-    libc.src.sys.utsname.uname
-
-    # sys/wait.h entrypoints
-    libc.src.sys.wait.wait
-    libc.src.sys.wait.wait4
-    libc.src.sys.wait.waitpid
-
-    # sys/prctl.h entrypoints
-    libc.src.sys.prctl.prctl
-
-    # sys/auxv.h entrypoints
-    libc.src.sys.auxv.getauxval
-
-    # termios.h entrypoints
-    libc.src.termios.cfgetispeed
-    libc.src.termios.cfgetospeed
-    libc.src.termios.cfsetispeed
-    libc.src.termios.cfsetospeed
-    libc.src.termios.tcdrain
-    libc.src.termios.tcflow
-    libc.src.termios.tcflush
-    libc.src.termios.tcgetattr
-    libc.src.termios.tcgetsid
-    libc.src.termios.tcsendbreak
-    libc.src.termios.tcsetattr
-
-    # unistd.h entrypoints
-    libc.src.unistd.access
-    libc.src.unistd.chdir
-    libc.src.unistd.close
-    libc.src.unistd.dup
-    libc.src.unistd.dup2
-    libc.src.unistd.dup3
-    libc.src.unistd.execve
-    libc.src.unistd.faccessat
-    libc.src.unistd.fchdir
-    libc.src.unistd.fchown
-    libc.src.unistd.fpathconf
-    libc.src.unistd.fsync
-    libc.src.unistd.ftruncate
-    libc.src.unistd.getcwd
-    libc.src.unistd.getentropy
-    libc.src.unistd.geteuid
-    libc.src.unistd.gethostname
-    libc.src.unistd.getpagesize
-    libc.src.unistd.getpid
-    libc.src.unistd.getppid
-    libc.src.unistd.getsid
-    libc.src.unistd.gettid
-    libc.src.unistd.getuid
-    libc.src.unistd.isatty
-    libc.src.unistd.link
-    libc.src.unistd.linkat
-    libc.src.unistd.lseek
-    libc.src.unistd.pathconf
-    libc.src.unistd.pipe
-    libc.src.unistd.pipe2
-    libc.src.unistd.pread
-    libc.src.unistd.pwrite
-    libc.src.unistd.read
-    libc.src.unistd.readlink
-    libc.src.unistd.readlinkat
-    libc.src.unistd.rmdir
-    libc.src.unistd.setsid
-    libc.src.unistd.symlink
-    libc.src.unistd.symlinkat
-    libc.src.unistd.sysconf
-    libc.src.unistd.truncate
-    libc.src.unistd.unlink
-    libc.src.unistd.unlinkat
-    libc.src.unistd.write
-
-    # wchar.h entrypoints
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-
-    # sys/uio.h entrypoints
-    libc.src.sys.uio.writev
-    libc.src.sys.uio.readv
-
-    # sys/time.h entrypoints
-    libc.src.sys.time.setitimer
-    libc.src.sys.time.getitimer
-)
-
-if(LLVM_LIBC_INCLUDE_SCUDO)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # malloc.h external entrypoints
-    libc.src.stdlib.mallopt
-  )
-endif()
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    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.fmabf16
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.tanpif
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acoshf16
-    libc.src.math.asinpif16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cospif16
-    libc.src.math.expf16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    # libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    # libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    # libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    # libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    # libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    # libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    # libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.logbf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    # libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    # Temporarily disable nexttowardf16 on aarch64 because the conversion
-    # between _Float16 and long double will crash clang-11.  This is fixed in
-    # clang-12 and after: https://godbolt.org/z/8ceT9454c
-    # libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.rsqrtf
-    libc.src.math.rsqrtf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  # if(LIBC_TYPES_HAS_FLOAT128)
-  #   list(APPEND TARGET_LIBM_ENTRYPOINTS
-  #     # math.h C23 mixed _Float16 and _Float128 entrypoints
-  #     libc.src.math.f16addf128
-  #     libc.src.math.f16divf128
-  #     libc.src.math.f16fmaf128
-  #     libc.src.math.f16mulf128
-  #     libc.src.math.f16sqrtf128
-  #     libc.src.math.f16subf128
-  #   )
-  # endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16divf128
-    libc.src.math.bf16fmaf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LLVM_LIBC_FULL_BUILD)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # compiler entrypoints (no corresponding header)
-    libc.src.compiler.__stack_chk_fail
-
-    # dirent.h entrypoints
-    libc.src.dirent.closedir
-    libc.src.dirent.dirfd
-    libc.src.dirent.opendir
-    libc.src.dirent.readdir
-
-    # arpa/inet.h entrypoints
-    libc.src.arpa.inet.htonl
-    libc.src.arpa.inet.htons
-    libc.src.arpa.inet.inet_addr
-    libc.src.arpa.inet.inet_aton
-    libc.src.arpa.inet.ntohl
-    libc.src.arpa.inet.ntohs
-
-    # pthread.h entrypoints
-    libc.src.pthread.pthread_atfork
-    libc.src.pthread.pthread_attr_destroy
-    libc.src.pthread.pthread_attr_getdetachstate
-    libc.src.pthread.pthread_attr_getguardsize
-    libc.src.pthread.pthread_attr_getstack
-    libc.src.pthread.pthread_attr_getstacksize
-    libc.src.pthread.pthread_attr_init
-    libc.src.pthread.pthread_attr_setdetachstate
-    libc.src.pthread.pthread_attr_setguardsize
-    libc.src.pthread.pthread_attr_setstack
-    libc.src.pthread.pthread_attr_setstacksize
-    libc.src.pthread.pthread_condattr_destroy
-    libc.src.pthread.pthread_condattr_getclock
-    libc.src.pthread.pthread_condattr_getpshared
-    libc.src.pthread.pthread_condattr_init
-    libc.src.pthread.pthread_condattr_setclock
-    libc.src.pthread.pthread_condattr_setpshared
-    libc.src.pthread.pthread_create
-    libc.src.pthread.pthread_detach
-    libc.src.pthread.pthread_equal
-    libc.src.pthread.pthread_exit
-    libc.src.pthread.pthread_getname_np
-    libc.src.pthread.pthread_getspecific
-    libc.src.pthread.pthread_join
-    libc.src.pthread.pthread_key_create
-    libc.src.pthread.pthread_key_delete
-    libc.src.pthread.pthread_mutex_destroy
-    libc.src.pthread.pthread_mutex_init
-    libc.src.pthread.pthread_mutex_lock
-    libc.src.pthread.pthread_mutex_unlock
-    libc.src.pthread.pthread_mutexattr_destroy
-    libc.src.pthread.pthread_mutexattr_getpshared
-    libc.src.pthread.pthread_mutexattr_getrobust
-    libc.src.pthread.pthread_mutexattr_gettype
-    libc.src.pthread.pthread_mutexattr_init
-    libc.src.pthread.pthread_mutexattr_setpshared
-    libc.src.pthread.pthread_mutexattr_setrobust
-    libc.src.pthread.pthread_mutexattr_settype
-    libc.src.pthread.pthread_once
-    libc.src.pthread.pthread_rwlock_clockrdlock
-    libc.src.pthread.pthread_rwlock_clockwrlock
-    libc.src.pthread.pthread_rwlock_destroy
-    libc.src.pthread.pthread_rwlock_init
-    libc.src.pthread.pthread_rwlock_rdlock
-    libc.src.pthread.pthread_rwlock_timedrdlock
-    libc.src.pthread.pthread_rwlock_timedwrlock
-    libc.src.pthread.pthread_rwlock_tryrdlock
-    libc.src.pthread.pthread_rwlock_trywrlock
-    libc.src.pthread.pthread_rwlock_unlock
-    libc.src.pthread.pthread_rwlock_wrlock
-    libc.src.pthread.pthread_rwlockattr_destroy
-    libc.src.pthread.pthread_rwlockattr_getkind_np
-    libc.src.pthread.pthread_rwlockattr_getpshared
-    libc.src.pthread.pthread_rwlockattr_init
-    libc.src.pthread.pthread_rwlockattr_setkind_np
-    libc.src.pthread.pthread_rwlockattr_setpshared
-    libc.src.pthread.pthread_spin_destroy
-    libc.src.pthread.pthread_spin_init
-    libc.src.pthread.pthread_spin_lock
-    libc.src.pthread.pthread_spin_trylock
-    libc.src.pthread.pthread_spin_unlock
-    libc.src.pthread.pthread_self
-    libc.src.pthread.pthread_setname_np
-    libc.src.pthread.pthread_setspecific
-
-    # sched.h entrypoints
-    libc.src.sched.__sched_getcpucount
-    libc.src.sched.__sched_setcpuzero
-    libc.src.sched.__sched_setcpuset
-    libc.src.sched.__sched_getcpuisset
-
-    # strings.h entrypoints
-    libc.src.strings.strcasecmp_l
-    libc.src.strings.strncasecmp_l
-
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-    libc.src.setjmp.siglongjmp
-    libc.src.setjmp.sigsetjmp
-
-    # stdio.h entrypoints
-    libc.src.stdio.clearerr
-    libc.src.stdio.clearerr_unlocked
-    libc.src.stdio.fclose
-    libc.src.stdio.fdopen
-    libc.src.stdio.feof
-    libc.src.stdio.feof_unlocked
-    libc.src.stdio.ferror
-    libc.src.stdio.ferror_unlocked
-    libc.src.stdio.fflush
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgetc_unlocked
-    libc.src.stdio.fgets
-    libc.src.stdio.fileno
-    libc.src.stdio.flockfile
-    libc.src.stdio.fopen
-    libc.src.stdio.fopencookie
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fread_unlocked
-    libc.src.stdio.fseek
-    libc.src.stdio.fseeko
-    libc.src.stdio.ftell
-    libc.src.stdio.ftello
-    libc.src.stdio.funlockfile
-    libc.src.stdio.fwrite
-    libc.src.stdio.fwrite_unlocked
-    libc.src.stdio.getc
-    libc.src.stdio.getc_unlocked
-    libc.src.stdio.getchar
-    libc.src.stdio.getchar_unlocked
-    libc.src.stdio.perror
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.setbuf
-    libc.src.stdio.setvbuf
-    libc.src.stdio.stderr
-    libc.src.stdio.stdin
-    libc.src.stdio.stdout
-    libc.src.stdio.ungetc
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.abort
-    libc.src.stdlib.at_quick_exit
-    libc.src.stdlib.atexit
-    libc.src.stdlib.exit
-    libc.src.stdlib.getenv
-    libc.src.stdlib.quick_exit
-
-    # signal.h entrypoints
-    libc.src.signal.kill
-    libc.src.signal.raise
-    libc.src.signal.sigaction
-    libc.src.signal.sigaddset
-    libc.src.signal.sigaltstack
-    libc.src.signal.sigdelset
-    libc.src.signal.sigemptyset
-    libc.src.signal.sigfillset
-    libc.src.signal.signal
-    libc.src.signal.sigprocmask
-
-    # spawn.h entrypoints
-    libc.src.spawn.posix_spawn
-    libc.src.spawn.posix_spawn_file_actions_addclose
-    libc.src.spawn.posix_spawn_file_actions_adddup2
-    libc.src.spawn.posix_spawn_file_actions_addopen
-    libc.src.spawn.posix_spawn_file_actions_destroy
-    libc.src.spawn.posix_spawn_file_actions_init
-
-    # search.h entrypoints
-    libc.src.search.hcreate
-    libc.src.search.hcreate_r
-    libc.src.search.hdestroy
-    libc.src.search.hdestroy_r
-    libc.src.search.hsearch
-    libc.src.search.hsearch_r
-    libc.src.search.insque
-    libc.src.search.lfind
-    libc.src.search.lsearch
-    libc.src.search.remque
-
-    # threads.h entrypoints
-    libc.src.threads.call_once
-    libc.src.threads.cnd_broadcast
-    libc.src.threads.cnd_destroy
-    libc.src.threads.cnd_init
-    libc.src.threads.cnd_signal
-    libc.src.threads.cnd_wait
-    libc.src.threads.mtx_destroy
-    libc.src.threads.mtx_init
-    libc.src.threads.mtx_lock
-    libc.src.threads.mtx_unlock
-    libc.src.threads.thrd_create
-    libc.src.threads.thrd_current
-    libc.src.threads.thrd_detach
-    libc.src.threads.thrd_equal
-    libc.src.threads.thrd_exit
-    libc.src.threads.thrd_join
-    libc.src.threads.tss_create
-    libc.src.threads.tss_delete
-    libc.src.threads.tss_get
-    libc.src.threads.tss_set
-
-    # time.h entrypoints
-    libc.src.time.asctime
-    libc.src.time.asctime_r
-    libc.src.time.ctime
-    libc.src.time.ctime_r
-    libc.src.time.clock
-    libc.src.time.clock_gettime
-    libc.src.time.clock_settime
-    libc.src.time.difftime
-    libc.src.time.gettimeofday
-    libc.src.time.gmtime
-    libc.src.time.gmtime_r
-    libc.src.time.mktime
-    libc.src.time.nanosleep
-    libc.src.time.time
-    libc.src.time.timespec_get
-
-    # unistd.h entrypoints
-    libc.src.unistd.__llvm_libc_syscall
-    libc.src.unistd._exit
-    libc.src.unistd.environ
-    libc.src.unistd.execv
-    libc.src.unistd.fork
-    libc.src.unistd.getopt
-    libc.src.unistd.optarg
-    libc.src.unistd.opterr
-    libc.src.unistd.optind
-    libc.src.unistd.optopt
-    libc.src.unistd.swab
-
-    # sys/select.h entrypoints
-    libc.src.sys.select.select
-
-    # sys/socket.h entrypoints
-    libc.src.sys.socket.bind
-    libc.src.sys.socket.socket
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index 024c41cfcaf79..24f30d41da6d0 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -194,8 +194,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-<<<<<<< HEAD
-    libc.src.wctype.iswdigit
 )
 
 if(LLVM_LIBC_FULL_BUILD)
@@ -304,545 +302,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmul
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    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.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    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.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    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.tanpif
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-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
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # poll.h entrypoints
-    libc.src.poll.poll
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    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.strsep
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib.abs
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    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.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    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.aligned_alloc
-    libc.src.stdlib.free
-    libc.src.stdlib.malloc
-
-    # sys/ioctl.h entrypoints
-    libc.src.sys.ioctl.ioctl
-
-    # sys/mman.h entrypoints
-    libc.src.sys.mman.mmap
-    libc.src.sys.mman.munmap
-
-    # sys/prctl.h entrypoints
-    libc.src.sys.prctl.prctl
-
-    # sys/epoll.h entrypoints
-    # Disabled due to epoll_wait syscalls not being available on this platform.
-    # libc.src.sys.epoll.epoll_wait
-    # libc.src.sys.epoll.epoll_pwait
-    # libc.src.sys.epoll.epoll_pwait2
-
-    # sys/time.h entrypoints
-    libc.src.sys.time.setitimer
-    libc.src.sys.time.getitimer
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-=======
->>>>>>> 868c4689fec2 (crlf-lf 2)
-)
-
-if(LLVM_LIBC_FULL_BUILD)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # search.h entrypoints
-    libc.src.search.lfind
-
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-    libc.src.setjmp.siglongjmp
-    libc.src.setjmp.sigsetjmp
-  )
-endif()
-
-if(LLVM_LIBC_INCLUDE_SCUDO)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # malloc.h external entrypoints
-    libc.src.stdlib.mallopt
-  )
-endif()
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.dfmal
-    libc.src.math.dsqrtl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 7c0eee0a1f1e2..ec66bd146f62c 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -373,7 +373,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-    libc.src.wctype.iswdigit
 
     # sys/uio.h entrypoints
     libc.src.sys.uio.writev
@@ -487,1337 +486,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.tanpif
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.acospif16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.atanhf16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.rsqrtf
-    libc.src.math.rsqrtf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  if(LIBC_TYPES_HAS_FLOAT128)
-    list(APPEND TARGET_LIBM_ENTRYPOINTS
-      # math.h C23 mixed _Float16 and _Float128 entrypoints
-      libc.src.math.f16addf128
-      libc.src.math.f16divf128
-      libc.src.math.f16fmaf128
-      libc.src.math.f16mulf128
-      libc.src.math.f16sqrtf128
-      libc.src.math.f16subf128
-    )
-  endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16divf128
-    libc.src.math.bf16fmaf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LIBC_COMPILER_HAS_FIXED_POINT)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # stdfix.h _Fract and _Accum entrypoints
-    libc.src.stdfix.abshk
-    libc.src.stdfix.abshr
-    libc.src.stdfix.absk
-    libc.src.stdfix.abslk
-    libc.src.stdfix.abslr
-    libc.src.stdfix.absr
-    libc.src.stdfix.exphk
-    libc.src.stdfix.expk
-    libc.src.stdfix.roundhk
-    libc.src.stdfix.roundhr
-    libc.src.stdfix.roundk
-    libc.src.stdfix.roundlk
-    libc.src.stdfix.roundlr
-    libc.src.stdfix.roundr
-    libc.src.stdfix.rounduhk
-    libc.src.stdfix.rounduhr
-    libc.src.stdfix.rounduk
-    libc.src.stdfix.roundulk
-    libc.src.stdfix.roundulr
-    libc.src.stdfix.roundur
-    libc.src.stdfix.sqrtuhk
-    libc.src.stdfix.sqrtuhr
-    libc.src.stdfix.sqrtuk
-    libc.src.stdfix.sqrtur
-    # libc.src.stdfix.sqrtulk
-    libc.src.stdfix.sqrtulr
-    libc.src.stdfix.uhksqrtus
-    libc.src.stdfix.uksqrtui
-    libc.src.stdfix.hrbits
-    libc.src.stdfix.uhrbits
-    libc.src.stdfix.rbits
-    libc.src.stdfix.urbits
-    libc.src.stdfix.lrbits
-    libc.src.stdfix.ulrbits
-    libc.src.stdfix.hkbits
-    libc.src.stdfix.uhkbits
-    libc.src.stdfix.kbits
-    libc.src.stdfix.ukbits
-    libc.src.stdfix.lkbits
-    libc.src.stdfix.ulkbits
-    libc.src.stdfix.bitshr
-    libc.src.stdfix.bitsr
-    libc.src.stdfix.bitslr
-    libc.src.stdfix.bitshk
-    libc.src.stdfix.bitsk
-    libc.src.stdfix.bitslk
-    libc.src.stdfix.bitsuhr
-    libc.src.stdfix.bitsur
-    libc.src.stdfix.bitsulr
-    libc.src.stdfix.bitsuhk
-    libc.src.stdfix.bitsuk
-    libc.src.stdfix.bitsulk
-    libc.src.stdfix.countlshr
-    libc.src.stdfix.countlsr
-    libc.src.stdfix.countlslr
-    libc.src.stdfix.countlshk
-    libc.src.stdfix.countlsk
-    libc.src.stdfix.countlslk
-    libc.src.stdfix.countlsuhr
-    libc.src.stdfix.countlsur
-    libc.src.stdfix.countlsulr
-    libc.src.stdfix.countlsuhk
-    libc.src.stdfix.countlsuk
-    libc.src.stdfix.countlsulk
-    libc.src.stdfix.idivr
-    libc.src.stdfix.idivlr
-    libc.src.stdfix.idivk
-    libc.src.stdfix.idivlk
-    libc.src.stdfix.idivur
-    libc.src.stdfix.idivulr
-    libc.src.stdfix.idivuk
-    libc.src.stdfix.idivulk
-    libc.src.stdfix.rdivi
-  )
-endif()
-
-if(LLVM_LIBC_FULL_BUILD)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper_l
-
-    # stdlib.h entrypoints
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull_l
-
-    # string.h entrypoints
-    libc.src.string.strcoll_l
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.strcasecmp_l
-    libc.src.strings.strncasecmp_l
-
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # compiler entrypoints (no corresponding header)
-    libc.src.compiler.__stack_chk_fail
-
-    # dirent.h entrypoints
-    libc.src.dirent.closedir
-    libc.src.dirent.dirfd
-    libc.src.dirent.opendir
-    libc.src.dirent.readdir
-
-    # arpa/inet.h entrypoints
-    libc.src.arpa.inet.htonl
-    libc.src.arpa.inet.htons
-    libc.src.arpa.inet.inet_addr
-    libc.src.arpa.inet.inet_aton
-    libc.src.arpa.inet.ntohl
-    libc.src.arpa.inet.ntohs
-
-    # pthread.h entrypoints
-    libc.src.pthread.pthread_atfork
-    libc.src.pthread.pthread_attr_destroy
-    libc.src.pthread.pthread_attr_getdetachstate
-    libc.src.pthread.pthread_attr_getguardsize
-    libc.src.pthread.pthread_attr_getstack
-    libc.src.pthread.pthread_attr_getstacksize
-    libc.src.pthread.pthread_attr_init
-    libc.src.pthread.pthread_attr_setdetachstate
-    libc.src.pthread.pthread_attr_setguardsize
-    libc.src.pthread.pthread_attr_setstack
-    libc.src.pthread.pthread_attr_setstacksize
-    libc.src.pthread.pthread_condattr_destroy
-    libc.src.pthread.pthread_condattr_getclock
-    libc.src.pthread.pthread_condattr_getpshared
-    libc.src.pthread.pthread_condattr_init
-    libc.src.pthread.pthread_condattr_setclock
-    libc.src.pthread.pthread_condattr_setpshared
-    libc.src.pthread.pthread_create
-    libc.src.pthread.pthread_detach
-    libc.src.pthread.pthread_equal
-    libc.src.pthread.pthread_exit
-    libc.src.pthread.pthread_getname_np
-    libc.src.pthread.pthread_getspecific
-    libc.src.pthread.pthread_join
-    libc.src.pthread.pthread_key_create
-    libc.src.pthread.pthread_key_delete
-    libc.src.pthread.pthread_mutex_destroy
-    libc.src.pthread.pthread_mutex_init
-    libc.src.pthread.pthread_mutex_lock
-    libc.src.pthread.pthread_mutex_unlock
-    libc.src.pthread.pthread_mutexattr_destroy
-    libc.src.pthread.pthread_mutexattr_getpshared
-    libc.src.pthread.pthread_mutexattr_getrobust
-    libc.src.pthread.pthread_mutexattr_gettype
-    libc.src.pthread.pthread_mutexattr_init
-    libc.src.pthread.pthread_mutexattr_setpshared
-    libc.src.pthread.pthread_mutexattr_setrobust
-    libc.src.pthread.pthread_mutexattr_settype
-    libc.src.pthread.pthread_once
-    libc.src.pthread.pthread_rwlock_clockrdlock
-    libc.src.pthread.pthread_rwlock_clockwrlock
-    libc.src.pthread.pthread_rwlock_destroy
-    libc.src.pthread.pthread_rwlock_init
-    libc.src.pthread.pthread_rwlock_rdlock
-    libc.src.pthread.pthread_rwlock_timedrdlock
-    libc.src.pthread.pthread_rwlock_timedwrlock
-    libc.src.pthread.pthread_rwlock_tryrdlock
-    libc.src.pthread.pthread_rwlock_trywrlock
-    libc.src.pthread.pthread_rwlock_unlock
-    libc.src.pthread.pthread_rwlock_wrlock
-    libc.src.pthread.pthread_rwlockattr_destroy
-    libc.src.pthread.pthread_rwlockattr_getkind_np
-    libc.src.pthread.pthread_rwlockattr_getpshared
-    libc.src.pthread.pthread_rwlockattr_init
-    libc.src.pthread.pthread_rwlockattr_setkind_np
-    libc.src.pthread.pthread_rwlockattr_setpshared
-    libc.src.pthread.pthread_spin_destroy
-    libc.src.pthread.pthread_spin_init
-    libc.src.pthread.pthread_spin_lock
-    libc.src.pthread.pthread_spin_trylock
-    libc.src.pthread.pthread_spin_unlock
-    libc.src.pthread.pthread_self
-    libc.src.pthread.pthread_setname_np
-    libc.src.pthread.pthread_setspecific
-
-    # sched.h entrypoints
-    libc.src.sched.__sched_getcpucount
-    libc.src.sched.__sched_setcpuzero
-    libc.src.sched.__sched_setcpuset
-    libc.src.sched.__sched_getcpuisset
-
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-    libc.src.setjmp.siglongjmp
-    libc.src.setjmp.sigsetjmp
-
-    # stdio.h entrypoints
-    libc.src.stdio.clearerr
-    libc.src.stdio.clearerr_unlocked
-    libc.src.stdio.fclose
-    libc.src.stdio.fdopen
-    libc.src.stdio.feof
-    libc.src.stdio.feof_unlocked
-    libc.src.stdio.ferror
-    libc.src.stdio.ferror_unlocked
-    libc.src.stdio.fflush
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgetc_unlocked
-    libc.src.stdio.fgets
-    libc.src.stdio.fileno
-    libc.src.stdio.flockfile
-    libc.src.stdio.fopen
-    libc.src.stdio.fopencookie
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fread_unlocked
-    libc.src.stdio.fseek
-    libc.src.stdio.fseeko
-    libc.src.stdio.ftell
-    libc.src.stdio.ftello
-    libc.src.stdio.funlockfile
-    libc.src.stdio.fwrite
-    libc.src.stdio.fwrite_unlocked
-    libc.src.stdio.getc
-    libc.src.stdio.getc_unlocked
-    libc.src.stdio.getchar
-    libc.src.stdio.getchar_unlocked
-    libc.src.stdio.perror
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.setbuf
-    libc.src.stdio.setvbuf
-    libc.src.stdio.stderr
-    libc.src.stdio.stdin
-    libc.src.stdio.stdout
-    libc.src.stdio.ungetc
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.abort
-    libc.src.stdlib.at_quick_exit
-    libc.src.stdlib.atexit
-    libc.src.stdlib.exit
-    libc.src.stdlib.getenv
-    libc.src.stdlib.quick_exit
-
-    # signal.h entrypoints
-    libc.src.signal.kill
-    libc.src.signal.raise
-    libc.src.signal.sigaction
-    libc.src.signal.sigaddset
-    libc.src.signal.sigaltstack
-    libc.src.signal.sigdelset
-    libc.src.signal.sigemptyset
-    libc.src.signal.sigfillset
-    libc.src.signal.signal
-    libc.src.signal.sigprocmask
-
-    # spawn.h entrypoints
-    libc.src.spawn.posix_spawn
-    libc.src.spawn.posix_spawn_file_actions_addclose
-    libc.src.spawn.posix_spawn_file_actions_adddup2
-    libc.src.spawn.posix_spawn_file_actions_addopen
-    libc.src.spawn.posix_spawn_file_actions_destroy
-    libc.src.spawn.posix_spawn_file_actions_init
-
-    # search.h entrypoints
-    libc.src.search.hcreate
-    libc.src.search.hcreate_r
-    libc.src.search.hdestroy
-    libc.src.search.hdestroy_r
-    libc.src.search.hsearch
-    libc.src.search.hsearch_r
-    libc.src.search.insque
-    libc.src.search.lfind
-    libc.src.search.lsearch
-    libc.src.search.remque
-
-    # threads.h entrypoints
-    libc.src.threads.call_once
-    libc.src.threads.cnd_broadcast
-    libc.src.threads.cnd_destroy
-    libc.src.threads.cnd_init
-    libc.src.threads.cnd_signal
-    libc.src.threads.cnd_wait
-    libc.src.threads.mtx_destroy
-    libc.src.threads.mtx_init
-    libc.src.threads.mtx_lock
-    libc.src.threads.mtx_unlock
-    libc.src.threads.thrd_create
-    libc.src.threads.thrd_current
-    libc.src.threads.thrd_detach
-    libc.src.threads.thrd_equal
-    libc.src.threads.thrd_exit
-    libc.src.threads.thrd_join
-    libc.src.threads.tss_create
-    libc.src.threads.tss_delete
-    libc.src.threads.tss_get
-    libc.src.threads.tss_set
-
-    # time.h entrypoints
-    libc.src.time.asctime
-    libc.src.time.asctime_r
-    libc.src.time.ctime
-    libc.src.time.ctime_r
-    libc.src.time.clock
-    libc.src.time.clock_gettime
-    libc.src.time.clock_settime
-    libc.src.time.difftime
-    libc.src.time.gettimeofday
-    libc.src.time.gmtime
-    libc.src.time.gmtime_r
-    libc.src.time.mktime
-    libc.src.time.nanosleep
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.time
-    libc.src.time.timespec_get
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-
-    # unistd.h entrypoints
-    libc.src.unistd.__llvm_libc_syscall
-    libc.src.unistd._exit
-    libc.src.unistd.environ
-    libc.src.unistd.execv
-    libc.src.unistd.fork
-    libc.src.unistd.getopt
-    libc.src.unistd.optarg
-    libc.src.unistd.opterr
-    libc.src.unistd.optind
-    libc.src.unistd.optopt
-    libc.src.unistd.swab
-
-    # sys/select.h entrypoints
-    libc.src.sys.select.select
-
-    # sys/socket.h entrypoints
-    libc.src.sys.socket.bind
-    libc.src.sys.socket.socket
-    libc.src.sys.socket.socketpair
-    libc.src.sys.socket.send
-    libc.src.sys.socket.sendto
-    libc.src.sys.socket.sendmsg
-    libc.src.sys.socket.recv
-    libc.src.sys.socket.recvfrom
-    libc.src.sys.socket.recvmsg
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-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
-
-    # dlfcn.h entrypoints
-    libc.src.dlfcn.dlclose
-    libc.src.dlfcn.dlerror
-    libc.src.dlfcn.dlopen
-    libc.src.dlfcn.dlsym
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # fcntl.h entrypoints
-    libc.src.fcntl.creat
-    libc.src.fcntl.fcntl
-    libc.src.fcntl.open
-    libc.src.fcntl.openat
-
-    # poll.h entrypoints
-    libc.src.poll.poll
-
-    # sched.h entrypoints
-    libc.src.sched.sched_get_priority_max
-    libc.src.sched.sched_get_priority_min
-    libc.src.sched.sched_getaffinity
-    libc.src.sched.sched_getparam
-    libc.src.sched.sched_getscheduler
-    libc.src.sched.sched_rr_get_interval
-    libc.src.sched.sched_setaffinity
-    libc.src.sched.sched_setparam
-    libc.src.sched.sched_setscheduler
-    libc.src.sched.sched_yield
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    libc.src.string.memmove
-    libc.src.string.mempcpy
-    libc.src.string.memrchr
-    libc.src.string.memset
-    libc.src.string.memset_explicit
-    libc.src.string.stpcpy
-    libc.src.string.stpncpy
-    libc.src.string.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    libc.src.string.strerror_r
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strsignal
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.ffs
-    libc.src.strings.ffsl
-    libc.src.strings.ffsll
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib.a64l
-    libc.src.stdlib.abs
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.div
-    libc.src.stdlib.l64a
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.srand
-    libc.src.stdlib.strfromd
-    libc.src.stdlib.strfromf
-    libc.src.stdlib.strfroml
-    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.aligned_alloc
-    libc.src.stdlib.calloc
-    libc.src.stdlib.free
-    libc.src.stdlib.malloc
-    libc.src.stdlib.realloc
-
-    # stdio.h entrypoints
-    libc.src.stdio.fprintf
-    libc.src.stdio.fscanf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.printf
-    libc.src.stdio.remove
-    libc.src.stdio.rename
-    libc.src.stdio.scanf
-    libc.src.stdio.vscanf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.asprintf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vsscanf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.vprintf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.vasprintf
-
-    # sys/epoll.h entrypoints
-    libc.src.sys.epoll.epoll_create
-    libc.src.sys.epoll.epoll_create1
-    libc.src.sys.epoll.epoll_ctl
-    libc.src.sys.epoll.epoll_pwait
-    libc.src.sys.epoll.epoll_wait
-    # TODO: Need to check if pwait2 is available before providing.
-    # https://github.com/llvm/llvm-project/issues/80060
-    # libc.src.sys.epoll.epoll_pwait2
-
-    # sys/ioctl.h entrypoints
-    libc.src.sys.ioctl.ioctl
-
-    # sys/mman.h entrypoints
-    libc.src.sys.mman.madvise
-    libc.src.sys.mman.mincore
-    libc.src.sys.mman.mlock
-    libc.src.sys.mman.mlock2
-    libc.src.sys.mman.mlockall
-    libc.src.sys.mman.mmap
-    libc.src.sys.mman.mremap
-    libc.src.sys.mman.mprotect
-    libc.src.sys.mman.msync
-    libc.src.sys.mman.munlock
-    libc.src.sys.mman.munlockall
-    libc.src.sys.mman.munmap
-    libc.src.sys.mman.remap_file_pages
-    libc.src.sys.mman.posix_madvise
-    libc.src.sys.mman.shm_open
-    libc.src.sys.mman.shm_unlink
-
-    # sys/random.h entrypoints
-    libc.src.sys.random.getrandom
-
-    # sys/resource.h entrypoints
-    libc.src.sys.resource.getrlimit
-    libc.src.sys.resource.setrlimit
-
-    # sys/sendfile entrypoints
-    libc.src.sys.sendfile.sendfile
-
-    # sys/stat.h entrypoints
-    libc.src.sys.stat.chmod
-    libc.src.sys.stat.fchmod
-    libc.src.sys.stat.fchmodat
-    libc.src.sys.stat.fstat
-    libc.src.sys.stat.lstat
-    libc.src.sys.stat.mkdir
-    libc.src.sys.stat.mkdirat
-    libc.src.sys.stat.stat
-
-    # sys/statvfs.h
-    libc.src.sys.statvfs.fstatvfs
-    libc.src.sys.statvfs.statvfs
-
-    # sys/utimes.h entrypoints
-    libc.src.sys.time.utimes
-
-    # sys/utsname.h entrypoints
-    libc.src.sys.utsname.uname
-
-    # sys/wait.h entrypoints
-    libc.src.sys.wait.wait
-    libc.src.sys.wait.wait4
-    libc.src.sys.wait.waitpid
-
-    # sys/prctl.h entrypoints
-    libc.src.sys.prctl.prctl
-
-    # sys/auxv.h entrypoints
-    libc.src.sys.auxv.getauxval
-
-    # termios.h entrypoints
-    libc.src.termios.cfgetispeed
-    libc.src.termios.cfgetospeed
-    libc.src.termios.cfsetispeed
-    libc.src.termios.cfsetospeed
-    libc.src.termios.tcdrain
-    libc.src.termios.tcflow
-    libc.src.termios.tcflush
-    libc.src.termios.tcgetattr
-    libc.src.termios.tcgetsid
-    libc.src.termios.tcsendbreak
-    libc.src.termios.tcsetattr
-
-    # unistd.h entrypoints
-    libc.src.unistd.access
-    libc.src.unistd.chdir
-    libc.src.unistd.close
-    libc.src.unistd.dup
-    libc.src.unistd.dup2
-    libc.src.unistd.dup3
-    libc.src.unistd.execve
-    libc.src.unistd.faccessat
-    libc.src.unistd.fchdir
-    libc.src.unistd.fpathconf
-    libc.src.unistd.fsync
-    libc.src.unistd.ftruncate
-    libc.src.unistd.getcwd
-    libc.src.unistd.getentropy
-    libc.src.unistd.geteuid
-    libc.src.unistd.gethostname
-    libc.src.unistd.getpagesize
-    libc.src.unistd.getpid
-    libc.src.unistd.getppid
-    libc.src.unistd.getsid
-    libc.src.unistd.gettid
-    libc.src.unistd.getuid
-    libc.src.unistd.isatty
-    libc.src.unistd.link
-    libc.src.unistd.linkat
-    libc.src.unistd.lseek
-    libc.src.unistd.pathconf
-    libc.src.unistd.pipe
-    libc.src.unistd.pipe2
-    libc.src.unistd.pread
-    libc.src.unistd.pwrite
-    libc.src.unistd.read
-    libc.src.unistd.readlink
-    libc.src.unistd.readlinkat
-    libc.src.unistd.rmdir
-    libc.src.unistd.setsid
-    libc.src.unistd.symlink
-    libc.src.unistd.symlinkat
-    libc.src.unistd.sysconf
-    libc.src.unistd.truncate
-    libc.src.unistd.unlink
-    libc.src.unistd.unlinkat
-    libc.src.unistd.write
-
-    # wchar.h entrypoints
-    libc.src.wchar.btowc
-    libc.src.wchar.wcslen
-    libc.src.wchar.wctob
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-
-    # sys/uio.h entrypoints
-    libc.src.sys.uio.writev
-    libc.src.sys.uio.readv
-
-    # sys/time.h entrypoints
-    libc.src.sys.time.setitimer
-    libc.src.sys.time.getitimer
-)
-
-if(LLVM_LIBC_INCLUDE_SCUDO)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # malloc.h external entrypoints
-    libc.src.stdlib.mallopt
-  )
-endif()
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp10m1f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 1ae4f0f31cbb0..d7c89adcde371 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -251,9 +251,6 @@ set(TARGET_LIBC_ENTRYPOINTS
     # sys/ioctl.h entrypoints
     libc.src.sys.ioctl.ioctl
 
-    # sys/ipc.h entrypoints
-    libc.src.sys.ipc.ftok
-
     # sys/mman.h entrypoints
     libc.src.sys.mman.madvise
     libc.src.sys.mman.mincore
@@ -418,7 +415,6 @@ set(TARGET_LIBC_ENTRYPOINTS
 
     # wctype.h entrypoints
     libc.src.wctype.iswalpha
-    libc.src.wctype.iswdigit
 
     # sys/uio.h entrypoints
     libc.src.sys.uio.writev
@@ -532,6 +528,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.floorf
     libc.src.math.floorl
     libc.src.math.fma
+    libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmax
     libc.src.math.fmaxf
@@ -1416,1406 +1413,3 @@ set(TARGET_LLVMLIBC_ENTRYPOINTS
   ${TARGET_LIBM_ENTRYPOINTS}
   ${TARGET_LIBMVEC_ENTRYPOINTS}
 )
-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
-
-    # dlfcn.h entrypoints
-    libc.src.dlfcn.dladdr
-    libc.src.dlfcn.dlclose
-    libc.src.dlfcn.dlerror
-    libc.src.dlfcn.dlopen
-    libc.src.dlfcn.dlsym
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # fcntl.h entrypoints
-    libc.src.fcntl.creat
-    libc.src.fcntl.fcntl
-    libc.src.fcntl.open
-    libc.src.fcntl.openat
-
-    # poll.h entrypoints
-    libc.src.poll.poll
-
-    # sched.h entrypoints
-    libc.src.sched.getcpu
-    libc.src.sched.sched_get_priority_max
-    libc.src.sched.sched_get_priority_min
-    libc.src.sched.sched_getaffinity
-    libc.src.sched.sched_getparam
-    libc.src.sched.sched_getscheduler
-    libc.src.sched.sched_rr_get_interval
-    libc.src.sched.sched_setaffinity
-    libc.src.sched.sched_setparam
-    libc.src.sched.sched_setscheduler
-    libc.src.sched.sched_yield
-
-    # string.h entrypoints
-    libc.src.string.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    libc.src.string.memmove
-    libc.src.string.mempcpy
-    libc.src.string.memrchr
-    libc.src.string.memset
-    libc.src.string.memset_explicit
-    libc.src.string.stpcpy
-    libc.src.string.stpncpy
-    libc.src.string.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    libc.src.string.strcmp
-    libc.src.string.strcoll
-    libc.src.string.strcpy
-    libc.src.string.strcspn
-    libc.src.string.strdup
-    libc.src.string.strerror
-    libc.src.string.strerror_r
-    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.strndup
-    libc.src.string.strnlen
-    libc.src.string.strpbrk
-    libc.src.string.strrchr
-    libc.src.string.strsep
-    libc.src.string.strsignal
-    libc.src.string.strspn
-    libc.src.string.strstr
-    libc.src.string.strtok
-    libc.src.string.strtok_r
-    libc.src.string.strxfrm
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.ffs
-    libc.src.strings.ffsl
-    libc.src.strings.ffsll
-    libc.src.strings.index
-    libc.src.strings.rindex
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # inttypes.h entrypoints
-    libc.src.inttypes.imaxabs
-    libc.src.inttypes.imaxdiv
-    libc.src.inttypes.strtoimax
-    libc.src.inttypes.strtoumax
-
-    # stdbit.h entrypoints
-    libc.src.stdbit.stdc_bit_ceil_uc
-    libc.src.stdbit.stdc_bit_ceil_ui
-    libc.src.stdbit.stdc_bit_ceil_ul
-    libc.src.stdbit.stdc_bit_ceil_ull
-    libc.src.stdbit.stdc_bit_ceil_us
-    libc.src.stdbit.stdc_bit_floor_uc
-    libc.src.stdbit.stdc_bit_floor_ui
-    libc.src.stdbit.stdc_bit_floor_ul
-    libc.src.stdbit.stdc_bit_floor_ull
-    libc.src.stdbit.stdc_bit_floor_us
-    libc.src.stdbit.stdc_bit_width_uc
-    libc.src.stdbit.stdc_bit_width_ui
-    libc.src.stdbit.stdc_bit_width_ul
-    libc.src.stdbit.stdc_bit_width_ull
-    libc.src.stdbit.stdc_bit_width_us
-    libc.src.stdbit.stdc_count_ones_uc
-    libc.src.stdbit.stdc_count_ones_ui
-    libc.src.stdbit.stdc_count_ones_ul
-    libc.src.stdbit.stdc_count_ones_ull
-    libc.src.stdbit.stdc_count_ones_us
-    libc.src.stdbit.stdc_count_zeros_uc
-    libc.src.stdbit.stdc_count_zeros_ui
-    libc.src.stdbit.stdc_count_zeros_ul
-    libc.src.stdbit.stdc_count_zeros_ull
-    libc.src.stdbit.stdc_count_zeros_us
-    libc.src.stdbit.stdc_first_leading_one_uc
-    libc.src.stdbit.stdc_first_leading_one_ui
-    libc.src.stdbit.stdc_first_leading_one_ul
-    libc.src.stdbit.stdc_first_leading_one_ull
-    libc.src.stdbit.stdc_first_leading_one_us
-    libc.src.stdbit.stdc_first_leading_zero_uc
-    libc.src.stdbit.stdc_first_leading_zero_ui
-    libc.src.stdbit.stdc_first_leading_zero_ul
-    libc.src.stdbit.stdc_first_leading_zero_ull
-    libc.src.stdbit.stdc_first_leading_zero_us
-    libc.src.stdbit.stdc_first_trailing_one_uc
-    libc.src.stdbit.stdc_first_trailing_one_ui
-    libc.src.stdbit.stdc_first_trailing_one_ul
-    libc.src.stdbit.stdc_first_trailing_one_ull
-    libc.src.stdbit.stdc_first_trailing_one_us
-    libc.src.stdbit.stdc_first_trailing_zero_uc
-    libc.src.stdbit.stdc_first_trailing_zero_ui
-    libc.src.stdbit.stdc_first_trailing_zero_ul
-    libc.src.stdbit.stdc_first_trailing_zero_ull
-    libc.src.stdbit.stdc_first_trailing_zero_us
-    libc.src.stdbit.stdc_has_single_bit_uc
-    libc.src.stdbit.stdc_has_single_bit_ui
-    libc.src.stdbit.stdc_has_single_bit_ul
-    libc.src.stdbit.stdc_has_single_bit_ull
-    libc.src.stdbit.stdc_has_single_bit_us
-    libc.src.stdbit.stdc_leading_ones_uc
-    libc.src.stdbit.stdc_leading_ones_ui
-    libc.src.stdbit.stdc_leading_ones_ul
-    libc.src.stdbit.stdc_leading_ones_ull
-    libc.src.stdbit.stdc_leading_ones_us
-    libc.src.stdbit.stdc_leading_zeros_uc
-    libc.src.stdbit.stdc_leading_zeros_ui
-    libc.src.stdbit.stdc_leading_zeros_ul
-    libc.src.stdbit.stdc_leading_zeros_ull
-    libc.src.stdbit.stdc_leading_zeros_us
-    libc.src.stdbit.stdc_trailing_ones_uc
-    libc.src.stdbit.stdc_trailing_ones_ui
-    libc.src.stdbit.stdc_trailing_ones_ul
-    libc.src.stdbit.stdc_trailing_ones_ull
-    libc.src.stdbit.stdc_trailing_ones_us
-    libc.src.stdbit.stdc_trailing_zeros_uc
-    libc.src.stdbit.stdc_trailing_zeros_ui
-    libc.src.stdbit.stdc_trailing_zeros_ul
-    libc.src.stdbit.stdc_trailing_zeros_ull
-    libc.src.stdbit.stdc_trailing_zeros_us
-
-    # stdlib.h entrypoints
-    libc.src.stdlib.a64l
-    libc.src.stdlib.abs
-    libc.src.stdlib.atof
-    libc.src.stdlib.atoi
-    libc.src.stdlib.atol
-    libc.src.stdlib.atoll
-    libc.src.stdlib.bsearch
-    libc.src.stdlib.div
-    libc.src.stdlib.l64a
-    libc.src.stdlib.labs
-    libc.src.stdlib.ldiv
-    libc.src.stdlib.llabs
-    libc.src.stdlib.lldiv
-    libc.src.stdlib.memalignment
-    libc.src.stdlib.qsort
-    libc.src.stdlib.qsort_r
-    libc.src.stdlib.rand
-    libc.src.stdlib.srand
-    libc.src.stdlib.strfromd
-    libc.src.stdlib.strfromf
-    libc.src.stdlib.strfroml
-    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.aligned_alloc
-    libc.src.stdlib.calloc
-    libc.src.stdlib.free
-    libc.src.stdlib.malloc
-    libc.src.stdlib.realloc
-
-    # stdio.h entrypoints
-    libc.src.stdio.fprintf
-    libc.src.stdio.fscanf
-    libc.src.stdio.vfscanf
-    libc.src.stdio.printf
-    libc.src.stdio.remove
-    libc.src.stdio.rename
-    libc.src.stdio.scanf
-    libc.src.stdio.vscanf
-    libc.src.stdio.snprintf
-    libc.src.stdio.sprintf
-    libc.src.stdio.asprintf
-    libc.src.stdio.sscanf
-    libc.src.stdio.vsscanf
-    libc.src.stdio.vfprintf
-    libc.src.stdio.vprintf
-    libc.src.stdio.vsnprintf
-    libc.src.stdio.vsprintf
-    libc.src.stdio.vasprintf
-
-    # sys/epoll.h entrypoints
-    libc.src.sys.epoll.epoll_create
-    libc.src.sys.epoll.epoll_create1
-    libc.src.sys.epoll.epoll_ctl
-    libc.src.sys.epoll.epoll_pwait
-    libc.src.sys.epoll.epoll_wait
-    # TODO: Need to check if pwait2 is available before providing.
-    # https://github.com/llvm/llvm-project/issues/80060
-    # libc.src.sys.epoll.epoll_pwait2
-
-    # sys/ioctl.h entrypoints
-    libc.src.sys.ioctl.ioctl
-
-    # sys/mman.h entrypoints
-    libc.src.sys.mman.madvise
-    libc.src.sys.mman.mincore
-    libc.src.sys.mman.mlock
-    libc.src.sys.mman.mlock2
-    libc.src.sys.mman.mlockall
-    libc.src.sys.mman.mmap
-    libc.src.sys.mman.mremap
-    libc.src.sys.mman.mprotect
-    libc.src.sys.mman.msync
-    libc.src.sys.mman.munlock
-    libc.src.sys.mman.munlockall
-    libc.src.sys.mman.munmap
-    libc.src.sys.mman.pkey_alloc
-    libc.src.sys.mman.pkey_free
-    libc.src.sys.mman.pkey_get
-    libc.src.sys.mman.pkey_mprotect
-    libc.src.sys.mman.pkey_set
-    libc.src.sys.mman.remap_file_pages
-    libc.src.sys.mman.posix_madvise
-    libc.src.sys.mman.shm_open
-    libc.src.sys.mman.shm_unlink
-
-    # sys/random.h entrypoints
-    libc.src.sys.random.getrandom
-
-    # sys/resource.h entrypoints
-    libc.src.sys.resource.getrlimit
-    libc.src.sys.resource.setrlimit
-
-    # sys/sendfile entrypoints
-    libc.src.sys.sendfile.sendfile
-
-    # sys/stat.h entrypoints
-    libc.src.sys.stat.chmod
-    libc.src.sys.stat.fchmod
-    libc.src.sys.stat.fchmodat
-    libc.src.sys.stat.fstat
-    libc.src.sys.stat.lstat
-    libc.src.sys.stat.mkdir
-    libc.src.sys.stat.mkdirat
-    libc.src.sys.stat.stat
-
-    # sys/statvfs.h
-    libc.src.sys.statvfs.fstatvfs
-    libc.src.sys.statvfs.statvfs
-
-    # sys/utimes.h entrypoints
-    libc.src.sys.time.utimes
-
-    # sys/utsname.h entrypoints
-    libc.src.sys.utsname.uname
-
-    # sys/wait.h entrypoints
-    libc.src.sys.wait.wait
-    libc.src.sys.wait.wait4
-    libc.src.sys.wait.waitpid
-
-    # sys/prctl.h entrypoints
-    libc.src.sys.prctl.prctl
-
-    # sys/auxv.h entrypoints
-    libc.src.sys.auxv.getauxval
-
-    # termios.h entrypoints
-    libc.src.termios.cfgetispeed
-    libc.src.termios.cfgetospeed
-    libc.src.termios.cfsetispeed
-    libc.src.termios.cfsetospeed
-    libc.src.termios.tcdrain
-    libc.src.termios.tcflow
-    libc.src.termios.tcflush
-    libc.src.termios.tcgetattr
-    libc.src.termios.tcgetsid
-    libc.src.termios.tcsendbreak
-    libc.src.termios.tcsetattr
-
-    # unistd.h entrypoints
-    libc.src.unistd.access
-    libc.src.unistd.chdir
-    libc.src.unistd.chown
-    libc.src.unistd.close
-    libc.src.unistd.dup
-    libc.src.unistd.dup2
-    libc.src.unistd.dup3
-    libc.src.unistd.execve
-    libc.src.unistd.faccessat
-    libc.src.unistd.fchdir
-    libc.src.unistd.fchown
-    libc.src.unistd.fpathconf
-    libc.src.unistd.fsync
-    libc.src.unistd.ftruncate
-    libc.src.unistd.getcwd
-    libc.src.unistd.getentropy
-    libc.src.unistd.geteuid
-    libc.src.unistd.gethostname
-    libc.src.unistd.getpagesize
-    libc.src.unistd.getpid
-    libc.src.unistd.getppid
-    libc.src.unistd.getsid
-    libc.src.unistd.gettid
-    libc.src.unistd.getgid
-    libc.src.unistd.getuid
-    libc.src.unistd.isatty
-    libc.src.unistd.link
-    libc.src.unistd.linkat
-    libc.src.unistd.lseek
-    libc.src.unistd.pathconf
-    libc.src.unistd.pipe
-    libc.src.unistd.pipe2
-    libc.src.unistd.pread
-    libc.src.unistd.pwrite
-    libc.src.unistd.read
-    libc.src.unistd.readlink
-    libc.src.unistd.readlinkat
-    libc.src.unistd.rmdir
-    libc.src.unistd.setsid
-    libc.src.unistd.symlink
-    libc.src.unistd.symlinkat
-    libc.src.unistd.sysconf
-    libc.src.unistd.truncate
-    libc.src.unistd.unlink
-    libc.src.unistd.unlinkat
-    libc.src.unistd.write
-
-    # wchar.h entrypoints
-    libc.src.wchar.btowc
-    libc.src.wchar.wcslen
-    libc.src.wchar.wcsnlen
-    libc.src.wchar.wctob
-    libc.src.wchar.wmemmove
-    libc.src.wchar.wmemset
-    libc.src.wchar.wcschr
-    libc.src.wchar.wcsncmp
-    libc.src.wchar.wcscmp
-    libc.src.wchar.wcspbrk
-    libc.src.wchar.wcsrchr
-    libc.src.wchar.wcsspn
-    libc.src.wchar.wcscspn
-    libc.src.wchar.wcsdup
-    libc.src.wchar.wmemcmp
-    libc.src.wchar.wmempcpy
-    libc.src.wchar.wmemcpy
-    libc.src.wchar.wcsncpy
-    libc.src.wchar.wcscat
-    libc.src.wchar.wcsstr
-    libc.src.wchar.wcsncat
-    libc.src.wchar.wcslcat
-    libc.src.wchar.wcscpy
-    libc.src.wchar.wcslcpy
-    libc.src.wchar.wmemchr
-    libc.src.wchar.wcpcpy
-    libc.src.wchar.wcpncpy
-    libc.src.wchar.wcstod
-    libc.src.wchar.wcstof
-    libc.src.wchar.wcstok
-    libc.src.wchar.wcstol
-    libc.src.wchar.wcstold
-    libc.src.wchar.wcstoll
-    libc.src.wchar.wcstoul
-    libc.src.wchar.wcstoull
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-
-    # sys/uio.h entrypoints
-    libc.src.sys.uio.writev
-    libc.src.sys.uio.readv
-
-    # sys/time.h entrypoints
-    libc.src.sys.time.setitimer
-    libc.src.sys.time.getitimer
-)
-
-if(LLVM_LIBC_INCLUDE_SCUDO)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # malloc.h external entrypoints
-    libc.src.stdlib.mallopt
-  )
-endif()
-
-set(TARGET_LIBM_ENTRYPOINTS
-    # complex.h entrypoints
-    libc.src.complex.creal
-    libc.src.complex.crealf
-    libc.src.complex.creall
-    libc.src.complex.cimag
-    libc.src.complex.cimagf
-    libc.src.complex.cimagl
-    libc.src.complex.conj
-    libc.src.complex.conjf
-    libc.src.complex.conjl
-    libc.src.complex.cproj
-    libc.src.complex.cprojf
-    libc.src.complex.cprojl
-
-    # 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.feraiseexcept
-    libc.src.fenv.fesetenv
-    libc.src.fenv.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.canonicalize
-    libc.src.math.canonicalizef
-    libc.src.math.canonicalizel
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    libc.src.math.ceil
-    libc.src.math.ceilf
-    libc.src.math.ceill
-    libc.src.math.copysign
-    libc.src.math.copysignf
-    libc.src.math.copysignl
-    libc.src.math.cos
-    libc.src.math.cosf
-    libc.src.math.coshf
-    libc.src.math.cospif
-    libc.src.math.dfmal
-    libc.src.math.dmull
-    libc.src.math.dsqrtl
-    libc.src.math.daddl
-    libc.src.math.ddivl
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp10m1f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.exp2m1f
-    libc.src.math.expf
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fadd
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
-    libc.src.math.fmabf16
-    libc.src.math.fmaf
-    libc.src.math.fmax
-    libc.src.math.fmaxf
-    libc.src.math.fmaximum
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaxl
-    libc.src.math.fmin
-    libc.src.math.fminf
-    libc.src.math.fminimum
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminl
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.fmul
-    libc.src.math.fmull
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fromfp
-    libc.src.math.fromfpf
-    libc.src.math.fromfpl
-    libc.src.math.fromfpx
-    libc.src.math.fromfpxf
-    libc.src.math.fromfpxl
-    libc.src.math.fsqrt
-    libc.src.math.fsqrtl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    libc.src.math.getpayload
-    libc.src.math.getpayloadf
-    libc.src.math.getpayloadl
-    libc.src.math.hypot
-    libc.src.math.hypotf
-    libc.src.math.ilogb
-    libc.src.math.ilogbf
-    libc.src.math.ilogbl
-    libc.src.math.iscanonical
-    libc.src.math.iscanonicalf
-    libc.src.math.iscanonicall
-    libc.src.math.isnan
-    libc.src.math.isnanf
-    libc.src.math.isnanl
-    libc.src.math.issignaling
-    libc.src.math.issignalingf
-    libc.src.math.issignalingl
-    libc.src.math.ldexp
-    libc.src.math.ldexpf
-    libc.src.math.ldexpl
-    libc.src.math.llogb
-    libc.src.math.llogbf
-    libc.src.math.llogbl
-    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.log
-    libc.src.math.log10
-    libc.src.math.log10f
-    libc.src.math.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.logb
-    libc.src.math.logbf
-    libc.src.math.logbl
-    libc.src.math.logf
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nextdown
-    libc.src.math.nextdownf
-    libc.src.math.nextdownl
-    libc.src.math.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.nextup
-    libc.src.math.nextupf
-    libc.src.math.nextupl
-    libc.src.math.pow
-    libc.src.math.powf
-    libc.src.math.remainder
-    libc.src.math.remainderf
-    libc.src.math.remainderl
-    libc.src.math.remquo
-    libc.src.math.remquof
-    libc.src.math.remquol
-    libc.src.math.rint
-    libc.src.math.rintf
-    libc.src.math.rintl
-    libc.src.math.round
-    libc.src.math.roundeven
-    libc.src.math.roundevenf
-    libc.src.math.roundevenl
-    libc.src.math.roundf
-    libc.src.math.roundl
-    libc.src.math.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.setpayload
-    libc.src.math.setpayloadf
-    libc.src.math.setpayloadl
-    libc.src.math.setpayloadsig
-    libc.src.math.setpayloadsigf
-    libc.src.math.setpayloadsigl
-    libc.src.math.sin
-    libc.src.math.sincos
-    libc.src.math.sincosf
-    libc.src.math.sinf
-    libc.src.math.sinhf
-    libc.src.math.sinpif
-    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.tanpif
-    libc.src.math.totalorder
-    libc.src.math.totalorderf
-    libc.src.math.totalorderl
-    libc.src.math.totalordermag
-    libc.src.math.totalordermagf
-    libc.src.math.totalordermagl
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-    libc.src.math.ufromfp
-    libc.src.math.ufromfpf
-    libc.src.math.ufromfpl
-    libc.src.math.ufromfpx
-    libc.src.math.ufromfpxf
-    libc.src.math.ufromfpxl
-)
-
-if(LIBC_TYPES_HAS_CFLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float16 entrypoints
-    libc.src.complex.crealf16
-    libc.src.complex.cimagf16
-    libc.src.complex.conjf16
-    libc.src.complex.cprojf16
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT16)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float16 entrypoints
-    libc.src.math.acosf16
-    libc.src.math.acoshf16
-    libc.src.math.acospif16
-    libc.src.math.asinf16
-    libc.src.math.asinhf16
-    libc.src.math.asinpif16
-    libc.src.math.atanf16
-    libc.src.math.atanhf16
-    libc.src.math.atanpif16
-    libc.src.math.canonicalizef16
-    libc.src.math.ceilf16
-    libc.src.math.copysignf16
-    libc.src.math.cosf16
-    libc.src.math.coshf16
-    libc.src.math.cospif16
-    libc.src.math.exp10f16
-    libc.src.math.exp10m1f16
-    libc.src.math.exp2f16
-    libc.src.math.exp2m1f16
-    libc.src.math.expf16
-    libc.src.math.expm1f16
-    libc.src.math.f16add
-    libc.src.math.f16addf
-    libc.src.math.f16addl
-    libc.src.math.f16div
-    libc.src.math.f16divf
-    libc.src.math.f16divl
-    libc.src.math.f16fma
-    libc.src.math.f16fmaf
-    libc.src.math.f16fmal
-    libc.src.math.f16mul
-    libc.src.math.f16mulf
-    libc.src.math.f16mull
-    libc.src.math.f16sqrt
-    libc.src.math.f16sqrtf
-    libc.src.math.f16sqrtl
-    libc.src.math.f16sub
-    libc.src.math.f16subf
-    libc.src.math.f16subl
-    libc.src.math.fabsf16
-    libc.src.math.fdimf16
-    libc.src.math.floorf16
-    libc.src.math.fmaf16
-    libc.src.math.fmaxf16
-    libc.src.math.fmaximum_mag_numf16
-    libc.src.math.fmaximum_magf16
-    libc.src.math.fmaximum_numf16
-    libc.src.math.fmaximumf16
-    libc.src.math.fminf16
-    libc.src.math.fminimum_mag_numf16
-    libc.src.math.fminimum_magf16
-    libc.src.math.fminimum_numf16
-    libc.src.math.fminimumf16
-    libc.src.math.fmodf16
-    libc.src.math.frexpf16
-    libc.src.math.fromfpf16
-    libc.src.math.fromfpxf16
-    libc.src.math.getpayloadf16
-    libc.src.math.hypotf16
-    libc.src.math.ilogbf16
-    libc.src.math.iscanonicalf16
-    libc.src.math.issignalingf16
-    libc.src.math.ldexpf16
-    libc.src.math.llogbf16
-    libc.src.math.llrintf16
-    libc.src.math.llroundf16
-    libc.src.math.log10f16
-    libc.src.math.log2f16
-    libc.src.math.logbf16
-    libc.src.math.logf16
-    libc.src.math.lrintf16
-    libc.src.math.lroundf16
-    libc.src.math.modff16
-    libc.src.math.nanf16
-    libc.src.math.nearbyintf16
-    libc.src.math.nextafterf16
-    libc.src.math.nextdownf16
-    libc.src.math.nexttowardf16
-    libc.src.math.nextupf16
-    libc.src.math.remainderf16
-    libc.src.math.remquof16
-    libc.src.math.rintf16
-    libc.src.math.roundevenf16
-    libc.src.math.roundf16
-    libc.src.math.rsqrtf
-    libc.src.math.rsqrtf16
-    libc.src.math.scalblnf16
-    libc.src.math.scalbnf16
-    libc.src.math.setpayloadf16
-    libc.src.math.setpayloadsigf16
-    libc.src.math.sinf16
-    libc.src.math.sinhf16
-    libc.src.math.sinpif16
-    libc.src.math.sqrtf16
-    libc.src.math.tanf16
-    libc.src.math.tanhf16
-    libc.src.math.tanpif16
-    libc.src.math.totalorderf16
-    libc.src.math.totalordermagf16
-    libc.src.math.truncf16
-    libc.src.math.ufromfpf16
-    libc.src.math.ufromfpxf16
-  )
-
-  if(LIBC_TYPES_HAS_FLOAT128)
-    list(APPEND TARGET_LIBM_ENTRYPOINTS
-      # math.h C23 mixed _Float16 and _Float128 entrypoints
-      libc.src.math.f16addf128
-      libc.src.math.f16divf128
-      libc.src.math.f16fmaf128
-      libc.src.math.f16mulf128
-      libc.src.math.f16sqrtf128
-      libc.src.math.f16subf128
-    )
-  endif()
-endif()
-
-if(LIBC_TYPES_HAS_CFLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # complex.h C23 _Complex _Float128 entrypoints
-    libc.src.complex.crealf128
-    libc.src.complex.cimagf128
-    libc.src.complex.conjf128
-    libc.src.complex.cprojf128
-  )
-endif()
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C23 _Float128 entrypoints
-    libc.src.math.atan2f128
-    libc.src.math.canonicalizef128
-    libc.src.math.ceilf128
-    libc.src.math.copysignf128
-    libc.src.math.daddf128
-    libc.src.math.ddivf128
-    libc.src.math.dfmaf128
-    libc.src.math.dmulf128
-    libc.src.math.dsqrtf128
-    libc.src.math.dsubf128
-    libc.src.math.fabsf128
-    libc.src.math.faddf128
-    libc.src.math.fdimf128
-    libc.src.math.fdivf128
-    libc.src.math.ffmaf128
-    libc.src.math.floorf128
-    libc.src.math.fmaxf128
-    libc.src.math.fmaximum_mag_numf128
-    libc.src.math.fmaximum_magf128
-    libc.src.math.fmaximum_numf128
-    libc.src.math.fmaximumf128
-    libc.src.math.fminf128
-    libc.src.math.fminimum_mag_numf128
-    libc.src.math.fminimum_magf128
-    libc.src.math.fminimum_numf128
-    libc.src.math.fminimumf128
-    libc.src.math.fmodf128
-    libc.src.math.fmulf128
-    libc.src.math.frexpf128
-    libc.src.math.fromfpf128
-    libc.src.math.fromfpxf128
-    libc.src.math.fsqrtf128
-    libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
-    libc.src.math.ilogbf128
-    libc.src.math.iscanonicalf128
-    libc.src.math.issignalingf128
-    libc.src.math.ldexpf128
-    libc.src.math.llogbf128
-    libc.src.math.llrintf128
-    libc.src.math.llroundf128
-    libc.src.math.logbf128
-    libc.src.math.lrintf128
-    libc.src.math.lroundf128
-    libc.src.math.modff128
-    libc.src.math.nanf128
-    libc.src.math.nearbyintf128
-    libc.src.math.nextafterf128
-    libc.src.math.nextdownf128
-    libc.src.math.nextupf128
-    libc.src.math.remainderf128
-    libc.src.math.remquof128
-    libc.src.math.rintf128
-    libc.src.math.roundevenf128
-    libc.src.math.roundf128
-    libc.src.math.scalblnf128
-    libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
-    libc.src.math.sqrtf128
-    libc.src.math.totalorderf128
-    libc.src.math.totalordermagf128
-    libc.src.math.truncf128
-    libc.src.math.ufromfpf128
-    libc.src.math.ufromfpxf128
-  )
-endif()
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-if(LIBC_TYPES_HAS_FLOAT128)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # math.h C++23 mixed bfloat16 and _Float128 entrypoints
-    libc.src.math.bf16addf128
-    libc.src.math.bf16divf128
-    libc.src.math.bf16fmaf128
-    libc.src.math.bf16mulf128
-    libc.src.math.bf16subf128
-  )
-endif()
-
-if(LIBC_COMPILER_HAS_FIXED_POINT)
-  list(APPEND TARGET_LIBM_ENTRYPOINTS
-    # stdfix.h _Fract and _Accum entrypoints
-    libc.src.stdfix.abshk
-    libc.src.stdfix.abshr
-    libc.src.stdfix.absk
-    libc.src.stdfix.abslk
-    libc.src.stdfix.abslr
-    libc.src.stdfix.absr
-    libc.src.stdfix.exphk
-    libc.src.stdfix.expk
-    libc.src.stdfix.roundhk
-    libc.src.stdfix.roundhr
-    libc.src.stdfix.roundk
-    libc.src.stdfix.roundlk
-    libc.src.stdfix.roundlr
-    libc.src.stdfix.roundr
-    libc.src.stdfix.rounduhk
-    libc.src.stdfix.rounduhr
-    libc.src.stdfix.rounduk
-    libc.src.stdfix.roundulk
-    libc.src.stdfix.roundulr
-    libc.src.stdfix.roundur
-    libc.src.stdfix.sqrtuhk
-    libc.src.stdfix.sqrtuhr
-    libc.src.stdfix.sqrtuk
-    libc.src.stdfix.sqrtur
-    # libc.src.stdfix.sqrtulk
-    libc.src.stdfix.sqrtulr
-    libc.src.stdfix.uhksqrtus
-    libc.src.stdfix.uksqrtui
-    libc.src.stdfix.hrbits
-    libc.src.stdfix.uhrbits
-    libc.src.stdfix.rbits
-    libc.src.stdfix.urbits
-    libc.src.stdfix.lrbits
-    libc.src.stdfix.ulrbits
-    libc.src.stdfix.hkbits
-    libc.src.stdfix.uhkbits
-    libc.src.stdfix.kbits
-    libc.src.stdfix.ukbits
-    libc.src.stdfix.lkbits
-    libc.src.stdfix.ulkbits
-    libc.src.stdfix.bitshr
-    libc.src.stdfix.bitsr
-    libc.src.stdfix.bitslr
-    libc.src.stdfix.bitshk
-    libc.src.stdfix.bitsk
-    libc.src.stdfix.bitslk
-    libc.src.stdfix.bitsuhr
-    libc.src.stdfix.bitsur
-    libc.src.stdfix.bitsulr
-    libc.src.stdfix.bitsuhk
-    libc.src.stdfix.bitsuk
-    libc.src.stdfix.bitsulk
-    libc.src.stdfix.countlshr
-    libc.src.stdfix.countlsr
-    libc.src.stdfix.countlslr
-    libc.src.stdfix.countlshk
-    libc.src.stdfix.countlsk
-    libc.src.stdfix.countlslk
-    libc.src.stdfix.countlsuhr
-    libc.src.stdfix.countlsur
-    libc.src.stdfix.countlsulr
-    libc.src.stdfix.countlsuhk
-    libc.src.stdfix.countlsuk
-    libc.src.stdfix.countlsulk
-    libc.src.stdfix.idivr
-    libc.src.stdfix.idivlr
-    libc.src.stdfix.idivk
-    libc.src.stdfix.idivlk
-    libc.src.stdfix.idivur
-    libc.src.stdfix.idivulr
-    libc.src.stdfix.idivuk
-    libc.src.stdfix.idivulk
-    libc.src.stdfix.rdivi
-  )
-endif()
-
-if(LLVM_LIBC_FULL_BUILD)
-  list(APPEND TARGET_LIBC_ENTRYPOINTS
-    # ctype.h entrypoints
-    libc.src.ctype.isalnum_l
-    libc.src.ctype.isalpha_l
-    libc.src.ctype.isblank_l
-    libc.src.ctype.iscntrl_l
-    libc.src.ctype.isdigit_l
-    libc.src.ctype.isgraph_l
-    libc.src.ctype.islower_l
-    libc.src.ctype.isprint_l
-    libc.src.ctype.ispunct_l
-    libc.src.ctype.isspace_l
-    libc.src.ctype.isupper_l
-    libc.src.ctype.isxdigit_l
-    libc.src.ctype.tolower_l
-    libc.src.ctype.toupper_l
-
-    # stdlib.h entrypoints
-    libc.src.stdlib.strtod_l
-    libc.src.stdlib.strtof_l
-    libc.src.stdlib.strtol_l
-    libc.src.stdlib.strtold_l
-    libc.src.stdlib.strtoll_l
-    libc.src.stdlib.strtoul_l
-    libc.src.stdlib.strtoull_l
-
-    # string.h entrypoints
-    libc.src.string.strcoll_l
-    libc.src.string.strxfrm_l
-
-    # strings.h entrypoints
-    libc.src.strings.strcasecmp_l
-    libc.src.strings.strncasecmp_l
-
-    # assert.h entrypoints
-    libc.src.assert.__assert_fail
-
-    # compiler entrypoints (no corresponding header)
-    libc.src.compiler.__stack_chk_fail
-
-    # dirent.h entrypoints
-    libc.src.dirent.closedir
-    libc.src.dirent.dirfd
-    libc.src.dirent.opendir
-    libc.src.dirent.readdir
-
-    # arpa/inet.h entrypoints
-    libc.src.arpa.inet.htonl
-    libc.src.arpa.inet.htons
-    libc.src.arpa.inet.inet_addr
-    libc.src.arpa.inet.inet_aton
-    libc.src.arpa.inet.ntohl
-    libc.src.arpa.inet.ntohs
-
-    # pthread.h entrypoints
-    libc.src.pthread.pthread_atfork
-    libc.src.pthread.pthread_attr_destroy
-    libc.src.pthread.pthread_attr_getdetachstate
-    libc.src.pthread.pthread_attr_getguardsize
-    libc.src.pthread.pthread_attr_getstack
-    libc.src.pthread.pthread_attr_getstacksize
-    libc.src.pthread.pthread_attr_init
-    libc.src.pthread.pthread_attr_setdetachstate
-    libc.src.pthread.pthread_attr_setguardsize
-    libc.src.pthread.pthread_attr_setstack
-    libc.src.pthread.pthread_attr_setstacksize
-    libc.src.pthread.pthread_condattr_destroy
-    libc.src.pthread.pthread_condattr_getclock
-    libc.src.pthread.pthread_condattr_getpshared
-    libc.src.pthread.pthread_condattr_init
-    libc.src.pthread.pthread_condattr_setclock
-    libc.src.pthread.pthread_condattr_setpshared
-    libc.src.pthread.pthread_create
-    libc.src.pthread.pthread_detach
-    libc.src.pthread.pthread_equal
-    libc.src.pthread.pthread_exit
-    libc.src.pthread.pthread_getname_np
-    libc.src.pthread.pthread_getspecific
-    libc.src.pthread.pthread_join
-    libc.src.pthread.pthread_key_create
-    libc.src.pthread.pthread_key_delete
-    libc.src.pthread.pthread_barrier_init
-    libc.src.pthread.pthread_barrier_wait
-    libc.src.pthread.pthread_barrier_destroy
-    libc.src.pthread.pthread_mutex_destroy
-    libc.src.pthread.pthread_mutex_init
-    libc.src.pthread.pthread_mutex_lock
-    libc.src.pthread.pthread_mutex_unlock
-    libc.src.pthread.pthread_mutexattr_destroy
-    libc.src.pthread.pthread_mutexattr_getpshared
-    libc.src.pthread.pthread_mutexattr_getrobust
-    libc.src.pthread.pthread_mutexattr_gettype
-    libc.src.pthread.pthread_mutexattr_init
-    libc.src.pthread.pthread_mutexattr_setpshared
-    libc.src.pthread.pthread_mutexattr_setrobust
-    libc.src.pthread.pthread_mutexattr_settype
-    libc.src.pthread.pthread_once
-    libc.src.pthread.pthread_rwlock_clockrdlock
-    libc.src.pthread.pthread_rwlock_clockwrlock
-    libc.src.pthread.pthread_rwlock_destroy
-    libc.src.pthread.pthread_rwlock_init
-    libc.src.pthread.pthread_rwlock_rdlock
-    libc.src.pthread.pthread_rwlock_timedrdlock
-    libc.src.pthread.pthread_rwlock_timedwrlock
-    libc.src.pthread.pthread_rwlock_tryrdlock
-    libc.src.pthread.pthread_rwlock_trywrlock
-    libc.src.pthread.pthread_rwlock_unlock
-    libc.src.pthread.pthread_rwlock_wrlock
-    libc.src.pthread.pthread_rwlockattr_destroy
-    libc.src.pthread.pthread_rwlockattr_getkind_np
-    libc.src.pthread.pthread_rwlockattr_getpshared
-    libc.src.pthread.pthread_rwlockattr_init
-    libc.src.pthread.pthread_rwlockattr_setkind_np
-    libc.src.pthread.pthread_rwlockattr_setpshared
-    libc.src.pthread.pthread_spin_destroy
-    libc.src.pthread.pthread_spin_init
-    libc.src.pthread.pthread_spin_lock
-    libc.src.pthread.pthread_spin_trylock
-    libc.src.pthread.pthread_spin_unlock
-    libc.src.pthread.pthread_self
-    libc.src.pthread.pthread_setname_np
-    libc.src.pthread.pthread_setspecific
-
-    # sched.h entrypoints
-    libc.src.sched.__sched_getcpucount
-    libc.src.sched.__sched_setcpuzero
-    libc.src.sched.__sched_setcpuset
-    libc.src.sched.__sched_getcpuisset
-
-    # setjmp.h entrypoints
-    libc.src.setjmp.longjmp
-    libc.src.setjmp.setjmp
-    libc.src.setjmp.siglongjmp
-    libc.src.setjmp.sigsetjmp
-
-    # stdio.h entrypoints
-    libc.src.stdio.clearerr
-    libc.src.stdio.clearerr_unlocked
-    libc.src.stdio.fclose
-    libc.src.stdio.fdopen
-    libc.src.stdio.feof
-    libc.src.stdio.feof_unlocked
-    libc.src.stdio.ferror
-    libc.src.stdio.ferror_unlocked
-    libc.src.stdio.fflush
-    libc.src.stdio.fgetc
-    libc.src.stdio.fgetc_unlocked
-    libc.src.stdio.fgets
-    libc.src.stdio.fileno
-    libc.src.stdio.flockfile
-    libc.src.stdio.fopen
-    libc.src.stdio.fopencookie
-    libc.src.stdio.fputc
-    libc.src.stdio.fputs
-    libc.src.stdio.fread
-    libc.src.stdio.fread_unlocked
-    libc.src.stdio.fseek
-    libc.src.stdio.fseeko
-    libc.src.stdio.ftell
-    libc.src.stdio.ftello
-    libc.src.stdio.funlockfile
-    libc.src.stdio.fwrite
-    libc.src.stdio.fwrite_unlocked
-    libc.src.stdio.getc
-    libc.src.stdio.getc_unlocked
-    libc.src.stdio.getchar
-    libc.src.stdio.getchar_unlocked
-    libc.src.stdio.perror
-    libc.src.stdio.putc
-    libc.src.stdio.putchar
-    libc.src.stdio.puts
-    libc.src.stdio.setbuf
-    libc.src.stdio.setvbuf
-    libc.src.stdio.stderr
-    libc.src.stdio.stdin
-    libc.src.stdio.stdout
-    libc.src.stdio.ungetc
-
-    # stdlib.h entrypoints
-    libc.src.stdlib._Exit
-    libc.src.stdlib.abort
-    libc.src.stdlib.at_quick_exit
-    libc.src.stdlib.atexit
-    libc.src.stdlib.exit
-    libc.src.stdlib.getenv
-    libc.src.stdlib.mbstowcs
-    libc.src.stdlib.mbtowc
-    libc.src.stdlib.quick_exit
-    libc.src.stdlib.wcstombs
-    libc.src.stdlib.wctomb
-
-    # signal.h entrypoints
-    libc.src.signal.kill
-    libc.src.signal.raise
-    libc.src.signal.sigaction
-    libc.src.signal.sigaddset
-    libc.src.signal.sigaltstack
-    libc.src.signal.sigdelset
-    libc.src.signal.sigemptyset
-    libc.src.signal.sigfillset
-    libc.src.signal.signal
-    libc.src.signal.sigprocmask
-
-    # spawn.h entrypoints
-    libc.src.spawn.posix_spawn
-    libc.src.spawn.posix_spawn_file_actions_addclose
-    libc.src.spawn.posix_spawn_file_actions_adddup2
-    libc.src.spawn.posix_spawn_file_actions_addopen
-    libc.src.spawn.posix_spawn_file_actions_destroy
-    libc.src.spawn.posix_spawn_file_actions_init
-
-    # search.h entrypoints
-    libc.src.search.hcreate
-    libc.src.search.hcreate_r
-    libc.src.search.hdestroy
-    libc.src.search.hdestroy_r
-    libc.src.search.hsearch
-    libc.src.search.hsearch_r
-    libc.src.search.insque
-    libc.src.search.lfind
-    libc.src.search.lsearch
-    libc.src.search.remque
-
-    # threads.h entrypoints
-    libc.src.threads.call_once
-    libc.src.threads.cnd_broadcast
-    libc.src.threads.cnd_destroy
-    libc.src.threads.cnd_init
-    libc.src.threads.cnd_signal
-    libc.src.threads.cnd_wait
-    libc.src.threads.mtx_destroy
-    libc.src.threads.mtx_init
-    libc.src.threads.mtx_lock
-    libc.src.threads.mtx_unlock
-    libc.src.threads.thrd_create
-    libc.src.threads.thrd_current
-    libc.src.threads.thrd_detach
-    libc.src.threads.thrd_equal
-    libc.src.threads.thrd_exit
-    libc.src.threads.thrd_join
-    libc.src.threads.tss_create
-    libc.src.threads.tss_delete
-    libc.src.threads.tss_get
-    libc.src.threads.tss_set
-
-    # time.h entrypoints
-    libc.src.time.asctime
-    libc.src.time.asctime_r
-    libc.src.time.ctime
-    libc.src.time.ctime_r
-    libc.src.time.clock
-    libc.src.time.clock_gettime
-    libc.src.time.clock_settime
-    libc.src.time.difftime
-    libc.src.time.gettimeofday
-    libc.src.time.gmtime
-    libc.src.time.gmtime_r
-    libc.src.time.localtime
-    libc.src.time.localtime_r
-    libc.src.time.mktime
-    libc.src.time.nanosleep
-    libc.src.time.strftime
-    libc.src.time.strftime_l
-    libc.src.time.time
-    libc.src.time.timespec_get
-
-    # locale.h entrypoints
-    libc.src.locale.localeconv
-    libc.src.locale.duplocale
-    libc.src.locale.freelocale
-    libc.src.locale.localeconv
-    libc.src.locale.newlocale
-    libc.src.locale.setlocale
-    libc.src.locale.uselocale
-
-    # unistd.h entrypoints
-    libc.src.unistd.__llvm_libc_syscall
-    libc.src.unistd._exit
-    libc.src.unistd.environ
-    libc.src.unistd.execv
-    libc.src.unistd.fork
-    libc.src.unistd.getopt
-    libc.src.unistd.optarg
-    libc.src.unistd.opterr
-    libc.src.unistd.optind
-    libc.src.unistd.optopt
-    libc.src.unistd.swab
-
-    # sys/select.h entrypoints
-    libc.src.sys.select.select
-
-    # sys/socket.h entrypoints
-    libc.src.sys.socket.socket
-    libc.src.sys.socket.bind
-    libc.src.sys.socket.socketpair
-    libc.src.sys.socket.send
-    libc.src.sys.socket.sendto
-    libc.src.sys.socket.sendmsg
-    libc.src.sys.socket.recv
-    libc.src.sys.socket.recvfrom
-    libc.src.sys.socket.recvmsg
-
-    # wchar.h entrypoints
-    libc.src.wchar.mblen
-    libc.src.wchar.mbrlen
-    libc.src.wchar.mbsinit
-    libc.src.wchar.mbrtowc
-    libc.src.wchar.mbsrtowcs
-    libc.src.wchar.mbsnrtowcs
-    libc.src.wchar.wcrtomb
-    libc.src.wchar.wcsrtombs
-    libc.src.wchar.wcsnrtombs
-
-    # nl_types.h entrypoints
-    libc.src.nl_types.catopen 
-    libc.src.nl_types.catclose
-    libc.src.nl_types.catgets
-  )
-endif()
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index 7f5913a1cce3c..ff25130b7e09d 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -183,390 +183,6 @@ set(TARGET_LIBM_ENTRYPOINTS
     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.fmaximum
-    libc.src.math.fmaximumf
-    libc.src.math.fmaximuml
-    libc.src.math.fmaximum_num
-    libc.src.math.fmaximum_numf
-    libc.src.math.fmaximum_numl
-    libc.src.math.fmaximum_mag
-    libc.src.math.fmaximum_magf
-    libc.src.math.fmaximum_magl
-    libc.src.math.fmaximum_mag_num
-    libc.src.math.fmaximum_mag_numf
-    libc.src.math.fmaximum_mag_numl
-    libc.src.math.fminimum
-    libc.src.math.fminimumf
-    libc.src.math.fminimuml
-    libc.src.math.fminimum_num
-    libc.src.math.fminimum_numf
-    libc.src.math.fminimum_numl
-    libc.src.math.fminimum_mag
-    libc.src.math.fminimum_magf
-    libc.src.math.fminimum_magl
-    libc.src.math.fminimum_mag_num
-    libc.src.math.fminimum_mag_numf
-    libc.src.math.fminimum_mag_numl
-    libc.src.math.fmul
-    libc.src.math.fmod
-    libc.src.math.fmodf
-    libc.src.math.fmodl
-    libc.src.math.frexp
-    libc.src.math.frexpf
-    libc.src.math.frexpl
-    libc.src.math.fsub
-    libc.src.math.fsubl
-    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.log1p
-    libc.src.math.log1pf
-    libc.src.math.log2
-    libc.src.math.log2f
-    libc.src.math.log
-    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.nan
-    libc.src.math.nanf
-    libc.src.math.nanl
-    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.nexttoward
-    libc.src.math.nexttowardf
-    libc.src.math.nexttowardl
-    libc.src.math.pow
-    libc.src.math.powf
-    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.scalbln
-    libc.src.math.scalblnf
-    libc.src.math.scalblnl
-    libc.src.math.scalbn
-    libc.src.math.scalbnf
-    libc.src.math.scalbnl
-    libc.src.math.sin
-    libc.src.math.sincosf
-    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.tanpif
-    libc.src.math.trunc
-    libc.src.math.truncf
-    libc.src.math.truncl
-)
-
-list(APPEND TARGET_LIBM_ENTRYPOINTS
-  # bfloat16 entrypoints
-  libc.src.math.bf16add
-  libc.src.math.bf16addf
-  libc.src.math.bf16addl
-  libc.src.math.bf16div
-  libc.src.math.bf16divf
-  libc.src.math.bf16divl
-  libc.src.math.bf16fma
-  libc.src.math.bf16fmaf
-  libc.src.math.bf16fmal
-  libc.src.math.bf16mul
-  libc.src.math.bf16mulf
-  libc.src.math.bf16mull
-  libc.src.math.bf16sub
-  libc.src.math.bf16subf
-  libc.src.math.bf16subl
-  libc.src.math.canonicalizebf16
-  libc.src.math.ceilbf16
-  libc.src.math.copysignbf16
-  libc.src.math.fabsbf16
-  libc.src.math.fdimbf16
-  libc.src.math.floorbf16
-  libc.src.math.fmaxbf16
-  libc.src.math.fmaximumbf16
-  libc.src.math.fmaximum_magbf16
-  libc.src.math.fmaximum_mag_numbf16
-  libc.src.math.fmaximum_numbf16
-  libc.src.math.fminbf16
-  libc.src.math.fminimumbf16
-  libc.src.math.fminimum_magbf16
-  libc.src.math.fminimum_mag_numbf16
-  libc.src.math.fminimum_numbf16
-  libc.src.math.fmodbf16
-  libc.src.math.frexpbf16
-  libc.src.math.fromfpbf16
-  libc.src.math.fromfpxbf16
-  libc.src.math.getpayloadbf16
-  libc.src.math.ilogbbf16
-  libc.src.math.iscanonicalbf16
-  libc.src.math.issignalingbf16
-  libc.src.math.ldexpbf16
-  libc.src.math.llogbbf16
-  libc.src.math.llrintbf16
-  libc.src.math.llroundbf16
-  libc.src.math.log_bf16
-  libc.src.math.logbbf16
-  libc.src.math.lrintbf16
-  libc.src.math.lroundbf16
-  libc.src.math.modfbf16
-  libc.src.math.nanbf16
-  libc.src.math.nearbyintbf16
-  libc.src.math.nextafterbf16
-  libc.src.math.nextdownbf16
-  libc.src.math.nexttowardbf16
-  libc.src.math.nextupbf16
-  libc.src.math.remainderbf16
-  libc.src.math.remquobf16
-  libc.src.math.rintbf16
-  libc.src.math.roundbf16
-  libc.src.math.roundevenbf16
-  libc.src.math.scalblnbf16
-  libc.src.math.scalbnbf16
-  libc.src.math.setpayloadbf16
-  libc.src.math.setpayloadsigbf16
-  libc.src.math.sqrtbf16
-  libc.src.math.truncbf16
-  libc.src.math.totalorderbf16
-  libc.src.math.totalordermagbf16
-  libc.src.math.ufromfpbf16
-  libc.src.math.ufromfpxbf16
-)
-
-set(TARGET_LLVMLIBC_ENTRYPOINTS
-  ${TARGET_LIBC_ENTRYPOINTS}
-  ${TARGET_LIBM_ENTRYPOINTS}
-)
-
-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.memccpy
-    libc.src.string.memchr
-    libc.src.string.memcmp
-    libc.src.string.memcpy
-    libc.src.string.memmem
-    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.strcasestr
-    libc.src.string.strcat
-    libc.src.string.strchr
-    libc.src.string.strchrnul
-    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
-
-    # strings.h entrypoints
-    libc.src.strings.bcmp
-    libc.src.strings.bcopy
-    libc.src.strings.bzero
-    libc.src.strings.strcasecmp
-    libc.src.strings.strncasecmp
-
-    # 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.memalignment
-    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
-
-    # errno.h entrypoints
-    libc.src.errno.errno
-
-    # time.h entrypoints
-    libc.src.time.time
-    libc.src.time.clock_getres
-
-    # unistd.h entrypoints
-    libc.src.unistd.getentropy
-
-    # wctype.h entrypoints
-    libc.src.wctype.iswalpha
-)
-
-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.fesetexcept
-    libc.src.fenv.fesetexceptflag
-    libc.src.fenv.fesetround
-    libc.src.fenv.feraiseexcept
-    libc.src.fenv.fetestexcept
-    libc.src.fenv.fetestexceptflag
-    libc.src.fenv.feupdateenv
-
-    # math.h entrypoints
-    libc.src.math.acos
-    libc.src.math.acosf
-    libc.src.math.acoshf
-    libc.src.math.asin
-    libc.src.math.asinf
-    libc.src.math.asinhf
-    libc.src.math.atan2
-    libc.src.math.atan2f
-    libc.src.math.atan
-    libc.src.math.atanf
-    libc.src.math.atanhf
-    libc.src.math.cbrt
-    libc.src.math.cbrtf
-    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.daddl
-    libc.src.math.ddivl
-    libc.src.math.dfmal
-    libc.src.math.dsubl
-    libc.src.math.erff
-    libc.src.math.exp
-    libc.src.math.expf
-    libc.src.math.exp10
-    libc.src.math.exp10f
-    libc.src.math.exp2
-    libc.src.math.exp2f
-    libc.src.math.expm1
-    libc.src.math.expm1f
-    libc.src.math.fabs
-    libc.src.math.fabsf
-    libc.src.math.fabsl
-    libc.src.math.fadd
-    libc.src.math.faddl
-    libc.src.math.fdim
-    libc.src.math.fdimf
-    libc.src.math.fdiml
-    libc.src.math.fdiv
-    libc.src.math.fdivl
-    libc.src.math.ffma
-    libc.src.math.ffmal
-    libc.src.math.floor
-    libc.src.math.floorf
-    libc.src.math.floorl
-    libc.src.math.fma
     libc.src.math.fmabf16
     libc.src.math.fmaf
     libc.src.math.fmin



More information about the libc-commits mailing list