[libc-commits] [libc] [libc] Enable more entrypoints for riscv (PR #102055)

Mikhail R. Gadelha via libc-commits libc-commits at lists.llvm.org
Tue Aug 6 07:59:50 PDT 2024


https://github.com/mikhailramalho updated https://github.com/llvm/llvm-project/pull/102055

>From 9fcf4e9eff5d4ca38d625a63c4e4f86a264fba8f Mon Sep 17 00:00:00 2001
From: "Mikhail R. Gadelha" <mikhail at igalia.com>
Date: Mon, 5 Aug 2024 17:19:28 -0300
Subject: [PATCH 1/4] [libc] Enable more entrypoints for riscv

This patch enables more entrypoints for riscv. The changes to the test
cases are introduced to support rv32 which has long double but doesn't
have int128
---
 libc/config/linux/riscv/entrypoints.txt   |  5 +++++
 libc/test/src/math/smoke/SetPayloadTest.h | 17 +++++++++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 15a6827c040c7..51fe6f3522d72 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -576,8 +576,12 @@ if(LIBC_TYPES_HAS_FLOAT128)
     libc.src.math.canonicalizef128
     libc.src.math.ceilf128
     libc.src.math.copysignf128
+    libc.src.math.daddf128
+    libc.src.math.ddivf128
+    libc.src.math.dfmaf128
     libc.src.math.dmulf128
     libc.src.math.dsqrtf128
+    libc.src.math.dsubf128
     libc.src.math.fabsf128
     libc.src.math.fdimf128
     libc.src.math.floorf128
@@ -617,6 +621,7 @@ if(LIBC_TYPES_HAS_FLOAT128)
     libc.src.math.roundevenf128
     libc.src.math.roundf128
     libc.src.math.scalbnf128
+    libc.src.math.setpayloadf128
     libc.src.math.sqrtf128
     libc.src.math.totalorderf128
     libc.src.math.totalordermagf128
diff --git a/libc/test/src/math/smoke/SetPayloadTest.h b/libc/test/src/math/smoke/SetPayloadTest.h
index 4b0dacf3e1544..b72128e1d4c5f 100644
--- a/libc/test/src/math/smoke/SetPayloadTest.h
+++ b/libc/test/src/math/smoke/SetPayloadTest.h
@@ -33,7 +33,12 @@ class SetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     EXPECT_EQ(1, func(&res, T(-1.0)));
     EXPECT_EQ(1, func(&res, T(0x42.1p+0)));
     EXPECT_EQ(1, func(&res, T(-0x42.1p+0)));
-    EXPECT_EQ(1, func(&res, T(StorageType(1) << (FPBits::FRACTION_LEN - 1))));
+
+    FPBits default_snan_payload_bits = FPBits::one();
+    default_snan_payload_bits.set_biased_exponent(FPBits::FRACTION_LEN - 1 +
+                                                  FPBits::EXP_BIAS);
+    T default_snan_payload = default_snan_payload_bits.get_val();
+    EXPECT_EQ(1, func(&res, default_snan_payload));
   }
 
   void testValidPayloads(SetPayloadFunc func) {
@@ -57,7 +62,15 @@ class SetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x123).uintval(),
               FPBits(res).uintval());
 
