//===-- runtime/Float128Math/numeric-template-specs.h -----------*- 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 FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_ #define FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_ #include "math-entries.h" #include "numeric-templates.h" namespace Fortran::runtime { using F128Type = CppTypeFor; template <> struct ABSTy { static F128Type compute(F128Type x) { return Abs::invoke(x); } }; template <> struct FREXPTy { static F128Type compute(F128Type x, int *e) { return Frexp::invoke(x, e); } }; template <> struct ILOGBTy { static int compute(F128Type x) { return Ilogb::invoke(x); } }; template <> struct ISINFTy { static bool compute(F128Type x) { return Isinf::invoke(x); } }; template <> struct ISNANTy { static bool compute(F128Type x) { return Isnan::invoke(x); } }; template <> struct LDEXPTy { template static F128Type compute(F128Type x, ET p) { return Ldexp::invoke(x, p); } }; template <> struct QNANTy { static F128Type compute() { return F128_RT_QNAN; } }; template <> struct SQRTTy { static F128Type compute(F128Type x) { return Sqrt::invoke(x); } }; } // namespace Fortran::runtime #endif // FORTRAN_RUNTIME_FLOAT128MATH_NUMERIC_TEMPLATE_SPECS_H_