[libc] Remove specific nan payload in math functions (#79133)
authorGuillaume Chatelet <gchatelet@google.com>
Tue, 23 Jan 2024 15:37:36 +0000 (16:37 +0100)
committerGitHub <noreply@github.com>
Tue, 23 Jan 2024 15:37:36 +0000 (16:37 +0100)
24 files changed:
libc/src/__support/FPUtil/DivisionAndRemainderOperations.h
libc/src/__support/FPUtil/generic/sqrt.h
libc/src/__support/FPUtil/generic/sqrt_80_bit_long_double.h
libc/test/UnitTest/FPMatcher.h
libc/test/src/__support/FPUtil/fpbits_test.cpp
libc/test/src/math/FDimTest.h
libc/test/src/math/FmaTest.h
libc/test/src/math/HypotTest.h
libc/test/src/math/ILogbTest.h
libc/test/src/math/LdExpTest.h
libc/test/src/math/NextAfterTest.h
libc/test/src/math/RIntTest.h
libc/test/src/math/RemQuoTest.h
libc/test/src/math/RoundToIntegerTest.h
libc/test/src/math/smoke/FDimTest.h
libc/test/src/math/smoke/FmaTest.h
libc/test/src/math/smoke/HypotTest.h
libc/test/src/math/smoke/ILogbTest.h
libc/test/src/math/smoke/LdExpTest.h
libc/test/src/math/smoke/NextAfterTest.h
libc/test/src/math/smoke/NextTowardTest.h
libc/test/src/math/smoke/RIntTest.h
libc/test/src/math/smoke/RemQuoTest.h
libc/test/src/math/smoke/RoundToIntegerTest.h

index ef9593a42b00557757d2390876bbac1c3af3b668..2859a248b95e3903b212bd7834cffcbc482a0627 100644 (file)
@@ -31,7 +31,7 @@ LIBC_INLINE T remquo(T x, T y, int &q) {
   if (ybits.is_nan())
     return y;
   if (xbits.is_inf() || ybits.is_zero())
-    return FPBits<T>::build_quiet_nan(fputil::Sign::POS, 1).get_val();
+    return FPBits<T>::build_quiet_nan().get_val();
 
   if (xbits.is_zero()) {
     q = 0;
index 0a0690ec1463b9dfbe422fa7354046b0b9378245..6650227a014d21c7705bf916f8d079a70d7cc051 100644 (file)
@@ -71,12 +71,10 @@ LIBC_INLINE cpp::enable_if_t<cpp::is_floating_point_v<T>, T> sqrt(T x) {
     return x86::sqrt(x);
   } else {
     // IEEE floating points formats.
-    using Sign = fputil::Sign;
     using FPBits_t = typename fputil::FPBits<T>;
     using StorageType = typename FPBits_t::StorageType;
     constexpr StorageType ONE = StorageType(1) << FPBits_t::FRACTION_LEN;
-    constexpr auto FLT_NAN =
-        FPBits_t::build_quiet_nan(Sign::POS, ONE >> 1).get_val();
+    constexpr auto FLT_NAN = FPBits_t::build_quiet_nan().get_val();
 
     FPBits_t bits(x);
 
index b0a3776029ca78a70cb62a591fc42fe21143c5e3..72977f616b5dd31b3ac9cdd0f5af2538279ecc0a 100644 (file)
@@ -38,9 +38,8 @@ LIBC_INLINE long double sqrt(long double x);
 LIBC_INLINE long double sqrt(long double x) {
   using LDBits = FPBits<long double>;
   using StorageType = typename LDBits::StorageType;
-  using Sign = fputil::Sign;
   constexpr StorageType ONE = StorageType(1) << int(LDBits::FRACTION_LEN);
-  constexpr auto LDNAN = LDBits::build_quiet_nan(Sign::POS, ONE >> 1).get_val();
+  constexpr auto LDNAN = LDBits::build_quiet_nan().get_val();
 
   LDBits bits(x);
 
index 9880fa51c54811aea2a0b43519c80be59116ccb4..ad2fc0439fd79046d7b895d821e4711d3ce10d06 100644 (file)
@@ -68,7 +68,7 @@ template <typename T> struct FPTest : public Test {
       LIBC_NAMESPACE::cpp::numeric_limits<StorageType>::max();
   static constexpr T zero = T(FPBits::zero(Sign::POS));
   static constexpr T neg_zero = T(FPBits::zero(Sign::NEG));
-  static constexpr T aNaN = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  static constexpr T aNaN = T(FPBits::build_quiet_nan());
   static constexpr T sNaN = T(FPBits::build_nan(Sign::POS, 1));
   static constexpr T inf = T(FPBits::inf(Sign::POS));
   static constexpr T neg_inf = T(FPBits::inf(Sign::NEG));
@@ -97,7 +97,7 @@ template <typename T> struct FPTest : public Test {
       LIBC_NAMESPACE::cpp::numeric_limits<StorageType>::max();                 \
   const T zero = T(FPBits::zero(Sign::POS));                                   \
   const T neg_zero = T(FPBits::zero(Sign::NEG));                               \
-  const T aNaN = T(FPBits::build_quiet_nan(Sign::POS, 1));                     \
+  const T aNaN = T(FPBits::build_quiet_nan());                                 \
   const T sNaN = T(FPBits::build_nan(Sign::POS, 1));                           \
   const T inf = T(FPBits::inf(Sign::POS));                                     \
   const T neg_inf = T(FPBits::inf(Sign::NEG));                                 \
index 6092945811ce1c1b95c47e705a1acba40067239b..aadcd3fe92b9e54f28a42ef164834577df8c5735 100644 (file)
@@ -287,7 +287,7 @@ TEST(LlvmLibcFPBitsTest, FloatType) {
   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
                "0xBF900000 = (S: 1, E: 0x007F, M: 0x00100000)");
 
-  FloatBits quiet_nan = FloatBits::build_quiet_nan(Sign::POS, 1);
+  FloatBits quiet_nan = FloatBits::build_quiet_nan();
   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
 }
 
@@ -298,8 +298,7 @@ TEST(LlvmLibcFPBitsTest, DoubleType) {
                "(+Infinity)");
   EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::inf(Sign::NEG)).c_str(),
                "(-Infinity)");
-  EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::build_nan(Sign::POS, 1)).c_str(),
-               "(NaN)");
+  EXPECT_STREQ(LIBC_NAMESPACE::str(DoubleBits::build_nan()).c_str(), "(NaN)");
 
   DoubleBits zero(0.0);
   EXPECT_TRUE(zero.is_pos());
@@ -349,7 +348,7 @@ TEST(LlvmLibcFPBitsTest, DoubleType) {
   EXPECT_STREQ(LIBC_NAMESPACE::str(negnum).c_str(),
                "0xBFF2000000000000 = (S: 1, E: 0x03FF, M: 0x0002000000000000)");
 
-  DoubleBits quiet_nan = DoubleBits::build_quiet_nan(Sign::POS, 1);
+  DoubleBits quiet_nan = DoubleBits::build_quiet_nan();
   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
 }
 
@@ -431,7 +430,7 @@ TEST(LlvmLibcFPBitsTest, X86LongDoubleType) {
       "0x000000000000BFFF9000000000000000 = "
       "(S: 1, E: 0x3FFF, I: 1, M: 0x00000000000000001000000000000000)");
 
-  LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan(Sign::POS, 1);
+  LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan();
   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
 }
 #else
@@ -506,7 +505,7 @@ TEST(LlvmLibcFPBitsTest, LongDoubleType) {
                "0xBFFF2000000000000000000000000000 = "
                "(S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)");
 
-  LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan(Sign::POS, 1);
+  LongDoubleBits quiet_nan = LongDoubleBits::build_quiet_nan();
   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
 #endif
 }
