[libc-commits] [libc] [libc] Make setpayloadsig functions constexpr (PR #223497)
via libc-commits
libc-commits at lists.llvm.org
Mon Sep 14 11:57:47 PDT 2026
https://github.com/Sukumarsawant created https://github.com/llvm/llvm-project/pull/223497
Makes setpayloadsig(f,f16,bf16,f128,etc) function constexpr along with adding tests for them
>From d5f59af47240fbbb323bf1fc1f58e57c1a2c0c6d Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 15 Sep 2026 00:19:03 +0530
Subject: [PATCH 1/2] make setpayloadsig function constexpr
---
libc/src/__support/math/setpayloadsig.h | 2 +-
libc/src/__support/math/setpayloadsigbf16.h | 2 +-
libc/src/__support/math/setpayloadsigf.h | 2 +-
libc/src/__support/math/setpayloadsigf128.h | 2 +-
libc/src/__support/math/setpayloadsigf16.h | 2 +-
libc/src/__support/math/setpayloadsigl.h | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/libc/src/__support/math/setpayloadsig.h b/libc/src/__support/math/setpayloadsig.h
index 2c19ceadfae36..460ff8ab37d7a 100644
--- a/libc/src/__support/math/setpayloadsig.h
+++ b/libc/src/__support/math/setpayloadsig.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadsig(double *res, double pl) {
+LIBC_INLINE constexpr int setpayloadsig(double *res, double pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadsigbf16.h b/libc/src/__support/math/setpayloadsigbf16.h
index 58bf078e7e328..21f0e98792075 100644
--- a/libc/src/__support/math/setpayloadsigbf16.h
+++ b/libc/src/__support/math/setpayloadsigbf16.h
@@ -17,7 +17,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadsigbf16(bfloat16 *res, bfloat16 pl) {
+LIBC_INLINE constexpr int setpayloadsigbf16(bfloat16 *res, bfloat16 pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadsigf.h b/libc/src/__support/math/setpayloadsigf.h
index 95a0540eb4444..7d8b57255ff3a 100644
--- a/libc/src/__support/math/setpayloadsigf.h
+++ b/libc/src/__support/math/setpayloadsigf.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadsigf(float *res, float pl) {
+LIBC_INLINE constexpr int setpayloadsigf(float *res, float pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadsigf128.h b/libc/src/__support/math/setpayloadsigf128.h
index 6a51920911150..c9bd9498cfb74 100644
--- a/libc/src/__support/math/setpayloadsigf128.h
+++ b/libc/src/__support/math/setpayloadsigf128.h
@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadsigf128(float128 *res, float128 pl) {
+LIBC_INLINE constexpr int setpayloadsigf128(float128 *res, float128 pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadsigf16.h b/libc/src/__support/math/setpayloadsigf16.h
index e3629cfe3d00e..92443d4b091d8 100644
--- a/libc/src/__support/math/setpayloadsigf16.h
+++ b/libc/src/__support/math/setpayloadsigf16.h
@@ -20,7 +20,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadsigf16(float16 *res, float16 pl) {
+LIBC_INLINE constexpr int setpayloadsigf16(float16 *res, float16 pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
diff --git a/libc/src/__support/math/setpayloadsigl.h b/libc/src/__support/math/setpayloadsigl.h
index 9b9de4109e06f..7bbfa586b2197 100644
--- a/libc/src/__support/math/setpayloadsigl.h
+++ b/libc/src/__support/math/setpayloadsigl.h
@@ -16,7 +16,7 @@ namespace LIBC_NAMESPACE_DECL {
namespace math {
-LIBC_INLINE int setpayloadsigl(long double *res, long double pl) {
+LIBC_INLINE constexpr int setpayloadsigl(long double *res, long double pl) {
return static_cast<int>(fputil::setpayload</*IsSignaling=*/true>(*res, pl));
}
>From 130b2607ee7a82f8721791322c3b8c441937a059 Mon Sep 17 00:00:00 2001
From: Sukumarsawant <sawantsukumar at gmail.com>
Date: Tue, 15 Sep 2026 00:23:49 +0530
Subject: [PATCH 2/2] add constexpr tests
---
.../shared/shared_math_constexpr_test.cpp | 26 +++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/libc/test/shared/shared_math_constexpr_test.cpp b/libc/test/shared/shared_math_constexpr_test.cpp
index 862c056411f5c..df741c872b78d 100644
--- a/libc/test/shared/shared_math_constexpr_test.cpp
+++ b/libc/test/shared/shared_math_constexpr_test.cpp
@@ -76,6 +76,10 @@ static_assert(0 == [] {
double setpayload_x = 0.0;
return LIBC_NAMESPACE::shared::setpayload(&setpayload_x, 0.0);
}());
+static_assert(0 == [] {
+ double setpayloadsig_x = 0.0;
+ return LIBC_NAMESPACE::shared::setpayloadsig(&setpayloadsig_x, 1.0);
+}());
static_assert(0.0 == [] {
int exp{};
return LIBC_NAMESPACE::shared::frexp(0.0, &exp);
@@ -161,6 +165,10 @@ static_assert(0 == [] {
float setpayload_x = 0.0f;
return LIBC_NAMESPACE::shared::setpayloadf(&setpayload_x, 0.0f);
}());
+static_assert(0 == [] {
+ float setpayloadsig_x = 0.0f;
+ return LIBC_NAMESPACE::shared::setpayloadsigf(&setpayloadsig_x, 1.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));
@@ -261,6 +269,10 @@ static_assert(0 == [] {
float16 setpayload_x = 0.0f16;
return LIBC_NAMESPACE::shared::setpayloadf16(&setpayload_x, 0.0f16);
}());
+static_assert(0 == [] {
+ float16 setpayloadsig_x = 0.0f16;
+ return LIBC_NAMESPACE::shared::setpayloadsigf16(&setpayloadsig_x, 1.0f16);
+}());
static_assert(0LL == LIBC_NAMESPACE::shared::llrintf16(0.0f16));
static_assert(0LL == LIBC_NAMESPACE::shared::llroundf16(0.0f16));
static_assert(0L == LIBC_NAMESPACE::shared::lrintf16(0.0f16));
@@ -350,6 +362,10 @@ static_assert(0 == [] {
long double setpayload_x = 0.0L;
return LIBC_NAMESPACE::shared::setpayloadl(&setpayload_x, 0.0L);
}());
+static_assert(0 == [] {
+ long double setpayloadsig_x = 0.0L;
+ return LIBC_NAMESPACE::shared::setpayloadsigl(&setpayloadsig_x, 1.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 == [] {
@@ -499,6 +515,11 @@ static_assert(0 == [] {
float128 setpayload_x = float128(0.0);
return LIBC_NAMESPACE::shared::setpayloadf128(&setpayload_x, float128(0.0));
}());
+static_assert(0 == [] {
+ float128 setpayloadsig_x = float128(0.0);
+ return LIBC_NAMESPACE::shared::setpayloadsigf128(&setpayloadsig_x,
+ float128(1.0));
+}());
static_assert(0.0f ==
LIBC_NAMESPACE::shared::fmulf128(float128(0.0), float128(0.0)));
static_assert(0.0f ==
@@ -614,6 +635,11 @@ static_assert(0 == [] {
bfloat16 setpayload_x = bfloat16(0.0);
return LIBC_NAMESPACE::shared::setpayloadbf16(&setpayload_x, bfloat16(0.0));
}());
+static_assert(0 == [] {
+ bfloat16 setpayloadsig_x = bfloat16(0.0);
+ return LIBC_NAMESPACE::shared::setpayloadsigbf16(&setpayloadsig_x,
+ bfloat16(1.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