xref: /llvm-project/flang/runtime/Float128Math/scale.cpp (revision fc51c7f0cc1abf1679100d71d103fe5d943f580b)
1 //===-- runtime/Float128Math/scale.cpp ------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "math-entries.h"
10 #include "numeric-template-specs.h"
11 #include <limits>
12 
13 namespace Fortran::runtime {
14 extern "C" {
15 
16 #if HAS_LDBL128 || HAS_FLOAT128
17 F128Type RTDEF(Scale16)(F128Type x, std::int64_t p) {
18   auto ip{static_cast<int>(p)};
19   if (ip != p) {
20     ip = p < 0 ? std::numeric_limits<int>::min()
21                : std::numeric_limits<int>::max();
22   }
23   return LDEXPTy<F128Type>::compute(x, ip);
24 }
25 #endif
26 
27 } // extern "C"
28 } // namespace Fortran::runtime
29