@@ -581,7 +580,7 @@ TEST(LlvmLibcFPBitsTest, Float128Type) {
                "0xBFFF2000000000000000000000000000 = "
                "(S: 1, E: 0x3FFF, M: 0x00002000000000000000000000000000)");
 
-  Float128Bits quiet_nan = Float128Bits::build_quiet_nan(Sign::POS, 1);
+  Float128Bits quiet_nan = Float128Bits::build_quiet_nan();
   EXPECT_EQ(quiet_nan.is_quiet_nan(), true);
 }
 #endif // LIBC_COMPILER_HAS_FLOAT128
index c3d9cb1801cd4401c718b7f9b86c3d3787e0da70..46df2b40e64bd1be605428ad863fc6787abdd0f7 100644 (file)
@@ -24,7 +24,7 @@ public:
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   void test_na_n_arg(FuncPtr func) {
     EXPECT_FP_EQ(nan, func(nan, inf));
index 4343b38053dc47efe3326268067aaf18d9aac7ae..8cc340e9260ff2c53542cb2fda4d630658483af8 100644 (file)
@@ -32,7 +32,7 @@ private:
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   static constexpr StorageType MAX_NORMAL = FPBits::max_normal().uintval();
   static constexpr StorageType MIN_NORMAL = FPBits::min_normal().uintval();
index 0b85f68fda82aecb62bdb5351bf9556775ea16cf..2990072fd5c668c467f6773be7eff3d7664d56ea 100644 (file)
@@ -25,7 +25,7 @@ private:
   using FPBits = LIBC_NAMESPACE::fputil::FPBits<T>;
   using Sign = LIBC_NAMESPACE::fputil::Sign;
   using StorageType = typename FPBits::StorageType;
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
   const T inf = T(FPBits::inf());
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero());
index 223de789999afea6e91856ce2a8c050c1cd75655..fe28fab9d777c997c348691a3c8dab0be5ced825 100644 (file)
@@ -28,7 +28,7 @@ public:
     using Sign = LIBC_NAMESPACE::fputil::Sign;
     EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::POS))));
     EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::NEG))));
