[libc-commits] [libc] 922fb78 - [libc][math] Qualify setpayload functions to constexpr (#195582)
via libc-commits
libc-commits at lists.llvm.org
Sun May 3 22:55:59 PDT 2026
Author: Kiriti Ponduri
Date: 2026-05-04T08:55:53+03:00
New Revision: 922fb786e0fdf8fae7795c68aae37a7d3ba2b15c
URL: https://github.com/llvm/llvm-project/commit/922fb786e0fdf8fae7795c68aae37a7d3ba2b15c
DIFF: https://github.com/llvm/llvm-project/commit/922fb786e0fdf8fae7795c68aae37a7d3ba2b15c.diff
LOG: [libc][math] Qualify setpayload functions to constexpr (#195582)
Signed-off-by: udaykiriti <udaykiriti624 at gmail.com>
Added:
Modified:
libc/src/__support/FPUtil/BasicOperations.h
libc/src/__support/math/setpayload.h
libc/src/__support/math/setpayloadbf16.h
libc/src/__support/math/setpayloadf.h
libc/src/__support/math/setpayloadf128.h
libc/src/__support/math/setpayloadf16.h
libc/src/__support/math/setpayloadl.h
libc/test/shared/CMakeLists.txt
libc/test/shared/shared_math_constexpr_test.cpp
Removed:
################################################################################
diff --git a/libc/src/__support/FPUtil/BasicOperations.h b/libc/src/__support/FPUtil/BasicOperations.h
index e6f5f29e73726..54295fdb3e52f 100644
--- a/libc/src/__support/FPUtil/BasicOperations.h
+++ b/libc/src/__support/FPUtil/BasicOperations.h
@@ -386,7 +386,7 @@ getpayload(T x) {
}
template <bool IsSignaling, typename T>
-LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<T>, bool>
+LIBC_INLINE constexpr cpp::enable_if_t<cpp::is_floating_point_v<T>, bool>
setpayload(T &res, T pl) {
using FPBits = FPBits<T>;
FPBits pl_bits(pl);
diff --git a/libc/src/__support/math/setpayload.h b/libc/src/__support/math/setpayload.h
index f9fa79ce76e1d..d0226107a3447 100644
--- a/libc/src/__support/math/setpayload.h
+++ b/libc/src/__support/math/setpayload.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayload(double *res, double pl) {
+LIBC_INLINE constexpr int setpayload(double *res, double pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadbf16.h b/libc/src/__support/math/setpayloadbf16.h
index 31e02eb4f7ccb..5dcea9894f1e6 100644
--- a/libc/src/__support/math/setpayloadbf16.h
+++ b/libc/src/__support/math/setpayloadbf16.h
@@ -17,7 +17,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadbf16(bfloat16 *res, bfloat16 pl) {
+LIBC_INLINE constexpr int setpayloadbf16(bfloat16 *res, bfloat16 pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadf.h b/libc/src/__support/math/setpayloadf.h
index 2431f253956a1..1a90207299d3a 100644
--- a/libc/src/__support/math/setpayloadf.h
+++ b/libc/src/__support/math/setpayloadf.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadf(float *res, float pl) {
+LIBC_INLINE constexpr int setpayloadf(float *res, float pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadf128.h b/libc/src/__support/math/setpayloadf128.h
index cf301e92c69b3..bacd17af658e0 100644
--- a/libc/src/__support/math/setpayloadf128.h
+++ b/libc/src/__support/math/setpayloadf128.h
@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadf128(float128 *res, float128 pl) {
+LIBC_INLINE constexpr int setpayloadf128(float128 *res, float128 pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadf16.h b/libc/src/__support/math/setpayloadf16.h
index 4a417f0c525eb..3595f44b83b0a 100644
--- a/libc/src/__support/math/setpayloadf16.h
+++ b/libc/src/__support/math/setpayloadf16.h
@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadf16(float16 *res, float16 pl) {
+LIBC_INLINE constexpr int setpayloadf16(float16 *res, float16 pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadl.h b/libc/src/__support/math/setpayloadl.h
index d5ed051766827..8cc754b044168 100644
--- a/libc/src/__support/math/setpayloadl.h
+++ b/libc/src/__support/math/setpayloadl.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadl(long double *res, long double pl) {
+LIBC_INLINE constexpr int setpayloadl(long double *res, long double pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/false>(*res, pl));
}
diff --git a/libc/test/shared/CMakeLists.txt b/libc/test/shared/CMakeLists.txt
index f632843d31284..16235bd4bf1e5 100644
--- a/libc/test/shared/CMakeLists.txt
+++ b/libc/test/shared/CMakeLists.txt
@@ -678,6 +678,12 @@ add_fp_unittest(
libc.src.__support.math.scalbnf128
libc.src.__support.math.scalbnf16
libc.src.__support.math.scalbnl
+ libc.src.__support.math.setpayload
+ libc.src.__support.math.setpayloadbf16
+ libc.src.__support.math.setpayloadf
+ libc.src.__support.math.setpayloadf128
+ libc.src.__support.math.setpayloadf16
+ libc.src.__support.math.setpayloadl
libc.src.__support.math.sqrtl
libc.src.__support.math.ufromfp
libc.src.__support.math.ufromfpbf16
diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 964c1f9e97f3a..1a4c8186d3321 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -62,6 +62,10 @@ static_assert(0.0 == [] {
static_assert(0.0 == LIBC_NAMESPACE::shared::ldexp(0.0, 0.0));
static_assert(0.0 == LIBC_NAMESPACE::shared::scalbln(0.0, 0.0));
static_assert(0.0 == LIBC_NAMESPACE::shared::scalbn(0.0, 0.0));
+static_assert(0 == [] {
+ double setpayload_x = 0.0;
+ return LIBC_NAMESPACE::shared::setpayload(&setpayload_x, 0.0);
+}());
static_assert(0.0 == [] {
int exp{};
return LIBC_NAMESPACE::shared::frexp(0.0, &exp);
@@ -122,6 +126,10 @@ static_assert(0.0f == [] {
}());
static_assert(0.0f == LIBC_NAMESPACE::shared::scalblnf(0.0f, 0.0));
static_assert(0.0f == LIBC_NAMESPACE::shared::scalbnf(0.0f, 0.0));
+static_assert(0 == [] {
+ float setpayload_x = 0.0f;
+ return LIBC_NAMESPACE::shared::setpayloadf(&setpayload_x, 0.0f);
+}());
static_assert(0.0f == LIBC_NAMESPACE::shared::fmul(0.0, 0.0));
static_assert(0.0f == LIBC_NAMESPACE::shared::fsub(0.0, 0.0));
static_assert(0LL == LIBC_NAMESPACE::shared::llrintf(0.0f));
@@ -200,6 +208,10 @@ static_assert(0.0f16 == [] {
}());
static_assert(0.0f16 == LIBC_NAMESPACE::shared::scalblnf16(0.0f16, 0.0));
static_assert(0.0f16 == LIBC_NAMESPACE::shared::scalbnf16(0.0f16, 0.0));
+static_assert(0 == [] {
+ float16 setpayload_x = 0.0f16;
+ return LIBC_NAMESPACE::shared::setpayloadf16(&setpayload_x, 0.0f16);
+}());
static_assert(0LL == LIBC_NAMESPACE::shared::llrintf16(0.0));
static_assert(0LL == LIBC_NAMESPACE::shared::llroundf16(0.0f16));
static_assert(0L == LIBC_NAMESPACE::shared::lrintf16(0.0f16));
@@ -267,6 +279,10 @@ static_assert(0.0L == [] {
static_assert(0.0L == LIBC_NAMESPACE::shared::ldexpl(0.0L, 0.0));
static_assert(0.0L == LIBC_NAMESPACE::shared::scalblnl(0.0L, 0.0));
static_assert(0.0L == LIBC_NAMESPACE::shared::scalbnl(0.0L, 0.0));
+static_assert(0 == [] {
+ long double setpayload_x = 0.0L;
+ return LIBC_NAMESPACE::shared::setpayloadl(&setpayload_x, 0.0L);
+}());
static_assert(0.0f == LIBC_NAMESPACE::shared::fmull(0.0L, 0.0L));
static_assert(0.0f == LIBC_NAMESPACE::shared::fsubl(0.0L, 0.0L));
static_assert(0.0L == [] {
@@ -375,6 +391,10 @@ 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 ==
@@ -480,6 +500,10 @@ static_assert(bfloat16(0.0) ==
LIBC_NAMESPACE::shared::scalblnbf16(bfloat16(0.0), 0.0));
static_assert(bfloat16(0.0) ==
LIBC_NAMESPACE::shared::scalbnbf16(bfloat16(0.0), 0.0));
+static_assert(0 == [] {
+ bfloat16 setpayload_x = bfloat16(0.0);
+ return LIBC_NAMESPACE::shared::setpayloadbf16(&setpayload_x, bfloat16(0.0));
+}());
static_assert(bfloat16(0.0) == [] {
int exp{};
return LIBC_NAMESPACE::shared::frexpbf16(bfloat16(0.0), &exp);
More information about the libc-commits
mailing list