xref: /llvm-project/flang/runtime/Float128Math/norm2.cpp (revision fc51c7f0cc1abf1679100d71d103fe5d943f580b)
1baf6725bSSlava Zakharin //===-- runtime/Float128Math/norm2.cpp ------------------------------------===//
2baf6725bSSlava Zakharin //
3baf6725bSSlava Zakharin // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4baf6725bSSlava Zakharin // See https://llvm.org/LICENSE.txt for license information.
5baf6725bSSlava Zakharin // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6baf6725bSSlava Zakharin //
7baf6725bSSlava Zakharin //===----------------------------------------------------------------------===//
8baf6725bSSlava Zakharin 
9baf6725bSSlava Zakharin #include "math-entries.h"
100699749cSSlava Zakharin #include "numeric-template-specs.h"
11baf6725bSSlava Zakharin #include "reduction-templates.h"
12baf6725bSSlava Zakharin 
13baf6725bSSlava Zakharin namespace Fortran::runtime {
14baf6725bSSlava Zakharin extern "C" {
15baf6725bSSlava Zakharin 
16*fc51c7f0SSlava Zakharin #if HAS_LDBL128 || HAS_FLOAT128
17baf6725bSSlava Zakharin CppTypeFor<TypeCategory::Real, 16> RTDEF(Norm2_16)(
18baf6725bSSlava Zakharin     const Descriptor &x, const char *source, int line, int dim) {
19baf6725bSSlava Zakharin   return GetTotalReduction<TypeCategory::Real, 16>(
200699749cSSlava Zakharin       x, source, line, dim, nullptr, Norm2Accumulator<16>{x}, "NORM2");
21baf6725bSSlava Zakharin }
22baf6725bSSlava Zakharin 
23baf6725bSSlava Zakharin void RTDEF(Norm2DimReal16)(Descriptor &result, const Descriptor &x, int dim,
24baf6725bSSlava Zakharin     const char *source, int line) {
25baf6725bSSlava Zakharin   Terminator terminator{source, line};
26baf6725bSSlava Zakharin   auto type{x.type().GetCategoryAndKind()};
27baf6725bSSlava Zakharin   RUNTIME_CHECK(terminator, type);
28baf6725bSSlava Zakharin   RUNTIME_CHECK(
29baf6725bSSlava Zakharin       terminator, type->first == TypeCategory::Real && type->second == 16);
300699749cSSlava Zakharin   Norm2Helper<16>{}(result, x, dim, nullptr, terminator);
31baf6725bSSlava Zakharin }
320699749cSSlava Zakharin #endif
33baf6725bSSlava Zakharin 
34baf6725bSSlava Zakharin } // extern "C"
35baf6725bSSlava Zakharin } // namespace Fortran::runtime
36