-    EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan(Sign::POS, 1))));
+    EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan())));
     EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::POS))));
     EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::NEG))));
   }
index 3a4baabbf10e663cf817c8647b5d6ae7eeb08456..08a14a90c1226366937178b6c32d319a165e0f50 100644 (file)
@@ -29,7 +29,7 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   // A normalized mantissa to be used with tests.
   static constexpr StorageType MANTISSA = NormalFloat::ONE + 0x1234;
index 9ff3bf73d2ede1741a5f77db2e861ff4795e700f..f9ae4a4ec5c021a0ca7887d5c6b6be06d78ef312 100644 (file)
@@ -27,7 +27,7 @@ class NextAfterTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   const StorageType min_subnormal = FPBits::min_subnormal().uintval();
   const StorageType max_subnormal = FPBits::max_subnormal().uintval();
index b478e3f65dbc8ea0e46c6acbda2a22958c751996..3af7b6fe6f6d4fa0159763f3f7e2dc417d1ea444 100644 (file)
@@ -38,7 +38,7 @@ private:
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   static constexpr StorageType MIN_SUBNORMAL =
       FPBits::min_subnormal().uintval();
index 0ee41f4bf9acf9d8e00616d63d2c4ef2ff7760ef..bbc266764c1c2115ca6e21cecf8824469a6c5859 100644 (file)
@@ -28,7 +28,7 @@ class RemQuoTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   static constexpr StorageType MIN_SUBNORMAL =
       FPBits::min_subnormal().uintval();
index 6866c23cb99ca327dfbc7e271c0f00443dbf5239..f75aaa348bd0068db8633f94c619997a76cb992a 100644 (file)
@@ -37,7 +37,7 @@ private:
   const F neg_zero = F(FPBits::zero(Sign::NEG));
   const F inf = F(FPBits::inf());
   const F neg_inf = F(FPBits::inf(Sign::NEG));
-  const F nan = F(FPBits::build_quiet_nan(Sign::POS, 1));
+  const F nan = F(FPBits::build_quiet_nan());
 
   static constexpr StorageType MAX_NORMAL = FPBits::max_normal().uintval();
   static constexpr StorageType MIN_NORMAL = FPBits::min_normal().uintval();
