[libc-commits] [libc] [libc][math][c23] Add f16fmaf C23 math function (PR #95483)
via libc-commits
libc-commits at lists.llvm.org
Thu Jun 13 16:09:04 PDT 2024
================
@@ -19,85 +18,115 @@
namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
-template <typename T>
+template <typename OutType, typename InType = OutType>
class FmaTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
-private:
- using Func = T (*)(T, T, T);
- using FPBits = LIBC_NAMESPACE::fputil::FPBits<T>;
- using StorageType = typename FPBits::StorageType;
-
- const T min_subnormal = FPBits::min_subnormal(Sign::POS).get_val();
- const T min_normal = FPBits::min_normal(Sign::POS).get_val();
- const T max_normal = FPBits::max_normal(Sign::POS).get_val();
- const T inf = FPBits::inf(Sign::POS).get_val();
- const T neg_inf = FPBits::inf(Sign::NEG).get_val();
- const T zero = FPBits::zero(Sign::POS).get_val();
- const T neg_zero = FPBits::zero(Sign::NEG).get_val();
- const T nan = FPBits::quiet_nan().get_val();
-
- static constexpr StorageType MAX_NORMAL = FPBits::max_normal().uintval();
- static constexpr StorageType MIN_NORMAL = FPBits::min_normal().uintval();
- static constexpr StorageType MAX_SUBNORMAL =
- FPBits::max_subnormal().uintval();
- static constexpr StorageType MIN_SUBNORMAL =
- FPBits::min_subnormal().uintval();
-
- StorageType get_random_bit_pattern() {
- StorageType bits{0};
- for (StorageType i = 0; i < sizeof(StorageType) / 2; ++i) {
+
+ struct OutConstants {
+ DECLARE_SPECIAL_CONSTANTS(OutType)
+ };
+
+ struct InConstants {
+ DECLARE_SPECIAL_CONSTANTS(InType)
+ };
+
+ using OutFPBits = typename OutConstants::FPBits;
+ using OutStorageType = typename OutConstants::StorageType;
+ using InFPBits = typename InConstants::FPBits;
+ using InStorageType = typename InConstants::StorageType;
+
+ static constexpr OutStorageType OUT_MIN_NORMAL_U =
+ OutFPBits::min_normal().uintval();
+ static constexpr InStorageType IN_MAX_NORMAL_U =
+ InFPBits::max_normal().uintval();
+ static constexpr InStorageType IN_MIN_NORMAL_U =
+ InFPBits::min_normal().uintval();
+ static constexpr InStorageType IN_MAX_SUBNORMAL_U =
+ InFPBits::max_subnormal().uintval();
+ static constexpr InStorageType IN_MIN_SUBNORMAL_U =
+ InFPBits::min_subnormal().uintval();
+
+ OutConstants out;
+ InConstants in;
----------------
overmighty wrote:
I can't change the `const` constants defined by `DECLARE_SPECIAL_CONSTANTS` to `static constexpr`, or `fmod*` tests would fail (it might have been `fmodf16` in particular, I only remember seeing FModTest.h in the console output).
https://github.com/llvm/llvm-project/pull/95483
More information about the libc-commits
mailing list