[libc-commits] [libc] [llvm] [libc] Make `lroundf128` and `llroundf128` use the emulated float128 type (PR #216829)

via libc-commits libc-commits at lists.llvm.org
Wed Aug 19 05:06:01 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: Zorojuro (Sukumarsawant)

<details>
<summary>Changes</summary>



---

Patch is 26.38 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/216829.diff


31 Files Affected:

- (modified) libc/config/baremetal/aarch64/entrypoints.txt (+2-2) 
- (modified) libc/config/baremetal/arm/entrypoints.txt (+2-2) 
- (modified) libc/config/baremetal/riscv/entrypoints.txt (+2-2) 
- (modified) libc/config/darwin/aarch64/entrypoints.txt (+2-2) 
- (modified) libc/config/darwin/x86_64/entrypoints.txt (+2) 
- (modified) libc/config/freebsd/x86_64/entrypoints.txt (+2-2) 
- (modified) libc/config/gpu/amdgpu/entrypoints.txt (+2) 
- (modified) libc/config/gpu/nvptx/entrypoints.txt (+2) 
- (modified) libc/config/linux/aarch64/entrypoints.txt (+2-2) 
- (modified) libc/config/linux/arm/entrypoints.txt (+2) 
- (modified) libc/config/linux/riscv/entrypoints.txt (+2-2) 
- (modified) libc/config/linux/x86_64/entrypoints.txt (+2-2) 
- (modified) libc/config/windows/entrypoints.txt (+2) 
- (modified) libc/shared/math/llroundf128.h (-6) 
- (modified) libc/shared/math/lroundf128.h (-6) 
- (modified) libc/src/__support/math/CMakeLists.txt (+2-2) 
- (modified) libc/src/__support/math/llroundf128.h (+5-8) 
- (modified) libc/src/__support/math/lroundf128.h (+5-8) 
- (modified) libc/src/math/generic/CMakeLists.txt (+2) 
- (modified) libc/src/math/generic/llroundf128.cpp (+4-1) 
- (modified) libc/src/math/generic/lroundf128.cpp (+4-1) 
- (modified) libc/src/math/llroundf128.h (+5) 
- (modified) libc/src/math/lroundf128.h (+5) 
- (modified) libc/test/shared/shared_math_constexpr_test.cpp (+2-2) 
- (modified) libc/test/shared/shared_math_test.cpp (+2-2) 
- (modified) libc/test/src/math/smoke/CMakeLists.txt (+2) 
- (modified) libc/test/src/math/smoke/RoundToIntegerTest.h (+1-1) 
- (modified) libc/test/src/math/smoke/llroundf128_test.cpp (+5) 
- (modified) libc/test/src/math/smoke/lroundf128_test.cpp (+5) 
- (modified) utils/bazel/llvm-project-overlay/libc/BUILD.bazel (+6-2) 
- (modified) utils/bazel/llvm-project-overlay/libc/test/src/math/smoke/BUILD.bazel (+6) 


``````````diff
diff --git a/libc/config/baremetal/aarch64/entrypoints.txt b/libc/config/baremetal/aarch64/entrypoints.txt
index 2dd3c246f9131..613c8406cbe10 100644
--- a/libc/config/baremetal/aarch64/entrypoints.txt
+++ b/libc/config/baremetal/aarch64/entrypoints.txt
@@ -494,6 +494,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -511,6 +512,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -774,10 +776,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/baremetal/arm/entrypoints.txt b/libc/config/baremetal/arm/entrypoints.txt
index c57f3e413ed84..e46a7aeb6ae0e 100644
--- a/libc/config/baremetal/arm/entrypoints.txt
+++ b/libc/config/baremetal/arm/entrypoints.txt
@@ -506,6 +506,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -523,6 +524,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -785,10 +787,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/baremetal/riscv/entrypoints.txt b/libc/config/baremetal/riscv/entrypoints.txt
index 32094cf74a41a..95fd7c8515a9e 100644
--- a/libc/config/baremetal/riscv/entrypoints.txt
+++ b/libc/config/baremetal/riscv/entrypoints.txt
@@ -502,6 +502,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -519,6 +520,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -782,10 +784,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index 789ef5612f62c..ced6a6743b7ab 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -313,6 +313,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -330,6 +331,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -594,10 +596,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/darwin/x86_64/entrypoints.txt b/libc/config/darwin/x86_64/entrypoints.txt
index 1119de68c63ef..313c56d278ed4 100644
--- a/libc/config/darwin/x86_64/entrypoints.txt
+++ b/libc/config/darwin/x86_64/entrypoints.txt
@@ -176,12 +176,14 @@ set(TARGET_LIBM_ENTRYPOINTS
     #libc.src.math.llrintl
     #libc.src.math.llround
     #libc.src.math.llroundf
+    #libc.src.math.llroundf128
     #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.lroundf128
     #libc.src.math.lroundl
     #libc.src.math.ldexp
     #libc.src.math.ldexpf
diff --git a/libc/config/freebsd/x86_64/entrypoints.txt b/libc/config/freebsd/x86_64/entrypoints.txt
index 459ffd98cd514..0edc1f0525cf4 100644
--- a/libc/config/freebsd/x86_64/entrypoints.txt
+++ b/libc/config/freebsd/x86_64/entrypoints.txt
@@ -223,6 +223,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log10
     libc.src.math.log10f
@@ -240,6 +241,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -532,10 +534,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 544c153c7a96b..82f5873b18b6e 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -437,6 +437,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -454,6 +455,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index 840884c58809b..dc32fad6e994e 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -434,6 +434,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -451,6 +452,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 4e2edd6235fd8..42180fae4e6bf 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -653,6 +653,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -670,6 +671,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -927,10 +929,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index f4a4b25de2575..8b97d5b774135 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -468,6 +468,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -485,6 +486,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 8242c7e3c943c..236e7a295b0ff 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -721,6 +721,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -738,6 +739,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -1012,10 +1014,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 6e193f0f10fc9..90735e0ccb80c 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -731,6 +731,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log
     libc.src.math.log10
@@ -748,6 +749,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
@@ -1022,10 +1024,8 @@ if(LIBC_TYPES_HAS_NATIVE_FLOAT128)
     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.nextafterf128
diff --git a/libc/config/windows/entrypoints.txt b/libc/config/windows/entrypoints.txt
index b2edad435874c..5317a0323db75 100644
--- a/libc/config/windows/entrypoints.txt
+++ b/libc/config/windows/entrypoints.txt
@@ -256,6 +256,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.llrintl
     libc.src.math.llround
     libc.src.math.llroundf
+    libc.src.math.llroundf128
     libc.src.math.llroundl
     libc.src.math.log10
     libc.src.math.log10f
@@ -273,6 +274,7 @@ set(TARGET_LIBM_ENTRYPOINTS
     libc.src.math.lrintl
     libc.src.math.lround
     libc.src.math.lroundf
+    libc.src.math.lroundf128
     libc.src.math.lroundl
     libc.src.math.modf
     libc.src.math.modff
diff --git a/libc/shared/math/llroundf128.h b/libc/shared/math/llroundf128.h
index 4ca4826a5acf8..20af856951e37 100644
--- a/libc/shared/math/llroundf128.h
+++ b/libc/shared/math/llroundf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_LLROUNDF128_H
 #define LLVM_LIBC_SHARED_MATH_LLROUNDF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/llroundf128.h"
 
@@ -24,6 +20,4 @@ using math::llroundf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_LLROUNDF128_H
diff --git a/libc/shared/math/lroundf128.h b/libc/shared/math/lroundf128.h
index ec035e4c26919..a5e445fb08a7b 100644
--- a/libc/shared/math/lroundf128.h
+++ b/libc/shared/math/lroundf128.h
@@ -9,10 +9,6 @@
 #ifndef LLVM_LIBC_SHARED_MATH_LROUNDF128_H
 #define LLVM_LIBC_SHARED_MATH_LROUNDF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "shared/libc_common.h"
 #include "src/__support/math/lroundf128.h"
 
@@ -24,6 +20,4 @@ using math::lroundf128;
 } // namespace shared
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SHARED_MATH_LROUNDF128_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index f56ce93e5c498..f24612916c33c 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -1949,7 +1949,7 @@ add_header_library(
   HDRS
     llroundf128.h
   DEPENDS
-    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.FPUtil.nearest_integer_operations
     libc.src.__support.macros.config
 )
@@ -2063,7 +2063,7 @@ add_header_library(
   HDRS
     lroundf128.h
   DEPENDS
-    libc.include.llvm-libc-types.float128
+    libc.src.__support.FPUtil.float128
     libc.src.__support.FPUtil.nearest_integer_operations
     libc.src.__support.macros.config
 )
diff --git a/libc/src/__support/math/llroundf128.h b/libc/src/__support/math/llroundf128.h
index b5db14ed9bc0e..7a52ff5c80452 100644
--- a/libc/src/__support/math/llroundf128.h
+++ b/libc/src/__support/math/llroundf128.h
@@ -9,23 +9,20 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_LLROUNDF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_LLROUNDF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "src/__support/FPUtil/NearestIntegerOperations.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE constexpr long long llroundf128(float128 x) {
-  return fputil::round_to_signed_integer<float128, long long>(x);
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr long long llroundf128(Float128 x) {
+  return fputil::round_to_signed_integer<Float128, long long>(x);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_LLROUNDF128_H
diff --git a/libc/src/__support/math/lroundf128.h b/libc/src/__support/math/lroundf128.h
index cd8fd70c25966..14e3c676acd04 100644
--- a/libc/src/__support/math/lroundf128.h
+++ b/libc/src/__support/math/lroundf128.h
@@ -9,23 +9,20 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_LROUNDF128_H
 #define LLVM_LIBC_SRC___SUPPORT_MATH_LROUNDF128_H
 
-#include "include/llvm-libc-types/float128.h"
-
-#ifdef LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #include "src/__support/FPUtil/NearestIntegerOperations.h"
+#include "src/__support/FPUtil/float128.h"
 #include "src/__support/macros/config.h"
 
 namespace LIBC_NAMESPACE_DECL {
 namespace math {
 
-LIBC_INLINE constexpr long lroundf128(float128 x) {
-  return fputil::round_to_signed_integer<float128, long>(x);
+using LIBC_NAMESPACE::fputil::Float128;
+
+LIBC_INLINE constexpr long lroundf128(Float128 x) {
+  return fputil::round_to_signed_integer<Float128, long>(x);
 }
 
 } // namespace math
 } // namespace LIBC_NAMESPACE_DECL
 
-#endif // LIBC_TYPES_HAS_NATIVE_FLOAT128
-
 #endif // LLVM_LIBC_SRC___SUPPORT_MATH_LROUNDF128_H
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 507a5ae33ca68..01468b97d38f6 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -867,6 +867,7 @@ add_entrypoint_object(
   HDRS
     ../lroundf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.lroundf128
 )
 
@@ -927,6 +928,7 @@ add_entrypoint_object(
   HDRS
     ../llroundf128.h
   DEPENDS
+    libc.src.__support.CPP.bit
     libc.src.__support.math.llroundf128
 )
 
diff --git a/libc/src/math/generic/llroundf128.cpp b/libc/src/math/generic/llroundf128.cpp
index 4ef2eb0032370..8f0a31b59ae49 100644
--- a/libc/src/math/generic/llroundf128.cpp
+++ b/libc/src/math/generic/llroundf128.cpp
@@ -7,12 +7,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/llroundf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/llroundf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(long long, llroundf128, (float128 x)) {
-  return math::llroundf128(x);
+  return math::llroundf128(cpp::bit_cast<Float128>(x));
 }
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/generic/lroundf128.cpp b/libc/src/math/generic/lroundf128.cpp
index c6ea549d58253..dde3b78e0f0a6 100644
--- a/libc/src/math/generic/lroundf128.cpp
+++ b/libc/src/math/generic/lroundf128.cpp
@@ -7,12 +7,15 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/math/lroundf128.h"
+#include "src/__support/CPP/bit.h"
 #include "src/__support/math/lroundf128.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
+using LIBC_NAMESPACE::fputil::Float128;
+
 LLVM_LIBC_FUNCTION(long, lroundf128, (float128 x)) {
-  return math::lroundf128(x);
+  return math::lroundf128(cpp::bit_cast<Float128>(x));
 }
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/llroundf128.h b/libc/src/math/llroundf128.h
index 59d4d8da582ed..d81d5bd8ab1a5 100644
--- a/libc/src/math/llroundf128.h
+++ b/libc/src/math/llroundf128.h
@@ -9,11 +9,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_LLROUNDF128_H
 #define LLVM_LIBC_SRC_MATH_LLROUNDF128_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
+
 long long llroundf128(float128 x);
 
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/lroundf128.h b/libc/src/math/lroundf128.h
index 4191db5792095..cf6c62c4575da 100644
--- a/libc/src/math/lroundf128.h
+++ b/libc/src/math/lroundf128.h
@@ -9,11 +9,16 @@
 #ifndef LLVM_LIBC_SRC_MATH_LROUNDF128_H
 #define LLVM_LIBC_SRC_MATH_LROUNDF128_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
+
 long lroundf128(float128 x);
 
 } // 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 2fba4e288c1e1..be5fc959165c7 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -383,6 +383,8 @@ static_assert(0 == LIBC_NAMESPACE::shared::isnanl(0.0L));
 static_assert(Float128(0.0) == LIBC_NAMESPACE::shared::ceilf128(Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::floorf128(Float128(0.0)));
+static_assert(0LL == LIBC_NAMESPACE::shared::llroundf128(Float128(0.0)));
+static_assert(0L == LIBC_NAMESPACE::shared::lroundf128(Float128(0.0)));
 static_assert(Float128(0.0) ==
               LIBC_NAMESPACE::shared::nearbyintf128(Float128(0.0)));
 static_assert(Float128(0.0) ==
@@ -493,9 +495,7 @@ static_assert(0.0f ==
               LIBC_NAMESPACE::shared::fsubf128(float128(0.0), float128(0.0)));
 
 static_assert(0LL == LIBC_NAMESPACE::shared::llrintf128(float128(0.0)));
-static_assert(0LL == LIBC_NAMESPACE::shared::llroundf...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/216829


More information about the libc-commits mailing list