(root)/
glibc-2.38/
sysdeps/
powerpc/
fpu/
math_private.h
       1  /* Private inline math functions for powerpc.
       2     Copyright (C) 2006-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _PPC_MATH_PRIVATE_H_
      20  #define _PPC_MATH_PRIVATE_H_
      21  
      22  #include <sysdep.h>
      23  #include <ldsodefs.h>
      24  #include <dl-procinfo.h>
      25  
      26  #include_next <math_private.h>
      27  
      28  #ifdef _ARCH_PWR9
      29  
      30  #if __GNUC_PREREQ (8, 0)
      31  # define _GL_HAS_BUILTIN_ILOGB 1
      32  #elif defined __has_builtin
      33  # define _GL_HAS_BUILTIN_ILOGB __has_builtin (__builtin_vsx_scalar_extract_exp)
      34  #else
      35  # define _GL_HAS_BUILTIN_ILOGB 0
      36  #endif
      37  
      38  #define __builtin_test_dc_ilogbf __builtin_test_dc_ilogb
      39  #define __builtin_ilogbf __builtin_ilogb
      40  
      41  #define __builtin_test_dc_ilogb(x, y) \
      42          __builtin_vsx_scalar_test_data_class_dp(x, y)
      43  #define __builtin_ilogb(x) __builtin_vsx_scalar_extract_exp(x) - 0x3ff
      44  
      45  #define __builtin_test_dc_ilogbf128(x, y) \
      46          __builtin_vsx_scalar_test_data_class_qp(x, y)
      47  #define __builtin_ilogbf128(x) __builtin_vsx_scalar_extract_expq(x) - 0x3fff
      48  
      49  #if __HAVE_DISTINCT_FLOAT128
      50  extern __always_inline _Float128
      51  __ieee754_sqrtf128 (_Float128 __x)
      52  {
      53    _Float128 __z;
      54    asm ("xssqrtqp %0,%1" : "=v" (__z) : "v" (__x));
      55    return __z;
      56  }
      57  #endif
      58  #else /* !_ARCH_PWR9 */
      59  #define _GL_HAS_BUILTIN_ILOGB 0
      60  #endif
      61  
      62  #endif /* _PPC_MATH_PRIVATE_H_ */