[libc] [llvm] [libc][math] Implement C23 half precision pow function (PR #159906)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 1 18:19:41 PDT 2025
https://github.com/AnonMiraj updated https://github.com/llvm/llvm-project/pull/159906
>From f433dfd345fddec4bdadac0104d4edf5978b4238 Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Sat, 20 Sep 2025 07:58:40 +0300
Subject: [PATCH 1/9] [libc][math] Implement C23 half precision pow function
---
libc/config/gpu/amdgpu/entrypoints.txt | 1 +
libc/config/gpu/nvptx/entrypoints.txt | 1 +
libc/config/linux/aarch64/entrypoints.txt | 1 +
libc/config/linux/arm/entrypoints.txt | 1 +
libc/config/linux/riscv/entrypoints.txt | 1 +
libc/config/linux/x86_64/entrypoints.txt | 1 +
libc/include/math.yaml | 6 +
libc/src/math/CMakeLists.txt | 1 +
libc/src/math/generic/CMakeLists.txt | 24 ++
libc/src/math/generic/powf16.cpp | 296 ++++++++++++++++++++++
libc/src/math/powf16.h | 21 ++
libc/test/src/math/CMakeLists.txt | 11 +
libc/test/src/math/powf16_test.cpp | 122 +++++++++
libc/test/src/math/smoke/CMakeLists.txt | 10 +
libc/test/src/math/smoke/powf16_test.cpp | 232 +++++++++++++++++
15 files changed, 729 insertions(+)
create mode 100644 libc/src/math/generic/powf16.cpp
create mode 100644 libc/src/math/powf16.h
create mode 100644 libc/test/src/math/powf16_test.cpp
create mode 100644 libc/test/src/math/smoke/powf16_test.cpp
diff --git a/libc/config/gpu/amdgpu/entrypoints.txt b/libc/config/gpu/amdgpu/entrypoints.txt
index 4b6f3337036aa..7dd5118665456 100644
--- a/libc/config/gpu/amdgpu/entrypoints.txt
+++ b/libc/config/gpu/amdgpu/entrypoints.txt
@@ -451,6 +451,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.nextupl
libc.src.math.pow
libc.src.math.powf
+ libc.src.math.powf16
libc.src.math.remainder
libc.src.math.remainderf
libc.src.math.remainderl
diff --git a/libc/config/gpu/nvptx/entrypoints.txt b/libc/config/gpu/nvptx/entrypoints.txt
index d24cc740d4234..9aae829cd4004 100644
--- a/libc/config/gpu/nvptx/entrypoints.txt
+++ b/libc/config/gpu/nvptx/entrypoints.txt
@@ -451,6 +451,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.nextupl
libc.src.math.pow
libc.src.math.powf
+ libc.src.math.powf16
libc.src.math.remainder
libc.src.math.remainderf
libc.src.math.remainderl
diff --git a/libc/config/linux/aarch64/entrypoints.txt b/libc/config/linux/aarch64/entrypoints.txt
index 1bc5df9d45a93..584323d086079 100644
--- a/libc/config/linux/aarch64/entrypoints.txt
+++ b/libc/config/linux/aarch64/entrypoints.txt
@@ -589,6 +589,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.nextupl
libc.src.math.pow
libc.src.math.powf
+ libc.src.math.powf16
libc.src.math.remainder
libc.src.math.remainderf
libc.src.math.remainderl
diff --git a/libc/config/linux/arm/entrypoints.txt b/libc/config/linux/arm/entrypoints.txt
index ec01030c77d4f..a5759d1901cb8 100644
--- a/libc/config/linux/arm/entrypoints.txt
+++ b/libc/config/linux/arm/entrypoints.txt
@@ -405,6 +405,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.nextupl
libc.src.math.pow
libc.src.math.powf
+ libc.src.math.powf16
libc.src.math.remainder
libc.src.math.remainderf
libc.src.math.remainderl
diff --git a/libc/config/linux/riscv/entrypoints.txt b/libc/config/linux/riscv/entrypoints.txt
index 54ea983d64839..b19d1033f2b75 100644
--- a/libc/config/linux/riscv/entrypoints.txt
+++ b/libc/config/linux/riscv/entrypoints.txt
@@ -599,6 +599,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.nextupl
libc.src.math.pow
libc.src.math.powf
+ libc.src.math.powf16
libc.src.math.remainder
libc.src.math.remainderf
libc.src.math.remainderl
diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index 1fc9a2b901c14..03785ce2f8779 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -629,6 +629,7 @@ set(TARGET_LIBM_ENTRYPOINTS
libc.src.math.nextupl
libc.src.math.pow
libc.src.math.powf
+ libc.src.math.powf16
libc.src.math.remainder
libc.src.math.remainderf
libc.src.math.remainderl
diff --git a/libc/include/math.yaml b/libc/include/math.yaml
index 4e398676bf91e..ff1608e3ec3dd 100644
--- a/libc/include/math.yaml
+++ b/libc/include/math.yaml
@@ -2083,6 +2083,12 @@ functions:
arguments:
- type: float
- type: float
+ - name: powf16
+ standards:
+ - stdc
+ return_type: _Float16
+ arguments:
+ - type: _Float16
- name: powi
standards: llvm_libc_ext
return_type: double
diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index 187bc92e5c2c6..3a1ab17341265 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -451,6 +451,7 @@ add_math_entrypoint_object(nextupf128)
add_math_entrypoint_object(pow)
add_math_entrypoint_object(powf)
+add_math_entrypoint_object(powf16)
add_math_entrypoint_object(powi)
add_math_entrypoint_object(powif)
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 419f562713b5f..fa5e0ed5b8451 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -1581,6 +1581,30 @@ add_entrypoint_object(
libc.src.__support.math.expxf16_utils
)
+add_entrypoint_object(
+ powf16
+ SRCS
+ powf16.cpp
+ HDRS
+ ../pow.h
+ DEPENDS
+ .common_constants
+ libc.hdr.errno_macros
+ libc.hdr.fenv_macros
+ libc.src.__support.CPP.bit
+ libc.src.__support.FPUtil.fenv_impl
+ libc.src.__support.FPUtil.fp_bits
+ libc.src.__support.FPUtil.polyeval
+ libc.src.__support.FPUtil.cast
+ libc.src.__support.FPUtil.multiply_add
+ libc.src.__support.FPUtil.nearest_integer
+ libc.src.__support.FPUtil.sqrt
+ libc.src.__support.macros.optimization
+ libc.src.__support.math.expxf16_utils
+ COMPILE_OPTIONS
+ -O3
+)
+
add_entrypoint_object(
powf
SRCS
diff --git a/libc/src/math/generic/powf16.cpp b/libc/src/math/generic/powf16.cpp
new file mode 100644
index 0000000000000..8e2e6b552632f
--- /dev/null
+++ b/libc/src/math/generic/powf16.cpp
@@ -0,0 +1,296 @@
+//===-- Half-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/powf16.h"
+#include "hdr/errno_macros.h"
+#include "hdr/fenv_macros.h"
+#include "src/__support/CPP/bit.h"
+#include "src/__support/FPUtil/FEnvImpl.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/PolyEval.h"
+#include "src/__support/FPUtil/cast.h"
+#include "src/__support/FPUtil/multiply_add.h"
+#include "src/__support/FPUtil/nearest_integer.h"
+#include "src/__support/FPUtil/sqrt.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/optimization.h"
+#include "src/__support/macros/properties/types.h"
+#include "src/__support/math/expxf16_utils.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+namespace {
+
+bool is_odd_integer(float16 x) {
+ using FPBits = fputil::FPBits<float16>;
+ FPBits xbits(x);
+ uint16_t x_u = xbits.uintval();
+ unsigned x_e = static_cast<unsigned>(xbits.get_biased_exponent());
+ unsigned lsb = static_cast<unsigned>(
+ cpp::countr_zero(static_cast<uint32_t>(x_u | FPBits::EXP_MASK)));
+ constexpr unsigned UNIT_EXPONENT =
+ static_cast<unsigned>(FPBits::EXP_BIAS + FPBits::FRACTION_LEN);
+ return (x_e + lsb == UNIT_EXPONENT);
+}
+
+bool is_integer(float16 x) {
+ using FPBits = fputil::FPBits<float16>;
+ FPBits xbits(x);
+ uint16_t x_u = xbits.uintval();
+ unsigned x_e = static_cast<unsigned>(xbits.get_biased_exponent());
+ unsigned lsb = static_cast<unsigned>(
+ cpp::countr_zero(static_cast<uint32_t>(x_u | FPBits::EXP_MASK)));
+ constexpr unsigned UNIT_EXPONENT =
+ static_cast<unsigned>(FPBits::EXP_BIAS + FPBits::FRACTION_LEN);
+ return (x_e + lsb >= UNIT_EXPONENT);
+}
+
+} // namespace
+
+LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
+ using FPBits = fputil::FPBits<float16>;
+
+ FPBits xbits(x), ybits(y);
+ bool x_sign = xbits.is_neg();
+ bool y_sign = ybits.is_neg();
+
+ FPBits x_abs = xbits.abs();
+ FPBits y_abs = ybits.abs();
+
+ uint16_t x_u = xbits.uintval();
+ uint16_t x_a = x_abs.uintval();
+ uint16_t y_a = y_abs.uintval();
+ bool result_sign = false;
+
+ ///////// BEGIN - Check exceptional cases ////////////////////////////////////
+ // If x or y is signaling NaN
+ if (xbits.is_signaling_nan() || ybits.is_signaling_nan()) {
+ fputil::raise_except_if_required(FE_INVALID);
+ return FPBits::quiet_nan().get_val();
+ }
+
+ //
+ if (LIBC_UNLIKELY(ybits.is_zero() || x_u == FPBits::one().uintval() ||
+ x_u >= FPBits::inf().uintval() ||
+ x_u < FPBits::min_normal().uintval())) {
+ // pow(x, 0) = 1
+ if (ybits.is_zero()) {
+ return fputil::cast<float16>(1.0f);
+ }
+
+ // pow(1, Y) = 1
+ if (x_u == FPBits::one().uintval()) {
+ return fputil::cast<float16>(1.0f);
+ }
+
+ switch (y_a) {
+
+ case 0x3800U: { // y = +-0.5
+ if (LIBC_UNLIKELY(
+ (x == 0.0 || x_u == FPBits::inf(Sign::NEG).uintval()))) {
+ // pow(-0, 1/2) = +0
+ // pow(-inf, 1/2) = +inf
+ // Make sure it works correctly for FTZ/DAZ.
+ return fputil::cast<float16>(y_sign ? (1.0 / (x * x)) : (x * x));
+ }
+ return fputil::cast<float16>(y_sign ? (1.0 / fputil::sqrt<float16>(x))
+ : fputil::sqrt<float16>(x));
+ }
+ case 0x3c00U: // y = +-1.0
+ return fputil::cast<float16>(y_sign ? (1.0 / x) : x);
+
+ case 0x4000U: // y = +-2.0
+ return fputil::cast<float16>(y_sign ? (1.0 / (x * x)) : (x * x));
+ }
+ // TODO: Speed things up with pow(2, y) = exp2(y) and pow(10, y) = exp10(y).
+
+ // Propagate remaining quiet NaNs.
+ if (xbits.is_quiet_nan()) {
+ return x;
+ }
+ if (ybits.is_quiet_nan()) {
+ return y;
+ }
+
+ // x = -1: special case for integer exponents
+ if (x_u == FPBits::one(Sign::NEG).uintval()) {
+ if (is_integer(y)) {
+ if (is_odd_integer(y)) {
+ return fputil::cast<float16>(-1.0f);
+ } else {
+ return fputil::cast<float16>(1.0f);
+ }
+ }
+ // pow(-1, non-integer) = NaN
+ fputil::set_errno_if_required(EDOM);
+ fputil::raise_except_if_required(FE_INVALID);
+ return FPBits::quiet_nan().get_val();
+ }
+
+ // x = 0 cases
+ if (xbits.is_zero()) {
+ if (y_sign) {
+ // pow(+-0, negative) = +-inf and raise FE_DIVBYZERO
+ fputil::raise_except_if_required(FE_DIVBYZERO);
+ bool result_neg = x_sign && ybits.is_finite() && is_odd_integer(y);
+ return FPBits::inf(result_neg ? Sign::NEG : Sign::POS).get_val();
+ } else {
+ // pow(+-0, positive) = +-0
+ bool out_is_neg = x_sign && is_odd_integer(y);
+ return out_is_neg ? FPBits::zero(Sign::NEG).get_val()
+ : FPBits::zero(Sign::POS).get_val();
+ }
+ }
+
+ if (xbits.is_inf()) {
+ bool out_is_neg = x_sign && ybits.is_finite() && is_odd_integer(y);
+ if (y_sign) // pow(+-inf, negative) = +-0
+ return out_is_neg ? FPBits::zero(Sign::NEG).get_val()
+ : FPBits::zero(Sign::POS).get_val();
+ // pow(+-inf, positive) = +-inf
+ return FPBits::inf(out_is_neg ? Sign::NEG : Sign::POS).get_val();
+ }
+
+ // y = +-inf cases
+ if (ybits.is_inf()) {
+ // pow(1, inf) handled above.
+ bool x_abs_less_than_one = x_a < FPBits::one().uintval();
+ if ((x_abs_less_than_one && !y_sign) ||
+ (!x_abs_less_than_one && y_sign)) {
+ return fputil::cast<float16>(0.0f);
+ } else {
+ return FPBits::inf().get_val();
+ }
+ }
+
+ // pow( negative, non-integer ) = NaN
+ if (x_sign && !is_integer(y)) {
+ fputil::set_errno_if_required(EDOM);
+ fputil::raise_except_if_required(FE_INVALID);
+ return FPBits::quiet_nan().get_val();
+ }
+
+ // For negative x with integer y, compute pow(|x|, y) and adjust sign
+ if (x_sign) {
+ x = -x;
+ if (is_odd_integer(y)) {
+ result_sign = true;
+ }
+ }
+ }
+ ///////// 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)
+
+ using namespace math::expxf16_internal;
+ FPBits x_bits(x);
+
+ uint16_t x_u_log = x_bits.uintval();
+
+ // Extract exponent field of x.
+ int m = -FPBits::EXP_BIAS;
+
+ // When x is subnormal, normalize it by multiplying by 2^FRACTION_LEN.
+ if ((x_u_log & FPBits::EXP_MASK) == 0U) {
+ constexpr float NORMALIZE_EXP =
+ static_cast<float>(1U << FPBits::FRACTION_LEN);
+ x_bits = FPBits(x_bits.get_val() * fputil::cast<float16>(NORMALIZE_EXP));
+ x_u_log = x_bits.uintval();
+ m -= FPBits::FRACTION_LEN;
+ }
+
+ // Extract the mantissa and index into small lookup tables.
+ uint16_t mant = x_bits.get_mantissa();
+ // Use the highest 5 fractional bits of the mantissa as the index f.
+ int f = mant >> 5;
+
+ m += (x_u_log >> FPBits::FRACTION_LEN);
+
+ // Add the hidden bit to the mantissa.
+ // 1 <= m_x < 2
+ x_bits.set_biased_exponent(FPBits::EXP_BIAS);
+ float mant_f = x_bits.get_val();
+
+ // Range reduction for log2(m_x):
+ // v = r * m_x - 1, where r is a power of 2 from a lookup table.
+ // The computation is exact for half-precision, and -2^-5 <= v < 2^-4.
+ // Then m_x = (1 + v) / r, and log2(m_x) = log2(1 + v) - log2(r).
+
+ float v = fputil::multiply_add(mant_f, ONE_OVER_F_F[f], -1.0f);
+
+ // For half-precision accuracy, we use a degree-2 polynomial approximation:
+ // P(v) ~ log2(1 + v) / v
+ // Generated by Sollya with:
+ // > P = fpminimax(log2(1+x)/x, 2, [|D...|], [-2^-5, 2^-4]);
+ // The coefficients are rounded from the Sollya output.
+ float log2p1_d_over_f =
+ v * fputil::polyeval(v, 0x1.715476p+0f, -0x1.71771ap-1f, 0x1.ecb38ep-2f);
+
+ // log2(1.mant) = log2(f) + log2(1 + v)
+ float log2_1_mant = LOG2F_F[f] + log2p1_d_over_f;
+
+ // Complete log2(x) = e_x + log2(m_x)
+ float log2_x = static_cast<float>(m) + log2_1_mant;
+
+ // z = y * log2(x)
+ // Now compute 2^z = 2^(n + r), with n integer and r in [-0.5, 0.5].
+ double z = fputil::cast<double>(y) * log2_x;
+
+ // Check for overflow/underflow for half-precision.
+ // Half-precision range is approximately 2^-24 to 2^15.
+ if (z > 15.0) {
+ fputil::raise_except_if_required(FE_OVERFLOW);
+ return FPBits::inf().get_val();
+ }
+ if (z < -24.0) {
+ fputil::raise_except_if_required(FE_UNDERFLOW);
+ return fputil::cast<float16>(0.0f);
+ }
+
+ double n = fputil::nearest_integer(z);
+ double r = z - n;
+
+ // Compute 2^r using a degree-7 polynomial for r in [-0.5, 0.5].
+ // Generated by Sollya with:
+ // > P = fpminimax(2^x, 7, [|D...|], [-0.5, 0.5]);
+ // The polynomial coefficients are rounded from the Sollya output.
+ constexpr double EXP2_COEFFS[] = {
+ 0x1p+0, // 1.0
+ 0x1.62e42fefa39efp-1, // ln(2)
+ 0x1.ebfbdff82c58fp-3, // ln(2)^2 / 2
+ 0x1.c6b08d704a0c0p-5, // ln(2)^3 / 6
+ 0x1.3b2ab6fba4e77p-7, // ln(2)^4 / 24
+ 0x1.5d87fe78a6737p-10, // ln(2)^5 / 120
+ 0x1.430912f86a805p-13, // ln(2)^6 / 720
+ 0x1.10e4104ac8015p-17 // ln(2)^7 / 5040
+ };
+
+ double exp2_r = fputil::polyeval(
+ r, EXP2_COEFFS[0], EXP2_COEFFS[1], EXP2_COEFFS[2], EXP2_COEFFS[3],
+ EXP2_COEFFS[4], EXP2_COEFFS[5], EXP2_COEFFS[6], EXP2_COEFFS[7]);
+
+ // Compute 2^n by direct bit manipulation.
+ int n_int = static_cast<int>(n);
+ uint64_t exp_bits = static_cast<uint64_t>(n_int + 1023) << 52;
+ double pow2_n = cpp::bit_cast<double>(exp_bits);
+
+ float16 result = fputil::cast<float16>(pow2_n * exp2_r);
+
+ if (result_sign) {
+ FPBits result_bits(result);
+ result_bits.set_sign(Sign::NEG);
+ result = result_bits.get_val();
+ }
+
+ return result;
+}
+
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/src/math/powf16.h b/libc/src/math/powf16.h
new file mode 100644
index 0000000000000..52f9848f4a2be
--- /dev/null
+++ b/libc/src/math/powf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for powf16 --------------------------*- 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_MATH_POWF16_H
+#define LLVM_LIBC_SRC_MATH_POWF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+float16 powf16(float16 x, float16 y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_POWF16_H
diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index e15df147c3c35..eec048e094bd8 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -2470,6 +2470,17 @@ add_fp_unittest(
libc.src.__support.FPUtil.fp_bits
)
+add_fp_unittest(
+ powf16_test
+ NEED_MPFR
+ SUITE
+ libc-math-unittests
+ SRCS
+ powf16_test.cpp
+ DEPENDS
+ libc.src.math.powf16
+ libc.src.__support.FPUtil.fp_bits
+)
add_fp_unittest(
atan2f_test
NEED_MPFR
diff --git a/libc/test/src/math/powf16_test.cpp b/libc/test/src/math/powf16_test.cpp
new file mode 100644
index 0000000000000..171cb098114d4
--- /dev/null
+++ b/libc/test/src/math/powf16_test.cpp
@@ -0,0 +1,122 @@
+//===-- Unittests for powf16 ----------------------------------------------===//
+//
+// 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/powf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "test/UnitTest/Test.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
+
+using LlvmLibcPowF16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
+using LIBC_NAMESPACE::testing::tlog;
+
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+TEST_F(LlvmLibcPowF16Test, TrickyInputs) {
+ // These values are in half precision.
+ constexpr mpfr::BinaryInput<float16> INPUTS[] = {
+ {static_cast<float16>(0x1.08p-2f), static_cast<float16>(0x1.0cp-1f)},
+ {static_cast<float16>(0x1.66p-1f), static_cast<float16>(0x1.f1p+1f)},
+ {static_cast<float16>(0x1.c04p-1f), static_cast<float16>(0x1.2p+12f)},
+ {static_cast<float16>(0x1.aep-1f), static_cast<float16>(0x1.f9p-1f)},
+ {static_cast<float16>(0x1.ffcp-1f), static_cast<float16>(0x1.fffp-2f)},
+ {static_cast<float16>(0x1.f55p-1f), static_cast<float16>(0x1.88p+12f)},
+ {static_cast<float16>(0x1.e84p-1f), static_cast<float16>(0x1.2cp+13f)},
+ };
+
+ for (auto input : INPUTS) {
+ float16 x = input.x;
+ float16 y = input.y;
+ EXPECT_MPFR_MATCH(mpfr::Operation::Pow, input, LIBC_NAMESPACE::powf16(x, y),
+ 1.0); // 1 ULP tolerance is enough for f16
+ }
+}
+
+TEST_F(LlvmLibcPowF16Test, InFloat16Range) {
+ constexpr uint16_t X_COUNT = 63;
+ constexpr uint16_t X_START = FPBits(static_cast<float16>(0.25)).uintval();
+ constexpr uint16_t X_STOP = FPBits(static_cast<float16>(4.0)).uintval();
+ constexpr uint16_t X_STEP = (X_STOP - X_START) / X_COUNT;
+
+ constexpr uint16_t Y_COUNT = 59;
+ constexpr uint16_t Y_START = FPBits(static_cast<float16>(0.25)).uintval();
+ constexpr uint16_t Y_STOP = FPBits(static_cast<float16>(4.0)).uintval();
+ constexpr uint16_t Y_STEP = (Y_STOP - Y_START) / Y_COUNT;
+
+ auto test = [&](mpfr::RoundingMode rounding_mode) {
+ mpfr::ForceRoundingMode __r(rounding_mode);
+ if (!__r.success)
+ return;
+
+ uint64_t fails = 0;
+ uint64_t count = 0;
+ uint64_t cc = 0;
+ float16 mx = 0.0, my = 0.0, mr = 0.0;
+ double tol = 1.0; // start with 1 ULP for half precision
+
+ for (uint16_t i = 0, v = X_START; i <= X_COUNT; ++i, v += X_STEP) {
+ float16 x = FPBits(v).get_val();
+ if (FPBits(x).is_inf_or_nan() || x < static_cast<float16>(0.0))
+ continue;
+
+ for (uint16_t j = 0, w = Y_START; j <= Y_COUNT; ++j, w += Y_STEP) {
+ float16 y = FPBits(w).get_val();
+ if (FPBits(y).is_inf_or_nan())
+ continue;
+
+ float16 result = LIBC_NAMESPACE::powf16(x, y);
+ ++cc;
+ if (FPBits(result).is_inf_or_nan())
+ continue;
+
+ ++count;
+ mpfr::BinaryInput<float16> inputs{x, y};
+
+ if (!TEST_MPFR_MATCH_ROUNDING_SILENTLY(mpfr::Operation::Pow, inputs,
+ result, 1.0, rounding_mode)) {
+ ++fails;
+ while (!TEST_MPFR_MATCH_ROUNDING_SILENTLY(
+ mpfr::Operation::Pow, inputs, result, tol, rounding_mode)) {
+ mx = x;
+ my = y;
+ mr = result;
+
+ if (tol > 128.0) // half precision is only ~11 bits
+ break;
+
+ tol *= 2.0;
+ }
+ }
+ }
+ }
+ if (fails || (count < cc)) {
+ tlog << " powf16 failed: " << fails << "/" << count << "/" << cc
+ << " tests.\n"
+ << " Max ULPs is at most: " << static_cast<uint64_t>(tol)
+ << ".\n";
+ }
+ if (fails) {
+ mpfr::BinaryInput<float16> inputs{mx, my};
+ EXPECT_MPFR_MATCH(mpfr::Operation::Pow, inputs, mr, 1.0, rounding_mode);
+ }
+ };
+
+ tlog << " Test Rounding To Nearest...\n";
+ test(mpfr::RoundingMode::Nearest);
+
+ tlog << " Test Rounding Downward...\n";
+ test(mpfr::RoundingMode::Downward);
+
+ tlog << " Test Rounding Upward...\n";
+ test(mpfr::RoundingMode::Upward);
+
+ tlog << " Test Rounding Toward Zero...\n";
+ test(mpfr::RoundingMode::TowardZero);
+}
+
+
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index b800f7aba98d1..fa44c72e95618 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -4580,6 +4580,16 @@ add_fp_unittest(
libc.src.__support.FPUtil.fp_bits
)
+add_fp_unittest(
+ powf16_test
+ SUITE
+ libc-math-smoke-tests
+ SRCS
+ powf16_test.cpp
+ DEPENDS
+ libc.src.math.powf16
+ libc.src.__support.FPUtil.fp_bits
+)
add_fp_unittest(
totalorder_test
SUITE
diff --git a/libc/test/src/math/smoke/powf16_test.cpp b/libc/test/src/math/smoke/powf16_test.cpp
new file mode 100644
index 0000000000000..b3611e141dc01
--- /dev/null
+++ b/libc/test/src/math/smoke/powf16_test.cpp
@@ -0,0 +1,232 @@
+//===-- Unittests for powf16 ----------------------------------------------===//
+//
+// 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 "hdr/fenv_macros.h"
+#include "src/math/powf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "test/UnitTest/Test.h"
+
+using LlvmLibcPowF16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
+using LIBC_NAMESPACE::fputil::testing::ForceRoundingMode;
+using LIBC_NAMESPACE::fputil::testing::RoundingMode;
+
+TEST_F(LlvmLibcPowF16Test, SpecialNumbers) {
+ constexpr float16 NEG_ODD_INTEGER = -3.0f16;
+ constexpr float16 NEG_EVEN_INTEGER = -6.0f16;
+ constexpr float16 NEG_NON_INTEGER = -1.5f16;
+ constexpr float16 POS_ODD_INTEGER = 5.0f16;
+ constexpr float16 POS_EVEN_INTEGER = 8.0f16;
+ constexpr float16 POS_NON_INTEGER = 1.5f16;
+ constexpr float16 ONE_HALF = 0.5f16;
+
+ for (int i = 0; i < N_ROUNDING_MODES; ++i) {
+
+ ForceRoundingMode __r(ROUNDING_MODES[i]);
+ if (!__r.success)
+ continue;
+
+ // powf16( sNaN, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ aNaN, LIBC_NAMESPACE::powf16(sNaN, NEG_ODD_INTEGER), FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ aNaN, LIBC_NAMESPACE::powf16(sNaN, NEG_EVEN_INTEGER), FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ aNaN, LIBC_NAMESPACE::powf16(sNaN, POS_ODD_INTEGER), FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ aNaN, LIBC_NAMESPACE::powf16(sNaN, POS_EVEN_INTEGER), FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, ONE_HALF),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, zero),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, neg_zero),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, inf),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, neg_inf),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(sNaN, aNaN),
+ FE_INVALID);
+
+ // powf16( 0.0, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(zero, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ inf, LIBC_NAMESPACE::powf16(zero, NEG_ODD_INTEGER), FE_DIVBYZERO);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ inf, LIBC_NAMESPACE::powf16(zero, NEG_EVEN_INTEGER), FE_DIVBYZERO);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ inf, LIBC_NAMESPACE::powf16(zero, NEG_NON_INTEGER), FE_DIVBYZERO);
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(zero, POS_ODD_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(zero, POS_EVEN_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(zero, POS_NON_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(zero, ONE_HALF));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(zero, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(zero, neg_zero));
+ EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::powf16(zero, inf));
+ EXPECT_FP_EQ_WITH_EXCEPTION(inf, LIBC_NAMESPACE::powf16(zero, neg_inf),
+ FE_DIVBYZERO);
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(zero, aNaN));
+
+ // powf16( -0.0, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(neg_zero, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ neg_inf, LIBC_NAMESPACE::powf16(neg_zero, NEG_ODD_INTEGER),
+ FE_DIVBYZERO);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ inf, LIBC_NAMESPACE::powf16(neg_zero, NEG_EVEN_INTEGER), FE_DIVBYZERO);
+ EXPECT_FP_EQ_WITH_EXCEPTION(
+ inf, LIBC_NAMESPACE::powf16(neg_zero, NEG_NON_INTEGER), FE_DIVBYZERO);
+ EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::powf16(neg_zero, POS_ODD_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(neg_zero, POS_EVEN_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(neg_zero, POS_NON_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(neg_zero, ONE_HALF));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(neg_zero, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(neg_zero, neg_zero));
+ EXPECT_FP_EQ(0.0, LIBC_NAMESPACE::powf16(neg_zero, inf));
+ EXPECT_FP_EQ_WITH_EXCEPTION(inf, LIBC_NAMESPACE::powf16(neg_zero, neg_inf),
+ FE_DIVBYZERO);
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(neg_zero, aNaN));
+
+ // powf16( 1.0, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(1.0, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, neg_zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, 1.0));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, -1.0));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, NEG_ODD_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, NEG_EVEN_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, NEG_NON_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, POS_ODD_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, POS_EVEN_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, POS_NON_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, inf));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, neg_inf));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(1.0, aNaN));
+
+ // powf16( -1.0, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(-1.0, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(-1.0, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(-1.0, neg_zero));
+ EXPECT_FP_EQ(-1.0, LIBC_NAMESPACE::powf16(-1.0, 1.0));
+ EXPECT_FP_EQ(-1.0, LIBC_NAMESPACE::powf16(-1.0, -1.0));
+ EXPECT_FP_EQ(-1.0, LIBC_NAMESPACE::powf16(-1.0, NEG_ODD_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(-1.0, NEG_EVEN_INTEGER));
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(
+ LIBC_NAMESPACE::powf16(-1.0, NEG_NON_INTEGER), FE_INVALID);
+ EXPECT_FP_EQ(-1.0, LIBC_NAMESPACE::powf16(-1.0, POS_ODD_INTEGER));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(-1.0, POS_EVEN_INTEGER));
+ EXPECT_FP_IS_NAN_WITH_EXCEPTION(
+ LIBC_NAMESPACE::powf16(-1.0, POS_NON_INTEGER), FE_INVALID);
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(-1.0, inf));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(-1.0, neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(-1.0, aNaN));
+
+ // powf16( inf, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(inf, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(inf, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(inf, neg_zero));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(inf, 1.0));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(inf, -1.0));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(inf, NEG_ODD_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(inf, NEG_EVEN_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(inf, NEG_NON_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(inf, POS_ODD_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(inf, POS_EVEN_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(inf, POS_NON_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(inf, ONE_HALF));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(inf, inf));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(inf, neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(inf, aNaN));
+
+ // powf16( -inf, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(neg_inf, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(neg_inf, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(neg_inf, neg_zero));
+ EXPECT_FP_EQ(neg_inf, LIBC_NAMESPACE::powf16(neg_inf, 1.0));
+ EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::powf16(neg_inf, -1.0));
+ EXPECT_FP_EQ(neg_zero, LIBC_NAMESPACE::powf16(neg_inf, NEG_ODD_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(neg_inf, NEG_EVEN_INTEGER));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(neg_inf, NEG_NON_INTEGER));
+ EXPECT_FP_EQ(neg_inf, LIBC_NAMESPACE::powf16(neg_inf, POS_ODD_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(neg_inf, POS_EVEN_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(neg_inf, POS_NON_INTEGER));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(neg_inf, ONE_HALF));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(neg_inf, inf));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(neg_inf, neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(neg_inf, aNaN));
+
+ // powf16 ( aNaN, exponent )
+ EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::powf16(aNaN, sNaN),
+ FE_INVALID);
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(aNaN, zero));
+ EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(aNaN, neg_zero));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, 1.0));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, -1.0));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, NEG_ODD_INTEGER));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, NEG_EVEN_INTEGER));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, NEG_NON_INTEGER));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, POS_ODD_INTEGER));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, POS_EVEN_INTEGER));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, POS_NON_INTEGER));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, neg_inf));
+ EXPECT_FP_IS_NAN(LIBC_NAMESPACE::powf16(aNaN, aNaN));
+
+ // powf16 ( base, inf )
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(0.1f16, inf));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(-0.1f16, inf));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(1.1f16, inf));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(-1.1f16, inf));
+
+ // powf16 ( base, -inf )
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(0.1f16, neg_inf));
+ EXPECT_FP_EQ(inf, LIBC_NAMESPACE::powf16(-0.1f16, neg_inf));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(1.1f16, neg_inf));
+ EXPECT_FP_EQ(zero, LIBC_NAMESPACE::powf16(-1.1f16, neg_inf));
+
+ // Exact powers of 2:
+ // TODO: Enable these tests when we use exp2.
+ // EXPECT_FP_EQ(0x1.0p15, LIBC_NAMESPACE::powf16(2.0, 15.0));
+ // EXPECT_FP_EQ(0x1.0p126, LIBC_NAMESPACE::powf16(2.0, 126.0));
+ // EXPECT_FP_EQ(0x1.0p-45, LIBC_NAMESPACE::powf16(2.0, -45.0));
+ // EXPECT_FP_EQ(0x1.0p-126, LIBC_NAMESPACE::powf16(2.0, -126.0));
+ // EXPECT_FP_EQ(0x1.0p-149, LIBC_NAMESPACE::powf16(2.0, -149.0));
+
+ // Exact powers of 10:
+ // TODO: Enable these tests when we use exp10
+ // EXPECT_FP_EQ(1.0, LIBC_NAMESPACE::powf16(10.0, 0.0));
+ // EXPECT_FP_EQ(10.0, LIBC_NAMESPACE::powf16(10.0, 1.0));
+ // EXPECT_FP_EQ(100.0, LIBC_NAMESPACE::powf16(10.0, 2.0));
+ // EXPECT_FP_EQ(1000.0, LIBC_NAMESPACE::powf16(10.0, 3.0));
+ // EXPECT_FP_EQ(10000.0, LIBC_NAMESPACE::powf16(10.0, 4.0));
+ // EXPECT_FP_EQ(100000.0, LIBC_NAMESPACE::powf16(10.0, 5.0));
+ // EXPECT_FP_EQ(1000000.0, LIBC_NAMESPACE::powf16(10.0, 6.0));
+ // EXPECT_FP_EQ(10000000.0, LIBC_NAMESPACE::powf16(10.0, 7.0));
+ // EXPECT_FP_EQ(100000000.0, LIBC_NAMESPACE::powf16(10.0, 8.0));
+ // EXPECT_FP_EQ(1000000000.0, LIBC_NAMESPACE::powf16(10.0, 9.0));
+ // EXPECT_FP_EQ(10000000000.0, LIBC_NAMESPACE::powf16(10.0, 10.0));
+
+ // Overflow / Underflow:
+ if (ROUNDING_MODES[i] != RoundingMode::Downward &&
+ ROUNDING_MODES[i] != RoundingMode::TowardZero) {
+ EXPECT_FP_EQ_WITH_EXCEPTION(inf, LIBC_NAMESPACE::powf16(3.1f16, 21.0),
+ FE_OVERFLOW);
+ }
+ if (ROUNDING_MODES[i] != RoundingMode::Upward) {
+ EXPECT_FP_EQ_WITH_EXCEPTION(0.0, LIBC_NAMESPACE::powf16(3.1f16, -21.0),
+ FE_UNDERFLOW);
+ }
+ }
+}
>From 21275a3d2e754ae2e08779f70d3e35d0375530a0 Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Sat, 20 Sep 2025 08:09:23 +0300
Subject: [PATCH 2/9] fix formatting
---
libc/src/math/powf16.h | 2 +-
libc/test/src/math/powf16_test.cpp | 6 +-----
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/libc/src/math/powf16.h b/libc/src/math/powf16.h
index 52f9848f4a2be..bd50f16edeede 100644
--- a/libc/src/math/powf16.h
+++ b/libc/src/math/powf16.h
@@ -1,4 +1,4 @@
-//===-- Implementation header for powf16 --------------------------*- C++ -*-===//
+//===-- Implementation header for powf16 ------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
diff --git a/libc/test/src/math/powf16_test.cpp b/libc/test/src/math/powf16_test.cpp
index 171cb098114d4..030f0e9cf8be3 100644
--- a/libc/test/src/math/powf16_test.cpp
+++ b/libc/test/src/math/powf16_test.cpp
@@ -6,7 +6,6 @@
//
//===----------------------------------------------------------------------===//
-
#include "src/math/powf16.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
@@ -97,8 +96,7 @@ TEST_F(LlvmLibcPowF16Test, InFloat16Range) {
if (fails || (count < cc)) {
tlog << " powf16 failed: " << fails << "/" << count << "/" << cc
<< " tests.\n"
- << " Max ULPs is at most: " << static_cast<uint64_t>(tol)
- << ".\n";
+ << " Max ULPs is at most: " << static_cast<uint64_t>(tol) << ".\n";
}
if (fails) {
mpfr::BinaryInput<float16> inputs{mx, my};
@@ -118,5 +116,3 @@ TEST_F(LlvmLibcPowF16Test, InFloat16Range) {
tlog << " Test Rounding Toward Zero...\n";
test(mpfr::RoundingMode::TowardZero);
}
-
-
>From 7db870385ea3d2aec374b96749504eb8b01c73fb Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Tue, 23 Sep 2025 09:31:48 +0300
Subject: [PATCH 3/9] add missing argument in math.yml
---
libc/include/math.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/libc/include/math.yaml b/libc/include/math.yaml
index ff1608e3ec3dd..09e9bfed6dad4 100644
--- a/libc/include/math.yaml
+++ b/libc/include/math.yaml
@@ -2089,6 +2089,7 @@ functions:
return_type: _Float16
arguments:
- type: _Float16
+ - type: _Float16
- name: powi
standards: llvm_libc_ext
return_type: double
>From 7a8db3f659e67bed70a8e301079d6f888b0d14c2 Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Tue, 23 Sep 2025 09:32:00 +0300
Subject: [PATCH 4/9] remove optimzation option
---
libc/src/math/generic/CMakeLists.txt | 2 --
1 file changed, 2 deletions(-)
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index fa5e0ed5b8451..b1bc47d64fa82 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -1601,8 +1601,6 @@ add_entrypoint_object(
libc.src.__support.FPUtil.sqrt
libc.src.__support.macros.optimization
libc.src.__support.math.expxf16_utils
- COMPILE_OPTIONS
- -O3
)
add_entrypoint_object(
>From 7bb9c40553f60f5f24b5dbc65289fc8ae480c74b Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Wed, 24 Sep 2025 22:58:01 +0300
Subject: [PATCH 5/9] make tests exaustive
---
libc/test/src/math/powf16_test.cpp | 145 ++++++++++-------------------
1 file changed, 51 insertions(+), 94 deletions(-)
diff --git a/libc/test/src/math/powf16_test.cpp b/libc/test/src/math/powf16_test.cpp
index 030f0e9cf8be3..4f70291041bfc 100644
--- a/libc/test/src/math/powf16_test.cpp
+++ b/libc/test/src/math/powf16_test.cpp
@@ -12,107 +12,64 @@
#include "utils/MPFRWrapper/MPFRUtils.h"
using LlvmLibcPowF16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
-using LIBC_NAMESPACE::testing::tlog;
namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
-TEST_F(LlvmLibcPowF16Test, TrickyInputs) {
- // These values are in half precision.
- constexpr mpfr::BinaryInput<float16> INPUTS[] = {
- {static_cast<float16>(0x1.08p-2f), static_cast<float16>(0x1.0cp-1f)},
- {static_cast<float16>(0x1.66p-1f), static_cast<float16>(0x1.f1p+1f)},
- {static_cast<float16>(0x1.c04p-1f), static_cast<float16>(0x1.2p+12f)},
- {static_cast<float16>(0x1.aep-1f), static_cast<float16>(0x1.f9p-1f)},
- {static_cast<float16>(0x1.ffcp-1f), static_cast<float16>(0x1.fffp-2f)},
- {static_cast<float16>(0x1.f55p-1f), static_cast<float16>(0x1.88p+12f)},
- {static_cast<float16>(0x1.e84p-1f), static_cast<float16>(0x1.2cp+13f)},
- };
-
- for (auto input : INPUTS) {
- float16 x = input.x;
- float16 y = input.y;
- EXPECT_MPFR_MATCH(mpfr::Operation::Pow, input, LIBC_NAMESPACE::powf16(x, y),
- 1.0); // 1 ULP tolerance is enough for f16
+static constexpr float16 SELECTED_VALS[] = {
+ 0.5f16, 0.83984375f16, 1.0f16, 2.0f16, 3.0f16, 3.140625f16, 15.5f16,
+};
+
+// Test selected x values against all possible y values.
+TEST_F(LlvmLibcPowF16Test, SelectedX_AllY) {
+ for (size_t i = 0; i < sizeof(SELECTED_VALS) / sizeof(SELECTED_VALS[0]);
+ ++i) {
+ float16 x = SELECTED_VALS[i];
+ for (uint16_t y_u = 0; y_u <= 0x7c00U; ++y_u) {
+ float16 y = FPBits(y_u).get_val();
+
+ mpfr::BinaryInput<float16> input{x, y};
+ float16 result = LIBC_NAMESPACE::powf16(x, y);
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input, result, 1.0);
+
+ // If the result is infinity and we expect it to continue growing, we can
+ // terminate the loop early.
+ if (FPBits(result).is_inf() && FPBits(result).is_pos()) {
+ // For x > 1, as y increases in the positive range, pow remains inf.
+ if (x > static_cast<float16>(1.0f) && y > static_cast<float16>(0.0f)) {
+ // The y_u loop covers the positive range up to 0x7BFF.
+ break;
+ }
+ // For 0 < x < 1, as y becomes more negative, pow becomes inf.
+ if (x > static_cast<float16>(0.0f) && x < static_cast<float16>(1.0f) &&
+ y < static_cast<float16>(0.0f)) {
+ // The y_u loop covers the negative range from 0x8000.
+ break;
+ }
+ }
+ }
}
}
-TEST_F(LlvmLibcPowF16Test, InFloat16Range) {
- constexpr uint16_t X_COUNT = 63;
- constexpr uint16_t X_START = FPBits(static_cast<float16>(0.25)).uintval();
- constexpr uint16_t X_STOP = FPBits(static_cast<float16>(4.0)).uintval();
- constexpr uint16_t X_STEP = (X_STOP - X_START) / X_COUNT;
-
- constexpr uint16_t Y_COUNT = 59;
- constexpr uint16_t Y_START = FPBits(static_cast<float16>(0.25)).uintval();
- constexpr uint16_t Y_STOP = FPBits(static_cast<float16>(4.0)).uintval();
- constexpr uint16_t Y_STEP = (Y_STOP - Y_START) / Y_COUNT;
-
- auto test = [&](mpfr::RoundingMode rounding_mode) {
- mpfr::ForceRoundingMode __r(rounding_mode);
- if (!__r.success)
- return;
-
- uint64_t fails = 0;
- uint64_t count = 0;
- uint64_t cc = 0;
- float16 mx = 0.0, my = 0.0, mr = 0.0;
- double tol = 1.0; // start with 1 ULP for half precision
-
- for (uint16_t i = 0, v = X_START; i <= X_COUNT; ++i, v += X_STEP) {
- float16 x = FPBits(v).get_val();
- if (FPBits(x).is_inf_or_nan() || x < static_cast<float16>(0.0))
- continue;
-
- for (uint16_t j = 0, w = Y_START; j <= Y_COUNT; ++j, w += Y_STEP) {
- float16 y = FPBits(w).get_val();
- if (FPBits(y).is_inf_or_nan())
- continue;
-
- float16 result = LIBC_NAMESPACE::powf16(x, y);
- ++cc;
- if (FPBits(result).is_inf_or_nan())
- continue;
-
- ++count;
- mpfr::BinaryInput<float16> inputs{x, y};
-
- if (!TEST_MPFR_MATCH_ROUNDING_SILENTLY(mpfr::Operation::Pow, inputs,
- result, 1.0, rounding_mode)) {
- ++fails;
- while (!TEST_MPFR_MATCH_ROUNDING_SILENTLY(
- mpfr::Operation::Pow, inputs, result, tol, rounding_mode)) {
- mx = x;
- my = y;
- mr = result;
-
- if (tol > 128.0) // half precision is only ~11 bits
- break;
-
- tol *= 2.0;
- }
+// Test selected y values against all possible x values.
+TEST_F(LlvmLibcPowF16Test, SelectedY_AllX) {
+ for (size_t i = 0; i < sizeof(SELECTED_VALS) / sizeof(SELECTED_VALS[0]);
+ ++i) {
+ float16 y = SELECTED_VALS[i];
+ for (uint16_t x_u = 0; x_u <= 0x7c00U; ++x_u) {
+ float16 x = FPBits(x_u).get_val();
+ mpfr::BinaryInput<float16> input{x, y};
+ float16 result = LIBC_NAMESPACE::powf16(x, y);
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input, result, 1.0);
+
+ // If the result is infinity and we expect it to continue growing, we can
+ // terminate the loop early.
+ if (FPBits(result).is_inf() && FPBits(result).is_pos()) {
+ // For y > 0, as x increases in the positive range, pow remains inf.
+ if (y > 0.0f16 && x > 0.0f16) {
+ // The x_u loop covers the positive range up to 0x7BFF.
+ break;
}
}
}
- if (fails || (count < cc)) {
- tlog << " powf16 failed: " << fails << "/" << count << "/" << cc
- << " tests.\n"
- << " Max ULPs is at most: " << static_cast<uint64_t>(tol) << ".\n";
- }
- if (fails) {
- mpfr::BinaryInput<float16> inputs{mx, my};
- EXPECT_MPFR_MATCH(mpfr::Operation::Pow, inputs, mr, 1.0, rounding_mode);
- }
- };
-
- tlog << " Test Rounding To Nearest...\n";
- test(mpfr::RoundingMode::Nearest);
-
- tlog << " Test Rounding Downward...\n";
- test(mpfr::RoundingMode::Downward);
-
- tlog << " Test Rounding Upward...\n";
- test(mpfr::RoundingMode::Upward);
-
- tlog << " Test Rounding Toward Zero...\n";
- test(mpfr::RoundingMode::TowardZero);
+ }
}
>From 28d52f6c1ca8b4094f3c7c5f12837a7e623f09ff Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Wed, 24 Sep 2025 22:58:15 +0300
Subject: [PATCH 6/9] update log poly to double
---
libc/src/math/generic/powf16.cpp | 35 ++++++++++++++++----------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/libc/src/math/generic/powf16.cpp b/libc/src/math/generic/powf16.cpp
index 8e2e6b552632f..1c998ca02e7e8 100644
--- a/libc/src/math/generic/powf16.cpp
+++ b/libc/src/math/generic/powf16.cpp
@@ -199,14 +199,13 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
int m = -FPBits::EXP_BIAS;
// When x is subnormal, normalize it by multiplying by 2^FRACTION_LEN.
- if ((x_u_log & FPBits::EXP_MASK) == 0U) {
- constexpr float NORMALIZE_EXP =
- static_cast<float>(1U << FPBits::FRACTION_LEN);
- x_bits = FPBits(x_bits.get_val() * fputil::cast<float16>(NORMALIZE_EXP));
+ if ((x_u_log & FPBits::EXP_MASK) == 0U) { // Subnormal x
+ constexpr double NORMALIZE_EXP = 1.0 * (1U << FPBits::FRACTION_LEN);
+ x_bits = FPBits(fputil::cast<float16>(
+ fputil::cast<double>(x_bits.get_val()) * NORMALIZE_EXP));
x_u_log = x_bits.uintval();
m -= FPBits::FRACTION_LEN;
}
-
// Extract the mantissa and index into small lookup tables.
uint16_t mant = x_bits.get_mantissa();
// Use the highest 5 fractional bits of the mantissa as the index f.
@@ -217,28 +216,29 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
// Add the hidden bit to the mantissa.
// 1 <= m_x < 2
x_bits.set_biased_exponent(FPBits::EXP_BIAS);
- float mant_f = x_bits.get_val();
+ double mant_d = x_bits.get_val();
// Range reduction for log2(m_x):
// v = r * m_x - 1, where r is a power of 2 from a lookup table.
// The computation is exact for half-precision, and -2^-5 <= v < 2^-4.
// Then m_x = (1 + v) / r, and log2(m_x) = log2(1 + v) - log2(r).
- float v = fputil::multiply_add(mant_f, ONE_OVER_F_F[f], -1.0f);
-
+ double v =
+ fputil::multiply_add(mant_d, fputil::cast<double>(ONE_OVER_F_F[f]), -1.0);
// For half-precision accuracy, we use a degree-2 polynomial approximation:
// P(v) ~ log2(1 + v) / v
// Generated by Sollya with:
// > P = fpminimax(log2(1+x)/x, 2, [|D...|], [-2^-5, 2^-4]);
// The coefficients are rounded from the Sollya output.
- float log2p1_d_over_f =
- v * fputil::polyeval(v, 0x1.715476p+0f, -0x1.71771ap-1f, 0x1.ecb38ep-2f);
+
+ double log2p1_d_over_f =
+ v * fputil::polyeval(v, 0x1.715476p+0, -0x1.71771ap-1, 0x1.ecb38ep-2);
// log2(1.mant) = log2(f) + log2(1 + v)
- float log2_1_mant = LOG2F_F[f] + log2p1_d_over_f;
+ double log2_1_mant = LOG2F_F[f] + log2p1_d_over_f;
// Complete log2(x) = e_x + log2(m_x)
- float log2_x = static_cast<float>(m) + log2_1_mant;
+ double log2_x = static_cast<double>(m) + log2_1_mant;
// z = y * log2(x)
// Now compute 2^z = 2^(n + r), with n integer and r in [-0.5, 0.5].
@@ -246,10 +246,7 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
// Check for overflow/underflow for half-precision.
// Half-precision range is approximately 2^-24 to 2^15.
- if (z > 15.0) {
- fputil::raise_except_if_required(FE_OVERFLOW);
- return FPBits::inf().get_val();
- }
+ //
if (z < -24.0) {
fputil::raise_except_if_required(FE_UNDERFLOW);
return fputil::cast<float16>(0.0f);
@@ -282,7 +279,11 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
uint64_t exp_bits = static_cast<uint64_t>(n_int + 1023) << 52;
double pow2_n = cpp::bit_cast<double>(exp_bits);
- float16 result = fputil::cast<float16>(pow2_n * exp2_r);
+
+ double result_d = (pow2_n * exp2_r);
+ float16 result = fputil::cast<float16>(result_d);
+ if(result_d==65504.0)
+ return (65504.f16);
if (result_sign) {
FPBits result_bits(result);
>From 13dd3fff36f1bedb1764278655c0ea1bbaa89877 Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Sat, 11 Oct 2025 13:05:30 +0300
Subject: [PATCH 7/9] fix powf16 tests
---
libc/test/src/math/powf16_test.cpp | 34 ++++--------------------------
1 file changed, 4 insertions(+), 30 deletions(-)
diff --git a/libc/test/src/math/powf16_test.cpp b/libc/test/src/math/powf16_test.cpp
index 4f70291041bfc..090289ba1983d 100644
--- a/libc/test/src/math/powf16_test.cpp
+++ b/libc/test/src/math/powf16_test.cpp
@@ -28,24 +28,8 @@ TEST_F(LlvmLibcPowF16Test, SelectedX_AllY) {
float16 y = FPBits(y_u).get_val();
mpfr::BinaryInput<float16> input{x, y};
- float16 result = LIBC_NAMESPACE::powf16(x, y);
- EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input, result, 1.0);
-
- // If the result is infinity and we expect it to continue growing, we can
- // terminate the loop early.
- if (FPBits(result).is_inf() && FPBits(result).is_pos()) {
- // For x > 1, as y increases in the positive range, pow remains inf.
- if (x > static_cast<float16>(1.0f) && y > static_cast<float16>(0.0f)) {
- // The y_u loop covers the positive range up to 0x7BFF.
- break;
- }
- // For 0 < x < 1, as y becomes more negative, pow becomes inf.
- if (x > static_cast<float16>(0.0f) && x < static_cast<float16>(1.0f) &&
- y < static_cast<float16>(0.0f)) {
- // The y_u loop covers the negative range from 0x8000.
- break;
- }
- }
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input,
+ LIBC_NAMESPACE::powf16(x, y), 0.5);
}
}
}
@@ -58,18 +42,8 @@ TEST_F(LlvmLibcPowF16Test, SelectedY_AllX) {
for (uint16_t x_u = 0; x_u <= 0x7c00U; ++x_u) {
float16 x = FPBits(x_u).get_val();
mpfr::BinaryInput<float16> input{x, y};
- float16 result = LIBC_NAMESPACE::powf16(x, y);
- EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input, result, 1.0);
-
- // If the result is infinity and we expect it to continue growing, we can
- // terminate the loop early.
- if (FPBits(result).is_inf() && FPBits(result).is_pos()) {
- // For y > 0, as x increases in the positive range, pow remains inf.
- if (y > 0.0f16 && x > 0.0f16) {
- // The x_u loop covers the positive range up to 0x7BFF.
- break;
- }
- }
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input,
+ LIBC_NAMESPACE::powf16(x, y), 0.5);
}
}
}
>From 62128242734393a65130618c1296c2735befce8a Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Sun, 2 Nov 2025 03:18:26 +0200
Subject: [PATCH 8/9] update powf16 approach
---
libc/src/math/generic/CMakeLists.txt | 2 +-
libc/src/math/generic/powf16.cpp | 333 ++--
xxx.txt.prev | 2699 ++++++++++++++++++++++++++
3 files changed, 2913 insertions(+), 121 deletions(-)
create mode 100644 xxx.txt.prev
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index b1bc47d64fa82..2c47626bed4a5 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -1600,7 +1600,7 @@ add_entrypoint_object(
libc.src.__support.FPUtil.nearest_integer
libc.src.__support.FPUtil.sqrt
libc.src.__support.macros.optimization
- libc.src.__support.math.expxf16_utils
+ libc.src.__support.math.exp10f_utils
)
add_entrypoint_object(
diff --git a/libc/src/math/generic/powf16.cpp b/libc/src/math/generic/powf16.cpp
index 1c998ca02e7e8..22010e954183c 100644
--- a/libc/src/math/generic/powf16.cpp
+++ b/libc/src/math/generic/powf16.cpp
@@ -21,12 +21,53 @@
#include "src/__support/macros/config.h"
#include "src/__support/macros/optimization.h"
#include "src/__support/macros/properties/types.h"
-#include "src/__support/math/expxf16_utils.h"
+#include "src/__support/math/exp10f_utils.h"
+#include "src/math/generic/common_constants.h"
namespace LIBC_NAMESPACE_DECL {
namespace {
+static inline double exp2_range_reduced(double x) {
+ // k = round(x * 32) => (hi + mid) * 2^5
+ double kf = fputil::nearest_integer(x * 32.0);
+ int k = static_cast<int>(kf);
+ // dx = lo = x - (hi + mid) = x - k * 2^(-5)
+ double dx = fputil::multiply_add(-0x1.0p-5, kf, x); // -2^-5 * k + x
+
+ // hi = k >> MID_BITS
+ // exp_hi = hi shifted into double exponent field
+ int64_t hi = static_cast<int64_t>(k >> ExpBase::MID_BITS);
+ int64_t exp_hi = static_cast<int64_t>(
+ static_cast<uint64_t>(hi) << fputil::FPBits<double>::FRACTION_LEN);
+
+ // mh_bits = bits for 2^hi * 2^mid (lookup contains base bits for 2^mid)
+ int tab_index = k & ExpBase::MID_MASK; // mid index in [0, 31]
+ int64_t mh_bits = ExpBase::EXP_2_MID[tab_index] + exp_hi;
+
+ // mh = 2^(hi + mid)
+ double mh = fputil::FPBits<double>(static_cast<uint64_t>(mh_bits)).get_val();
+
+ // Degree-5 polynomial approximating (2^x - 1)/x generating by Sollya with:
+ // > P = fpminimax((2^x - 1)/x, 5, [|D...|], [-1/32. 1/32]);
+ constexpr double COEFFS[5] = {0x1.62e42fefa39efp-1, 0x1.ebfbdff8131c4p-3,
+ 0x1.c6b08d7061695p-5, 0x1.3b2b1bee74b2ap-7,
+ 0x1.5d88091198529p-10};
+
+ double dx_sq = dx * dx;
+ double c1 = fputil::multiply_add(dx, COEFFS[0], 1.0); // 1 + ln2*dx
+ double c2 =
+ fputil::multiply_add(dx, COEFFS[2], COEFFS[1]); // COEFF1 + COEFF2*dx
+ double c3 =
+ fputil::multiply_add(dx, COEFFS[4], COEFFS[3]); // COEFF3 + COEFF4*dx
+ double p = fputil::multiply_add(dx_sq, c3, c2); // c2 + c3*dx^2
+
+ // 2^x = 2^(hi+mid) * 2^dx
+ // ≈ mh * (1 + dx * P(dx))
+ // = mh + (mh * dx) * P(dx)
+ double result = fputil::multiply_add(p, dx_sq * mh, c1 * mh);
+ return result;
+}
bool is_odd_integer(float16 x) {
using FPBits = fputil::FPBits<float16>;
FPBits xbits(x);
@@ -66,6 +107,7 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
uint16_t x_u = xbits.uintval();
uint16_t x_a = x_abs.uintval();
uint16_t y_a = y_abs.uintval();
+ uint16_t y_u = ybits.uintval();
bool result_sign = false;
///////// BEGIN - Check exceptional cases ////////////////////////////////////
@@ -74,57 +116,106 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
fputil::raise_except_if_required(FE_INVALID);
return FPBits::quiet_nan().get_val();
}
-
- //
- if (LIBC_UNLIKELY(ybits.is_zero() || x_u == FPBits::one().uintval() ||
- x_u >= FPBits::inf().uintval() ||
- x_u < FPBits::min_normal().uintval())) {
+ if (LIBC_UNLIKELY(
+ ybits.is_zero() || x_u == FPBits::one().uintval() || xbits.is_nan() ||
+ ybits.is_nan() || x_u == FPBits::one().uintval() ||
+ x_u == FPBits::zero().uintval() || x_u >= FPBits::inf().uintval() ||
+ y_u >= FPBits::inf().uintval() ||
+ x_u < FPBits::min_normal().uintval() || y_a == 0x3400U ||
+ y_a == 0x3800U || y_a == 0x3A00U || y_a == 0x3800U ||
+ y_a == 0x3800U || y_a == 0x3D00U || y_a == 0x3E00U ||
+ y_a == 0x4100U || y_a == 0x4300U || y_a == 0x3c00U ||
+ y_a == 0x4000U || is_integer(y))) {
// pow(x, 0) = 1
if (ybits.is_zero()) {
- return fputil::cast<float16>(1.0f);
+ return 1.0f16;
}
// pow(1, Y) = 1
if (x_u == FPBits::one().uintval()) {
- return fputil::cast<float16>(1.0f);
+ return 1.0f16;
+ }
+ // 4. Handle remaining NaNs
+ // pow(NaN, y) = NaN (for y != 0)
+ if (xbits.is_nan()) {
+ return x;
+ }
+ // pow(x, NaN) = NaN (for x != 1)
+ if (ybits.is_nan()) {
+ return y;
}
-
switch (y_a) {
+ case 0x3400U: // y = ±0.25 (1/4)
+ case 0x3800U: // y = ±0.5 (1/2)
+ case 0x3A00U: // y = ±0.75 (3/4)
+ case 0x3D00U: // y = ±1.25 (5/4)
+ case 0x3E00U: // y = ±1.5 (3/2)
+ case 0x4100U: // y = ±2.5 (5/2)
+ case 0x4300U: // y = ±3.5 (7/2)
+ {
+ if (xbits.is_zero()) {
+ if (y_sign) {
+ // pow(±0, negative) handled below
+ break;
+ } else {
+ // pow(±0, positive_fractional) = +0
+ return FPBits::zero(Sign::POS).get_val();
+ }
+ }
- case 0x3800U: { // y = +-0.5
- if (LIBC_UNLIKELY(
- (x == 0.0 || x_u == FPBits::inf(Sign::NEG).uintval()))) {
- // pow(-0, 1/2) = +0
- // pow(-inf, 1/2) = +inf
- // Make sure it works correctly for FTZ/DAZ.
- return fputil::cast<float16>(y_sign ? (1.0 / (x * x)) : (x * x));
+ if (x_sign && !xbits.is_zero()) {
+ break; // pow(negative, non-integer) = NaN
}
- return fputil::cast<float16>(y_sign ? (1.0 / fputil::sqrt<float16>(x))
- : fputil::sqrt<float16>(x));
+
+ double x_d = static_cast<double>(x);
+ double sqrt_x = fputil::sqrt<double>(x_d);
+ double fourth_root = fputil::sqrt<double>(sqrt_x);
+ double result_d;
+
+ // Compute based on exponent value
+ switch (y_a) {
+ case 0x3400U: // 0.25 = x^(1/4)
+ result_d = fourth_root;
+ break;
+ case 0x3800U: // 0.5 = x^(1/2)
+ result_d = sqrt_x;
+ break;
+ case 0x3A00U: // 0.75 = x^(1/2) * x^(1/4)
+ result_d = sqrt_x * fourth_root;
+ break;
+ case 0x3D00U: // 1.25 = x * x^(1/4)
+ result_d = x_d * fourth_root;
+ break;
+ case 0x3E00U: // 1.5 = x * x^(1/2)
+ result_d = x_d * sqrt_x;
+ break;
+ case 0x4100U: // 2.5 = x^2 * x^(1/2)
+ result_d = x_d * x_d * sqrt_x;
+ break;
+ case 0x4300U: // 3.5 = x^3 * x^(1/2)
+ result_d = x_d * x_d * x_d * sqrt_x;
+ break;
+ }
+
+ result_d = y_sign ? (1.0 / result_d) : result_d;
+ return fputil::cast<float16>(result_d);
}
case 0x3c00U: // y = +-1.0
return fputil::cast<float16>(y_sign ? (1.0 / x) : x);
case 0x4000U: // y = +-2.0
- return fputil::cast<float16>(y_sign ? (1.0 / (x * x)) : (x * x));
+ double result_d = static_cast<double>(x) * static_cast<double>(x);
+ return fputil::cast<float16>(y_sign ? (1.0 / (result_d)) : (result_d));
}
// TODO: Speed things up with pow(2, y) = exp2(y) and pow(10, y) = exp10(y).
-
- // Propagate remaining quiet NaNs.
- if (xbits.is_quiet_nan()) {
- return x;
- }
- if (ybits.is_quiet_nan()) {
- return y;
- }
-
- // x = -1: special case for integer exponents
+ //
+ // pow(-1, y) for integer y
if (x_u == FPBits::one(Sign::NEG).uintval()) {
if (is_integer(y)) {
if (is_odd_integer(y)) {
- return fputil::cast<float16>(-1.0f);
+ return -1.0f16;
} else {
- return fputil::cast<float16>(1.0f);
+ return 1.0f16;
}
}
// pow(-1, non-integer) = NaN
@@ -133,7 +224,7 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
return FPBits::quiet_nan().get_val();
}
- // x = 0 cases
+ // pow(±0, y) cases
if (xbits.is_zero()) {
if (y_sign) {
// pow(+-0, negative) = +-inf and raise FE_DIVBYZERO
@@ -163,9 +254,13 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
bool x_abs_less_than_one = x_a < FPBits::one().uintval();
if ((x_abs_less_than_one && !y_sign) ||
(!x_abs_less_than_one && y_sign)) {
- return fputil::cast<float16>(0.0f);
+ // |x| < 1 and y = +inf => 0.0
+ // |x| > 1 and y = -inf => 0.0
+ return 0.0f;
} else {
- return FPBits::inf().get_val();
+ // |x| > 1 and y = +inf => +inf
+ // |x| < 1 and y = -inf => +inf
+ return FPBits::inf(Sign::POS).get_val();
}
}
@@ -176,121 +271,119 @@ LLVM_LIBC_FUNCTION(float16, powf16, (float16 x, float16 y)) {
return FPBits::quiet_nan().get_val();
}
- // For negative x with integer y, compute pow(|x|, y) and adjust sign
- if (x_sign) {
- x = -x;
- if (is_odd_integer(y)) {
- result_sign = true;
+ bool result_sign = false;
+ if (x_sign && is_integer(y)) {
+ result_sign = is_odd_integer(y);
+ }
+
+ if (is_integer(y)) {
+ double base = x_abs.get_val();
+ double res = 1.0;
+ int yi = static_cast<int>(y_abs.get_val());
+
+ // Fast exponentiation by squaring
+ while (yi > 0) {
+ if (yi & 1)
+ res *= base;
+ base *= base;
+ yi = yi >> 1;
+ }
+
+ if (y_sign) {
+ res = 1.0 / res;
+ }
+
+ if (result_sign) {
+ res = -res;
+ }
+
+ if (FPBits(fputil::cast<float16>(res)).is_inf()) {
+ fputil::raise_except_if_required(FE_OVERFLOW);
+ res = result_sign ? -0x1.0p20 : 0x1.0p20;
}
+
+ float16 final_res = fputil::cast<float16>(res);
+ return final_res;
}
}
+
///////// 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)
+ // Core computation: x^y = 2^( y * log2(x) )
+ // We compute log2(x) = log(x) / log(2) using a polynomial approximation.
- using namespace math::expxf16_internal;
+ // The exponent part (m) is added later to get the final log(x).
FPBits x_bits(x);
-
uint16_t x_u_log = x_bits.uintval();
// Extract exponent field of x.
- int m = -FPBits::EXP_BIAS;
-
- // When x is subnormal, normalize it by multiplying by 2^FRACTION_LEN.
- if ((x_u_log & FPBits::EXP_MASK) == 0U) { // Subnormal x
- constexpr double NORMALIZE_EXP = 1.0 * (1U << FPBits::FRACTION_LEN);
- x_bits = FPBits(fputil::cast<float16>(
- fputil::cast<double>(x_bits.get_val()) * NORMALIZE_EXP));
- x_u_log = x_bits.uintval();
- m -= FPBits::FRACTION_LEN;
+ int m = x_bits.get_exponent();
+
+ // When x is subnormal, normalize it by adjusting m.
+ if ((x_u_log & FPBits::EXP_MASK) == 0U) {
+ unsigned leading_zeros =
+ cpp::countl_zero(static_cast<uint32_t>(x_u_log)) - (32 - 16);
+
+ constexpr unsigned SUBNORMAL_SHIFT_CORRECTION = 5;
+ unsigned shift = leading_zeros - SUBNORMAL_SHIFT_CORRECTION;
+
+ x_bits.set_mantissa(static_cast<uint16_t>(x_u_log << shift));
+
+ m = 1 - FPBits::EXP_BIAS - static_cast<int>(shift);
}
+
// Extract the mantissa and index into small lookup tables.
uint16_t mant = x_bits.get_mantissa();
- // Use the highest 5 fractional bits of the mantissa as the index f.
- int f = mant >> 5;
-
- m += (x_u_log >> FPBits::FRACTION_LEN);
+ // Use the highest 7 fractional bits of the mantissa as the index f.
+ int f = mant >> (FPBits::FRACTION_LEN - 7);
- // Add the hidden bit to the mantissa.
- // 1 <= m_x < 2
+ // Reconstruct the mantissa value m_x so it's in the range [1.0, 2.0).
x_bits.set_biased_exponent(FPBits::EXP_BIAS);
double mant_d = x_bits.get_val();
- // Range reduction for log2(m_x):
- // v = r * m_x - 1, where r is a power of 2 from a lookup table.
- // The computation is exact for half-precision, and -2^-5 <= v < 2^-4.
- // Then m_x = (1 + v) / r, and log2(m_x) = log2(1 + v) - log2(r).
-
- double v =
- fputil::multiply_add(mant_d, fputil::cast<double>(ONE_OVER_F_F[f]), -1.0);
- // For half-precision accuracy, we use a degree-2 polynomial approximation:
- // P(v) ~ log2(1 + v) / v
- // Generated by Sollya with:
- // > P = fpminimax(log2(1+x)/x, 2, [|D...|], [-2^-5, 2^-4]);
- // The coefficients are rounded from the Sollya output.
+ double v = fputil::multiply_add<double>(mant_d, RD[f], -1.0);
+ double extra_factor = static_cast<double>(m) + LOG2_R[f];
- double log2p1_d_over_f =
- v * fputil::polyeval(v, 0x1.715476p+0, -0x1.71771ap-1, 0x1.ecb38ep-2);
+ // Degree-5 polynomial approximation of log2 generated by Sollya with:
+ // > P = fpminimax(log2(1 + x)/x, 4, [|1, D...|], [-2^-8, 2^-7]);
+ constexpr double COEFFS[5] = {0x1.71547652b8133p0, -0x1.71547652d1e33p-1,
+ 0x1.ec70a098473dep-2, -0x1.7154c5ccdf121p-2,
+ 0x1.2514fd90a130ap-2};
- // log2(1.mant) = log2(f) + log2(1 + v)
- double log2_1_mant = LOG2F_F[f] + log2p1_d_over_f;
+ double vsq = v * v;
+ double c0 = fputil::multiply_add(v, COEFFS[0], 0);
+ double c1 = fputil::multiply_add(v, COEFFS[2], COEFFS[1]);
+ double c2 = fputil::multiply_add(v, COEFFS[4], COEFFS[3]);
- // Complete log2(x) = e_x + log2(m_x)
- double log2_x = static_cast<double>(m) + log2_1_mant;
+ double log2_x = fputil::polyeval(vsq, c0, c1, c2);
- // z = y * log2(x)
- // Now compute 2^z = 2^(n + r), with n integer and r in [-0.5, 0.5].
- double z = fputil::cast<double>(y) * log2_x;
+ double y_d = fputil::cast<double>(y);
+ double z = fputil::multiply_add(y_d, log2_x, y_d * extra_factor);
- // Check for overflow/underflow for half-precision.
- // Half-precision range is approximately 2^-24 to 2^15.
- //
- if (z < -24.0) {
+ // Check for underflow
+ // Float16 min normal is 2^-14, smallest subnormal is 2^-24
+ if (LIBC_UNLIKELY(z < -25.0)) {
fputil::raise_except_if_required(FE_UNDERFLOW);
- return fputil::cast<float16>(0.0f);
+ return result_sign ? FPBits::zero(Sign::NEG).get_val()
+ : FPBits::zero(Sign::POS).get_val();
}
- double n = fputil::nearest_integer(z);
- double r = z - n;
-
- // Compute 2^r using a degree-7 polynomial for r in [-0.5, 0.5].
- // Generated by Sollya with:
- // > P = fpminimax(2^x, 7, [|D...|], [-0.5, 0.5]);
- // The polynomial coefficients are rounded from the Sollya output.
- constexpr double EXP2_COEFFS[] = {
- 0x1p+0, // 1.0
- 0x1.62e42fefa39efp-1, // ln(2)
- 0x1.ebfbdff82c58fp-3, // ln(2)^2 / 2
- 0x1.c6b08d704a0c0p-5, // ln(2)^3 / 6
- 0x1.3b2ab6fba4e77p-7, // ln(2)^4 / 24
- 0x1.5d87fe78a6737p-10, // ln(2)^5 / 120
- 0x1.430912f86a805p-13, // ln(2)^6 / 720
- 0x1.10e4104ac8015p-17 // ln(2)^7 / 5040
- };
-
- double exp2_r = fputil::polyeval(
- r, EXP2_COEFFS[0], EXP2_COEFFS[1], EXP2_COEFFS[2], EXP2_COEFFS[3],
- EXP2_COEFFS[4], EXP2_COEFFS[5], EXP2_COEFFS[6], EXP2_COEFFS[7]);
-
- // Compute 2^n by direct bit manipulation.
- int n_int = static_cast<int>(n);
- uint64_t exp_bits = static_cast<uint64_t>(n_int + 1023) << 52;
- double pow2_n = cpp::bit_cast<double>(exp_bits);
-
-
- double result_d = (pow2_n * exp2_r);
- float16 result = fputil::cast<float16>(result_d);
- if(result_d==65504.0)
- return (65504.f16);
+ // Check for overflow
+ // Float16 max is ~2^16
+ double result_d;
+ if (LIBC_UNLIKELY(z > 16.0)) {
+ fputil::raise_except_if_required(FE_OVERFLOW);
+ result_d = result_sign ? -0x1.0p20 : 0x1.0p20;
+ } else {
+ result_d = exp2_range_reduced(z);
+ }
if (result_sign) {
- FPBits result_bits(result);
- result_bits.set_sign(Sign::NEG);
- result = result_bits.get_val();
+
+ result_d = -result_d;
}
+ float16 result = fputil::cast<float16>((result_d));
return result;
}
diff --git a/xxx.txt.prev b/xxx.txt.prev
new file mode 100644
index 0000000000000..b5edb9643aa70
--- /dev/null
+++ b/xxx.txt.prev
@@ -0,0 +1,2699 @@
+ninja: Entering directory `build'
+[1/1] Running unit test libc.test.src.math.powf16_test.__unit__
+FAILED: [code=1] projects/libc/test/src/math/CMakeFiles/libc.test.src.math.powf16_test.__unit__ /home/nir/Documents/llvm-project/build/projects/libc/test/src/math/CMakeFiles/libc.test.src.math.powf16_test.__unit__
+cd /home/nir/Documents/llvm-project/build/projects/libc/test/src/math && /home/nir/Documents/llvm-project/build/projects/libc/test/src/math/libc.test.src.math.powf16_test.__unit__.__build__
+[==========] Running 1 test from 1 test suite.
+[ RUN ] LlvmLibcPowF16Test.TestAll
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00000482797622680664062500000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0051 = (S: 0, E: 0x0000, M: 0x0051)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.04690551757812500000000000000000000000000000000000
+MPFR result: 0.04687500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x2A01 = (S: 0, E: 0x000A, M: 0x0201)
+ MPFR rounded bits: 0x2A00 = (S: 0, E: 0x000A, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00000482797622680664062500000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0051 = (S: 0, E: 0x0000, M: 0x0051)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.04684448242187500000000000000000000000000000000000
+MPFR result: 0.04687500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x29FF = (S: 0, E: 0x000A, M: 0x01FF)
+ MPFR rounded bits: 0x2A00 = (S: 0, E: 0x000A, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00000482797622680664062500000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x0051 = (S: 0, E: 0x0000, M: 0x0051)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00010305643081665039062500000000000000000000000000
+MPFR result: 0.00010299682617187500000000000000000000000000000000
+Libc floating point result bits: 0x06C1 = (S: 0, E: 0x0001, M: 0x02C1)
+ MPFR rounded bits: 0x06C0 = (S: 0, E: 0x0001, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00000482797622680664062500000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x0051 = (S: 0, E: 0x0000, M: 0x0051)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00010293722152709960937500000000000000000000000000
+MPFR result: 0.00010299682617187500000000000000000000000000000000
+Libc floating point result bits: 0x06BF = (S: 0, E: 0x0001, M: 0x02BF)
+ MPFR rounded bits: 0x06C0 = (S: 0, E: 0x0001, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00003725290298461914062500000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0271 = (S: 0, E: 0x0000, M: 0x0271)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.07818603515625000000000000000000000000000000000000
+MPFR result: 0.07812500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x2D01 = (S: 0, E: 0x000B, M: 0x0101)
+ MPFR rounded bits: 0x2D00 = (S: 0, E: 0x000B, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00003725290298461914062500000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0271 = (S: 0, E: 0x0000, M: 0x0271)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.07806396484375000000000000000000000000000000000000
+MPFR result: 0.07812500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x2CFF = (S: 0, E: 0x000B, M: 0x00FF)
+ MPFR rounded bits: 0x2D00 = (S: 0, E: 0x000B, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.00003725290298461914062500000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0271 = (S: 0, E: 0x0000, M: 0x0271)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.07806396484375000000000000000000000000000000000000
+MPFR result: 0.07812500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x2CFF = (S: 0, E: 0x000B, M: 0x00FF)
+ MPFR rounded bits: 0x2D00 = (S: 0, E: 0x000B, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00003725290298461914062500000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x0271 = (S: 0, E: 0x0000, M: 0x0271)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00047707557678222656250000000000000000000000000000
+MPFR result: 0.00047683715820312500000000000000000000000000000000
+Libc floating point result bits: 0x0FD1 = (S: 0, E: 0x0003, M: 0x03D1)
+ MPFR rounded bits: 0x0FD0 = (S: 0, E: 0x0003, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00003725290298461914062500000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x0271 = (S: 0, E: 0x0000, M: 0x0271)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00047659873962402343750000000000000000000000000000
+MPFR result: 0.00047683715820312500000000000000000000000000000000
+Libc floating point result bits: 0x0FCF = (S: 0, E: 0x0003, M: 0x03CF)
+ MPFR rounded bits: 0x0FD0 = (S: 0, E: 0x0003, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00007724761962890625000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0510 = (S: 0, E: 0x0001, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.09381103515625000000000000000000000000000000000000
+MPFR result: 0.09375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x2E01 = (S: 0, E: 0x000B, M: 0x0201)
+ MPFR rounded bits: 0x2E00 = (S: 0, E: 0x000B, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00007724761962890625000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x0510 = (S: 0, E: 0x0001, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.09368896484375000000000000000000000000000000000000
+MPFR result: 0.09375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x2DFF = (S: 0, E: 0x000B, M: 0x01FF)
+ MPFR rounded bits: 0x2E00 = (S: 0, E: 0x000B, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00007724761962890625000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x0510 = (S: 0, E: 0x0001, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00082445144653320312500000000000000000000000000000
+MPFR result: 0.00082397460937500000000000000000000000000000000000
+Libc floating point result bits: 0x12C1 = (S: 0, E: 0x0004, M: 0x02C1)
+ MPFR rounded bits: 0x12C0 = (S: 0, E: 0x0004, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00007724761962890625000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x0510 = (S: 0, E: 0x0001, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00082349777221679687500000000000000000000000000000
+MPFR result: 0.00082397460937500000000000000000000000000000000000
+Libc floating point result bits: 0x12BF = (S: 0, E: 0x0004, M: 0x02BF)
+ MPFR rounded bits: 0x12C0 = (S: 0, E: 0x0004, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00013732910156250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x0880 = (S: 0, E: 0x0002, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00000166893005371093750000000000000000000000000000
+MPFR result: 0.00000160932540893554687500000000000000000000000000
+Libc floating point result bits: 0x001C = (S: 0, E: 0x0000, M: 0x001C)
+ MPFR rounded bits: 0x001B = (S: 0, E: 0x0000, M: 0x001B)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00013732910156250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x0880 = (S: 0, E: 0x0002, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00000154972076416015625000000000000000000000000000
+MPFR result: 0.00000160932540893554687500000000000000000000000000
+Libc floating point result bits: 0x001A = (S: 0, E: 0x0000, M: 0x001A)
+ MPFR rounded bits: 0x001B = (S: 0, E: 0x0000, M: 0x001B)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00038146972656250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x0E40 = (S: 0, E: 0x0003, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00000751018524169921875000000000000000000000000000
+MPFR result: 0.00000745058059692382812500000000000000000000000000
+Libc floating point result bits: 0x007E = (S: 0, E: 0x0000, M: 0x007E)
+ MPFR rounded bits: 0x007D = (S: 0, E: 0x0000, M: 0x007D)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00038146972656250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x0E40 = (S: 0, E: 0x0003, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00000739097595214843750000000000000000000000000000
+MPFR result: 0.00000745058059692382812500000000000000000000000000
+Libc floating point result bits: 0x007C = (S: 0, E: 0x0000, M: 0x007C)
+ MPFR rounded bits: 0x007D = (S: 0, E: 0x0000, M: 0x007D)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00054931640625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1080 = (S: 0, E: 0x0004, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00001293420791625976562500000000000000000000000000
+MPFR result: 0.00001287460327148437500000000000000000000000000000
+Libc floating point result bits: 0x00D9 = (S: 0, E: 0x0000, M: 0x00D9)
+ MPFR rounded bits: 0x00D8 = (S: 0, E: 0x0000, M: 0x00D8)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00054931640625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1080 = (S: 0, E: 0x0004, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00001281499862670898437500000000000000000000000000
+MPFR result: 0.00001287460327148437500000000000000000000000000000
+Libc floating point result bits: 0x00D7 = (S: 0, E: 0x0000, M: 0x00D7)
+ MPFR rounded bits: 0x00D8 = (S: 0, E: 0x0000, M: 0x00D8)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00059604644775390625000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x10E2 = (S: 0, E: 0x0004, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.15637207031250000000000000000000000000000000000000
+MPFR result: 0.15625000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3101 = (S: 0, E: 0x000C, M: 0x0101)
+ MPFR rounded bits: 0x3100 = (S: 0, E: 0x000C, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00059604644775390625000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x10E2 = (S: 0, E: 0x0004, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.15612792968750000000000000000000000000000000000000
+MPFR result: 0.15625000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x30FF = (S: 0, E: 0x000C, M: 0x00FF)
+ MPFR rounded bits: 0x3100 = (S: 0, E: 0x000C, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.00059604644775390625000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x10E2 = (S: 0, E: 0x0004, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.15612792968750000000000000000000000000000000000000
+MPFR result: 0.15625000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x30FF = (S: 0, E: 0x000C, M: 0x00FF)
+ MPFR rounded bits: 0x3100 = (S: 0, E: 0x000C, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00059604644775390625000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x10E2 = (S: 0, E: 0x0004, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00381660461425781250000000000000000000000000000000
+MPFR result: 0.00381469726562500000000000000000000000000000000000
+Libc floating point result bits: 0x1BD1 = (S: 0, E: 0x0006, M: 0x03D1)
+ MPFR rounded bits: 0x1BD0 = (S: 0, E: 0x0006, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00059604644775390625000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x10E2 = (S: 0, E: 0x0004, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00381278991699218750000000000000000000000000000000
+MPFR result: 0.00381469726562500000000000000000000000000000000000
+Libc floating point result bits: 0x1BCF = (S: 0, E: 0x0006, M: 0x03CF)
+ MPFR rounded bits: 0x1BD0 = (S: 0, E: 0x0006, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00074768066406250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1220 = (S: 0, E: 0x0004, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00002050399780273437500000000000000000000000000000
+MPFR result: 0.00002044439315795898437500000000000000000000000000
+Libc floating point result bits: 0x0158 = (S: 0, E: 0x0000, M: 0x0158)
+ MPFR rounded bits: 0x0157 = (S: 0, E: 0x0000, M: 0x0157)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00074768066406250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1220 = (S: 0, E: 0x0004, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00002038478851318359375000000000000000000000000000
+MPFR result: 0.00002044439315795898437500000000000000000000000000
+Libc floating point result bits: 0x0156 = (S: 0, E: 0x0000, M: 0x0156)
+ MPFR rounded bits: 0x0157 = (S: 0, E: 0x0000, M: 0x0157)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.18762207031250000000000000000000000000000000000000
+MPFR result: 0.18750000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3201 = (S: 0, E: 0x000C, M: 0x0201)
+ MPFR rounded bits: 0x3200 = (S: 0, E: 0x000C, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.18737792968750000000000000000000000000000000000000
+MPFR result: 0.18750000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x31FF = (S: 0, E: 0x000C, M: 0x01FF)
+ MPFR rounded bits: 0x3200 = (S: 0, E: 0x000C, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00659561157226562500000000000000000000000000000000
+MPFR result: 0.00659179687500000000000000000000000000000000000000
+Libc floating point result bits: 0x1EC1 = (S: 0, E: 0x0007, M: 0x02C1)
+ MPFR rounded bits: 0x1EC0 = (S: 0, E: 0x0007, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.00658798217773437500000000000000000000000000000000
+MPFR result: 0.00659179687500000000000000000000000000000000000000
+Libc floating point result bits: 0x1EBF = (S: 0, E: 0x0007, M: 0x02BF)
+ MPFR rounded bits: 0x1EC0 = (S: 0, E: 0x0007, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.00023186206817626953125000000000000000000000000000
+MPFR result: 0.00023174285888671875000000000000000000000000000000
+Libc floating point result bits: 0x0B99 = (S: 0, E: 0x0002, M: 0x0399)
+ MPFR rounded bits: 0x0B98 = (S: 0, E: 0x0002, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.00023162364959716796875000000000000000000000000000
+MPFR result: 0.00023174285888671875000000000000000000000000000000
+Libc floating point result bits: 0x0B97 = (S: 0, E: 0x0002, M: 0x0397)
+ MPFR rounded bits: 0x0B98 = (S: 0, E: 0x0002, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00004351139068603515625000000000000000000000000000
+MPFR result: 0.00004345178604125976562500000000000000000000000000
+Libc floating point result bits: 0x02DA = (S: 0, E: 0x0000, M: 0x02DA)
+ MPFR rounded bits: 0x02D9 = (S: 0, E: 0x0000, M: 0x02D9)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00123596191406250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1510 = (S: 0, E: 0x0005, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00004339218139648437500000000000000000000000000000
+MPFR result: 0.00004345178604125976562500000000000000000000000000
+Libc floating point result bits: 0x02D8 = (S: 0, E: 0x0000, M: 0x02D8)
+ MPFR rounded bits: 0x02D9 = (S: 0, E: 0x0000, M: 0x02D9)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00152587890625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1640 = (S: 0, E: 0x0005, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00005966424942016601562500000000000000000000000000
+MPFR result: 0.00005960464477539062500000000000000000000000000000
+Libc floating point result bits: 0x03E9 = (S: 0, E: 0x0000, M: 0x03E9)
+ MPFR rounded bits: 0x03E8 = (S: 0, E: 0x0000, M: 0x03E8)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00152587890625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1640 = (S: 0, E: 0x0005, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00005954504013061523437500000000000000000000000000
+MPFR result: 0.00005960464477539062500000000000000000000000000000
+Libc floating point result bits: 0x03E7 = (S: 0, E: 0x0000, M: 0x03E7)
+ MPFR rounded bits: 0x03E8 = (S: 0, E: 0x0000, M: 0x03E8)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00184631347656250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1790 = (S: 0, E: 0x0005, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00007939338684082031250000000000000000000000000000
+MPFR result: 0.00007933378219604492187500000000000000000000000000
+Libc floating point result bits: 0x0534 = (S: 0, E: 0x0001, M: 0x0134)
+ MPFR rounded bits: 0x0533 = (S: 0, E: 0x0001, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00184631347656250000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1790 = (S: 0, E: 0x0005, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00007927417755126953125000000000000000000000000000
+MPFR result: 0.00007933378219604492187500000000000000000000000000
+Libc floating point result bits: 0x0532 = (S: 0, E: 0x0001, M: 0x0132)
+ MPFR rounded bits: 0x0533 = (S: 0, E: 0x0001, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00219726562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1880 = (S: 0, E: 0x0006, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00010305643081665039062500000000000000000000000000
+MPFR result: 0.00010299682617187500000000000000000000000000000000
+Libc floating point result bits: 0x06C1 = (S: 0, E: 0x0001, M: 0x02C1)
+ MPFR rounded bits: 0x06C0 = (S: 0, E: 0x0001, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00219726562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1880 = (S: 0, E: 0x0006, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00010293722152709960937500000000000000000000000000
+MPFR result: 0.00010299682617187500000000000000000000000000000000
+Libc floating point result bits: 0x06BF = (S: 0, E: 0x0001, M: 0x02BF)
+ MPFR rounded bits: 0x06C0 = (S: 0, E: 0x0001, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00299072265625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1A20 = (S: 0, E: 0x0006, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00016367435455322265625000000000000000000000000000
+MPFR result: 0.00016355514526367187500000000000000000000000000000
+Libc floating point result bits: 0x095D = (S: 0, E: 0x0002, M: 0x015D)
+ MPFR rounded bits: 0x095C = (S: 0, E: 0x0002, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00299072265625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1A20 = (S: 0, E: 0x0006, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00016343593597412109375000000000000000000000000000
+MPFR result: 0.00016355514526367187500000000000000000000000000000
+Libc floating point result bits: 0x095B = (S: 0, E: 0x0002, M: 0x015B)
+ MPFR rounded bits: 0x095C = (S: 0, E: 0x0002, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00494384765625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1D10 = (S: 0, E: 0x0007, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00034785270690917968750000000000000000000000000000
+MPFR result: 0.00034761428833007812500000000000000000000000000000
+Libc floating point result bits: 0x0DB3 = (S: 0, E: 0x0003, M: 0x01B3)
+ MPFR rounded bits: 0x0DB2 = (S: 0, E: 0x0003, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00494384765625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1D10 = (S: 0, E: 0x0007, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00034737586975097656250000000000000000000000000000
+MPFR result: 0.00034761428833007812500000000000000000000000000000
+Libc floating point result bits: 0x0DB1 = (S: 0, E: 0x0003, M: 0x01B1)
+ MPFR rounded bits: 0x0DB2 = (S: 0, E: 0x0003, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00610351562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1E40 = (S: 0, E: 0x0007, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00047707557678222656250000000000000000000000000000
+MPFR result: 0.00047683715820312500000000000000000000000000000000
+Libc floating point result bits: 0x0FD1 = (S: 0, E: 0x0003, M: 0x03D1)
+ MPFR rounded bits: 0x0FD0 = (S: 0, E: 0x0003, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00610351562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1E40 = (S: 0, E: 0x0007, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00047659873962402343750000000000000000000000000000
+MPFR result: 0.00047683715820312500000000000000000000000000000000
+Libc floating point result bits: 0x0FCF = (S: 0, E: 0x0003, M: 0x03CF)
+ MPFR rounded bits: 0x0FD0 = (S: 0, E: 0x0003, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00738525390625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1F90 = (S: 0, E: 0x0007, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00063514709472656250000000000000000000000000000000
+MPFR result: 0.00063467025756835937500000000000000000000000000000
+Libc floating point result bits: 0x1134 = (S: 0, E: 0x0004, M: 0x0134)
+ MPFR rounded bits: 0x1133 = (S: 0, E: 0x0004, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00738525390625000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x1F90 = (S: 0, E: 0x0007, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00063419342041015625000000000000000000000000000000
+MPFR result: 0.00063467025756835937500000000000000000000000000000
+Libc floating point result bits: 0x1132 = (S: 0, E: 0x0004, M: 0x0132)
+ MPFR rounded bits: 0x1133 = (S: 0, E: 0x0004, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00878906250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2080 = (S: 0, E: 0x0008, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00082445144653320312500000000000000000000000000000
+MPFR result: 0.00082397460937500000000000000000000000000000000000
+Libc floating point result bits: 0x12C1 = (S: 0, E: 0x0004, M: 0x02C1)
+ MPFR rounded bits: 0x12C0 = (S: 0, E: 0x0004, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00878906250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2080 = (S: 0, E: 0x0008, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00082349777221679687500000000000000000000000000000
+MPFR result: 0.00082397460937500000000000000000000000000000000000
+Libc floating point result bits: 0x12BF = (S: 0, E: 0x0004, M: 0x02BF)
+ MPFR rounded bits: 0x12C0 = (S: 0, E: 0x0004, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00953674316406250000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x20E2 = (S: 0, E: 0x0008, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.31274414062500000000000000000000000000000000000000
+MPFR result: 0.31250000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3501 = (S: 0, E: 0x000D, M: 0x0101)
+ MPFR rounded bits: 0x3500 = (S: 0, E: 0x000D, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00953674316406250000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x20E2 = (S: 0, E: 0x0008, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.31225585937500000000000000000000000000000000000000
+MPFR result: 0.31250000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x34FF = (S: 0, E: 0x000D, M: 0x00FF)
+ MPFR rounded bits: 0x3500 = (S: 0, E: 0x000D, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.00953674316406250000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x20E2 = (S: 0, E: 0x0008, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.31225585937500000000000000000000000000000000000000
+MPFR result: 0.31250000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x34FF = (S: 0, E: 0x000D, M: 0x00FF)
+ MPFR rounded bits: 0x3500 = (S: 0, E: 0x000D, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.00953674316406250000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x20E2 = (S: 0, E: 0x0008, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.03053283691406250000000000000000000000000000000000
+MPFR result: 0.03051757812500000000000000000000000000000000000000
+Libc floating point result bits: 0x27D1 = (S: 0, E: 0x0009, M: 0x03D1)
+ MPFR rounded bits: 0x27D0 = (S: 0, E: 0x0009, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.00953674316406250000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x20E2 = (S: 0, E: 0x0008, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.03050231933593750000000000000000000000000000000000
+MPFR result: 0.03051757812500000000000000000000000000000000000000
+Libc floating point result bits: 0x27CF = (S: 0, E: 0x0009, M: 0x03CF)
+ MPFR rounded bits: 0x27D0 = (S: 0, E: 0x0009, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.01196289062500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2220 = (S: 0, E: 0x0008, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00130939483642578125000000000000000000000000000000
+MPFR result: 0.00130844116210937500000000000000000000000000000000
+Libc floating point result bits: 0x155D = (S: 0, E: 0x0005, M: 0x015D)
+ MPFR rounded bits: 0x155C = (S: 0, E: 0x0005, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.01196289062500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2220 = (S: 0, E: 0x0008, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00130748748779296875000000000000000000000000000000
+MPFR result: 0.00130844116210937500000000000000000000000000000000
+Libc floating point result bits: 0x155B = (S: 0, E: 0x0005, M: 0x015B)
+ MPFR rounded bits: 0x155C = (S: 0, E: 0x0005, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.37524414062500000000000000000000000000000000000000
+MPFR result: 0.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3601 = (S: 0, E: 0x000D, M: 0x0201)
+ MPFR rounded bits: 0x3600 = (S: 0, E: 0x000D, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.37475585937500000000000000000000000000000000000000
+MPFR result: 0.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x35FF = (S: 0, E: 0x000D, M: 0x01FF)
+ MPFR rounded bits: 0x3600 = (S: 0, E: 0x000D, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.37475585937500000000000000000000000000000000000000
+MPFR result: 0.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x35FF = (S: 0, E: 0x000D, M: 0x01FF)
+ MPFR rounded bits: 0x3600 = (S: 0, E: 0x000D, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.05276489257812500000000000000000000000000000000000
+MPFR result: 0.05273437500000000000000000000000000000000000000000
+Libc floating point result bits: 0x2AC1 = (S: 0, E: 0x000A, M: 0x02C1)
+ MPFR rounded bits: 0x2AC0 = (S: 0, E: 0x000A, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.05270385742187500000000000000000000000000000000000
+MPFR result: 0.05273437500000000000000000000000000000000000000000
+Libc floating point result bits: 0x2ABF = (S: 0, E: 0x000A, M: 0x02BF)
+ MPFR rounded bits: 0x2AC0 = (S: 0, E: 0x000A, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.00741958618164062500000000000000000000000000000000
+MPFR result: 0.00741577148437500000000000000000000000000000000000
+Libc floating point result bits: 0x1F99 = (S: 0, E: 0x0007, M: 0x0399)
+ MPFR rounded bits: 0x1F98 = (S: 0, E: 0x0007, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.00741195678710937500000000000000000000000000000000
+MPFR result: 0.00741577148437500000000000000000000000000000000000
+Libc floating point result bits: 0x1F97 = (S: 0, E: 0x0007, M: 0x0397)
+ MPFR rounded bits: 0x1F98 = (S: 0, E: 0x0007, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00278282165527343750000000000000000000000000000000
+MPFR result: 0.00278091430664062500000000000000000000000000000000
+Libc floating point result bits: 0x19B3 = (S: 0, E: 0x0006, M: 0x01B3)
+ MPFR rounded bits: 0x19B2 = (S: 0, E: 0x0006, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.01977539062500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2510 = (S: 0, E: 0x0009, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00277900695800781250000000000000000000000000000000
+MPFR result: 0.00278091430664062500000000000000000000000000000000
+Libc floating point result bits: 0x19B1 = (S: 0, E: 0x0006, M: 0x01B1)
+ MPFR rounded bits: 0x19B2 = (S: 0, E: 0x0006, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.02441406250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2640 = (S: 0, E: 0x0009, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00381660461425781250000000000000000000000000000000
+MPFR result: 0.00381469726562500000000000000000000000000000000000
+Libc floating point result bits: 0x1BD1 = (S: 0, E: 0x0006, M: 0x03D1)
+ MPFR rounded bits: 0x1BD0 = (S: 0, E: 0x0006, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.02441406250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2640 = (S: 0, E: 0x0009, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00381278991699218750000000000000000000000000000000
+MPFR result: 0.00381469726562500000000000000000000000000000000000
+Libc floating point result bits: 0x1BCF = (S: 0, E: 0x0006, M: 0x03CF)
+ MPFR rounded bits: 0x1BD0 = (S: 0, E: 0x0006, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.02954101562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2790 = (S: 0, E: 0x0009, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00508117675781250000000000000000000000000000000000
+MPFR result: 0.00507736206054687500000000000000000000000000000000
+Libc floating point result bits: 0x1D34 = (S: 0, E: 0x0007, M: 0x0134)
+ MPFR rounded bits: 0x1D33 = (S: 0, E: 0x0007, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.02954101562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2790 = (S: 0, E: 0x0009, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00507354736328125000000000000000000000000000000000
+MPFR result: 0.00507736206054687500000000000000000000000000000000
+Libc floating point result bits: 0x1D32 = (S: 0, E: 0x0007, M: 0x0132)
+ MPFR rounded bits: 0x1D33 = (S: 0, E: 0x0007, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.02954101562500000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2790 = (S: 0, E: 0x0009, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00507354736328125000000000000000000000000000000000
+MPFR result: 0.00507736206054687500000000000000000000000000000000
+Libc floating point result bits: 0x1D32 = (S: 0, E: 0x0007, M: 0x0132)
+ MPFR rounded bits: 0x1D33 = (S: 0, E: 0x0007, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.03515625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2880 = (S: 0, E: 0x000A, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00659561157226562500000000000000000000000000000000
+MPFR result: 0.00659179687500000000000000000000000000000000000000
+Libc floating point result bits: 0x1EC1 = (S: 0, E: 0x0007, M: 0x02C1)
+ MPFR rounded bits: 0x1EC0 = (S: 0, E: 0x0007, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.03515625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2880 = (S: 0, E: 0x000A, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.00658798217773437500000000000000000000000000000000
+MPFR result: 0.00659179687500000000000000000000000000000000000000
+Libc floating point result bits: 0x1EBF = (S: 0, E: 0x0007, M: 0x02BF)
+ MPFR rounded bits: 0x1EC0 = (S: 0, E: 0x0007, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.03515625000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x2880 = (S: 0, E: 0x000A, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 0.00023186206817626953125000000000000000000000000000
+MPFR result: 0.00023174285888671875000000000000000000000000000000
+Libc floating point result bits: 0x0B99 = (S: 0, E: 0x0002, M: 0x0399)
+ MPFR rounded bits: 0x0B98 = (S: 0, E: 0x0002, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.03515625000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x2880 = (S: 0, E: 0x000A, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 0.00023162364959716796875000000000000000000000000000
+MPFR result: 0.00023174285888671875000000000000000000000000000000
+Libc floating point result bits: 0x0B97 = (S: 0, E: 0x0002, M: 0x0397)
+ MPFR rounded bits: 0x0B98 = (S: 0, E: 0x0002, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.04785156250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2A20 = (S: 0, E: 0x000A, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.01047515869140625000000000000000000000000000000000
+MPFR result: 0.01046752929687500000000000000000000000000000000000
+Libc floating point result bits: 0x215D = (S: 0, E: 0x0008, M: 0x015D)
+ MPFR rounded bits: 0x215C = (S: 0, E: 0x0008, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.04785156250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2A20 = (S: 0, E: 0x000A, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.01045989990234375000000000000000000000000000000000
+MPFR result: 0.01046752929687500000000000000000000000000000000000
+Libc floating point result bits: 0x215B = (S: 0, E: 0x0008, M: 0x015B)
+ MPFR rounded bits: 0x215C = (S: 0, E: 0x0008, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.07910156250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2D10 = (S: 0, E: 0x000B, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.02226257324218750000000000000000000000000000000000
+MPFR result: 0.02224731445312500000000000000000000000000000000000
+Libc floating point result bits: 0x25B3 = (S: 0, E: 0x0009, M: 0x01B3)
+ MPFR rounded bits: 0x25B2 = (S: 0, E: 0x0009, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.07910156250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2D10 = (S: 0, E: 0x000B, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.02223205566406250000000000000000000000000000000000
+MPFR result: 0.02224731445312500000000000000000000000000000000000
+Libc floating point result bits: 0x25B1 = (S: 0, E: 0x0009, M: 0x01B1)
+ MPFR rounded bits: 0x25B2 = (S: 0, E: 0x0009, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.09765625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2E40 = (S: 0, E: 0x000B, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.03053283691406250000000000000000000000000000000000
+MPFR result: 0.03051757812500000000000000000000000000000000000000
+Libc floating point result bits: 0x27D1 = (S: 0, E: 0x0009, M: 0x03D1)
+ MPFR rounded bits: 0x27D0 = (S: 0, E: 0x0009, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.09765625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2E40 = (S: 0, E: 0x000B, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.03050231933593750000000000000000000000000000000000
+MPFR result: 0.03051757812500000000000000000000000000000000000000
+Libc floating point result bits: 0x27CF = (S: 0, E: 0x0009, M: 0x03CF)
+ MPFR rounded bits: 0x27D0 = (S: 0, E: 0x0009, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.11816406250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2F90 = (S: 0, E: 0x000B, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.04064941406250000000000000000000000000000000000000
+MPFR result: 0.04061889648437500000000000000000000000000000000000
+Libc floating point result bits: 0x2934 = (S: 0, E: 0x000A, M: 0x0134)
+ MPFR rounded bits: 0x2933 = (S: 0, E: 0x000A, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.11816406250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2F90 = (S: 0, E: 0x000B, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.04058837890625000000000000000000000000000000000000
+MPFR result: 0.04061889648437500000000000000000000000000000000000
+Libc floating point result bits: 0x2932 = (S: 0, E: 0x000A, M: 0x0132)
+ MPFR rounded bits: 0x2933 = (S: 0, E: 0x000A, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.11816406250000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x2F90 = (S: 0, E: 0x000B, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.04058837890625000000000000000000000000000000000000
+MPFR result: 0.04061889648437500000000000000000000000000000000000
+Libc floating point result bits: 0x2932 = (S: 0, E: 0x000A, M: 0x0132)
+ MPFR rounded bits: 0x2933 = (S: 0, E: 0x000A, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.14062500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3080 = (S: 0, E: 0x000C, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.05276489257812500000000000000000000000000000000000
+MPFR result: 0.05273437500000000000000000000000000000000000000000
+Libc floating point result bits: 0x2AC1 = (S: 0, E: 0x000A, M: 0x02C1)
+ MPFR rounded bits: 0x2AC0 = (S: 0, E: 0x000A, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.14062500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3080 = (S: 0, E: 0x000C, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.05270385742187500000000000000000000000000000000000
+MPFR result: 0.05273437500000000000000000000000000000000000000000
+Libc floating point result bits: 0x2ABF = (S: 0, E: 0x000A, M: 0x02BF)
+ MPFR rounded bits: 0x2AC0 = (S: 0, E: 0x000A, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.14062500000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x3080 = (S: 0, E: 0x000C, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 0.00741958618164062500000000000000000000000000000000
+MPFR result: 0.00741577148437500000000000000000000000000000000000
+Libc floating point result bits: 0x1F99 = (S: 0, E: 0x0007, M: 0x0399)
+ MPFR rounded bits: 0x1F98 = (S: 0, E: 0x0007, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.14062500000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x3080 = (S: 0, E: 0x000C, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 0.00741195678710937500000000000000000000000000000000
+MPFR result: 0.00741577148437500000000000000000000000000000000000
+Libc floating point result bits: 0x1F97 = (S: 0, E: 0x0007, M: 0x0397)
+ MPFR rounded bits: 0x1F98 = (S: 0, E: 0x0007, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Nearest).
+Input decimal: x: 0.14062500000000000000000000000000000000000000000000 y: 3.50000000000000000000000000000000000000000000000000
+First input bits: 0x3080 = (S: 0, E: 0x000C, M: 0x0080)
+Second input bits: 0x4300 = (S: 0, E: 0x0010, M: 0x0300)
+Libc result: 0.00104236602783203125000000000000000000000000000000
+MPFR result: 0.00104331970214843750000000000000000000000000000000
+Libc floating point result bits: 0x1445 = (S: 0, E: 0x0005, M: 0x0045)
+ MPFR rounded bits: 0x1446 = (S: 0, E: 0x0005, M: 0x0046)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.15258789062500000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x30E2 = (S: 0, E: 0x000C, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.62548828125000000000000000000000000000000000000000
+MPFR result: 0.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3901 = (S: 0, E: 0x000E, M: 0x0101)
+ MPFR rounded bits: 0x3900 = (S: 0, E: 0x000E, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.15258789062500000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x30E2 = (S: 0, E: 0x000C, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.62451171875000000000000000000000000000000000000000
+MPFR result: 0.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x38FF = (S: 0, E: 0x000E, M: 0x00FF)
+ MPFR rounded bits: 0x3900 = (S: 0, E: 0x000E, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.15258789062500000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x30E2 = (S: 0, E: 0x000C, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.62451171875000000000000000000000000000000000000000
+MPFR result: 0.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x38FF = (S: 0, E: 0x000E, M: 0x00FF)
+ MPFR rounded bits: 0x3900 = (S: 0, E: 0x000E, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.15258789062500000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x30E2 = (S: 0, E: 0x000C, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.24426269531250000000000000000000000000000000000000
+MPFR result: 0.24414062500000000000000000000000000000000000000000
+Libc floating point result bits: 0x33D1 = (S: 0, E: 0x000C, M: 0x03D1)
+ MPFR rounded bits: 0x33D0 = (S: 0, E: 0x000C, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.15258789062500000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x30E2 = (S: 0, E: 0x000C, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.24401855468750000000000000000000000000000000000000
+MPFR result: 0.24414062500000000000000000000000000000000000000000
+Libc floating point result bits: 0x33CF = (S: 0, E: 0x000C, M: 0x03CF)
+ MPFR rounded bits: 0x33D0 = (S: 0, E: 0x000C, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Nearest).
+Input decimal: x: 0.15258789062500000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x30E2 = (S: 0, E: 0x000C, M: 0x00E2)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.09539794921875000000000000000000000000000000000000
+MPFR result: 0.09533691406250000000000000000000000000000000000000
+Libc floating point result bits: 0x2E1B = (S: 0, E: 0x000B, M: 0x021B)
+ MPFR rounded bits: 0x2E1A = (S: 0, E: 0x000B, M: 0x021A)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.19140625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3220 = (S: 0, E: 0x000C, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.08380126953125000000000000000000000000000000000000
+MPFR result: 0.08374023437500000000000000000000000000000000000000
+Libc floating point result bits: 0x2D5D = (S: 0, E: 0x000B, M: 0x015D)
+ MPFR rounded bits: 0x2D5C = (S: 0, E: 0x000B, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.19140625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3220 = (S: 0, E: 0x000C, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.08367919921875000000000000000000000000000000000000
+MPFR result: 0.08374023437500000000000000000000000000000000000000
+Libc floating point result bits: 0x2D5B = (S: 0, E: 0x000B, M: 0x015B)
+ MPFR rounded bits: 0x2D5C = (S: 0, E: 0x000B, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.75048828125000000000000000000000000000000000000000
+MPFR result: 0.75000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3A01 = (S: 0, E: 0x000E, M: 0x0201)
+ MPFR rounded bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.74951171875000000000000000000000000000000000000000
+MPFR result: 0.75000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x39FF = (S: 0, E: 0x000E, M: 0x01FF)
+ MPFR rounded bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 0.74951171875000000000000000000000000000000000000000
+MPFR result: 0.75000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x39FF = (S: 0, E: 0x000E, M: 0x01FF)
+ MPFR rounded bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.42211914062500000000000000000000000000000000000000
+MPFR result: 0.42187500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x36C1 = (S: 0, E: 0x000D, M: 0x02C1)
+ MPFR rounded bits: 0x36C0 = (S: 0, E: 0x000D, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.42163085937500000000000000000000000000000000000000
+MPFR result: 0.42187500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x36BF = (S: 0, E: 0x000D, M: 0x02BF)
+ MPFR rounded bits: 0x36C0 = (S: 0, E: 0x000D, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 0.42163085937500000000000000000000000000000000000000
+MPFR result: 0.42187500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x36BF = (S: 0, E: 0x000D, M: 0x02BF)
+ MPFR rounded bits: 0x36C0 = (S: 0, E: 0x000D, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.23742675781250000000000000000000000000000000000000
+MPFR result: 0.23730468750000000000000000000000000000000000000000
+Libc floating point result bits: 0x3399 = (S: 0, E: 0x000C, M: 0x0399)
+ MPFR rounded bits: 0x3398 = (S: 0, E: 0x000C, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 0.23718261718750000000000000000000000000000000000000
+MPFR result: 0.23730468750000000000000000000000000000000000000000
+Libc floating point result bits: 0x3397 = (S: 0, E: 0x000C, M: 0x0397)
+ MPFR rounded bits: 0x3398 = (S: 0, E: 0x000C, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.17810058593750000000000000000000000000000000000000
+MPFR result: 0.17797851562500000000000000000000000000000000000000
+Libc floating point result bits: 0x31B3 = (S: 0, E: 0x000C, M: 0x01B3)
+ MPFR rounded bits: 0x31B2 = (S: 0, E: 0x000C, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.31640625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3510 = (S: 0, E: 0x000D, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.17785644531250000000000000000000000000000000000000
+MPFR result: 0.17797851562500000000000000000000000000000000000000
+Libc floating point result bits: 0x31B1 = (S: 0, E: 0x000C, M: 0x01B1)
+ MPFR rounded bits: 0x31B2 = (S: 0, E: 0x000C, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.39062500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3640 = (S: 0, E: 0x000D, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.24426269531250000000000000000000000000000000000000
+MPFR result: 0.24414062500000000000000000000000000000000000000000
+Libc floating point result bits: 0x33D1 = (S: 0, E: 0x000C, M: 0x03D1)
+ MPFR rounded bits: 0x33D0 = (S: 0, E: 0x000C, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.39062500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3640 = (S: 0, E: 0x000D, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.24401855468750000000000000000000000000000000000000
+MPFR result: 0.24414062500000000000000000000000000000000000000000
+Libc floating point result bits: 0x33CF = (S: 0, E: 0x000C, M: 0x03CF)
+ MPFR rounded bits: 0x33D0 = (S: 0, E: 0x000C, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.47265625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3790 = (S: 0, E: 0x000D, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.32470703125000000000000000000000000000000000000000
+MPFR result: 0.32495117187500000000000000000000000000000000000000
+Libc floating point result bits: 0x3532 = (S: 0, E: 0x000D, M: 0x0132)
+ MPFR rounded bits: 0x3533 = (S: 0, E: 0x000D, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.47265625000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3790 = (S: 0, E: 0x000D, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.32470703125000000000000000000000000000000000000000
+MPFR result: 0.32495117187500000000000000000000000000000000000000
+Libc floating point result bits: 0x3532 = (S: 0, E: 0x000D, M: 0x0132)
+ MPFR rounded bits: 0x3533 = (S: 0, E: 0x000D, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3880 = (S: 0, E: 0x000E, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.42211914062500000000000000000000000000000000000000
+MPFR result: 0.42187500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x36C1 = (S: 0, E: 0x000D, M: 0x02C1)
+ MPFR rounded bits: 0x36C0 = (S: 0, E: 0x000D, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3880 = (S: 0, E: 0x000E, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.42163085937500000000000000000000000000000000000000
+MPFR result: 0.42187500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x36BF = (S: 0, E: 0x000D, M: 0x02BF)
+ MPFR rounded bits: 0x36C0 = (S: 0, E: 0x000D, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3880 = (S: 0, E: 0x000E, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.42163085937500000000000000000000000000000000000000
+MPFR result: 0.42187500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x36BF = (S: 0, E: 0x000D, M: 0x02BF)
+ MPFR rounded bits: 0x36C0 = (S: 0, E: 0x000D, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.56250000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x3880 = (S: 0, E: 0x000E, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 0.23742675781250000000000000000000000000000000000000
+MPFR result: 0.23730468750000000000000000000000000000000000000000
+Libc floating point result bits: 0x3399 = (S: 0, E: 0x000C, M: 0x0399)
+ MPFR rounded bits: 0x3398 = (S: 0, E: 0x000C, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.56250000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x3880 = (S: 0, E: 0x000E, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 0.23718261718750000000000000000000000000000000000000
+MPFR result: 0.23730468750000000000000000000000000000000000000000
+Libc floating point result bits: 0x3397 = (S: 0, E: 0x000C, M: 0x0397)
+ MPFR rounded bits: 0x3398 = (S: 0, E: 0x000C, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Nearest).
+Input decimal: x: 0.56250000000000000000000000000000000000000000000000 y: 3.50000000000000000000000000000000000000000000000000
+First input bits: 0x3880 = (S: 0, E: 0x000E, M: 0x0080)
+Second input bits: 0x4300 = (S: 0, E: 0x0010, M: 0x0300)
+Libc result: 0.13342285156250000000000000000000000000000000000000
+MPFR result: 0.13354492187500000000000000000000000000000000000000
+Libc floating point result bits: 0x3045 = (S: 0, E: 0x000C, M: 0x0045)
+ MPFR rounded bits: 0x3046 = (S: 0, E: 0x000C, M: 0x0046)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 0.76562500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3A20 = (S: 0, E: 0x000E, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.67041015625000000000000000000000000000000000000000
+MPFR result: 0.66992187500000000000000000000000000000000000000000
+Libc floating point result bits: 0x395D = (S: 0, E: 0x000E, M: 0x015D)
+ MPFR rounded bits: 0x395C = (S: 0, E: 0x000E, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 0.76562500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3A20 = (S: 0, E: 0x000E, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.66943359375000000000000000000000000000000000000000
+MPFR result: 0.66992187500000000000000000000000000000000000000000
+Libc floating point result bits: 0x395B = (S: 0, E: 0x000E, M: 0x015B)
+ MPFR rounded bits: 0x395C = (S: 0, E: 0x000E, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 0.76562500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3A20 = (S: 0, E: 0x000E, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 0.66943359375000000000000000000000000000000000000000
+MPFR result: 0.66992187500000000000000000000000000000000000000000
+Libc floating point result bits: 0x395B = (S: 0, E: 0x000E, M: 0x015B)
+ MPFR rounded bits: 0x395C = (S: 0, E: 0x000E, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1.26562500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3D10 = (S: 0, E: 0x000F, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1.42480468750000000000000000000000000000000000000000
+MPFR result: 1.42382812500000000000000000000000000000000000000000
+Libc floating point result bits: 0x3DB3 = (S: 0, E: 0x000F, M: 0x01B3)
+ MPFR rounded bits: 0x3DB2 = (S: 0, E: 0x000F, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1.26562500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3D10 = (S: 0, E: 0x000F, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1.42285156250000000000000000000000000000000000000000
+MPFR result: 1.42382812500000000000000000000000000000000000000000
+Libc floating point result bits: 0x3DB1 = (S: 0, E: 0x000F, M: 0x01B1)
+ MPFR rounded bits: 0x3DB2 = (S: 0, E: 0x000F, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1.26562500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3D10 = (S: 0, E: 0x000F, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1.42285156250000000000000000000000000000000000000000
+MPFR result: 1.42382812500000000000000000000000000000000000000000
+Libc floating point result bits: 0x3DB1 = (S: 0, E: 0x000F, M: 0x01B1)
+ MPFR rounded bits: 0x3DB2 = (S: 0, E: 0x000F, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3E40 = (S: 0, E: 0x000F, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1.95410156250000000000000000000000000000000000000000
+MPFR result: 1.95312500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3FD1 = (S: 0, E: 0x000F, M: 0x03D1)
+ MPFR rounded bits: 0x3FD0 = (S: 0, E: 0x000F, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3E40 = (S: 0, E: 0x000F, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1.95214843750000000000000000000000000000000000000000
+MPFR result: 1.95312500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3FCF = (S: 0, E: 0x000F, M: 0x03CF)
+ MPFR rounded bits: 0x3FD0 = (S: 0, E: 0x000F, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3E40 = (S: 0, E: 0x000F, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1.95214843750000000000000000000000000000000000000000
+MPFR result: 1.95312500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3FCF = (S: 0, E: 0x000F, M: 0x03CF)
+ MPFR rounded bits: 0x3FD0 = (S: 0, E: 0x000F, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1.89062500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3F90 = (S: 0, E: 0x000F, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 2.59765625000000000000000000000000000000000000000000
+MPFR result: 2.59960937500000000000000000000000000000000000000000
+Libc floating point result bits: 0x4132 = (S: 0, E: 0x0010, M: 0x0132)
+ MPFR rounded bits: 0x4133 = (S: 0, E: 0x0010, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1.89062500000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x3F90 = (S: 0, E: 0x000F, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 2.59765625000000000000000000000000000000000000000000
+MPFR result: 2.59960937500000000000000000000000000000000000000000
+Libc floating point result bits: 0x4132 = (S: 0, E: 0x0010, M: 0x0132)
+ MPFR rounded bits: 0x4133 = (S: 0, E: 0x0010, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 3.37695312500000000000000000000000000000000000000000
+MPFR result: 3.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x42C1 = (S: 0, E: 0x0010, M: 0x02C1)
+ MPFR rounded bits: 0x42C0 = (S: 0, E: 0x0010, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 3.37304687500000000000000000000000000000000000000000
+MPFR result: 3.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x42BF = (S: 0, E: 0x0010, M: 0x02BF)
+ MPFR rounded bits: 0x42C0 = (S: 0, E: 0x0010, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 3.37304687500000000000000000000000000000000000000000
+MPFR result: 3.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x42BF = (S: 0, E: 0x0010, M: 0x02BF)
+ MPFR rounded bits: 0x42C0 = (S: 0, E: 0x0010, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 7.59765625000000000000000000000000000000000000000000
+MPFR result: 7.59375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4799 = (S: 0, E: 0x0011, M: 0x0399)
+ MPFR rounded bits: 0x4798 = (S: 0, E: 0x0011, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 7.58984375000000000000000000000000000000000000000000
+MPFR result: 7.59375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4797 = (S: 0, E: 0x0011, M: 0x0397)
+ MPFR rounded bits: 0x4798 = (S: 0, E: 0x0011, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 7.58984375000000000000000000000000000000000000000000
+MPFR result: 7.59375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4797 = (S: 0, E: 0x0011, M: 0x0397)
+ MPFR rounded bits: 0x4798 = (S: 0, E: 0x0011, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Nearest).
+Input decimal: x: 2.25000000000000000000000000000000000000000000000000 y: 3.50000000000000000000000000000000000000000000000000
+First input bits: 0x4080 = (S: 0, E: 0x0010, M: 0x0080)
+Second input bits: 0x4300 = (S: 0, E: 0x0010, M: 0x0300)
+Libc result: 17.07812500000000000000000000000000000000000000000000
+MPFR result: 17.09375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4C45 = (S: 0, E: 0x0013, M: 0x0045)
+ MPFR rounded bits: 0x4C46 = (S: 0, E: 0x0013, M: 0x0046)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 2.44140625000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x40E2 = (S: 0, E: 0x0010, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 1.25097656250000000000000000000000000000000000000000
+MPFR result: 1.25000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3D01 = (S: 0, E: 0x000F, M: 0x0101)
+ MPFR rounded bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 2.44140625000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x40E2 = (S: 0, E: 0x0010, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 1.24902343750000000000000000000000000000000000000000
+MPFR result: 1.25000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3CFF = (S: 0, E: 0x000F, M: 0x00FF)
+ MPFR rounded bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 2.44140625000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x40E2 = (S: 0, E: 0x0010, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 1.24902343750000000000000000000000000000000000000000
+MPFR result: 1.25000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3CFF = (S: 0, E: 0x000F, M: 0x00FF)
+ MPFR rounded bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 2.44140625000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x40E2 = (S: 0, E: 0x0010, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1.95410156250000000000000000000000000000000000000000
+MPFR result: 1.95312500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3FD1 = (S: 0, E: 0x000F, M: 0x03D1)
+ MPFR rounded bits: 0x3FD0 = (S: 0, E: 0x000F, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 2.44140625000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x40E2 = (S: 0, E: 0x0010, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1.95214843750000000000000000000000000000000000000000
+MPFR result: 1.95312500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3FCF = (S: 0, E: 0x000F, M: 0x03CF)
+ MPFR rounded bits: 0x3FD0 = (S: 0, E: 0x000F, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 2.44140625000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x40E2 = (S: 0, E: 0x0010, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1.95214843750000000000000000000000000000000000000000
+MPFR result: 1.95312500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3FCF = (S: 0, E: 0x000F, M: 0x03CF)
+ MPFR rounded bits: 0x3FD0 = (S: 0, E: 0x000F, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 3.06250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4220 = (S: 0, E: 0x0010, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 5.36328125000000000000000000000000000000000000000000
+MPFR result: 5.35937500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x455D = (S: 0, E: 0x0011, M: 0x015D)
+ MPFR rounded bits: 0x455C = (S: 0, E: 0x0011, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 3.06250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4220 = (S: 0, E: 0x0010, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 5.35546875000000000000000000000000000000000000000000
+MPFR result: 5.35937500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x455B = (S: 0, E: 0x0011, M: 0x015B)
+ MPFR rounded bits: 0x455C = (S: 0, E: 0x0011, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 3.06250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4220 = (S: 0, E: 0x0010, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 5.35546875000000000000000000000000000000000000000000
+MPFR result: 5.35937500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x455B = (S: 0, E: 0x0011, M: 0x015B)
+ MPFR rounded bits: 0x455C = (S: 0, E: 0x0011, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 1.50097656250000000000000000000000000000000000000000
+MPFR result: 1.50000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3E01 = (S: 0, E: 0x000F, M: 0x0201)
+ MPFR rounded bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 1.49902343750000000000000000000000000000000000000000
+MPFR result: 1.50000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3DFF = (S: 0, E: 0x000F, M: 0x01FF)
+ MPFR rounded bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 1.49902343750000000000000000000000000000000000000000
+MPFR result: 1.50000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x3DFF = (S: 0, E: 0x000F, M: 0x01FF)
+ MPFR rounded bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 3.37695312500000000000000000000000000000000000000000
+MPFR result: 3.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x42C1 = (S: 0, E: 0x0010, M: 0x02C1)
+ MPFR rounded bits: 0x42C0 = (S: 0, E: 0x0010, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 3.37304687500000000000000000000000000000000000000000
+MPFR result: 3.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x42BF = (S: 0, E: 0x0010, M: 0x02BF)
+ MPFR rounded bits: 0x42C0 = (S: 0, E: 0x0010, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 3.37304687500000000000000000000000000000000000000000
+MPFR result: 3.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x42BF = (S: 0, E: 0x0010, M: 0x02BF)
+ MPFR rounded bits: 0x42C0 = (S: 0, E: 0x0010, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 7.59765625000000000000000000000000000000000000000000
+MPFR result: 7.59375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4799 = (S: 0, E: 0x0011, M: 0x0399)
+ MPFR rounded bits: 0x4798 = (S: 0, E: 0x0011, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 7.58984375000000000000000000000000000000000000000000
+MPFR result: 7.59375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4797 = (S: 0, E: 0x0011, M: 0x0397)
+ MPFR rounded bits: 0x4798 = (S: 0, E: 0x0011, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 7.58984375000000000000000000000000000000000000000000
+MPFR result: 7.59375000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4797 = (S: 0, E: 0x0011, M: 0x0397)
+ MPFR rounded bits: 0x4798 = (S: 0, E: 0x0011, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 11.39843750000000000000000000000000000000000000000000
+MPFR result: 11.39062500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x49B3 = (S: 0, E: 0x0012, M: 0x01B3)
+ MPFR rounded bits: 0x49B2 = (S: 0, E: 0x0012, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 11.38281250000000000000000000000000000000000000000000
+MPFR result: 11.39062500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x49B1 = (S: 0, E: 0x0012, M: 0x01B1)
+ MPFR rounded bits: 0x49B2 = (S: 0, E: 0x0012, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 5.06250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4510 = (S: 0, E: 0x0011, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 11.38281250000000000000000000000000000000000000000000
+MPFR result: 11.39062500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x49B1 = (S: 0, E: 0x0012, M: 0x01B1)
+ MPFR rounded bits: 0x49B2 = (S: 0, E: 0x0012, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 6.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4640 = (S: 0, E: 0x0011, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 15.63281250000000000000000000000000000000000000000000
+MPFR result: 15.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4BD1 = (S: 0, E: 0x0012, M: 0x03D1)
+ MPFR rounded bits: 0x4BD0 = (S: 0, E: 0x0012, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 6.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4640 = (S: 0, E: 0x0011, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 15.61718750000000000000000000000000000000000000000000
+MPFR result: 15.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4BCF = (S: 0, E: 0x0012, M: 0x03CF)
+ MPFR rounded bits: 0x4BD0 = (S: 0, E: 0x0012, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 6.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4640 = (S: 0, E: 0x0011, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 15.61718750000000000000000000000000000000000000000000
+MPFR result: 15.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4BCF = (S: 0, E: 0x0012, M: 0x03CF)
+ MPFR rounded bits: 0x4BD0 = (S: 0, E: 0x0012, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 7.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4790 = (S: 0, E: 0x0011, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 20.81250000000000000000000000000000000000000000000000
+MPFR result: 20.79687500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4D34 = (S: 0, E: 0x0013, M: 0x0134)
+ MPFR rounded bits: 0x4D33 = (S: 0, E: 0x0013, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 7.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4790 = (S: 0, E: 0x0011, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 20.78125000000000000000000000000000000000000000000000
+MPFR result: 20.79687500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4D32 = (S: 0, E: 0x0013, M: 0x0132)
+ MPFR rounded bits: 0x4D33 = (S: 0, E: 0x0013, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 7.56250000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4790 = (S: 0, E: 0x0011, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 20.78125000000000000000000000000000000000000000000000
+MPFR result: 20.79687500000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4D32 = (S: 0, E: 0x0013, M: 0x0132)
+ MPFR rounded bits: 0x4D33 = (S: 0, E: 0x0013, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 27.01562500000000000000000000000000000000000000000000
+MPFR result: 27.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4EC1 = (S: 0, E: 0x0013, M: 0x02C1)
+ MPFR rounded bits: 0x4EC0 = (S: 0, E: 0x0013, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 26.98437500000000000000000000000000000000000000000000
+MPFR result: 27.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4EBF = (S: 0, E: 0x0013, M: 0x02BF)
+ MPFR rounded bits: 0x4EC0 = (S: 0, E: 0x0013, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 26.98437500000000000000000000000000000000000000000000
+MPFR result: 27.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4EBF = (S: 0, E: 0x0013, M: 0x02BF)
+ MPFR rounded bits: 0x4EC0 = (S: 0, E: 0x0013, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 243.12500000000000000000000000000000000000000000000000
+MPFR result: 243.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5B99 = (S: 0, E: 0x0016, M: 0x0399)
+ MPFR rounded bits: 0x5B98 = (S: 0, E: 0x0016, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 242.87500000000000000000000000000000000000000000000000
+MPFR result: 243.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5B97 = (S: 0, E: 0x0016, M: 0x0397)
+ MPFR rounded bits: 0x5B98 = (S: 0, E: 0x0016, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 242.87500000000000000000000000000000000000000000000000
+MPFR result: 243.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5B97 = (S: 0, E: 0x0016, M: 0x0397)
+ MPFR rounded bits: 0x5B98 = (S: 0, E: 0x0016, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Nearest).
+Input decimal: x: 9.00000000000000000000000000000000000000000000000000 y: 3.50000000000000000000000000000000000000000000000000
+First input bits: 0x4880 = (S: 0, E: 0x0012, M: 0x0080)
+Second input bits: 0x4300 = (S: 0, E: 0x0010, M: 0x0300)
+Libc result: 2186.00000000000000000000000000000000000000000000000000
+MPFR result: 2188.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6845 = (S: 0, E: 0x001A, M: 0x0045)
+ MPFR rounded bits: 0x6846 = (S: 0, E: 0x001A, M: 0x0046)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 12.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4A20 = (S: 0, E: 0x0012, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 42.90625000000000000000000000000000000000000000000000
+MPFR result: 42.87500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x515D = (S: 0, E: 0x0014, M: 0x015D)
+ MPFR rounded bits: 0x515C = (S: 0, E: 0x0014, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 12.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4A20 = (S: 0, E: 0x0012, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 42.84375000000000000000000000000000000000000000000000
+MPFR result: 42.87500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x515B = (S: 0, E: 0x0014, M: 0x015B)
+ MPFR rounded bits: 0x515C = (S: 0, E: 0x0014, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 12.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4A20 = (S: 0, E: 0x0012, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 42.84375000000000000000000000000000000000000000000000
+MPFR result: 42.87500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x515B = (S: 0, E: 0x0014, M: 0x015B)
+ MPFR rounded bits: 0x515C = (S: 0, E: 0x0014, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 20.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4D10 = (S: 0, E: 0x0013, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 91.18750000000000000000000000000000000000000000000000
+MPFR result: 91.12500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x55B3 = (S: 0, E: 0x0015, M: 0x01B3)
+ MPFR rounded bits: 0x55B2 = (S: 0, E: 0x0015, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 20.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4D10 = (S: 0, E: 0x0013, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 91.06250000000000000000000000000000000000000000000000
+MPFR result: 91.12500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x55B1 = (S: 0, E: 0x0015, M: 0x01B1)
+ MPFR rounded bits: 0x55B2 = (S: 0, E: 0x0015, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 20.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4D10 = (S: 0, E: 0x0013, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 91.06250000000000000000000000000000000000000000000000
+MPFR result: 91.12500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x55B1 = (S: 0, E: 0x0015, M: 0x01B1)
+ MPFR rounded bits: 0x55B2 = (S: 0, E: 0x0015, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 25.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4E40 = (S: 0, E: 0x0013, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 125.06250000000000000000000000000000000000000000000000
+MPFR result: 125.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x57D1 = (S: 0, E: 0x0015, M: 0x03D1)
+ MPFR rounded bits: 0x57D0 = (S: 0, E: 0x0015, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 25.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4E40 = (S: 0, E: 0x0013, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 124.93750000000000000000000000000000000000000000000000
+MPFR result: 125.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x57CF = (S: 0, E: 0x0015, M: 0x03CF)
+ MPFR rounded bits: 0x57D0 = (S: 0, E: 0x0015, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 25.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4E40 = (S: 0, E: 0x0013, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 124.93750000000000000000000000000000000000000000000000
+MPFR result: 125.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x57CF = (S: 0, E: 0x0015, M: 0x03CF)
+ MPFR rounded bits: 0x57D0 = (S: 0, E: 0x0015, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 30.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4F90 = (S: 0, E: 0x0013, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 166.50000000000000000000000000000000000000000000000000
+MPFR result: 166.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5934 = (S: 0, E: 0x0016, M: 0x0134)
+ MPFR rounded bits: 0x5933 = (S: 0, E: 0x0016, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 30.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4F90 = (S: 0, E: 0x0013, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 166.25000000000000000000000000000000000000000000000000
+MPFR result: 166.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5932 = (S: 0, E: 0x0016, M: 0x0132)
+ MPFR rounded bits: 0x5933 = (S: 0, E: 0x0016, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 30.25000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x4F90 = (S: 0, E: 0x0013, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 166.25000000000000000000000000000000000000000000000000
+MPFR result: 166.37500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5932 = (S: 0, E: 0x0016, M: 0x0132)
+ MPFR rounded bits: 0x5933 = (S: 0, E: 0x0016, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 36.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5080 = (S: 0, E: 0x0014, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 216.12500000000000000000000000000000000000000000000000
+MPFR result: 216.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5AC1 = (S: 0, E: 0x0016, M: 0x02C1)
+ MPFR rounded bits: 0x5AC0 = (S: 0, E: 0x0016, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 36.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5080 = (S: 0, E: 0x0014, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 215.87500000000000000000000000000000000000000000000000
+MPFR result: 216.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5ABF = (S: 0, E: 0x0016, M: 0x02BF)
+ MPFR rounded bits: 0x5AC0 = (S: 0, E: 0x0016, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 36.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5080 = (S: 0, E: 0x0014, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 215.87500000000000000000000000000000000000000000000000
+MPFR result: 216.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5ABF = (S: 0, E: 0x0016, M: 0x02BF)
+ MPFR rounded bits: 0x5AC0 = (S: 0, E: 0x0016, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 36.00000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x5080 = (S: 0, E: 0x0014, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 7780.00000000000000000000000000000000000000000000000000
+MPFR result: 7776.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6F99 = (S: 0, E: 0x001B, M: 0x0399)
+ MPFR rounded bits: 0x6F98 = (S: 0, E: 0x001B, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 36.00000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x5080 = (S: 0, E: 0x0014, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 7772.00000000000000000000000000000000000000000000000000
+MPFR result: 7776.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6F97 = (S: 0, E: 0x001B, M: 0x0397)
+ MPFR rounded bits: 0x6F98 = (S: 0, E: 0x001B, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 36.00000000000000000000000000000000000000000000000000 y: 2.50000000000000000000000000000000000000000000000000
+First input bits: 0x5080 = (S: 0, E: 0x0014, M: 0x0080)
+Second input bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+Libc result: 7772.00000000000000000000000000000000000000000000000000
+MPFR result: 7776.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6F97 = (S: 0, E: 0x001B, M: 0x0397)
+ MPFR rounded bits: 0x6F98 = (S: 0, E: 0x001B, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 2.50195312500000000000000000000000000000000000000000
+MPFR result: 2.50000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4101 = (S: 0, E: 0x0010, M: 0x0101)
+ MPFR rounded bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 2.49804687500000000000000000000000000000000000000000
+MPFR result: 2.50000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x40FF = (S: 0, E: 0x0010, M: 0x00FF)
+ MPFR rounded bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 2.49804687500000000000000000000000000000000000000000
+MPFR result: 2.50000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x40FF = (S: 0, E: 0x0010, M: 0x00FF)
+ MPFR rounded bits: 0x4100 = (S: 0, E: 0x0010, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 15.63281250000000000000000000000000000000000000000000
+MPFR result: 15.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4BD1 = (S: 0, E: 0x0012, M: 0x03D1)
+ MPFR rounded bits: 0x4BD0 = (S: 0, E: 0x0012, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 15.61718750000000000000000000000000000000000000000000
+MPFR result: 15.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4BCF = (S: 0, E: 0x0012, M: 0x03CF)
+ MPFR rounded bits: 0x4BD0 = (S: 0, E: 0x0012, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 15.61718750000000000000000000000000000000000000000000
+MPFR result: 15.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4BCF = (S: 0, E: 0x0012, M: 0x03CF)
+ MPFR rounded bits: 0x4BD0 = (S: 0, E: 0x0012, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Nearest).
+Input decimal: x: 39.06250000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x50E2 = (S: 0, E: 0x0014, M: 0x00E2)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 97.68750000000000000000000000000000000000000000000000
+MPFR result: 97.62500000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x561B = (S: 0, E: 0x0015, M: 0x021B)
+ MPFR rounded bits: 0x561A = (S: 0, E: 0x0015, M: 0x021A)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 49.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5220 = (S: 0, E: 0x0014, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 343.25000000000000000000000000000000000000000000000000
+MPFR result: 343.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5D5D = (S: 0, E: 0x0017, M: 0x015D)
+ MPFR rounded bits: 0x5D5C = (S: 0, E: 0x0017, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 49.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5220 = (S: 0, E: 0x0014, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 342.75000000000000000000000000000000000000000000000000
+MPFR result: 343.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5D5B = (S: 0, E: 0x0017, M: 0x015B)
+ MPFR rounded bits: 0x5D5C = (S: 0, E: 0x0017, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 49.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5220 = (S: 0, E: 0x0014, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 342.75000000000000000000000000000000000000000000000000
+MPFR result: 343.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5D5B = (S: 0, E: 0x0017, M: 0x015B)
+ MPFR rounded bits: 0x5D5C = (S: 0, E: 0x0017, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 3.00195312500000000000000000000000000000000000000000
+MPFR result: 3.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4201 = (S: 0, E: 0x0010, M: 0x0201)
+ MPFR rounded bits: 0x4200 = (S: 0, E: 0x0010, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 2.99804687500000000000000000000000000000000000000000
+MPFR result: 3.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x41FF = (S: 0, E: 0x0010, M: 0x01FF)
+ MPFR rounded bits: 0x4200 = (S: 0, E: 0x0010, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 2.99804687500000000000000000000000000000000000000000
+MPFR result: 3.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x41FF = (S: 0, E: 0x0010, M: 0x01FF)
+ MPFR rounded bits: 0x4200 = (S: 0, E: 0x0010, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 27.01562500000000000000000000000000000000000000000000
+MPFR result: 27.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4EC1 = (S: 0, E: 0x0013, M: 0x02C1)
+ MPFR rounded bits: 0x4EC0 = (S: 0, E: 0x0013, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 26.98437500000000000000000000000000000000000000000000
+MPFR result: 27.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4EBF = (S: 0, E: 0x0013, M: 0x02BF)
+ MPFR rounded bits: 0x4EC0 = (S: 0, E: 0x0013, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 26.98437500000000000000000000000000000000000000000000
+MPFR result: 27.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4EBF = (S: 0, E: 0x0013, M: 0x02BF)
+ MPFR rounded bits: 0x4EC0 = (S: 0, E: 0x0013, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 243.12500000000000000000000000000000000000000000000000
+MPFR result: 243.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5B99 = (S: 0, E: 0x0016, M: 0x0399)
+ MPFR rounded bits: 0x5B98 = (S: 0, E: 0x0016, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 242.87500000000000000000000000000000000000000000000000
+MPFR result: 243.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5B97 = (S: 0, E: 0x0016, M: 0x0397)
+ MPFR rounded bits: 0x5B98 = (S: 0, E: 0x0016, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 242.87500000000000000000000000000000000000000000000000
+MPFR result: 243.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5B97 = (S: 0, E: 0x0016, M: 0x0397)
+ MPFR rounded bits: 0x5B98 = (S: 0, E: 0x0016, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 729.50000000000000000000000000000000000000000000000000
+MPFR result: 729.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x61B3 = (S: 0, E: 0x0018, M: 0x01B3)
+ MPFR rounded bits: 0x61B2 = (S: 0, E: 0x0018, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 728.50000000000000000000000000000000000000000000000000
+MPFR result: 729.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x61B1 = (S: 0, E: 0x0018, M: 0x01B1)
+ MPFR rounded bits: 0x61B2 = (S: 0, E: 0x0018, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 81.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5510 = (S: 0, E: 0x0015, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 728.50000000000000000000000000000000000000000000000000
+MPFR result: 729.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x61B1 = (S: 0, E: 0x0018, M: 0x01B1)
+ MPFR rounded bits: 0x61B2 = (S: 0, E: 0x0018, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 100.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5640 = (S: 0, E: 0x0015, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1000.50000000000000000000000000000000000000000000000000
+MPFR result: 1000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x63D1 = (S: 0, E: 0x0018, M: 0x03D1)
+ MPFR rounded bits: 0x63D0 = (S: 0, E: 0x0018, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 100.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5640 = (S: 0, E: 0x0015, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 999.50000000000000000000000000000000000000000000000000
+MPFR result: 1000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x63CF = (S: 0, E: 0x0018, M: 0x03CF)
+ MPFR rounded bits: 0x63D0 = (S: 0, E: 0x0018, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 100.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5640 = (S: 0, E: 0x0015, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 999.50000000000000000000000000000000000000000000000000
+MPFR result: 1000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x63CF = (S: 0, E: 0x0018, M: 0x03CF)
+ MPFR rounded bits: 0x63D0 = (S: 0, E: 0x0018, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 121.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5790 = (S: 0, E: 0x0015, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1332.00000000000000000000000000000000000000000000000000
+MPFR result: 1331.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6534 = (S: 0, E: 0x0019, M: 0x0134)
+ MPFR rounded bits: 0x6533 = (S: 0, E: 0x0019, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 121.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5790 = (S: 0, E: 0x0015, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1330.00000000000000000000000000000000000000000000000000
+MPFR result: 1331.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6532 = (S: 0, E: 0x0019, M: 0x0132)
+ MPFR rounded bits: 0x6533 = (S: 0, E: 0x0019, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 121.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5790 = (S: 0, E: 0x0015, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1330.00000000000000000000000000000000000000000000000000
+MPFR result: 1331.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6532 = (S: 0, E: 0x0019, M: 0x0132)
+ MPFR rounded bits: 0x6533 = (S: 0, E: 0x0019, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 144.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5880 = (S: 0, E: 0x0016, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1729.00000000000000000000000000000000000000000000000000
+MPFR result: 1728.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x66C1 = (S: 0, E: 0x0019, M: 0x02C1)
+ MPFR rounded bits: 0x66C0 = (S: 0, E: 0x0019, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 144.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5880 = (S: 0, E: 0x0016, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1727.00000000000000000000000000000000000000000000000000
+MPFR result: 1728.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x66BF = (S: 0, E: 0x0019, M: 0x02BF)
+ MPFR rounded bits: 0x66C0 = (S: 0, E: 0x0019, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 144.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5880 = (S: 0, E: 0x0016, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 1727.00000000000000000000000000000000000000000000000000
+MPFR result: 1728.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x66BF = (S: 0, E: 0x0019, M: 0x02BF)
+ MPFR rounded bits: 0x66C0 = (S: 0, E: 0x0019, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 196.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5A20 = (S: 0, E: 0x0016, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 2746.00000000000000000000000000000000000000000000000000
+MPFR result: 2744.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x695D = (S: 0, E: 0x001A, M: 0x015D)
+ MPFR rounded bits: 0x695C = (S: 0, E: 0x001A, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 196.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5A20 = (S: 0, E: 0x0016, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 2742.00000000000000000000000000000000000000000000000000
+MPFR result: 2744.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x695B = (S: 0, E: 0x001A, M: 0x015B)
+ MPFR rounded bits: 0x695C = (S: 0, E: 0x001A, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 196.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5A20 = (S: 0, E: 0x0016, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 2742.00000000000000000000000000000000000000000000000000
+MPFR result: 2744.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x695B = (S: 0, E: 0x001A, M: 0x015B)
+ MPFR rounded bits: 0x695C = (S: 0, E: 0x001A, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 324.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5D10 = (S: 0, E: 0x0017, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 5836.00000000000000000000000000000000000000000000000000
+MPFR result: 5832.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6DB3 = (S: 0, E: 0x001B, M: 0x01B3)
+ MPFR rounded bits: 0x6DB2 = (S: 0, E: 0x001B, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 324.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5D10 = (S: 0, E: 0x0017, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 5828.00000000000000000000000000000000000000000000000000
+MPFR result: 5832.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6DB1 = (S: 0, E: 0x001B, M: 0x01B1)
+ MPFR rounded bits: 0x6DB2 = (S: 0, E: 0x001B, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 324.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5D10 = (S: 0, E: 0x0017, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 5828.00000000000000000000000000000000000000000000000000
+MPFR result: 5832.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6DB1 = (S: 0, E: 0x001B, M: 0x01B1)
+ MPFR rounded bits: 0x6DB2 = (S: 0, E: 0x001B, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 400.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5E40 = (S: 0, E: 0x0017, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 8004.00000000000000000000000000000000000000000000000000
+MPFR result: 8000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6FD1 = (S: 0, E: 0x001B, M: 0x03D1)
+ MPFR rounded bits: 0x6FD0 = (S: 0, E: 0x001B, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 400.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5E40 = (S: 0, E: 0x0017, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 7996.00000000000000000000000000000000000000000000000000
+MPFR result: 8000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6FCF = (S: 0, E: 0x001B, M: 0x03CF)
+ MPFR rounded bits: 0x6FD0 = (S: 0, E: 0x001B, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 400.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5E40 = (S: 0, E: 0x0017, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 7996.00000000000000000000000000000000000000000000000000
+MPFR result: 8000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6FCF = (S: 0, E: 0x001B, M: 0x03CF)
+ MPFR rounded bits: 0x6FD0 = (S: 0, E: 0x001B, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 484.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5F90 = (S: 0, E: 0x0017, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 10656.00000000000000000000000000000000000000000000000000
+MPFR result: 10648.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x7134 = (S: 0, E: 0x001C, M: 0x0134)
+ MPFR rounded bits: 0x7133 = (S: 0, E: 0x001C, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 484.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5F90 = (S: 0, E: 0x0017, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 10640.00000000000000000000000000000000000000000000000000
+MPFR result: 10648.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x7132 = (S: 0, E: 0x001C, M: 0x0132)
+ MPFR rounded bits: 0x7133 = (S: 0, E: 0x001C, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 484.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x5F90 = (S: 0, E: 0x0017, M: 0x0390)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 10640.00000000000000000000000000000000000000000000000000
+MPFR result: 10648.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x7132 = (S: 0, E: 0x001C, M: 0x0132)
+ MPFR rounded bits: 0x7133 = (S: 0, E: 0x001C, M: 0x0133)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 576.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6080 = (S: 0, E: 0x0018, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 13832.00000000000000000000000000000000000000000000000000
+MPFR result: 13824.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x72C1 = (S: 0, E: 0x001C, M: 0x02C1)
+ MPFR rounded bits: 0x72C0 = (S: 0, E: 0x001C, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 576.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6080 = (S: 0, E: 0x0018, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 13816.00000000000000000000000000000000000000000000000000
+MPFR result: 13824.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x72BF = (S: 0, E: 0x001C, M: 0x02BF)
+ MPFR rounded bits: 0x72C0 = (S: 0, E: 0x001C, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 576.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6080 = (S: 0, E: 0x0018, M: 0x0080)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 13816.00000000000000000000000000000000000000000000000000
+MPFR result: 13824.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x72BF = (S: 0, E: 0x001C, M: 0x02BF)
+ MPFR rounded bits: 0x72C0 = (S: 0, E: 0x001C, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 625.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x60E2 = (S: 0, E: 0x0018, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 5.00390625000000000000000000000000000000000000000000
+MPFR result: 5.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4501 = (S: 0, E: 0x0011, M: 0x0101)
+ MPFR rounded bits: 0x4500 = (S: 0, E: 0x0011, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 625.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x60E2 = (S: 0, E: 0x0018, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 4.99609375000000000000000000000000000000000000000000
+MPFR result: 5.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x44FF = (S: 0, E: 0x0011, M: 0x00FF)
+ MPFR rounded bits: 0x4500 = (S: 0, E: 0x0011, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 625.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x60E2 = (S: 0, E: 0x0018, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 4.99609375000000000000000000000000000000000000000000
+MPFR result: 5.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x44FF = (S: 0, E: 0x0011, M: 0x00FF)
+ MPFR rounded bits: 0x4500 = (S: 0, E: 0x0011, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 625.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x60E2 = (S: 0, E: 0x0018, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 125.06250000000000000000000000000000000000000000000000
+MPFR result: 125.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x57D1 = (S: 0, E: 0x0015, M: 0x03D1)
+ MPFR rounded bits: 0x57D0 = (S: 0, E: 0x0015, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 625.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x60E2 = (S: 0, E: 0x0018, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 124.93750000000000000000000000000000000000000000000000
+MPFR result: 125.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x57CF = (S: 0, E: 0x0015, M: 0x03CF)
+ MPFR rounded bits: 0x57D0 = (S: 0, E: 0x0015, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 625.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x60E2 = (S: 0, E: 0x0018, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 124.93750000000000000000000000000000000000000000000000
+MPFR result: 125.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x57CF = (S: 0, E: 0x0015, M: 0x03CF)
+ MPFR rounded bits: 0x57D0 = (S: 0, E: 0x0015, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 784.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6220 = (S: 0, E: 0x0018, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 21968.00000000000000000000000000000000000000000000000000
+MPFR result: 21952.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x755D = (S: 0, E: 0x001D, M: 0x015D)
+ MPFR rounded bits: 0x755C = (S: 0, E: 0x001D, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 784.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6220 = (S: 0, E: 0x0018, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 21936.00000000000000000000000000000000000000000000000000
+MPFR result: 21952.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x755B = (S: 0, E: 0x001D, M: 0x015B)
+ MPFR rounded bits: 0x755C = (S: 0, E: 0x001D, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 784.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6220 = (S: 0, E: 0x0018, M: 0x0220)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 21936.00000000000000000000000000000000000000000000000000
+MPFR result: 21952.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x755B = (S: 0, E: 0x001D, M: 0x015B)
+ MPFR rounded bits: 0x755C = (S: 0, E: 0x001D, M: 0x015C)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 6.00390625000000000000000000000000000000000000000000
+MPFR result: 6.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4601 = (S: 0, E: 0x0011, M: 0x0201)
+ MPFR rounded bits: 0x4600 = (S: 0, E: 0x0011, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 5.99609375000000000000000000000000000000000000000000
+MPFR result: 6.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x45FF = (S: 0, E: 0x0011, M: 0x01FF)
+ MPFR rounded bits: 0x4600 = (S: 0, E: 0x0011, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 5.99609375000000000000000000000000000000000000000000
+MPFR result: 6.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x45FF = (S: 0, E: 0x0011, M: 0x01FF)
+ MPFR rounded bits: 0x4600 = (S: 0, E: 0x0011, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 216.12500000000000000000000000000000000000000000000000
+MPFR result: 216.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5AC1 = (S: 0, E: 0x0016, M: 0x02C1)
+ MPFR rounded bits: 0x5AC0 = (S: 0, E: 0x0016, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 215.87500000000000000000000000000000000000000000000000
+MPFR result: 216.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5ABF = (S: 0, E: 0x0016, M: 0x02BF)
+ MPFR rounded bits: 0x5AC0 = (S: 0, E: 0x0016, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 215.87500000000000000000000000000000000000000000000000
+MPFR result: 216.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x5ABF = (S: 0, E: 0x0016, M: 0x02BF)
+ MPFR rounded bits: 0x5AC0 = (S: 0, E: 0x0016, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 7780.00000000000000000000000000000000000000000000000000
+MPFR result: 7776.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6F99 = (S: 0, E: 0x001B, M: 0x0399)
+ MPFR rounded bits: 0x6F98 = (S: 0, E: 0x001B, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 7772.00000000000000000000000000000000000000000000000000
+MPFR result: 7776.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6F97 = (S: 0, E: 0x001B, M: 0x0397)
+ MPFR rounded bits: 0x6F98 = (S: 0, E: 0x001B, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 1.25000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3D00 = (S: 0, E: 0x000F, M: 0x0100)
+Libc result: 7772.00000000000000000000000000000000000000000000000000
+MPFR result: 7776.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x6F97 = (S: 0, E: 0x001B, M: 0x0397)
+ MPFR rounded bits: 0x6F98 = (S: 0, E: 0x001B, M: 0x0398)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 46688.00000000000000000000000000000000000000000000000000
+MPFR result: 46656.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x79B3 = (S: 0, E: 0x001E, M: 0x01B3)
+ MPFR rounded bits: 0x79B2 = (S: 0, E: 0x001E, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 46624.00000000000000000000000000000000000000000000000000
+MPFR result: 46656.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x79B1 = (S: 0, E: 0x001E, M: 0x01B1)
+ MPFR rounded bits: 0x79B2 = (S: 0, E: 0x001E, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1296.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6510 = (S: 0, E: 0x0019, M: 0x0110)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 46624.00000000000000000000000000000000000000000000000000
+MPFR result: 46656.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x79B1 = (S: 0, E: 0x001E, M: 0x01B1)
+ MPFR rounded bits: 0x79B2 = (S: 0, E: 0x001E, M: 0x01B2)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 1600.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6640 = (S: 0, E: 0x0019, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 64032.00000000000000000000000000000000000000000000000000
+MPFR result: 64000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x7BD1 = (S: 0, E: 0x001E, M: 0x03D1)
+ MPFR rounded bits: 0x7BD0 = (S: 0, E: 0x001E, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 1600.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6640 = (S: 0, E: 0x0019, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 63968.00000000000000000000000000000000000000000000000000
+MPFR result: 64000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x7BCF = (S: 0, E: 0x001E, M: 0x03CF)
+ MPFR rounded bits: 0x7BD0 = (S: 0, E: 0x001E, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 1600.00000000000000000000000000000000000000000000000000 y: 1.50000000000000000000000000000000000000000000000000
+First input bits: 0x6640 = (S: 0, E: 0x0019, M: 0x0240)
+Second input bits: 0x3E00 = (S: 0, E: 0x000F, M: 0x0200)
+Libc result: 63968.00000000000000000000000000000000000000000000000000
+MPFR result: 64000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x7BCF = (S: 0, E: 0x001E, M: 0x03CF)
+ MPFR rounded bits: 0x7BD0 = (S: 0, E: 0x001E, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 10000.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x70E2 = (S: 0, E: 0x001C, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 10.00781250000000000000000000000000000000000000000000
+MPFR result: 10.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4901 = (S: 0, E: 0x0012, M: 0x0101)
+ MPFR rounded bits: 0x4900 = (S: 0, E: 0x0012, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 10000.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x70E2 = (S: 0, E: 0x001C, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 9.99218750000000000000000000000000000000000000000000
+MPFR result: 10.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x48FF = (S: 0, E: 0x0012, M: 0x00FF)
+ MPFR rounded bits: 0x4900 = (S: 0, E: 0x0012, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 10000.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x70E2 = (S: 0, E: 0x001C, M: 0x00E2)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 9.99218750000000000000000000000000000000000000000000
+MPFR result: 10.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x48FF = (S: 0, E: 0x0012, M: 0x00FF)
+ MPFR rounded bits: 0x4900 = (S: 0, E: 0x0012, M: 0x0100)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 10000.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x70E2 = (S: 0, E: 0x001C, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1000.50000000000000000000000000000000000000000000000000
+MPFR result: 1000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x63D1 = (S: 0, E: 0x0018, M: 0x03D1)
+ MPFR rounded bits: 0x63D0 = (S: 0, E: 0x0018, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 10000.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x70E2 = (S: 0, E: 0x001C, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 999.50000000000000000000000000000000000000000000000000
+MPFR result: 1000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x63CF = (S: 0, E: 0x0018, M: 0x03CF)
+ MPFR rounded bits: 0x63D0 = (S: 0, E: 0x0018, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 10000.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x70E2 = (S: 0, E: 0x001C, M: 0x00E2)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 999.50000000000000000000000000000000000000000000000000
+MPFR result: 1000.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x63CF = (S: 0, E: 0x0018, M: 0x03CF)
+ MPFR rounded bits: 0x63D0 = (S: 0, E: 0x0018, M: 0x03D0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 20736.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x7510 = (S: 0, E: 0x001D, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 12.00781250000000000000000000000000000000000000000000
+MPFR result: 12.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x4A01 = (S: 0, E: 0x0012, M: 0x0201)
+ MPFR rounded bits: 0x4A00 = (S: 0, E: 0x0012, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 20736.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x7510 = (S: 0, E: 0x001D, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 11.99218750000000000000000000000000000000000000000000
+MPFR result: 12.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x49FF = (S: 0, E: 0x0012, M: 0x01FF)
+ MPFR rounded bits: 0x4A00 = (S: 0, E: 0x0012, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 20736.00000000000000000000000000000000000000000000000000 y: 0.25000000000000000000000000000000000000000000000000
+First input bits: 0x7510 = (S: 0, E: 0x001D, M: 0x0110)
+Second input bits: 0x3400 = (S: 0, E: 0x000D, M: 0x0000)
+Libc result: 11.99218750000000000000000000000000000000000000000000
+MPFR result: 12.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x49FF = (S: 0, E: 0x0012, M: 0x01FF)
+ MPFR rounded bits: 0x4A00 = (S: 0, E: 0x0012, M: 0x0200)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Upward).
+Input decimal: x: 20736.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x7510 = (S: 0, E: 0x001D, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1729.00000000000000000000000000000000000000000000000000
+MPFR result: 1728.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x66C1 = (S: 0, E: 0x0019, M: 0x02C1)
+ MPFR rounded bits: 0x66C0 = (S: 0, E: 0x0019, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::Downward).
+Input decimal: x: 20736.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x7510 = (S: 0, E: 0x001D, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1727.00000000000000000000000000000000000000000000000000
+MPFR result: 1728.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x66BF = (S: 0, E: 0x0019, M: 0x02BF)
+ MPFR rounded bits: 0x66C0 = (S: 0, E: 0x0019, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+/home/nir/Documents/llvm-project/libc/test/src/math/powf16_test.cpp:96: FAILURE
+Failed to match __llvm_libc_22_0_0_git::powf16(x, y) against LIBC_NAMESPACE::testing::mpfr::get_mpfr_matcher<mpfr::Operation::Pow>( input, __llvm_libc_22_0_0_git::powf16(x, y), 0.5, mpfr::RoundingMode::TowardZero).
+Input decimal: x: 20736.00000000000000000000000000000000000000000000000000 y: 0.75000000000000000000000000000000000000000000000000
+First input bits: 0x7510 = (S: 0, E: 0x001D, M: 0x0110)
+Second input bits: 0x3A00 = (S: 0, E: 0x000E, M: 0x0200)
+Libc result: 1727.00000000000000000000000000000000000000000000000000
+MPFR result: 1728.00000000000000000000000000000000000000000000000000
+Libc floating point result bits: 0x66BF = (S: 0, E: 0x0019, M: 0x02BF)
+ MPFR rounded bits: 0x66C0 = (S: 0, E: 0x0019, M: 0x02C0)
+ULP error: 1.00000000000000000000000000000000000000000000000000
+[ FAILED ] LlvmLibcPowF16Test.TestAll
+Ran 1 tests. PASS: 0 FAIL: 1
+ninja: build stopped: subcommand failed.
>From 4b8706342d1edd029793cff30f056da175a0cfe0 Mon Sep 17 00:00:00 2001
From: anonmiraj <nabilmalek48 at gmail.com>
Date: Sun, 2 Nov 2025 03:18:55 +0200
Subject: [PATCH 9/9] update tests
---
libc/test/src/math/exhaustive/CMakeLists.txt | 15 +++
libc/test/src/math/exhaustive/powf16_test.cpp | 72 ++++++++++++
libc/test/src/math/powf16_test.cpp | 110 ++++++++++++++----
3 files changed, 174 insertions(+), 23 deletions(-)
create mode 100644 libc/test/src/math/exhaustive/powf16_test.cpp
diff --git a/libc/test/src/math/exhaustive/CMakeLists.txt b/libc/test/src/math/exhaustive/CMakeLists.txt
index e40972ea9a879..331a4a556ed52 100644
--- a/libc/test/src/math/exhaustive/CMakeLists.txt
+++ b/libc/test/src/math/exhaustive/CMakeLists.txt
@@ -312,6 +312,21 @@ add_fp_unittest(
-lpthread
)
+add_fp_unittest(
+ powf16_test
+ NO_RUN_POSTBUILD
+ NEED_MPFR
+ SUITE
+ libc_math_exhaustive_tests
+ SRCS
+ powf16_test.cpp
+ DEPENDS
+ .exhaustive_test
+ libc.src.math.powf16
+ libc.src.__support.FPUtil.fp_bits
+ LINK_LIBRARIES
+ -lpthread
+)
add_fp_unittest(
hypotf_test
NO_RUN_POSTBUILD
diff --git a/libc/test/src/math/exhaustive/powf16_test.cpp b/libc/test/src/math/exhaustive/powf16_test.cpp
new file mode 100644
index 0000000000000..61c99baa77508
--- /dev/null
+++ b/libc/test/src/math/exhaustive/powf16_test.cpp
@@ -0,0 +1,72 @@
+//===-- Exhaustive test for powf16 ----------------------------------------===//
+//
+// 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 "exhaustive_test.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/math/powf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
+
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+struct Powf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
+ using FloatType = float16;
+ using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
+ using StorageType = typename FPBits::StorageType;
+
+ uint64_t check(uint16_t x_start, uint16_t x_stop, uint16_t y_start,
+ uint16_t y_stop, mpfr::RoundingMode rounding) {
+ mpfr::ForceRoundingMode r(rounding);
+ if (!r.success)
+ return true;
+ uint16_t xbits = x_start;
+ uint64_t failed = 0;
+ do {
+ float16 x = FPBits(xbits).get_val();
+ uint16_t ybits = y_start;
+ do {
+ float16 y = FPBits(ybits).get_val();
+ mpfr::BinaryInput<float16> input{x, y};
+ bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
+ mpfr::Operation::Pow, input, LIBC_NAMESPACE::powf16(x, y), 0.5,
+ rounding);
+ failed += (!correct);
+ } while (ybits++ < y_stop);
+ } while (xbits++ < x_stop);
+ return failed;
+ }
+};
+
+using LlvmLibcPowf16ExhaustiveTest =
+ LlvmLibcExhaustiveMathTest<Powf16Checker, 1 << 8>;
+
+// Range: x in [0, inf], y in [0, inf]
+static constexpr uint16_t POS_START = 0x0000U;
+static constexpr uint16_t POS_STOP = 0x7C00U;
+
+TEST_F(LlvmLibcPowf16ExhaustiveTest, PositiveRange) {
+ test_full_range_all_roundings(POS_START, POS_STOP, POS_START, POS_STOP);
+}
+
+// Range: x in [-0, -inf], y in [0, inf]
+static constexpr uint16_t NEG_START = 0x8000U;
+static constexpr uint16_t NEG_STOP = 0xFC00U;
+
+TEST_F(LlvmLibcPowf16ExhaustiveTest, NegativeBasePositiveExponent) {
+ test_full_range_all_roundings(NEG_START, NEG_STOP, POS_START, POS_STOP);
+}
+
+// Range: x in [0, inf], y in [-0, -inf]
+TEST_F(LlvmLibcPowf16ExhaustiveTest, PositiveBaseNegativeExponent) {
+ test_full_range_all_roundings(POS_START, POS_STOP, NEG_START, NEG_STOP);
+}
+
+// Range: x in [-0, -inf], y in [-0, -inf]
+TEST_F(LlvmLibcPowf16ExhaustiveTest, NegativeRange) {
+ test_full_range_all_roundings(NEG_START, NEG_STOP, NEG_START, NEG_STOP);
+}
diff --git a/libc/test/src/math/powf16_test.cpp b/libc/test/src/math/powf16_test.cpp
index 090289ba1983d..1610e66184026 100644
--- a/libc/test/src/math/powf16_test.cpp
+++ b/libc/test/src/math/powf16_test.cpp
@@ -5,45 +5,109 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
-
+#include "src/__support/CPP/bit.h"
#include "src/math/powf16.h"
#include "test/UnitTest/FPMatcher.h"
#include "test/UnitTest/Test.h"
#include "utils/MPFRWrapper/MPFRUtils.h"
using LlvmLibcPowF16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
+using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
static constexpr float16 SELECTED_VALS[] = {
- 0.5f16, 0.83984375f16, 1.0f16, 2.0f16, 3.0f16, 3.140625f16, 15.5f16,
-};
-
-// Test selected x values against all possible y values.
-TEST_F(LlvmLibcPowF16Test, SelectedX_AllY) {
- for (size_t i = 0; i < sizeof(SELECTED_VALS) / sizeof(SELECTED_VALS[0]);
- ++i) {
- float16 x = SELECTED_VALS[i];
- for (uint16_t y_u = 0; y_u <= 0x7c00U; ++y_u) {
- float16 y = FPBits(y_u).get_val();
-
- mpfr::BinaryInput<float16> input{x, y};
+ 0.83984375f16, 1.414f16, 0.0625f16, 2.5f16,
+ 3.140625f16, 15.5f16, 2.f16, 3.25f16};
+
+// Test tricky inputs for selected x values against all possible y values.
+TEST_F(LlvmLibcPowF16Test, TrickyInput_SelectedX_AllY) {
+ for (float16 x_base : SELECTED_VALS) {
+ // Only test non-negative x_base
+ if (FPBits(x_base).is_neg())
+ continue;
+
+ // Loop through normal and subnormal values only (0x0001 to 0x7BFF)
+ for (uint16_t y_u = 1; y_u <= 0x7BFFU; ++y_u) {
+ float16 y_base = FPBits(y_u).get_val();
+
+ // Case 1: (+x, +y) - Standard positive case
+ mpfr::BinaryInput<float16> input1{x_base, y_base};
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input1,
+ LIBC_NAMESPACE::powf16(x_base, y_base),
+ 0.5);
+
+ // Case 2: (+x, -y) - Always valid for positive x
+ float16 y_neg = -y_base;
+ mpfr::BinaryInput<float16> input2{x_base, y_neg};
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input2,
+ LIBC_NAMESPACE::powf16(x_base, y_neg),
+ 0.5);
+ }
+
+ // Case 3: (-x, +y) - Only test with positive integer y values
+ for (int y_int = 1; y_int <= 2048; ++y_int) {
+ float16 y_val = static_cast<float16>(y_int);
+ float16 x_neg = -x_base;
+ mpfr::BinaryInput<float16> input{x_neg, y_val};
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input,
+ LIBC_NAMESPACE::powf16(x_neg, y_val), 0.5);
+ }
+
+ // Case 4: (-x, -y) - Only test with negative integer y values
+ for (int y_int = -2048; y_int < 0; ++y_int) {
+ float16 y_val = static_cast<float16>(y_int);
+ float16 x_neg = -x_base;
+ mpfr::BinaryInput<float16> input{x_neg, y_val};
EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input,
- LIBC_NAMESPACE::powf16(x, y), 0.5);
+ LIBC_NAMESPACE::powf16(x_neg, y_val), 0.5);
}
}
}
-// Test selected y values against all possible x values.
-TEST_F(LlvmLibcPowF16Test, SelectedY_AllX) {
- for (size_t i = 0; i < sizeof(SELECTED_VALS) / sizeof(SELECTED_VALS[0]);
- ++i) {
- float16 y = SELECTED_VALS[i];
- for (uint16_t x_u = 0; x_u <= 0x7c00U; ++x_u) {
- float16 x = FPBits(x_u).get_val();
- mpfr::BinaryInput<float16> input{x, y};
+// Test tricky inputs for selected y values against all possible x values.
+TEST_F(LlvmLibcPowF16Test, TrickyInput_SelectedY_AllX) {
+ for (float16 y_base : SELECTED_VALS) {
+ // Only test non-negative y_base
+ if (FPBits(y_base).is_neg())
+ continue;
+
+ // Loop through normal and subnormal values only (0x0001 to 0x7BFF)
+ for (uint16_t x_u = 1; x_u <= 0x7BFFU; ++x_u) {
+ float16 x_base = FPBits(x_u).get_val();
+
+ // Case 1: (+x, +y) - Standard positive case
+ mpfr::BinaryInput<float16> input1{x_base, y_base};
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input1,
+ LIBC_NAMESPACE::powf16(x_base, y_base),
+ 0.5);
+
+ // Case 2: (+x, -y) - Always valid for positive x
+ float16 y_neg = -y_base;
+ mpfr::BinaryInput<float16> input2{x_base, y_neg};
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input2,
+ LIBC_NAMESPACE::powf16(x_base, y_neg),
+ 0.5);
+ }
+
+ // Case 3: (-x, +y) - Only test with positive integer x values
+ for (int x_int = 1; x_int <= 2048; ++x_int) {
+ float16 x_val = static_cast<float16>(x_int);
+ float16 x_neg = -x_val;
+ mpfr::BinaryInput<float16> input{x_neg, y_base};
+ EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input,
+ LIBC_NAMESPACE::powf16(x_neg, y_base),
+ 0.5);
+ }
+
+ // Case 4: (-x, -y) - Only test with negative integer x values
+ for (int x_int = 1; x_int <= 2048; ++x_int) {
+ float16 x_val = static_cast<float16>(x_int);
+ float16 x_neg = -x_val;
+ float16 y_neg = -y_base;
+ mpfr::BinaryInput<float16> input{x_neg, y_neg};
EXPECT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Pow, input,
- LIBC_NAMESPACE::powf16(x, y), 0.5);
+ LIBC_NAMESPACE::powf16(x_neg, y_neg), 0.5);
}
}
}
More information about the llvm-commits
mailing list