1 /* Private inline math functions for powerpc.
2    Copyright (C) 2006-2021 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
__ieee754_sqrtf128(_Float128 __x)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_ */
63