(root)/
glibc-2.38/
sysdeps/
ieee754/
soft-fp/
s_fsqrtl.c
       1  /* Square root of long double (ldbl-128) value, narrowing the result to
       2     float, using soft-fp.
       3     Copyright (C) 2021-2023 Free Software Foundation, Inc.
       4     This file is part of the GNU C Library.
       5  
       6     The GNU C Library is free software; you can redistribute it and/or
       7     modify it under the terms of the GNU Lesser General Public
       8     License as published by the Free Software Foundation; either
       9     version 2.1 of the License, or (at your option) any later version.
      10  
      11     The GNU C Library is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      14     Lesser General Public License for more details.
      15  
      16     You should have received a copy of the GNU Lesser General Public
      17     License along with the GNU C Library; if not, see
      18     <https://www.gnu.org/licenses/>.  */
      19  
      20  #define f32sqrtf64x __hide_f32sqrtf64x
      21  #define f32sqrtf128 __hide_f32sqrtf128
      22  #include <math.h>
      23  #undef f32sqrtf64x
      24  #undef f32sqrtf128
      25  
      26  #include <math-narrow.h>
      27  #include <soft-fp.h>
      28  #include <single.h>
      29  #include <quad.h>
      30  
      31  float
      32  __fsqrtl (_Float128 x)
      33  {
      34    FP_DECL_EX;
      35    FP_DECL_Q (X);
      36    FP_DECL_Q (R);
      37    FP_DECL_S (RN);
      38    float ret;
      39  
      40    FP_INIT_ROUNDMODE;
      41    FP_UNPACK_Q (X, x);
      42    FP_SQRT_Q (R, X);
      43  #if _FP_W_TYPE_SIZE < 64
      44    FP_TRUNC_COOKED (S, Q, 1, 4, RN, R);
      45  #else
      46    FP_TRUNC_COOKED (S, Q, 1, 2, RN, R);
      47  #endif
      48    FP_PACK_S (ret, RN);
      49    FP_HANDLE_EXCEPTIONS;
      50    CHECK_NARROW_SQRT (ret, x);
      51    return ret;
      52  }
      53  libm_alias_float_ldouble (sqrt)