[libc-commits] [libc] [llvm] [libc] Modify NaN/payload functions for emulated float128 type (#221574) (PR #221946)

via libc-commits libc-commits at lists.llvm.org
Tue Sep 8 03:03:51 PDT 2026


https://github.com/Popie52 created https://github.com/llvm/llvm-project/pull/221946

Updated `nanf128`, `getpayloadf128`, `setpayloadf128`, and `setpayloadsigf128` for emulated `float128`, including shared headers, entrypoints, CMake/Bazel dependencies, wrappers, and tests.

### Tests

**CMake**
```
ninja -C build libc.test.shared.shared_math_test \
  libc.test.src.math.smoke.nanf128_test \
  libc.test.src.math.smoke.getpayloadf128_test \
  libc.test.src.math.smoke.setpayloadf128_test \
  libc.test.src.math.smoke.setpayloadsigf128_test
```
Results:
<img width="944" height="937" alt="Screenshot From 2026-09-08 15-29-11" src="https://github.com/user-attachments/assets/5e974ef1-ba30-4492-b828-f63bdda8b1bb" />


  
  **Bazel**
```
  bazelisk build \
  @llvm-project//libc:getpayloadf128 \
  @llvm-project//libc:nanf128 \
  @llvm-project//libc:setpayloadf128 \
  @llvm-project//libc:setpayloadsigf128 \
  --config=generic_gcc

bazelisk test \
  @llvm-project//libc/test/src/math/smoke:getpayloadf128_test \
  @llvm-project//libc/test/src/math/smoke:setpayloadf128_test \
  @llvm-project//libc/test/src/math/smoke:setpayloadsigf128_test \
  --config=generic_gcc
```

Results:
<img width="841" height="190" alt="image" src="https://github.com/user-attachments/assets/14a31157-89ca-4d91-85a5-e6906c2b2403" />


>From 57ab88527447ccedcec7f7cade1a3763c44d97bc Mon Sep 17 00:00:00 2001
From: popie52 <popiesailor at gmail.com>
Date: Tue, 8 Sep 2026 15:20:32 +0530
Subject: [PATCH] [libc] Modify NaN/payload functions for emulated float128
 type

---
 libc/config/baremetal/aarch64/entrypoints.txt |  8 ++---
 libc/config/baremetal/arm/entrypoints.txt     |  8 ++---
 libc/config/baremetal/riscv/entrypoints.txt   |  8 ++---
 libc/config/darwin/aarch64/entrypoints.txt    |  8 ++---
 libc/config/freebsd/x86_64/entrypoints.txt    |  8 ++---
 libc/config/linux/aarch64/entrypoints.txt     |  8 ++---
 libc/config/linux/riscv/entrypoints.txt       |  8 ++---
 libc/config/linux/x86_64/entrypoints.txt      |  8 ++---
 libc/shared/math/getpayloadf128.h             |  6 ----
 libc/shared/math/nanf128.h                    |  6 ----
 libc/shared/math/setpayloadf128.h             |  6 ----
 libc/shared/math/setpayloadsigf128.h          |  6 ----
 libc/src/__support/math/CMakeLists.txt        |  8 ++---
 libc/src/__support/math/getpayloadf128.h      | 11 +++----
 libc/src/__support/math/nanf128.h             | 13 +++-----
 libc/src/__support/math/setpayloadf128.h      | 11 +++----
 libc/src/__support/math/setpayloadsigf128.h   | 11 +++----
 libc/src/math/generic/CMakeLists.txt          |  3 ++
 libc/src/math/generic/getpayloadf128.cpp      |  5 ++-
 libc/src/math/generic/setpayloadf128.cpp      |  5 ++-
 libc/src/math/generic/setpayloadsigf128.cpp   |  5 ++-
 libc/src/math/getpayloadf128.h                |  5 +++
 libc/src/math/nanf128.h                       |  5 +++
 libc/src/math/setpayloadf128.h                |  5 +++
 libc/src/math/setpayloadsigf128.h             |  5 +++
 .../shared/shared_math_constexpr_test.cpp     | 28 ++++++++---------
 libc/test/shared/shared_math_test.cpp         | 31 ++++++++++---------
 libc/test/src/math/smoke/CMakeLists.txt       |  4 +++
 .../src/math/smoke/getpayloadf128_test.cpp    |  5 +++
 libc/test/src/math/smoke/nanf128_test.cpp     |  5 +++
 .../src/math/smoke/setpayloadf128_test.cpp    |  5 +++
 .../src/math/smoke/setpayloadsigf128_test.cpp |  5 +++
 .../llvm-project-overlay/libc/BUILD.bazel     | 15 ++++++---
 .../libc/test/src/math/smoke/BUILD.bazel      |  9 ++++++
 34 files changed, 162 insertions(+), 125 deletions(-)

diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 757e4729699d1..dcb044268ec74 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -481,6 +481,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -538,6 +539,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -583,9 +585,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -777,13 +781,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -791,8 +793,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index 13d4f777650f7..0084b209e2a97 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -493,6 +493,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -550,6 +551,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -595,9 +597,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -788,13 +792,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -802,8 +804,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 88613b39086a5..00c18a5707e71 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -489,6 +489,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -546,6 +547,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -591,9 +593,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -785,13 +789,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -799,8 +801,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index c6c8357207959..962e527a8e9a9 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -300,6 +300,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -357,6 +358,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -402,9 +404,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -597,13 +601,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -611,8 +613,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index 8f6c178301c2f..42d52b3ebc6c2 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -267,6 +267,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -347,6 +348,7 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsqrtl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.iscanonical
     libc.src.math.iscanonicalf
@@ -371,9 +373,11 @@ list(APPEND TARGET_LIBM_ENTRYPOINTS
     libc.src.math.roundevenl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sincos
     libc.src.math.sinpif
@@ -537,13 +541,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -551,8 +553,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 03053ac04f743..4f7ce996dceb6 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -666,6 +666,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -723,6 +724,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -768,9 +770,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -956,13 +960,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -970,8 +972,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 5db369a9d871d..c97f8c442dc1d 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -735,6 +735,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -792,6 +793,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -837,9 +839,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -1042,13 +1046,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -1056,8 +1058,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 3cbbb7b3e9f79..2314c84259881 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -744,6 +744,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.fsubl
     libc.src.math.getpayload
     libc.src.math.getpayloadf
+    libc.src.math.getpayloadf128
     libc.src.math.getpayloadl
     libc.src.math.hypot
     libc.src.math.hypotf
@@ -801,6 +802,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.modfl
     libc.src.math.nan
     libc.src.math.nanf
+    libc.src.math.nanf128
     libc.src.math.nanl
     libc.src.math.nearbyint
     libc.src.math.nearbyintf
@@ -846,9 +848,11 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.scalbnl
     libc.src.math.setpayload
     libc.src.math.setpayloadf
+    libc.src.math.setpayloadf128
     libc.src.math.setpayloadl
     libc.src.math.setpayloadsig
     libc.src.math.setpayloadsigf
+    libc.src.math.setpayloadsigf128
     libc.src.math.setpayloadsigl
     libc.src.math.sin
     libc.src.math.sincos
@@ -1051,13 +1055,11 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.fromfpxf128
     libc.src.math.fsqrtf128
     libc.src.math.fsubf128
-    libc.src.math.getpayloadf128
     libc.src.math.ilogbf128
     libc.src.math.ldexpf128
     libc.src.math.llogbf128
     libc.src.math.logbf128
     libc.src.math.modff128
-    libc.src.math.nanf128
     libc.src.math.nextafterf128
     libc.src.math.nextdownf128
     libc.src.math.nextupf128
@@ -1065,8 +1067,6 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     libc.src.math.remquof128
     libc.src.math.scalblnf128
     libc.src.math.scalbnf128
-    libc.src.math.setpayloadf128
-    libc.src.math.setpayloadsigf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
     libc.src.math.ufromfpf128
diff --git a/libc/shared/math/getpayloadf128.h b/libc/shared/math/getpayloadf128.h
index 1a3845e631a8b..199c9e5df084d 100644
--- a/libc/shared/math/getpayloadf128.h
+++ b/libc/shared/math/getpayloadf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_GETPAYLOADF128_H
 #define LLVM_LIBC_SHARED_MATH_GETPAYLOADF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/getpayloadf128.h"
 
@@ -24,6 +20,4 @@ using math::getpayloadf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_GETPAYLOADF128_H
diff --git a/libc/shared/math/nanf128.h b/libc/shared/math/nanf128.h
index 313b6ed6234c5..f1dd96387680e 100644
--- a/libc/shared/math/nanf128.h
+++ b/libc/shared/math/nanf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_NANF128_H
 #define LLVM_LIBC_SHARED_MATH_NANF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/nanf128.h"
 
@@ -24,6 +20,4 @@ using math::nanf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_NANF128_H
diff --git a/libc/shared/math/setpayloadf128.h b/libc/shared/math/setpayloadf128.h
index a1f889e89ed39..7efdc34dd1577 100644
--- a/libc/shared/math/setpayloadf128.h
+++ b/libc/shared/math/setpayloadf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_SETPAYLOADF128_H
 #define LLVM_LIBC_SHARED_MATH_SETPAYLOADF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/setpayloadf128.h"
 
@@ -24,6 +20,4 @@ using math::setpayloadf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_SETPAYLOADF128_H
diff --git a/libc/shared/math/setpayloadsigf128.h b/libc/shared/math/setpayloadsigf128.h
index 3169b610ccb4d..a10e07124dad7 100644
--- a/libc/shared/math/setpayloadsigf128.h
+++ b/libc/shared/math/setpayloadsigf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_SETPAYLOADSIGF128_H
 #define LLVM_LIBC_SHARED_MATH_SETPAYLOADSIGF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/setpayloadsigf128.h"
 
@@ -24,6 +20,4 @@ using math::setpayloadsigf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_SETPAYLOADSIGF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index cf9bc11fce824..3aaf49c05f3cc 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -2181,7 +2181,7 @@ add_header_library(
   HDRS
     nanf128.h
   DEPENDS
-    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.macros.config
     libc.src.__support.str_to_float
     libc.src.__support.libc_errno
@@ -3852,7 +3852,7 @@ add_header_library(
   HDRS
     getpayloadf128.h
   DEPENDS
-    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.FPUtil.basic_operations
     libc.src.__support.macros.config
 )
@@ -4771,7 +4771,7 @@ add_header_library(
   HDRS
     setpayloadf128.h
   DEPENDS
-    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.FPUtil.basic_operations
     libc.src.__support.macros.config
 )
@@ -4828,7 +4828,7 @@ add_header_library(
   HDRS
     setpayloadsigf128.h
   DEPENDS
-    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.FPUtil.basic_operations
     libc.src.__support.macros.config
 )
diff --git a/libc/src/__support/math/getpayloadf128.h b/libc/src/__support/math/getpayloadf128.h
index aed53ee4adbce..98d4d529b0f31 100644
--- a/libc/src/__support/math/getpayloadf128.h
+++ b/libc/src/__support/math/getpayloadf128.h
@@ -9,24 +9,21 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_GETPAYLOADF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_GETPAYLOADF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
 namespace math {
 
-LIBC_INLINE constexpr float128 getpayloadf128(const float128 *x) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 getpayloadf128(const Float128 *x) {
   return fputil::getpayload(*x);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_GETPAYLOADF128_H
diff --git a/libc/src/__support/math/nanf128.h b/libc/src/__support/math/nanf128.h
index 5cc1010939d3c..de445eeab900b 100644
--- a/libc/src/__support/math/nanf128.h
+++ b/libc/src/__support/math/nanf128.h
@@ -9,19 +9,18 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_NANF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_NANF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "src/__support/libc_errno.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 #include "src/__support/str_to_float.h"
 
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE constexpr float128 nanf128(const char *arg) {
-  auto result = internal::strtonan<float128>(arg);
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr Float128 nanf128(const char *arg) {
+  auto result = internal::strtonan<Float128>(arg);
   if (result.has_error())
     libc_errno = result.error;
   return result.value;
@@ -30,6 +29,4 @@ LIBC_INLINE constexpr float128 nanf128(const char *arg) {
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_NANF128_H
diff --git a/libc/src/__support/math/setpayloadf128.h b/libc/src/__support/math/setpayloadf128.h
index 4e022d8ec91d4..f2ed808866ada 100644
--- a/libc/src/__support/math/setpayloadf128.h
+++ b/libc/src/__support/math/setpayloadf128.h
@@ -9,24 +9,21 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_SETPAYLOADF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_SETPAYLOADF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
 namespace math {
 
-LIBC_INLINE constexpr int setpayloadf128(float128 *res, float128 pl) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr int setpayloadf128(Float128 *res, Float128 pl) {
   return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_SETPAYLOADF128_H
diff --git a/libc/src/__support/math/setpayloadsigf128.h b/libc/src/__support/math/setpayloadsigf128.h
index 6a51920911150..9954bb96b5367 100644
--- a/libc/src/__support/math/setpayloadsigf128.h
+++ b/libc/src/__support/math/setpayloadsigf128.h
@@ -9,24 +9,21 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_SETPAYLOADSIGF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_SETPAYLOADSIGF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "src/__support/FPUtil/BasicOperations.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
 namespace math {
 
-LIBC_INLINE int setpayloadsigf128(float128 *res, float128 pl) {
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE int setpayloadsigf128(Float128 *res, Float128 pl) {
   return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_SETPAYLOADSIGF128_H
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 28b8e954530dd..3cffe69f7ca5f 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -4409,6 +4409,7 @@ add_entrypoint_object(
   HDRS
     ../getpayloadf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.getpayloadf128
 )
 
@@ -4469,6 +4470,7 @@ add_entrypoint_object(
   HDRS
     ../setpayloadf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.setpayloadf128
 )
 
@@ -4529,6 +4531,7 @@ add_entrypoint_object(
   HDRS
     ../setpayloadsigf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.setpayloadsigf128
 )
 
diff --git a/libc/src/math/generic/getpayloadf128.cpp b/libc/src/math/generic/getpayloadf128.cpp
index ba2b1cf798f3b..648acfd555f0c 100644
--- a/libc/src/math/generic/getpayloadf128.cpp
+++ b/libc/src/math/generic/getpayloadf128.cpp
@@ -7,12 +7,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/getpayloadf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/getpayloadf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(float128, getpayloadf128, (const float128 *x)) {
-  return math::getpayloadf128(x);
+  return cpp::bit_cast<float128>(math::getpayloadf128(cpp::bit_cast<const Float128 *>(x)));
 }
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/generic/setpayloadf128.cpp b/libc/src/math/generic/setpayloadf128.cpp
index 83a3218688a99..fa71b46a8a89c 100644
--- a/libc/src/math/generic/setpayloadf128.cpp
+++ b/libc/src/math/generic/setpayloadf128.cpp
@@ -7,12 +7,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/setpayloadf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/setpayloadf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(int, setpayloadf128, (float128 * res, float128 pl)) {
-  return math::setpayloadf128(res, pl);
+  return math::setpayloadf128(cpp::bit_cast<Float128 *>(res), cpp::bit_cast<Float128>(pl));
 }
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/generic/setpayloadsigf128.cpp b/libc/src/math/generic/setpayloadsigf128.cpp
index a3972286767b5..91dd561568d47 100644
--- a/libc/src/math/generic/setpayloadsigf128.cpp
+++ b/libc/src/math/generic/setpayloadsigf128.cpp
@@ -7,12 +7,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/setpayloadsigf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/setpayloadsigf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(int, setpayloadsigf128, (float128 * res, float128 pl)) {
-  return math::setpayloadsigf128(res, pl);
+  return math::setpayloadsigf128(cpp::bit_cast<Float128 *>(res), cpp::bit_cast<Float128>(pl));
 }
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/getpayloadf128.h b/libc/src/math/getpayloadf128.h
index 7ebb4290d4f8a..383b03219203e 100644
--- a/libc/src/math/getpayloadf128.h
+++ b/libc/src/math/getpayloadf128.h
@@ -9,11 +9,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_GETPAYLOADF128_H
 #define LLVM_LIBC_SRC_MATH_GETPAYLOADF128_H
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 #include "src/__support/macros/properties/types.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 float128 getpayloadf128(const float128 *x);
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/nanf128.h b/libc/src/math/nanf128.h
index 1c1323adcd781..4bc24649f0e33 100644
--- a/libc/src/math/nanf128.h
+++ b/libc/src/math/nanf128.h
@@ -9,11 +9,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_NANF128_H
 #define LLVM_LIBC_SRC_MATH_NANF128_H
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 #include "src/__support/macros/properties/types.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 float128 nanf128(const char *arg);
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/setpayloadf128.h b/libc/src/math/setpayloadf128.h
index e46aef38256db..d3f357bc6c49f 100644
--- a/libc/src/math/setpayloadf128.h
+++ b/libc/src/math/setpayloadf128.h
@@ -9,11 +9,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_SETPAYLOADF128_H
 #define LLVM_LIBC_SRC_MATH_SETPAYLOADF128_H
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 #include "src/__support/macros/properties/types.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 int setpayloadf128(float128 *res, float128 pl);
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/setpayloadsigf128.h b/libc/src/math/setpayloadsigf128.h
index 4e036b9c8ba00..80bc58c499818 100644
--- a/libc/src/math/setpayloadsigf128.h
+++ b/libc/src/math/setpayloadsigf128.h
@@ -9,11 +9,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_SETPAYLOADSIGF128_H
 #define LLVM_LIBC_SRC_MATH_SETPAYLOADSIGF128_H
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 #include "src/__support/macros/properties/types.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 int setpayloadsigf128(float128 *res, float128 pl);
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 862c056411f5c..7407ea2d8dfd4 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -435,6 +435,20 @@ static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::roundf128(Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::truncf128(Float128(0.0)));
+static_assert(Float128(-1.0) == [] {
+  Float128 getpayload_x = Float128(0.0);
+  return LIBC_NAMESPACE::shared::getpayloadf128(&getpayload_x);
+}());
+static_assert(1 == [] {
+  const char arg{};
+  return LIBC_NAMESPACE::fputil::FPBits<Float128>(
+             LIBC_NAMESPACE::shared::nanf128(&arg))
+      .is_nan();
+}());
+static_assert(0 == [] {
+  Float128 setpayload_x = Float128(0.0);
+  return LIBC_NAMESPACE::shared::setpayloadf128(&setpayload_x, Float128(0.0));
+}());
 
 //===----------------------------------------------------------------------===//
 //                       Native Float128 Tests
@@ -461,10 +475,6 @@ static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::fromfpf128(float128(0.0), 0, 32));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::fromfpxf128(float128(0.0), 0, 32));
-static_assert(float128(-1.0) == [] {
-  float128 getpayload_x = float128(0.0);
-  return LIBC_NAMESPACE::shared::getpayloadf128(&getpayload_x);
-}());
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::ufromfpf128(float128(0.0), 0, 32));
 static_assert(float128(0.0) ==
@@ -495,10 +505,6 @@ static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::scalblnf128(float128(0.0), 0.0));
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::scalbnf128(float128(0.0), 0.0));
-static_assert(0 == [] {
-  float128 setpayload_x = float128(0.0);
-  return LIBC_NAMESPACE::shared::setpayloadf128(&setpayload_x, float128(0.0));
-}());
 static_assert(0.0f ==
               LIBC_NAMESPACE::shared::fmulf128(float128(0.0), float128(0.0)));
 static_assert(0.0f ==
@@ -506,12 +512,6 @@ static_assert(0.0f ==
 static_assert(float128(0.0) ==
               LIBC_NAMESPACE::shared::nextafterf128(float128(0.0),
                                                     float128(0.0)));
-static_assert(1 == [] {
-  const char arg{};
-  return LIBC_NAMESPACE::fputil::FPBits<float128>(
-             LIBC_NAMESPACE::shared::nanf128(&arg))
-      .is_nan();
-}());
 
 #endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
 
diff --git a/libc/test/shared/shared_math_test.cpp b/libc/test/shared/shared_math_test.cpp
index 7b785331f36c6..cfae2a1ab48f5 100644
--- a/libc/test/shared/shared_math_test.cpp
+++ b/libc/test/shared/shared_math_test.cpp
@@ -581,6 +581,8 @@ TEST(LlvmLibcSharedMathTest, AllLongDouble) {
 
 // Emulated float128 tests
 TEST(LlvmLibcSharedMathTest, AllEmuFloat128) {
+  using FPBits = LIBC_NAMESPACE::fputil::FPBits<Float128>;
+
   EXPECT_FP_EQ(Float128(0.0),
                LIBC_NAMESPACE::shared::atan2f128(Float128(0.0), Float128(0.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::ceilf128(Float128(0.0)));
@@ -625,6 +627,20 @@ TEST(LlvmLibcSharedMathTest, AllEmuFloat128) {
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::roundf128(Float128(0.0)));
   EXPECT_FP_EQ(Float128(1.0), LIBC_NAMESPACE::shared::sqrtf128(Float128(1.0)));
   EXPECT_FP_EQ(Float128(0.0), LIBC_NAMESPACE::shared::truncf128(Float128(0.0)));
+  EXPECT_TRUE(FPBits(LIBC_NAMESPACE::shared::nanf128("")).is_nan());
+
+  Float128 getpayloadf128_x = Float128(0.0);
+  EXPECT_FP_EQ(Float128(-1.0),
+               LIBC_NAMESPACE::shared::getpayloadf128(&getpayloadf128_x));
+
+  Float128 setpayloadf128_res = Float128(0.0);
+  EXPECT_EQ(0, LIBC_NAMESPACE::shared::setpayloadf128(&setpayloadf128_res,
+                                                      Float128(0.0)));
+
+  Float128 setpayloadsigf128_res = Float128(0.0);
+  EXPECT_EQ(1, LIBC_NAMESPACE::shared::setpayloadsigf128(&setpayloadsigf128_res,
+                                                         Float128(0.0)));
+  EXPECT_FP_EQ(Float128(0.0), setpayloadsigf128_res);
 }
 
 #ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
@@ -681,20 +697,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) {
                LIBC_NAMESPACE::shared::faddf128(float128(0.0), float128(0.0)));
   EXPECT_FP_EQ(1.0f,
                LIBC_NAMESPACE::shared::fdivf128(float128(1.0), float128(1.0)));
-
-  float128 getpayloadf128_x = float128(0.0);
-  EXPECT_FP_EQ(float128(-1.0),
-               LIBC_NAMESPACE::shared::getpayloadf128(&getpayloadf128_x));
-
-  float128 setpayloadf128_res = float128(0.0);
-  EXPECT_EQ(0, LIBC_NAMESPACE::shared::setpayloadf128(&setpayloadf128_res,
-                                                      float128(0.0)));
-
-  float128 setpayloadsigf128_res = float128(0.0);
-  EXPECT_EQ(1, LIBC_NAMESPACE::shared::setpayloadsigf128(&setpayloadsigf128_res,
-                                                         float128(0.0)));
-  EXPECT_FP_EQ(float128(0.0), setpayloadsigf128_res);
-
   float128 neg_min_denormal = FPBits::min_subnormal(Sign::NEG).get_val();
   EXPECT_FP_EQ(neg_min_denormal,
                LIBC_NAMESPACE::shared::nextdownf128(float128(0.0)));
@@ -754,7 +756,6 @@ TEST(LlvmLibcSharedMathTest, AllFloat128) {
                LIBC_NAMESPACE::shared::fsubf128(float128(0.0), float128(0.0)));
   EXPECT_FP_EQ(0x0p+0f,
                LIBC_NAMESPACE::shared::fmulf128(float128(0.0), float128(0.0)));
-  EXPECT_TRUE(FPBits(LIBC_NAMESPACE::shared::nanf128("")).is_nan());
 }
 
 #endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index a61b854a85fb2..a26b72109eda1 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3935,6 +3935,7 @@ add_fp_unittest(
   DEPENDS
     libc.hdr.signal_macros
     libc.src.math.nanf128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.FPUtil.fp_bits
   # FIXME: The nan tests currently have death tests, which aren't supported for
   # hermetic tests.
@@ -5572,6 +5573,7 @@ add_fp_unittest(
     GetPayloadTest.h
   DEPENDS
     libc.src.math.getpayloadf128
+    libc.src.__support.FPUtil.float128
 )
 
 add_fp_unittest(
@@ -5645,6 +5647,7 @@ add_fp_unittest(
     SetPayloadTest.h
   DEPENDS
     libc.src.math.setpayloadf128
+    libc.src.__support.FPUtil.float128
 )
 
 add_fp_unittest(
@@ -5718,6 +5721,7 @@ add_fp_unittest(
     SetPayloadSigTest.h
   DEPENDS
     libc.src.math.setpayloadsigf128
+    libc.src.__support.FPUtil.float128
 )
 
 add_fp_unittest(
diff --git a/libc/test/src/math/smoke/getpayloadf128_test.cpp b/libc/test/src/math/smoke/getpayloadf128_test.cpp
index 37bb506a3ed16..404e3ee873262 100644
--- a/libc/test/src/math/smoke/getpayloadf128_test.cpp
+++ b/libc/test/src/math/smoke/getpayloadf128_test.cpp
@@ -8,6 +8,11 @@
 
 #include "GetPayloadTest.h"
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/math/getpayloadf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_GETPAYLOAD_TESTS(float128, LIBC_NAMESPACE::getpayloadf128)
diff --git a/libc/test/src/math/smoke/nanf128_test.cpp b/libc/test/src/math/smoke/nanf128_test.cpp
index 40b347de25f7a..ef781cbdf1b9b 100644
--- a/libc/test/src/math/smoke/nanf128_test.cpp
+++ b/libc/test/src/math/smoke/nanf128_test.cpp
@@ -7,6 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "hdr/signal_macros.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/FPUtil/FPBits.h"
 #include "src/__support/uint128.h"
 #include "src/math/nanf128.h"
@@ -14,6 +15,10 @@
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif
+
 class LlvmLibcNanf128Test : public LIBC_NAMESPACE::testing::FEnvSafeTest {
 public:
   using FPBits128 = LIBC_NAMESPACE::fputil::FPBits<float128>;
diff --git a/libc/test/src/math/smoke/setpayloadf128_test.cpp b/libc/test/src/math/smoke/setpayloadf128_test.cpp
index 4b17bfee093c0..f33ccb9f2f27b 100644
--- a/libc/test/src/math/smoke/setpayloadf128_test.cpp
+++ b/libc/test/src/math/smoke/setpayloadf128_test.cpp
@@ -8,6 +8,11 @@
 
 #include "SetPayloadTest.h"
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/math/setpayloadf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_SETPAYLOAD_TESTS(float128, LIBC_NAMESPACE::setpayloadf128)
diff --git a/libc/test/src/math/smoke/setpayloadsigf128_test.cpp b/libc/test/src/math/smoke/setpayloadsigf128_test.cpp
index ea7d0268b3a29..d0f821898e27b 100644
--- a/libc/test/src/math/smoke/setpayloadsigf128_test.cpp
+++ b/libc/test/src/math/smoke/setpayloadsigf128_test.cpp
@@ -8,6 +8,11 @@
 
 #include "SetPayloadSigTest.h"
 
+#include "src/__support/FPUtil/float128.h"
 #include "src/math/setpayloadsigf128.h"
 
+#ifndef LIBC_TYPES_HAS_NATIVE_FLOAT128
+using float128 = LIBC_NAMESPACE::fputil::Float128;
+#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
+
 LIST_SETPAYLOADSIG_TESTS(float128, LIBC_NAMESPACE::setpayloadsigf128)
diff --git a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
index fc1164d88d111..c91a9bcc619a9 100644
--- a/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/BUILD.bazel
@@ -4569,9 +4569,9 @@ libc_support_library(
     name = "__support_math_setpayloadf128",
     hdrs = ["src/__support/math/setpayloadf128.h"],
     deps = [
+        ":__support_fputil_float128",
         ":__support_fputil_basic_operations",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -4627,8 +4627,8 @@ libc_support_library(
     hdrs = ["src/__support/math/setpayloadsigf128.h"],
     deps = [
         ":__support_fputil_basic_operations",
+        ":__support_fputil_float128",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -6718,10 +6718,10 @@ libc_support_library(
     name = "__support_math_nanf128",
     hdrs = ["src/__support/math/nanf128.h"],
     deps = [
+        ":__support_fputil_float128",
         ":__support_libc_errno",
         ":__support_macros_config",
         ":__support_str_to_float",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -8387,9 +8387,9 @@ libc_support_library(
     name = "__support_math_getpayloadf128",
     hdrs = ["src/__support/math/getpayloadf128.h"],
     deps = [
+        ":__support_fputil_float128",
         ":__support_fputil_basic_operations",
         ":__support_macros_config",
-        ":llvm_libc_types_float128",
     ],
 )
 
@@ -12499,6 +12499,8 @@ libc_math_function(
 libc_math_function(
     name = "getpayloadf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_getpayloadf128",
     ],
 )
@@ -13035,6 +13037,7 @@ libc_math_function(
 libc_math_function(
     name = "nanf128",
     additional_deps = [
+        ":__support_fputil_float128",
         ":__support_math_nanf128",
     ],
 )
@@ -13603,6 +13606,8 @@ libc_math_function(
 libc_math_function(
     name = "setpayloadf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_setpayloadf128",
     ],
 )
@@ -13638,6 +13643,8 @@ libc_math_function(
 libc_math_function(
     name = "setpayloadsigf128",
     additional_deps = [
+        ":__support_cpp_bit",
+        ":__support_fputil_float128",
         ":__support_math_setpayloadsigf128",
     ],
 )
diff --git a/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel b/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel
index 1ea19f953e0ad..9276c793530cf 100644
--- a/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel
@@ -969,6 +969,9 @@ math_test(
 math_test(
     name = "getpayloadf128",
     hdrs = ["GetPayloadTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ],
 )
 
 math_test(
@@ -1593,6 +1596,9 @@ math_test(
 math_test(
     name = "setpayloadf128",
     hdrs = ["SetPayloadTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ],
 )
 
 math_test(
@@ -1618,6 +1624,9 @@ math_test(
 math_test(
     name = "setpayloadsigf128",
     hdrs = ["SetPayloadSigTest.h"],
+    deps = [
+        "//libc:__support_fputil_float128",
+    ]
 )
 
 math_test(



More information about the libc-commits mailing list