[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