index c3d9cb1801cd4401c718b7f9b86c3d3787e0da70..46df2b40e64bd1be605428ad863fc6787abdd0f7 100644 (file)
@@ -24,7 +24,7 @@ public:
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   void test_na_n_arg(FuncPtr func) {
     EXPECT_FP_EQ(nan, func(nan, inf));
index 337ce659a23e1763115f221685149ae209584df5..106ba1405a9686353d97d2f0df6897a089eed7b1 100644 (file)
@@ -25,7 +25,7 @@ private:
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
 public:
   void test_special_numbers(Func func) {
index 67110536b962389ad1caab55535264d989ed8ef6..5400fc0730d8a47f0b7adeebe0499db3b4111b23 100644 (file)
@@ -22,7 +22,7 @@ private:
   using FPBits = LIBC_NAMESPACE::fputil::FPBits<T>;
   using StorageType = typename FPBits::StorageType;
   using Sign = LIBC_NAMESPACE::fputil::Sign;
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
   const T inf = T(FPBits::inf(Sign::POS));
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
index 223de789999afea6e91856ce2a8c050c1cd75655..fe28fab9d777c997c348691a3c8dab0be5ced825 100644 (file)
@@ -28,7 +28,7 @@ public:
     using Sign = LIBC_NAMESPACE::fputil::Sign;
     EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::POS))));
     EXPECT_EQ(FP_ILOGB0, func(T(FPBits::zero(Sign::NEG))));
-    EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan(Sign::POS, 1))));
+    EXPECT_EQ(FP_ILOGBNAN, func(T(FPBits::build_quiet_nan())));
     EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::POS))));
     EXPECT_EQ(INT_MAX, func(T(FPBits::inf(Sign::NEG))));
   }
index 3a4baabbf10e663cf817c8647b5d6ae7eeb08456..08a14a90c1226366937178b6c32d319a165e0f50 100644 (file)
@@ -29,7 +29,7 @@ class LdExpTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   // A normalized mantissa to be used with tests.
   static constexpr StorageType MANTISSA = NormalFloat::ONE + 0x1234;
index 1dd07b3d2f93dc08136c24b5a038eef5ecf783d4..859e2c74a36935dafa2cad947c17c9696c36239c 100644 (file)
@@ -38,7 +38,7 @@ class NextAfterTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   static constexpr StorageType min_subnormal =
       FPBits::min_subnormal().uintval();
index d65cc5d84d35a580a73705825316581b56b5e51f..c9f07b993f04b5b77ddbaa05b8a0e37db7b22252 100644 (file)
@@ -40,11 +40,11 @@ class NextTowardTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
   const long double to_zero = ToFPBits::zero().get_val();
   const long double to_neg_zero = ToFPBits::zero(Sign::NEG).get_val();
-  const long double to_nan = ToFPBits::build_quiet_nan(Sign::POS, 1).get_val();
+  const long double to_nan = ToFPBits::build_quiet_nan().get_val();
 
   static constexpr StorageType min_subnormal =
       FPBits::min_subnormal().uintval();
index 7bbbe5430157038aa45221f603b35bb93493d6e2..bd99e634badbdffc0efb74ed01bb581201125096 100644 (file)
@@ -35,7 +35,7 @@ private:
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
 public:
   void testSpecialNumbers(RIntFunc func) {
index 5f5cbd4964a62fad9fa2795b0aed47caf9b51fa1..739661f2d9619e4c8bfb01b8105bfb469efc02a5 100644 (file)
@@ -25,7 +25,7 @@ class RemQuoTestTemplate : public LIBC_NAMESPACE::testing::Test {
   const T neg_inf = T(FPBits::inf(Sign::NEG));
   const T zero = T(FPBits::zero(Sign::POS));
   const T neg_zero = T(FPBits::zero(Sign::NEG));
-  const T nan = T(FPBits::build_quiet_nan(Sign::POS, 1));
+  const T nan = T(FPBits::build_quiet_nan());
 
 public:
   typedef T (*RemQuoFunc)(T, T, int *);
index 77c65aa492e22dec850842ed7826b9da7f3bf580..404155604645c5b3cc1d738c4849b78ca20c9cf0 100644 (file)
@@ -34,7 +34,7 @@ private:
   const F neg_zero = F(FPBits::zero(Sign::NEG));
   const F inf = F(FPBits::inf(Sign::POS));
   const F neg_inf = F(FPBits::inf(Sign::NEG));
-  const F nan = F(FPBits::build_quiet_nan(Sign::POS, 1));
+  const F nan = F(FPBits::build_quiet_nan());
 
   static constexpr StorageType MAX_SUBNORMAL =
       FPBits::max_subnormal().uintval();