//===-- Single-precision x^y function -------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

#include "src/math/powf.h"
#include "common_constants.h" // Lookup tables EXP_M1 and EXP_M2.
#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/common.h"
#include "src/__support/macros/config.h"
#include "src/__support/macros/optimization.h" // LIBC_UNLIKELY
#include "src/__support/math/exp10f.h" // Speedup for powf(10, y) = exp10f(y)

#include "exp2f_impl.h"  // Speedup for powf(2, y) = exp2f(y)

namespace LIBC_NAMESPACE_DECL {

using fputil::DoubleDouble;
using fputil::TripleDouble;

namespace {

#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.b6124bee88d82p-9},
    {0x1.7df8d226c67ep-63, -0x1.aa8e6783ba5a2p-9},
    {0x1.60545d61b9512p-63, -0x1.9f0a5523901ebp-9},
    {0x1.54c99c291702p-63, -0x1.938614cc9b468p-9},
    {-0x1.a7e678d7280dep-64, -0x1.8801a67d6ce1p-9},
    {-0x1.6d419bbeb223ap-64, -0x1.7c7d0a3495ec9p-9},
    {0x1.ce2b9892e27e9p-64, -0x1.70f83ff0a7565p-9},
    {-0x1.a4db4eff7bd61p-63, -0x1.657347b031fa2p-9},
    {0x1.5bb04682fab82p-63, -0x1.59ee2171c6a2fp-9},
    {-0x1.78b8bfe6a3adep-64, -0x1.4e68cd33f60a3p-9},
    {0x1.574c3ce9b89b1p-63, -0x1.42e34af550d87p-9},
    {0x1.08fb216647b7bp-63, -0x1.375d9ab467a4dp-9},
    {0x1.ed5a50e7b919cp-66, -0x1.2bd7bc6fcaf56p-9},
    {0x1.91ad7a23f86fep-63, -0x1.2051b0260b3fp-9},
    {0x1.3ab2c932b8b0ap-64, -0x1.14cb75d5b8e54p-9},
    {-0x1.c63bcdf120f7ap-63, -0x1.09450d7d643a9p-9},
    {0x1.8af8c4ab4e82dp-64, -0x1.fb7cee373b008p-10},
    {0x1.a52c2ca9d8b9bp-65, -0x1.e46f655de9cc6p-10},
    {-0x1.460b177a58742p-64, -0x1.cd61806bf5166p-10},
    {0x1.611089de8d12ap-66, -0x1.b6533f5e7cf9bp-10},
    {-0x1.4209853cee70cp-69, -0x1.9f44a232a16eep-10},
    {0x1.964e032541a28p-64, -0x1.8835a8e5824c3p-10},
    {-0x1.fa9f94392637bp-66, -0x1.712653743f454p-10},
    {-0x1.3293693721a53p-64, -0x1.5a16a1dbf7eb6p-10},
    {-0x1.6e2af03c83c6ep-68, -0x1.43069419cbad5p-10},
    {-0x1.b5f05b9d5bd29p-65, -0x1.2bf62a2ad9d74p-10},
    {0x1.3db883c072f72p-64, -0x1.14e5640c4193p-10},
    {-0x1.a675a1c045304p-68, -0x1.fba8837643cf6p-11},
    {0x1.3b9c2aeb00068p-66, -0x1.cd85866933743p-11},
    {-0x1.2911a381901ebp-66, -0x1.9f61d0eb8f98bp-11},
    {-0x1.5ea75a74def03p-68, -0x1.713d62f7957c3p-11},
    {-0x1.305b92f93ffep-67, -0x1.43183c878218dp-11},
    {0x1.b7c8c8dd40d35p-68, -0x1.14f25d959223ap-11},
    {0x1.dc915d58a62f6p-66, -0x1.cd978c3804191p-12},
    {0x1.c7bc3fe53cd94p-66, -0x1.7148ec2a1bfc9p-12},
    {-0x1.427ce595cc53cp-67, -0x1.14f8daf5e3bcfp-12},
    {-0x1.d523885ac824cp-67, -0x1.714eb11fa5363p-13},
    {-0x1.945957f63330ap-69, -0x1.715193b17d35dp-14},
    {0, 0},
    {-0x1.88fb2ea8bf9eap-70, 0x1.7157590356aeep-14},
    {-0x1.5aeaee345d04ep-68, 0x1.715a3bc3593d5p-13},
    {-0x1.7fce430230132p-66, 0x1.1505d6ee104c5p-12},
    {-0x1.9a480f204ff09p-70, 0x1.716001718cb2bp-12},
    {-0x1.00e7233f2d8bdp-68, 0x1.cdbb9d77ae5a8p-12},
    {0x1.09d379fa18c5dp-67, 0x1.150c5586012b8p-11},
    {0x1.b6b9d90a104d3p-65, 0x1.433b951d0b231p-11},
    {0x1.4d9a3ea651885p-65, 0x1.716b8d86bc285p-11},
    {-0x1.7590b3a76f0f9p-67, 0x1.9f9c3ec8db94fp-11},
    {0x1.f183ca5b21bfep-65, 0x1.cdcda8e93107fp-11},
    {-0x1.a7e3465ba127p-66, 0x1.fbffcbed8465fp-11},
    {-0x1.7821f738d1221p-64, 0x1.151953edceec6p-10},
    {0x1.3bb4c0fb95359p-65, 0x1.2c331e5ca2e7dp-10},
    {0x1.236028e962f8p-64, 0x1.434d4546227fcp-10},
    {0x1.aaaa64d30f184p-66, 0x1.5a67c8ad32315p-10},
    {-0x1.a821b7cc57a7ap-64, 0x1.7182a894b69c6p-10},
    {-0x1.13d9d78aace21p-64, 0x1.889de4ff94838p-10},
    {-0x1.2f249a6b923ap-64, 0x1.9fb97df0b0cc2p-10},
    {-0x1.d47dc3664be7ap-68, 0x1.b6d5736af07e6p-10},
    {0x1.bd1522c6418fbp-64, 0x1.cdf1c57138c53p-10},
    {-0x1.bacdbb22d2163p-64, 0x1.e50e74066eee6p-10},
    {-0x1.ca7604812d77bp-64, 0x1.fc2b7f2d786a5p-10},
    {-0x1.2b6832f8830bfp-63, 0x1.09a473749d663p-9},
    {0x1.4e712033d0457p-65, 0x1.1533559e4de55p-9},
    {-0x1.473dd044017b5p-66, 0x1.20c26615409f1p-9},
    {-0x1.e033bcac726d3p-63, 0x1.2c51a4dae8915p-9},
    {-0x1.4a47a2b18a0fap-63, 0x1.37e111f0b8cb5p-9},
    {0x1.6f3615771c17bp-66, 0x1.4370ad58246ddp-9},
    {0x1.c0ee6c32d6236p-65, 0x1.4f0077129eabp-9},
    {0x1.fa94c99761b8fp-64, 0x1.5a906f219ac67p-9},
    {-0x1.979e6b473fbf8p-64, 0x1.662095868c153p-9},
    {0x1.30edde8d24c7bp-64, 0x1.71b0ea42e5fdap-9},
    {-0x1.d01594fe1421cp-64, 0x1.7d416d581bf7cp-9},
    {0x1.50bf7b995b49ap-63, 0x1.88d21ec7a18cdp-9},
    {-0x1.28ea2bcec5018p-63, 0x1.9462fe92ea57cp-9},
    {0x1.ed6add489c30bp-65, 0x1.9ff40cbb6a04bp-9},
    {0x1.201d5c3bbeb69p-64, 0x1.ab85494294517p-9},
    {-0x1.a05d0d4461ea9p-64, 0x1.b716b429dd0d3p-9},
    {-0x1.7c974c8a392fdp-63, 0x1.c2a84d72b8189p-9},
    {-0x1.f068238451bdep-64, 0x1.ce3a151e9965bp-9},
    {-0x1.5e4d95c6259c3p-66, 0x1.d9cc0b2ef4f83p-9},
    {-0x1.1fc262efaad6cp-63, 0x1.e55e2fa53ee53p-9},
    {0x1.49eee7abc7716p-63, 0x1.f0f08282eb533p-9},
    {-0x1.903de284d2782p-65, 0x1.fc8303c96e7a6p-9},
    {-0x1.ec564845134cbp-63, 0x1.040ad9bd1e522p-8},
    {-0x1.7692b7791cf1fp-66, 0x1.0861eadabc3dcp-8},
    {-0x1.37829afb11c1p-62, 0x1.0e2b6b51e4f7ep-8},
    {0x1.6706b91c3b0bap-62, 0x1.13f5030033459p-8},
    {-0x1.7558ccd710756p-62, 0x1.19beb1e6616c9p-8},
    {0x1.79f72a5bbe9dep-62, 0x1.1f88780529bb1p-8},
    {-0x1.e1297c110b25p-62, 0x1.2552555d46886p-8},
    {0x1.29930d567ca26p-62, 0x1.2b1c49ef72343p-8},
    {0x1.a08cbd7592a17p-65, 0x1.30e655bc67275p-8},
    {0x1.e4f9d4ac5db83p-62, 0x1.36b078c4dfd31p-8},
    {-0x1.ed1b0aafd30c2p-62, 0x1.3c7ab30996b1cp-8},
    {0x1.e78f0aa014b32p-62, 0x1.4245048b46462p-8},
    {0x1.8594548038a0fp-69, 0x1.480f6d4aa91c2p-8},
    {0x1.3df498168a333p-63, 0x1.4dd9ed4879c82p-8},
    {0x1.b1c502544f82ap-62, 0x1.53a4848572e77p-8},
    {-0x1.dc50552fe0da9p-63, 0x1.596f33024f203p-8},
    {-0x1.671d85c357d5ep-62, 0x1.5f39f8bfc9212p-8},
    {0x1.1c670cabccefap-64, 0x1.6504d5be9ba1ep-8},
    {-0x1.9983a9e98f318p-62, 0x1.6acfc9ff8162fp-8},
    {0x1.ae1a26af3eebep-62, 0x1.709ad583352d6p-8},
    {0x1.655eb510bfda3p-62, 0x1.7665f84a71d35p-8},
    {-0x1.e287bc0192e15p-64, 0x1.7c313255f22f8p-8},
    {0x1.cc4944139ccbfp-63, 0x1.81fc83a671257p-8},
    {0x1.4e09b4cb8645bp-62, 0x1.87c7ec3ca9a19p-8},
    {-0x1.5becc991e3a5fp-64, 0x1.8d936c1956991p-8},
    {-0x1.ddfa3f1e15ba8p-62, 0x1.935f033d3309ep-8},
    {-0x1.b7b06ea3fb362p-62, 0x1.992ab1a8f9facp-8},
    {0x1.32d614904e46cp-62, 0x1.9ef6775d667b4p-8},
    {-0x1.7186892b5bfaep-64, 0x1.a4c2545b33a3ep-8},
    {-0x1.d4de10b28dfd8p-62, 0x1.aa8e48a31c95cp-8},
    {0x1.4bb4b3bdc8175p-62, 0x1.b05a5435dc7adp-8},
    {0x1.9cedbd1d7fba5p-62, 0x1.b62677142e86p-8},
    {-0x1.0ed3379beaffdp-66, 0x1.bbf2b13ecdf2fp-8},
    {0x1.6e86a125567a6p-62, 0x1.c1bf02b67606p-8},
    {-0x1.35038e0c0a52cp-62, 0x1.c6184f1b326d9p-8},
    {0x1.05ef8bf5adf5ep-67, 0x1.cbe4c95b6c5abp-8},
    {-0x1.b7338b99a6b26p-65, 0x1.d1b15aeab217cp-8},
    {0x1.9e901c30c427ep-63, 0x1.d77e03c9bf0a4p-8},
    {-0x1.1f28a9c0b3d47p-62, 0x1.dd4ac3f94ea0ap-8},
    {-0x1.140ef760d3b63p-62, 0x1.e3179b7a1c52p-8},
    {-0x1.ab65b1037f517p-63, 0x1.e8e48a4ce39e7p-8},
    {-0x1.76940c457ce6dp-63, 0x1.eeb19072600edp-8},
    {0x1.da3ae65a605cfp-64, 0x1.f47eadeb4d34dp-8},
    {0x1.b15d0bce2ede6p-62, 0x1.fa4be2b866abp-8},
    {0x1.e02aa1fa9dc57p-61, 0x1.000c976d340a6p-7},
    {0x1.6be971a5565b9p-62, 0x1.02f34929068f3p-7},
    {-0x1.8a9319a6ed164p-64, 0x1.05da069008be7p-7},
    {0x1.825079f1e0ec5p-62, 0x1.08c0cfa298771p-7},
    {0x1.60d5749321466p-63, 0x1.0ba7a461139c8p-7},
    {-0x1.5b8f4c479e2ep-61, 0x1.0e8e84cbd8169p-7},
    {-0x1.e3e1248004e29p-62, 0x1.117570e343d17p-7},
    {0x1.9ac06487c375p-63, 0x1.145c68a7b4bddp-7},
    {0x1.f657ea5c03ea4p-62, 0x1.17436c1988d0dp-7},
    {-0x1.5a965659a05e2p-61, 0x1.1a2a7b391e04p-7},
    {-0x1.21ce9b9bfc512p-61, 0x1.1d119606d2554p-7},
    {-0x1.30fda247ad0e1p-61, 0x1.1ff8bc8303c7p-7},
    {-0x1.382c78a45cdeap-62, 0x1.22dfeeae10601p-7},
    {0x1.46ae4a64073d4p-61, 0x1.250d5bf952374p-7},
    {-0x1.dcad2cec3b84bp-62, 0x1.27f4a29740a2fp-7},
    {-0x1.413fbeb0b0635p-61, 0x1.2adbf4e50cdf9p-7},
    {0x1.f28e6a48bcb9p-61, 0x1.2dc352e315049p-7},
    {-0x1.96f286e1eb086p-61, 0x1.30aabc91b72ep-7},
    {-0x1.f88c04206dfa1p-61, 0x1.339231f1517c1p-7},
    {-0x1.11ea20e195841p-61, 0x1.3679b30242139p-7},
    {-0x1.d6e71452b674ap-63, 0x1.39613fc4e71dcp-7},
    {-0x1.57c578233b1b3p-61, 0x1.3c48d8399ec85p-7},
    {-0x1.ec430f03b76ep-63, 0x1.3f307c60c7455p-7},
    {0x1.e00dd1902ffb9p-61, 0x1.42182c3abecb5p-7},
    {-0x1.f22bcd96afe38p-61, 0x1.44ffe7c7e3957p-7},
    {0x1.08fd90f841d3p-61, 0x1.47e7af0893e2fp-7},
    {0x1.09594c5552bccp-62, 0x1.4acf81fd2df7ep-7},
    {-0x1.01a8a652e5602p-61, 0x1.4db760a6101c9p-7},
    {-0x1.826168febb3dp-64, 0x1.509f4b03989dcp-7},
    {-0x1.7eb21a35021e3p-62, 0x1.5387411625cccp-7},
    {-0x1.66cbc818e175p-61, 0x1.566f42de15ff4p-7},
    {0x1.9b784dd6cebdap-64, 0x1.5957505bc78f6p-7},
    {0x1.2b121ab482456p-61, 0x1.5b8562298c65bp-7},
    {-0x1.5d29869dd8233p-62, 0x1.5e6d842633702p-7},
    {-0x1.572a1b6cd63cfp-61, 0x1.6155b1d99f672p-7},
    {-0x1.a1f355360e877p-62, 0x1.643deb442eb59p-7},
    {-0x1.b6f1cd2e1c03fp-61, 0x1.672630663fcadp-7},
    {-0x1.2aaa11ccddcaep-61, 0x1.6a0e8140311aap-7},
    {0x1.3d979ddf4746cp-61, 0x1.6cf6ddd2611d4p-7},
    {-0x1.dc930484501f8p-63, 0x1.6fdf461d2e4f8p-7},
};
#endif // LIBC_MATH_HAS_SKIP_ACCURATE_PASS

LIBC_INLINE bool is_odd_integer(float x) {
  using FPBits = typename fputil::FPBits<float>;
  uint32_t x_u = cpp::bit_cast<uint32_t>(x);
  int32_t x_e =
      static_cast<int32_t>((x_u & FPBits::EXP_MASK) >> FPBits::FRACTION_LEN);
  int32_t lsb = cpp::countr_zero(x_u | FPBits::EXP_MASK);
  constexpr int32_t UNIT_EXPONENT =
      FPBits::EXP_BIAS + static_cast<int32_t>(FPBits::FRACTION_LEN);
  return (x_e + lsb == UNIT_EXPONENT);
}

LIBC_INLINE bool is_integer(float x) {
  using FPBits = typename fputil::FPBits<float>;
  uint32_t x_u = cpp::bit_cast<uint32_t>(x);
  int32_t x_e =
      static_cast<int32_t>((x_u & FPBits::EXP_MASK) >> FPBits::FRACTION_LEN);
  int32_t lsb = cpp::countr_zero(x_u | FPBits::EXP_MASK);
  constexpr int32_t UNIT_EXPONENT =
      FPBits::EXP_BIAS + static_cast<int32_t>(FPBits::FRACTION_LEN);
  return (x_e + lsb >= UNIT_EXPONENT);
}

#ifndef LIBC_MATH_HAS_SKIP_ACCURATE_PASS
LIBC_INLINE bool larger_exponent(double a, double b) {
  using DoubleBits = typename fputil::FPBits<double>;
  return DoubleBits(a).get_biased_exponent() >=
         DoubleBits(b).get_biased_exponent();
}

// Calculate 2^(y * log2(x)) in double-double precision.
// At this point we can reuse the following values:
//   idx_x: index for extra precision of log2 for the middle part of log2(x).
//   dx: the reduced argument for log2(x)
//   y6: 2^6 * y.
//   lo6_hi: the high part of 2^6 * (y - (hi + mid))
//   exp2_hi_mid: high part of 2^(hi + mid)
double powf_double_double(int idx_x, double dx, double y6, double lo6_hi,
                          const DoubleDouble &exp2_hi_mid) {
  using DoubleBits = typename fputil::FPBits<double>;

  // Perform a second range reduction step:
  //   idx2 = round(2^14 * (dx  + 2^-8)) = round ( dx * 2^14 + 2^6)
  //   dx2 = (1 + dx) * r2 - 1
  // Output range:
  //   -0x1.3ffcp-15 <= dx2 <= 0x1.3e3dp-15
  int idx2 = static_cast<int>(
      fputil::nearest_integer(fputil::multiply_add(dx, 0x1.0p14, 0x1.0p6)));
  double dx2 = fputil::multiply_add(1.0 + dx, R2[idx2], -1.0); // Exact

  // Degree-5 polynomial approximation of log2(1 + x)/x in double-double
  // precision.  Generate by Solya with:
  // > P = fpminimax(log2(1 + x)/x, 5, [|DD...|],
  //                 [-0x1.3ffcp-15, 0x1.3e3dp-15]);
  // > dirtyinfnorm(log2(1 + x)/x - P, [-0x1.3ffcp-15, 0x1.3e3dp-15]);
  // 0x1.8be5...p-96.
  constexpr DoubleDouble COEFFS[] = {
      {0x1.777d0ffda25ep-56, 0x1.71547652b82fep0},
      {-0x1.777d101cf0a84p-57, -0x1.71547652b82fep-1},
      {0x1.ce04b5140d867p-56, 0x1.ec709dc3a03fdp-2},
      {0x1.137b47e635be5p-56, -0x1.71547652b82fbp-2},
      {-0x1.b5a30b3bdb318p-58, 0x1.2776c516a92a2p-2},
      {0x1.2d2fbd081e657p-57, -0x1.ec70af1929ca6p-3},
  };

  DoubleDouble dx_dd({0.0, dx2});
  DoubleDouble p = fputil::polyeval(dx_dd, COEFFS[0], COEFFS[1], COEFFS[2],
                                    COEFFS[3], COEFFS[4], COEFFS[5]);
  // log2(1 + dx2) ~ dx2 * P(dx2)
  DoubleDouble log2_x_lo = fputil::quick_mult(dx2, p);
  // Lower parts of (e_x - log2(r1)) of the first range reduction constant
  DoubleDouble log2_x_mid({LOG2_R_TD[idx_x].lo, LOG2_R_TD[idx_x].mid});
  // -log2(r2) + lower part of (e_x - log2(r1))
  DoubleDouble log2_x_m = fputil::add(LOG2_R2_DD[idx2], log2_x_mid);
  // log2(1 + dx2) - log2(r2) + lower part of (e_x - log2(r1))
  // Since we don't know which one has larger exponent to apply Fast2Sum
  // algorithm, we need to check them before calling double-double addition.
  DoubleDouble log2_x = larger_exponent(log2_x_m.hi, log2_x_lo.hi)
                            ? fputil::add(log2_x_m, log2_x_lo)
                            : fputil::add(log2_x_lo, log2_x_m);
  DoubleDouble lo6_hi_dd({0.0, lo6_hi});
  // 2^6 * y * (log2(1 + dx2) - log2(r2) + lower part of (e_x - log2(r1)))
  DoubleDouble prod = fputil::quick_mult(y6, log2_x);
  // 2^6 * (y * log2(x) - (hi + mid)) = 2^6 * lo
  DoubleDouble lo6 = larger_exponent(prod.hi, lo6_hi)
                         ? fputil::add(prod, lo6_hi_dd)
                         : fputil::add(lo6_hi_dd, prod);

  constexpr DoubleDouble EXP2_COEFFS[] = {
      {0, 0x1p0},
      {0x1.abc9e3b398024p-62, 0x1.62e42fefa39efp-7},
      {-0x1.5e43a5429bddbp-69, 0x1.ebfbdff82c58fp-15},
      {-0x1.d33162491268fp-77, 0x1.c6b08d704a0cp-23},
      {0x1.4fb32d240a14ep-86, 0x1.3b2ab6fba4e77p-31},
      {0x1.e84e916be83ep-97, 0x1.5d87fe78a6731p-40},
      {-0x1.9a447bfddc5e6p-103, 0x1.430912f86bfb8p-49},
      {-0x1.31a55719de47fp-113, 0x1.ffcbfc588ded9p-59},
      {-0x1.0ba57164eb36bp-122, 0x1.62c034beb8339p-68},
      {-0x1.8483eabd9642dp-132, 0x1.b5251ff97bee1p-78},
  };

  DoubleDouble pp = fputil::polyeval(
      lo6, EXP2_COEFFS[0], EXP2_COEFFS[1], EXP2_COEFFS[2], EXP2_COEFFS[3],
      EXP2_COEFFS[4], EXP2_COEFFS[5], EXP2_COEFFS[6], EXP2_COEFFS[7],
      EXP2_COEFFS[8], EXP2_COEFFS[9]);
  DoubleDouble rr = fputil::quick_mult(exp2_hi_mid, pp);

  // Make sure the sum is normalized:
  DoubleDouble r = fputil::exact_add(rr.hi, rr.lo);
  // Round to odd.
  uint64_t r_bits = cpp::bit_cast<uint64_t>(r.hi);
  if (LIBC_UNLIKELY(((r_bits & 0xfff'ffff) == 0) && (r.lo != 0.0))) {
    Sign hi_sign = DoubleBits(r.hi).sign();
    Sign lo_sign = DoubleBits(r.lo).sign();
    if (hi_sign == lo_sign) {
      ++r_bits;
    } else if ((r_bits & DoubleBits::FRACTION_MASK) > 0) {
      --r_bits;
    }
  }

  return cpp::bit_cast<double>(r_bits);
}
#endif // LIBC_MATH_HAS_SKIP_ACCURATE_PASS

} // namespace

LLVM_LIBC_FUNCTION(float, powf, (float x, float y)) {
  using FloatBits = typename fputil::FPBits<float>;
  using DoubleBits = typename fputil::FPBits<double>;

  FloatBits xbits(x), ybits(y);

  uint32_t x_u = xbits.uintval();
  uint32_t x_abs = xbits.abs().uintval();
  uint32_t y_u = ybits.uintval();
  uint32_t y_abs = ybits.abs().uintval();

  ///////// BEGIN - Check exceptional cases ////////////////////////////////////

  // The single precision number that is closest to 1 is (1 - 2^-24), which has
  //   log2(1 - 2^-24) ~ -1.715...p-24.
  // So if |y| > 151 * 2^24, and x is finite:
  //   |y * log2(x)| = 0 or > 151.
  // Hence x^y will either overflow or underflow if x is not zero.
  if (LIBC_UNLIKELY((y_abs & 0x0007'ffff) == 0) || (y_abs > 0x4f170000)) {
    // y is signaling NaN
    if (xbits.is_signaling_nan() || ybits.is_signaling_nan()) {
      fputil::raise_except_if_required(FE_INVALID);
      return FloatBits::quiet_nan().get_val();
    }

    // Exceptional exponents.
    if (y == 0.0f)
      return 1.0f;

    switch (y_abs) {
    case 0x7f80'0000: { // y = +-Inf
      if (x_abs > 0x7f80'0000) {
        // pow(NaN, +-Inf) = NaN
        return x;
      }
      if (x_abs == 0x3f80'0000) {
        // pow(+-1, +-Inf) = 1.0f
        return 1.0f;
      }
      if (x == 0.0f && y_u == 0xff80'0000) {
        // pow(+-0, -Inf) = +inf and raise FE_DIVBYZERO
        fputil::set_errno_if_required(EDOM);
        fputil::raise_except_if_required(FE_DIVBYZERO);
        return FloatBits::inf().get_val();
      }
      // pow (|x| < 1, -inf) = +inf
      // pow (|x| < 1, +inf) = 0.0f
      // pow (|x| > 1, -inf) = 0.0f
      // pow (|x| > 1, +inf) = +inf
      return ((x_abs < 0x3f80'0000) == (y_u == 0xff80'0000))
                 ? FloatBits::inf().get_val()
                 : 0.0f;
    }
    default:
      // Speed up for common exponents
      switch (y_u) {
      case 0x3f00'0000: // y = 0.5f
        // pow(x, 1/2) = sqrt(x)
        if (LIBC_UNLIKELY(x == 0.0f || x_u == 0xff80'0000)) {
          // pow(-0, 1/2) = +0
          // pow(-inf, 1/2) = +inf
          // Make sure it is correct for FTZ/DAZ.
          return x * x;
        }
        float r;
        r = fputil::sqrt<float>(x);
        return (FloatBits(r).uintval() != 0x8000'0000) ? r : 0.0f;
      case 0x3f80'0000: // y = 1.0f
        return x;
      case 0x4000'0000: // y = 2.0f
        // pow(x, 2) = x^2
        return x * x;
        // TODO: Enable special case speed-up for x^(-1/2) when rsqrt is ready.
        // case 0xbf00'0000:  // pow(x, -1/2) = rsqrt(x)
        //   return rsqrt(x);
      }
      if (is_integer(y) && (y_u > 0x4000'0000) && (y_u <= 0x41c0'0000)) {
        // Check for exact cases when 2 < y < 25 and y is an integer.
        int msb =
            (x_abs == 0) ? (FloatBits::TOTAL_LEN - 2) : cpp::countl_zero(x_abs);
        msb = (msb > FloatBits::EXP_LEN) ? msb : FloatBits::EXP_LEN;
        int lsb = (x_abs == 0) ? 0 : cpp::countr_zero(x_abs);
        lsb = (lsb > FloatBits::FRACTION_LEN) ? FloatBits::FRACTION_LEN : lsb;
        int extra_bits = FloatBits::TOTAL_LEN - 2 - lsb - msb;
        int iter = static_cast<int>(y);

        if (extra_bits * iter <= FloatBits::FRACTION_LEN + 2) {
          // The result is either exact or exactly half-way.
          // But it is exactly representable in double precision.
          double x_d = static_cast<double>(x);
          double result = x_d;
          for (int i = 1; i < iter; ++i)
            result *= x_d;
          return static_cast<float>(result);
        }
      }
      if (y_abs > 0x4f17'0000) {
        // if y is NaN
        if (y_abs > 0x7f80'0000) {
          if (x_u == 0x3f80'0000) { // x = 1.0f
            // pow(1, NaN) = 1
            return 1.0f;
          }
          // pow(x, NaN) = NaN
          return y;
        }
        // x^y will be overflow / underflow in single precision.  Set y to a
        // large enough exponent but not too large, so that the computations
        // won't be overflow in double precision.
        y = cpp::bit_cast<float>((y_u & FloatBits::SIGN_MASK) + 0x4f800000U);
      }
    }
  }

  int ex = -FloatBits::EXP_BIAS;
  uint64_t sign = 0;

  // y is finite and non-zero.
  if (LIBC_UNLIKELY(((x_u & 0x801f'ffffU) == 0) || x_u >= 0x7f80'0000U ||
                    x_u < 0x0080'0000U)) {
    // if x is signaling NaN
    if (xbits.is_signaling_nan()) {
      fputil::raise_except_if_required(FE_INVALID);
      return FloatBits::quiet_nan().get_val();
    }

    switch (x_u) {
    case 0x3f80'0000: // x = 1.0f
      return 1.0f;
    // TODO: Put these 2 entrypoint dependency under control flag.
#ifndef LIBC_MATH_HAS_SKIP_ACCURATE_PASS
    case 0x4000'0000: // x = 2.0f
      // pow(2, y) = exp2(y)
      return generic::exp2f(y);
    case 0x4120'0000: // x = 10.0f
      // pow(10, y) = exp10(y)
      return math::exp10f(y);
#endif // LIBC_MATH_HAS_SKIP_ACCURATE_PASS
    }

    const bool x_is_neg = x_u >= FloatBits::SIGN_MASK;

    if (x == 0.0f) {
      const bool out_is_neg =
          x_is_neg && is_odd_integer(FloatBits(y_u).get_val());
      if (y_u > 0x8000'0000U) {
        // pow(0, negative number) = inf
        fputil::set_errno_if_required(EDOM);
        fputil::raise_except_if_required(FE_DIVBYZERO);
        return FloatBits::inf(out_is_neg ? Sign::NEG : Sign::POS).get_val();
      }
      // pow(0, positive number) = 0
      return out_is_neg ? -0.0f : 0.0f;
    }

    if (x_abs == 0x7f80'0000) {
      // x = +-Inf
      const bool out_is_neg =
          x_is_neg && is_odd_integer(FloatBits(y_u).get_val());
      if (y_u >= FloatBits::SIGN_MASK) {
        return out_is_neg ? -0.0f : 0.0f;
      }
      return FloatBits::inf(out_is_neg ? Sign::NEG : Sign::POS).get_val();
    }

    if (x_abs > 0x7f80'0000) {
      // x is NaN.
      // pow (aNaN, 0) is already taken care above.
      return x;
    }

    // Normalize denormal inputs.
    if (x_abs < 0x0080'0000U) {
      ex -= 64;
      x *= 0x1.0p64f;
    }

    // x is finite and negative, and y is a finite integer.
    if (x_is_neg) {
      if (is_integer(y)) {
        x = -x;
        if (is_odd_integer(y)) {
          // sign = -1.0;
          sign = 0x8000'0000'0000'0000ULL;
        }
      } else {
        // pow( negative, non-integer ) = NaN
        fputil::set_errno_if_required(EDOM);
        fputil::raise_except_if_required(FE_INVALID);
        return FloatBits::quiet_nan().get_val();
      }
    }
  }

  ///////// END - Check exceptional cases //////////////////////////////////////

  // x^y = 2^( y * log2(x) )
  //     = 2^( y * ( e_x + log2(m_x) ) )
  // First we compute log2(x) = e_x + log2(m_x)
  x_u = FloatBits(x).uintval();

  // Extract exponent field of x.
  ex += (x_u >> FloatBits::FRACTION_LEN);
  double e_x = static_cast<double>(ex);
  // Use the highest 7 fractional bits of m_x as the index for look up tables.
  uint32_t x_mant = x_u & FloatBits::FRACTION_MASK;
  int idx_x = static_cast<int>(x_mant >> (FloatBits::FRACTION_LEN - 7));
  // Add the hidden bit to the mantissa.
  // 1 <= m_x < 2
  float m_x = cpp::bit_cast<float>(x_mant | 0x3f800000);

  // Reduced argument for log2(m_x):
  //   dx = r * m_x - 1.
  // The computation is exact, and -2^-8 <= dx < 2^-7.
  // Then m_x = (1 + dx) / r, and
  //   log2(m_x) = log2( (1 + dx) / r )
  //             = log2(1 + dx) - log2(r).
  double dx;
#ifdef LIBC_TARGET_CPU_HAS_FMA_FLOAT
  dx = static_cast<double>(fputil::multiply_add(m_x, R[idx_x], -1.0f)); // Exact
#else
  dx = fputil::multiply_add(static_cast<double>(m_x), RD[idx_x], -1.0); // Exact
#endif // LIBC_TARGET_CPU_HAS_FMA_FLOAT

  // Degree-5 polynomial approximation:
  //   dx * P(dx) ~ log2(1 + dx)
  // Generated by Sollya with:
  // > P = fpminimax(log2(1 + x)/x, 5, [|D...|], [-2^-8, 2^-7]);
  // > dirtyinfnorm(log2(1 + x)/x - P, [-2^-8, 2^-7]);
  //   0x1.653...p-52
  constexpr double COEFFS[] = {0x1.71547652b82fep0,  -0x1.71547652b7a07p-1,
                               0x1.ec709dc458db1p-2, -0x1.715479c2266c9p-2,
                               0x1.2776ae1ddf8fp-2,  -0x1.e7b2178870157p-3};

  double dx2 = dx * dx; // Exact
  double c0 = fputil::multiply_add(dx, COEFFS[1], COEFFS[0]);
  double c1 = fputil::multiply_add(dx, COEFFS[3], COEFFS[2]);
  double c2 = fputil::multiply_add(dx, COEFFS[5], COEFFS[4]);

  double p = fputil::polyeval(dx2, c0, c1, c2);

  //////////////////////////////////////////////////////////////////////////////
  // NOTE: For some reason, this is significantly less efficient than above!
  //
  // > P = fpminimax(log2(1 + x)/x, 4, [|D...|], [-2^-8, 2^-7]);
  // > dirtyinfnorm(log2(1 + x)/x - P, [-2^-8, 2^-7]);
  //   0x1.d04...p-44
  // constexpr double COEFFS[] = {0x1.71547652b8133p0, -0x1.71547652d1e33p-1,
  //                              0x1.ec70a098473dep-2, -0x1.7154c5ccdf121p-2,
  //                              0x1.2514fd90a130ap-2};
  //
  // double dx2 = dx * dx;
  // double c0 = fputil::multiply_add(dx, COEFFS[1], COEFFS[0]);
  // double c1 = fputil::multiply_add(dx, COEFFS[3], COEFFS[2]);
  // double p = fputil::polyeval(dx2, c0, c1, COEFFS[4]);
  //////////////////////////////////////////////////////////////////////////////

  // s = e_x - log2(r) + dx * P(dx)
  // Approximation errors:
  //   |log2(x) - s| < ulp(e_x) + (bounds on dx) * (error bounds of P(dx))
  //                 = ulp(e_x) + 2^-7 * 2^-51
  //                 < 2^8 * 2^-52 + 2^-7 * 2^-43
  //                 ~ 2^-44 + 2^-50
  double s = fputil::multiply_add(dx, p, LOG2_R[idx_x] + e_x);

  // To compute 2^(y * log2(x)), we break the exponent into 3 parts:
  //   y * log(2) = hi + mid + lo, where
  //   hi is an integer
  //   mid * 2^6 is an integer
  //   |lo| <= 2^-7
  // Then:
  //   x^y = 2^(y * log2(x)) = 2^hi * 2^mid * 2^lo,
  // In which 2^mid is obtained from a look-up table of size 2^6 = 64 elements,
  // and 2^lo ~ 1 + lo * P(lo).
  // Thus, we have:
  //   hi + mid = 2^-6 * round( 2^6 * y * log2(x) )
  // If we restrict the output such that |hi| < 150, (hi + mid) uses (8 + 6)
  // bits, hence, if we use double precision to perform
  //   round( 2^6 * y * log2(x))
  // the lo part is bounded by 2^-7 + 2^(-(52 - 14)) = 2^-7 + 2^-38

  // In the following computations:
  //   y6  = 2^6 * y
  //   hm  = 2^6 * (hi + mid) = round(2^6 * y * log2(x)) ~ round(y6 * s)
  //   lo6 = 2^6 * lo = 2^6 * (y - (hi + mid)) = y6 * log2(x) - hm.
  double y6 = static_cast<double>(y * 0x1.0p6f); // Exact.
  double hm = fputil::nearest_integer(s * y6);
#ifdef LIBC_MATH_HAS_SKIP_ACCURATE_PASS
  // lo6 = 2^6 * lo.
  double lo6_hi =
      fputil::multiply_add(y6, e_x + LOG2_R_DD[idx_x].hi, -hm); // Exact
  // Error bounds:
  //   | (y*log2(x) - hm * 2^-6 - lo) / y| < err(dx * p) + err(LOG2_R_DD.lo)
  //                                       < 2^-51 + 2^-75
  double lo6 = fputil::multiply_add(
      y6, fputil::multiply_add(dx, p, LOG2_R_DD[idx_x].lo), lo6_hi);
#else
  // lo6 = 2^6 * lo.
  double lo6_hi =
      fputil::multiply_add(y6, e_x + LOG2_R_TD[idx_x].hi, -hm); // Exact
  // Error bounds:
  //   | (y*log2(x) - hm * 2^-6 - lo) / y| < err(dx * p) + err(LOG2_R_DD.lo)
  //                                       < 2^-51 + 2^-75
  double lo6 = fputil::multiply_add(
      y6, fputil::multiply_add(dx, p, LOG2_R_TD[idx_x].mid), lo6_hi);
#endif

  // |2^(hi + mid) - exp2_hi_mid| <= ulp(exp2_hi_mid) / 2
  // Clamp the exponent part into smaller range that fits double precision.
  // For those exponents that are out of range, the final conversion will round
  // them correctly to inf/max float or 0/min float accordingly.
  int64_t hm_i = static_cast<int64_t>(hm);
  hm_i = (hm_i > (1 << 15)) ? (1 << 15)
                            : (hm_i < (-(1 << 15)) ? -(1 << 15) : hm_i);

  int idx_y = hm_i & 0x3f;

  // 2^hi
  int64_t exp_hi_i = (hm_i >> 6) << DoubleBits::FRACTION_LEN;
  // 2^mid
  int64_t exp_mid_i = cpp::bit_cast<uint64_t>(EXP2_MID1[idx_y].hi);
  // (-1)^sign * 2^hi * 2^mid
  // Error <= 2^hi * 2^-53
  uint64_t exp2_hi_mid_i = static_cast<uint64_t>(exp_hi_i + exp_mid_i) + sign;
  double exp2_hi_mid = cpp::bit_cast<double>(exp2_hi_mid_i);

  // Degree-5 polynomial approximation P(lo6) ~ 2^(lo6 / 2^6) = 2^(lo).
  // Generated by Sollya with:
  // > P = fpminimax(2^(x/64), 5, [|1, D...|], [-2^-1, 2^-1]);
  // > dirtyinfnorm(2^(x/64) - P, [-0.5, 0.5]);
  // 0x1.a2b77e618f5c4c176fd11b7659016cde5de83cb72p-60
  constexpr double EXP2_COEFFS[] = {0x1p0,
                                    0x1.62e42fefa39efp-7,
                                    0x1.ebfbdff82a23ap-15,
                                    0x1.c6b08d7076268p-23,
                                    0x1.3b2ad33f8b48bp-31,
                                    0x1.5d870c4d84445p-40};

  double lo6_sqr = lo6 * lo6;
  double d0 = fputil::multiply_add(lo6, EXP2_COEFFS[1], EXP2_COEFFS[0]);
  double d1 = fputil::multiply_add(lo6, EXP2_COEFFS[3], EXP2_COEFFS[2]);
  double d2 = fputil::multiply_add(lo6, EXP2_COEFFS[5], EXP2_COEFFS[4]);
  double pp = fputil::polyeval(lo6_sqr, d0, d1, d2);

  double r = pp * exp2_hi_mid;

#ifdef LIBC_MATH_HAS_SKIP_ACCURATE_PASS
  return static_cast<float>(r);
#else
  // Ziv accuracy test.
  uint64_t r_u = cpp::bit_cast<uint64_t>(r);
  float r_upper = static_cast<float>(cpp::bit_cast<double>(r_u + ERR));
  float r_lower = static_cast<float>(cpp::bit_cast<double>(r_u - ERR));

  if (LIBC_LIKELY(r_upper == r_lower)) {
    // Check for overflow or underflow.
    if (LIBC_UNLIKELY(FloatBits(r_upper).get_mantissa() == 0)) {
      if (FloatBits(r_upper).is_inf()) {
        fputil::set_errno_if_required(ERANGE);
        fputil::raise_except_if_required(FE_OVERFLOW);
      } else if (r_upper == 0.0f) {
        fputil::set_errno_if_required(ERANGE);
        fputil::raise_except_if_required(FE_UNDERFLOW);
      }
    }
    return r_upper;
  }

  // Scale lower part of 2^(hi + mid)
  DoubleDouble exp2_hi_mid_dd;
  exp2_hi_mid_dd.lo =
      (idx_y != 0)
          ? cpp::bit_cast<double>(exp_hi_i +
                                  cpp::bit_cast<int64_t>(EXP2_MID1[idx_y].mid))
          : 0.0;
  exp2_hi_mid_dd.hi = exp2_hi_mid;

  double r_dd = powf_double_double(idx_x, dx, y6, lo6_hi, exp2_hi_mid_dd);

  return static_cast<float>(r_dd);
#endif // LIBC_MATH_HAS_SKIP_ACCURATE_PASS
}

} // namespace LIBC_NAMESPACE_DECL
