@@ -142,4 +142,15 @@
#define __DECL_SIMD_asinhf32x
#define __DECL_SIMD_asinhf64x
#define __DECL_SIMD_asinhf128x
+
+#define __DECL_SIMD_atan
+#define __DECL_SIMD_atanf
+#define __DECL_SIMD_atanl
+#define __DECL_SIMD_atanf16
+#define __DECL_SIMD_atanf32
+#define __DECL_SIMD_atanf64
+#define __DECL_SIMD_atanf128
+#define __DECL_SIMD_atanf32x
+#define __DECL_SIMD_atanf64x
+#define __DECL_SIMD_atanf128x
#endif
@@ -54,7 +54,7 @@ __MATHCALL_VEC (acos,, (_Mdouble_ __x));
/* Arc sine of X. */
__MATHCALL_VEC (asin,, (_Mdouble_ __x));
/* Arc tangent of X. */
-__MATHCALL (atan,, (_Mdouble_ __x));
+__MATHCALL_VEC (atan,, (_Mdouble_ __x));
/* Arc tangent of Y/X. */
__MATHCALL (atan2,, (_Mdouble_ __y, _Mdouble_ __x));
@@ -50,31 +50,39 @@ GLIBC_2.35 _ZGVbN2v_acos F
GLIBC_2.35 _ZGVbN2v_acosh F
GLIBC_2.35 _ZGVbN2v_asin F
GLIBC_2.35 _ZGVbN2v_asinh F
+GLIBC_2.35 _ZGVbN2v_atan F
GLIBC_2.35 _ZGVbN4v_acosf F
GLIBC_2.35 _ZGVbN4v_acoshf F
GLIBC_2.35 _ZGVbN4v_asinf F
GLIBC_2.35 _ZGVbN4v_asinhf F
+GLIBC_2.35 _ZGVbN4v_atanf F
GLIBC_2.35 _ZGVcN4v_acos F
GLIBC_2.35 _ZGVcN4v_acosh F
GLIBC_2.35 _ZGVcN4v_asin F
GLIBC_2.35 _ZGVcN4v_asinh F
+GLIBC_2.35 _ZGVcN4v_atan F
GLIBC_2.35 _ZGVcN8v_acosf F
GLIBC_2.35 _ZGVcN8v_acoshf F
GLIBC_2.35 _ZGVcN8v_asinf F
GLIBC_2.35 _ZGVcN8v_asinhf F
+GLIBC_2.35 _ZGVcN8v_atanf F
GLIBC_2.35 _ZGVdN4v_acos F
GLIBC_2.35 _ZGVdN4v_acosh F
GLIBC_2.35 _ZGVdN4v_asin F
GLIBC_2.35 _ZGVdN4v_asinh F
+GLIBC_2.35 _ZGVdN4v_atan F
GLIBC_2.35 _ZGVdN8v_acosf F
GLIBC_2.35 _ZGVdN8v_acoshf F
GLIBC_2.35 _ZGVdN8v_asinf F
GLIBC_2.35 _ZGVdN8v_asinhf F
+GLIBC_2.35 _ZGVdN8v_atanf F
GLIBC_2.35 _ZGVeN16v_acosf F
GLIBC_2.35 _ZGVeN16v_acoshf F
GLIBC_2.35 _ZGVeN16v_asinf F
GLIBC_2.35 _ZGVeN16v_asinhf F
+GLIBC_2.35 _ZGVeN16v_atanf F
GLIBC_2.35 _ZGVeN8v_acos F
GLIBC_2.35 _ZGVeN8v_acosh F
GLIBC_2.35 _ZGVeN8v_asin F
GLIBC_2.35 _ZGVeN8v_asinh F
+GLIBC_2.35 _ZGVeN8v_atan F
@@ -74,6 +74,10 @@
# define __DECL_SIMD_asinh __DECL_SIMD_x86_64
# undef __DECL_SIMD_asinhf
# define __DECL_SIMD_asinhf __DECL_SIMD_x86_64
+# undef __DECL_SIMD_atan
+# define __DECL_SIMD_atan __DECL_SIMD_x86_64
+# undef __DECL_SIMD_atanf
+# define __DECL_SIMD_atanf __DECL_SIMD_x86_64
# endif
#endif
@@ -26,6 +26,7 @@ libmvec-funcs = \
acosh \
asin \
asinh \
+ atan \
cos \
exp \
log \
@@ -18,9 +18,11 @@ libmvec {
_ZGVbN2v_acosh; _ZGVcN4v_acosh; _ZGVdN4v_acosh; _ZGVeN8v_acosh;
_ZGVbN2v_asin; _ZGVcN4v_asin; _ZGVdN4v_asin; _ZGVeN8v_asin;
_ZGVbN2v_asinh; _ZGVcN4v_asinh; _ZGVdN4v_asinh; _ZGVeN8v_asinh;
+ _ZGVbN2v_atan; _ZGVcN4v_atan; _ZGVdN4v_atan; _ZGVeN8v_atan;
_ZGVbN4v_acosf; _ZGVcN8v_acosf; _ZGVdN8v_acosf; _ZGVeN16v_acosf;
_ZGVbN4v_acoshf; _ZGVcN8v_acoshf; _ZGVdN8v_acoshf; _ZGVeN16v_acoshf;
_ZGVbN4v_asinf; _ZGVcN8v_asinf; _ZGVdN8v_asinf; _ZGVeN16v_asinf;
_ZGVbN4v_asinhf; _ZGVcN8v_asinhf; _ZGVdN8v_asinhf; _ZGVeN16v_asinhf;
+ _ZGVbN4v_atanf; _ZGVcN8v_atanf; _ZGVdN8v_atanf; _ZGVeN16v_atanf;
}
}
@@ -221,6 +221,26 @@ float: 2
float128: 2
ldouble: 1
+Function: "atan_vlen16":
+float: 1
+
+Function: "atan_vlen2":
+double: 1
+
+Function: "atan_vlen4":
+double: 1
+float: 1
+
+Function: "atan_vlen4_avx2":
+double: 1
+
+Function: "atan_vlen8":
+double: 1
+float: 1
+
+Function: "atan_vlen8_avx2":
+float: 1
+
Function: "atanh":
double: 2
float: 2
new file mode 100644
@@ -0,0 +1,20 @@
+/* SSE2 version of vectorized atan, vector length is 2.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define _ZGVbN2v_atan _ZGVbN2v_atan_sse2
+#include "../svml_d_atan2_core.S"
new file mode 100644
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized atan, vector length is 2.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define SYMBOL_NAME _ZGVbN2v_atan
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN2v_atan, __GI__ZGVbN2v_atan, __redirect__ZGVbN2v_atan)
+ __attribute__ ((visibility ("hidden")));
+#endif
new file mode 100644
@@ -0,0 +1,1659 @@
+/* Function atan vectorized with SSE4.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ https://www.gnu.org/licenses/. */
+
+/*
+ * ALGORITHM DESCRIPTION:
+ *
+ * For 0.0 <= x <= 7.0/16.0: atan(x) = atan(0.0) + atan(s), where s=(x-0.0)/(1.0+0.0*x)
+ * For 7.0/16.0 <= x <= 11.0/16.0: atan(x) = atan(0.5) + atan(s), where s=(x-0.5)/(1.0+0.5*x)
+ * For 11.0/16.0 <= x <= 19.0/16.0: atan(x) = atan(1.0) + atan(s), where s=(x-1.0)/(1.0+1.0*x)
+ * For 19.0/16.0 <= x <= 39.0/16.0: atan(x) = atan(1.5) + atan(s), where s=(x-1.5)/(1.0+1.5*x)
+ * For 39.0/16.0 <= x <= inf : atan(x) = atan(inf) + atan(s), where s=-1.0/x
+ * Where atan(s) ~= s+s^3*Poly11(s^2) on interval |s|<7.0/0.16.
+ *
+ */
+
+#include <sysdep.h>
+
+ .text
+ENTRY(_ZGVbN2v_atan_sse4)
+ lea 576+__svml_datan_data_internal_avx512(%rip), %rcx
+ movups __svml_datan_data_internal_avx512(%rip), %xmm1
+ movups 64+__svml_datan_data_internal_avx512(%rip), %xmm4
+ andps %xmm0, %xmm1
+ movaps %xmm4, %xmm6
+ movaps %xmm1, %xmm2
+ addpd %xmm1, %xmm6
+ movaps %xmm6, %xmm5
+ pxor %xmm1, %xmm0
+ subpd %xmm4, %xmm5
+ subpd %xmm5, %xmm2
+ mulpd %xmm1, %xmm5
+ movups 128+__svml_datan_data_internal_avx512(%rip), %xmm7
+ cmplepd %xmm1, %xmm7
+ addpd 256+__svml_datan_data_internal_avx512(%rip), %xmm5
+
+/* saturate X range */
+ movups 320+__svml_datan_data_internal_avx512(%rip), %xmm3
+ movaps %xmm7, %xmm4
+ minpd %xmm1, %xmm3
+ movups %xmm15, -24(%rsp)
+ cfi_offset(32, -32)
+ movaps %xmm7, %xmm15
+ movups 192+__svml_datan_data_internal_avx512(%rip), %xmm1
+ andnps %xmm2, %xmm4
+ andps %xmm7, %xmm1
+ andnps %xmm5, %xmm15
+ andps %xmm7, %xmm3
+ orps %xmm1, %xmm4
+ orps %xmm3, %xmm15
+
+/*
+ * table lookup sequence
+ * VPERMUTE not available
+ */
+ movaps %xmm6, %xmm3
+
+/* R+Rl = DiffX/Y */
+ divpd %xmm15, %xmm4
+ psllq $3, %xmm3
+ pand .FLT_15(%rip), %xmm3
+ movd %xmm3, %eax
+ pshufd $2, %xmm3, %xmm5
+ movups 960+__svml_datan_data_internal_avx512(%rip), %xmm1
+ movd %xmm5, %edx
+ cmplepd %xmm6, %xmm1
+ movslq %eax, %rax
+ movaps %xmm1, %xmm6
+ movslq %edx, %rdx
+ movsd -128(%rax,%rcx), %xmm2
+ movhpd -128(%rdx,%rcx), %xmm2
+ movsd (%rcx,%rax), %xmm3
+ andnps %xmm2, %xmm6
+ movhpd (%rcx,%rdx), %xmm3
+
+/* set table value to Pi/2 for large X */
+ movups 1024+__svml_datan_data_internal_avx512(%rip), %xmm2
+ andps %xmm1, %xmm3
+ movaps %xmm7, %xmm1
+ andps %xmm7, %xmm2
+
+/* polynomial evaluation */
+ movaps %xmm4, %xmm7
+ orps %xmm3, %xmm6
+ mulpd %xmm4, %xmm7
+ andnps %xmm6, %xmm1
+ movaps %xmm7, %xmm5
+ orps %xmm2, %xmm1
+ movaps %xmm7, %xmm15
+ movups 1152+__svml_datan_data_internal_avx512(%rip), %xmm2
+ mulpd %xmm7, %xmm2
+ mulpd %xmm7, %xmm5
+ addpd 1168+__svml_datan_data_internal_avx512(%rip), %xmm2
+ mulpd %xmm4, %xmm15
+ mulpd %xmm5, %xmm2
+ movups 1184+__svml_datan_data_internal_avx512(%rip), %xmm3
+ mulpd %xmm7, %xmm3
+ addpd 1200+__svml_datan_data_internal_avx512(%rip), %xmm3
+ movups 1216+__svml_datan_data_internal_avx512(%rip), %xmm6
+ mulpd %xmm7, %xmm6
+ addpd %xmm2, %xmm3
+ addpd 1232+__svml_datan_data_internal_avx512(%rip), %xmm6
+ mulpd %xmm3, %xmm5
+ addpd %xmm5, %xmm6
+ mulpd %xmm6, %xmm15
+ addpd %xmm15, %xmm4
+ addpd %xmm4, %xmm1
+ movups -24(%rsp), %xmm15
+ cfi_restore(32)
+ pxor %xmm1, %xmm0
+ ret
+
+END(_ZGVbN2v_atan_sse4)
+
+ .align 16,0x90
+
+__svml_datan_cout_rare_internal:
+
+ cfi_startproc
+
+ movzwl 6(%rdi), %r8d
+ andl $32752, %r8d
+ shrl $4, %r8d
+ cmpl $2047, %r8d
+ je .LBL_2_12
+ movq (%rdi), %rdx
+ movq %rdx, -16(%rsp)
+ shrq $56, %rdx
+ movb 7(%rdi), %al
+ andl $127, %edx
+ movb %dl, -9(%rsp)
+ movsd -16(%rsp), %xmm0
+ shrb $7, %al
+ comisd 1888+__datan_la_CoutTab(%rip), %xmm0
+ movl -12(%rsp), %ecx
+ jb .LBL_2_6
+ movsd 1896+__datan_la_CoutTab(%rip), %xmm1
+ comisd %xmm0, %xmm1
+ jbe .LBL_2_5
+ movl 4(%rdi), %edx
+ movl %ecx, %edi
+ andl $-524288, %ecx
+ andl $-1048576, %edi
+ addl $262144, %ecx
+ movaps %xmm0, %xmm9
+ andl $1048575, %ecx
+ movaps %xmm0, %xmm10
+ movsd %xmm0, -56(%rsp)
+ orl %ecx, %edi
+ movl $0, -56(%rsp)
+ andl $1048575, %edx
+ movl %edi, -52(%rsp)
+ lea __datan_la_CoutTab(%rip), %rcx
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm4
+ movsd -56(%rsp), %xmm15
+ shll $20, %r8d
+ subsd -56(%rsp), %xmm9
+ mulsd 1928+__datan_la_CoutTab(%rip), %xmm10
+ shlb $7, %al
+ mulsd %xmm9, %xmm4
+ movsd %xmm4, -48(%rsp)
+ orl %edx, %r8d
+ movsd -48(%rsp), %xmm5
+ addl $-1069547520, %r8d
+ sarl $18, %r8d
+ subsd %xmm9, %xmm5
+ movsd %xmm5, -40(%rsp)
+ andl $-2, %r8d
+ movsd -48(%rsp), %xmm7
+ movsd -40(%rsp), %xmm6
+ movslq %r8d, %r8
+ subsd %xmm6, %xmm7
+ movsd %xmm7, -48(%rsp)
+ movsd -48(%rsp), %xmm8
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm6
+ subsd %xmm8, %xmm9
+ movsd %xmm9, -40(%rsp)
+ movsd -48(%rsp), %xmm2
+ movsd -40(%rsp), %xmm3
+ movsd %xmm10, -48(%rsp)
+ movsd -48(%rsp), %xmm11
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm8
+ subsd -16(%rsp), %xmm11
+ movsd %xmm11, -40(%rsp)
+ movsd -48(%rsp), %xmm13
+ movsd -40(%rsp), %xmm12
+ subsd %xmm12, %xmm13
+ movsd %xmm13, -48(%rsp)
+ movsd -48(%rsp), %xmm14
+ subsd %xmm14, %xmm0
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm14
+ movsd %xmm0, -40(%rsp)
+ movsd -48(%rsp), %xmm5
+ movsd -40(%rsp), %xmm4
+ mulsd %xmm15, %xmm5
+ mulsd %xmm15, %xmm4
+ movaps %xmm5, %xmm1
+ addsd %xmm4, %xmm1
+ movsd %xmm1, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ subsd %xmm0, %xmm5
+ addsd %xmm4, %xmm5
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm4
+ movsd %xmm5, -40(%rsp)
+ movsd -48(%rsp), %xmm11
+ movsd -40(%rsp), %xmm1
+ addsd %xmm11, %xmm6
+ movsd %xmm6, -48(%rsp)
+ movsd -48(%rsp), %xmm7
+ subsd %xmm7, %xmm8
+ movsd %xmm8, -40(%rsp)
+ movsd -48(%rsp), %xmm10
+ movsd -40(%rsp), %xmm9
+ addsd %xmm9, %xmm10
+ movsd %xmm10, -32(%rsp)
+ movsd -40(%rsp), %xmm12
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm10
+ addsd %xmm11, %xmm12
+ movsd %xmm12, -40(%rsp)
+ movsd -32(%rsp), %xmm13
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm11
+ subsd %xmm13, %xmm14
+ movsd %xmm14, -32(%rsp)
+ movsd -40(%rsp), %xmm0
+ movsd -32(%rsp), %xmm15
+ addsd %xmm15, %xmm0
+ movsd %xmm0, -32(%rsp)
+ movsd -48(%rsp), %xmm9
+ mulsd %xmm9, %xmm4
+ movsd -32(%rsp), %xmm0
+ movsd %xmm4, -48(%rsp)
+ addsd %xmm1, %xmm0
+ movsd -48(%rsp), %xmm5
+ subsd %xmm9, %xmm5
+ movsd %xmm5, -40(%rsp)
+ movsd -48(%rsp), %xmm7
+ movsd -40(%rsp), %xmm6
+ subsd %xmm6, %xmm7
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm6
+ movsd %xmm7, -48(%rsp)
+ movsd -48(%rsp), %xmm8
+ subsd %xmm8, %xmm9
+ movsd %xmm9, -40(%rsp)
+ movsd -48(%rsp), %xmm4
+ divsd %xmm4, %xmm11
+ mulsd %xmm11, %xmm10
+ movsd -40(%rsp), %xmm5
+ movsd %xmm10, -40(%rsp)
+ addsd %xmm0, %xmm5
+ movsd -40(%rsp), %xmm12
+ subsd %xmm11, %xmm12
+ movsd %xmm12, -32(%rsp)
+ movsd -40(%rsp), %xmm10
+ movsd -32(%rsp), %xmm13
+ subsd %xmm13, %xmm10
+ movsd %xmm10, -32(%rsp)
+ movsd -32(%rsp), %xmm14
+ mulsd %xmm14, %xmm4
+ movsd -32(%rsp), %xmm15
+ subsd %xmm4, %xmm6
+ mulsd %xmm15, %xmm5
+ movsd %xmm5, -40(%rsp)
+ movsd -40(%rsp), %xmm1
+ subsd %xmm1, %xmm6
+ movsd %xmm6, -40(%rsp)
+ movsd -40(%rsp), %xmm4
+ movsd -32(%rsp), %xmm5
+ movsd -40(%rsp), %xmm0
+ movaps %xmm5, %xmm7
+ movsd -32(%rsp), %xmm1
+ mulsd %xmm3, %xmm5
+ addsd 1904+__datan_la_CoutTab(%rip), %xmm4
+ mulsd %xmm2, %xmm7
+ mulsd %xmm0, %xmm4
+ mulsd %xmm1, %xmm4
+ mulsd %xmm4, %xmm3
+ mulsd %xmm4, %xmm2
+ addsd %xmm3, %xmm5
+ movsd 1872+__datan_la_CoutTab(%rip), %xmm6
+ addsd %xmm2, %xmm5
+ movsd %xmm5, -48(%rsp)
+ movaps %xmm7, %xmm2
+ movsd -48(%rsp), %xmm4
+ addsd %xmm4, %xmm2
+ movsd %xmm2, -48(%rsp)
+ movsd -48(%rsp), %xmm3
+ movsd (%rcx,%r8,8), %xmm2
+ subsd %xmm3, %xmm7
+ addsd %xmm4, %xmm7
+ movsd %xmm7, -40(%rsp)
+ movsd -48(%rsp), %xmm3
+ movaps %xmm3, %xmm5
+ movaps %xmm3, %xmm0
+ mulsd %xmm3, %xmm5
+ addsd %xmm2, %xmm0
+ mulsd %xmm5, %xmm6
+ movsd -40(%rsp), %xmm10
+ movsd %xmm0, -48(%rsp)
+ movsd -48(%rsp), %xmm1
+ addsd 1864+__datan_la_CoutTab(%rip), %xmm6
+ subsd %xmm1, %xmm2
+ mulsd %xmm5, %xmm6
+ addsd %xmm3, %xmm2
+ addsd 1856+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ movsd %xmm2, -40(%rsp)
+ movsd -48(%rsp), %xmm9
+ movsd -40(%rsp), %xmm8
+ addsd 1848+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1840+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1832+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1824+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ mulsd %xmm3, %xmm6
+ addsd %xmm6, %xmm10
+ addsd 8(%rcx,%r8,8), %xmm10
+ addsd %xmm8, %xmm10
+ addsd %xmm9, %xmm10
+ movsd %xmm10, -24(%rsp)
+ movb -17(%rsp), %r9b
+ andb $127, %r9b
+ orb %al, %r9b
+ movb %r9b, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_5:
+ movsd 1912+__datan_la_CoutTab(%rip), %xmm0
+ shlb $7, %al
+ addsd 1920+__datan_la_CoutTab(%rip), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_6:
+ comisd 1880+__datan_la_CoutTab(%rip), %xmm0
+ jb .LBL_2_8
+ movaps %xmm0, %xmm1
+ mulsd %xmm0, %xmm1
+ shlb $7, %al
+ movsd 1872+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1864+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1856+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1848+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1840+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1832+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1824+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ mulsd %xmm0, %xmm2
+ addsd %xmm0, %xmm2
+ movsd %xmm2, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_8:
+ movzwl -10(%rsp), %edx
+ testl $32752, %edx
+ je .LBL_2_10
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm1
+ shlb $7, %al
+ addsd %xmm0, %xmm1
+ movsd %xmm1, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ mulsd -16(%rsp), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_10:
+ mulsd %xmm0, %xmm0
+ shlb $7, %al
+ movsd %xmm0, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ addsd -16(%rsp), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+
+.LBL_2_11:
+ xorl %eax, %eax
+ ret
+
+.LBL_2_12:
+ testl $1048575, 4(%rdi)
+ jne .LBL_2_15
+ cmpl $0, (%rdi)
+ jne .LBL_2_15
+ movsd 1912+__datan_la_CoutTab(%rip), %xmm0
+ movb 7(%rdi), %al
+ andb $-128, %al
+ addsd 1920+__datan_la_CoutTab(%rip), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rcx
+ movq %rcx, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_15:
+ movsd (%rdi), %xmm0
+ addsd %xmm0, %xmm0
+ movsd %xmm0, (%rsi)
+ jmp .LBL_2_11
+
+ cfi_endproc
+
+ .type __svml_datan_cout_rare_internal,@function
+ .size __svml_datan_cout_rare_internal,.-__svml_datan_cout_rare_internal
+
+ .section .rodata, "a"
+ .align 64
+
+__svml_datan_data_internal_avx512:
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 0
+ .long 4180443357
+ .long 1070553973
+ .long 90291023
+ .long 1071492199
+ .long 2737217249
+ .long 1071945615
+ .long 1413754136
+ .long 1072243195
+ .long 1468297118
+ .long 1072475260
+ .long 3531732635
+ .long 1072657163
+ .long 744202399
+ .long 1072747407
+ .long 2464923204
+ .long 1072805601
+ .long 1436891685
+ .long 1072853231
+ .long 2037009832
+ .long 1072892781
+ .long 1826698067
+ .long 1072926058
+ .long 1803191648
+ .long 1072954391
+ .long 2205372832
+ .long 1072978772
+ .long 4234512805
+ .long 1072999952
+ .long 3932628503
+ .long 1073018509
+ .long 2501811453
+ .long 1073034892
+ .long 866379431
+ .long 1073049455
+ .long 1376865888
+ .long 1073062480
+ .long 3290094269
+ .long 1073074195
+ .long 354764887
+ .long 1073084787
+ .long 3332975497
+ .long 1073094406
+ .long 1141460092
+ .long 1073103181
+ .long 745761286
+ .long 1073111216
+ .long 1673304509
+ .long 1073118600
+ .long 983388243
+ .long 1073125409
+ .long 3895509104
+ .long 1073131706
+ .long 2128523669
+ .long 1073137548
+ .long 2075485693
+ .long 1073142981
+ .long 121855980
+ .long 1073148047
+ .long 4181733783
+ .long 1073152780
+ .long 2887813284
+ .long 1073157214
+ .long 0
+ .long 0
+ .long 1022865341
+ .long 1013492590
+ .long 573531618
+ .long 1014639487
+ .long 2280825944
+ .long 1014120858
+ .long 856972295
+ .long 1015129638
+ .long 986810987
+ .long 1015077601
+ .long 2062601149
+ .long 1013974920
+ .long 589036912
+ .long 3164328156
+ .long 1787331214
+ .long 1016798022
+ .long 2942272763
+ .long 3164235441
+ .long 2956702105
+ .long 1016472908
+ .long 3903328092
+ .long 3162582135
+ .long 3175026820
+ .long 3158589859
+ .long 787328196
+ .long 1014621351
+ .long 2317874517
+ .long 3163795518
+ .long 4071621134
+ .long 1016673529
+ .long 2492111345
+ .long 3164172103
+ .long 3606178875
+ .long 3162371821
+ .long 3365790232
+ .long 1014547152
+ .long 2710887773
+ .long 1017086651
+ .long 2755350986
+ .long 3162706257
+ .long 198095269
+ .long 3162802133
+ .long 2791076759
+ .long 3164364640
+ .long 4214434319
+ .long 3162164074
+ .long 773754012
+ .long 3164190653
+ .long 139561443
+ .long 3164313657
+ .long 2197796619
+ .long 3164066219
+ .long 3592486882
+ .long 1016669082
+ .long 1148791015
+ .long 3163724934
+ .long 386789398
+ .long 3163117479
+ .long 2518816264
+ .long 3162291736
+ .long 2545101323
+ .long 3164592727
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .type __svml_datan_data_internal_avx512,@object
+ .size __svml_datan_data_internal_avx512,1280
+ .align 32
+
+__datan_la_CoutTab:
+ .long 3892314112
+ .long 1069799150
+ .long 2332892550
+ .long 1039715405
+ .long 1342177280
+ .long 1070305495
+ .long 270726690
+ .long 1041535749
+ .long 939524096
+ .long 1070817911
+ .long 2253973841
+ .long 3188654726
+ .long 3221225472
+ .long 1071277294
+ .long 3853927037
+ .long 1043226911
+ .long 2818572288
+ .long 1071767563
+ .long 2677759107
+ .long 1044314101
+ .long 3355443200
+ .long 1072103591
+ .long 1636578514
+ .long 3191094734
+ .long 1476395008
+ .long 1072475260
+ .long 1864703685
+ .long 3188646936
+ .long 805306368
+ .long 1072747407
+ .long 192551812
+ .long 3192726267
+ .long 2013265920
+ .long 1072892781
+ .long 2240369452
+ .long 1043768538
+ .long 0
+ .long 1072999953
+ .long 3665168337
+ .long 3192705970
+ .long 402653184
+ .long 1073084787
+ .long 1227953434
+ .long 3192313277
+ .long 2013265920
+ .long 1073142981
+ .long 3853283127
+ .long 1045277487
+ .long 805306368
+ .long 1073187261
+ .long 1676192264
+ .long 3192868861
+ .long 134217728
+ .long 1073217000
+ .long 4290763938
+ .long 1042034855
+ .long 671088640
+ .long 1073239386
+ .long 994303084
+ .long 3189643768
+ .long 402653184
+ .long 1073254338
+ .long 1878067156
+ .long 1042652475
+ .long 1610612736
+ .long 1073265562
+ .long 670314820
+ .long 1045138554
+ .long 3221225472
+ .long 1073273048
+ .long 691126919
+ .long 3189987794
+ .long 3489660928
+ .long 1073278664
+ .long 1618990832
+ .long 3188194509
+ .long 1207959552
+ .long 1073282409
+ .long 2198872939
+ .long 1044806069
+ .long 3489660928
+ .long 1073285217
+ .long 2633982383
+ .long 1042307894
+ .long 939524096
+ .long 1073287090
+ .long 1059367786
+ .long 3189114230
+ .long 2281701376
+ .long 1073288494
+ .long 3158525533
+ .long 1044484961
+ .long 3221225472
+ .long 1073289430
+ .long 286581777
+ .long 1044893263
+ .long 4026531840
+ .long 1073290132
+ .long 2000245215
+ .long 3191647611
+ .long 134217728
+ .long 1073290601
+ .long 4205071590
+ .long 1045035927
+ .long 536870912
+ .long 1073290952
+ .long 2334392229
+ .long 1043447393
+ .long 805306368
+ .long 1073291186
+ .long 2281458177
+ .long 3188885569
+ .long 3087007744
+ .long 1073291361
+ .long 691611507
+ .long 1044733832
+ .long 3221225472
+ .long 1073291478
+ .long 1816229550
+ .long 1044363390
+ .long 2281701376
+ .long 1073291566
+ .long 1993843750
+ .long 3189837440
+ .long 134217728
+ .long 1073291625
+ .long 3654754496
+ .long 1044970837
+ .long 4026531840
+ .long 1073291668
+ .long 3224300229
+ .long 3191935390
+ .long 805306368
+ .long 1073291698
+ .long 2988777976
+ .long 3188950659
+ .long 536870912
+ .long 1073291720
+ .long 1030371341
+ .long 1043402665
+ .long 3221225472
+ .long 1073291734
+ .long 1524463765
+ .long 1044361356
+ .long 3087007744
+ .long 1073291745
+ .long 2754295320
+ .long 1044731036
+ .long 134217728
+ .long 1073291753
+ .long 3099629057
+ .long 1044970710
+ .long 2281701376
+ .long 1073291758
+ .long 962914160
+ .long 3189838838
+ .long 805306368
+ .long 1073291762
+ .long 3543908206
+ .long 3188950786
+ .long 4026531840
+ .long 1073291764
+ .long 1849909620
+ .long 3191935434
+ .long 3221225472
+ .long 1073291766
+ .long 1641333636
+ .long 1044361352
+ .long 536870912
+ .long 1073291768
+ .long 1373968792
+ .long 1043402654
+ .long 134217728
+ .long 1073291769
+ .long 2033191599
+ .long 1044970710
+ .long 3087007744
+ .long 1073291769
+ .long 4117947437
+ .long 1044731035
+ .long 805306368
+ .long 1073291770
+ .long 315378368
+ .long 3188950787
+ .long 2281701376
+ .long 1073291770
+ .long 2428571750
+ .long 3189838838
+ .long 3221225472
+ .long 1073291770
+ .long 1608007466
+ .long 1044361352
+ .long 4026531840
+ .long 1073291770
+ .long 1895711420
+ .long 3191935434
+ .long 134217728
+ .long 1073291771
+ .long 2031108713
+ .long 1044970710
+ .long 536870912
+ .long 1073291771
+ .long 1362518342
+ .long 1043402654
+ .long 805306368
+ .long 1073291771
+ .long 317461253
+ .long 3188950787
+ .long 939524096
+ .long 1073291771
+ .long 4117231784
+ .long 1044731035
+ .long 1073741824
+ .long 1073291771
+ .long 1607942376
+ .long 1044361352
+ .long 1207959552
+ .long 1073291771
+ .long 2428929577
+ .long 3189838838
+ .long 1207959552
+ .long 1073291771
+ .long 2031104645
+ .long 1044970710
+ .long 1342177280
+ .long 1073291771
+ .long 1895722602
+ .long 3191935434
+ .long 1342177280
+ .long 1073291771
+ .long 317465322
+ .long 3188950787
+ .long 1342177280
+ .long 1073291771
+ .long 1362515546
+ .long 1043402654
+ .long 1342177280
+ .long 1073291771
+ .long 1607942248
+ .long 1044361352
+ .long 1342177280
+ .long 1073291771
+ .long 4117231610
+ .long 1044731035
+ .long 1342177280
+ .long 1073291771
+ .long 2031104637
+ .long 1044970710
+ .long 1342177280
+ .long 1073291771
+ .long 1540251232
+ .long 1045150466
+ .long 1342177280
+ .long 1073291771
+ .long 2644671394
+ .long 1045270303
+ .long 1342177280
+ .long 1073291771
+ .long 2399244691
+ .long 1045360181
+ .long 1342177280
+ .long 1073291771
+ .long 803971124
+ .long 1045420100
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192879152
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192849193
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192826724
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192811744
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192800509
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192793019
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192787402
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192783657
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192780848
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192778976
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192777572
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192776635
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192775933
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192775465
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192775114
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774880
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774704
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774587
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774500
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774441
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774397
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774368
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774346
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774331
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774320
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774313
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774308
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774304
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774301
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774299
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774298
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774297
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1466225875
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1343512524
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1251477510
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1190120835
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1144103328
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1113424990
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1090416237
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1075077068
+ .long 3192774295
+ .long 1431655765
+ .long 3218429269
+ .long 2576978363
+ .long 1070176665
+ .long 2453154343
+ .long 3217180964
+ .long 4189149139
+ .long 1069314502
+ .long 1775019125
+ .long 3216459198
+ .long 273199057
+ .long 1068739452
+ .long 874748308
+ .long 3215993277
+ .long 0
+ .long 1017118720
+ .long 0
+ .long 1069547520
+ .long 0
+ .long 1129316352
+ .long 0
+ .long 1072693248
+ .long 1413754136
+ .long 1073291771
+ .long 856972295
+ .long 1016178214
+ .long 33554432
+ .long 1101004800
+ .type __datan_la_CoutTab,@object
+ .size __datan_la_CoutTab,1936
+ .align 16
+
+.FLT_15:
+ .long 0x00000078,0x00000000,0x00000078,0x00000000
+ .type .FLT_15,@object
+ .size .FLT_15,16
new file mode 100644
@@ -0,0 +1,20 @@
+/* SSE version of vectorized atan, vector length is 4.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define _ZGVdN4v_atan _ZGVdN4v_atan_sse_wrapper
+#include "../svml_d_atan4_core.S"
new file mode 100644
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized atan, vector length is 4.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define SYMBOL_NAME _ZGVdN4v_atan
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN4v_atan, __GI__ZGVdN4v_atan, __redirect__ZGVdN4v_atan)
+ __attribute__ ((visibility ("hidden")));
+#endif
new file mode 100644
@@ -0,0 +1,1521 @@
+/* Function atan vectorized with AVX2.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ https://www.gnu.org/licenses/. */
+
+/*
+ * ALGORITHM DESCRIPTION:
+ *
+ * For 0.0 <= x <= 7.0/16.0: atan(x) = atan(0.0) + atan(s), where s=(x-0.0)/(1.0+0.0*x)
+ * For 7.0/16.0 <= x <= 11.0/16.0: atan(x) = atan(0.5) + atan(s), where s=(x-0.5)/(1.0+0.5*x)
+ * For 11.0/16.0 <= x <= 19.0/16.0: atan(x) = atan(1.0) + atan(s), where s=(x-1.0)/(1.0+1.0*x)
+ * For 19.0/16.0 <= x <= 39.0/16.0: atan(x) = atan(1.5) + atan(s), where s=(x-1.5)/(1.0+1.5*x)
+ * For 39.0/16.0 <= x <= inf : atan(x) = atan(inf) + atan(s), where s=-1.0/x
+ * Where atan(s) ~= s+s^3*Poly11(s^2) on interval |s|<7.0/0.16.
+ *
+ */
+
+#include <sysdep.h>
+
+ .text
+ENTRY(_ZGVdN4v_atan_avx2)
+ pushq %rbp
+ cfi_def_cfa_offset(16)
+ movq %rsp, %rbp
+ cfi_def_cfa(6, 16)
+ cfi_offset(6, -16)
+ andq $-64, %rsp
+ lea 576+__svml_datan_data_internal_avx512(%rip), %rdx
+ vmovupd 64+__svml_datan_data_internal_avx512(%rip), %ymm7
+ vmovupd 256+__svml_datan_data_internal_avx512(%rip), %ymm2
+ vmovups %ymm15, -64(%rsp)
+ vandpd __svml_datan_data_internal_avx512(%rip), %ymm0, %ymm3
+ vaddpd %ymm7, %ymm3, %ymm6
+ vcmpge_oqpd 128+__svml_datan_data_internal_avx512(%rip), %ymm3, %ymm5
+ vsubpd %ymm7, %ymm6, %ymm1
+ vxorpd %ymm0, %ymm3, %ymm4
+
+/* saturate X range */
+ vmovupd 320+__svml_datan_data_internal_avx512(%rip), %ymm0
+ vfmadd231pd %ymm3, %ymm1, %ymm2
+ vsubpd %ymm1, %ymm3, %ymm7
+ vminpd %ymm3, %ymm0, %ymm3
+
+/*
+ * table lookup sequence
+ * VPERMUTE not available
+ */
+ vpsllq $3, %ymm6, %ymm0
+ vcmpge_oqpd 960+__svml_datan_data_internal_avx512(%rip), %ymm6, %ymm6
+ .cfi_escape 0x10, 0xe2, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x22
+ vblendvpd %ymm5, 192+__svml_datan_data_internal_avx512(%rip), %ymm7, %ymm15
+ vblendvpd %ymm5, %ymm3, %ymm2, %ymm2
+
+/* R+Rl = DiffX/Y */
+ vdivpd %ymm2, %ymm15, %ymm1
+ vpand .FLT_15(%rip), %ymm0, %ymm2
+ vextractf128 $1, %ymm2, %xmm15
+ vmovd %xmm2, %eax
+ vmovd %xmm15, %r8d
+ movslq %eax, %rax
+ vpextrd $2, %xmm2, %ecx
+ movslq %r8d, %r8
+ vpextrd $2, %xmm15, %r9d
+ movslq %ecx, %rcx
+ movslq %r9d, %r9
+ vmovsd -128(%rax,%rdx), %xmm3
+ vmovsd -128(%r8,%rdx), %xmm0
+ vmovhpd -128(%rcx,%rdx), %xmm3, %xmm7
+ vmovhpd -128(%r9,%rdx), %xmm0, %xmm2
+ vmovsd (%rdx,%rax), %xmm3
+ vmovhpd (%rdx,%rcx), %xmm3, %xmm15
+ vinsertf128 $1, %xmm2, %ymm7, %ymm0
+ vmovsd (%rdx,%r8), %xmm2
+ vmovhpd (%rdx,%r9), %xmm2, %xmm3
+ vinsertf128 $1, %xmm3, %ymm15, %ymm7
+ vblendvpd %ymm6, %ymm7, %ymm0, %ymm0
+
+/* polynomial evaluation */
+ vmulpd %ymm1, %ymm1, %ymm3
+ vmovupd 1152+__svml_datan_data_internal_avx512(%rip), %ymm15
+
+/* set table value to Pi/2 for large X */
+ vblendvpd %ymm5, 1024+__svml_datan_data_internal_avx512(%rip), %ymm0, %ymm7
+ vmovupd 1216+__svml_datan_data_internal_avx512(%rip), %ymm0
+ vfmadd213pd 1184+__svml_datan_data_internal_avx512(%rip), %ymm3, %ymm15
+ vmulpd %ymm3, %ymm3, %ymm2
+ vmovupd 1280+__svml_datan_data_internal_avx512(%rip), %ymm5
+ vmulpd %ymm3, %ymm1, %ymm6
+ vfmadd213pd 1248+__svml_datan_data_internal_avx512(%rip), %ymm3, %ymm0
+ vfmadd213pd 1312+__svml_datan_data_internal_avx512(%rip), %ymm5, %ymm3
+ vfmadd213pd %ymm0, %ymm2, %ymm15
+ vfmadd213pd %ymm3, %ymm2, %ymm15
+ vfmadd213pd %ymm1, %ymm6, %ymm15
+ vaddpd %ymm15, %ymm7, %ymm1
+ vmovups -64(%rsp), %ymm15
+ cfi_restore(98)
+ vxorpd %ymm4, %ymm1, %ymm0
+ movq %rbp, %rsp
+ popq %rbp
+ cfi_def_cfa(7, 8)
+ cfi_restore(6)
+ ret
+
+END(_ZGVdN4v_atan_avx2)
+
+ .align 16,0x90
+
+__svml_datan_cout_rare_internal:
+
+ cfi_startproc
+
+ movzwl 6(%rdi), %r8d
+ andl $32752, %r8d
+ shrl $4, %r8d
+ cmpl $2047, %r8d
+ je .LBL_2_12
+ movq (%rdi), %rdx
+ movq %rdx, -16(%rsp)
+ shrq $56, %rdx
+ movb 7(%rdi), %al
+ andl $127, %edx
+ movb %dl, -9(%rsp)
+ movsd -16(%rsp), %xmm0
+ shrb $7, %al
+ comisd 1888+__datan_la_CoutTab(%rip), %xmm0
+ movl -12(%rsp), %ecx
+ jb .LBL_2_6
+ movsd 1896+__datan_la_CoutTab(%rip), %xmm1
+ comisd %xmm0, %xmm1
+ jbe .LBL_2_5
+ movl 4(%rdi), %edx
+ movl %ecx, %edi
+ andl $-524288, %ecx
+ andl $-1048576, %edi
+ addl $262144, %ecx
+ movaps %xmm0, %xmm9
+ andl $1048575, %ecx
+ movaps %xmm0, %xmm10
+ movsd %xmm0, -56(%rsp)
+ orl %ecx, %edi
+ movl $0, -56(%rsp)
+ andl $1048575, %edx
+ movl %edi, -52(%rsp)
+ lea __datan_la_CoutTab(%rip), %rcx
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm4
+ movsd -56(%rsp), %xmm15
+ shll $20, %r8d
+ subsd -56(%rsp), %xmm9
+ mulsd 1928+__datan_la_CoutTab(%rip), %xmm10
+ shlb $7, %al
+ mulsd %xmm9, %xmm4
+ movsd %xmm4, -48(%rsp)
+ orl %edx, %r8d
+ movsd -48(%rsp), %xmm5
+ addl $-1069547520, %r8d
+ sarl $18, %r8d
+ subsd %xmm9, %xmm5
+ movsd %xmm5, -40(%rsp)
+ andl $-2, %r8d
+ movsd -48(%rsp), %xmm7
+ movsd -40(%rsp), %xmm6
+ movslq %r8d, %r8
+ subsd %xmm6, %xmm7
+ movsd %xmm7, -48(%rsp)
+ movsd -48(%rsp), %xmm8
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm6
+ subsd %xmm8, %xmm9
+ movsd %xmm9, -40(%rsp)
+ movsd -48(%rsp), %xmm2
+ movsd -40(%rsp), %xmm3
+ movsd %xmm10, -48(%rsp)
+ movsd -48(%rsp), %xmm11
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm8
+ subsd -16(%rsp), %xmm11
+ movsd %xmm11, -40(%rsp)
+ movsd -48(%rsp), %xmm13
+ movsd -40(%rsp), %xmm12
+ subsd %xmm12, %xmm13
+ movsd %xmm13, -48(%rsp)
+ movsd -48(%rsp), %xmm14
+ subsd %xmm14, %xmm0
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm14
+ movsd %xmm0, -40(%rsp)
+ movsd -48(%rsp), %xmm5
+ movsd -40(%rsp), %xmm4
+ mulsd %xmm15, %xmm5
+ mulsd %xmm15, %xmm4
+ movaps %xmm5, %xmm1
+ addsd %xmm4, %xmm1
+ movsd %xmm1, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ subsd %xmm0, %xmm5
+ addsd %xmm4, %xmm5
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm4
+ movsd %xmm5, -40(%rsp)
+ movsd -48(%rsp), %xmm11
+ movsd -40(%rsp), %xmm1
+ addsd %xmm11, %xmm6
+ movsd %xmm6, -48(%rsp)
+ movsd -48(%rsp), %xmm7
+ subsd %xmm7, %xmm8
+ movsd %xmm8, -40(%rsp)
+ movsd -48(%rsp), %xmm10
+ movsd -40(%rsp), %xmm9
+ addsd %xmm9, %xmm10
+ movsd %xmm10, -32(%rsp)
+ movsd -40(%rsp), %xmm12
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm10
+ addsd %xmm11, %xmm12
+ movsd %xmm12, -40(%rsp)
+ movsd -32(%rsp), %xmm13
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm11
+ subsd %xmm13, %xmm14
+ movsd %xmm14, -32(%rsp)
+ movsd -40(%rsp), %xmm0
+ movsd -32(%rsp), %xmm15
+ addsd %xmm15, %xmm0
+ movsd %xmm0, -32(%rsp)
+ movsd -48(%rsp), %xmm9
+ mulsd %xmm9, %xmm4
+ movsd -32(%rsp), %xmm0
+ movsd %xmm4, -48(%rsp)
+ addsd %xmm1, %xmm0
+ movsd -48(%rsp), %xmm5
+ subsd %xmm9, %xmm5
+ movsd %xmm5, -40(%rsp)
+ movsd -48(%rsp), %xmm7
+ movsd -40(%rsp), %xmm6
+ subsd %xmm6, %xmm7
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm6
+ movsd %xmm7, -48(%rsp)
+ movsd -48(%rsp), %xmm8
+ subsd %xmm8, %xmm9
+ movsd %xmm9, -40(%rsp)
+ movsd -48(%rsp), %xmm4
+ divsd %xmm4, %xmm11
+ mulsd %xmm11, %xmm10
+ movsd -40(%rsp), %xmm5
+ movsd %xmm10, -40(%rsp)
+ addsd %xmm0, %xmm5
+ movsd -40(%rsp), %xmm12
+ subsd %xmm11, %xmm12
+ movsd %xmm12, -32(%rsp)
+ movsd -40(%rsp), %xmm10
+ movsd -32(%rsp), %xmm13
+ subsd %xmm13, %xmm10
+ movsd %xmm10, -32(%rsp)
+ movsd -32(%rsp), %xmm14
+ mulsd %xmm14, %xmm4
+ movsd -32(%rsp), %xmm15
+ subsd %xmm4, %xmm6
+ mulsd %xmm15, %xmm5
+ movsd %xmm5, -40(%rsp)
+ movsd -40(%rsp), %xmm1
+ subsd %xmm1, %xmm6
+ movsd %xmm6, -40(%rsp)
+ movsd -40(%rsp), %xmm4
+ movsd -32(%rsp), %xmm5
+ movsd -40(%rsp), %xmm0
+ movaps %xmm5, %xmm7
+ movsd -32(%rsp), %xmm1
+ mulsd %xmm3, %xmm5
+ addsd 1904+__datan_la_CoutTab(%rip), %xmm4
+ mulsd %xmm2, %xmm7
+ mulsd %xmm0, %xmm4
+ mulsd %xmm1, %xmm4
+ mulsd %xmm4, %xmm3
+ mulsd %xmm4, %xmm2
+ addsd %xmm3, %xmm5
+ movsd 1872+__datan_la_CoutTab(%rip), %xmm6
+ addsd %xmm2, %xmm5
+ movsd %xmm5, -48(%rsp)
+ movaps %xmm7, %xmm2
+ movsd -48(%rsp), %xmm4
+ addsd %xmm4, %xmm2
+ movsd %xmm2, -48(%rsp)
+ movsd -48(%rsp), %xmm3
+ movsd (%rcx,%r8,8), %xmm2
+ subsd %xmm3, %xmm7
+ addsd %xmm4, %xmm7
+ movsd %xmm7, -40(%rsp)
+ movsd -48(%rsp), %xmm3
+ movaps %xmm3, %xmm5
+ movaps %xmm3, %xmm0
+ mulsd %xmm3, %xmm5
+ addsd %xmm2, %xmm0
+ mulsd %xmm5, %xmm6
+ movsd -40(%rsp), %xmm10
+ movsd %xmm0, -48(%rsp)
+ movsd -48(%rsp), %xmm1
+ addsd 1864+__datan_la_CoutTab(%rip), %xmm6
+ subsd %xmm1, %xmm2
+ mulsd %xmm5, %xmm6
+ addsd %xmm3, %xmm2
+ addsd 1856+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ movsd %xmm2, -40(%rsp)
+ movsd -48(%rsp), %xmm9
+ movsd -40(%rsp), %xmm8
+ addsd 1848+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1840+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1832+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1824+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ mulsd %xmm3, %xmm6
+ addsd %xmm6, %xmm10
+ addsd 8(%rcx,%r8,8), %xmm10
+ addsd %xmm8, %xmm10
+ addsd %xmm9, %xmm10
+ movsd %xmm10, -24(%rsp)
+ movb -17(%rsp), %r9b
+ andb $127, %r9b
+ orb %al, %r9b
+ movb %r9b, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_5:
+ movsd 1912+__datan_la_CoutTab(%rip), %xmm0
+ shlb $7, %al
+ addsd 1920+__datan_la_CoutTab(%rip), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_6:
+ comisd 1880+__datan_la_CoutTab(%rip), %xmm0
+ jb .LBL_2_8
+ movaps %xmm0, %xmm1
+ mulsd %xmm0, %xmm1
+ shlb $7, %al
+ movsd 1872+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1864+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1856+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1848+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1840+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1832+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1824+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ mulsd %xmm0, %xmm2
+ addsd %xmm0, %xmm2
+ movsd %xmm2, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_8:
+ movzwl -10(%rsp), %edx
+ testl $32752, %edx
+ je .LBL_2_10
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm1
+ shlb $7, %al
+ addsd %xmm0, %xmm1
+ movsd %xmm1, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ mulsd -16(%rsp), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_10:
+ mulsd %xmm0, %xmm0
+ shlb $7, %al
+ movsd %xmm0, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ addsd -16(%rsp), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+
+.LBL_2_11:
+ xorl %eax, %eax
+ ret
+
+.LBL_2_12:
+ testl $1048575, 4(%rdi)
+ jne .LBL_2_15
+ cmpl $0, (%rdi)
+ jne .LBL_2_15
+ movsd 1912+__datan_la_CoutTab(%rip), %xmm0
+ movb 7(%rdi), %al
+ andb $-128, %al
+ addsd 1920+__datan_la_CoutTab(%rip), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rcx
+ movq %rcx, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_15:
+ movsd (%rdi), %xmm0
+ addsd %xmm0, %xmm0
+ movsd %xmm0, (%rsi)
+ jmp .LBL_2_11
+
+ cfi_endproc
+
+ .type __svml_datan_cout_rare_internal,@function
+ .size __svml_datan_cout_rare_internal,.-__svml_datan_cout_rare_internal
+
+ .section .rodata, "a"
+ .align 64
+
+__svml_datan_data_internal_avx512:
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 0
+ .long 0
+ .long 4180443357
+ .long 1070553973
+ .long 90291023
+ .long 1071492199
+ .long 2737217249
+ .long 1071945615
+ .long 1413754136
+ .long 1072243195
+ .long 1468297118
+ .long 1072475260
+ .long 3531732635
+ .long 1072657163
+ .long 744202399
+ .long 1072747407
+ .long 2464923204
+ .long 1072805601
+ .long 1436891685
+ .long 1072853231
+ .long 2037009832
+ .long 1072892781
+ .long 1826698067
+ .long 1072926058
+ .long 1803191648
+ .long 1072954391
+ .long 2205372832
+ .long 1072978772
+ .long 4234512805
+ .long 1072999952
+ .long 3932628503
+ .long 1073018509
+ .long 2501811453
+ .long 1073034892
+ .long 866379431
+ .long 1073049455
+ .long 1376865888
+ .long 1073062480
+ .long 3290094269
+ .long 1073074195
+ .long 354764887
+ .long 1073084787
+ .long 3332975497
+ .long 1073094406
+ .long 1141460092
+ .long 1073103181
+ .long 745761286
+ .long 1073111216
+ .long 1673304509
+ .long 1073118600
+ .long 983388243
+ .long 1073125409
+ .long 3895509104
+ .long 1073131706
+ .long 2128523669
+ .long 1073137548
+ .long 2075485693
+ .long 1073142981
+ .long 121855980
+ .long 1073148047
+ .long 4181733783
+ .long 1073152780
+ .long 2887813284
+ .long 1073157214
+ .long 0
+ .long 0
+ .long 1022865341
+ .long 1013492590
+ .long 573531618
+ .long 1014639487
+ .long 2280825944
+ .long 1014120858
+ .long 856972295
+ .long 1015129638
+ .long 986810987
+ .long 1015077601
+ .long 2062601149
+ .long 1013974920
+ .long 589036912
+ .long 3164328156
+ .long 1787331214
+ .long 1016798022
+ .long 2942272763
+ .long 3164235441
+ .long 2956702105
+ .long 1016472908
+ .long 3903328092
+ .long 3162582135
+ .long 3175026820
+ .long 3158589859
+ .long 787328196
+ .long 1014621351
+ .long 2317874517
+ .long 3163795518
+ .long 4071621134
+ .long 1016673529
+ .long 2492111345
+ .long 3164172103
+ .long 3606178875
+ .long 3162371821
+ .long 3365790232
+ .long 1014547152
+ .long 2710887773
+ .long 1017086651
+ .long 2755350986
+ .long 3162706257
+ .long 198095269
+ .long 3162802133
+ .long 2791076759
+ .long 3164364640
+ .long 4214434319
+ .long 3162164074
+ .long 773754012
+ .long 3164190653
+ .long 139561443
+ .long 3164313657
+ .long 2197796619
+ .long 3164066219
+ .long 3592486882
+ .long 1016669082
+ .long 1148791015
+ .long 3163724934
+ .long 386789398
+ .long 3163117479
+ .long 2518816264
+ .long 3162291736
+ .long 2545101323
+ .long 3164592727
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .type __svml_datan_data_internal_avx512,@object
+ .size __svml_datan_data_internal_avx512,1344
+ .align 32
+
+.FLT_15:
+ .long 0x00000078,0x00000000,0x00000078,0x00000000,0x00000078,0x00000000,0x00000078,0x00000000
+ .type .FLT_15,@object
+ .size .FLT_15,32
+ .align 32
+
+__datan_la_CoutTab:
+ .long 3892314112
+ .long 1069799150
+ .long 2332892550
+ .long 1039715405
+ .long 1342177280
+ .long 1070305495
+ .long 270726690
+ .long 1041535749
+ .long 939524096
+ .long 1070817911
+ .long 2253973841
+ .long 3188654726
+ .long 3221225472
+ .long 1071277294
+ .long 3853927037
+ .long 1043226911
+ .long 2818572288
+ .long 1071767563
+ .long 2677759107
+ .long 1044314101
+ .long 3355443200
+ .long 1072103591
+ .long 1636578514
+ .long 3191094734
+ .long 1476395008
+ .long 1072475260
+ .long 1864703685
+ .long 3188646936
+ .long 805306368
+ .long 1072747407
+ .long 192551812
+ .long 3192726267
+ .long 2013265920
+ .long 1072892781
+ .long 2240369452
+ .long 1043768538
+ .long 0
+ .long 1072999953
+ .long 3665168337
+ .long 3192705970
+ .long 402653184
+ .long 1073084787
+ .long 1227953434
+ .long 3192313277
+ .long 2013265920
+ .long 1073142981
+ .long 3853283127
+ .long 1045277487
+ .long 805306368
+ .long 1073187261
+ .long 1676192264
+ .long 3192868861
+ .long 134217728
+ .long 1073217000
+ .long 4290763938
+ .long 1042034855
+ .long 671088640
+ .long 1073239386
+ .long 994303084
+ .long 3189643768
+ .long 402653184
+ .long 1073254338
+ .long 1878067156
+ .long 1042652475
+ .long 1610612736
+ .long 1073265562
+ .long 670314820
+ .long 1045138554
+ .long 3221225472
+ .long 1073273048
+ .long 691126919
+ .long 3189987794
+ .long 3489660928
+ .long 1073278664
+ .long 1618990832
+ .long 3188194509
+ .long 1207959552
+ .long 1073282409
+ .long 2198872939
+ .long 1044806069
+ .long 3489660928
+ .long 1073285217
+ .long 2633982383
+ .long 1042307894
+ .long 939524096
+ .long 1073287090
+ .long 1059367786
+ .long 3189114230
+ .long 2281701376
+ .long 1073288494
+ .long 3158525533
+ .long 1044484961
+ .long 3221225472
+ .long 1073289430
+ .long 286581777
+ .long 1044893263
+ .long 4026531840
+ .long 1073290132
+ .long 2000245215
+ .long 3191647611
+ .long 134217728
+ .long 1073290601
+ .long 4205071590
+ .long 1045035927
+ .long 536870912
+ .long 1073290952
+ .long 2334392229
+ .long 1043447393
+ .long 805306368
+ .long 1073291186
+ .long 2281458177
+ .long 3188885569
+ .long 3087007744
+ .long 1073291361
+ .long 691611507
+ .long 1044733832
+ .long 3221225472
+ .long 1073291478
+ .long 1816229550
+ .long 1044363390
+ .long 2281701376
+ .long 1073291566
+ .long 1993843750
+ .long 3189837440
+ .long 134217728
+ .long 1073291625
+ .long 3654754496
+ .long 1044970837
+ .long 4026531840
+ .long 1073291668
+ .long 3224300229
+ .long 3191935390
+ .long 805306368
+ .long 1073291698
+ .long 2988777976
+ .long 3188950659
+ .long 536870912
+ .long 1073291720
+ .long 1030371341
+ .long 1043402665
+ .long 3221225472
+ .long 1073291734
+ .long 1524463765
+ .long 1044361356
+ .long 3087007744
+ .long 1073291745
+ .long 2754295320
+ .long 1044731036
+ .long 134217728
+ .long 1073291753
+ .long 3099629057
+ .long 1044970710
+ .long 2281701376
+ .long 1073291758
+ .long 962914160
+ .long 3189838838
+ .long 805306368
+ .long 1073291762
+ .long 3543908206
+ .long 3188950786
+ .long 4026531840
+ .long 1073291764
+ .long 1849909620
+ .long 3191935434
+ .long 3221225472
+ .long 1073291766
+ .long 1641333636
+ .long 1044361352
+ .long 536870912
+ .long 1073291768
+ .long 1373968792
+ .long 1043402654
+ .long 134217728
+ .long 1073291769
+ .long 2033191599
+ .long 1044970710
+ .long 3087007744
+ .long 1073291769
+ .long 4117947437
+ .long 1044731035
+ .long 805306368
+ .long 1073291770
+ .long 315378368
+ .long 3188950787
+ .long 2281701376
+ .long 1073291770
+ .long 2428571750
+ .long 3189838838
+ .long 3221225472
+ .long 1073291770
+ .long 1608007466
+ .long 1044361352
+ .long 4026531840
+ .long 1073291770
+ .long 1895711420
+ .long 3191935434
+ .long 134217728
+ .long 1073291771
+ .long 2031108713
+ .long 1044970710
+ .long 536870912
+ .long 1073291771
+ .long 1362518342
+ .long 1043402654
+ .long 805306368
+ .long 1073291771
+ .long 317461253
+ .long 3188950787
+ .long 939524096
+ .long 1073291771
+ .long 4117231784
+ .long 1044731035
+ .long 1073741824
+ .long 1073291771
+ .long 1607942376
+ .long 1044361352
+ .long 1207959552
+ .long 1073291771
+ .long 2428929577
+ .long 3189838838
+ .long 1207959552
+ .long 1073291771
+ .long 2031104645
+ .long 1044970710
+ .long 1342177280
+ .long 1073291771
+ .long 1895722602
+ .long 3191935434
+ .long 1342177280
+ .long 1073291771
+ .long 317465322
+ .long 3188950787
+ .long 1342177280
+ .long 1073291771
+ .long 1362515546
+ .long 1043402654
+ .long 1342177280
+ .long 1073291771
+ .long 1607942248
+ .long 1044361352
+ .long 1342177280
+ .long 1073291771
+ .long 4117231610
+ .long 1044731035
+ .long 1342177280
+ .long 1073291771
+ .long 2031104637
+ .long 1044970710
+ .long 1342177280
+ .long 1073291771
+ .long 1540251232
+ .long 1045150466
+ .long 1342177280
+ .long 1073291771
+ .long 2644671394
+ .long 1045270303
+ .long 1342177280
+ .long 1073291771
+ .long 2399244691
+ .long 1045360181
+ .long 1342177280
+ .long 1073291771
+ .long 803971124
+ .long 1045420100
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192879152
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192849193
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192826724
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192811744
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192800509
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192793019
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192787402
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192783657
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192780848
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192778976
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192777572
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192776635
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192775933
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192775465
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192775114
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774880
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774704
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774587
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774500
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774441
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774397
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774368
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774346
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774331
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774320
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774313
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774308
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774304
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774301
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774299
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774298
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774297
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1466225875
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1343512524
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1251477510
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1190120835
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1144103328
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1113424990
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1090416237
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1075077068
+ .long 3192774295
+ .long 1431655765
+ .long 3218429269
+ .long 2576978363
+ .long 1070176665
+ .long 2453154343
+ .long 3217180964
+ .long 4189149139
+ .long 1069314502
+ .long 1775019125
+ .long 3216459198
+ .long 273199057
+ .long 1068739452
+ .long 874748308
+ .long 3215993277
+ .long 0
+ .long 1017118720
+ .long 0
+ .long 1069547520
+ .long 0
+ .long 1129316352
+ .long 0
+ .long 1072693248
+ .long 1413754136
+ .long 1073291771
+ .long 856972295
+ .long 1016178214
+ .long 33554432
+ .long 1101004800
+ .type __datan_la_CoutTab,@object
+ .size __datan_la_CoutTab,1936
new file mode 100644
@@ -0,0 +1,20 @@
+/* AVX2 version of vectorized atan, vector length is 8.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define _ZGVeN8v_atan _ZGVeN8v_atan_avx2_wrapper
+#include "../svml_d_atan8_core.S"
new file mode 100644
@@ -0,0 +1,27 @@
+/* Multiple versions of vectorized atan, vector length is 8.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define SYMBOL_NAME _ZGVeN8v_atan
+#include "ifunc-mathvec-avx512-skx.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN8v_atan, __GI__ZGVeN8v_atan, __redirect__ZGVeN8v_atan)
+ __attribute__ ((visibility ("hidden")));
+#endif
new file mode 100644
@@ -0,0 +1,1323 @@
+/* Function atan vectorized with AVX-512.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ https://www.gnu.org/licenses/. */
+
+/*
+ * ALGORITHM DESCRIPTION:
+ *
+ * For 0.0 <= x <= 7.0/16.0: atan(x) = atan(0.0) + atan(s), where s=(x-0.0)/(1.0+0.0*x)
+ * For 7.0/16.0 <= x <= 11.0/16.0: atan(x) = atan(0.5) + atan(s), where s=(x-0.5)/(1.0+0.5*x)
+ * For 11.0/16.0 <= x <= 19.0/16.0: atan(x) = atan(1.0) + atan(s), where s=(x-1.0)/(1.0+1.0*x)
+ * For 19.0/16.0 <= x <= 39.0/16.0: atan(x) = atan(1.5) + atan(s), where s=(x-1.5)/(1.0+1.5*x)
+ * For 39.0/16.0 <= x <= inf : atan(x) = atan(inf) + atan(s), where s=-1.0/x
+ * Where atan(s) ~= s+s^3*Poly11(s^2) on interval |s|<7.0/0.16.
+ *
+ */
+
+#include <sysdep.h>
+
+ .text
+ENTRY(_ZGVeN8v_atan_skx)
+ vmovups 64+__svml_datan_data_internal_avx512(%rip), %zmm4
+ vmovups 128+__svml_datan_data_internal_avx512(%rip), %zmm3
+ vmovups 256+__svml_datan_data_internal_avx512(%rip), %zmm9
+
+/* saturate X range */
+ vmovups 320+__svml_datan_data_internal_avx512(%rip), %zmm7
+ vandpd __svml_datan_data_internal_avx512(%rip), %zmm0, %zmm8
+
+/* R+Rl = DiffX/Y */
+ vbroadcastsd .FLT_14(%rip), %zmm15
+ vaddpd {rn-sae}, %zmm4, %zmm8, %zmm2
+ vxorpd %zmm0, %zmm8, %zmm1
+ vcmppd $29, {sae}, %zmm3, %zmm8, %k2
+
+/* round to 2 bits after binary point */
+ vreducepd $40, {sae}, %zmm8, %zmm6
+ vsubpd {rn-sae}, %zmm4, %zmm2, %zmm5
+
+/*
+ * if|X|>=MaxThreshold, set DiffX=-1
+ * VMSUB(D, DiffX, LargeMask, Zero, One);
+ */
+ vblendmpd 192+__svml_datan_data_internal_avx512(%rip), %zmm6, %zmm10{%k2}
+ vfmadd231pd {rn-sae}, %zmm8, %zmm5, %zmm9
+ vmovups 960+__svml_datan_data_internal_avx512(%rip), %zmm5
+
+/* table lookup sequence */
+ vmovups 448+__svml_datan_data_internal_avx512(%rip), %zmm6
+ vgetmantpd $0, {sae}, %zmm10, %zmm14
+ vgetexppd {sae}, %zmm10, %zmm11
+ vmovups 1408+__svml_datan_data_internal_avx512(%rip), %zmm10
+
+/*
+ * if|X|>=MaxThreshold, set Y=X
+ * VMADD(D, Y, LargeMask, X, Zero);
+ */
+ vminpd {sae}, %zmm8, %zmm7, %zmm9{%k2}
+ vcmppd $29, {sae}, %zmm5, %zmm2, %k1
+ vmovups 576+__svml_datan_data_internal_avx512(%rip), %zmm7
+ vmovups 1152+__svml_datan_data_internal_avx512(%rip), %zmm8
+ vgetmantpd $0, {sae}, %zmm9, %zmm3
+ vgetexppd {sae}, %zmm9, %zmm12
+ vmovups 1280+__svml_datan_data_internal_avx512(%rip), %zmm9
+ vpermt2pd 512+__svml_datan_data_internal_avx512(%rip), %zmm2, %zmm6
+ vsubpd {rn-sae}, %zmm12, %zmm11, %zmm4
+ vpermt2pd 640+__svml_datan_data_internal_avx512(%rip), %zmm2, %zmm7
+ vrcp14pd %zmm3, %zmm13
+ vmovups 1344+__svml_datan_data_internal_avx512(%rip), %zmm12
+ vmovups 1472+__svml_datan_data_internal_avx512(%rip), %zmm11
+ vblendmpd %zmm7, %zmm6, %zmm2{%k1}
+ vmulpd {rn-sae}, %zmm13, %zmm14, %zmm0
+ vfnmadd231pd {rn-sae}, %zmm3, %zmm13, %zmm15
+ vfnmadd213pd {rn-sae}, %zmm14, %zmm0, %zmm3
+ vfmadd213pd {rn-sae}, %zmm15, %zmm15, %zmm15
+ vfmadd213pd {rn-sae}, %zmm13, %zmm13, %zmm15
+ vfmadd213pd {rn-sae}, %zmm0, %zmm15, %zmm3
+ vscalefpd {rn-sae}, %zmm4, %zmm3, %zmm0
+
+/* set table value to Pi/2 for large X */
+ vblendmpd 1024+__svml_datan_data_internal_avx512(%rip), %zmm2, %zmm3{%k2}
+ vmovups 1216+__svml_datan_data_internal_avx512(%rip), %zmm2
+
+/* polynomial evaluation */
+ vmulpd {rn-sae}, %zmm0, %zmm0, %zmm14
+ vmulpd {rn-sae}, %zmm14, %zmm14, %zmm13
+ vmulpd {rn-sae}, %zmm0, %zmm14, %zmm15
+ vfmadd231pd {rn-sae}, %zmm14, %zmm8, %zmm2
+ vfmadd231pd {rn-sae}, %zmm14, %zmm9, %zmm12
+ vfmadd213pd {rn-sae}, %zmm11, %zmm10, %zmm14
+ vfmadd213pd {rn-sae}, %zmm12, %zmm13, %zmm2
+ vfmadd213pd {rn-sae}, %zmm14, %zmm13, %zmm2
+ vfmadd213pd {rn-sae}, %zmm0, %zmm15, %zmm2
+ vaddpd {rn-sae}, %zmm3, %zmm2, %zmm0
+ vxorpd %zmm1, %zmm0, %zmm0
+ ret
+
+END(_ZGVeN8v_atan_skx)
+
+ .align 16,0x90
+
+__svml_datan_cout_rare_internal:
+
+ cfi_startproc
+
+ movzwl 6(%rdi), %r8d
+ andl $32752, %r8d
+ shrl $4, %r8d
+ cmpl $2047, %r8d
+ je .LBL_2_12
+ movq (%rdi), %rdx
+ movq %rdx, -16(%rsp)
+ shrq $56, %rdx
+ movb 7(%rdi), %al
+ andl $127, %edx
+ movb %dl, -9(%rsp)
+ movsd -16(%rsp), %xmm0
+ shrb $7, %al
+ comisd 1888+__datan_la_CoutTab(%rip), %xmm0
+ movl -12(%rsp), %ecx
+ jb .LBL_2_6
+ movsd 1896+__datan_la_CoutTab(%rip), %xmm1
+ comisd %xmm0, %xmm1
+ jbe .LBL_2_5
+ movl 4(%rdi), %edx
+ movl %ecx, %edi
+ andl $-524288, %ecx
+ andl $-1048576, %edi
+ addl $262144, %ecx
+ movaps %xmm0, %xmm9
+ andl $1048575, %ecx
+ movaps %xmm0, %xmm10
+ movsd %xmm0, -56(%rsp)
+ orl %ecx, %edi
+ movl $0, -56(%rsp)
+ andl $1048575, %edx
+ movl %edi, -52(%rsp)
+ lea __datan_la_CoutTab(%rip), %rcx
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm4
+ movsd -56(%rsp), %xmm15
+ shll $20, %r8d
+ subsd -56(%rsp), %xmm9
+ mulsd 1928+__datan_la_CoutTab(%rip), %xmm10
+ shlb $7, %al
+ mulsd %xmm9, %xmm4
+ movsd %xmm4, -48(%rsp)
+ orl %edx, %r8d
+ movsd -48(%rsp), %xmm5
+ addl $-1069547520, %r8d
+ sarl $18, %r8d
+ subsd %xmm9, %xmm5
+ movsd %xmm5, -40(%rsp)
+ andl $-2, %r8d
+ movsd -48(%rsp), %xmm7
+ movsd -40(%rsp), %xmm6
+ movslq %r8d, %r8
+ subsd %xmm6, %xmm7
+ movsd %xmm7, -48(%rsp)
+ movsd -48(%rsp), %xmm8
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm6
+ subsd %xmm8, %xmm9
+ movsd %xmm9, -40(%rsp)
+ movsd -48(%rsp), %xmm2
+ movsd -40(%rsp), %xmm3
+ movsd %xmm10, -48(%rsp)
+ movsd -48(%rsp), %xmm11
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm8
+ subsd -16(%rsp), %xmm11
+ movsd %xmm11, -40(%rsp)
+ movsd -48(%rsp), %xmm13
+ movsd -40(%rsp), %xmm12
+ subsd %xmm12, %xmm13
+ movsd %xmm13, -48(%rsp)
+ movsd -48(%rsp), %xmm14
+ subsd %xmm14, %xmm0
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm14
+ movsd %xmm0, -40(%rsp)
+ movsd -48(%rsp), %xmm5
+ movsd -40(%rsp), %xmm4
+ mulsd %xmm15, %xmm5
+ mulsd %xmm15, %xmm4
+ movaps %xmm5, %xmm1
+ addsd %xmm4, %xmm1
+ movsd %xmm1, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ subsd %xmm0, %xmm5
+ addsd %xmm4, %xmm5
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm4
+ movsd %xmm5, -40(%rsp)
+ movsd -48(%rsp), %xmm11
+ movsd -40(%rsp), %xmm1
+ addsd %xmm11, %xmm6
+ movsd %xmm6, -48(%rsp)
+ movsd -48(%rsp), %xmm7
+ subsd %xmm7, %xmm8
+ movsd %xmm8, -40(%rsp)
+ movsd -48(%rsp), %xmm10
+ movsd -40(%rsp), %xmm9
+ addsd %xmm9, %xmm10
+ movsd %xmm10, -32(%rsp)
+ movsd -40(%rsp), %xmm12
+ movsd 1928+__datan_la_CoutTab(%rip), %xmm10
+ addsd %xmm11, %xmm12
+ movsd %xmm12, -40(%rsp)
+ movsd -32(%rsp), %xmm13
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm11
+ subsd %xmm13, %xmm14
+ movsd %xmm14, -32(%rsp)
+ movsd -40(%rsp), %xmm0
+ movsd -32(%rsp), %xmm15
+ addsd %xmm15, %xmm0
+ movsd %xmm0, -32(%rsp)
+ movsd -48(%rsp), %xmm9
+ mulsd %xmm9, %xmm4
+ movsd -32(%rsp), %xmm0
+ movsd %xmm4, -48(%rsp)
+ addsd %xmm1, %xmm0
+ movsd -48(%rsp), %xmm5
+ subsd %xmm9, %xmm5
+ movsd %xmm5, -40(%rsp)
+ movsd -48(%rsp), %xmm7
+ movsd -40(%rsp), %xmm6
+ subsd %xmm6, %xmm7
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm6
+ movsd %xmm7, -48(%rsp)
+ movsd -48(%rsp), %xmm8
+ subsd %xmm8, %xmm9
+ movsd %xmm9, -40(%rsp)
+ movsd -48(%rsp), %xmm4
+ divsd %xmm4, %xmm11
+ mulsd %xmm11, %xmm10
+ movsd -40(%rsp), %xmm5
+ movsd %xmm10, -40(%rsp)
+ addsd %xmm0, %xmm5
+ movsd -40(%rsp), %xmm12
+ subsd %xmm11, %xmm12
+ movsd %xmm12, -32(%rsp)
+ movsd -40(%rsp), %xmm10
+ movsd -32(%rsp), %xmm13
+ subsd %xmm13, %xmm10
+ movsd %xmm10, -32(%rsp)
+ movsd -32(%rsp), %xmm14
+ mulsd %xmm14, %xmm4
+ movsd -32(%rsp), %xmm15
+ subsd %xmm4, %xmm6
+ mulsd %xmm15, %xmm5
+ movsd %xmm5, -40(%rsp)
+ movsd -40(%rsp), %xmm1
+ subsd %xmm1, %xmm6
+ movsd %xmm6, -40(%rsp)
+ movsd -40(%rsp), %xmm4
+ movsd -32(%rsp), %xmm5
+ movsd -40(%rsp), %xmm0
+ movaps %xmm5, %xmm7
+ movsd -32(%rsp), %xmm1
+ mulsd %xmm3, %xmm5
+ addsd 1904+__datan_la_CoutTab(%rip), %xmm4
+ mulsd %xmm2, %xmm7
+ mulsd %xmm0, %xmm4
+ mulsd %xmm1, %xmm4
+ mulsd %xmm4, %xmm3
+ mulsd %xmm4, %xmm2
+ addsd %xmm3, %xmm5
+ movsd 1872+__datan_la_CoutTab(%rip), %xmm6
+ addsd %xmm2, %xmm5
+ movsd %xmm5, -48(%rsp)
+ movaps %xmm7, %xmm2
+ movsd -48(%rsp), %xmm4
+ addsd %xmm4, %xmm2
+ movsd %xmm2, -48(%rsp)
+ movsd -48(%rsp), %xmm3
+ movsd (%rcx,%r8,8), %xmm2
+ subsd %xmm3, %xmm7
+ addsd %xmm4, %xmm7
+ movsd %xmm7, -40(%rsp)
+ movsd -48(%rsp), %xmm3
+ movaps %xmm3, %xmm5
+ movaps %xmm3, %xmm0
+ mulsd %xmm3, %xmm5
+ addsd %xmm2, %xmm0
+ mulsd %xmm5, %xmm6
+ movsd -40(%rsp), %xmm10
+ movsd %xmm0, -48(%rsp)
+ movsd -48(%rsp), %xmm1
+ addsd 1864+__datan_la_CoutTab(%rip), %xmm6
+ subsd %xmm1, %xmm2
+ mulsd %xmm5, %xmm6
+ addsd %xmm3, %xmm2
+ addsd 1856+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ movsd %xmm2, -40(%rsp)
+ movsd -48(%rsp), %xmm9
+ movsd -40(%rsp), %xmm8
+ addsd 1848+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1840+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1832+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ addsd 1824+__datan_la_CoutTab(%rip), %xmm6
+ mulsd %xmm5, %xmm6
+ mulsd %xmm3, %xmm6
+ addsd %xmm6, %xmm10
+ addsd 8(%rcx,%r8,8), %xmm10
+ addsd %xmm8, %xmm10
+ addsd %xmm9, %xmm10
+ movsd %xmm10, -24(%rsp)
+ movb -17(%rsp), %r9b
+ andb $127, %r9b
+ orb %al, %r9b
+ movb %r9b, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_5:
+ movsd 1912+__datan_la_CoutTab(%rip), %xmm0
+ shlb $7, %al
+ addsd 1920+__datan_la_CoutTab(%rip), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_6:
+ comisd 1880+__datan_la_CoutTab(%rip), %xmm0
+ jb .LBL_2_8
+ movaps %xmm0, %xmm1
+ mulsd %xmm0, %xmm1
+ shlb $7, %al
+ movsd 1872+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1864+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1856+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1848+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1840+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1832+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ addsd 1824+__datan_la_CoutTab(%rip), %xmm2
+ mulsd %xmm1, %xmm2
+ mulsd %xmm0, %xmm2
+ addsd %xmm0, %xmm2
+ movsd %xmm2, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_8:
+ movzwl -10(%rsp), %edx
+ testl $32752, %edx
+ je .LBL_2_10
+ movsd 1904+__datan_la_CoutTab(%rip), %xmm1
+ shlb $7, %al
+ addsd %xmm0, %xmm1
+ movsd %xmm1, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ mulsd -16(%rsp), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_10:
+ mulsd %xmm0, %xmm0
+ shlb $7, %al
+ movsd %xmm0, -48(%rsp)
+ movsd -48(%rsp), %xmm0
+ addsd -16(%rsp), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rax
+ movq %rax, (%rsi)
+
+.LBL_2_11:
+ xorl %eax, %eax
+ ret
+
+.LBL_2_12:
+ testl $1048575, 4(%rdi)
+ jne .LBL_2_15
+ cmpl $0, (%rdi)
+ jne .LBL_2_15
+ movsd 1912+__datan_la_CoutTab(%rip), %xmm0
+ movb 7(%rdi), %al
+ andb $-128, %al
+ addsd 1920+__datan_la_CoutTab(%rip), %xmm0
+ movsd %xmm0, -24(%rsp)
+ movb -17(%rsp), %dl
+ andb $127, %dl
+ orb %al, %dl
+ movb %dl, -17(%rsp)
+ movq -24(%rsp), %rcx
+ movq %rcx, (%rsi)
+ jmp .LBL_2_11
+
+.LBL_2_15:
+ movsd (%rdi), %xmm0
+ addsd %xmm0, %xmm0
+ movsd %xmm0, (%rsi)
+ jmp .LBL_2_11
+
+ cfi_endproc
+
+ .type __svml_datan_cout_rare_internal,@function
+ .size __svml_datan_cout_rare_internal,.-__svml_datan_cout_rare_internal
+
+ .section .rodata, "a"
+ .align 64
+
+__svml_datan_data_internal_avx512:
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 4294967295
+ .long 2147483647
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1125646336
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 1075806208
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 3220176896
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1072693248
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 1206910976
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 4180443357
+ .long 1070553973
+ .long 90291023
+ .long 1071492199
+ .long 2737217249
+ .long 1071945615
+ .long 1413754136
+ .long 1072243195
+ .long 1468297118
+ .long 1072475260
+ .long 3531732635
+ .long 1072657163
+ .long 744202399
+ .long 1072747407
+ .long 2464923204
+ .long 1072805601
+ .long 1436891685
+ .long 1072853231
+ .long 2037009832
+ .long 1072892781
+ .long 1826698067
+ .long 1072926058
+ .long 1803191648
+ .long 1072954391
+ .long 2205372832
+ .long 1072978772
+ .long 4234512805
+ .long 1072999952
+ .long 3932628503
+ .long 1073018509
+ .long 2501811453
+ .long 1073034892
+ .long 866379431
+ .long 1073049455
+ .long 1376865888
+ .long 1073062480
+ .long 3290094269
+ .long 1073074195
+ .long 354764887
+ .long 1073084787
+ .long 3332975497
+ .long 1073094406
+ .long 1141460092
+ .long 1073103181
+ .long 745761286
+ .long 1073111216
+ .long 1673304509
+ .long 1073118600
+ .long 983388243
+ .long 1073125409
+ .long 3895509104
+ .long 1073131706
+ .long 2128523669
+ .long 1073137548
+ .long 2075485693
+ .long 1073142981
+ .long 121855980
+ .long 1073148047
+ .long 4181733783
+ .long 1073152780
+ .long 2887813284
+ .long 1073157214
+ .long 0
+ .long 0
+ .long 1022865341
+ .long 1013492590
+ .long 573531618
+ .long 1014639487
+ .long 2280825944
+ .long 1014120858
+ .long 856972295
+ .long 1015129638
+ .long 986810987
+ .long 1015077601
+ .long 2062601149
+ .long 1013974920
+ .long 589036912
+ .long 3164328156
+ .long 1787331214
+ .long 1016798022
+ .long 2942272763
+ .long 3164235441
+ .long 2956702105
+ .long 1016472908
+ .long 3903328092
+ .long 3162582135
+ .long 3175026820
+ .long 3158589859
+ .long 787328196
+ .long 1014621351
+ .long 2317874517
+ .long 3163795518
+ .long 4071621134
+ .long 1016673529
+ .long 2492111345
+ .long 3164172103
+ .long 3606178875
+ .long 3162371821
+ .long 3365790232
+ .long 1014547152
+ .long 2710887773
+ .long 1017086651
+ .long 2755350986
+ .long 3162706257
+ .long 198095269
+ .long 3162802133
+ .long 2791076759
+ .long 3164364640
+ .long 4214434319
+ .long 3162164074
+ .long 773754012
+ .long 3164190653
+ .long 139561443
+ .long 3164313657
+ .long 2197796619
+ .long 3164066219
+ .long 3592486882
+ .long 1016669082
+ .long 1148791015
+ .long 3163724934
+ .long 386789398
+ .long 3163117479
+ .long 2518816264
+ .long 3162291736
+ .long 2545101323
+ .long 3164592727
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 16
+ .long 1125646336
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 1413754136
+ .long 1073291771
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 856972295
+ .long 1016178214
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 4123328151
+ .long 1068689849
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 3295121612
+ .long 3216458327
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 4026078880
+ .long 1069314495
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2398029018
+ .long 3217180964
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 2576905246
+ .long 1070176665
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .long 1431655757
+ .long 3218429269
+ .type __svml_datan_data_internal_avx512,@object
+ .size __svml_datan_data_internal_avx512,1536
+ .align 32
+
+__datan_la_CoutTab:
+ .long 3892314112
+ .long 1069799150
+ .long 2332892550
+ .long 1039715405
+ .long 1342177280
+ .long 1070305495
+ .long 270726690
+ .long 1041535749
+ .long 939524096
+ .long 1070817911
+ .long 2253973841
+ .long 3188654726
+ .long 3221225472
+ .long 1071277294
+ .long 3853927037
+ .long 1043226911
+ .long 2818572288
+ .long 1071767563
+ .long 2677759107
+ .long 1044314101
+ .long 3355443200
+ .long 1072103591
+ .long 1636578514
+ .long 3191094734
+ .long 1476395008
+ .long 1072475260
+ .long 1864703685
+ .long 3188646936
+ .long 805306368
+ .long 1072747407
+ .long 192551812
+ .long 3192726267
+ .long 2013265920
+ .long 1072892781
+ .long 2240369452
+ .long 1043768538
+ .long 0
+ .long 1072999953
+ .long 3665168337
+ .long 3192705970
+ .long 402653184
+ .long 1073084787
+ .long 1227953434
+ .long 3192313277
+ .long 2013265920
+ .long 1073142981
+ .long 3853283127
+ .long 1045277487
+ .long 805306368
+ .long 1073187261
+ .long 1676192264
+ .long 3192868861
+ .long 134217728
+ .long 1073217000
+ .long 4290763938
+ .long 1042034855
+ .long 671088640
+ .long 1073239386
+ .long 994303084
+ .long 3189643768
+ .long 402653184
+ .long 1073254338
+ .long 1878067156
+ .long 1042652475
+ .long 1610612736
+ .long 1073265562
+ .long 670314820
+ .long 1045138554
+ .long 3221225472
+ .long 1073273048
+ .long 691126919
+ .long 3189987794
+ .long 3489660928
+ .long 1073278664
+ .long 1618990832
+ .long 3188194509
+ .long 1207959552
+ .long 1073282409
+ .long 2198872939
+ .long 1044806069
+ .long 3489660928
+ .long 1073285217
+ .long 2633982383
+ .long 1042307894
+ .long 939524096
+ .long 1073287090
+ .long 1059367786
+ .long 3189114230
+ .long 2281701376
+ .long 1073288494
+ .long 3158525533
+ .long 1044484961
+ .long 3221225472
+ .long 1073289430
+ .long 286581777
+ .long 1044893263
+ .long 4026531840
+ .long 1073290132
+ .long 2000245215
+ .long 3191647611
+ .long 134217728
+ .long 1073290601
+ .long 4205071590
+ .long 1045035927
+ .long 536870912
+ .long 1073290952
+ .long 2334392229
+ .long 1043447393
+ .long 805306368
+ .long 1073291186
+ .long 2281458177
+ .long 3188885569
+ .long 3087007744
+ .long 1073291361
+ .long 691611507
+ .long 1044733832
+ .long 3221225472
+ .long 1073291478
+ .long 1816229550
+ .long 1044363390
+ .long 2281701376
+ .long 1073291566
+ .long 1993843750
+ .long 3189837440
+ .long 134217728
+ .long 1073291625
+ .long 3654754496
+ .long 1044970837
+ .long 4026531840
+ .long 1073291668
+ .long 3224300229
+ .long 3191935390
+ .long 805306368
+ .long 1073291698
+ .long 2988777976
+ .long 3188950659
+ .long 536870912
+ .long 1073291720
+ .long 1030371341
+ .long 1043402665
+ .long 3221225472
+ .long 1073291734
+ .long 1524463765
+ .long 1044361356
+ .long 3087007744
+ .long 1073291745
+ .long 2754295320
+ .long 1044731036
+ .long 134217728
+ .long 1073291753
+ .long 3099629057
+ .long 1044970710
+ .long 2281701376
+ .long 1073291758
+ .long 962914160
+ .long 3189838838
+ .long 805306368
+ .long 1073291762
+ .long 3543908206
+ .long 3188950786
+ .long 4026531840
+ .long 1073291764
+ .long 1849909620
+ .long 3191935434
+ .long 3221225472
+ .long 1073291766
+ .long 1641333636
+ .long 1044361352
+ .long 536870912
+ .long 1073291768
+ .long 1373968792
+ .long 1043402654
+ .long 134217728
+ .long 1073291769
+ .long 2033191599
+ .long 1044970710
+ .long 3087007744
+ .long 1073291769
+ .long 4117947437
+ .long 1044731035
+ .long 805306368
+ .long 1073291770
+ .long 315378368
+ .long 3188950787
+ .long 2281701376
+ .long 1073291770
+ .long 2428571750
+ .long 3189838838
+ .long 3221225472
+ .long 1073291770
+ .long 1608007466
+ .long 1044361352
+ .long 4026531840
+ .long 1073291770
+ .long 1895711420
+ .long 3191935434
+ .long 134217728
+ .long 1073291771
+ .long 2031108713
+ .long 1044970710
+ .long 536870912
+ .long 1073291771
+ .long 1362518342
+ .long 1043402654
+ .long 805306368
+ .long 1073291771
+ .long 317461253
+ .long 3188950787
+ .long 939524096
+ .long 1073291771
+ .long 4117231784
+ .long 1044731035
+ .long 1073741824
+ .long 1073291771
+ .long 1607942376
+ .long 1044361352
+ .long 1207959552
+ .long 1073291771
+ .long 2428929577
+ .long 3189838838
+ .long 1207959552
+ .long 1073291771
+ .long 2031104645
+ .long 1044970710
+ .long 1342177280
+ .long 1073291771
+ .long 1895722602
+ .long 3191935434
+ .long 1342177280
+ .long 1073291771
+ .long 317465322
+ .long 3188950787
+ .long 1342177280
+ .long 1073291771
+ .long 1362515546
+ .long 1043402654
+ .long 1342177280
+ .long 1073291771
+ .long 1607942248
+ .long 1044361352
+ .long 1342177280
+ .long 1073291771
+ .long 4117231610
+ .long 1044731035
+ .long 1342177280
+ .long 1073291771
+ .long 2031104637
+ .long 1044970710
+ .long 1342177280
+ .long 1073291771
+ .long 1540251232
+ .long 1045150466
+ .long 1342177280
+ .long 1073291771
+ .long 2644671394
+ .long 1045270303
+ .long 1342177280
+ .long 1073291771
+ .long 2399244691
+ .long 1045360181
+ .long 1342177280
+ .long 1073291771
+ .long 803971124
+ .long 1045420100
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192879152
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192849193
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192826724
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192811744
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192800509
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192793019
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192787402
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192783657
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192780848
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192778976
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192777572
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192776635
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192775933
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192775465
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192775114
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774880
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774704
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774587
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774500
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774441
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774397
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774368
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774346
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774331
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774320
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774313
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774308
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774304
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774301
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774299
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774298
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774297
+ .long 1476395008
+ .long 1073291771
+ .long 3613709523
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 177735686
+ .long 3192774296
+ .long 1476395008
+ .long 1073291771
+ .long 3490996172
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 2754716064
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 2263862659
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1895722605
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1650295902
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1466225875
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1343512524
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1251477510
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1190120835
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1144103328
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1113424990
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1090416237
+ .long 3192774295
+ .long 1476395008
+ .long 1073291771
+ .long 1075077068
+ .long 3192774295
+ .long 1431655765
+ .long 3218429269
+ .long 2576978363
+ .long 1070176665
+ .long 2453154343
+ .long 3217180964
+ .long 4189149139
+ .long 1069314502
+ .long 1775019125
+ .long 3216459198
+ .long 273199057
+ .long 1068739452
+ .long 874748308
+ .long 3215993277
+ .long 0
+ .long 1017118720
+ .long 0
+ .long 1069547520
+ .long 0
+ .long 1129316352
+ .long 0
+ .long 1072693248
+ .long 1413754136
+ .long 1073291771
+ .long 856972295
+ .long 1016178214
+ .long 33554432
+ .long 1101004800
+ .type __datan_la_CoutTab,@object
+ .size __datan_la_CoutTab,1936
+ .align 8
+
+.FLT_14:
+ .long 0x00000000,0x3ff00000
+ .type .FLT_14,@object
+ .size .FLT_14,8
new file mode 100644
@@ -0,0 +1,20 @@
+/* AVX2 version of vectorized atanf.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define _ZGVeN16v_atanf _ZGVeN16v_atanf_avx2_wrapper
+#include "../svml_s_atanf16_core.S"
new file mode 100644
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized atanf, vector length is 16.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define SYMBOL_NAME _ZGVeN16v_atanf
+#include "ifunc-mathvec-avx512-skx.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVeN16v_atanf, __GI__ZGVeN16v_atanf,
+ __redirect__ZGVeN16v_atanf)
+ __attribute__ ((visibility ("hidden")));
+#endif
new file mode 100644
@@ -0,0 +1,352 @@
+/* Function atanf vectorized with AVX-512.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ https://www.gnu.org/licenses/. */
+
+/*
+ * ALGORITHM DESCRIPTION:
+ *
+ * For 0.0 <= x <= 7.0/16.0: atan(x) = atan(0.0) + atan(s), where s=(x-0.0)/(1.0+0.0*x)
+ * For 7.0/16.0 <= x <= 11.0/16.0: atan(x) = atan(0.5) + atan(s), where s=(x-0.5)/(1.0+0.5*x)
+ * For 11.0/16.0 <= x <= 19.0/16.0: atan(x) = atan(1.0) + atan(s), where s=(x-1.0)/(1.0+1.0*x)
+ * For 19.0/16.0 <= x <= 39.0/16.0: atan(x) = atan(1.5) + atan(s), where s=(x-1.5)/(1.0+1.5*x)
+ * For 39.0/16.0 <= x <= inf : atan(x) = atan(inf) + atan(s), where s=-1.0/x
+ * Where atan(s) ~= s+s^3*Poly11(s^2) on interval |s|<7.0/0.16.
+ *
+ */
+
+#include <sysdep.h>
+
+ .text
+ENTRY(_ZGVeN16v_atanf_skx)
+ vandps __svml_satan_data_internal_avx512(%rip), %zmm0, %zmm7
+ vmovups 128+__svml_satan_data_internal_avx512(%rip), %zmm3
+ vmovups 256+__svml_satan_data_internal_avx512(%rip), %zmm8
+
+/* round to 2 bits after binary point */
+ vreduceps $40, {sae}, %zmm7, %zmm5
+
+/* saturate X range */
+ vmovups 320+__svml_satan_data_internal_avx512(%rip), %zmm6
+ vmovups 64+__svml_satan_data_internal_avx512(%rip), %zmm2
+ vcmpps $29, {sae}, %zmm3, %zmm7, %k1
+
+/* table lookup sequence */
+ vmovups 448+__svml_satan_data_internal_avx512(%rip), %zmm3
+ vsubps {rn-sae}, %zmm5, %zmm7, %zmm4
+ vaddps {rn-sae}, %zmm2, %zmm7, %zmm1
+ vxorps %zmm0, %zmm7, %zmm0
+ vfmadd231ps {rn-sae}, %zmm7, %zmm4, %zmm8
+ vmovups 896+__svml_satan_data_internal_avx512(%rip), %zmm4
+
+/* if|X|>=MaxThreshold, set DiffX=-1 */
+ vblendmps 192+__svml_satan_data_internal_avx512(%rip), %zmm5, %zmm9{%k1}
+ vmovups 960+__svml_satan_data_internal_avx512(%rip), %zmm5
+
+/* if|X|>=MaxThreshold, set Y=X */
+ vminps {sae}, %zmm7, %zmm6, %zmm8{%k1}
+
+/* R+Rl = DiffX/Y */
+ vgetmantps $0, {sae}, %zmm9, %zmm12
+ vgetexpps {sae}, %zmm9, %zmm10
+ vpermt2ps 512+__svml_satan_data_internal_avx512(%rip), %zmm1, %zmm3
+ vgetmantps $0, {sae}, %zmm8, %zmm15
+ vgetexpps {sae}, %zmm8, %zmm11
+ vmovups 832+__svml_satan_data_internal_avx512(%rip), %zmm1
+
+/* set table value to Pi/2 for large X */
+ vblendmps 704+__svml_satan_data_internal_avx512(%rip), %zmm3, %zmm9{%k1}
+ vrcp14ps %zmm15, %zmm13
+ vsubps {rn-sae}, %zmm11, %zmm10, %zmm2
+ vmulps {rn-sae}, %zmm13, %zmm12, %zmm14
+ vfnmadd213ps {rn-sae}, %zmm12, %zmm14, %zmm15
+ vfmadd213ps {rn-sae}, %zmm14, %zmm13, %zmm15
+ vscalefps {rn-sae}, %zmm2, %zmm15, %zmm7
+
+/* polynomial evaluation */
+ vmulps {rn-sae}, %zmm7, %zmm7, %zmm8
+ vmulps {rn-sae}, %zmm7, %zmm8, %zmm6
+ vfmadd231ps {rn-sae}, %zmm8, %zmm1, %zmm4
+ vfmadd213ps {rn-sae}, %zmm5, %zmm4, %zmm8
+ vfmadd213ps {rn-sae}, %zmm7, %zmm6, %zmm8
+ vaddps {rn-sae}, %zmm9, %zmm8, %zmm10
+ vxorps %zmm0, %zmm10, %zmm0
+ ret
+
+END(_ZGVeN16v_atanf_skx)
+
+ .section .rodata, "a"
+ .align 64
+
+__svml_satan_data_internal_avx512:
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1241513984
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 1089994752
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 3212836864
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 1333788672
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .long 1048239024
+ .long 1055744824
+ .long 1059372157
+ .long 1061752795
+ .long 1063609315
+ .long 1065064543
+ .long 1065786489
+ .long 1066252045
+ .long 1066633083
+ .long 1066949484
+ .long 1067215699
+ .long 1067442363
+ .long 1067637412
+ .long 1067806856
+ .long 1067955311
+ .long 1068086373
+ .long 1068202874
+ .long 1068307075
+ .long 1068400798
+ .long 1068485529
+ .long 1068562486
+ .long 1068632682
+ .long 1068696961
+ .long 1068756035
+ .long 1068810506
+ .long 1068860887
+ .long 1068907620
+ .long 1068951084
+ .long 1068991608
+ .long 1069029480
+ .long 1069064949
+ .long 0
+ .long 2975494116
+ .long 833369962
+ .long 835299256
+ .long 2998648110
+ .long 2995239174
+ .long 3000492182
+ .long 860207626
+ .long 3008447516
+ .long 3005590622
+ .long 3000153675
+ .long 860754741
+ .long 859285590
+ .long 844944488
+ .long 2993069463
+ .long 858157665
+ .long 3006142000
+ .long 3007693206
+ .long 3009342234
+ .long 847469400
+ .long 3006114683
+ .long 852829553
+ .long 847325583
+ .long 860305056
+ .long 846145135
+ .long 2997638646
+ .long 855837703
+ .long 2979047222
+ .long 2995344192
+ .long 854092798
+ .long 3000498637
+ .long 859965578
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3007036718
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 3188697310
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 1045219554
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .long 3198855850
+ .type __svml_satan_data_internal_avx512,@object
+ .size __svml_satan_data_internal_avx512,1024
new file mode 100644
@@ -0,0 +1,20 @@
+/* SSE2 version of vectorized atanf, vector length is 4.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define _ZGVbN4v_atanf _ZGVbN4v_atanf_sse2
+#include "../svml_s_atanf4_core.S"
new file mode 100644
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized atanf, vector length is 4.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define SYMBOL_NAME _ZGVbN4v_atanf
+#include "ifunc-mathvec-sse4_1.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVbN4v_atanf, __GI__ZGVbN4v_atanf,
+ __redirect__ZGVbN4v_atanf)
+ __attribute__ ((visibility ("hidden")));
+#endif
new file mode 100644
@@ -0,0 +1,884 @@
+/* Function atanf vectorized with SSE4.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ https://www.gnu.org/licenses/. */
+
+/*
+ * ALGORITHM DESCRIPTION:
+ *
+ * For 0.0 <= x <= 7.0/16.0: atan(x) = atan(0.0) + atan(s), where s=(x-0.0)/(1.0+0.0*x)
+ * For 7.0/16.0 <= x <= 11.0/16.0: atan(x) = atan(0.5) + atan(s), where s=(x-0.5)/(1.0+0.5*x)
+ * For 11.0/16.0 <= x <= 19.0/16.0: atan(x) = atan(1.0) + atan(s), where s=(x-1.0)/(1.0+1.0*x)
+ * For 19.0/16.0 <= x <= 39.0/16.0: atan(x) = atan(1.5) + atan(s), where s=(x-1.5)/(1.0+1.5*x)
+ * For 39.0/16.0 <= x <= inf : atan(x) = atan(inf) + atan(s), where s=-1.0/x
+ * Where atan(s) ~= s+s^3*Poly11(s^2) on interval |s|<7.0/0.16.
+ *
+ */
+
+#include <sysdep.h>
+
+ .text
+ENTRY(_ZGVbN4v_atanf_sse4)
+ movaps %xmm0, %xmm6
+
+/*
+ * To use minps\maxps operations for argument reduction
+ * uncomment _AT_USEMINMAX_ definition
+ * Declarations
+ * Variables
+ * Constants
+ */
+ movups 64+__svml_satan_data_internal(%rip), %xmm3
+
+/*
+ * 1) If x>1, then r=-1/x, PIO2=Pi/2
+ * 2) If -1<=x<=1, then r=x, PIO2=0
+ * 3) If x<-1, then r=-1/x, PIO2=-Pi/2
+ */
+ movups 128+__svml_satan_data_internal(%rip), %xmm2
+ andps %xmm6, %xmm3
+ movaps %xmm3, %xmm1
+ movaps %xmm2, %xmm4
+ cmpleps %xmm2, %xmm1
+ maxps %xmm3, %xmm4
+ minps %xmm3, %xmm2
+ divps %xmm4, %xmm2
+ movups __svml_satan_data_internal(%rip), %xmm5
+ movaps %xmm1, %xmm0
+ andps %xmm5, %xmm6
+ andnps %xmm5, %xmm1
+ pxor %xmm6, %xmm1
+ pxor %xmm2, %xmm1
+
+/* Polynomial. */
+ movaps %xmm1, %xmm4
+ mulps %xmm1, %xmm4
+ movaps %xmm4, %xmm3
+ mulps %xmm4, %xmm3
+ movups 384+__svml_satan_data_internal(%rip), %xmm2
+ mulps %xmm3, %xmm2
+ movups 448+__svml_satan_data_internal(%rip), %xmm7
+ mulps %xmm3, %xmm7
+ addps 512+__svml_satan_data_internal(%rip), %xmm2
+ mulps %xmm3, %xmm2
+ addps 576+__svml_satan_data_internal(%rip), %xmm7
+ mulps %xmm3, %xmm7
+ addps 640+__svml_satan_data_internal(%rip), %xmm2
+ mulps %xmm3, %xmm2
+ addps 704+__svml_satan_data_internal(%rip), %xmm7
+ mulps %xmm7, %xmm3
+ addps 768+__svml_satan_data_internal(%rip), %xmm2
+ mulps %xmm4, %xmm2
+ addps 832+__svml_satan_data_internal(%rip), %xmm3
+ andnps 256+__svml_satan_data_internal(%rip), %xmm0
+ addps %xmm2, %xmm3
+ mulps %xmm3, %xmm4
+ pxor %xmm6, %xmm0
+ addps 896+__svml_satan_data_internal(%rip), %xmm4
+
+/* Reconstruction. */
+ mulps %xmm4, %xmm1
+ addps %xmm1, %xmm0
+ ret
+
+END(_ZGVbN4v_atanf_sse4)
+
+ .section .rodata, "a"
+ .align 64
+
+__svml_satan_data_internal:
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .type __svml_satan_data_internal,@object
+ .size __svml_satan_data_internal,960
new file mode 100644
@@ -0,0 +1,20 @@
+/* SSE version of vectorized atanf, vector length is 8.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define _ZGVdN8v_atanf _ZGVdN8v_atanf_sse_wrapper
+#include "../svml_s_atanf8_core.S"
new file mode 100644
@@ -0,0 +1,28 @@
+/* Multiple versions of vectorized atanf, vector length is 8.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define SYMBOL_NAME _ZGVdN8v_atanf
+#include "ifunc-mathvec-avx2.h"
+
+libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
+
+#ifdef SHARED
+__hidden_ver1 (_ZGVdN8v_atanf, __GI__ZGVdN8v_atanf,
+ __redirect__ZGVdN8v_atanf)
+ __attribute__ ((visibility ("hidden")));
+#endif
new file mode 100644
@@ -0,0 +1,688 @@
+/* Function atanf vectorized with AVX2.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ https://www.gnu.org/licenses/. */
+
+/*
+ * ALGORITHM DESCRIPTION:
+ *
+ * For 0.0 <= x <= 7.0/16.0: atan(x) = atan(0.0) + atan(s), where s=(x-0.0)/(1.0+0.0*x)
+ * For 7.0/16.0 <= x <= 11.0/16.0: atan(x) = atan(0.5) + atan(s), where s=(x-0.5)/(1.0+0.5*x)
+ * For 11.0/16.0 <= x <= 19.0/16.0: atan(x) = atan(1.0) + atan(s), where s=(x-1.0)/(1.0+1.0*x)
+ * For 19.0/16.0 <= x <= 39.0/16.0: atan(x) = atan(1.5) + atan(s), where s=(x-1.5)/(1.0+1.5*x)
+ * For 39.0/16.0 <= x <= inf : atan(x) = atan(inf) + atan(s), where s=-1.0/x
+ * Where atan(s) ~= s+s^3*Poly11(s^2) on interval |s|<7.0/0.16.
+ *
+ */
+
+#include <sysdep.h>
+
+ .text
+ENTRY(_ZGVdN8v_atanf_avx2)
+/*
+ * 1) If x>1, then r=-1/x, PIO2=Pi/2
+ * 2) If -1<=x<=1, then r=x, PIO2=0
+ * 3) If x<-1, then r=-1/x, PIO2=-Pi/2
+ */
+ vmovups 128+__svml_satan_data_internal(%rip), %ymm7
+ vmovups __svml_satan_data_internal(%rip), %ymm4
+ vmovaps %ymm0, %ymm5
+
+/*
+ * To use minps\maxps operations for argument reduction
+ * uncomment _AT_USEMINMAX_ definition
+ * Declarations
+ * Variables
+ * Constants
+ */
+ vandps 64+__svml_satan_data_internal(%rip), %ymm5, %ymm0
+ vcmple_oqps %ymm7, %ymm0, %ymm3
+ vandps %ymm4, %ymm5, %ymm2
+ vmaxps %ymm0, %ymm7, %ymm5
+ vminps %ymm0, %ymm7, %ymm0
+ vandnps 256+__svml_satan_data_internal(%rip), %ymm3, %ymm6
+ vxorps %ymm2, %ymm6, %ymm1
+ vdivps %ymm5, %ymm0, %ymm6
+ vmovups 384+__svml_satan_data_internal(%rip), %ymm0
+ vandnps %ymm4, %ymm3, %ymm3
+ vxorps %ymm2, %ymm3, %ymm2
+ vxorps %ymm6, %ymm2, %ymm3
+
+/* Polynomial. */
+ vmulps %ymm3, %ymm3, %ymm7
+ vmovups 448+__svml_satan_data_internal(%rip), %ymm2
+ vmulps %ymm7, %ymm7, %ymm4
+ vfmadd213ps 512+__svml_satan_data_internal(%rip), %ymm4, %ymm0
+ vfmadd213ps 576+__svml_satan_data_internal(%rip), %ymm4, %ymm2
+ vfmadd213ps 640+__svml_satan_data_internal(%rip), %ymm4, %ymm0
+ vfmadd213ps 704+__svml_satan_data_internal(%rip), %ymm4, %ymm2
+ vfmadd213ps 768+__svml_satan_data_internal(%rip), %ymm4, %ymm0
+ vfmadd213ps 832+__svml_satan_data_internal(%rip), %ymm4, %ymm2
+ vfmadd213ps %ymm2, %ymm7, %ymm0
+ vfmadd213ps 896+__svml_satan_data_internal(%rip), %ymm7, %ymm0
+
+/* Reconstruction. */
+ vfmadd213ps %ymm1, %ymm3, %ymm0
+ ret
+
+END(_ZGVdN8v_atanf_avx2)
+
+ .section .rodata, "a"
+ .align 64
+
+__svml_satan_data_internal:
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .long 2147483648
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .long 2147483647
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .long 1073741824
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .long 1070141403
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .long 2139095040
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .long 993144000
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .long 3162449457
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .long 1026278276
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .long 3180885545
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .long 1037657204
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .long 3188810232
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .long 1045215135
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .long 3198855753
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .long 1065353216
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .type __svml_satan_data_internal,@object
+ .size __svml_satan_data_internal,960
new file mode 100644
@@ -0,0 +1,29 @@
+/* Function atan vectorized with SSE2.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_d_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVbN2v_atan)
+WRAPPER_IMPL_SSE2 atan
+END (_ZGVbN2v_atan)
+
+#ifndef USE_MULTIARCH
+ libmvec_hidden_def (_ZGVbN2v_atan)
+#endif
new file mode 100644
@@ -0,0 +1,29 @@
+/* Function atan vectorized with AVX2, wrapper version.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_d_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVdN4v_atan)
+WRAPPER_IMPL_AVX _ZGVbN2v_atan
+END (_ZGVdN4v_atan)
+
+#ifndef USE_MULTIARCH
+ libmvec_hidden_def (_ZGVdN4v_atan)
+#endif
new file mode 100644
@@ -0,0 +1,25 @@
+/* Function atan vectorized in AVX ISA as wrapper to SSE4 ISA version.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_d_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVcN4v_atan)
+WRAPPER_IMPL_AVX _ZGVbN2v_atan
+END (_ZGVcN4v_atan)
new file mode 100644
@@ -0,0 +1,25 @@
+/* Function atan vectorized with AVX-512, wrapper to AVX2.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_d_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVeN8v_atan)
+WRAPPER_IMPL_AVX512 _ZGVdN4v_atan
+END (_ZGVeN8v_atan)
new file mode 100644
@@ -0,0 +1,25 @@
+/* Function atanf vectorized with AVX-512. Wrapper to AVX2 version.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_s_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVeN16v_atanf)
+WRAPPER_IMPL_AVX512 _ZGVdN8v_atanf
+END (_ZGVeN16v_atanf)
new file mode 100644
@@ -0,0 +1,29 @@
+/* Function atanf vectorized with SSE2, wrapper version.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_s_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVbN4v_atanf)
+WRAPPER_IMPL_SSE2 atanf
+END (_ZGVbN4v_atanf)
+
+#ifndef USE_MULTIARCH
+ libmvec_hidden_def (_ZGVbN4v_atanf)
+#endif
new file mode 100644
@@ -0,0 +1,29 @@
+/* Function atanf vectorized with AVX2, wrapper version.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_s_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVdN8v_atanf)
+WRAPPER_IMPL_AVX _ZGVbN4v_atanf
+END (_ZGVdN8v_atanf)
+
+#ifndef USE_MULTIARCH
+ libmvec_hidden_def (_ZGVdN8v_atanf)
+#endif
new file mode 100644
@@ -0,0 +1,25 @@
+/* Function atanf vectorized in AVX ISA as wrapper to SSE4 ISA version.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <sysdep.h>
+#include "svml_s_wrapper_impl.h"
+
+ .text
+ENTRY (_ZGVcN8v_atanf)
+WRAPPER_IMPL_AVX _ZGVbN4v_atanf
+END (_ZGVcN8v_atanf)
new file mode 100644
@@ -0,0 +1 @@
+#include "test-double-libmvec-atan.c"
new file mode 100644
@@ -0,0 +1 @@
+#include "test-double-libmvec-atan.c"
new file mode 100644
@@ -0,0 +1 @@
+#include "test-double-libmvec-atan.c"
new file mode 100644
@@ -0,0 +1,3 @@
+#define LIBMVEC_TYPE double
+#define LIBMVEC_FUNC atan
+#include "test-vector-abi-arg1.h"
@@ -31,6 +31,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acos), _ZGVbN2v_acos)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVbN2v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (asin), _ZGVbN2v_asin)
VECTOR_WRAPPER (WRAPPER_NAME (asinh), _ZGVbN2v_asinh)
+VECTOR_WRAPPER (WRAPPER_NAME (atan), _ZGVbN2v_atan)
#define VEC_INT_TYPE __m128i
@@ -34,6 +34,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acos), _ZGVdN4v_acos)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVdN4v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (asin), _ZGVdN4v_asin)
VECTOR_WRAPPER (WRAPPER_NAME (asinh), _ZGVdN4v_asinh)
+VECTOR_WRAPPER (WRAPPER_NAME (atan), _ZGVdN4v_atan)
#ifndef __ILP32__
# define VEC_INT_TYPE __m256i
@@ -31,6 +31,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acos), _ZGVcN4v_acos)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVcN4v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (asin), _ZGVcN4v_asin)
VECTOR_WRAPPER (WRAPPER_NAME (asinh), _ZGVcN4v_asinh)
+VECTOR_WRAPPER (WRAPPER_NAME (atan), _ZGVcN4v_atan)
#define VEC_INT_TYPE __m128i
@@ -31,6 +31,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acos), _ZGVeN8v_acos)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVeN8v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (asin), _ZGVeN8v_asin)
VECTOR_WRAPPER (WRAPPER_NAME (asinh), _ZGVeN8v_asinh)
+VECTOR_WRAPPER (WRAPPER_NAME (atan), _ZGVeN8v_atan)
#ifndef __ILP32__
# define VEC_INT_TYPE __m512i
new file mode 100644
@@ -0,0 +1 @@
+#include "test-float-libmvec-atanf.c"
new file mode 100644
@@ -0,0 +1 @@
+#include "test-float-libmvec-atanf.c"
new file mode 100644
@@ -0,0 +1 @@
+#include "test-float-libmvec-atanf.c"
new file mode 100644
@@ -0,0 +1,3 @@
+#define LIBMVEC_TYPE float
+#define LIBMVEC_FUNC atanf
+#include "test-vector-abi-arg1.h"
@@ -31,6 +31,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acosf), _ZGVeN16v_acosf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVeN16v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (asinf), _ZGVeN16v_asinf)
VECTOR_WRAPPER (WRAPPER_NAME (asinhf), _ZGVeN16v_asinhf)
+VECTOR_WRAPPER (WRAPPER_NAME (atanf), _ZGVeN16v_atanf)
#define VEC_INT_TYPE __m512i
@@ -31,6 +31,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acosf), _ZGVbN4v_acosf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVbN4v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (asinf), _ZGVbN4v_asinf)
VECTOR_WRAPPER (WRAPPER_NAME (asinhf), _ZGVbN4v_asinhf)
+VECTOR_WRAPPER (WRAPPER_NAME (atanf), _ZGVbN4v_atanf)
#define VEC_INT_TYPE __m128i
@@ -34,6 +34,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acosf), _ZGVdN8v_acosf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVdN8v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (asinf), _ZGVdN8v_asinf)
VECTOR_WRAPPER (WRAPPER_NAME (asinhf), _ZGVdN8v_asinhf)
+VECTOR_WRAPPER (WRAPPER_NAME (atanf), _ZGVdN8v_atanf)
/* Redefinition of wrapper to be compatible with _ZGVdN8vvv_sincosf. */
#undef VECTOR_WRAPPER_fFF
@@ -31,6 +31,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (acosf), _ZGVcN8v_acosf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVcN8v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (asinf), _ZGVcN8v_asinf)
VECTOR_WRAPPER (WRAPPER_NAME (asinhf), _ZGVcN8v_asinhf)
+VECTOR_WRAPPER (WRAPPER_NAME (atanf), _ZGVcN8v_atanf)
#define VEC_INT_TYPE __m128i