-    EXPECT_EQ(0, func(&res, T(FPBits::FRACTION_MASK >> 1)));
+    // The following code is creating a NaN manually to prevent a conversion
+    // from BigInt to long double.
+    FPBits default_snan_payload_bits = FPBits::one();
+    default_snan_payload_bits.set_biased_exponent(FPBits::SIG_LEN - 2 +
+                                                  FPBits::EXP_BIAS);
+    default_snan_payload_bits.set_mantissa(FPBits::SIG_MASK - 3);
+    T default_snan_payload = default_snan_payload_bits.get_val();
+
+    EXPECT_EQ(0, func(&res, default_snan_payload));
     EXPECT_TRUE(FPBits(res).is_quiet_nan());
     EXPECT_EQ(
         FPBits::quiet_nan(Sign::POS, FPBits::FRACTION_MASK >> 1).uintval(),

>From c7792deed89c15dfd30d25c3bc1b7afb983b3358 Mon Sep 17 00:00:00 2001
From: "Mikhail R. Gadelha" <mikhail at igalia.com>
Date: Mon, 5 Aug 2024 20:50:19 -0300
Subject: [PATCH 2/4] Renamed variables

---
 libc/test/src/math/smoke/SetPayloadTest.h | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/libc/test/src/math/smoke/SetPayloadTest.h b/libc/test/src/math/smoke/SetPayloadTest.h
index b72128e1d4c5f..3d6a1ca1453c1 100644
--- a/libc/test/src/math/smoke/SetPayloadTest.h
+++ b/libc/test/src/math/smoke/SetPayloadTest.h
@@ -34,11 +34,11 @@ class SetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     EXPECT_EQ(1, func(&res, T(0x42.1p+0)));
     EXPECT_EQ(1, func(&res, T(-0x42.1p+0)));
 
-    FPBits default_snan_payload_bits = FPBits::one();
-    default_snan_payload_bits.set_biased_exponent(FPBits::FRACTION_LEN - 1 +
-                                                  FPBits::EXP_BIAS);
-    T default_snan_payload = default_snan_payload_bits.get_val();
-    EXPECT_EQ(1, func(&res, default_snan_payload));
+    FPBits nan_payload_bits = FPBits::one();
+    nan_payload_bits.set_biased_exponent(FPBits::FRACTION_LEN - 1 +
+                                         FPBits::EXP_BIAS);
+    T nan_payload = nan_payload_bits.get_val();
+    EXPECT_EQ(1, func(&res, nan_payload));
   }
 
   void testValidPayloads(SetPayloadFunc func) {
@@ -64,13 +64,13 @@ class SetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
 
     // The following code is creating a NaN manually to prevent a conversion
     // from BigInt to long double.
-    FPBits default_snan_payload_bits = FPBits::one();
-    default_snan_payload_bits.set_biased_exponent(FPBits::SIG_LEN - 2 +
-                                                  FPBits::EXP_BIAS);
-    default_snan_payload_bits.set_mantissa(FPBits::SIG_MASK - 3);
-    T default_snan_payload = default_snan_payload_bits.get_val();
+    FPBits nan_payload_bits = FPBits::one();
+    nan_payload_bits.set_biased_exponent(FPBits::SIG_LEN - 2 +
+                                         FPBits::EXP_BIAS);
+    nan_payload_bits.set_mantissa(FPBits::SIG_MASK - 3);
+    T nan_payload = nan_payload_bits.get_val();
 
-    EXPECT_EQ(0, func(&res, default_snan_payload));
+    EXPECT_EQ(0, func(&res, nan_payload));
     EXPECT_TRUE(FPBits(res).is_quiet_nan());
     EXPECT_EQ(
         FPBits::quiet_nan(Sign::POS, FPBits::FRACTION_MASK >> 1).uintval(),

>From ca1ea2ac25dc6cc6e4df217c7c602a3853aec3d9 Mon Sep 17 00:00:00 2001
From: "Mikhail R. Gadelha" <mikhail at igalia.com>
Date: Tue, 6 Aug 2024 11:54:40 -0300
Subject: [PATCH 3/4] long double -> float128

Signed-off-by: Mikhail R. Gadelha <mikhail at igalia.com>
---
 libc/test/src/math/smoke/SetPayloadTest.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/test/src/math/smoke/SetPayloadTest.h b/libc/test/src/math/smoke/SetPayloadTest.h
index 3d6a1ca1453c1..8abe01fb9a9ba 100644
--- a/libc/test/src/math/smoke/SetPayloadTest.h
+++ b/libc/test/src/math/smoke/SetPayloadTest.h
@@ -63,7 +63,7 @@ class SetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
               FPBits(res).uintval());
 
     // The following code is creating a NaN manually to prevent a conversion
-    // from BigInt to long double.
+    // from BigInt to float128.
     FPBits nan_payload_bits = FPBits::one();
     nan_payload_bits.set_biased_exponent(FPBits::SIG_LEN - 2 +
                                          FPBits::EXP_BIAS);

>From 910984fbe733e081b7b0e80150603118ac180031 Mon Sep 17 00:00:00 2001
From: "Mikhail R. Gadelha" <mikhail at igalia.com>
Date: Tue, 6 Aug 2024 11:59:34 -0300
Subject: [PATCH 4/4] Fixed comment

---
 libc/test/src/math/smoke/SetPayloadTest.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libc/test/src/math/smoke/SetPayloadTest.h b/libc/test/src/math/smoke/SetPayloadTest.h
index 8abe01fb9a9ba..4bea78f4230a9 100644
--- a/libc/test/src/math/smoke/SetPayloadTest.h
+++ b/libc/test/src/math/smoke/SetPayloadTest.h
@@ -62,8 +62,8 @@ class SetPayloadTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     EXPECT_EQ(FPBits::quiet_nan(Sign::POS, 0x123).uintval(),
               FPBits(res).uintval());
 
-    // The following code is creating a NaN manually to prevent a conversion
-    // from BigInt to float128.
+    // The following code is creating a NaN payload manually to prevent a
+    // conversion from BigInt to float128.
     FPBits nan_payload_bits = FPBits::one();
     nan_payload_bits.set_biased_exponent(FPBits::SIG_LEN - 2 +
                                          FPBits::EXP_BIAS);



More information about the libc-commits mailing list