[libc-commits] [libc] [llvm] [libc][math] Refactor powf to Header Only. (PR #176531)
via libc-commits
libc-commits at lists.llvm.org
Fri Jan 16 18:31:55 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: Anonmiraj (AnonMiraj)
<details>
<summary>Changes</summary>
@<!-- -->bassiounix
closes : https://github.com/llvm/llvm-project/issues/176517
---
Patch is 98.04 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/176531.diff
9 Files Affected:
- (modified) libc/shared/math.h (+1)
- (added) libc/shared/math/powf.h (+22)
- (modified) libc/src/__support/math/CMakeLists.txt (+19)
- (added) libc/src/__support/math/powf.h (+1039)
- (modified) libc/src/math/generic/CMakeLists.txt (+1-12)
- (modified) libc/src/math/generic/powf.cpp (+2-1017)
- (modified) libc/test/shared/CMakeLists.txt (+1)
- (modified) libc/test/shared/shared_math_test.cpp (+1)
- (modified) utils/bazel/llvm-project-overlay/libc/BUILD.bazel (+22-10)
``````````diff
diff --git a/libc/shared/math.h b/libc/shared/math.h
index 017c94f8ad54a..9705cf2a9762b 100644
--- a/libc/shared/math.h
+++ b/libc/shared/math.h
@@ -74,6 +74,7 @@
#include "math/logbf.h"
#include "math/logbf128.h"
#include "math/logbf16.h"
+#include "math/powf.h"
#include "math/rsqrtf.h"
#include "math/rsqrtf16.h"
#include "math/sin.h"
diff --git a/libc/shared/math/powf.h b/libc/shared/math/powf.h
new file mode 100644
index 0000000000000..c097ab7b31669
--- /dev/null
+++ b/libc/shared/math/powf.h
@@ -0,0 +1,22 @@
+//===-- Shared powf function ------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SHARED_MATH_POWF_H
+#define LLVM_LIBC_SHARED_MATH_POWF_H
+#include "shared/libc_common.h"
+#include "src/__support/math/powf.h"
+
+namespace LIBC_NAMESPACE_DECL {
+namespace shared {
+
+using math::powf;
+
+} // namespace shared
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SHARED_MATH_POWF_H
diff --git a/libc/src/__support/math/CMakeLists.txt b/libc/src/__support/math/CMakeLists.txt
index cb03b18678145..b2924b55d57d4 100644
--- a/libc/src/__support/math/CMakeLists.txt
+++ b/libc/src/__support/math/CMakeLists.txt
@@ -1139,6 +1139,25 @@ add_header_library(
libc.src.__support.uint128
)
+add_header_library(
+ powf
+ HDRS
+ powf.h
+ DEPENDS
+ libc.src.__support.CPP.bit
+ libc.src.__support.FPUtil.fenv_impl
+ libc.src.__support.FPUtil.fp_bits
+ libc.src.__support.FPUtil.multiply_add
+ libc.src.__support.FPUtil.nearest_integer
+ libc.src.__support.FPUtil.polyeval
+ libc.src.__support.FPUtil.sqrt
+ libc.src.__support.FPUtil.triple_double
+ libc.src.__support.macros.optimization
+ libc.src.__support.math.common_constants
+ libc.src.__support.math.exp10f
+ libc.src.__support.math.exp2f
+)
+
add_header_library(
sin
HDRS
diff --git a/libc/src/__support/math/powf.h b/libc/src/__support/math/powf.h
new file mode 100644
index 0000000000000..c84076230cc92
--- /dev/null
+++ b/libc/src/__support/math/powf.h
@@ -0,0 +1,1039 @@
+//===-- Implementation header for powf ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_POWF_H
+#define LLVM_LIBC_SRC___SUPPORT_MATH_POWF_H
+
+#include "src/__support/CPP/bit.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/PolyEval.h"
+#include "src/__support/FPUtil/double_double.h"
+#include "src/__support/FPUtil/multiply_add.h"
+#include "src/__support/FPUtil/nearest_integer.h"
+#include "src/__support/FPUtil/sqrt.h" // Speedup for powf(x, 1/2) = sqrtf(x)
+#include "src/__support/FPUtil/triple_double.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
+#include "src/__support/math/common_constants.h" // Lookup tables EXP_M1 and EXP_M2.
+#include "src/__support/math/exp10f.h" // Speedup for powf(10, y) = exp10f(y)
+#include "src/__support/math/exp2f.h" // Speedup for powf(2, y) = exp2f(y)
+#include "src/__support/math/exp_constants.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+namespace math {
+
+using fputil::DoubleDouble;
+using fputil::TripleDouble;
+
+namespace {
+
+using namespace common_constants_internal;
+
+#ifdef LIBC_MATH_HAS_SKIP_ACCURATE_PASS
+alignas(16) constexpr DoubleDouble LOG2_R_DD[128] = {
+ {0.0, 0.0},
+ {-0x1.177c23362928cp-25, 0x1.72c8p-7},
+ {-0x1.179e0caa9c9abp-22, 0x1.744p-6},
+ {-0x1.c6cea541f5b7p-23, 0x1.184cp-5},
+ {-0x1.66c4d4e554434p-22, 0x1.773ap-5},
+ {-0x1.70700a00fdd55p-24, 0x1.d6ecp-5},
+ {0x1.53002a4e86631p-23, 0x1.1bb3p-4},
+ {0x1.fcd15f101c142p-25, 0x1.4c56p-4},
+ {0x1.25b3eed319cedp-22, 0x1.7d6p-4},
+ {-0x1.4195120d8486fp-22, 0x1.960dp-4},
+ {0x1.45b878e27d0d9p-23, 0x1.c7b5p-4},
+ {0x1.770744593a4cbp-22, 0x1.f9c9p-4},
+ {0x1.c673032495d24p-22, 0x1.097ep-3},
+ {-0x1.1eaa65b49696ep-22, 0x1.22dbp-3},
+ {0x1.b2866f2850b22p-22, 0x1.3c6f8p-3},
+ {0x1.8ee37cd2ea9d3p-25, 0x1.494f8p-3},
+ {0x1.7e86f9c2154fbp-24, 0x1.633a8p-3},
+ {0x1.8e3cfc25f0ce6p-26, 0x1.7046p-3},
+ {0x1.57f7a64ccd537p-28, 0x1.8a898p-3},
+ {-0x1.a761c09fbd2aep-22, 0x1.97c2p-3},
+ {0x1.24bea9a2c66f3p-22, 0x1.b26p-3},
+ {-0x1.60002ccfe43f5p-25, 0x1.bfc68p-3},
+ {0x1.69f220e97f22cp-22, 0x1.dac2p-3},
+ {-0x1.6164f64c210ep-22, 0x1.e858p-3},
+ {-0x1.0c1678ae89767p-24, 0x1.01d9cp-2},
+ {-0x1.f26a05c813d57p-22, 0x1.08bdp-2},
+ {0x1.4d8fc561c8d44p-24, 0x1.169cp-2},
+ {-0x1.362ad8f7ca2dp-22, 0x1.1d984p-2},
+ {0x1.2b13cd6c4d042p-22, 0x1.249ccp-2},
+ {-0x1.1c8f11979a5dbp-22, 0x1.32cp-2},
+ {0x1.c2ab3edefe569p-23, 0x1.39de8p-2},
+ {0x1.7c3eca28e69cap-26, 0x1.4106p-2},
+ {-0x1.34c4e99e1c6c6p-24, 0x1.4f6fcp-2},
+ {-0x1.194a871b63619p-22, 0x1.56b24p-2},
+ {0x1.e3dd5c1c885aep-23, 0x1.5dfdcp-2},
+ {-0x1.6ccf3b1129b7cp-23, 0x1.6552cp-2},
+ {-0x1.2f346e2bf924bp-23, 0x1.6cb1p-2},
+ {-0x1.fa61aaa59c1d8p-23, 0x1.7b8ap-2},
+ {0x1.90c11fd32a3abp-22, 0x1.8304cp-2},
+ {0x1.57f7a64ccd537p-27, 0x1.8a898p-2},
+ {0x1.249ba76fee235p-27, 0x1.9218p-2},
+ {-0x1.aad2729b21ae5p-23, 0x1.99b08p-2},
+ {0x1.71810a5e1818p-22, 0x1.a8ff8p-2},
+ {-0x1.6172fe015e13cp-27, 0x1.b0b68p-2},
+ {0x1.5ec6c1bfbf89ap-24, 0x1.b877cp-2},
+ {0x1.678bf6cdedf51p-24, 0x1.c0438p-2},
+ {0x1.c2d45fe43895ep-22, 0x1.c819cp-2},
+ {-0x1.9ee52ed49d71dp-22, 0x1.cffbp-2},
+ {0x1.5786af187a96bp-27, 0x1.d7e6cp-2},
+ {0x1.3ab0dc56138c9p-23, 0x1.dfdd8p-2},
+ {0x1.fe538ab34efb5p-22, 0x1.e7df4p-2},
+ {-0x1.e4fee07aa4b68p-22, 0x1.efec8p-2},
+ {-0x1.172f32fe67287p-22, 0x1.f804cp-2},
+ {-0x1.9a83ff9ab9cc8p-22, 0x1.00144p-1},
+ {-0x1.68cb06cece193p-22, 0x1.042bep-1},
+ {0x1.8cd71ddf82e2p-22, 0x1.08494p-1},
+ {0x1.5e18ab2df3ae6p-22, 0x1.0c6cap-1},
+ {0x1.5dee4d9d8a273p-25, 0x1.1096p-1},
+ {0x1.fcd15f101c142p-26, 0x1.14c56p-1},
+ {-0x1.2474b0f992ba1p-23, 0x1.18faep-1},
+ {0x1.4b5a92a606047p-24, 0x1.1d368p-1},
+ {0x1.16186fcf54bbdp-22, 0x1.21786p-1},
+ {0x1.18efabeb7d722p-27, 0x1.25c0ap-1},
+ {-0x1.e5fc7d238691dp-24, 0x1.2a0f4p-1},
+ {0x1.f5809faf6283cp-22, 0x1.2e644p-1},
+ {0x1.f5809faf6283cp-22, 0x1.2e644p-1},
+ {0x1.c6e1dcd0cb449p-22, 0x1.32bfep-1},
+ {0x1.76e0e8f74b4d5p-22, 0x1.37222p-1},
+ {-0x1.cb82c89692d99p-24, 0x1.3b8b2p-1},
+ {-0x1.63161c5432aebp-22, 0x1.3ffaep-1},
+ {0x1.458104c41b901p-22, 0x1.44716p-1},
+ {0x1.458104c41b901p-22, 0x1.44716p-1},
+ {-0x1.cd9d0cde578d5p-22, 0x1.48efp-1},
+ {0x1.b9884591add87p-26, 0x1.4d738p-1},
+ {0x1.c6042978605ffp-22, 0x1.51ff2p-1},
+ {-0x1.fc4c96b37dcf6p-22, 0x1.56922p-1},
+ {-0x1.2f346e2bf924bp-24, 0x1.5b2c4p-1},
+ {-0x1.2f346e2bf924bp-24, 0x1.5b2c4p-1},
+ {0x1.c4e4fbb68a4d1p-22, 0x1.5fcdcp-1},
+ {-0x1.9d499bd9b3226p-23, 0x1.6476ep-1},
+ {-0x1.f89b355ede26fp-23, 0x1.69278p-1},
+ {-0x1.f89b355ede26fp-23, 0x1.69278p-1},
+ {0x1.53c7e319f6e92p-24, 0x1.6ddfcp-1},
+ {-0x1.b291f070528c7p-22, 0x1.729fep-1},
+ {0x1.2967a451a7b48p-25, 0x1.7767cp-1},
+ {0x1.2967a451a7b48p-25, 0x1.7767cp-1},
+ {0x1.244fcff690fcep-22, 0x1.7c37ap-1},
+ {0x1.46fd97f5dc572p-23, 0x1.810fap-1},
+ {0x1.46fd97f5dc572p-23, 0x1.810fap-1},
+ {-0x1.f3a7352663e5p-22, 0x1.85efep-1},
+ {0x1.b3cda690370b5p-23, 0x1.8ad84p-1},
+ {0x1.b3cda690370b5p-23, 0x1.8ad84p-1},
+ {0x1.3226b211bf1d9p-23, 0x1.8fc92p-1},
+ {0x1.d24b136c101eep-23, 0x1.94c28p-1},
+ {0x1.d24b136c101eep-23, 0x1.94c28p-1},
+ {0x1.7c40c7907e82ap-22, 0x1.99c48p-1},
+ {-0x1.e81781d97ee91p-22, 0x1.9ecf6p-1},
+ {-0x1.e81781d97ee91p-22, 0x1.9ecf6p-1},
+ {-0x1.6a77813f94e01p-22, 0x1.a3e3p-1},
+ {-0x1.1cfdeb43cfdp-22, 0x1.a8ffap-1},
+ {-0x1.1cfdeb43cfdp-22, 0x1.a8ffap-1},
+ {-0x1.f983f74d3138fp-23, 0x1.ae256p-1},
+ {-0x1.e278ae1a1f51fp-23, 0x1.b3546p-1},
+ {-0x1.e278ae1a1f51fp-23, 0x1.b3546p-1},
+ {-0x1.97552b7b5ea45p-23, 0x1.b88ccp-1},
+ {-0x1.97552b7b5ea45p-23, 0x1.b88ccp-1},
+ {-0x1.19b4f3c72c4f8p-24, 0x1.bdceap-1},
+ {0x1.f7402d26f1a12p-23, 0x1.c31a2p-1},
+ {0x1.f7402d26f1a12p-23, 0x1.c31a2p-1},
+ {-0x1.2056d5dd31d96p-23, 0x1.c86f8p-1},
+ {-0x1.2056d5dd31d96p-23, 0x1.c86f8p-1},
+ {-0x1.6e46335aae723p-24, 0x1.cdcecp-1},
+ {-0x1.beb244c59f331p-22, 0x1.d3382p-1},
+ {-0x1.beb244c59f331p-22, 0x1.d3382p-1},
+ {0x1.16c071e93fd97p-27, 0x1.d8abap-1},
+ {0x1.16c071e93fd97p-27, 0x1.d8abap-1},
+ {0x1.d8175819530c2p-22, 0x1.de298p-1},
+ {0x1.d8175819530c2p-22, 0x1.de298p-1},
+ {0x1.51bd552842c1cp-23, 0x1.e3b2p-1},
+ {0x1.51bd552842c1cp-23, 0x1.e3b2p-1},
+ {0x1.914e204f19d94p-22, 0x1.e9452p-1},
+ {0x1.914e204f19d94p-22, 0x1.e9452p-1},
+ {0x1.c55d997da24fdp-22, 0x1.eee32p-1},
+ {0x1.c55d997da24fdp-22, 0x1.eee32p-1},
+ {-0x1.685c2d2298a6ep-22, 0x1.f48c4p-1},
+ {-0x1.685c2d2298a6ep-22, 0x1.f48c4p-1},
+ {0x1.7a4887bd74039p-22, 0x1.fa406p-1},
+ {0.0, 1.0},
+};
+#else
+
+#ifdef LIBC_TARGET_CPU_HAS_FMA_DOUBLE
+constexpr uint64_t ERR = 64;
+#else
+constexpr uint64_t ERR = 128;
+#endif // LIBC_TARGET_CPU_HAS_FMA_DOUBLE
+
+// We choose the precision of the high part to be 53 - 24 - 8, so that when
+// y * (e_x + LOG2_R_DD[i].hi) is exact.
+// Generated by Sollya with:
+// > for i from 0 to 127 do {
+// r = 2^-8 * ceil(2^8 * (1 - 2^-8) / (1 + i * 2^-7) );
+// a = -log2(r);
+// b = round(1 + a, 53 - 24 - 8, RN) - 1;
+// c = round(a - b, D, RN);
+// d = round(a - b - c, D, RN);
+// print("{", d, ",", c, ", ", b, "},");
+// };
+static constexpr TripleDouble LOG2_R_TD[128] = {
+ {0.0, 0.0, 0.0},
+ {0x1.84a2c615b70adp-79, -0x1.177c23362928cp-25, 0x1.72c8p-7},
+ {-0x1.f27b820fd03eap-76, -0x1.179e0caa9c9abp-22, 0x1.744p-6},
+ {-0x1.f27ef487c8f34p-77, -0x1.c6cea541f5b7p-23, 0x1.184cp-5},
+ {-0x1.e3f80fbc71454p-76, -0x1.66c4d4e554434p-22, 0x1.773ap-5},
+ {-0x1.9f8ef14d5f6eep-79, -0x1.70700a00fdd55p-24, 0x1.d6ecp-5},
+ {0x1.452bbce7398c1p-77, 0x1.53002a4e86631p-23, 0x1.1bb3p-4},
+ {-0x1.990555535afdp-81, 0x1.fcd15f101c142p-25, 0x1.4c56p-4},
+ {0x1.447e30ad393eep-78, 0x1.25b3eed319cedp-22, 0x1.7d6p-4},
+ {0x1.b7759da88a2dap-76, -0x1.4195120d8486fp-22, 0x1.960dp-4},
+ {0x1.cee7766ece702p-78, 0x1.45b878e27d0d9p-23, 0x1.c7b5p-4},
+ {-0x1.a55c745ecdc2fp-77, 0x1.770744593a4cbp-22, 0x1.f9c9p-4},
+ {0x1.f7ec992caa67fp-77, 0x1.c673032495d24p-22, 0x1.097ep-3},
+ {-0x1.433638c6ece3ep-77, -0x1.1eaa65b49696ep-22, 0x1.22dbp-3},
+ {0x1.58f27b6518824p-76, 0x1.b2866f2850b22p-22, 0x1.3c6f8p-3},
+ {-0x1.86bdcfdfd4a4cp-79, 0x1.8ee37cd2ea9d3p-25, 0x1.494f8p-3},
+ {-0x1.ff7044a68a7fap-80, 0x1.7e86f9c2154fbp-24, 0x1.633a8p-3},
+ {-0x1.aa21694561327p-81, 0x1.8e3cfc25f0ce6p-26, 0x1.7046p-3},
+ {-0x1.d209f2d4239c6p-87, 0x1.57f7a64ccd537p-28, 0x1.8a898p-3},
+ {-0x1.a55e97e60e632p-76, -0x1.a761c09fbd2aep-22, 0x1.97c2p-3},
+ {0x1.261179225541ep-76, 0x1.24bea9a2c66f3p-22, 0x1.b26p-3},
+ {-0x1.08fa30510fca9p-82, -0x1.60002ccfe43f5p-25, 0x1.bfc68p-3},
+ {-0x1.63ec8d56242f9p-76, 0x1.69f220e97f22cp-22, 0x1.dac2p-3},
+ {0x1.8bcdaf0534365p-76, -0x1.6164f64c210ep-22, 0x1.e858p-3},
+ {0x1.1003282896056p-78, -0x1.0c1678ae89767p-24, 0x1.01d9cp-2},
+ {0x1.01bcc7025fa92p-78, -0x1.f26a05c813d57p-22, 0x1.08bdp-2},
+ {-0x1.fe8a8648e9ebcp-80, 0x1.4d8fc561c8d44p-24, 0x1.169cp-2},
+ {0x1.08dfb23650c75p-79, -0x1.362ad8f7ca2dp-22, 0x1.1d984p-2},
+ {-0x1.f8d5a89861a5ep-79, 0x1.2b13cd6c4d042p-22, 0x1.249ccp-2},
+ {-0x1.a1c872983511ep-76, -0x1.1c8f11979a5dbp-22, 0x1.32cp-2},
+ {0x1.e8e21bff3336bp-77, 0x1.c2ab3edefe569p-23, 0x1.39de8p-2},
+ {0x1.fd1994fb2c4a1p-80, 0x1.7c3eca28e69cap-26, 0x1.4106p-2},
+ {0x1.6b94b51cf76b1p-80, -0x1.34c4e99e1c6c6p-24, 0x1.4f6fcp-2},
+ {-0x1.31d55da1d0f66p-76, -0x1.194a871b63619p-22, 0x1.56b24p-2},
+ {-0x1.378b22691e28bp-77, 0x1.e3dd5c1c885aep-23, 0x1.5dfdcp-2},
+ {0x1.99e302970e411p-83, -0x1.6ccf3b1129b7cp-23, 0x1.6552cp-2},
+ {0x1.20164a049664dp-82, -0x1.2f346e2bf924bp-23, 0x1.6cb1p-2},
+ {-0x1.d14aac4d864c3p-77, -0x1.fa61aaa59c1d8p-23, 0x1.7b8ap-2},
+ {0x1.496ab4e4b293fp-79, 0x1.90c11fd32a3abp-22, 0x1.8304cp-2},
+ {-0x1.d209f2d4239c6p-86, 0x1.57f7a64ccd537p-27, 0x1.8a898p-2},
+ {0x1.eae3326327babp-81, 0x1.249ba76fee235p-27, 0x1.9218p-2},
+ {0x1.fa05bddfded8cp-77, -0x1.aad2729b21ae5p-23, 0x1.99b08p-2},
+ {-0x1.624140d175ba2p-77, 0x1.71810a5e1818p-22, 0x1.a8ff8p-2},
+ {0x1.f1c5160c515c1p-81, -0x1.6172fe015e13cp-27, 0x1.b0b68p-2},
+ {-0x1.86a6204eec8cp-79, 0x1.5ec6c1bfbf89ap-24, 0x1.b877cp-2},
+ {0x1.718f761dd3915p-78, 0x1.678bf6cdedf51p-24, 0x1.c0438p-2},
+ {-0x1.d4ee66c3700e4p-76, 0x1.c2d45fe43895ep-22, 0x1.c819cp-2},
+ {-0x1.7d14533586306p-77, -0x1.9ee52ed49d71dp-22, 0x1.cffbp-2},
+ {0x1.5ce9fb5a7bb5bp-81, 0x1.5786af187a96bp-27, 0x1.d7e6cp-2},
+ {-0x1.ae6face57ad3bp-77, 0x1.3ab0dc56138c9p-23, 0x1.dfdd8p-2},
+ {0x1.5ac93b443d55fp-78, 0x1.fe538ab34efb5p-22, 0x1.e7df4p-2},
+ {0x1.f1753e0ae1e8fp-76, -0x1.e4fee07aa4b68p-22, 0x1.efec8p-2},
+ {0x1.cdfd4c297069bp-76, -0x1.172f32fe67287p-22, 0x1.f804cp-2},
+ {0x1.97a0e8f3ba742p-79, -0x1.9a83ff9ab9cc8p-22, 0x1.00144p-1},
+ {-0x1.800450f5b2357p-78, -0x1.68cb06cece193p-22, 0x1.042bep-1},
+ {-0x1.a839041241fe7p-78, 0x1.8cd71ddf82e2p-22, 0x1.08494p-1},
+ {0x1.ed0b8eeccca86p-78, 0x1.5e18ab2df3ae6p-22, 0x1.0c6cap-1},
+ {0x1.3dd41df9689b3p-79, 0x1.5dee4d9d8a273p-25, 0x1.1096p-1},
+ {-0x1.990555535afdp-82, 0x1.fcd15f101c142p-26, 0x1.14c56p-1},
+ {-0x1.1773d02c9055cp-77, -0x1.2474b0f992ba1p-23, 0x1.18faep-1},
+ {-0x1.4aeef330c53c1p-78, 0x1.4b5a92a606047p-24, 0x1.1d368p-1},
+ {0x1.8e6ff749ebacbp-77, 0x1.16186fcf54bbdp-22, 0x1.21786p-1},
+ {0x1.c09d761c548ebp-84, 0x1.18efabeb7d722p-27, 0x1.25c0ap-1},
+ {0x1.aaa73a428e1e4p-78, -0x1.e5fc7d238691dp-24, 0x1.2a0f4p-1},
+ {-0x1.af2f3d8b63fbap-79, 0x1.f5809faf6283cp-22, 0x1.2e644p-1},
+ {-0x1.af2f3d8b63fbap-79, 0x1.f5809faf6283cp-22, 0x1.2e644p-1},
+ {0x1.78de359f2bb88p-77, 0x1.c6e1dcd0cb449p-22, 0x1.32bfep-1},
+ {-0x1.415ae1a715618p-76, 0x1.76e0e8f74b4d5p-22, 0x1.37222p-1},
+ {-0x1.4991b5375621fp-79, -0x1.cb82c89692d99p-24, 0x1.3b8b2p-1},
+ {-0x1.827d37deb2236p-76, -0x1.63161c5432aebp-22, 0x1.3ffaep-1},
+ {0x1.9576edac01c78p-77, 0x1.458104c41b901p-22, 0x1.44716p-1},
+ {0x1.9576edac01c78p-77, 0x1.458104c41b901p-22, 0x1.44716p-1},
+ {-0x1.05a27b81e2219p-77, -0x1.cd9d0cde578d5p-22, 0x1.48efp-1},
+ {0x1.237616778b4bap-82, 0x1.b9884591add87p-26, 0x1.4d738p-1},
+ {0x1.3b7d7e5d148bbp-76, 0x1.c6042978605ffp-22, 0x1.51ff2p-1},
+ {-0x1.cc3f936a5977cp-79, -0x1.fc4c96b37dcf6p-22, 0x1.56922p-1},
+ {0x1.20164a049664dp-83, -0x1.2f346e2bf924bp-24, 0x1.5b2c4p-1},
+ {0x1.20164a049664dp-83, -0x1.2f346e2bf924bp-24, 0x1.5b2c4p-1},
+ {-0x1.a212919a92f7ap-77, 0x1.c4e4fbb68a4d1p-22, 0x1.5fcdcp-1},
+ {-0x1.b64b03f7230ddp-77, -0x1.9d499bd9b3226p-23, 0x1.6476ep-1},
+ {-0x1.1ec6379e6e3b9p-77, -0x1.f89b355ede26fp-23, 0x1.69278p-1},
+ {-0x1.1ec6379e6e3b9p-77, -0x1.f89b355ede26fp-23, 0x1.69278p-1},
+ {-0x1.4ba44c03bfbbdp-78, 0x1.53c7e319f6e92p-24, 0x1.6ddfcp-1},
+ {-0x1.c36fc650d030fp-77, -0x1.b291f070528c7p-22, 0x1.729fep-1},
+ {-0x1.69e5693a7f067p-80, 0x1.2967a451a7b48p-25, 0x1.7767cp-1},
+ {-0x1.69e5693a7f067p-80, 0x1.2967a451a7b48p-25, 0x1.7767cp-1},
+ {0x1.6598aae91499ap-76, 0x1.244fcff690fcep-22, 0x1.7c37ap-1},
+ {0x1.99d61ec432837p-77, 0x1.46fd97f5dc572p-23, 0x1.810fap-1},
+ {0x1.99d61ec432837p-77, 0x1.46fd97f5dc572p-23, 0x1.810fap-1},
+ {0x1.855c42078f81bp-76, -0x1.f3a7352663e5p-22, 0x1.85efep-1},
+ {-0x1.59408e815107p-77, 0x1.b3cda690370b5p-23, 0x1.8ad84p-1},
+ {-0x1.59408e815107p-77, 0x1.b3cda690370b5p-23, 0x1.8ad84p-1},
+ {0x1.33b318085e50ap-78, 0x1.3226b211bf1d9p-23, 0x1.8fc92p-1},
+ {0x1.343fe7c9cb4aep-79, 0x1.d24b136c101eep-23, 0x1.94c28p-1},
+ {0x1.343fe7c9cb4aep-79, 0x1.d24b136c101eep-23, 0x1.94c28p-1},
+ {-0x1.d19522e56fe6p-76, 0x1.7c40c7907e82ap-22, 0x1.99c48p-1},
+ {-0x1.23b9d8ea55c3ep-77, -0x1.e81781d97ee91p-22, 0x1.9ecf6p-1},
+ {-0x1.23b9d8ea55c3ep-77, -0x1.e81781d97ee91p-22, 0x1.9ecf6p-1},
+ {0x1.829440c24aeb6p-78, -0x1.6a77813f94e01p-22, 0x1.a3e3p-1},
+ {-0x1.624140d175ba2p-76, -0x1.1cfdeb43cfdp-22, 0x1.a8ffap-1},
+ {-0x1.624140d175ba2p-76, -0x1.1cfdeb43cfdp-22, 0x1.a8ffap-1},
+ {0x1.afa6f024fb045p-77, -0x1.f983f74d3138fp-23, 0x1.ae256p-1},
+ {-0x1.603ad3a5d326dp-78, -0x1.e278ae1a1f51fp-23, 0x1.b3546p-1},
+ {-0x1.603ad3a5d326dp-78, -0x1.e278ae1a1f51fp-23, 0x1.b3546p-1},
+ {-0x1.0c1e0e5855d6ap-77, -0x1.97552b7b5ea45p-23, 0x1.b88ccp-1},
+ {-0x1.0c1e0e5855d6ap-77, -0x1.97552b7b5ea45p-23, 0x1.b88ccp-1},
+ {0x1.c817ad56baa16p-78, -0x1.19b4f3c72c4f8p-24, 0x1.bdceap-1},
+ {0x1.44c47ac1bf62bp-77, 0x1.f7402d26f1a12p-23, 0x1.c31a2p-1},
+ {0x1.44c47ac1bf62bp-77, 0x1.f7402d26f1a12p-23, 0x1.c31a2p-1},
+ {-0x1.69b9465eae1e6p-78, -0x1.2056d5dd31d96p-23, 0x1.c86f8p-1},
+ {-0x1.69b9465eae1e6p-78, -0x1.2056d5dd31d96p-23, 0x1.c86f8p-1},
+ {-0x1.24a6d9d1d1904p-79, -0x1.6e46335aae723p-24, 0x1.cdcecp-1},
+ {-0x1.3826144575ac4p-76, -0x1.beb244c59f331p-22, 0x1.d3382p-1},
+ {-0x1.3826144575ac4p-76, -0x1.beb244c59f331p-22, 0x1.d3382p-1},
+ {0x1.dbc96b3b12b25p-81, 0x1.16c071e93fd97p-27, 0x1.d8abap-1},
+ {0x1.dbc96b3b12b25p-81, 0x1.16c071e93fd97p-27, 0x1.d8abap-1},
+ {0x1.68a8ccdbd1f33p-77, 0x1.d8175819530c2p-22, 0x1.de298p-1},
+ {0x1.68a8ccdbd1f33p-77, 0x1.d8175819530c2p-22, 0x1.de298p-1},
+ {0x1.e586711df5ea1p-79, 0x1.51bd552842c1cp-23, 0x1.e3b2p-1},
+ {0x1.e586711df5ea1p-79, 0x1.51bd552842c1cp-23, 0x1.e3b2p-1},
+ {-0x1.bc25adf042483p-79, 0x1.914e204f19d94p-22, 0x1.e9452p-1},
+ {-0x1.bc25adf042483p-79, 0x1.914e204f19d94p-22, 0x1.e9452p-1},
+ {0x1.d7d82b65c5686p-76, 0x1.c55d997da24fdp-22, 0x1.eee32p-1},
+ {0x1.d7d82b65c5686p-76, 0x1.c55d997da24fdp-22, 0x1.eee32p-1},
+ {-0x1.3f108c0857ca3p-77, -0x1.685c2d2298a6ep-22, 0x1.f48c4p-1},
+ {-0x1.3f108c0857ca3p-77, -0x1.685c2d2298a6ep-22, 0x1.f48c4p-1},
+ {-0x1.bd800bca7a221p-78, 0x1.7a4887bd74039p-22, 0x1.fa406p-1},
+ {0.0, 0.0, 1.0},
+};
+
+// Look up table for the second range reduction step:
+// Generated by Sollya with:
+// > for i from -64 to 128 do {
+// r = 2^-16 * nearestint(2^16 / (1 + i * 2^-14) );
+// a = -log2(r);
+// b = round(a, D, RN);
+// c = round(a - b, D, RN);
+// print("{", c, ", ", b, "},");
+// };
+static constexpr DoubleDouble LOG2_R2_DD[] = {
+ {0x1.ff25180953e64p-62, -0x1.720c2ab2312a9p-8},
+ {-0x1.15ffd79560d8fp-62, -0x1.6c4c92b1478ffp-8},
+ {0x1.b8d6d6f2e3579p-62, -0x1.668ce3c873549p-8},
+ {-0x1.5bfc3f0d5ef71p-62, -0x1.60cd1df6fde91p-8},
+ {-0x1.d1f7a8777984ap-64, -0x1.5b0d413c30b5ep-8},
+ {0x1.8e858515b8343p-66, -0x1.554d4d97551abp-8},
+ {0x1.e165c4014c1f2p-62, -0x1.4f8d4307b46ecp-8},
+ {0x1.0f84b2cc14c7ep-63, -0x1.49cd218c9800bp-8},
+ {0x1.de618ed0db9a6p-62, -0x1.440ce9254916cp-8},
+ {-0x1.f6b8587e64f22p-62, -0x1.3e4c99d110ee7p-8},
+ {-0x1.7f793c84cfa63p-64, -0x1.388c338f38bdp-8},
+ {-0x1.7d7ecf6258c9ap-65, -0x1.32cbb65f09aeep-8},
+ {-0x1.810bc5ac188f5p-62, -0x1.2d0b223fcce81p-8},
+ {-0x1.950035fc5b67cp-62, -0x1.274a7730cb841p-8},
+ {0x1.4f47f3048cdadp-62, -0x1.2189b5314e95dp-8},
+ {0x1.269519861e298p-68, -0x1.1bc8dc409f279p-8},
+ {-0x1.5c2b0a46a7e2fp-62, -0x1.1607ec5e063b3p-8},
+ {0x1.5001ac8f0bda8p-63, -0x1.1046e588cccap-8},
+ {0x1.106f246af5d41p-62, -0x1.0a85c7c03bc4ap-8},
+ {0x1.82a00583b34bap-66, -0x1.0354423e3c666p-8},
+ {0x1.b6f37deb3137p-65, -0x1.fb25e19f11aecp-9},
+ {-0x1.44a2140444811p-63, -0x1.efa310d6550ecp-9},
+ {0x1.f5e68a763133fp-63, -0x1.e4201220d4858p-9},
+ {0x1.692083115f0b9p-63, -0x1.d89ce57d219a6p-9},
+ {0x1.144bb17b9ac9cp-63, -0x1.cd198ae9cdc3dp-9},
+ {0x1.ee7f086d32c05p-63, -0x1.c19602656a671p-9},
+ {-0x1.d4f1167538dbep-63, -0x1.b6124...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/176531
More information about the libc-commits
mailing list