initial commit
[glibc.git] / sysdeps / powerpc / fpu / math_private.h
1 /* Private inline math functions for powerpc.
2 Copyright (C) 2006-2022 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_ */