x86-64: Add vector erf/erff implementation to libmvec

Implement vectorized erf/erff containing SSE, AVX, AVX2 and
AVX512 versions for libmvec as per vector ABI.  It also contains
accuracy and ABI tests for vector erf/erff with regenerated ulps.

Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
Sunil K Pandey 2021-12-29 09:54:31 -08:00
parent 0625489ccc
commit f9ce13fdac
50 changed files with 5044 additions and 1 deletions

View File

@ -274,4 +274,15 @@
#define __DECL_SIMD_acoshf32x
#define __DECL_SIMD_acoshf64x
#define __DECL_SIMD_acoshf128x
#define __DECL_SIMD_erf
#define __DECL_SIMD_erff
#define __DECL_SIMD_erfl
#define __DECL_SIMD_erff16
#define __DECL_SIMD_erff32
#define __DECL_SIMD_erff64
#define __DECL_SIMD_erff128
#define __DECL_SIMD_erff32x
#define __DECL_SIMD_erff64x
#define __DECL_SIMD_erff128x
#endif

View File

@ -228,7 +228,7 @@ __MATHCALL (yn,, (int, _Mdouble_));
#if defined __USE_XOPEN || defined __USE_ISOC99
/* Error and gamma functions. */
__MATHCALL (erf,, (_Mdouble_));
__MATHCALL_VEC (erf,, (_Mdouble_));
__MATHCALL (erfc,, (_Mdouble_));
__MATHCALL (lgamma,, (_Mdouble_));
#endif

View File

@ -53,6 +53,7 @@ GLIBC_2.35 _ZGVbN2v_atan F
GLIBC_2.35 _ZGVbN2v_atanh F
GLIBC_2.35 _ZGVbN2v_cbrt F
GLIBC_2.35 _ZGVbN2v_cosh F
GLIBC_2.35 _ZGVbN2v_erf F
GLIBC_2.35 _ZGVbN2v_exp10 F
GLIBC_2.35 _ZGVbN2v_exp2 F
GLIBC_2.35 _ZGVbN2v_expm1 F
@ -69,6 +70,7 @@ GLIBC_2.35 _ZGVbN4v_atanf F
GLIBC_2.35 _ZGVbN4v_atanhf F
GLIBC_2.35 _ZGVbN4v_cbrtf F
GLIBC_2.35 _ZGVbN4v_coshf F
GLIBC_2.35 _ZGVbN4v_erff F
GLIBC_2.35 _ZGVbN4v_exp10f F
GLIBC_2.35 _ZGVbN4v_exp2f F
GLIBC_2.35 _ZGVbN4v_expm1f F
@ -85,6 +87,7 @@ GLIBC_2.35 _ZGVcN4v_atan F
GLIBC_2.35 _ZGVcN4v_atanh F
GLIBC_2.35 _ZGVcN4v_cbrt F
GLIBC_2.35 _ZGVcN4v_cosh F
GLIBC_2.35 _ZGVcN4v_erf F
GLIBC_2.35 _ZGVcN4v_exp10 F
GLIBC_2.35 _ZGVcN4v_exp2 F
GLIBC_2.35 _ZGVcN4v_expm1 F
@ -101,6 +104,7 @@ GLIBC_2.35 _ZGVcN8v_atanf F
GLIBC_2.35 _ZGVcN8v_atanhf F
GLIBC_2.35 _ZGVcN8v_cbrtf F
GLIBC_2.35 _ZGVcN8v_coshf F
GLIBC_2.35 _ZGVcN8v_erff F
GLIBC_2.35 _ZGVcN8v_exp10f F
GLIBC_2.35 _ZGVcN8v_exp2f F
GLIBC_2.35 _ZGVcN8v_expm1f F
@ -117,6 +121,7 @@ GLIBC_2.35 _ZGVdN4v_atan F
GLIBC_2.35 _ZGVdN4v_atanh F
GLIBC_2.35 _ZGVdN4v_cbrt F
GLIBC_2.35 _ZGVdN4v_cosh F
GLIBC_2.35 _ZGVdN4v_erf F
GLIBC_2.35 _ZGVdN4v_exp10 F
GLIBC_2.35 _ZGVdN4v_exp2 F
GLIBC_2.35 _ZGVdN4v_expm1 F
@ -133,6 +138,7 @@ GLIBC_2.35 _ZGVdN8v_atanf F
GLIBC_2.35 _ZGVdN8v_atanhf F
GLIBC_2.35 _ZGVdN8v_cbrtf F
GLIBC_2.35 _ZGVdN8v_coshf F
GLIBC_2.35 _ZGVdN8v_erff F
GLIBC_2.35 _ZGVdN8v_exp10f F
GLIBC_2.35 _ZGVdN8v_exp2f F
GLIBC_2.35 _ZGVdN8v_expm1f F
@ -149,6 +155,7 @@ GLIBC_2.35 _ZGVeN16v_atanf F
GLIBC_2.35 _ZGVeN16v_atanhf F
GLIBC_2.35 _ZGVeN16v_cbrtf F
GLIBC_2.35 _ZGVeN16v_coshf F
GLIBC_2.35 _ZGVeN16v_erff F
GLIBC_2.35 _ZGVeN16v_exp10f F
GLIBC_2.35 _ZGVeN16v_exp2f F
GLIBC_2.35 _ZGVeN16v_expm1f F
@ -165,6 +172,7 @@ GLIBC_2.35 _ZGVeN8v_atan F
GLIBC_2.35 _ZGVeN8v_atanh F
GLIBC_2.35 _ZGVeN8v_cbrt F
GLIBC_2.35 _ZGVeN8v_cosh F
GLIBC_2.35 _ZGVeN8v_erf F
GLIBC_2.35 _ZGVeN8v_exp10 F
GLIBC_2.35 _ZGVeN8v_exp2 F
GLIBC_2.35 _ZGVeN8v_expm1 F

View File

@ -122,6 +122,10 @@
# define __DECL_SIMD_acosh __DECL_SIMD_x86_64
# undef __DECL_SIMD_acoshf
# define __DECL_SIMD_acoshf __DECL_SIMD_x86_64
# undef __DECL_SIMD_erf
# define __DECL_SIMD_erf __DECL_SIMD_x86_64
# undef __DECL_SIMD_erff
# define __DECL_SIMD_erff __DECL_SIMD_x86_64
# endif
#endif

View File

@ -60,6 +60,8 @@
!GCC$ builtin (atanhf) attributes simd (notinbranch) if('x86_64')
!GCC$ builtin (acosh) attributes simd (notinbranch) if('x86_64')
!GCC$ builtin (acoshf) attributes simd (notinbranch) if('x86_64')
!GCC$ builtin (erf) attributes simd (notinbranch) if('x86_64')
!GCC$ builtin (erff) attributes simd (notinbranch) if('x86_64')
!GCC$ builtin (cos) attributes simd (notinbranch) if('x32')
!GCC$ builtin (cosf) attributes simd (notinbranch) if('x32')
@ -105,3 +107,5 @@
!GCC$ builtin (atanhf) attributes simd (notinbranch) if('x32')
!GCC$ builtin (acosh) attributes simd (notinbranch) if('x32')
!GCC$ builtin (acoshf) attributes simd (notinbranch) if('x32')
!GCC$ builtin (erf) attributes simd (notinbranch) if('x32')
!GCC$ builtin (erff) attributes simd (notinbranch) if('x32')

View File

@ -31,6 +31,7 @@ libmvec-funcs = \
cbrt \
cos \
cosh \
erf \
exp \
exp10 \
exp2 \

View File

@ -21,6 +21,7 @@ libmvec {
_ZGVbN2v_atanh; _ZGVcN4v_atanh; _ZGVdN4v_atanh; _ZGVeN8v_atanh;
_ZGVbN2v_cbrt; _ZGVcN4v_cbrt; _ZGVdN4v_cbrt; _ZGVeN8v_cbrt;
_ZGVbN2v_cosh; _ZGVcN4v_cosh; _ZGVdN4v_cosh; _ZGVeN8v_cosh;
_ZGVbN2v_erf; _ZGVcN4v_erf; _ZGVdN4v_erf; _ZGVeN8v_erf;
_ZGVbN2v_exp10; _ZGVcN4v_exp10; _ZGVdN4v_exp10; _ZGVeN8v_exp10;
_ZGVbN2v_exp2; _ZGVcN4v_exp2; _ZGVdN4v_exp2; _ZGVeN8v_exp2;
_ZGVbN2v_expm1; _ZGVcN4v_expm1; _ZGVdN4v_expm1; _ZGVeN8v_expm1;
@ -37,6 +38,7 @@ libmvec {
_ZGVbN4v_atanhf; _ZGVcN8v_atanhf; _ZGVdN8v_atanhf; _ZGVeN16v_atanhf;
_ZGVbN4v_cbrtf; _ZGVcN8v_cbrtf; _ZGVdN8v_cbrtf; _ZGVeN16v_cbrtf;
_ZGVbN4v_coshf; _ZGVcN8v_coshf; _ZGVdN8v_coshf; _ZGVeN16v_coshf;
_ZGVbN4v_erff; _ZGVcN8v_erff; _ZGVdN8v_erff; _ZGVeN16v_erff;
_ZGVbN4v_exp10f; _ZGVcN8v_exp10f; _ZGVdN8v_exp10f; _ZGVeN16v_exp10f;
_ZGVbN4v_exp2f; _ZGVcN8v_exp2f; _ZGVdN8v_exp2f; _ZGVeN16v_exp2f;
_ZGVbN4v_expm1f; _ZGVcN8v_expm1f; _ZGVdN8v_expm1f; _ZGVeN16v_expm1f;

View File

@ -1298,6 +1298,26 @@ float: 1
float128: 2
ldouble: 1
Function: "erf_vlen16":
float: 1
Function: "erf_vlen2":
double: 1
Function: "erf_vlen4":
double: 1
float: 2
Function: "erf_vlen4_avx2":
double: 1
Function: "erf_vlen8":
double: 1
float: 2
Function: "erf_vlen8_avx2":
float: 2
Function: "erfc":
double: 5
float: 3

View File

@ -0,0 +1,20 @@
/* SSE2 version of vectorized erf, 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_erf _ZGVbN2v_erf_sse2
#include "../svml_d_erf2_core.S"

View File

@ -0,0 +1,27 @@
/* Multiple versions of vectorized erf, 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_erf
#include "ifunc-mathvec-sse4_1.h"
libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
#ifdef SHARED
__hidden_ver1 (_ZGVbN2v_erf, __GI__ZGVbN2v_erf, __redirect__ZGVbN2v_erf)
__attribute__ ((visibility ("hidden")));
#endif

View File

@ -0,0 +1,987 @@
/* Function erf 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:
*
* Basic formula is
* erf(x) ~ erf(x0) +
* + exp(-x0*x0)*D*(1+c0+T*P1(T)+D^2*P3(T)+D^4*P5(T)+D^6*p7+D^8*p9)
* where D=x-x0, T=x0*D
* x0 is x rounded to a specified number of fractional bits (in this case 7),
* except that x0=0 for |x|<3.5/128.0 (using x0=0 for first 4 table entries)
*
* Data table packs both erf(x0)_high and a few bits of erf(x0)_low in one
* entry (in place of redundant exponent bits)
*
*/
/* Offsets for data table __svml_derf_data_internal
*/
#define _erf_tbl 0
#define _AbsMask 12288
#define _MaxThreshold 12304
#define _SRound 12320
#define _U2Threshold 12336
#define _poly1_0 12352
#define _poly1_1 12368
#define _poly3_0 12384
#define _poly3_1 12400
#define _poly5_0 12416
#define _poly5_1 12432
#define _poly1_2 12448
#define _poly3_2 12464
#define _poly1_3 12480
#define _poly3_3 12496
#include <sysdep.h>
.text
.section .text.sse4,"ax",@progbits
ENTRY(_ZGVbN2v_erf_sse4)
/*
* vector gather: erf(x0),
* second value is exp(-x0*x0)
*/
lea __svml_derf_data_internal(%rip), %rcx
movups _AbsMask+__svml_derf_data_internal(%rip), %xmm5
andps %xmm0, %xmm5
/*
* erf(x) rounds to 1.0 for x>_MaxThreshold (5.9921875)
* can compute all results in the main path
*/
movaps %xmm5, %xmm9
/* save sign */
pxor %xmm5, %xmm0
minpd _MaxThreshold+__svml_derf_data_internal(%rip), %xmm9
movups _SRound+__svml_derf_data_internal(%rip), %xmm1
movaps %xmm1, %xmm2
addpd %xmm9, %xmm2
movaps %xmm2, %xmm8
psllq $4, %xmm2
subpd %xmm1, %xmm8
movd %xmm2, %eax
movups _U2Threshold+__svml_derf_data_internal(%rip), %xmm11
cmpltpd %xmm9, %xmm11
subpd %xmm8, %xmm9
mulpd %xmm9, %xmm8
/*
* _LA_ polynomial computation
* Start polynomial evaluation
*/
movups _poly1_0+__svml_derf_data_internal(%rip), %xmm7
andps %xmm9, %xmm11
mulpd %xmm8, %xmm7
/* D2 = Diff^2 */
mulpd %xmm11, %xmm11
addpd _poly1_1+__svml_derf_data_internal(%rip), %xmm7
/* NaN fixup */
minpd %xmm5, %xmm9
mulpd %xmm8, %xmm7
movups _poly3_0+__svml_derf_data_internal(%rip), %xmm6
/* T^2 */
movaps %xmm8, %xmm12
mulpd %xmm8, %xmm6
addpd _poly1_2+__svml_derf_data_internal(%rip), %xmm7
addpd _poly3_1+__svml_derf_data_internal(%rip), %xmm6
mulpd %xmm8, %xmm12
mulpd %xmm8, %xmm6
mulpd %xmm8, %xmm7
addpd _poly3_2+__svml_derf_data_internal(%rip), %xmm6
addpd _poly1_3+__svml_derf_data_internal(%rip), %xmm7
mulpd %xmm8, %xmm6
/* P1 = T^2*P1 - T */
mulpd %xmm7, %xmm12
movups _poly5_0+__svml_derf_data_internal(%rip), %xmm10
/* Sign | Diff */
pxor %xmm0, %xmm9
mulpd %xmm8, %xmm10
subpd %xmm8, %xmm12
addpd _poly5_1+__svml_derf_data_internal(%rip), %xmm10
mulpd %xmm11, %xmm10
addpd _poly3_3+__svml_derf_data_internal(%rip), %xmm10
addpd %xmm6, %xmm10
pshufd $2, %xmm2, %xmm3
movd %xmm3, %edx
/* P1 + P3*D2 */
mulpd %xmm10, %xmm11
movslq %eax, %rax
movslq %edx, %rdx
addpd %xmm11, %xmm12
movups (%rcx,%rax), %xmm13
movups (%rcx,%rdx), %xmm4
movaps %xmm13, %xmm14
unpckhpd %xmm4, %xmm13
/* exp_h(x0) * Diff */
mulpd %xmm9, %xmm13
/*
* branch-free
* low part of result: exp_h(x0) * Diff*(1+P1)
*/
mulpd %xmm13, %xmm12
addpd %xmm12, %xmm13
unpcklpd %xmm4, %xmm14
/* Sign | _Erf_H */
pxor %xmm0, %xmm14
/* Final result */
addpd %xmm13, %xmm14
/* Fix erf(-0) = -0 */
orps %xmm14, %xmm0
ret
END(_ZGVbN2v_erf_sse4)
.section .rodata, "a"
.align 16
#ifdef __svml_derf_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct
{
__declspec(align(16)) VUINT32 _erf_tbl[6*128*2][2];
__declspec(align(16)) VUINT32 _AbsMask[2][2];
__declspec(align(16)) VUINT32 _MaxThreshold[2][2];
__declspec(align(16)) VUINT32 _SRound[2][2];
__declspec(align(16)) VUINT32 _U2Threshold[2][2];
__declspec(align(16)) VUINT32 _poly1_0[2][2];
__declspec(align(16)) VUINT32 _poly1_1[2][2];
__declspec(align(16)) VUINT32 _poly3_0[2][2];
__declspec(align(16)) VUINT32 _poly3_1[2][2];
__declspec(align(16)) VUINT32 _poly5_0[2][2];
__declspec(align(16)) VUINT32 _poly5_1[2][2];
__declspec(align(16)) VUINT32 _poly1_2[2][2];
__declspec(align(16)) VUINT32 _poly3_2[2][2];
__declspec(align(16)) VUINT32 _poly1_3[2][2];
__declspec(align(16)) VUINT32 _poly3_3[2][2];
} __svml_derf_data_internal;
#endif
__svml_derf_data_internal:
/*== _erf_tbl ==*/
.quad 0x0000000000000000, 0x3ff20dd750429b6d
.quad 0x3f820dbf3deb1340, 0x3ff20d8f1975c85d
.quad 0x3f920d77083f17a0, 0x3ff20cb67bd452c7
.quad 0x3f9b137e0cf584dc, 0x3ff20b4d8bac36c1
.quad 0x3fa20c5645dd2538, 0x3ff209546ad13ccf
.quad 0x3fa68e5d3bbc9526, 0x3ff206cb4897b148
.quad 0x3fab0fafef135745, 0x3ff203b261cd0053
.quad 0x3faf902a77bd3821, 0x3ff2000a00ae3804
.quad 0x3fb207d480e90658, 0x3ff1fbd27cdc72d3
.quad 0x3fb44703e87e8593, 0x3ff1f70c3b4f2cc8
.quad 0x3fb68591a1e83b5d, 0x3ff1f1b7ae44867f
.quad 0x3fb8c36beb8a8d23, 0x3ff1ebd5552f795b
.quad 0x3fbb0081148a873a, 0x3ff1e565bca400d4
.quad 0x3fbd3cbf7e70a4b3, 0x3ff1de697e413d29
.quad 0x3fbf78159ec8bb50, 0x3ff1d6e14099944a
.quad 0x3fc0d939005f65e5, 0x3ff1cecdb718d61c
.quad 0x3fc1f5e1a35c3b89, 0x3ff1c62fa1e869b6
.quad 0x3fc311fc15f56d14, 0x3ff1bd07cdd189ac
.quad 0x3fc42d7fc2f64959, 0x3ff1b357141d95d5
.quad 0x3fc548642321d7c6, 0x3ff1a91e5a748165
.quad 0x3fc662a0bdf7a89f, 0x3ff19e5e92b964ab
.quad 0x3fc77c2d2a765f9e, 0x3ff19318bae53a04
.quad 0x3fc895010fdbdbfd, 0x3ff1874ddcdfce24
.quad 0x3fc9ad142662e14d, 0x3ff17aff0e56ec10
.quad 0x3fcac45e37fe2526, 0x3ff16e2d7093cd8c
.quad 0x3fcbdad72110a648, 0x3ff160da304ed92f
.quad 0x3fccf076d1233237, 0x3ff153068581b781
.quad 0x3fce05354b96ff36, 0x3ff144b3b337c90c
.quad 0x3fcf190aa85540e2, 0x3ff135e3075d076b
.quad 0x3fd015f78a3dcf3d, 0x3ff12695da8b5bde
.quad 0x3fd09eed6982b948, 0x3ff116cd8fd67618
.quad 0x3fd127631eb8de32, 0x3ff1068b94962e5e
.quad 0x3fd1af54e232d609, 0x3ff0f5d1602f7e41
.quad 0x3fd236bef825d9a2, 0x3ff0e4a073dc1b91
.quad 0x3fd2bd9db0f7827f, 0x3ff0d2fa5a70c168
.quad 0x3fd343ed6989b7d9, 0x3ff0c0e0a8223359
.quad 0x3fd3c9aa8b84beda, 0x3ff0ae54fa490723
.quad 0x3fd44ed18d9f6462, 0x3ff09b58f724416b
.quad 0x3fd4d35ef3e5372e, 0x3ff087ee4d9ad247
.quad 0x3fd5574f4ffac98e, 0x3ff07416b4fbfe7c
.quad 0x3fd5da9f415ff23f, 0x3ff05fd3ecbec298
.quad 0x3fd65d4b75b00471, 0x3ff04b27bc403d30
.quad 0x3fd6df50a8dff772, 0x3ff03613f2812daf
.quad 0x3fd760aba57a76bf, 0x3ff0209a65e29545
.quad 0x3fd7e15944d9d3e4, 0x3ff00abcf3e187a9
.quad 0x3fd861566f5fd3c0, 0x3fefe8fb01a47307
.quad 0x3fd8e0a01cab516b, 0x3fefbbbbef34b4b2
.quad 0x3fd95f3353cbb146, 0x3fef8dc092d58ff8
.quad 0x3fd9dd0d2b721f39, 0x3fef5f0cdaf15313
.quad 0x3fda5a2aca209394, 0x3fef2fa4c16c0019
.quad 0x3fdad68966569a87, 0x3feeff8c4b1375db
.quad 0x3fdb522646bbda68, 0x3feecec7870ebca8
.quad 0x3fdbccfec24855b8, 0x3fee9d5a8e4c934e
.quad 0x3fdc4710406a65fc, 0x3fee6b4982f158b9
.quad 0x3fdcc058392a6d2d, 0x3fee38988fc46e72
.quad 0x3fdd38d4354c3bd0, 0x3fee054be79d3042
.quad 0x3fddb081ce6e2a48, 0x3fedd167c4cf9d2a
.quad 0x3fde275eaf25e458, 0x3fed9cf06898cdaf
.quad 0x3fde9d68931ae650, 0x3fed67ea1a8b5368
.quad 0x3fdf129d471eabb1, 0x3fed325927fb9d89
.quad 0x3fdf86faa9428f9d, 0x3fecfc41e36c7df9
.quad 0x3fdffa7ea8eb5fd0, 0x3fecc5a8a3fbea40
.quad 0x3fe03693a371519c, 0x3fec8e91c4d01368
.quad 0x3fe06f794ab2cae7, 0x3fec5701a484ef9d
.quad 0x3fe0a7ef5c18edd2, 0x3fec1efca49a5011
.quad 0x3fe0dff4f247f6c6, 0x3febe68728e29d5e
.quad 0x3fe1178930ada115, 0x3febada596f25436
.quad 0x3fe14eab43841b55, 0x3feb745c55905bf8
.quad 0x3fe1855a5fd3dd50, 0x3feb3aafcc27502e
.quad 0x3fe1bb95c3746199, 0x3feb00a46237d5be
.quad 0x3fe1f15cb50bc4de, 0x3feac63e7ecc1411
.quad 0x3fe226ae840d4d70, 0x3fea8b8287ec6a09
.quad 0x3fe25b8a88b6dd7f, 0x3fea5074e2157620
.quad 0x3fe28ff0240d52cd, 0x3fea1519efaf889e
.quad 0x3fe2c3debfd7d6c1, 0x3fe9d97610879642
.quad 0x3fe2f755ce9a21f4, 0x3fe99d8da149c13f
.quad 0x3fe32a54cb8db67b, 0x3fe96164fafd8de3
.quad 0x3fe35cdb3a9a144d, 0x3fe925007283d7aa
.quad 0x3fe38ee8a84beb71, 0x3fe8e86458169af8
.quad 0x3fe3c07ca9cb4f9e, 0x3fe8ab94f6caa71d
.quad 0x3fe3f196dcd0f135, 0x3fe86e9694134b9e
.quad 0x3fe42236e79a5fa6, 0x3fe8316d6f48133d
.quad 0x3fe4525c78dd5966, 0x3fe7f41dc12c9e89
.quad 0x3fe4820747ba2dc2, 0x3fe7b6abbb7aaf19
.quad 0x3fe4b13713ad3513, 0x3fe7791b886e7403
.quad 0x3fe4dfeba47f63cc, 0x3fe73b714a552763
.quad 0x3fe50e24ca35fd2c, 0x3fe6fdb11b1e0c34
.quad 0x3fe53be25d016a4f, 0x3fe6bfdf0beddaf5
.quad 0x3fe569243d2b3a9b, 0x3fe681ff24b4ab04
.quad 0x3fe595ea53035283, 0x3fe6441563c665d4
.quad 0x3fe5c2348ecc4dc3, 0x3fe60625bd75d07b
.quad 0x3fe5ee02e8a71a53, 0x3fe5c8341bb23767
.quad 0x3fe61955607dd15d, 0x3fe58a445da7c74c
.quad 0x3fe6442bfdedd397, 0x3fe54c5a57629db0
.quad 0x3fe66e86d0312e82, 0x3fe50e79d1749ac9
.quad 0x3fe69865ee075011, 0x3fe4d0a6889dfd9f
.quad 0x3fe6c1c9759d0e5f, 0x3fe492e42d78d2c5
.quad 0x3fe6eab18c74091b, 0x3fe4553664273d24
.quad 0x3fe7131e5f496a5a, 0x3fe417a0c4049fd0
.quad 0x3fe73b1021fc0cb8, 0x3fe3da26d759aef5
.quad 0x3fe762870f720c6f, 0x3fe39ccc1b136d5a
.quad 0x3fe78983697dc96f, 0x3fe35f93fe7d1b3d
.quad 0x3fe7b00578c26037, 0x3fe32281e2fd1a92
.quad 0x3fe7d60d8c979f7b, 0x3fe2e5991bd4cbfc
.quad 0x3fe7fb9bfaed8078, 0x3fe2a8dcede3673b
.quad 0x3fe820b1202f27fb, 0x3fe26c508f6bd0ff
.quad 0x3fe8454d5f25760d, 0x3fe22ff727dd6f7b
.quad 0x3fe8697120d92a4a, 0x3fe1f3d3cf9ffe5a
.quad 0x3fe88d1cd474a2e0, 0x3fe1b7e98fe26217
.quad 0x3fe8b050ef253c37, 0x3fe17c3b626c7a12
.quad 0x3fe8d30debfc572e, 0x3fe140cc3173f007
.quad 0x3fe8f5544bd00c04, 0x3fe1059ed7740313
.quad 0x3fe91724951b8fc6, 0x3fe0cab61f084b93
.quad 0x3fe9387f53df5238, 0x3fe09014c2ca74da
.quad 0x3fe959651980da31, 0x3fe055bd6d32e8d7
.quad 0x3fe979d67caa6631, 0x3fe01bb2b87c6968
.quad 0x3fe999d4192a5715, 0x3fdfc3ee5d1524b0
.quad 0x3fe9b95e8fd26aba, 0x3fdf511a91a67d2a
.quad 0x3fe9d8768656cc42, 0x3fdedeeee0959518
.quad 0x3fe9f71ca72cffb6, 0x3fde6d6ffaa65a25
.quad 0x3fea1551a16aaeaf, 0x3fddfca26f5bbf88
.quad 0x3fea331628a45b92, 0x3fdd8c8aace11e63
.quad 0x3fea506af4cc00f4, 0x3fdd1d2cfff91594
.quad 0x3fea6d50c20fa293, 0x3fdcae8d93f1d7b7
.quad 0x3fea89c850b7d54d, 0x3fdc40b0729ed548
.quad 0x3feaa5d265064366, 0x3fdbd3998457afdb
.quad 0x3feac16fc7143263, 0x3fdb674c8ffc6283
.quad 0x3feadca142b10f98, 0x3fdafbcd3afe8ab6
.quad 0x3feaf767a741088b, 0x3fda911f096fbc26
.quad 0x3feb11c3c79bb424, 0x3fda27455e14c93c
.quad 0x3feb2bb679ead19c, 0x3fd9be437a7de946
.quad 0x3feb4540978921ee, 0x3fd9561c7f23a47b
.quad 0x3feb5e62fce16095, 0x3fd8eed36b886d93
.quad 0x3feb771e894d602e, 0x3fd8886b1e5ecfd1
.quad 0x3feb8f741ef54f83, 0x3fd822e655b417e7
.quad 0x3feba764a2af2b78, 0x3fd7be47af1f5d89
.quad 0x3febbef0fbde6221, 0x3fd75a91a7f4d2ed
.quad 0x3febd61a1453ab44, 0x3fd6f7c69d7d3ef8
.quad 0x3febece0d82d1a5c, 0x3fd695e8cd31867e
.quad 0x3fec034635b66e23, 0x3fd634fa54fa285f
.quad 0x3fec194b1d49a184, 0x3fd5d4fd33729015
.quad 0x3fec2ef0812fc1bd, 0x3fd575f3483021c3
.quad 0x3fec443755820d64, 0x3fd517de540ce2a3
.quad 0x3fec5920900b5fd1, 0x3fd4babff975a04c
.quad 0x3fec6dad2829ec62, 0x3fd45e99bcbb7915
.quad 0x3fec81de16b14cef, 0x3fd4036d0468a7a2
.quad 0x3fec95b455cce69d, 0x3fd3a93b1998736c
.quad 0x3feca930e0e2a825, 0x3fd35005285227f1
.quad 0x3fecbc54b476248d, 0x3fd2f7cc3fe6f423
.quad 0x3feccf20ce0c0d27, 0x3fd2a09153529381
.quad 0x3fece1962c0e0d8b, 0x3fd24a55399ea239
.quad 0x3fecf3b5cdaf0c39, 0x3fd1f518ae487dc8
.quad 0x3fed0580b2cfd249, 0x3fd1a0dc51a9934d
.quad 0x3fed16f7dbe41ca0, 0x3fd14da0a961fd14
.quad 0x3fed281c49d818d0, 0x3fd0fb6620c550af
.quad 0x3fed38eefdf64fdd, 0x3fd0aa2d09497f2b
.quad 0x3fed4970f9ce00d9, 0x3fd059f59af7a906
.quad 0x3fed59a33f19ed42, 0x3fd00abff4dec7a3
.quad 0x3fed6986cfa798e7, 0x3fcf79183b101c5b
.quad 0x3fed791cad3eff01, 0x3fcedeb406d9c825
.quad 0x3fed8865d98abe01, 0x3fce4652fadcb6b2
.quad 0x3fed97635600bb89, 0x3fcdaff4969c0b04
.quad 0x3feda61623cb41e0, 0x3fcd1b982c501370
.quad 0x3fedb47f43b2980d, 0x3fcc893ce1dcbef7
.quad 0x3fedc29fb60715af, 0x3fcbf8e1b1ca2279
.quad 0x3fedd0787a8bb39d, 0x3fcb6a856c3ed54f
.quad 0x3fedde0a90611a0d, 0x3fcade26b7fbed95
.quad 0x3fedeb56f5f12d28, 0x3fca53c4135a6526
.quad 0x3fedf85ea8db188e, 0x3fc9cb5bd549b111
.quad 0x3fee0522a5dfda73, 0x3fc944ec2e4f5630
.quad 0x3fee11a3e8cf4eb8, 0x3fc8c07329874652
.quad 0x3fee1de36c75ba58, 0x3fc83deeada4d25a
.quad 0x3fee29e22a89d766, 0x3fc7bd5c7df3fe9c
.quad 0x3fee35a11b9b61ce, 0x3fc73eba3b5b07b7
.quad 0x3fee4121370224cc, 0x3fc6c205655be720
.quad 0x3fee4c6372cd8927, 0x3fc6473b5b15a7a1
.quad 0x3fee5768c3b4a3fc, 0x3fc5ce595c455b0a
.quad 0x3fee62321d06c5e0, 0x3fc5575c8a468362
.quad 0x3fee6cc0709c8a0d, 0x3fc4e241e912c305
.quad 0x3fee7714aec96534, 0x3fc46f066040a832
.quad 0x3fee812fc64db369, 0x3fc3fda6bc016994
.quad 0x3fee8b12a44944a8, 0x3fc38e1fae1d6a9d
.quad 0x3fee94be342e6743, 0x3fc3206dceef5f87
.quad 0x3fee9e335fb56f87, 0x3fc2b48d9e5dea1c
.quad 0x3feea7730ed0bbb9, 0x3fc24a7b84d38971
.quad 0x3feeb07e27a133aa, 0x3fc1e233d434b813
.quad 0x3feeb9558e6b42ce, 0x3fc17bb2c8d41535
.quad 0x3feec1fa258c4bea, 0x3fc116f48a6476cc
.quad 0x3feeca6ccd709544, 0x3fc0b3f52ce8c383
.quad 0x3feed2ae6489ac1e, 0x3fc052b0b1a174ea
.quad 0x3feedabfc7453e63, 0x3fbfe6460fef4680
.quad 0x3feee2a1d004692c, 0x3fbf2a901ccafb37
.quad 0x3feeea5557137ae0, 0x3fbe723726b824a9
.quad 0x3feef1db32a2277c, 0x3fbdbd32ac4c99b0
.quad 0x3feef93436bc2daa, 0x3fbd0b7a0f921e7c
.quad 0x3fef006135426b26, 0x3fbc5d0497c09e74
.quad 0x3fef0762fde45ee6, 0x3fbbb1c972f23e50
.quad 0x3fef0e3a5e1a1788, 0x3fbb09bfb7d11a84
.quad 0x3fef14e8211e8c55, 0x3fba64de673e8837
.quad 0x3fef1b6d0fea5f4d, 0x3fb9c31c6df3b1b8
.quad 0x3fef21c9f12f0677, 0x3fb92470a61b6965
.quad 0x3fef27ff89525acf, 0x3fb888d1d8e510a3
.quad 0x3fef2e0e9a6a8b09, 0x3fb7f036c0107294
.quad 0x3fef33f7e43a706b, 0x3fb75a96077274ba
.quad 0x3fef39bc242e43e6, 0x3fb6c7e64e7281cb
.quad 0x3fef3f5c1558b19e, 0x3fb6381e2980956b
.quad 0x3fef44d870704911, 0x3fb5ab342383d178
.quad 0x3fef4a31ebcd47df, 0x3fb5211ebf41880b
.quad 0x3fef4f693b67bd77, 0x3fb499d478bca735
.quad 0x3fef547f10d60597, 0x3fb4154bc68d75c3
.quad 0x3fef59741b4b97cf, 0x3fb3937b1b31925a
.quad 0x3fef5e4907982a07, 0x3fb31458e6542847
.quad 0x3fef62fe80272419, 0x3fb297db960e4f63
.quad 0x3fef67952cff6282, 0x3fb21df9981f8e53
.quad 0x3fef6c0db3c34641, 0x3fb1a6a95b1e786f
.quad 0x3fef7068b7b10fd9, 0x3fb131e14fa1625d
.quad 0x3fef74a6d9a38383, 0x3fb0bf97e95f2a64
.quad 0x3fef78c8b812d498, 0x3fb04fc3a0481321
.quad 0x3fef7cceef15d631, 0x3fafc4b5e32d6259
.quad 0x3fef80ba18636f07, 0x3faeeea8c1b1db94
.quad 0x3fef848acb544e95, 0x3fae1d4cf1e2450a
.quad 0x3fef88419ce4e184, 0x3fad508f9a1ea64f
.quad 0x3fef8bdf1fb78370, 0x3fac885df3451a07
.quad 0x3fef8f63e416ebff, 0x3fabc4a54a84e834
.quad 0x3fef92d077f8d56d, 0x3fab055303221015
.quad 0x3fef96256700da8e, 0x3faa4a549829587e
.quad 0x3fef99633a838a57, 0x3fa993979e14fffe
.quad 0x3fef9c8a7989af0d, 0x3fa8e109c4622913
.quad 0x3fef9f9ba8d3c733, 0x3fa83298d717210e
.quad 0x3fefa2974addae45, 0x3fa78832c03aa2b1
.quad 0x3fefa57ddfe27376, 0x3fa6e1c5893c380b
.quad 0x3fefa84fe5e05c8d, 0x3fa63f3f5c4de13b
.quad 0x3fefab0dd89d1309, 0x3fa5a08e85af27e0
.quad 0x3fefadb831a9f9c3, 0x3fa505a174e9c929
.quad 0x3fefb04f6868a944, 0x3fa46e66be002240
.quad 0x3fefb2d3f20f9101, 0x3fa3dacd1a8d8cce
.quad 0x3fefb54641aebbc9, 0x3fa34ac36ad8dafe
.quad 0x3fefb7a6c834b5a2, 0x3fa2be38b6d92415
.quad 0x3fefb9f5f4739170, 0x3fa2351c2f2d1449
.quad 0x3fefbc3433260ca5, 0x3fa1af5d2e04f3f6
.quad 0x3fefbe61eef4cf6a, 0x3fa12ceb37ff9bc3
.quad 0x3fefc07f907bc794, 0x3fa0adb5fcfa8c75
.quad 0x3fefc28d7e4f9cd0, 0x3fa031ad58d56279
.quad 0x3fefc48c1d033c7a, 0x3f9f7182a851bca2
.quad 0x3fefc67bcf2d7b8f, 0x3f9e85c449e377f3
.quad 0x3fefc85cf56ecd38, 0x3f9da0005e5f28df
.quad 0x3fefca2fee770c79, 0x3f9cc0180af00a8b
.quad 0x3fefcbf5170b578b, 0x3f9be5ecd2fcb5f9
.quad 0x3fefcdacca0bfb73, 0x3f9b1160991ff737
.quad 0x3fefcf57607a6e7c, 0x3f9a4255a00b9f03
.quad 0x3fefd0f5317f582f, 0x3f9978ae8b55ce1b
.quad 0x3fefd2869270a56f, 0x3f98b44e6031383e
.quad 0x3fefd40bd6d7a785, 0x3f97f5188610ddc8
.quad 0x3fefd58550773cb5, 0x3f973af0c737bb45
.quad 0x3fefd6f34f52013a, 0x3f9685bb5134ef13
.quad 0x3fefd85621b0876d, 0x3f95d55cb54cd53a
.quad 0x3fefd9ae142795e3, 0x3f9529b9e8cf9a1e
.quad 0x3fefdafb719e6a69, 0x3f9482b8455dc491
.quad 0x3fefdc3e835500b3, 0x3f93e03d891b37de
.quad 0x3fefdd7790ea5bc0, 0x3f93422fd6d12e2b
.quad 0x3fefdea6e062d0c9, 0x3f92a875b5ffab56
.quad 0x3fefdfccb62e52d3, 0x3f9212f612dee7fb
.quad 0x3fefe0e9552ebdd6, 0x3f9181983e5133dd
.quad 0x3fefe1fcfebe2083, 0x3f90f443edc5ce49
.quad 0x3fefe307f2b503d0, 0x3f906ae13b0d3255
.quad 0x3fefe40a6f70af4b, 0x3f8fcab1483ea7fc
.quad 0x3fefe504b1d9696c, 0x3f8ec72615a894c4
.quad 0x3fefe5f6f568b301, 0x3f8dcaf3691fc448
.quad 0x3fefe6e1742f7cf6, 0x3f8cd5ec93c12432
.quad 0x3fefe7c466dc57a1, 0x3f8be7e5ac24963b
.quad 0x3fefe8a004c19ae6, 0x3f8b00b38d6b3575
.quad 0x3fefe97483db8670, 0x3f8a202bd6372dce
.quad 0x3fefea4218d6594a, 0x3f894624e78e0faf
.quad 0x3fefeb08f7146046, 0x3f887275e3a6869e
.quad 0x3fefebc950b3fa75, 0x3f87a4f6aca256cb
.quad 0x3fefec835695932e, 0x3f86dd7fe3358230
.quad 0x3fefed37386190fb, 0x3f861beae53b72b7
.quad 0x3fefede5248e38f4, 0x3f856011cc3b036d
.quad 0x3fefee8d486585ee, 0x3f84a9cf6bda3f4c
.quad 0x3fefef2fd00af31a, 0x3f83f8ff5042a88e
.quad 0x3fefefcce6813974, 0x3f834d7dbc76d7e5
.quad 0x3feff064b5afffbe, 0x3f82a727a89a3f14
.quad 0x3feff0f766697c76, 0x3f8205dac02bd6b9
.quad 0x3feff18520700971, 0x3f81697560347b26
.quad 0x3feff20e0a7ba8c2, 0x3f80d1d69569b82d
.quad 0x3feff2924a3f7a83, 0x3f803ede1a45bfee
.quad 0x3feff312046f2339, 0x3f7f60d8aa2a88f2
.quad 0x3feff38d5cc4227f, 0x3f7e4cc4abf7d065
.quad 0x3feff404760319b4, 0x3f7d4143a9dfe965
.quad 0x3feff47772010262, 0x3f7c3e1a5f5c077c
.quad 0x3feff4e671a85425, 0x3f7b430ecf4a83a8
.quad 0x3feff55194fe19df, 0x3f7a4fe83fb9db25
.quad 0x3feff5b8fb26f5f6, 0x3f79646f35a76624
.quad 0x3feff61cc26c1578, 0x3f78806d70b2fc36
.quad 0x3feff67d08401202, 0x3f77a3ade6c8b3e5
.quad 0x3feff6d9e943c231, 0x3f76cdfcbfc1e263
.quad 0x3feff733814af88c, 0x3f75ff2750fe7820
.quad 0x3feff789eb6130c9, 0x3f7536fc18f7ce5c
.quad 0x3feff7dd41ce2b4d, 0x3f74754abacdf1dc
.quad 0x3feff82d9e1a76d8, 0x3f73b9e3f9d06e3f
.quad 0x3feff87b1913e853, 0x3f730499b503957f
.quad 0x3feff8c5cad200a5, 0x3f72553ee2a336bf
.quad 0x3feff90dcaba4096, 0x3f71aba78ba3af89
.quad 0x3feff9532f846ab0, 0x3f7107a8c7323a6e
.quad 0x3feff9960f3eb327, 0x3f706918b6355624
.quad 0x3feff9d67f51ddba, 0x3f6f9f9cfd9c3035
.quad 0x3feffa14948549a7, 0x3f6e77448fb66bb9
.quad 0x3feffa506302ebae, 0x3f6d58da68fd1170
.quad 0x3feffa89fe5b3625, 0x3f6c4412bf4b8f0b
.quad 0x3feffac17988ef4b, 0x3f6b38a3af2e55b4
.quad 0x3feffaf6e6f4f5c0, 0x3f6a3645330550ff
.quad 0x3feffb2a5879f35e, 0x3f693cb11a30d765
.quad 0x3feffb5bdf67fe6f, 0x3f684ba3004a50d0
.quad 0x3feffb8b8c88295f, 0x3f6762d84469c18f
.quad 0x3feffbb970200110, 0x3f66821000795a03
.quad 0x3feffbe599f4f9d9, 0x3f65a90b00981d93
.quad 0x3feffc10194fcb64, 0x3f64d78bba8ca5fd
.quad 0x3feffc38fcffbb7c, 0x3f640d564548fad7
.quad 0x3feffc60535dd7f5, 0x3f634a305080681f
.quad 0x3feffc862a501fd7, 0x3f628de11c5031eb
.quad 0x3feffcaa8f4c9bea, 0x3f61d83170fbf6fb
.quad 0x3feffccd8f5c66d1, 0x3f6128eb96be8798
.quad 0x3feffcef371ea4d7, 0x3f607fdb4dafea5f
.quad 0x3feffd0f92cb6ba7, 0x3f5fb99b8b8279e1
.quad 0x3feffd2eae369a07, 0x3f5e7f232d9e2630
.quad 0x3feffd4c94d29fdb, 0x3f5d4fed7195d7e8
.quad 0x3feffd6951b33686, 0x3f5c2b9cf7f893bf
.quad 0x3feffd84ef9009ee, 0x3f5b11d702b3deb2
.quad 0x3feffd9f78c7524a, 0x3f5a024365f771bd
.quad 0x3feffdb8f7605ee7, 0x3f58fc8c794b03b5
.quad 0x3feffdd1750e1220, 0x3f58005f08d6f1ef
.quad 0x3feffde8fb314ebf, 0x3f570d6a46e07dda
.quad 0x3feffdff92db56e5, 0x3f56235fbd7a4345
.quad 0x3feffe1544d01ccb, 0x3f5541f340697987
.quad 0x3feffe2a1988857c, 0x3f5468dadf4080ab
.quad 0x3feffe3e19349dc7, 0x3f5397ced7af2b15
.quad 0x3feffe514bbdc197, 0x3f52ce898809244e
.quad 0x3feffe63b8c8b5f7, 0x3f520cc76202c5fb
.quad 0x3feffe7567b7b5e1, 0x3f515246dda49d47
.quad 0x3feffe865fac722b, 0x3f509ec86c75d497
.quad 0x3feffe96a78a04a9, 0x3f4fe41cd9bb4eee
.quad 0x3feffea645f6d6da, 0x3f4e97ba3b77f306
.quad 0x3feffeb5415e7c44, 0x3f4d57f524723822
.quad 0x3feffec39ff380b9, 0x3f4c245d4b99847a
.quad 0x3feffed167b12ac2, 0x3f4afc85e0f82e12
.quad 0x3feffede9e5d3262, 0x3f49e005769dbc1d
.quad 0x3feffeeb49896c6d, 0x3f48ce75e9f6f8a0
.quad 0x3feffef76e956a9f, 0x3f47c7744d9378f7
.quad 0x3fefff0312b010b5, 0x3f46caa0d3582fe9
.quad 0x3fefff0e3ad91ec2, 0x3f45d79eb71e893b
.quad 0x3fefff18ebe2b0e1, 0x3f44ee1429bf7cc0
.quad 0x3fefff232a72b48e, 0x3f440daa3c89f5b6
.quad 0x3fefff2cfb0453d9, 0x3f43360ccd23db3a
.quad 0x3fefff3661e9569d, 0x3f4266ea71d4f71a
.quad 0x3fefff3f634b79f9, 0x3f419ff4663ae9df
.quad 0x3fefff48032dbe40, 0x3f40e0de78654d1e
.quad 0x3fefff50456dab8c, 0x3f40295ef6591848
.quad 0x3fefff582dc48d30, 0x3f3ef25d37f49fe1
.quad 0x3fefff5fbfc8a439, 0x3f3da01102b5f851
.quad 0x3fefff66feee5129, 0x3f3c5b5412dcafad
.quad 0x3fefff6dee89352e, 0x3f3b23a5a23e4210
.quad 0x3fefff7491cd4af6, 0x3f39f8893d8fd1c1
.quad 0x3fefff7aebcff755, 0x3f38d986a4187285
.quad 0x3fefff80ff8911fd, 0x3f37c629a822bc9e
.quad 0x3fefff86cfd3e657, 0x3f36be02102b3520
.quad 0x3fefff8c5f702ccf, 0x3f35c0a378c90bca
.quad 0x3fefff91b102fca8, 0x3f34cda5374ea275
.quad 0x3fefff96c717b695, 0x3f33e4a23d1f4703
.quad 0x3fefff9ba420e834, 0x3f330538fbb77ecd
.quad 0x3fefffa04a7928b1, 0x3f322f0b496539be
.quad 0x3fefffa4bc63ee9a, 0x3f3161be46ad3b50
.quad 0x3fefffa8fc0e5f33, 0x3f309cfa445b00ff
.quad 0x3fefffad0b901755, 0x3f2fc0d55470cf51
.quad 0x3fefffb0ecebee1b, 0x3f2e577bbcd49935
.quad 0x3fefffb4a210b172, 0x3f2cfd4a5adec5c0
.quad 0x3fefffb82cd9dcbf, 0x3f2bb1a9657ce465
.quad 0x3fefffbb8f1049c6, 0x3f2a740684026555
.quad 0x3fefffbeca6adbe9, 0x3f2943d4a1d1ed39
.quad 0x3fefffc1e08f25f5, 0x3f28208bc334a6a5
.quad 0x3fefffc4d3120aa1, 0x3f2709a8db59f25c
.quad 0x3fefffc7a37857d2, 0x3f25feada379d8b7
.quad 0x3fefffca53375ce3, 0x3f24ff207314a102
.quad 0x3fefffcce3b57bff, 0x3f240a8c1949f75e
.quad 0x3fefffcf564ab6b7, 0x3f23207fb7420eb9
.quad 0x3fefffd1ac4135f9, 0x3f22408e9ba3327f
.quad 0x3fefffd3e6d5cd87, 0x3f216a501f0e42ca
.quad 0x3fefffd607387b07, 0x3f209d5f819c9e29
.quad 0x3fefffd80e8ce0da, 0x3f1fb2b792b40a22
.quad 0x3fefffd9fdeabcce, 0x3f1e3bcf436a1a95
.quad 0x3fefffdbd65e5ad0, 0x3f1cd55277c18d05
.quad 0x3fefffdd98e903b2, 0x3f1b7e94604479dc
.quad 0x3fefffdf46816833, 0x3f1a36eec00926dd
.quad 0x3fefffe0e0140857, 0x3f18fdc1b2dcf7b9
.quad 0x3fefffe26683972a, 0x3f17d2737527c3f9
.quad 0x3fefffe3daa95b18, 0x3f16b4702d7d5849
.quad 0x3fefffe53d558ae9, 0x3f15a329b7d30748
.quad 0x3fefffe68f4fa777, 0x3f149e17724f4d41
.quad 0x3fefffe7d156d244, 0x3f13a4b60ba9aa4e
.quad 0x3fefffe904222101, 0x3f12b6875310f785
.quad 0x3fefffea2860ee1e, 0x3f11d312098e9dba
.quad 0x3fefffeb3ebb267b, 0x3f10f9e1b4dd36df
.quad 0x3fefffec47d19457, 0x3f102a8673a94692
.quad 0x3fefffed443e2787, 0x3f0ec929a665b449
.quad 0x3fefffee34943b15, 0x3f0d4f4b4c8e09ed
.quad 0x3fefffef1960d85d, 0x3f0be6abbb10a5aa
.quad 0x3fefffeff32af7af, 0x3f0a8e8cc1fadef6
.quad 0x3feffff0c273bea2, 0x3f094637d5bacfdb
.quad 0x3feffff187b6bc0e, 0x3f080cfdc72220cf
.quad 0x3feffff2436a21dc, 0x3f06e2367dc27f95
.quad 0x3feffff2f5fefcaa, 0x3f05c540b4936fd2
.quad 0x3feffff39fe16963, 0x3f04b581b8d170fc
.quad 0x3feffff44178c8d2, 0x3f03b2652b06c2b2
.quad 0x3feffff4db27f146, 0x3f02bb5cc22e5db6
.quad 0x3feffff56d4d5e5e, 0x3f01cfe010e2052d
.quad 0x3feffff5f8435efc, 0x3f00ef6c4c84a0fe
.quad 0x3feffff67c604180, 0x3f001984165a5f36
.quad 0x3feffff6f9f67e55, 0x3efe9b5e8d00ce77
.quad 0x3feffff77154e0d6, 0x3efd16f5716c6c1a
.quad 0x3feffff7e2c6aea2, 0x3efba4f035d60e03
.quad 0x3feffff84e93cd75, 0x3efa447b7b03f045
.quad 0x3feffff8b500e77c, 0x3ef8f4ccca7fc90d
.quad 0x3feffff9164f8e46, 0x3ef7b5223dac7336
.quad 0x3feffff972be5c59, 0x3ef684c227fcacef
.quad 0x3feffff9ca891572, 0x3ef562fac4329b48
.quad 0x3feffffa1de8c582, 0x3ef44f21e49054f2
.quad 0x3feffffa6d13de73, 0x3ef34894a5e24657
.quad 0x3feffffab83e54b8, 0x3ef24eb7254ccf83
.quad 0x3feffffaff99bac4, 0x3ef160f438c70913
.quad 0x3feffffb43555b5f, 0x3ef07ebd2a2d2844
.quad 0x3feffffb839e52f3, 0x3eef4f12e9ab070a
.quad 0x3feffffbc09fa7cd, 0x3eedb5ad0b27805c
.quad 0x3feffffbfa82616b, 0x3eec304efa2c6f4e
.quad 0x3feffffc316d9ed0, 0x3eeabe09e9144b5e
.quad 0x3feffffc6586abf6, 0x3ee95df988e76644
.quad 0x3feffffc96f1165e, 0x3ee80f439b4ee04b
.quad 0x3feffffcc5cec0c1, 0x3ee6d11788a69c64
.quad 0x3feffffcf23ff5fc, 0x3ee5a2adfa0b4bc4
.quad 0x3feffffd1c637b2b, 0x3ee4834877429b8f
.quad 0x3feffffd4456a10d, 0x3ee37231085c7d9a
.quad 0x3feffffd6a3554a1, 0x3ee26eb9daed6f7e
.quad 0x3feffffd8e1a2f22, 0x3ee1783ceac28910
.quad 0x3feffffdb01e8546, 0x3ee08e1badf0fced
.quad 0x3feffffdd05a75ea, 0x3edf5f7d88472604
.quad 0x3feffffdeee4f810, 0x3eddb92b5212fb8d
.quad 0x3feffffe0bd3e852, 0x3edc282cd3957eda
.quad 0x3feffffe273c15b7, 0x3edaab7abace48dc
.quad 0x3feffffe41314e06, 0x3ed94219bfcb4928
.quad 0x3feffffe59c6698b, 0x3ed7eb1a2075864e
.quad 0x3feffffe710d565e, 0x3ed6a597219a93da
.quad 0x3feffffe8717232d, 0x3ed570b69502f313
.quad 0x3feffffe9bf4098c, 0x3ed44ba864670882
.quad 0x3feffffeafb377d5, 0x3ed335a62115bce2
.quad 0x3feffffec2641a9e, 0x3ed22df298214423
.quad 0x3feffffed413e5b7, 0x3ed133d96ae7e0dd
.quad 0x3feffffee4d01cd6, 0x3ed046aeabcfcdec
.quad 0x3feffffef4a55bd4, 0x3ececb9cfe1d8642
.quad 0x3fefffff039f9e8f, 0x3ecd21397ead99cb
.quad 0x3fefffff11ca4876, 0x3ecb8d094c86d374
.quad 0x3fefffff1f302bc1, 0x3eca0df0f0c626dc
.quad 0x3fefffff2bdb904d, 0x3ec8a2e269750a39
.quad 0x3fefffff37d63a36, 0x3ec74adc8f4064d3
.quad 0x3fefffff43297019, 0x3ec604ea819f007c
.quad 0x3fefffff4dde0118, 0x3ec4d0231928c6f9
.quad 0x3fefffff57fc4a95, 0x3ec3aba85fe22e20
.quad 0x3fefffff618c3da6, 0x3ec296a70f414053
.quad 0x3fefffff6a956450, 0x3ec1905613b3abf2
.quad 0x3fefffff731ee681, 0x3ec097f6156f32c5
.quad 0x3fefffff7b2f8ed6, 0x3ebf59a20caf6695
.quad 0x3fefffff82cdcf1b, 0x3ebd9c73698fb1dc
.quad 0x3fefffff89ffc4aa, 0x3ebbf716c6168bae
.quad 0x3fefffff90cb3c81, 0x3eba6852c6b58392
.quad 0x3fefffff9735b73b, 0x3eb8eefd70594a89
.quad 0x3fefffff9d446ccc, 0x3eb789fb715aae95
.quad 0x3fefffffa2fc5015, 0x3eb6383f726a8e04
.quad 0x3fefffffa8621251, 0x3eb4f8c96f26a26a
.quad 0x3fefffffad7a2652, 0x3eb3caa61607f920
.quad 0x3fefffffb248c39d, 0x3eb2acee2f5ecdb8
.quad 0x3fefffffb6d1e95d, 0x3eb19ec60b1242ed
.quad 0x3fefffffbb196132, 0x3eb09f5cf4dd2877
.quad 0x3fefffffbf22c1e2, 0x3eaf5bd95d8730d8
.quad 0x3fefffffc2f171e3, 0x3ead9371e2ff7c35
.quad 0x3fefffffc688a9cf, 0x3eabe41de54d155a
.quad 0x3fefffffc9eb76ac, 0x3eaa4c89e08ef4f3
.quad 0x3fefffffcd1cbc28, 0x3ea8cb738399b12c
.quad 0x3fefffffd01f36af, 0x3ea75fa8dbc84bec
.quad 0x3fefffffd2f57d68, 0x3ea608078a70dcbc
.quad 0x3fefffffd5a2041f, 0x3ea4c37c0394d094
.quad 0x3fefffffd8271d12, 0x3ea39100d5687bfe
.quad 0x3fefffffda86faa9, 0x3ea26f9df8519bd7
.quad 0x3fefffffdcc3b117, 0x3ea15e6827001f18
.quad 0x3fefffffdedf37ed, 0x3ea05c803e4831c1
.quad 0x3fefffffe0db6b91, 0x3e9ed22548cffd35
.quad 0x3fefffffe2ba0ea5, 0x3e9d06ad6ecdf971
.quad 0x3fefffffe47ccb60, 0x3e9b551c847fbc96
.quad 0x3fefffffe62534d4, 0x3e99bc09f112b494
.quad 0x3fefffffe7b4c81e, 0x3e983a1ff0aa239d
.quad 0x3fefffffe92ced93, 0x3e96ce1aa3fd7bdd
.quad 0x3fefffffea8ef9cf, 0x3e9576c72b514859
.quad 0x3fefffffebdc2ec6, 0x3e943302cc4a0da8
.quad 0x3fefffffed15bcba, 0x3e9301ba221dc9bb
.quad 0x3fefffffee3cc32c, 0x3e91e1e857adc568
.quad 0x3fefffffef5251c2, 0x3e90d2966b1746f7
.quad 0x3feffffff0576917, 0x3e8fa5b4f49cc6b2
.quad 0x3feffffff14cfb92, 0x3e8dc3ae30b55c16
.quad 0x3feffffff233ee1d, 0x3e8bfd7555a3bd68
.quad 0x3feffffff30d18e8, 0x3e8a517d9e61628a
.quad 0x3feffffff3d9480f, 0x3e88be4f8f6c951f
.quad 0x3feffffff4993c46, 0x3e874287ded49339
.quad 0x3feffffff54dab72, 0x3e85dcd669f2cd34
.quad 0x3feffffff5f74141, 0x3e848bfd38302871
.quad 0x3feffffff6969fb8, 0x3e834ecf8a3c124a
.quad 0x3feffffff72c5fb6, 0x3e822430f521cbcf
.quad 0x3feffffff7b91176, 0x3e810b1488aeb235
.quad 0x3feffffff83d3d07, 0x3e80027c00a263a6
.quad 0x3feffffff8b962be, 0x3e7e12ee004efc37
.quad 0x3feffffff92dfba2, 0x3e7c3e44ae32b16b
.quad 0x3feffffff99b79d2, 0x3e7a854ea14102a8
.quad 0x3feffffffa0248e8, 0x3e78e6761569f45d
.quad 0x3feffffffa62ce54, 0x3e77603bac345f65
.quad 0x3feffffffabd69b4, 0x3e75f1353cdad001
.quad 0x3feffffffb127525, 0x3e74980cb3c80949
.quad 0x3feffffffb624592, 0x3e73537f00b6ad4d
.quad 0x3feffffffbad2aff, 0x3e72225b12bffc68
.quad 0x3feffffffbf370cd, 0x3e710380e1adb7e9
.quad 0x3feffffffc355dfd, 0x3e6febc107d5efaa
.quad 0x3feffffffc733572, 0x3e6df0f2a0ee6947
.quad 0x3feffffffcad3626, 0x3e6c14b2188bcee4
.quad 0x3feffffffce39b67, 0x3e6a553644f7f07d
.quad 0x3feffffffd169d0c, 0x3e68b0cfce0579e0
.quad 0x3feffffffd466fa5, 0x3e6725e7c5dd20f7
.quad 0x3feffffffd7344aa, 0x3e65b2fe547a1340
.quad 0x3feffffffd9d4aab, 0x3e6456a974e92e93
.quad 0x3feffffffdc4ad7a, 0x3e630f93c3699078
.quad 0x3feffffffde9964e, 0x3e61dc7b5b978cf8
.quad 0x3feffffffe0c2bf0, 0x3e60bc30c5d52f15
.quad 0x3feffffffe2c92db, 0x3e5f5b2be65a0c7f
.quad 0x3feffffffe4aed5e, 0x3e5d5f3a8dea7357
.quad 0x3feffffffe675bbd, 0x3e5b82915b03515b
.quad 0x3feffffffe81fc4e, 0x3e59c3517e789488
.quad 0x3feffffffe9aeb97, 0x3e581fb7df06136e
.quad 0x3feffffffeb24467, 0x3e56961b8d641d06
.quad 0x3feffffffec81ff2, 0x3e5524ec4d916cae
.quad 0x3feffffffedc95e7, 0x3e53cab1343d18d1
.quad 0x3feffffffeefbc85, 0x3e52860757487a01
.quad 0x3fefffffff01a8b6, 0x3e5155a09065d4f7
.quad 0x3fefffffff126e1e, 0x3e50384250e4c9fc
.quad 0x3fefffffff221f30, 0x3e4e59890b926c78
.quad 0x3fefffffff30cd3f, 0x3e4c642116a8a9e3
.quad 0x3fefffffff3e8892, 0x3e4a8e405e651ab6
.quad 0x3fefffffff4b606f, 0x3e48d5f98114f872
.quad 0x3fefffffff57632d, 0x3e47397c5a66e307
.quad 0x3fefffffff629e44, 0x3e45b71456c5a4c4
.quad 0x3fefffffff6d1e56, 0x3e444d26de513197
.quad 0x3fefffffff76ef3f, 0x3e42fa31d6371537
.quad 0x3fefffffff801c1f, 0x3e41bcca373b7b43
.quad 0x3fefffffff88af67, 0x3e40939ab853339f
.quad 0x3fefffffff90b2e3, 0x3e3efac5187b2863
.quad 0x3fefffffff982fc1, 0x3e3cf1e86235d0e7
.quad 0x3fefffffff9f2e9f, 0x3e3b0a68a2128bab
.quad 0x3fefffffffa5b790, 0x3e39423165bc4444
.quad 0x3fefffffffabd229, 0x3e37974e743dea3d
.quad 0x3fefffffffb18582, 0x3e3607e9eacd1050
.quad 0x3fefffffffb6d844, 0x3e34924a74dec729
.quad 0x3fefffffffbbd0aa, 0x3e3334d19e0c2160
.quad 0x3fefffffffc0748f, 0x3e31edfa3c5f5cca
.quad 0x3fefffffffc4c96c, 0x3e30bc56f1b54701
.quad 0x3fefffffffc8d462, 0x3e2f3d2185e047d9
.quad 0x3fefffffffcc9a41, 0x3e2d26cb87945e87
.quad 0x3fefffffffd01f89, 0x3e2b334fac4b9f99
.quad 0x3fefffffffd36871, 0x3e296076f7918d1c
.quad 0x3fefffffffd678ed, 0x3e27ac2d72fc2c63
.quad 0x3fefffffffd954ae, 0x3e2614801550319e
.quad 0x3fefffffffdbff2a, 0x3e24979ac8b28927
.quad 0x3fefffffffde7ba0, 0x3e2333c68e2d0548
.quad 0x3fefffffffe0cd16, 0x3e21e767bce37dd7
.quad 0x3fefffffffe2f664, 0x3e20b0fc5b6d05a0
.quad 0x3fefffffffe4fa30, 0x3e1f1e3523b41d7d
.quad 0x3fefffffffe6daf7, 0x3e1d00de6608effe
.quad 0x3fefffffffe89b0c, 0x3e1b0778b7b3301b
.quad 0x3fefffffffea3c9a, 0x3e192fb04ec0f6cf
.quad 0x3fefffffffebc1a9, 0x3e177756ec9f78fa
.quad 0x3fefffffffed2c21, 0x3e15dc61922d5a06
.quad 0x3fefffffffee7dc8, 0x3e145ce65699ff6d
.quad 0x3fefffffffefb847, 0x3e12f71a5f159970
.quad 0x3feffffffff0dd2b, 0x3e11a94ff571654f
.quad 0x3feffffffff1ede9, 0x3e1071f4bbea09ec
.quad 0x3feffffffff2ebda, 0x3e0e9f1ff8ddd774
.quad 0x3feffffffff3d843, 0x3e0c818223a202c7
.quad 0x3feffffffff4b453, 0x3e0a887bd2b4404d
.quad 0x3feffffffff58126, 0x3e08b1a336c5eb6b
.quad 0x3feffffffff63fc3, 0x3e06fab63324088a
.quad 0x3feffffffff6f121, 0x3e056197e30205ba
.quad 0x3feffffffff79626, 0x3e03e44e45301b92
.quad 0x3feffffffff82fab, 0x3e0281000bfe4c3f
.quad 0x3feffffffff8be77, 0x3e0135f28f2d50b4
.quad 0x3feffffffff94346, 0x3e000187dded5975
.quad 0x3feffffffff9bec8, 0x3dfdc479de0ef001
.quad 0x3feffffffffa319f, 0x3dfbad4fdad3caa1
.quad 0x3feffffffffa9c63, 0x3df9baed3ed27ab8
.quad 0x3feffffffffaffa4, 0x3df7ead9ce4285bb
.quad 0x3feffffffffb5be5, 0x3df63ac6b4edc88e
.quad 0x3feffffffffbb1a2, 0x3df4a88be2a6390c
.quad 0x3feffffffffc014e, 0x3df332259185f1a0
.quad 0x3feffffffffc4b56, 0x3df1d5b1f3793044
.quad 0x3feffffffffc901c, 0x3df0916f04b6e18b
.quad 0x3feffffffffccfff, 0x3deec77101de6926
.quad 0x3feffffffffd0b56, 0x3dec960bf23153e0
.quad 0x3feffffffffd4271, 0x3dea8bd20fc65ef7
.quad 0x3feffffffffd759d, 0x3de8a61745ec7d1d
.quad 0x3feffffffffda520, 0x3de6e25d0e756261
.quad 0x3feffffffffdd13c, 0x3de53e4f7d1666cb
.quad 0x3feffffffffdfa2d, 0x3de3b7c27a7ddb0e
.quad 0x3feffffffffe202d, 0x3de24caf2c32af14
.quad 0x3feffffffffe4371, 0x3de0fb3186804d0f
.quad 0x3feffffffffe642a, 0x3ddf830c0bb41fd7
.quad 0x3feffffffffe8286, 0x3ddd3c0f1a91c846
.quad 0x3feffffffffe9eb0, 0x3ddb1e5acf351d87
.quad 0x3feffffffffeb8d0, 0x3dd92712d259ce66
.quad 0x3feffffffffed10a, 0x3dd7538c60a04476
.quad 0x3feffffffffee782, 0x3dd5a14b04b47879
.quad 0x3feffffffffefc57, 0x3dd40dfd87456f4c
.quad 0x3fefffffffff0fa7, 0x3dd2977b1172b9d5
.quad 0x3fefffffffff218f, 0x3dd13bc07e891491
.quad 0x3fefffffffff3227, 0x3dcff1dbb4300811
.quad 0x3fefffffffff4188, 0x3dcd9a880f306bd8
.quad 0x3fefffffffff4fc9, 0x3dcb6e45220b55e0
.quad 0x3fefffffffff5cfd, 0x3dc96a0b33f2c4da
.quad 0x3fefffffffff6939, 0x3dc78b07e9e924ac
.quad 0x3fefffffffff748e, 0x3dc5ce9ab1670dd2
.quad 0x3fefffffffff7f0d, 0x3dc4325167006bb0
.quad 0x3fefffffffff88c5, 0x3dc2b3e53538ff3f
.quad 0x3fefffffffff91c6, 0x3dc15137a7f44864
.quad 0x3fefffffffff9a1b, 0x3dc0084ff125639d
.quad 0x3fefffffffffa1d2, 0x3dbdaeb0b7311ec7
.quad 0x3fefffffffffa8f6, 0x3dbb7937d1c40c53
.quad 0x3fefffffffffaf92, 0x3db96d082f59ab06
.quad 0x3fefffffffffb5b0, 0x3db7872d9fa10aad
.quad 0x3fefffffffffbb58, 0x3db5c4e8e37bc7d0
.quad 0x3fefffffffffc095, 0x3db423ac0df49a40
.quad 0x3fefffffffffc56d, 0x3db2a117230ad284
.quad 0x3fefffffffffc9e8, 0x3db13af4f04f9998
.quad 0x3fefffffffffce0d, 0x3dafde703724e560
.quad 0x3fefffffffffd1e1, 0x3dad77f0c82e7641
.quad 0x3fefffffffffd56c, 0x3dab3ee02611d7dd
.quad 0x3fefffffffffd8b3, 0x3da92ff33023d5bd
.quad 0x3fefffffffffdbba, 0x3da7481a9e69f53f
.quad 0x3fefffffffffde86, 0x3da5847eda620959
.quad 0x3fefffffffffe11d, 0x3da3e27c1fcc74bd
.quad 0x3fefffffffffe380, 0x3da25f9ee0b923dc
.quad 0x3fefffffffffe5b6, 0x3da0f9a068653200
.quad 0x3fefffffffffe7c0, 0x3d9f5cc7718082b0
.quad 0x3fefffffffffe9a2, 0x3d9cf7e53d6a2ca5
.quad 0x3fefffffffffeb60, 0x3d9ac0f5f3229372
.quad 0x3fefffffffffecfb, 0x3d98b498644847ea
.quad 0x3fefffffffffee77, 0x3d96cfa9bcca59dc
.quad 0x3fefffffffffefd6, 0x3d950f411d4fd2cd
.quad 0x3feffffffffff11a, 0x3d9370ab8327af5e
.quad 0x3feffffffffff245, 0x3d91f167f88c6b6e
.quad 0x3feffffffffff359, 0x3d908f24085d4597
.quad 0x3feffffffffff457, 0x3d8e8f70e181d61a
.quad 0x3feffffffffff542, 0x3d8c324c20e337dc
.quad 0x3feffffffffff61b, 0x3d8a03261574b54e
.quad 0x3feffffffffff6e3, 0x3d87fe903cdf5855
.quad 0x3feffffffffff79b, 0x3d86215c58da3450
.quad 0x3feffffffffff845, 0x3d846897d4b69fc6
.quad 0x3feffffffffff8e2, 0x3d82d1877d731b7b
.quad 0x3feffffffffff973, 0x3d8159a386b11517
.quad 0x3feffffffffff9f8, 0x3d7ffd27ae9393ce
.quad 0x3feffffffffffa73, 0x3d7d7c593130dd0b
.quad 0x3feffffffffffae4, 0x3d7b2cd607c79bcf
.quad 0x3feffffffffffb4c, 0x3d790ae4d3405651
.quad 0x3feffffffffffbad, 0x3d771312dd1759e2
.quad 0x3feffffffffffc05, 0x3d75422ef5d8949d
.quad 0x3feffffffffffc57, 0x3d739544b0ecc957
.quad 0x3feffffffffffca2, 0x3d720997f73e73dd
.quad 0x3feffffffffffce7, 0x3d709ca0eaacd277
.quad 0x3feffffffffffd27, 0x3d6e9810295890ec
.quad 0x3feffffffffffd62, 0x3d6c2b45b5aa4a1d
.quad 0x3feffffffffffd98, 0x3d69eee068fa7596
.quad 0x3feffffffffffdca, 0x3d67df2b399c10a8
.quad 0x3feffffffffffdf8, 0x3d65f8b87a31bd85
.quad 0x3feffffffffffe22, 0x3d64385c96e9a2d9
.quad 0x3feffffffffffe49, 0x3d629b2933ef4cbc
.quad 0x3feffffffffffe6c, 0x3d611e68a6378f8a
.quad 0x3feffffffffffe8d, 0x3d5f7f338086a86b
.quad 0x3feffffffffffeab, 0x3d5cf8d7d9ce040a
.quad 0x3feffffffffffec7, 0x3d5aa577251ae485
.quad 0x3feffffffffffee1, 0x3d58811d739efb5f
.quad 0x3feffffffffffef8, 0x3d568823e52970be
.quad 0x3fefffffffffff0e, 0x3d54b72ae68e8b4c
.quad 0x3fefffffffffff22, 0x3d530b14dbe876bc
.quad 0x3fefffffffffff34, 0x3d5181012ef86610
.quad 0x3fefffffffffff45, 0x3d501647ba798745
.quad 0x3fefffffffffff54, 0x3d4d90e917701675
.quad 0x3fefffffffffff62, 0x3d4b2a87e86d0c8a
.quad 0x3fefffffffffff6f, 0x3d48f53dcb377293
.quad 0x3fefffffffffff7b, 0x3d46ed2f2515e933
.quad 0x3fefffffffffff86, 0x3d450ecc9ed47f19
.quad 0x3fefffffffffff90, 0x3d4356cd5ce7799e
.quad 0x3fefffffffffff9a, 0x3d41c229a587ab78
.quad 0x3fefffffffffffa2, 0x3d404e15ecc7f3f6
.quad 0x3fefffffffffffaa, 0x3d3deffc7e6a6017
.quad 0x3fefffffffffffb1, 0x3d3b7b040832f310
.quad 0x3fefffffffffffb8, 0x3d3938e021f36d76
.quad 0x3fefffffffffffbe, 0x3d37258610b3b233
.quad 0x3fefffffffffffc3, 0x3d353d3bfc82a909
.quad 0x3fefffffffffffc8, 0x3d337c92babdc2fd
.quad 0x3fefffffffffffcd, 0x3d31e06010120f6a
.quad 0x3fefffffffffffd1, 0x3d3065b9616170d4
.quad 0x3fefffffffffffd5, 0x3d2e13dd96b3753b
.quad 0x3fefffffffffffd9, 0x3d2b950d32467392
.quad 0x3fefffffffffffdc, 0x3d294a72263259a5
.quad 0x3fefffffffffffdf, 0x3d272fd93e036cdc
.quad 0x3fefffffffffffe2, 0x3d254164576929ab
.quad 0x3fefffffffffffe4, 0x3d237b83c521fe96
.quad 0x3fefffffffffffe7, 0x3d21daf033182e96
.quad 0x3fefffffffffffe9, 0x3d205ca50205d26a
.quad 0x3fefffffffffffeb, 0x3d1dfbb6235639fa
.quad 0x3fefffffffffffed, 0x3d1b7807e294781f
.quad 0x3fefffffffffffee, 0x3d19298add70a734
.quad 0x3feffffffffffff0, 0x3d170beaf9c7ffb6
.quad 0x3feffffffffffff1, 0x3d151b2cd6709222
.quad 0x3feffffffffffff3, 0x3d1353a6cf7f7fff
.quad 0x3feffffffffffff4, 0x3d11b1fa8cbe84a7
.quad 0x3feffffffffffff5, 0x3d10330f0fd69921
.quad 0x3feffffffffffff6, 0x3d0da81670f96f9b
.quad 0x3feffffffffffff7, 0x3d0b24a16b4d09aa
.quad 0x3feffffffffffff7, 0x3d08d6eeb6efdbd6
.quad 0x3feffffffffffff8, 0x3d06ba91ac734786
.quad 0x3feffffffffffff9, 0x3d04cb7966770ab5
.quad 0x3feffffffffffff9, 0x3d0305e9721d0981
.quad 0x3feffffffffffffa, 0x3d01667311fff70a
.quad 0x3feffffffffffffb, 0x3cffd3de10d62855
.quad 0x3feffffffffffffb, 0x3cfd1aefbcd48d0c
.quad 0x3feffffffffffffb, 0x3cfa9cc93c25aca9
.quad 0x3feffffffffffffc, 0x3cf85487ee3ea735
.quad 0x3feffffffffffffc, 0x3cf63daf8b4b1e0c
.quad 0x3feffffffffffffd, 0x3cf45421e69a6ca1
.quad 0x3feffffffffffffd, 0x3cf294175802d99a
.quad 0x3feffffffffffffd, 0x3cf0fa17bf41068f
.quad 0x3feffffffffffffd, 0x3cef05e82aae2bb9
.quad 0x3feffffffffffffe, 0x3cec578101b29058
.quad 0x3feffffffffffffe, 0x3ce9e39dc5dd2f7c
.quad 0x3feffffffffffffe, 0x3ce7a553a728bbf2
.quad 0x3feffffffffffffe, 0x3ce5982008db1304
.quad 0x3feffffffffffffe, 0x3ce3b7e00422e51b
.quad 0x3feffffffffffffe, 0x3ce200c898d9ee3e
.quad 0x3fefffffffffffff, 0x3ce06f5f7eb65a56
.quad 0x3fefffffffffffff, 0x3cde00e9148a1d25
.quad 0x3fefffffffffffff, 0x3cdb623734024e92
.quad 0x3fefffffffffffff, 0x3cd8fd4e01891bf8
.quad 0x3fefffffffffffff, 0x3cd6cd44c7470d89
.quad 0x3fefffffffffffff, 0x3cd4cd9c04158cd7
.quad 0x3fefffffffffffff, 0x3cd2fa34bf5c8344
.quad 0x3fefffffffffffff, 0x3cd14f4890ff2461
.quad 0x3fefffffffffffff, 0x3ccf92c49dfa4df5
.quad 0x3fefffffffffffff, 0x3ccccaaea71ab0df
.quad 0x3fefffffffffffff, 0x3cca40829f001197
.quad 0x3ff0000000000000, 0x3cc7eef13b59e96c
.quad 0x3ff0000000000000, 0x3cc5d11e1a252bf5
.quad 0x3ff0000000000000, 0x3cc3e296303b2297
.quad 0x3ff0000000000000, 0x3cc21f47009f43ce
.quad 0x3ff0000000000000, 0x3cc083768c5e4542
.quad 0x3ff0000000000000, 0x3cbe1777d831265f
.quad 0x3ff0000000000000, 0x3cbb69f10b0191b5
.quad 0x3ff0000000000000, 0x3cb8f8a3a05b5b53
.quad 0x3ff0000000000000, 0x3cb6be573c40c8e7
.quad 0x3ff0000000000000, 0x3cb4b645ba991fdb
.align 16
.quad 0x7fffffffffffffff, 0x7fffffffffffffff /* _AbsMask */
.align 16
.quad 0x4017f80000000000, 0x4017f80000000000 /* _MaxThreshold = 6.0 - 1.0/128.0 */
.align 16
.quad 0x42c0000000000000, 0x42c0000000000000 /* SRound */
.align 16
.quad 0x2ff0000000000000, 0x2ff0000000000000 /* _U2THreshold */
.align 16
.quad 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5 /* _poly_1_0 */
.align 16
.quad 0x3fc1111235a363b1, 0x3fc1111235a363b1 /* _poly_1_1 */
.align 16
.quad 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57 /* _poly_3_0 */
.align 16
.quad 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8 /* _poly_3_1 */
.align 16
.quad 0xbfc5555800001B4F, 0xbfc5555800001B4F /* _poly_5_0 */
.align 16
.quad 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122 /* _poly_5_1 */
.align 16
.quad 0xbfd55555555547f6, 0xbfd55555555547f6 /* _poly_1_2 */
.align 16
.quad 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd /* _poly_3_2 */
.align 16
.quad 0x3fe5555555554b0c, 0x3fe5555555554b0c /* _poly_1_3 */
.align 16
.quad 0xbfd5555555555555, 0xbfd5555555555555 /* _poly_3_3 */
.align 16
.type __svml_derf_data_internal,@object
.size __svml_derf_data_internal,.-__svml_derf_data_internal

View File

@ -0,0 +1,20 @@
/* SSE version of vectorized erf, 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_erf _ZGVdN4v_erf_sse_wrapper
#include "../svml_d_erf4_core.S"

View File

@ -0,0 +1,27 @@
/* Multiple versions of vectorized erf, 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_erf
#include "ifunc-mathvec-avx2.h"
libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
#ifdef SHARED
__hidden_ver1 (_ZGVdN4v_erf, __GI__ZGVdN4v_erf, __redirect__ZGVdN4v_erf)
__attribute__ ((visibility ("hidden")));
#endif

View File

@ -0,0 +1,984 @@
/* Function erf 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:
*
* Basic formula is
* erf(x) ~ erf(x0) +
* + exp(-x0*x0)*D*(1+c0+T*P1(T)+D^2*P3(T)+D^4*P5(T)+D^6*p7+D^8*p9)
* where D=x-x0, T=x0*D
* x0 is x rounded to a specified number of fractional bits (in this case 7),
* except that x0=0 for |x|<3.5/128.0 (using x0=0 for first 4 table entries)
*
* Data table packs both erf(x0)_high and a few bits of erf(x0)_low in one
* entry (in place of redundant exponent bits)
*
*/
/* Offsets for data table __svml_derf_data_internal
*/
#define _erf_tbl 0
#define _AbsMask 12288
#define _MaxThreshold 12320
#define _SRound 12352
#define _U2Threshold 12384
#define _poly1_0 12416
#define _poly1_1 12448
#define _poly3_0 12480
#define _poly3_1 12512
#define _poly5_0 12544
#define _poly5_1 12576
#define _poly1_2 12608
#define _poly3_2 12640
#define _poly1_3 12672
#define _poly3_3 12704
#define _Mask32 12736
#include <sysdep.h>
.text
.section .text.avx2,"ax",@progbits
ENTRY(_ZGVdN4v_erf_avx2)
/*
* vector gather: erf(x0),
* second value is exp(-x0*x0)
*/
lea __svml_derf_data_internal(%rip), %rdi
vmovupd _SRound+__svml_derf_data_internal(%rip), %ymm6
vandpd _AbsMask+__svml_derf_data_internal(%rip), %ymm0, %ymm5
/*
* erf(x) rounds to 1.0 for x>_MaxThreshold (5.9921875)
* can compute all results in the main path
*/
vminpd _MaxThreshold+__svml_derf_data_internal(%rip), %ymm5, %ymm7
vaddpd %ymm6, %ymm7, %ymm10
vcmpgt_oqpd _U2Threshold+__svml_derf_data_internal(%rip), %ymm7, %ymm9
vpsllq $4, %ymm10, %ymm11
vsubpd %ymm6, %ymm10, %ymm8
vandps _Mask32+__svml_derf_data_internal(%rip), %ymm11, %ymm12
vsubpd %ymm8, %ymm7, %ymm3
vmulpd %ymm3, %ymm8, %ymm2
vandpd %ymm9, %ymm3, %ymm1
/* NaN fixup */
vminpd %ymm5, %ymm3, %ymm3
/* save sign */
vxorpd %ymm0, %ymm5, %ymm4
/* T^2 */
vmulpd %ymm2, %ymm2, %ymm5
vextractf128 $1, %ymm12, %xmm13
vmovd %xmm12, %eax
vmovd %xmm13, %ecx
vpextrd $2, %xmm12, %edx
vpextrd $2, %xmm13, %esi
movslq %eax, %rax
movslq %edx, %rdx
movslq %ecx, %rcx
movslq %esi, %rsi
/* Sign | Diff */
vxorpd %ymm4, %ymm3, %ymm12
/*
* _LA_ polynomial computation
* Start polynomial evaluation
*/
vmovupd _poly1_0+__svml_derf_data_internal(%rip), %ymm3
vmovupd (%rdi,%rax), %xmm6
vmovupd (%rdi,%rdx), %xmm7
vmovupd (%rdi,%rcx), %xmm8
vmovupd (%rdi,%rsi), %xmm9
vunpcklpd %xmm7, %xmm6, %xmm14
vunpcklpd %xmm9, %xmm8, %xmm15
/* D2 = Diff^2 */
vmulpd %ymm1, %ymm1, %ymm13
vfmadd213pd _poly1_1+__svml_derf_data_internal(%rip), %ymm2, %ymm3
vmovupd _poly5_0+__svml_derf_data_internal(%rip), %ymm1
vunpckhpd %xmm9, %xmm8, %xmm10
vfmadd213pd _poly1_2+__svml_derf_data_internal(%rip), %ymm2, %ymm3
vfmadd213pd _poly5_1+__svml_derf_data_internal(%rip), %ymm2, %ymm1
vfmadd213pd _poly1_3+__svml_derf_data_internal(%rip), %ymm2, %ymm3
vfmadd213pd _poly3_3+__svml_derf_data_internal(%rip), %ymm13, %ymm1
/* P1 = T^2*P1 - T */
vfmsub213pd %ymm2, %ymm5, %ymm3
vinsertf128 $1, %xmm15, %ymm14, %ymm0
vunpckhpd %xmm7, %xmm6, %xmm14
vmovupd _poly3_0+__svml_derf_data_internal(%rip), %ymm6
vfmadd213pd _poly3_1+__svml_derf_data_internal(%rip), %ymm2, %ymm6
vfmadd213pd _poly3_2+__svml_derf_data_internal(%rip), %ymm2, %ymm6
vfmadd213pd %ymm1, %ymm2, %ymm6
/* P1 + P3*D2 */
vfmadd213pd %ymm3, %ymm13, %ymm6
/* Sign | _Erf_H */
vxorpd %ymm4, %ymm0, %ymm0
vinsertf128 $1, %xmm10, %ymm14, %ymm11
/* exp_h(x0) * Diff */
vmulpd %ymm12, %ymm11, %ymm2
/*
* branch-free
* low part of result: exp_h(x0) * Diff*(1+P1)
*/
vfmadd213pd %ymm2, %ymm2, %ymm6
/* Final result */
vaddpd %ymm6, %ymm0, %ymm15
/* Fix erf(-0) = -0 */
vorpd %ymm4, %ymm15, %ymm0
ret
END(_ZGVdN4v_erf_avx2)
.section .rodata, "a"
.align 32
#ifdef __svml_derf_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct
{
__declspec(align(32)) VUINT32 _erf_tbl[6*128*2][2];
__declspec(align(32)) VUINT32 _AbsMask[4][2];
__declspec(align(32)) VUINT32 _MaxThreshold[4][2];
__declspec(align(32)) VUINT32 _SRound[4][2];
__declspec(align(32)) VUINT32 _U2Threshold[4][2];
__declspec(align(32)) VUINT32 _poly1_0[4][2];
__declspec(align(32)) VUINT32 _poly1_1[4][2];
__declspec(align(32)) VUINT32 _poly3_0[4][2];
__declspec(align(32)) VUINT32 _poly3_1[4][2];
__declspec(align(32)) VUINT32 _poly5_0[4][2];
__declspec(align(32)) VUINT32 _poly5_1[4][2];
__declspec(align(32)) VUINT32 _poly1_2[4][2];
__declspec(align(32)) VUINT32 _poly3_2[4][2];
__declspec(align(32)) VUINT32 _poly1_3[4][2];
__declspec(align(32)) VUINT32 _poly3_3[4][2];
__declspec(align(32)) VUINT32 _Mask32[4][2];
} __svml_derf_data_internal;
#endif
__svml_derf_data_internal:
/*== _erf_tbl ==*/
.quad 0x0000000000000000, 0x3ff20dd750429b6d
.quad 0x3f820dbf3deb1340, 0x3ff20d8f1975c85d
.quad 0x3f920d77083f17a0, 0x3ff20cb67bd452c7
.quad 0x3f9b137e0cf584dc, 0x3ff20b4d8bac36c1
.quad 0x3fa20c5645dd2538, 0x3ff209546ad13ccf
.quad 0x3fa68e5d3bbc9526, 0x3ff206cb4897b148
.quad 0x3fab0fafef135745, 0x3ff203b261cd0053
.quad 0x3faf902a77bd3821, 0x3ff2000a00ae3804
.quad 0x3fb207d480e90658, 0x3ff1fbd27cdc72d3
.quad 0x3fb44703e87e8593, 0x3ff1f70c3b4f2cc8
.quad 0x3fb68591a1e83b5d, 0x3ff1f1b7ae44867f
.quad 0x3fb8c36beb8a8d23, 0x3ff1ebd5552f795b
.quad 0x3fbb0081148a873a, 0x3ff1e565bca400d4
.quad 0x3fbd3cbf7e70a4b3, 0x3ff1de697e413d29
.quad 0x3fbf78159ec8bb50, 0x3ff1d6e14099944a
.quad 0x3fc0d939005f65e5, 0x3ff1cecdb718d61c
.quad 0x3fc1f5e1a35c3b89, 0x3ff1c62fa1e869b6
.quad 0x3fc311fc15f56d14, 0x3ff1bd07cdd189ac
.quad 0x3fc42d7fc2f64959, 0x3ff1b357141d95d5
.quad 0x3fc548642321d7c6, 0x3ff1a91e5a748165
.quad 0x3fc662a0bdf7a89f, 0x3ff19e5e92b964ab
.quad 0x3fc77c2d2a765f9e, 0x3ff19318bae53a04
.quad 0x3fc895010fdbdbfd, 0x3ff1874ddcdfce24
.quad 0x3fc9ad142662e14d, 0x3ff17aff0e56ec10
.quad 0x3fcac45e37fe2526, 0x3ff16e2d7093cd8c
.quad 0x3fcbdad72110a648, 0x3ff160da304ed92f
.quad 0x3fccf076d1233237, 0x3ff153068581b781
.quad 0x3fce05354b96ff36, 0x3ff144b3b337c90c
.quad 0x3fcf190aa85540e2, 0x3ff135e3075d076b
.quad 0x3fd015f78a3dcf3d, 0x3ff12695da8b5bde
.quad 0x3fd09eed6982b948, 0x3ff116cd8fd67618
.quad 0x3fd127631eb8de32, 0x3ff1068b94962e5e
.quad 0x3fd1af54e232d609, 0x3ff0f5d1602f7e41
.quad 0x3fd236bef825d9a2, 0x3ff0e4a073dc1b91
.quad 0x3fd2bd9db0f7827f, 0x3ff0d2fa5a70c168
.quad 0x3fd343ed6989b7d9, 0x3ff0c0e0a8223359
.quad 0x3fd3c9aa8b84beda, 0x3ff0ae54fa490723
.quad 0x3fd44ed18d9f6462, 0x3ff09b58f724416b
.quad 0x3fd4d35ef3e5372e, 0x3ff087ee4d9ad247
.quad 0x3fd5574f4ffac98e, 0x3ff07416b4fbfe7c
.quad 0x3fd5da9f415ff23f, 0x3ff05fd3ecbec298
.quad 0x3fd65d4b75b00471, 0x3ff04b27bc403d30
.quad 0x3fd6df50a8dff772, 0x3ff03613f2812daf
.quad 0x3fd760aba57a76bf, 0x3ff0209a65e29545
.quad 0x3fd7e15944d9d3e4, 0x3ff00abcf3e187a9
.quad 0x3fd861566f5fd3c0, 0x3fefe8fb01a47307
.quad 0x3fd8e0a01cab516b, 0x3fefbbbbef34b4b2
.quad 0x3fd95f3353cbb146, 0x3fef8dc092d58ff8
.quad 0x3fd9dd0d2b721f39, 0x3fef5f0cdaf15313
.quad 0x3fda5a2aca209394, 0x3fef2fa4c16c0019
.quad 0x3fdad68966569a87, 0x3feeff8c4b1375db
.quad 0x3fdb522646bbda68, 0x3feecec7870ebca8
.quad 0x3fdbccfec24855b8, 0x3fee9d5a8e4c934e
.quad 0x3fdc4710406a65fc, 0x3fee6b4982f158b9
.quad 0x3fdcc058392a6d2d, 0x3fee38988fc46e72
.quad 0x3fdd38d4354c3bd0, 0x3fee054be79d3042
.quad 0x3fddb081ce6e2a48, 0x3fedd167c4cf9d2a
.quad 0x3fde275eaf25e458, 0x3fed9cf06898cdaf
.quad 0x3fde9d68931ae650, 0x3fed67ea1a8b5368
.quad 0x3fdf129d471eabb1, 0x3fed325927fb9d89
.quad 0x3fdf86faa9428f9d, 0x3fecfc41e36c7df9
.quad 0x3fdffa7ea8eb5fd0, 0x3fecc5a8a3fbea40
.quad 0x3fe03693a371519c, 0x3fec8e91c4d01368
.quad 0x3fe06f794ab2cae7, 0x3fec5701a484ef9d
.quad 0x3fe0a7ef5c18edd2, 0x3fec1efca49a5011
.quad 0x3fe0dff4f247f6c6, 0x3febe68728e29d5e
.quad 0x3fe1178930ada115, 0x3febada596f25436
.quad 0x3fe14eab43841b55, 0x3feb745c55905bf8
.quad 0x3fe1855a5fd3dd50, 0x3feb3aafcc27502e
.quad 0x3fe1bb95c3746199, 0x3feb00a46237d5be
.quad 0x3fe1f15cb50bc4de, 0x3feac63e7ecc1411
.quad 0x3fe226ae840d4d70, 0x3fea8b8287ec6a09
.quad 0x3fe25b8a88b6dd7f, 0x3fea5074e2157620
.quad 0x3fe28ff0240d52cd, 0x3fea1519efaf889e
.quad 0x3fe2c3debfd7d6c1, 0x3fe9d97610879642
.quad 0x3fe2f755ce9a21f4, 0x3fe99d8da149c13f
.quad 0x3fe32a54cb8db67b, 0x3fe96164fafd8de3
.quad 0x3fe35cdb3a9a144d, 0x3fe925007283d7aa
.quad 0x3fe38ee8a84beb71, 0x3fe8e86458169af8
.quad 0x3fe3c07ca9cb4f9e, 0x3fe8ab94f6caa71d
.quad 0x3fe3f196dcd0f135, 0x3fe86e9694134b9e
.quad 0x3fe42236e79a5fa6, 0x3fe8316d6f48133d
.quad 0x3fe4525c78dd5966, 0x3fe7f41dc12c9e89
.quad 0x3fe4820747ba2dc2, 0x3fe7b6abbb7aaf19
.quad 0x3fe4b13713ad3513, 0x3fe7791b886e7403
.quad 0x3fe4dfeba47f63cc, 0x3fe73b714a552763
.quad 0x3fe50e24ca35fd2c, 0x3fe6fdb11b1e0c34
.quad 0x3fe53be25d016a4f, 0x3fe6bfdf0beddaf5
.quad 0x3fe569243d2b3a9b, 0x3fe681ff24b4ab04
.quad 0x3fe595ea53035283, 0x3fe6441563c665d4
.quad 0x3fe5c2348ecc4dc3, 0x3fe60625bd75d07b
.quad 0x3fe5ee02e8a71a53, 0x3fe5c8341bb23767
.quad 0x3fe61955607dd15d, 0x3fe58a445da7c74c
.quad 0x3fe6442bfdedd397, 0x3fe54c5a57629db0
.quad 0x3fe66e86d0312e82, 0x3fe50e79d1749ac9
.quad 0x3fe69865ee075011, 0x3fe4d0a6889dfd9f
.quad 0x3fe6c1c9759d0e5f, 0x3fe492e42d78d2c5
.quad 0x3fe6eab18c74091b, 0x3fe4553664273d24
.quad 0x3fe7131e5f496a5a, 0x3fe417a0c4049fd0
.quad 0x3fe73b1021fc0cb8, 0x3fe3da26d759aef5
.quad 0x3fe762870f720c6f, 0x3fe39ccc1b136d5a
.quad 0x3fe78983697dc96f, 0x3fe35f93fe7d1b3d
.quad 0x3fe7b00578c26037, 0x3fe32281e2fd1a92
.quad 0x3fe7d60d8c979f7b, 0x3fe2e5991bd4cbfc
.quad 0x3fe7fb9bfaed8078, 0x3fe2a8dcede3673b
.quad 0x3fe820b1202f27fb, 0x3fe26c508f6bd0ff
.quad 0x3fe8454d5f25760d, 0x3fe22ff727dd6f7b
.quad 0x3fe8697120d92a4a, 0x3fe1f3d3cf9ffe5a
.quad 0x3fe88d1cd474a2e0, 0x3fe1b7e98fe26217
.quad 0x3fe8b050ef253c37, 0x3fe17c3b626c7a12
.quad 0x3fe8d30debfc572e, 0x3fe140cc3173f007
.quad 0x3fe8f5544bd00c04, 0x3fe1059ed7740313
.quad 0x3fe91724951b8fc6, 0x3fe0cab61f084b93
.quad 0x3fe9387f53df5238, 0x3fe09014c2ca74da
.quad 0x3fe959651980da31, 0x3fe055bd6d32e8d7
.quad 0x3fe979d67caa6631, 0x3fe01bb2b87c6968
.quad 0x3fe999d4192a5715, 0x3fdfc3ee5d1524b0
.quad 0x3fe9b95e8fd26aba, 0x3fdf511a91a67d2a
.quad 0x3fe9d8768656cc42, 0x3fdedeeee0959518
.quad 0x3fe9f71ca72cffb6, 0x3fde6d6ffaa65a25
.quad 0x3fea1551a16aaeaf, 0x3fddfca26f5bbf88
.quad 0x3fea331628a45b92, 0x3fdd8c8aace11e63
.quad 0x3fea506af4cc00f4, 0x3fdd1d2cfff91594
.quad 0x3fea6d50c20fa293, 0x3fdcae8d93f1d7b7
.quad 0x3fea89c850b7d54d, 0x3fdc40b0729ed548
.quad 0x3feaa5d265064366, 0x3fdbd3998457afdb
.quad 0x3feac16fc7143263, 0x3fdb674c8ffc6283
.quad 0x3feadca142b10f98, 0x3fdafbcd3afe8ab6
.quad 0x3feaf767a741088b, 0x3fda911f096fbc26
.quad 0x3feb11c3c79bb424, 0x3fda27455e14c93c
.quad 0x3feb2bb679ead19c, 0x3fd9be437a7de946
.quad 0x3feb4540978921ee, 0x3fd9561c7f23a47b
.quad 0x3feb5e62fce16095, 0x3fd8eed36b886d93
.quad 0x3feb771e894d602e, 0x3fd8886b1e5ecfd1
.quad 0x3feb8f741ef54f83, 0x3fd822e655b417e7
.quad 0x3feba764a2af2b78, 0x3fd7be47af1f5d89
.quad 0x3febbef0fbde6221, 0x3fd75a91a7f4d2ed
.quad 0x3febd61a1453ab44, 0x3fd6f7c69d7d3ef8
.quad 0x3febece0d82d1a5c, 0x3fd695e8cd31867e
.quad 0x3fec034635b66e23, 0x3fd634fa54fa285f
.quad 0x3fec194b1d49a184, 0x3fd5d4fd33729015
.quad 0x3fec2ef0812fc1bd, 0x3fd575f3483021c3
.quad 0x3fec443755820d64, 0x3fd517de540ce2a3
.quad 0x3fec5920900b5fd1, 0x3fd4babff975a04c
.quad 0x3fec6dad2829ec62, 0x3fd45e99bcbb7915
.quad 0x3fec81de16b14cef, 0x3fd4036d0468a7a2
.quad 0x3fec95b455cce69d, 0x3fd3a93b1998736c
.quad 0x3feca930e0e2a825, 0x3fd35005285227f1
.quad 0x3fecbc54b476248d, 0x3fd2f7cc3fe6f423
.quad 0x3feccf20ce0c0d27, 0x3fd2a09153529381
.quad 0x3fece1962c0e0d8b, 0x3fd24a55399ea239
.quad 0x3fecf3b5cdaf0c39, 0x3fd1f518ae487dc8
.quad 0x3fed0580b2cfd249, 0x3fd1a0dc51a9934d
.quad 0x3fed16f7dbe41ca0, 0x3fd14da0a961fd14
.quad 0x3fed281c49d818d0, 0x3fd0fb6620c550af
.quad 0x3fed38eefdf64fdd, 0x3fd0aa2d09497f2b
.quad 0x3fed4970f9ce00d9, 0x3fd059f59af7a906
.quad 0x3fed59a33f19ed42, 0x3fd00abff4dec7a3
.quad 0x3fed6986cfa798e7, 0x3fcf79183b101c5b
.quad 0x3fed791cad3eff01, 0x3fcedeb406d9c825
.quad 0x3fed8865d98abe01, 0x3fce4652fadcb6b2
.quad 0x3fed97635600bb89, 0x3fcdaff4969c0b04
.quad 0x3feda61623cb41e0, 0x3fcd1b982c501370
.quad 0x3fedb47f43b2980d, 0x3fcc893ce1dcbef7
.quad 0x3fedc29fb60715af, 0x3fcbf8e1b1ca2279
.quad 0x3fedd0787a8bb39d, 0x3fcb6a856c3ed54f
.quad 0x3fedde0a90611a0d, 0x3fcade26b7fbed95
.quad 0x3fedeb56f5f12d28, 0x3fca53c4135a6526
.quad 0x3fedf85ea8db188e, 0x3fc9cb5bd549b111
.quad 0x3fee0522a5dfda73, 0x3fc944ec2e4f5630
.quad 0x3fee11a3e8cf4eb8, 0x3fc8c07329874652
.quad 0x3fee1de36c75ba58, 0x3fc83deeada4d25a
.quad 0x3fee29e22a89d766, 0x3fc7bd5c7df3fe9c
.quad 0x3fee35a11b9b61ce, 0x3fc73eba3b5b07b7
.quad 0x3fee4121370224cc, 0x3fc6c205655be720
.quad 0x3fee4c6372cd8927, 0x3fc6473b5b15a7a1
.quad 0x3fee5768c3b4a3fc, 0x3fc5ce595c455b0a
.quad 0x3fee62321d06c5e0, 0x3fc5575c8a468362
.quad 0x3fee6cc0709c8a0d, 0x3fc4e241e912c305
.quad 0x3fee7714aec96534, 0x3fc46f066040a832
.quad 0x3fee812fc64db369, 0x3fc3fda6bc016994
.quad 0x3fee8b12a44944a8, 0x3fc38e1fae1d6a9d
.quad 0x3fee94be342e6743, 0x3fc3206dceef5f87
.quad 0x3fee9e335fb56f87, 0x3fc2b48d9e5dea1c
.quad 0x3feea7730ed0bbb9, 0x3fc24a7b84d38971
.quad 0x3feeb07e27a133aa, 0x3fc1e233d434b813
.quad 0x3feeb9558e6b42ce, 0x3fc17bb2c8d41535
.quad 0x3feec1fa258c4bea, 0x3fc116f48a6476cc
.quad 0x3feeca6ccd709544, 0x3fc0b3f52ce8c383
.quad 0x3feed2ae6489ac1e, 0x3fc052b0b1a174ea
.quad 0x3feedabfc7453e63, 0x3fbfe6460fef4680
.quad 0x3feee2a1d004692c, 0x3fbf2a901ccafb37
.quad 0x3feeea5557137ae0, 0x3fbe723726b824a9
.quad 0x3feef1db32a2277c, 0x3fbdbd32ac4c99b0
.quad 0x3feef93436bc2daa, 0x3fbd0b7a0f921e7c
.quad 0x3fef006135426b26, 0x3fbc5d0497c09e74
.quad 0x3fef0762fde45ee6, 0x3fbbb1c972f23e50
.quad 0x3fef0e3a5e1a1788, 0x3fbb09bfb7d11a84
.quad 0x3fef14e8211e8c55, 0x3fba64de673e8837
.quad 0x3fef1b6d0fea5f4d, 0x3fb9c31c6df3b1b8
.quad 0x3fef21c9f12f0677, 0x3fb92470a61b6965
.quad 0x3fef27ff89525acf, 0x3fb888d1d8e510a3
.quad 0x3fef2e0e9a6a8b09, 0x3fb7f036c0107294
.quad 0x3fef33f7e43a706b, 0x3fb75a96077274ba
.quad 0x3fef39bc242e43e6, 0x3fb6c7e64e7281cb
.quad 0x3fef3f5c1558b19e, 0x3fb6381e2980956b
.quad 0x3fef44d870704911, 0x3fb5ab342383d178
.quad 0x3fef4a31ebcd47df, 0x3fb5211ebf41880b
.quad 0x3fef4f693b67bd77, 0x3fb499d478bca735
.quad 0x3fef547f10d60597, 0x3fb4154bc68d75c3
.quad 0x3fef59741b4b97cf, 0x3fb3937b1b31925a
.quad 0x3fef5e4907982a07, 0x3fb31458e6542847
.quad 0x3fef62fe80272419, 0x3fb297db960e4f63
.quad 0x3fef67952cff6282, 0x3fb21df9981f8e53
.quad 0x3fef6c0db3c34641, 0x3fb1a6a95b1e786f
.quad 0x3fef7068b7b10fd9, 0x3fb131e14fa1625d
.quad 0x3fef74a6d9a38383, 0x3fb0bf97e95f2a64
.quad 0x3fef78c8b812d498, 0x3fb04fc3a0481321
.quad 0x3fef7cceef15d631, 0x3fafc4b5e32d6259
.quad 0x3fef80ba18636f07, 0x3faeeea8c1b1db94
.quad 0x3fef848acb544e95, 0x3fae1d4cf1e2450a
.quad 0x3fef88419ce4e184, 0x3fad508f9a1ea64f
.quad 0x3fef8bdf1fb78370, 0x3fac885df3451a07
.quad 0x3fef8f63e416ebff, 0x3fabc4a54a84e834
.quad 0x3fef92d077f8d56d, 0x3fab055303221015
.quad 0x3fef96256700da8e, 0x3faa4a549829587e
.quad 0x3fef99633a838a57, 0x3fa993979e14fffe
.quad 0x3fef9c8a7989af0d, 0x3fa8e109c4622913
.quad 0x3fef9f9ba8d3c733, 0x3fa83298d717210e
.quad 0x3fefa2974addae45, 0x3fa78832c03aa2b1
.quad 0x3fefa57ddfe27376, 0x3fa6e1c5893c380b
.quad 0x3fefa84fe5e05c8d, 0x3fa63f3f5c4de13b
.quad 0x3fefab0dd89d1309, 0x3fa5a08e85af27e0
.quad 0x3fefadb831a9f9c3, 0x3fa505a174e9c929
.quad 0x3fefb04f6868a944, 0x3fa46e66be002240
.quad 0x3fefb2d3f20f9101, 0x3fa3dacd1a8d8cce
.quad 0x3fefb54641aebbc9, 0x3fa34ac36ad8dafe
.quad 0x3fefb7a6c834b5a2, 0x3fa2be38b6d92415
.quad 0x3fefb9f5f4739170, 0x3fa2351c2f2d1449
.quad 0x3fefbc3433260ca5, 0x3fa1af5d2e04f3f6
.quad 0x3fefbe61eef4cf6a, 0x3fa12ceb37ff9bc3
.quad 0x3fefc07f907bc794, 0x3fa0adb5fcfa8c75
.quad 0x3fefc28d7e4f9cd0, 0x3fa031ad58d56279
.quad 0x3fefc48c1d033c7a, 0x3f9f7182a851bca2
.quad 0x3fefc67bcf2d7b8f, 0x3f9e85c449e377f3
.quad 0x3fefc85cf56ecd38, 0x3f9da0005e5f28df
.quad 0x3fefca2fee770c79, 0x3f9cc0180af00a8b
.quad 0x3fefcbf5170b578b, 0x3f9be5ecd2fcb5f9
.quad 0x3fefcdacca0bfb73, 0x3f9b1160991ff737
.quad 0x3fefcf57607a6e7c, 0x3f9a4255a00b9f03
.quad 0x3fefd0f5317f582f, 0x3f9978ae8b55ce1b
.quad 0x3fefd2869270a56f, 0x3f98b44e6031383e
.quad 0x3fefd40bd6d7a785, 0x3f97f5188610ddc8
.quad 0x3fefd58550773cb5, 0x3f973af0c737bb45
.quad 0x3fefd6f34f52013a, 0x3f9685bb5134ef13
.quad 0x3fefd85621b0876d, 0x3f95d55cb54cd53a
.quad 0x3fefd9ae142795e3, 0x3f9529b9e8cf9a1e
.quad 0x3fefdafb719e6a69, 0x3f9482b8455dc491
.quad 0x3fefdc3e835500b3, 0x3f93e03d891b37de
.quad 0x3fefdd7790ea5bc0, 0x3f93422fd6d12e2b
.quad 0x3fefdea6e062d0c9, 0x3f92a875b5ffab56
.quad 0x3fefdfccb62e52d3, 0x3f9212f612dee7fb
.quad 0x3fefe0e9552ebdd6, 0x3f9181983e5133dd
.quad 0x3fefe1fcfebe2083, 0x3f90f443edc5ce49
.quad 0x3fefe307f2b503d0, 0x3f906ae13b0d3255
.quad 0x3fefe40a6f70af4b, 0x3f8fcab1483ea7fc
.quad 0x3fefe504b1d9696c, 0x3f8ec72615a894c4
.quad 0x3fefe5f6f568b301, 0x3f8dcaf3691fc448
.quad 0x3fefe6e1742f7cf6, 0x3f8cd5ec93c12432
.quad 0x3fefe7c466dc57a1, 0x3f8be7e5ac24963b
.quad 0x3fefe8a004c19ae6, 0x3f8b00b38d6b3575
.quad 0x3fefe97483db8670, 0x3f8a202bd6372dce
.quad 0x3fefea4218d6594a, 0x3f894624e78e0faf
.quad 0x3fefeb08f7146046, 0x3f887275e3a6869e
.quad 0x3fefebc950b3fa75, 0x3f87a4f6aca256cb
.quad 0x3fefec835695932e, 0x3f86dd7fe3358230
.quad 0x3fefed37386190fb, 0x3f861beae53b72b7
.quad 0x3fefede5248e38f4, 0x3f856011cc3b036d
.quad 0x3fefee8d486585ee, 0x3f84a9cf6bda3f4c
.quad 0x3fefef2fd00af31a, 0x3f83f8ff5042a88e
.quad 0x3fefefcce6813974, 0x3f834d7dbc76d7e5
.quad 0x3feff064b5afffbe, 0x3f82a727a89a3f14
.quad 0x3feff0f766697c76, 0x3f8205dac02bd6b9
.quad 0x3feff18520700971, 0x3f81697560347b26
.quad 0x3feff20e0a7ba8c2, 0x3f80d1d69569b82d
.quad 0x3feff2924a3f7a83, 0x3f803ede1a45bfee
.quad 0x3feff312046f2339, 0x3f7f60d8aa2a88f2
.quad 0x3feff38d5cc4227f, 0x3f7e4cc4abf7d065
.quad 0x3feff404760319b4, 0x3f7d4143a9dfe965
.quad 0x3feff47772010262, 0x3f7c3e1a5f5c077c
.quad 0x3feff4e671a85425, 0x3f7b430ecf4a83a8
.quad 0x3feff55194fe19df, 0x3f7a4fe83fb9db25
.quad 0x3feff5b8fb26f5f6, 0x3f79646f35a76624
.quad 0x3feff61cc26c1578, 0x3f78806d70b2fc36
.quad 0x3feff67d08401202, 0x3f77a3ade6c8b3e5
.quad 0x3feff6d9e943c231, 0x3f76cdfcbfc1e263
.quad 0x3feff733814af88c, 0x3f75ff2750fe7820
.quad 0x3feff789eb6130c9, 0x3f7536fc18f7ce5c
.quad 0x3feff7dd41ce2b4d, 0x3f74754abacdf1dc
.quad 0x3feff82d9e1a76d8, 0x3f73b9e3f9d06e3f
.quad 0x3feff87b1913e853, 0x3f730499b503957f
.quad 0x3feff8c5cad200a5, 0x3f72553ee2a336bf
.quad 0x3feff90dcaba4096, 0x3f71aba78ba3af89
.quad 0x3feff9532f846ab0, 0x3f7107a8c7323a6e
.quad 0x3feff9960f3eb327, 0x3f706918b6355624
.quad 0x3feff9d67f51ddba, 0x3f6f9f9cfd9c3035
.quad 0x3feffa14948549a7, 0x3f6e77448fb66bb9
.quad 0x3feffa506302ebae, 0x3f6d58da68fd1170
.quad 0x3feffa89fe5b3625, 0x3f6c4412bf4b8f0b
.quad 0x3feffac17988ef4b, 0x3f6b38a3af2e55b4
.quad 0x3feffaf6e6f4f5c0, 0x3f6a3645330550ff
.quad 0x3feffb2a5879f35e, 0x3f693cb11a30d765
.quad 0x3feffb5bdf67fe6f, 0x3f684ba3004a50d0
.quad 0x3feffb8b8c88295f, 0x3f6762d84469c18f
.quad 0x3feffbb970200110, 0x3f66821000795a03
.quad 0x3feffbe599f4f9d9, 0x3f65a90b00981d93
.quad 0x3feffc10194fcb64, 0x3f64d78bba8ca5fd
.quad 0x3feffc38fcffbb7c, 0x3f640d564548fad7
.quad 0x3feffc60535dd7f5, 0x3f634a305080681f
.quad 0x3feffc862a501fd7, 0x3f628de11c5031eb
.quad 0x3feffcaa8f4c9bea, 0x3f61d83170fbf6fb
.quad 0x3feffccd8f5c66d1, 0x3f6128eb96be8798
.quad 0x3feffcef371ea4d7, 0x3f607fdb4dafea5f
.quad 0x3feffd0f92cb6ba7, 0x3f5fb99b8b8279e1
.quad 0x3feffd2eae369a07, 0x3f5e7f232d9e2630
.quad 0x3feffd4c94d29fdb, 0x3f5d4fed7195d7e8
.quad 0x3feffd6951b33686, 0x3f5c2b9cf7f893bf
.quad 0x3feffd84ef9009ee, 0x3f5b11d702b3deb2
.quad 0x3feffd9f78c7524a, 0x3f5a024365f771bd
.quad 0x3feffdb8f7605ee7, 0x3f58fc8c794b03b5
.quad 0x3feffdd1750e1220, 0x3f58005f08d6f1ef
.quad 0x3feffde8fb314ebf, 0x3f570d6a46e07dda
.quad 0x3feffdff92db56e5, 0x3f56235fbd7a4345
.quad 0x3feffe1544d01ccb, 0x3f5541f340697987
.quad 0x3feffe2a1988857c, 0x3f5468dadf4080ab
.quad 0x3feffe3e19349dc7, 0x3f5397ced7af2b15
.quad 0x3feffe514bbdc197, 0x3f52ce898809244e
.quad 0x3feffe63b8c8b5f7, 0x3f520cc76202c5fb
.quad 0x3feffe7567b7b5e1, 0x3f515246dda49d47
.quad 0x3feffe865fac722b, 0x3f509ec86c75d497
.quad 0x3feffe96a78a04a9, 0x3f4fe41cd9bb4eee
.quad 0x3feffea645f6d6da, 0x3f4e97ba3b77f306
.quad 0x3feffeb5415e7c44, 0x3f4d57f524723822
.quad 0x3feffec39ff380b9, 0x3f4c245d4b99847a
.quad 0x3feffed167b12ac2, 0x3f4afc85e0f82e12
.quad 0x3feffede9e5d3262, 0x3f49e005769dbc1d
.quad 0x3feffeeb49896c6d, 0x3f48ce75e9f6f8a0
.quad 0x3feffef76e956a9f, 0x3f47c7744d9378f7
.quad 0x3fefff0312b010b5, 0x3f46caa0d3582fe9
.quad 0x3fefff0e3ad91ec2, 0x3f45d79eb71e893b
.quad 0x3fefff18ebe2b0e1, 0x3f44ee1429bf7cc0
.quad 0x3fefff232a72b48e, 0x3f440daa3c89f5b6
.quad 0x3fefff2cfb0453d9, 0x3f43360ccd23db3a
.quad 0x3fefff3661e9569d, 0x3f4266ea71d4f71a
.quad 0x3fefff3f634b79f9, 0x3f419ff4663ae9df
.quad 0x3fefff48032dbe40, 0x3f40e0de78654d1e
.quad 0x3fefff50456dab8c, 0x3f40295ef6591848
.quad 0x3fefff582dc48d30, 0x3f3ef25d37f49fe1
.quad 0x3fefff5fbfc8a439, 0x3f3da01102b5f851
.quad 0x3fefff66feee5129, 0x3f3c5b5412dcafad
.quad 0x3fefff6dee89352e, 0x3f3b23a5a23e4210
.quad 0x3fefff7491cd4af6, 0x3f39f8893d8fd1c1
.quad 0x3fefff7aebcff755, 0x3f38d986a4187285
.quad 0x3fefff80ff8911fd, 0x3f37c629a822bc9e
.quad 0x3fefff86cfd3e657, 0x3f36be02102b3520
.quad 0x3fefff8c5f702ccf, 0x3f35c0a378c90bca
.quad 0x3fefff91b102fca8, 0x3f34cda5374ea275
.quad 0x3fefff96c717b695, 0x3f33e4a23d1f4703
.quad 0x3fefff9ba420e834, 0x3f330538fbb77ecd
.quad 0x3fefffa04a7928b1, 0x3f322f0b496539be
.quad 0x3fefffa4bc63ee9a, 0x3f3161be46ad3b50
.quad 0x3fefffa8fc0e5f33, 0x3f309cfa445b00ff
.quad 0x3fefffad0b901755, 0x3f2fc0d55470cf51
.quad 0x3fefffb0ecebee1b, 0x3f2e577bbcd49935
.quad 0x3fefffb4a210b172, 0x3f2cfd4a5adec5c0
.quad 0x3fefffb82cd9dcbf, 0x3f2bb1a9657ce465
.quad 0x3fefffbb8f1049c6, 0x3f2a740684026555
.quad 0x3fefffbeca6adbe9, 0x3f2943d4a1d1ed39
.quad 0x3fefffc1e08f25f5, 0x3f28208bc334a6a5
.quad 0x3fefffc4d3120aa1, 0x3f2709a8db59f25c
.quad 0x3fefffc7a37857d2, 0x3f25feada379d8b7
.quad 0x3fefffca53375ce3, 0x3f24ff207314a102
.quad 0x3fefffcce3b57bff, 0x3f240a8c1949f75e
.quad 0x3fefffcf564ab6b7, 0x3f23207fb7420eb9
.quad 0x3fefffd1ac4135f9, 0x3f22408e9ba3327f
.quad 0x3fefffd3e6d5cd87, 0x3f216a501f0e42ca
.quad 0x3fefffd607387b07, 0x3f209d5f819c9e29
.quad 0x3fefffd80e8ce0da, 0x3f1fb2b792b40a22
.quad 0x3fefffd9fdeabcce, 0x3f1e3bcf436a1a95
.quad 0x3fefffdbd65e5ad0, 0x3f1cd55277c18d05
.quad 0x3fefffdd98e903b2, 0x3f1b7e94604479dc
.quad 0x3fefffdf46816833, 0x3f1a36eec00926dd
.quad 0x3fefffe0e0140857, 0x3f18fdc1b2dcf7b9
.quad 0x3fefffe26683972a, 0x3f17d2737527c3f9
.quad 0x3fefffe3daa95b18, 0x3f16b4702d7d5849
.quad 0x3fefffe53d558ae9, 0x3f15a329b7d30748
.quad 0x3fefffe68f4fa777, 0x3f149e17724f4d41
.quad 0x3fefffe7d156d244, 0x3f13a4b60ba9aa4e
.quad 0x3fefffe904222101, 0x3f12b6875310f785
.quad 0x3fefffea2860ee1e, 0x3f11d312098e9dba
.quad 0x3fefffeb3ebb267b, 0x3f10f9e1b4dd36df
.quad 0x3fefffec47d19457, 0x3f102a8673a94692
.quad 0x3fefffed443e2787, 0x3f0ec929a665b449
.quad 0x3fefffee34943b15, 0x3f0d4f4b4c8e09ed
.quad 0x3fefffef1960d85d, 0x3f0be6abbb10a5aa
.quad 0x3fefffeff32af7af, 0x3f0a8e8cc1fadef6
.quad 0x3feffff0c273bea2, 0x3f094637d5bacfdb
.quad 0x3feffff187b6bc0e, 0x3f080cfdc72220cf
.quad 0x3feffff2436a21dc, 0x3f06e2367dc27f95
.quad 0x3feffff2f5fefcaa, 0x3f05c540b4936fd2
.quad 0x3feffff39fe16963, 0x3f04b581b8d170fc
.quad 0x3feffff44178c8d2, 0x3f03b2652b06c2b2
.quad 0x3feffff4db27f146, 0x3f02bb5cc22e5db6
.quad 0x3feffff56d4d5e5e, 0x3f01cfe010e2052d
.quad 0x3feffff5f8435efc, 0x3f00ef6c4c84a0fe
.quad 0x3feffff67c604180, 0x3f001984165a5f36
.quad 0x3feffff6f9f67e55, 0x3efe9b5e8d00ce77
.quad 0x3feffff77154e0d6, 0x3efd16f5716c6c1a
.quad 0x3feffff7e2c6aea2, 0x3efba4f035d60e03
.quad 0x3feffff84e93cd75, 0x3efa447b7b03f045
.quad 0x3feffff8b500e77c, 0x3ef8f4ccca7fc90d
.quad 0x3feffff9164f8e46, 0x3ef7b5223dac7336
.quad 0x3feffff972be5c59, 0x3ef684c227fcacef
.quad 0x3feffff9ca891572, 0x3ef562fac4329b48
.quad 0x3feffffa1de8c582, 0x3ef44f21e49054f2
.quad 0x3feffffa6d13de73, 0x3ef34894a5e24657
.quad 0x3feffffab83e54b8, 0x3ef24eb7254ccf83
.quad 0x3feffffaff99bac4, 0x3ef160f438c70913
.quad 0x3feffffb43555b5f, 0x3ef07ebd2a2d2844
.quad 0x3feffffb839e52f3, 0x3eef4f12e9ab070a
.quad 0x3feffffbc09fa7cd, 0x3eedb5ad0b27805c
.quad 0x3feffffbfa82616b, 0x3eec304efa2c6f4e
.quad 0x3feffffc316d9ed0, 0x3eeabe09e9144b5e
.quad 0x3feffffc6586abf6, 0x3ee95df988e76644
.quad 0x3feffffc96f1165e, 0x3ee80f439b4ee04b
.quad 0x3feffffcc5cec0c1, 0x3ee6d11788a69c64
.quad 0x3feffffcf23ff5fc, 0x3ee5a2adfa0b4bc4
.quad 0x3feffffd1c637b2b, 0x3ee4834877429b8f
.quad 0x3feffffd4456a10d, 0x3ee37231085c7d9a
.quad 0x3feffffd6a3554a1, 0x3ee26eb9daed6f7e
.quad 0x3feffffd8e1a2f22, 0x3ee1783ceac28910
.quad 0x3feffffdb01e8546, 0x3ee08e1badf0fced
.quad 0x3feffffdd05a75ea, 0x3edf5f7d88472604
.quad 0x3feffffdeee4f810, 0x3eddb92b5212fb8d
.quad 0x3feffffe0bd3e852, 0x3edc282cd3957eda
.quad 0x3feffffe273c15b7, 0x3edaab7abace48dc
.quad 0x3feffffe41314e06, 0x3ed94219bfcb4928
.quad 0x3feffffe59c6698b, 0x3ed7eb1a2075864e
.quad 0x3feffffe710d565e, 0x3ed6a597219a93da
.quad 0x3feffffe8717232d, 0x3ed570b69502f313
.quad 0x3feffffe9bf4098c, 0x3ed44ba864670882
.quad 0x3feffffeafb377d5, 0x3ed335a62115bce2
.quad 0x3feffffec2641a9e, 0x3ed22df298214423
.quad 0x3feffffed413e5b7, 0x3ed133d96ae7e0dd
.quad 0x3feffffee4d01cd6, 0x3ed046aeabcfcdec
.quad 0x3feffffef4a55bd4, 0x3ececb9cfe1d8642
.quad 0x3fefffff039f9e8f, 0x3ecd21397ead99cb
.quad 0x3fefffff11ca4876, 0x3ecb8d094c86d374
.quad 0x3fefffff1f302bc1, 0x3eca0df0f0c626dc
.quad 0x3fefffff2bdb904d, 0x3ec8a2e269750a39
.quad 0x3fefffff37d63a36, 0x3ec74adc8f4064d3
.quad 0x3fefffff43297019, 0x3ec604ea819f007c
.quad 0x3fefffff4dde0118, 0x3ec4d0231928c6f9
.quad 0x3fefffff57fc4a95, 0x3ec3aba85fe22e20
.quad 0x3fefffff618c3da6, 0x3ec296a70f414053
.quad 0x3fefffff6a956450, 0x3ec1905613b3abf2
.quad 0x3fefffff731ee681, 0x3ec097f6156f32c5
.quad 0x3fefffff7b2f8ed6, 0x3ebf59a20caf6695
.quad 0x3fefffff82cdcf1b, 0x3ebd9c73698fb1dc
.quad 0x3fefffff89ffc4aa, 0x3ebbf716c6168bae
.quad 0x3fefffff90cb3c81, 0x3eba6852c6b58392
.quad 0x3fefffff9735b73b, 0x3eb8eefd70594a89
.quad 0x3fefffff9d446ccc, 0x3eb789fb715aae95
.quad 0x3fefffffa2fc5015, 0x3eb6383f726a8e04
.quad 0x3fefffffa8621251, 0x3eb4f8c96f26a26a
.quad 0x3fefffffad7a2652, 0x3eb3caa61607f920
.quad 0x3fefffffb248c39d, 0x3eb2acee2f5ecdb8
.quad 0x3fefffffb6d1e95d, 0x3eb19ec60b1242ed
.quad 0x3fefffffbb196132, 0x3eb09f5cf4dd2877
.quad 0x3fefffffbf22c1e2, 0x3eaf5bd95d8730d8
.quad 0x3fefffffc2f171e3, 0x3ead9371e2ff7c35
.quad 0x3fefffffc688a9cf, 0x3eabe41de54d155a
.quad 0x3fefffffc9eb76ac, 0x3eaa4c89e08ef4f3
.quad 0x3fefffffcd1cbc28, 0x3ea8cb738399b12c
.quad 0x3fefffffd01f36af, 0x3ea75fa8dbc84bec
.quad 0x3fefffffd2f57d68, 0x3ea608078a70dcbc
.quad 0x3fefffffd5a2041f, 0x3ea4c37c0394d094
.quad 0x3fefffffd8271d12, 0x3ea39100d5687bfe
.quad 0x3fefffffda86faa9, 0x3ea26f9df8519bd7
.quad 0x3fefffffdcc3b117, 0x3ea15e6827001f18
.quad 0x3fefffffdedf37ed, 0x3ea05c803e4831c1
.quad 0x3fefffffe0db6b91, 0x3e9ed22548cffd35
.quad 0x3fefffffe2ba0ea5, 0x3e9d06ad6ecdf971
.quad 0x3fefffffe47ccb60, 0x3e9b551c847fbc96
.quad 0x3fefffffe62534d4, 0x3e99bc09f112b494
.quad 0x3fefffffe7b4c81e, 0x3e983a1ff0aa239d
.quad 0x3fefffffe92ced93, 0x3e96ce1aa3fd7bdd
.quad 0x3fefffffea8ef9cf, 0x3e9576c72b514859
.quad 0x3fefffffebdc2ec6, 0x3e943302cc4a0da8
.quad 0x3fefffffed15bcba, 0x3e9301ba221dc9bb
.quad 0x3fefffffee3cc32c, 0x3e91e1e857adc568
.quad 0x3fefffffef5251c2, 0x3e90d2966b1746f7
.quad 0x3feffffff0576917, 0x3e8fa5b4f49cc6b2
.quad 0x3feffffff14cfb92, 0x3e8dc3ae30b55c16
.quad 0x3feffffff233ee1d, 0x3e8bfd7555a3bd68
.quad 0x3feffffff30d18e8, 0x3e8a517d9e61628a
.quad 0x3feffffff3d9480f, 0x3e88be4f8f6c951f
.quad 0x3feffffff4993c46, 0x3e874287ded49339
.quad 0x3feffffff54dab72, 0x3e85dcd669f2cd34
.quad 0x3feffffff5f74141, 0x3e848bfd38302871
.quad 0x3feffffff6969fb8, 0x3e834ecf8a3c124a
.quad 0x3feffffff72c5fb6, 0x3e822430f521cbcf
.quad 0x3feffffff7b91176, 0x3e810b1488aeb235
.quad 0x3feffffff83d3d07, 0x3e80027c00a263a6
.quad 0x3feffffff8b962be, 0x3e7e12ee004efc37
.quad 0x3feffffff92dfba2, 0x3e7c3e44ae32b16b
.quad 0x3feffffff99b79d2, 0x3e7a854ea14102a8
.quad 0x3feffffffa0248e8, 0x3e78e6761569f45d
.quad 0x3feffffffa62ce54, 0x3e77603bac345f65
.quad 0x3feffffffabd69b4, 0x3e75f1353cdad001
.quad 0x3feffffffb127525, 0x3e74980cb3c80949
.quad 0x3feffffffb624592, 0x3e73537f00b6ad4d
.quad 0x3feffffffbad2aff, 0x3e72225b12bffc68
.quad 0x3feffffffbf370cd, 0x3e710380e1adb7e9
.quad 0x3feffffffc355dfd, 0x3e6febc107d5efaa
.quad 0x3feffffffc733572, 0x3e6df0f2a0ee6947
.quad 0x3feffffffcad3626, 0x3e6c14b2188bcee4
.quad 0x3feffffffce39b67, 0x3e6a553644f7f07d
.quad 0x3feffffffd169d0c, 0x3e68b0cfce0579e0
.quad 0x3feffffffd466fa5, 0x3e6725e7c5dd20f7
.quad 0x3feffffffd7344aa, 0x3e65b2fe547a1340
.quad 0x3feffffffd9d4aab, 0x3e6456a974e92e93
.quad 0x3feffffffdc4ad7a, 0x3e630f93c3699078
.quad 0x3feffffffde9964e, 0x3e61dc7b5b978cf8
.quad 0x3feffffffe0c2bf0, 0x3e60bc30c5d52f15
.quad 0x3feffffffe2c92db, 0x3e5f5b2be65a0c7f
.quad 0x3feffffffe4aed5e, 0x3e5d5f3a8dea7357
.quad 0x3feffffffe675bbd, 0x3e5b82915b03515b
.quad 0x3feffffffe81fc4e, 0x3e59c3517e789488
.quad 0x3feffffffe9aeb97, 0x3e581fb7df06136e
.quad 0x3feffffffeb24467, 0x3e56961b8d641d06
.quad 0x3feffffffec81ff2, 0x3e5524ec4d916cae
.quad 0x3feffffffedc95e7, 0x3e53cab1343d18d1
.quad 0x3feffffffeefbc85, 0x3e52860757487a01
.quad 0x3fefffffff01a8b6, 0x3e5155a09065d4f7
.quad 0x3fefffffff126e1e, 0x3e50384250e4c9fc
.quad 0x3fefffffff221f30, 0x3e4e59890b926c78
.quad 0x3fefffffff30cd3f, 0x3e4c642116a8a9e3
.quad 0x3fefffffff3e8892, 0x3e4a8e405e651ab6
.quad 0x3fefffffff4b606f, 0x3e48d5f98114f872
.quad 0x3fefffffff57632d, 0x3e47397c5a66e307
.quad 0x3fefffffff629e44, 0x3e45b71456c5a4c4
.quad 0x3fefffffff6d1e56, 0x3e444d26de513197
.quad 0x3fefffffff76ef3f, 0x3e42fa31d6371537
.quad 0x3fefffffff801c1f, 0x3e41bcca373b7b43
.quad 0x3fefffffff88af67, 0x3e40939ab853339f
.quad 0x3fefffffff90b2e3, 0x3e3efac5187b2863
.quad 0x3fefffffff982fc1, 0x3e3cf1e86235d0e7
.quad 0x3fefffffff9f2e9f, 0x3e3b0a68a2128bab
.quad 0x3fefffffffa5b790, 0x3e39423165bc4444
.quad 0x3fefffffffabd229, 0x3e37974e743dea3d
.quad 0x3fefffffffb18582, 0x3e3607e9eacd1050
.quad 0x3fefffffffb6d844, 0x3e34924a74dec729
.quad 0x3fefffffffbbd0aa, 0x3e3334d19e0c2160
.quad 0x3fefffffffc0748f, 0x3e31edfa3c5f5cca
.quad 0x3fefffffffc4c96c, 0x3e30bc56f1b54701
.quad 0x3fefffffffc8d462, 0x3e2f3d2185e047d9
.quad 0x3fefffffffcc9a41, 0x3e2d26cb87945e87
.quad 0x3fefffffffd01f89, 0x3e2b334fac4b9f99
.quad 0x3fefffffffd36871, 0x3e296076f7918d1c
.quad 0x3fefffffffd678ed, 0x3e27ac2d72fc2c63
.quad 0x3fefffffffd954ae, 0x3e2614801550319e
.quad 0x3fefffffffdbff2a, 0x3e24979ac8b28927
.quad 0x3fefffffffde7ba0, 0x3e2333c68e2d0548
.quad 0x3fefffffffe0cd16, 0x3e21e767bce37dd7
.quad 0x3fefffffffe2f664, 0x3e20b0fc5b6d05a0
.quad 0x3fefffffffe4fa30, 0x3e1f1e3523b41d7d
.quad 0x3fefffffffe6daf7, 0x3e1d00de6608effe
.quad 0x3fefffffffe89b0c, 0x3e1b0778b7b3301b
.quad 0x3fefffffffea3c9a, 0x3e192fb04ec0f6cf
.quad 0x3fefffffffebc1a9, 0x3e177756ec9f78fa
.quad 0x3fefffffffed2c21, 0x3e15dc61922d5a06
.quad 0x3fefffffffee7dc8, 0x3e145ce65699ff6d
.quad 0x3fefffffffefb847, 0x3e12f71a5f159970
.quad 0x3feffffffff0dd2b, 0x3e11a94ff571654f
.quad 0x3feffffffff1ede9, 0x3e1071f4bbea09ec
.quad 0x3feffffffff2ebda, 0x3e0e9f1ff8ddd774
.quad 0x3feffffffff3d843, 0x3e0c818223a202c7
.quad 0x3feffffffff4b453, 0x3e0a887bd2b4404d
.quad 0x3feffffffff58126, 0x3e08b1a336c5eb6b
.quad 0x3feffffffff63fc3, 0x3e06fab63324088a
.quad 0x3feffffffff6f121, 0x3e056197e30205ba
.quad 0x3feffffffff79626, 0x3e03e44e45301b92
.quad 0x3feffffffff82fab, 0x3e0281000bfe4c3f
.quad 0x3feffffffff8be77, 0x3e0135f28f2d50b4
.quad 0x3feffffffff94346, 0x3e000187dded5975
.quad 0x3feffffffff9bec8, 0x3dfdc479de0ef001
.quad 0x3feffffffffa319f, 0x3dfbad4fdad3caa1
.quad 0x3feffffffffa9c63, 0x3df9baed3ed27ab8
.quad 0x3feffffffffaffa4, 0x3df7ead9ce4285bb
.quad 0x3feffffffffb5be5, 0x3df63ac6b4edc88e
.quad 0x3feffffffffbb1a2, 0x3df4a88be2a6390c
.quad 0x3feffffffffc014e, 0x3df332259185f1a0
.quad 0x3feffffffffc4b56, 0x3df1d5b1f3793044
.quad 0x3feffffffffc901c, 0x3df0916f04b6e18b
.quad 0x3feffffffffccfff, 0x3deec77101de6926
.quad 0x3feffffffffd0b56, 0x3dec960bf23153e0
.quad 0x3feffffffffd4271, 0x3dea8bd20fc65ef7
.quad 0x3feffffffffd759d, 0x3de8a61745ec7d1d
.quad 0x3feffffffffda520, 0x3de6e25d0e756261
.quad 0x3feffffffffdd13c, 0x3de53e4f7d1666cb
.quad 0x3feffffffffdfa2d, 0x3de3b7c27a7ddb0e
.quad 0x3feffffffffe202d, 0x3de24caf2c32af14
.quad 0x3feffffffffe4371, 0x3de0fb3186804d0f
.quad 0x3feffffffffe642a, 0x3ddf830c0bb41fd7
.quad 0x3feffffffffe8286, 0x3ddd3c0f1a91c846
.quad 0x3feffffffffe9eb0, 0x3ddb1e5acf351d87
.quad 0x3feffffffffeb8d0, 0x3dd92712d259ce66
.quad 0x3feffffffffed10a, 0x3dd7538c60a04476
.quad 0x3feffffffffee782, 0x3dd5a14b04b47879
.quad 0x3feffffffffefc57, 0x3dd40dfd87456f4c
.quad 0x3fefffffffff0fa7, 0x3dd2977b1172b9d5
.quad 0x3fefffffffff218f, 0x3dd13bc07e891491
.quad 0x3fefffffffff3227, 0x3dcff1dbb4300811
.quad 0x3fefffffffff4188, 0x3dcd9a880f306bd8
.quad 0x3fefffffffff4fc9, 0x3dcb6e45220b55e0
.quad 0x3fefffffffff5cfd, 0x3dc96a0b33f2c4da
.quad 0x3fefffffffff6939, 0x3dc78b07e9e924ac
.quad 0x3fefffffffff748e, 0x3dc5ce9ab1670dd2
.quad 0x3fefffffffff7f0d, 0x3dc4325167006bb0
.quad 0x3fefffffffff88c5, 0x3dc2b3e53538ff3f
.quad 0x3fefffffffff91c6, 0x3dc15137a7f44864
.quad 0x3fefffffffff9a1b, 0x3dc0084ff125639d
.quad 0x3fefffffffffa1d2, 0x3dbdaeb0b7311ec7
.quad 0x3fefffffffffa8f6, 0x3dbb7937d1c40c53
.quad 0x3fefffffffffaf92, 0x3db96d082f59ab06
.quad 0x3fefffffffffb5b0, 0x3db7872d9fa10aad
.quad 0x3fefffffffffbb58, 0x3db5c4e8e37bc7d0
.quad 0x3fefffffffffc095, 0x3db423ac0df49a40
.quad 0x3fefffffffffc56d, 0x3db2a117230ad284
.quad 0x3fefffffffffc9e8, 0x3db13af4f04f9998
.quad 0x3fefffffffffce0d, 0x3dafde703724e560
.quad 0x3fefffffffffd1e1, 0x3dad77f0c82e7641
.quad 0x3fefffffffffd56c, 0x3dab3ee02611d7dd
.quad 0x3fefffffffffd8b3, 0x3da92ff33023d5bd
.quad 0x3fefffffffffdbba, 0x3da7481a9e69f53f
.quad 0x3fefffffffffde86, 0x3da5847eda620959
.quad 0x3fefffffffffe11d, 0x3da3e27c1fcc74bd
.quad 0x3fefffffffffe380, 0x3da25f9ee0b923dc
.quad 0x3fefffffffffe5b6, 0x3da0f9a068653200
.quad 0x3fefffffffffe7c0, 0x3d9f5cc7718082b0
.quad 0x3fefffffffffe9a2, 0x3d9cf7e53d6a2ca5
.quad 0x3fefffffffffeb60, 0x3d9ac0f5f3229372
.quad 0x3fefffffffffecfb, 0x3d98b498644847ea
.quad 0x3fefffffffffee77, 0x3d96cfa9bcca59dc
.quad 0x3fefffffffffefd6, 0x3d950f411d4fd2cd
.quad 0x3feffffffffff11a, 0x3d9370ab8327af5e
.quad 0x3feffffffffff245, 0x3d91f167f88c6b6e
.quad 0x3feffffffffff359, 0x3d908f24085d4597
.quad 0x3feffffffffff457, 0x3d8e8f70e181d61a
.quad 0x3feffffffffff542, 0x3d8c324c20e337dc
.quad 0x3feffffffffff61b, 0x3d8a03261574b54e
.quad 0x3feffffffffff6e3, 0x3d87fe903cdf5855
.quad 0x3feffffffffff79b, 0x3d86215c58da3450
.quad 0x3feffffffffff845, 0x3d846897d4b69fc6
.quad 0x3feffffffffff8e2, 0x3d82d1877d731b7b
.quad 0x3feffffffffff973, 0x3d8159a386b11517
.quad 0x3feffffffffff9f8, 0x3d7ffd27ae9393ce
.quad 0x3feffffffffffa73, 0x3d7d7c593130dd0b
.quad 0x3feffffffffffae4, 0x3d7b2cd607c79bcf
.quad 0x3feffffffffffb4c, 0x3d790ae4d3405651
.quad 0x3feffffffffffbad, 0x3d771312dd1759e2
.quad 0x3feffffffffffc05, 0x3d75422ef5d8949d
.quad 0x3feffffffffffc57, 0x3d739544b0ecc957
.quad 0x3feffffffffffca2, 0x3d720997f73e73dd
.quad 0x3feffffffffffce7, 0x3d709ca0eaacd277
.quad 0x3feffffffffffd27, 0x3d6e9810295890ec
.quad 0x3feffffffffffd62, 0x3d6c2b45b5aa4a1d
.quad 0x3feffffffffffd98, 0x3d69eee068fa7596
.quad 0x3feffffffffffdca, 0x3d67df2b399c10a8
.quad 0x3feffffffffffdf8, 0x3d65f8b87a31bd85
.quad 0x3feffffffffffe22, 0x3d64385c96e9a2d9
.quad 0x3feffffffffffe49, 0x3d629b2933ef4cbc
.quad 0x3feffffffffffe6c, 0x3d611e68a6378f8a
.quad 0x3feffffffffffe8d, 0x3d5f7f338086a86b
.quad 0x3feffffffffffeab, 0x3d5cf8d7d9ce040a
.quad 0x3feffffffffffec7, 0x3d5aa577251ae485
.quad 0x3feffffffffffee1, 0x3d58811d739efb5f
.quad 0x3feffffffffffef8, 0x3d568823e52970be
.quad 0x3fefffffffffff0e, 0x3d54b72ae68e8b4c
.quad 0x3fefffffffffff22, 0x3d530b14dbe876bc
.quad 0x3fefffffffffff34, 0x3d5181012ef86610
.quad 0x3fefffffffffff45, 0x3d501647ba798745
.quad 0x3fefffffffffff54, 0x3d4d90e917701675
.quad 0x3fefffffffffff62, 0x3d4b2a87e86d0c8a
.quad 0x3fefffffffffff6f, 0x3d48f53dcb377293
.quad 0x3fefffffffffff7b, 0x3d46ed2f2515e933
.quad 0x3fefffffffffff86, 0x3d450ecc9ed47f19
.quad 0x3fefffffffffff90, 0x3d4356cd5ce7799e
.quad 0x3fefffffffffff9a, 0x3d41c229a587ab78
.quad 0x3fefffffffffffa2, 0x3d404e15ecc7f3f6
.quad 0x3fefffffffffffaa, 0x3d3deffc7e6a6017
.quad 0x3fefffffffffffb1, 0x3d3b7b040832f310
.quad 0x3fefffffffffffb8, 0x3d3938e021f36d76
.quad 0x3fefffffffffffbe, 0x3d37258610b3b233
.quad 0x3fefffffffffffc3, 0x3d353d3bfc82a909
.quad 0x3fefffffffffffc8, 0x3d337c92babdc2fd
.quad 0x3fefffffffffffcd, 0x3d31e06010120f6a
.quad 0x3fefffffffffffd1, 0x3d3065b9616170d4
.quad 0x3fefffffffffffd5, 0x3d2e13dd96b3753b
.quad 0x3fefffffffffffd9, 0x3d2b950d32467392
.quad 0x3fefffffffffffdc, 0x3d294a72263259a5
.quad 0x3fefffffffffffdf, 0x3d272fd93e036cdc
.quad 0x3fefffffffffffe2, 0x3d254164576929ab
.quad 0x3fefffffffffffe4, 0x3d237b83c521fe96
.quad 0x3fefffffffffffe7, 0x3d21daf033182e96
.quad 0x3fefffffffffffe9, 0x3d205ca50205d26a
.quad 0x3fefffffffffffeb, 0x3d1dfbb6235639fa
.quad 0x3fefffffffffffed, 0x3d1b7807e294781f
.quad 0x3fefffffffffffee, 0x3d19298add70a734
.quad 0x3feffffffffffff0, 0x3d170beaf9c7ffb6
.quad 0x3feffffffffffff1, 0x3d151b2cd6709222
.quad 0x3feffffffffffff3, 0x3d1353a6cf7f7fff
.quad 0x3feffffffffffff4, 0x3d11b1fa8cbe84a7
.quad 0x3feffffffffffff5, 0x3d10330f0fd69921
.quad 0x3feffffffffffff6, 0x3d0da81670f96f9b
.quad 0x3feffffffffffff7, 0x3d0b24a16b4d09aa
.quad 0x3feffffffffffff7, 0x3d08d6eeb6efdbd6
.quad 0x3feffffffffffff8, 0x3d06ba91ac734786
.quad 0x3feffffffffffff9, 0x3d04cb7966770ab5
.quad 0x3feffffffffffff9, 0x3d0305e9721d0981
.quad 0x3feffffffffffffa, 0x3d01667311fff70a
.quad 0x3feffffffffffffb, 0x3cffd3de10d62855
.quad 0x3feffffffffffffb, 0x3cfd1aefbcd48d0c
.quad 0x3feffffffffffffb, 0x3cfa9cc93c25aca9
.quad 0x3feffffffffffffc, 0x3cf85487ee3ea735
.quad 0x3feffffffffffffc, 0x3cf63daf8b4b1e0c
.quad 0x3feffffffffffffd, 0x3cf45421e69a6ca1
.quad 0x3feffffffffffffd, 0x3cf294175802d99a
.quad 0x3feffffffffffffd, 0x3cf0fa17bf41068f
.quad 0x3feffffffffffffd, 0x3cef05e82aae2bb9
.quad 0x3feffffffffffffe, 0x3cec578101b29058
.quad 0x3feffffffffffffe, 0x3ce9e39dc5dd2f7c
.quad 0x3feffffffffffffe, 0x3ce7a553a728bbf2
.quad 0x3feffffffffffffe, 0x3ce5982008db1304
.quad 0x3feffffffffffffe, 0x3ce3b7e00422e51b
.quad 0x3feffffffffffffe, 0x3ce200c898d9ee3e
.quad 0x3fefffffffffffff, 0x3ce06f5f7eb65a56
.quad 0x3fefffffffffffff, 0x3cde00e9148a1d25
.quad 0x3fefffffffffffff, 0x3cdb623734024e92
.quad 0x3fefffffffffffff, 0x3cd8fd4e01891bf8
.quad 0x3fefffffffffffff, 0x3cd6cd44c7470d89
.quad 0x3fefffffffffffff, 0x3cd4cd9c04158cd7
.quad 0x3fefffffffffffff, 0x3cd2fa34bf5c8344
.quad 0x3fefffffffffffff, 0x3cd14f4890ff2461
.quad 0x3fefffffffffffff, 0x3ccf92c49dfa4df5
.quad 0x3fefffffffffffff, 0x3ccccaaea71ab0df
.quad 0x3fefffffffffffff, 0x3cca40829f001197
.quad 0x3ff0000000000000, 0x3cc7eef13b59e96c
.quad 0x3ff0000000000000, 0x3cc5d11e1a252bf5
.quad 0x3ff0000000000000, 0x3cc3e296303b2297
.quad 0x3ff0000000000000, 0x3cc21f47009f43ce
.quad 0x3ff0000000000000, 0x3cc083768c5e4542
.quad 0x3ff0000000000000, 0x3cbe1777d831265f
.quad 0x3ff0000000000000, 0x3cbb69f10b0191b5
.quad 0x3ff0000000000000, 0x3cb8f8a3a05b5b53
.quad 0x3ff0000000000000, 0x3cb6be573c40c8e7
.quad 0x3ff0000000000000, 0x3cb4b645ba991fdb
.align 32
.quad 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff /* _AbsMask */
.align 32
.quad 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000 /* _MaxThreshold = 6.0 - 1.0/128.0 */
.align 32
.quad 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000 /* SRound */
.align 32
.quad 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000 /* _U2THreshold */
.align 32
.quad 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5 /* _poly_1_0 */
.align 32
.quad 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1 /* _poly_1_1 */
.align 32
.quad 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57 /* _poly_3_0 */
.align 32
.quad 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8 /* _poly_3_1 */
.align 32
.quad 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F /* _poly_5_0 */
.align 32
.quad 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122 /* _poly_5_1 */
.align 32
.quad 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6 /* _poly_1_2 */
.align 32
.quad 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd /* _poly_3_2 */
.align 32
.quad 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c /* _poly_1_3 */
.align 32
.quad 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555 /* _poly_3_3 */
.align 32
.quad 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff /* _Mask32 */
.align 32
.type __svml_derf_data_internal,@object
.size __svml_derf_data_internal,.-__svml_derf_data_internal

View File

@ -0,0 +1,20 @@
/* AVX2 version of vectorized erf, 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_erf _ZGVeN8v_erf_avx2_wrapper
#include "../svml_d_erf8_core.S"

View File

@ -0,0 +1,27 @@
/* Multiple versions of vectorized erf, 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_erf
#include "ifunc-mathvec-avx512-skx.h"
libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
#ifdef SHARED
__hidden_ver1 (_ZGVeN8v_erf, __GI__ZGVeN8v_erf, __redirect__ZGVeN8v_erf)
__attribute__ ((visibility ("hidden")));
#endif

View File

@ -0,0 +1,983 @@
/* Function erf 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:
*
* Basic formula is
* erf(x) ~ erf(x0) +
* + exp(-x0*x0)*D*(1+c0+T*P1(T)+D^2*P3(T)+D^4*P5(T)+D^6*p7+D^8*p9)
* where D=x-x0, T=x0*D
* x0 is x rounded to a specified number of fractional bits (in this case 7),
* except that x0=0 for |x|<3.5/128.0 (using x0=0 for first 4 table entries)
*
* Data table packs both erf(x0)_high and a few bits of erf(x0)_low in one
* entry (in place of redundant exponent bits)
*
*/
/* Offsets for data table __svml_derf_data_internal
*/
#define _erf_tbl 0
#define _AbsMask 12288
#define _MaxThreshold 12352
#define _SRound 12416
#define _U2Threshold 12480
#define _poly1_0 12544
#define _poly1_1 12608
#define _poly3_0 12672
#define _poly3_1 12736
#define _poly5_0 12800
#define _poly5_1 12864
#define _poly1_2 12928
#define _poly3_2 12992
#define _poly1_3 13056
#define _poly3_3 13120
#define _Mask32 13184
#include <sysdep.h>
.text
.section .text.evex512,"ax",@progbits
ENTRY(_ZGVeN8v_erf_skx)
/*
* vector gather: erf(x0),
* second value is exp(-x0*x0)
*/
lea __svml_derf_data_internal(%rip), %rax
/*
* erf(x) rounds to 1.0 for x>_MaxThreshold (5.9921875)
* can compute all results in the main path
*/
vmovups _MaxThreshold+__svml_derf_data_internal(%rip), %zmm9
vmovups _SRound+__svml_derf_data_internal(%rip), %zmm11
vmovups _U2Threshold+__svml_derf_data_internal(%rip), %zmm10
vandpd _AbsMask+__svml_derf_data_internal(%rip), %zmm0, %zmm7
vpternlogd $0xff, %zmm1, %zmm1, %zmm14
kxnorw %k0, %k0, %k3
kxnorw %k0, %k0, %k2
vminpd {sae}, %zmm9, %zmm7, %zmm12
/* save sign */
vxorpd %zmm0, %zmm7, %zmm8
vaddpd {rn-sae}, %zmm11, %zmm12, %zmm15
vcmppd $26, {sae}, %zmm10, %zmm12, %k1
/*
* _LA_ polynomial computation
* Start polynomial evaluation
*/
vmovups _poly1_0+__svml_derf_data_internal(%rip), %zmm10
vpsllq $4, %zmm15, %zmm3
vsubpd {rn-sae}, %zmm11, %zmm15, %zmm13
vmovups _poly3_0+__svml_derf_data_internal(%rip), %zmm11
vmovups _poly3_3+__svml_derf_data_internal(%rip), %zmm15
vsubpd {rn-sae}, %zmm13, %zmm12, %zmm1
vmulpd {rn-sae}, %zmm1, %zmm13, %zmm6
/* NaN fixup */
vminpd {sae}, %zmm7, %zmm1, %zmm7
vmovups _poly1_2+__svml_derf_data_internal(%rip), %zmm13
vpandq _Mask32+__svml_derf_data_internal(%rip), %zmm3, %zmm2
vpmovqd %zmm2, %ymm0
vmovups _poly1_1+__svml_derf_data_internal(%rip), %zmm2
vfmadd231pd {rn-sae}, %zmm6, %zmm10, %zmm2
vfmadd213pd {rn-sae}, %zmm13, %zmm6, %zmm2
vpxord %zmm4, %zmm4, %zmm4
vgatherdpd 8(%rax,%ymm0), %zmm4{%k3}
vpxord %zmm5, %zmm5, %zmm5
vgatherdpd (%rax,%ymm0), %zmm5{%k2}
vmovups _poly3_1+__svml_derf_data_internal(%rip), %zmm0
/* Sign | _Erf_H */
vxorpd %zmm8, %zmm5, %zmm5
vfmadd231pd {rn-sae}, %zmm6, %zmm11, %zmm0
vpandnq %zmm12, %zmm12, %zmm14{%k1}
vandpd %zmm14, %zmm1, %zmm9
/* Sign | Diff */
vxorpd %zmm8, %zmm7, %zmm1
vmovups _poly5_0+__svml_derf_data_internal(%rip), %zmm12
vmovups _poly5_1+__svml_derf_data_internal(%rip), %zmm7
vmovups _poly3_2+__svml_derf_data_internal(%rip), %zmm14
/* D2 = Diff^2 */
vmulpd {rn-sae}, %zmm9, %zmm9, %zmm3
/* T^2 */
vmulpd {rn-sae}, %zmm6, %zmm6, %zmm9
/* exp_h(x0) * Diff */
vmulpd {rn-sae}, %zmm1, %zmm4, %zmm4
vfmadd231pd {rn-sae}, %zmm6, %zmm12, %zmm7
vmovups _poly1_3+__svml_derf_data_internal(%rip), %zmm12
vfmadd213pd {rn-sae}, %zmm14, %zmm6, %zmm0
vfmadd213pd {rn-sae}, %zmm15, %zmm3, %zmm7
vfmadd213pd {rn-sae}, %zmm12, %zmm6, %zmm2
vfmadd213pd {rn-sae}, %zmm7, %zmm6, %zmm0
/* P1 = T^2*P1 - T */
vfmsub213pd {rn-sae}, %zmm6, %zmm9, %zmm2
/* P1 + P3*D2 */
vfmadd213pd {rn-sae}, %zmm2, %zmm3, %zmm0
/*
* branch-free
* low part of result: exp_h(x0) * Diff*(1+P1)
*/
vfmadd213pd {rn-sae}, %zmm4, %zmm4, %zmm0
/* Final result */
vaddpd {rn-sae}, %zmm5, %zmm0, %zmm6
/* Fix erf(-0) = -0 */
vorpd %zmm8, %zmm6, %zmm0
ret
END(_ZGVeN8v_erf_skx)
.section .rodata, "a"
.align 64
#ifdef __svml_derf_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct
{
__declspec(align(64)) VUINT32 _erf_tbl[6*128*2][2];
__declspec(align(64)) VUINT32 _AbsMask[8][2];
__declspec(align(64)) VUINT32 _MaxThreshold[8][2];
__declspec(align(64)) VUINT32 _SRound[8][2];
__declspec(align(64)) VUINT32 _U2Threshold[8][2];
__declspec(align(64)) VUINT32 _poly1_0[8][2];
__declspec(align(64)) VUINT32 _poly1_1[8][2];
__declspec(align(64)) VUINT32 _poly3_0[8][2];
__declspec(align(64)) VUINT32 _poly3_1[8][2];
__declspec(align(64)) VUINT32 _poly5_0[8][2];
__declspec(align(64)) VUINT32 _poly5_1[8][2];
__declspec(align(64)) VUINT32 _poly1_2[8][2];
__declspec(align(64)) VUINT32 _poly3_2[8][2];
__declspec(align(64)) VUINT32 _poly1_3[8][2];
__declspec(align(64)) VUINT32 _poly3_3[8][2];
__declspec(align(64)) VUINT32 _Mask32[8][2];
} __svml_derf_data_internal;
#endif
__svml_derf_data_internal:
/*== _erf_tbl ==*/
.quad 0x0000000000000000, 0x3ff20dd750429b6d
.quad 0x3f820dbf3deb1340, 0x3ff20d8f1975c85d
.quad 0x3f920d77083f17a0, 0x3ff20cb67bd452c7
.quad 0x3f9b137e0cf584dc, 0x3ff20b4d8bac36c1
.quad 0x3fa20c5645dd2538, 0x3ff209546ad13ccf
.quad 0x3fa68e5d3bbc9526, 0x3ff206cb4897b148
.quad 0x3fab0fafef135745, 0x3ff203b261cd0053
.quad 0x3faf902a77bd3821, 0x3ff2000a00ae3804
.quad 0x3fb207d480e90658, 0x3ff1fbd27cdc72d3
.quad 0x3fb44703e87e8593, 0x3ff1f70c3b4f2cc8
.quad 0x3fb68591a1e83b5d, 0x3ff1f1b7ae44867f
.quad 0x3fb8c36beb8a8d23, 0x3ff1ebd5552f795b
.quad 0x3fbb0081148a873a, 0x3ff1e565bca400d4
.quad 0x3fbd3cbf7e70a4b3, 0x3ff1de697e413d29
.quad 0x3fbf78159ec8bb50, 0x3ff1d6e14099944a
.quad 0x3fc0d939005f65e5, 0x3ff1cecdb718d61c
.quad 0x3fc1f5e1a35c3b89, 0x3ff1c62fa1e869b6
.quad 0x3fc311fc15f56d14, 0x3ff1bd07cdd189ac
.quad 0x3fc42d7fc2f64959, 0x3ff1b357141d95d5
.quad 0x3fc548642321d7c6, 0x3ff1a91e5a748165
.quad 0x3fc662a0bdf7a89f, 0x3ff19e5e92b964ab
.quad 0x3fc77c2d2a765f9e, 0x3ff19318bae53a04
.quad 0x3fc895010fdbdbfd, 0x3ff1874ddcdfce24
.quad 0x3fc9ad142662e14d, 0x3ff17aff0e56ec10
.quad 0x3fcac45e37fe2526, 0x3ff16e2d7093cd8c
.quad 0x3fcbdad72110a648, 0x3ff160da304ed92f
.quad 0x3fccf076d1233237, 0x3ff153068581b781
.quad 0x3fce05354b96ff36, 0x3ff144b3b337c90c
.quad 0x3fcf190aa85540e2, 0x3ff135e3075d076b
.quad 0x3fd015f78a3dcf3d, 0x3ff12695da8b5bde
.quad 0x3fd09eed6982b948, 0x3ff116cd8fd67618
.quad 0x3fd127631eb8de32, 0x3ff1068b94962e5e
.quad 0x3fd1af54e232d609, 0x3ff0f5d1602f7e41
.quad 0x3fd236bef825d9a2, 0x3ff0e4a073dc1b91
.quad 0x3fd2bd9db0f7827f, 0x3ff0d2fa5a70c168
.quad 0x3fd343ed6989b7d9, 0x3ff0c0e0a8223359
.quad 0x3fd3c9aa8b84beda, 0x3ff0ae54fa490723
.quad 0x3fd44ed18d9f6462, 0x3ff09b58f724416b
.quad 0x3fd4d35ef3e5372e, 0x3ff087ee4d9ad247
.quad 0x3fd5574f4ffac98e, 0x3ff07416b4fbfe7c
.quad 0x3fd5da9f415ff23f, 0x3ff05fd3ecbec298
.quad 0x3fd65d4b75b00471, 0x3ff04b27bc403d30
.quad 0x3fd6df50a8dff772, 0x3ff03613f2812daf
.quad 0x3fd760aba57a76bf, 0x3ff0209a65e29545
.quad 0x3fd7e15944d9d3e4, 0x3ff00abcf3e187a9
.quad 0x3fd861566f5fd3c0, 0x3fefe8fb01a47307
.quad 0x3fd8e0a01cab516b, 0x3fefbbbbef34b4b2
.quad 0x3fd95f3353cbb146, 0x3fef8dc092d58ff8
.quad 0x3fd9dd0d2b721f39, 0x3fef5f0cdaf15313
.quad 0x3fda5a2aca209394, 0x3fef2fa4c16c0019
.quad 0x3fdad68966569a87, 0x3feeff8c4b1375db
.quad 0x3fdb522646bbda68, 0x3feecec7870ebca8
.quad 0x3fdbccfec24855b8, 0x3fee9d5a8e4c934e
.quad 0x3fdc4710406a65fc, 0x3fee6b4982f158b9
.quad 0x3fdcc058392a6d2d, 0x3fee38988fc46e72
.quad 0x3fdd38d4354c3bd0, 0x3fee054be79d3042
.quad 0x3fddb081ce6e2a48, 0x3fedd167c4cf9d2a
.quad 0x3fde275eaf25e458, 0x3fed9cf06898cdaf
.quad 0x3fde9d68931ae650, 0x3fed67ea1a8b5368
.quad 0x3fdf129d471eabb1, 0x3fed325927fb9d89
.quad 0x3fdf86faa9428f9d, 0x3fecfc41e36c7df9
.quad 0x3fdffa7ea8eb5fd0, 0x3fecc5a8a3fbea40
.quad 0x3fe03693a371519c, 0x3fec8e91c4d01368
.quad 0x3fe06f794ab2cae7, 0x3fec5701a484ef9d
.quad 0x3fe0a7ef5c18edd2, 0x3fec1efca49a5011
.quad 0x3fe0dff4f247f6c6, 0x3febe68728e29d5e
.quad 0x3fe1178930ada115, 0x3febada596f25436
.quad 0x3fe14eab43841b55, 0x3feb745c55905bf8
.quad 0x3fe1855a5fd3dd50, 0x3feb3aafcc27502e
.quad 0x3fe1bb95c3746199, 0x3feb00a46237d5be
.quad 0x3fe1f15cb50bc4de, 0x3feac63e7ecc1411
.quad 0x3fe226ae840d4d70, 0x3fea8b8287ec6a09
.quad 0x3fe25b8a88b6dd7f, 0x3fea5074e2157620
.quad 0x3fe28ff0240d52cd, 0x3fea1519efaf889e
.quad 0x3fe2c3debfd7d6c1, 0x3fe9d97610879642
.quad 0x3fe2f755ce9a21f4, 0x3fe99d8da149c13f
.quad 0x3fe32a54cb8db67b, 0x3fe96164fafd8de3
.quad 0x3fe35cdb3a9a144d, 0x3fe925007283d7aa
.quad 0x3fe38ee8a84beb71, 0x3fe8e86458169af8
.quad 0x3fe3c07ca9cb4f9e, 0x3fe8ab94f6caa71d
.quad 0x3fe3f196dcd0f135, 0x3fe86e9694134b9e
.quad 0x3fe42236e79a5fa6, 0x3fe8316d6f48133d
.quad 0x3fe4525c78dd5966, 0x3fe7f41dc12c9e89
.quad 0x3fe4820747ba2dc2, 0x3fe7b6abbb7aaf19
.quad 0x3fe4b13713ad3513, 0x3fe7791b886e7403
.quad 0x3fe4dfeba47f63cc, 0x3fe73b714a552763
.quad 0x3fe50e24ca35fd2c, 0x3fe6fdb11b1e0c34
.quad 0x3fe53be25d016a4f, 0x3fe6bfdf0beddaf5
.quad 0x3fe569243d2b3a9b, 0x3fe681ff24b4ab04
.quad 0x3fe595ea53035283, 0x3fe6441563c665d4
.quad 0x3fe5c2348ecc4dc3, 0x3fe60625bd75d07b
.quad 0x3fe5ee02e8a71a53, 0x3fe5c8341bb23767
.quad 0x3fe61955607dd15d, 0x3fe58a445da7c74c
.quad 0x3fe6442bfdedd397, 0x3fe54c5a57629db0
.quad 0x3fe66e86d0312e82, 0x3fe50e79d1749ac9
.quad 0x3fe69865ee075011, 0x3fe4d0a6889dfd9f
.quad 0x3fe6c1c9759d0e5f, 0x3fe492e42d78d2c5
.quad 0x3fe6eab18c74091b, 0x3fe4553664273d24
.quad 0x3fe7131e5f496a5a, 0x3fe417a0c4049fd0
.quad 0x3fe73b1021fc0cb8, 0x3fe3da26d759aef5
.quad 0x3fe762870f720c6f, 0x3fe39ccc1b136d5a
.quad 0x3fe78983697dc96f, 0x3fe35f93fe7d1b3d
.quad 0x3fe7b00578c26037, 0x3fe32281e2fd1a92
.quad 0x3fe7d60d8c979f7b, 0x3fe2e5991bd4cbfc
.quad 0x3fe7fb9bfaed8078, 0x3fe2a8dcede3673b
.quad 0x3fe820b1202f27fb, 0x3fe26c508f6bd0ff
.quad 0x3fe8454d5f25760d, 0x3fe22ff727dd6f7b
.quad 0x3fe8697120d92a4a, 0x3fe1f3d3cf9ffe5a
.quad 0x3fe88d1cd474a2e0, 0x3fe1b7e98fe26217
.quad 0x3fe8b050ef253c37, 0x3fe17c3b626c7a12
.quad 0x3fe8d30debfc572e, 0x3fe140cc3173f007
.quad 0x3fe8f5544bd00c04, 0x3fe1059ed7740313
.quad 0x3fe91724951b8fc6, 0x3fe0cab61f084b93
.quad 0x3fe9387f53df5238, 0x3fe09014c2ca74da
.quad 0x3fe959651980da31, 0x3fe055bd6d32e8d7
.quad 0x3fe979d67caa6631, 0x3fe01bb2b87c6968
.quad 0x3fe999d4192a5715, 0x3fdfc3ee5d1524b0
.quad 0x3fe9b95e8fd26aba, 0x3fdf511a91a67d2a
.quad 0x3fe9d8768656cc42, 0x3fdedeeee0959518
.quad 0x3fe9f71ca72cffb6, 0x3fde6d6ffaa65a25
.quad 0x3fea1551a16aaeaf, 0x3fddfca26f5bbf88
.quad 0x3fea331628a45b92, 0x3fdd8c8aace11e63
.quad 0x3fea506af4cc00f4, 0x3fdd1d2cfff91594
.quad 0x3fea6d50c20fa293, 0x3fdcae8d93f1d7b7
.quad 0x3fea89c850b7d54d, 0x3fdc40b0729ed548
.quad 0x3feaa5d265064366, 0x3fdbd3998457afdb
.quad 0x3feac16fc7143263, 0x3fdb674c8ffc6283
.quad 0x3feadca142b10f98, 0x3fdafbcd3afe8ab6
.quad 0x3feaf767a741088b, 0x3fda911f096fbc26
.quad 0x3feb11c3c79bb424, 0x3fda27455e14c93c
.quad 0x3feb2bb679ead19c, 0x3fd9be437a7de946
.quad 0x3feb4540978921ee, 0x3fd9561c7f23a47b
.quad 0x3feb5e62fce16095, 0x3fd8eed36b886d93
.quad 0x3feb771e894d602e, 0x3fd8886b1e5ecfd1
.quad 0x3feb8f741ef54f83, 0x3fd822e655b417e7
.quad 0x3feba764a2af2b78, 0x3fd7be47af1f5d89
.quad 0x3febbef0fbde6221, 0x3fd75a91a7f4d2ed
.quad 0x3febd61a1453ab44, 0x3fd6f7c69d7d3ef8
.quad 0x3febece0d82d1a5c, 0x3fd695e8cd31867e
.quad 0x3fec034635b66e23, 0x3fd634fa54fa285f
.quad 0x3fec194b1d49a184, 0x3fd5d4fd33729015
.quad 0x3fec2ef0812fc1bd, 0x3fd575f3483021c3
.quad 0x3fec443755820d64, 0x3fd517de540ce2a3
.quad 0x3fec5920900b5fd1, 0x3fd4babff975a04c
.quad 0x3fec6dad2829ec62, 0x3fd45e99bcbb7915
.quad 0x3fec81de16b14cef, 0x3fd4036d0468a7a2
.quad 0x3fec95b455cce69d, 0x3fd3a93b1998736c
.quad 0x3feca930e0e2a825, 0x3fd35005285227f1
.quad 0x3fecbc54b476248d, 0x3fd2f7cc3fe6f423
.quad 0x3feccf20ce0c0d27, 0x3fd2a09153529381
.quad 0x3fece1962c0e0d8b, 0x3fd24a55399ea239
.quad 0x3fecf3b5cdaf0c39, 0x3fd1f518ae487dc8
.quad 0x3fed0580b2cfd249, 0x3fd1a0dc51a9934d
.quad 0x3fed16f7dbe41ca0, 0x3fd14da0a961fd14
.quad 0x3fed281c49d818d0, 0x3fd0fb6620c550af
.quad 0x3fed38eefdf64fdd, 0x3fd0aa2d09497f2b
.quad 0x3fed4970f9ce00d9, 0x3fd059f59af7a906
.quad 0x3fed59a33f19ed42, 0x3fd00abff4dec7a3
.quad 0x3fed6986cfa798e7, 0x3fcf79183b101c5b
.quad 0x3fed791cad3eff01, 0x3fcedeb406d9c825
.quad 0x3fed8865d98abe01, 0x3fce4652fadcb6b2
.quad 0x3fed97635600bb89, 0x3fcdaff4969c0b04
.quad 0x3feda61623cb41e0, 0x3fcd1b982c501370
.quad 0x3fedb47f43b2980d, 0x3fcc893ce1dcbef7
.quad 0x3fedc29fb60715af, 0x3fcbf8e1b1ca2279
.quad 0x3fedd0787a8bb39d, 0x3fcb6a856c3ed54f
.quad 0x3fedde0a90611a0d, 0x3fcade26b7fbed95
.quad 0x3fedeb56f5f12d28, 0x3fca53c4135a6526
.quad 0x3fedf85ea8db188e, 0x3fc9cb5bd549b111
.quad 0x3fee0522a5dfda73, 0x3fc944ec2e4f5630
.quad 0x3fee11a3e8cf4eb8, 0x3fc8c07329874652
.quad 0x3fee1de36c75ba58, 0x3fc83deeada4d25a
.quad 0x3fee29e22a89d766, 0x3fc7bd5c7df3fe9c
.quad 0x3fee35a11b9b61ce, 0x3fc73eba3b5b07b7
.quad 0x3fee4121370224cc, 0x3fc6c205655be720
.quad 0x3fee4c6372cd8927, 0x3fc6473b5b15a7a1
.quad 0x3fee5768c3b4a3fc, 0x3fc5ce595c455b0a
.quad 0x3fee62321d06c5e0, 0x3fc5575c8a468362
.quad 0x3fee6cc0709c8a0d, 0x3fc4e241e912c305
.quad 0x3fee7714aec96534, 0x3fc46f066040a832
.quad 0x3fee812fc64db369, 0x3fc3fda6bc016994
.quad 0x3fee8b12a44944a8, 0x3fc38e1fae1d6a9d
.quad 0x3fee94be342e6743, 0x3fc3206dceef5f87
.quad 0x3fee9e335fb56f87, 0x3fc2b48d9e5dea1c
.quad 0x3feea7730ed0bbb9, 0x3fc24a7b84d38971
.quad 0x3feeb07e27a133aa, 0x3fc1e233d434b813
.quad 0x3feeb9558e6b42ce, 0x3fc17bb2c8d41535
.quad 0x3feec1fa258c4bea, 0x3fc116f48a6476cc
.quad 0x3feeca6ccd709544, 0x3fc0b3f52ce8c383
.quad 0x3feed2ae6489ac1e, 0x3fc052b0b1a174ea
.quad 0x3feedabfc7453e63, 0x3fbfe6460fef4680
.quad 0x3feee2a1d004692c, 0x3fbf2a901ccafb37
.quad 0x3feeea5557137ae0, 0x3fbe723726b824a9
.quad 0x3feef1db32a2277c, 0x3fbdbd32ac4c99b0
.quad 0x3feef93436bc2daa, 0x3fbd0b7a0f921e7c
.quad 0x3fef006135426b26, 0x3fbc5d0497c09e74
.quad 0x3fef0762fde45ee6, 0x3fbbb1c972f23e50
.quad 0x3fef0e3a5e1a1788, 0x3fbb09bfb7d11a84
.quad 0x3fef14e8211e8c55, 0x3fba64de673e8837
.quad 0x3fef1b6d0fea5f4d, 0x3fb9c31c6df3b1b8
.quad 0x3fef21c9f12f0677, 0x3fb92470a61b6965
.quad 0x3fef27ff89525acf, 0x3fb888d1d8e510a3
.quad 0x3fef2e0e9a6a8b09, 0x3fb7f036c0107294
.quad 0x3fef33f7e43a706b, 0x3fb75a96077274ba
.quad 0x3fef39bc242e43e6, 0x3fb6c7e64e7281cb
.quad 0x3fef3f5c1558b19e, 0x3fb6381e2980956b
.quad 0x3fef44d870704911, 0x3fb5ab342383d178
.quad 0x3fef4a31ebcd47df, 0x3fb5211ebf41880b
.quad 0x3fef4f693b67bd77, 0x3fb499d478bca735
.quad 0x3fef547f10d60597, 0x3fb4154bc68d75c3
.quad 0x3fef59741b4b97cf, 0x3fb3937b1b31925a
.quad 0x3fef5e4907982a07, 0x3fb31458e6542847
.quad 0x3fef62fe80272419, 0x3fb297db960e4f63
.quad 0x3fef67952cff6282, 0x3fb21df9981f8e53
.quad 0x3fef6c0db3c34641, 0x3fb1a6a95b1e786f
.quad 0x3fef7068b7b10fd9, 0x3fb131e14fa1625d
.quad 0x3fef74a6d9a38383, 0x3fb0bf97e95f2a64
.quad 0x3fef78c8b812d498, 0x3fb04fc3a0481321
.quad 0x3fef7cceef15d631, 0x3fafc4b5e32d6259
.quad 0x3fef80ba18636f07, 0x3faeeea8c1b1db94
.quad 0x3fef848acb544e95, 0x3fae1d4cf1e2450a
.quad 0x3fef88419ce4e184, 0x3fad508f9a1ea64f
.quad 0x3fef8bdf1fb78370, 0x3fac885df3451a07
.quad 0x3fef8f63e416ebff, 0x3fabc4a54a84e834
.quad 0x3fef92d077f8d56d, 0x3fab055303221015
.quad 0x3fef96256700da8e, 0x3faa4a549829587e
.quad 0x3fef99633a838a57, 0x3fa993979e14fffe
.quad 0x3fef9c8a7989af0d, 0x3fa8e109c4622913
.quad 0x3fef9f9ba8d3c733, 0x3fa83298d717210e
.quad 0x3fefa2974addae45, 0x3fa78832c03aa2b1
.quad 0x3fefa57ddfe27376, 0x3fa6e1c5893c380b
.quad 0x3fefa84fe5e05c8d, 0x3fa63f3f5c4de13b
.quad 0x3fefab0dd89d1309, 0x3fa5a08e85af27e0
.quad 0x3fefadb831a9f9c3, 0x3fa505a174e9c929
.quad 0x3fefb04f6868a944, 0x3fa46e66be002240
.quad 0x3fefb2d3f20f9101, 0x3fa3dacd1a8d8cce
.quad 0x3fefb54641aebbc9, 0x3fa34ac36ad8dafe
.quad 0x3fefb7a6c834b5a2, 0x3fa2be38b6d92415
.quad 0x3fefb9f5f4739170, 0x3fa2351c2f2d1449
.quad 0x3fefbc3433260ca5, 0x3fa1af5d2e04f3f6
.quad 0x3fefbe61eef4cf6a, 0x3fa12ceb37ff9bc3
.quad 0x3fefc07f907bc794, 0x3fa0adb5fcfa8c75
.quad 0x3fefc28d7e4f9cd0, 0x3fa031ad58d56279
.quad 0x3fefc48c1d033c7a, 0x3f9f7182a851bca2
.quad 0x3fefc67bcf2d7b8f, 0x3f9e85c449e377f3
.quad 0x3fefc85cf56ecd38, 0x3f9da0005e5f28df
.quad 0x3fefca2fee770c79, 0x3f9cc0180af00a8b
.quad 0x3fefcbf5170b578b, 0x3f9be5ecd2fcb5f9
.quad 0x3fefcdacca0bfb73, 0x3f9b1160991ff737
.quad 0x3fefcf57607a6e7c, 0x3f9a4255a00b9f03
.quad 0x3fefd0f5317f582f, 0x3f9978ae8b55ce1b
.quad 0x3fefd2869270a56f, 0x3f98b44e6031383e
.quad 0x3fefd40bd6d7a785, 0x3f97f5188610ddc8
.quad 0x3fefd58550773cb5, 0x3f973af0c737bb45
.quad 0x3fefd6f34f52013a, 0x3f9685bb5134ef13
.quad 0x3fefd85621b0876d, 0x3f95d55cb54cd53a
.quad 0x3fefd9ae142795e3, 0x3f9529b9e8cf9a1e
.quad 0x3fefdafb719e6a69, 0x3f9482b8455dc491
.quad 0x3fefdc3e835500b3, 0x3f93e03d891b37de
.quad 0x3fefdd7790ea5bc0, 0x3f93422fd6d12e2b
.quad 0x3fefdea6e062d0c9, 0x3f92a875b5ffab56
.quad 0x3fefdfccb62e52d3, 0x3f9212f612dee7fb
.quad 0x3fefe0e9552ebdd6, 0x3f9181983e5133dd
.quad 0x3fefe1fcfebe2083, 0x3f90f443edc5ce49
.quad 0x3fefe307f2b503d0, 0x3f906ae13b0d3255
.quad 0x3fefe40a6f70af4b, 0x3f8fcab1483ea7fc
.quad 0x3fefe504b1d9696c, 0x3f8ec72615a894c4
.quad 0x3fefe5f6f568b301, 0x3f8dcaf3691fc448
.quad 0x3fefe6e1742f7cf6, 0x3f8cd5ec93c12432
.quad 0x3fefe7c466dc57a1, 0x3f8be7e5ac24963b
.quad 0x3fefe8a004c19ae6, 0x3f8b00b38d6b3575
.quad 0x3fefe97483db8670, 0x3f8a202bd6372dce
.quad 0x3fefea4218d6594a, 0x3f894624e78e0faf
.quad 0x3fefeb08f7146046, 0x3f887275e3a6869e
.quad 0x3fefebc950b3fa75, 0x3f87a4f6aca256cb
.quad 0x3fefec835695932e, 0x3f86dd7fe3358230
.quad 0x3fefed37386190fb, 0x3f861beae53b72b7
.quad 0x3fefede5248e38f4, 0x3f856011cc3b036d
.quad 0x3fefee8d486585ee, 0x3f84a9cf6bda3f4c
.quad 0x3fefef2fd00af31a, 0x3f83f8ff5042a88e
.quad 0x3fefefcce6813974, 0x3f834d7dbc76d7e5
.quad 0x3feff064b5afffbe, 0x3f82a727a89a3f14
.quad 0x3feff0f766697c76, 0x3f8205dac02bd6b9
.quad 0x3feff18520700971, 0x3f81697560347b26
.quad 0x3feff20e0a7ba8c2, 0x3f80d1d69569b82d
.quad 0x3feff2924a3f7a83, 0x3f803ede1a45bfee
.quad 0x3feff312046f2339, 0x3f7f60d8aa2a88f2
.quad 0x3feff38d5cc4227f, 0x3f7e4cc4abf7d065
.quad 0x3feff404760319b4, 0x3f7d4143a9dfe965
.quad 0x3feff47772010262, 0x3f7c3e1a5f5c077c
.quad 0x3feff4e671a85425, 0x3f7b430ecf4a83a8
.quad 0x3feff55194fe19df, 0x3f7a4fe83fb9db25
.quad 0x3feff5b8fb26f5f6, 0x3f79646f35a76624
.quad 0x3feff61cc26c1578, 0x3f78806d70b2fc36
.quad 0x3feff67d08401202, 0x3f77a3ade6c8b3e5
.quad 0x3feff6d9e943c231, 0x3f76cdfcbfc1e263
.quad 0x3feff733814af88c, 0x3f75ff2750fe7820
.quad 0x3feff789eb6130c9, 0x3f7536fc18f7ce5c
.quad 0x3feff7dd41ce2b4d, 0x3f74754abacdf1dc
.quad 0x3feff82d9e1a76d8, 0x3f73b9e3f9d06e3f
.quad 0x3feff87b1913e853, 0x3f730499b503957f
.quad 0x3feff8c5cad200a5, 0x3f72553ee2a336bf
.quad 0x3feff90dcaba4096, 0x3f71aba78ba3af89
.quad 0x3feff9532f846ab0, 0x3f7107a8c7323a6e
.quad 0x3feff9960f3eb327, 0x3f706918b6355624
.quad 0x3feff9d67f51ddba, 0x3f6f9f9cfd9c3035
.quad 0x3feffa14948549a7, 0x3f6e77448fb66bb9
.quad 0x3feffa506302ebae, 0x3f6d58da68fd1170
.quad 0x3feffa89fe5b3625, 0x3f6c4412bf4b8f0b
.quad 0x3feffac17988ef4b, 0x3f6b38a3af2e55b4
.quad 0x3feffaf6e6f4f5c0, 0x3f6a3645330550ff
.quad 0x3feffb2a5879f35e, 0x3f693cb11a30d765
.quad 0x3feffb5bdf67fe6f, 0x3f684ba3004a50d0
.quad 0x3feffb8b8c88295f, 0x3f6762d84469c18f
.quad 0x3feffbb970200110, 0x3f66821000795a03
.quad 0x3feffbe599f4f9d9, 0x3f65a90b00981d93
.quad 0x3feffc10194fcb64, 0x3f64d78bba8ca5fd
.quad 0x3feffc38fcffbb7c, 0x3f640d564548fad7
.quad 0x3feffc60535dd7f5, 0x3f634a305080681f
.quad 0x3feffc862a501fd7, 0x3f628de11c5031eb
.quad 0x3feffcaa8f4c9bea, 0x3f61d83170fbf6fb
.quad 0x3feffccd8f5c66d1, 0x3f6128eb96be8798
.quad 0x3feffcef371ea4d7, 0x3f607fdb4dafea5f
.quad 0x3feffd0f92cb6ba7, 0x3f5fb99b8b8279e1
.quad 0x3feffd2eae369a07, 0x3f5e7f232d9e2630
.quad 0x3feffd4c94d29fdb, 0x3f5d4fed7195d7e8
.quad 0x3feffd6951b33686, 0x3f5c2b9cf7f893bf
.quad 0x3feffd84ef9009ee, 0x3f5b11d702b3deb2
.quad 0x3feffd9f78c7524a, 0x3f5a024365f771bd
.quad 0x3feffdb8f7605ee7, 0x3f58fc8c794b03b5
.quad 0x3feffdd1750e1220, 0x3f58005f08d6f1ef
.quad 0x3feffde8fb314ebf, 0x3f570d6a46e07dda
.quad 0x3feffdff92db56e5, 0x3f56235fbd7a4345
.quad 0x3feffe1544d01ccb, 0x3f5541f340697987
.quad 0x3feffe2a1988857c, 0x3f5468dadf4080ab
.quad 0x3feffe3e19349dc7, 0x3f5397ced7af2b15
.quad 0x3feffe514bbdc197, 0x3f52ce898809244e
.quad 0x3feffe63b8c8b5f7, 0x3f520cc76202c5fb
.quad 0x3feffe7567b7b5e1, 0x3f515246dda49d47
.quad 0x3feffe865fac722b, 0x3f509ec86c75d497
.quad 0x3feffe96a78a04a9, 0x3f4fe41cd9bb4eee
.quad 0x3feffea645f6d6da, 0x3f4e97ba3b77f306
.quad 0x3feffeb5415e7c44, 0x3f4d57f524723822
.quad 0x3feffec39ff380b9, 0x3f4c245d4b99847a
.quad 0x3feffed167b12ac2, 0x3f4afc85e0f82e12
.quad 0x3feffede9e5d3262, 0x3f49e005769dbc1d
.quad 0x3feffeeb49896c6d, 0x3f48ce75e9f6f8a0
.quad 0x3feffef76e956a9f, 0x3f47c7744d9378f7
.quad 0x3fefff0312b010b5, 0x3f46caa0d3582fe9
.quad 0x3fefff0e3ad91ec2, 0x3f45d79eb71e893b
.quad 0x3fefff18ebe2b0e1, 0x3f44ee1429bf7cc0
.quad 0x3fefff232a72b48e, 0x3f440daa3c89f5b6
.quad 0x3fefff2cfb0453d9, 0x3f43360ccd23db3a
.quad 0x3fefff3661e9569d, 0x3f4266ea71d4f71a
.quad 0x3fefff3f634b79f9, 0x3f419ff4663ae9df
.quad 0x3fefff48032dbe40, 0x3f40e0de78654d1e
.quad 0x3fefff50456dab8c, 0x3f40295ef6591848
.quad 0x3fefff582dc48d30, 0x3f3ef25d37f49fe1
.quad 0x3fefff5fbfc8a439, 0x3f3da01102b5f851
.quad 0x3fefff66feee5129, 0x3f3c5b5412dcafad
.quad 0x3fefff6dee89352e, 0x3f3b23a5a23e4210
.quad 0x3fefff7491cd4af6, 0x3f39f8893d8fd1c1
.quad 0x3fefff7aebcff755, 0x3f38d986a4187285
.quad 0x3fefff80ff8911fd, 0x3f37c629a822bc9e
.quad 0x3fefff86cfd3e657, 0x3f36be02102b3520
.quad 0x3fefff8c5f702ccf, 0x3f35c0a378c90bca
.quad 0x3fefff91b102fca8, 0x3f34cda5374ea275
.quad 0x3fefff96c717b695, 0x3f33e4a23d1f4703
.quad 0x3fefff9ba420e834, 0x3f330538fbb77ecd
.quad 0x3fefffa04a7928b1, 0x3f322f0b496539be
.quad 0x3fefffa4bc63ee9a, 0x3f3161be46ad3b50
.quad 0x3fefffa8fc0e5f33, 0x3f309cfa445b00ff
.quad 0x3fefffad0b901755, 0x3f2fc0d55470cf51
.quad 0x3fefffb0ecebee1b, 0x3f2e577bbcd49935
.quad 0x3fefffb4a210b172, 0x3f2cfd4a5adec5c0
.quad 0x3fefffb82cd9dcbf, 0x3f2bb1a9657ce465
.quad 0x3fefffbb8f1049c6, 0x3f2a740684026555
.quad 0x3fefffbeca6adbe9, 0x3f2943d4a1d1ed39
.quad 0x3fefffc1e08f25f5, 0x3f28208bc334a6a5
.quad 0x3fefffc4d3120aa1, 0x3f2709a8db59f25c
.quad 0x3fefffc7a37857d2, 0x3f25feada379d8b7
.quad 0x3fefffca53375ce3, 0x3f24ff207314a102
.quad 0x3fefffcce3b57bff, 0x3f240a8c1949f75e
.quad 0x3fefffcf564ab6b7, 0x3f23207fb7420eb9
.quad 0x3fefffd1ac4135f9, 0x3f22408e9ba3327f
.quad 0x3fefffd3e6d5cd87, 0x3f216a501f0e42ca
.quad 0x3fefffd607387b07, 0x3f209d5f819c9e29
.quad 0x3fefffd80e8ce0da, 0x3f1fb2b792b40a22
.quad 0x3fefffd9fdeabcce, 0x3f1e3bcf436a1a95
.quad 0x3fefffdbd65e5ad0, 0x3f1cd55277c18d05
.quad 0x3fefffdd98e903b2, 0x3f1b7e94604479dc
.quad 0x3fefffdf46816833, 0x3f1a36eec00926dd
.quad 0x3fefffe0e0140857, 0x3f18fdc1b2dcf7b9
.quad 0x3fefffe26683972a, 0x3f17d2737527c3f9
.quad 0x3fefffe3daa95b18, 0x3f16b4702d7d5849
.quad 0x3fefffe53d558ae9, 0x3f15a329b7d30748
.quad 0x3fefffe68f4fa777, 0x3f149e17724f4d41
.quad 0x3fefffe7d156d244, 0x3f13a4b60ba9aa4e
.quad 0x3fefffe904222101, 0x3f12b6875310f785
.quad 0x3fefffea2860ee1e, 0x3f11d312098e9dba
.quad 0x3fefffeb3ebb267b, 0x3f10f9e1b4dd36df
.quad 0x3fefffec47d19457, 0x3f102a8673a94692
.quad 0x3fefffed443e2787, 0x3f0ec929a665b449
.quad 0x3fefffee34943b15, 0x3f0d4f4b4c8e09ed
.quad 0x3fefffef1960d85d, 0x3f0be6abbb10a5aa
.quad 0x3fefffeff32af7af, 0x3f0a8e8cc1fadef6
.quad 0x3feffff0c273bea2, 0x3f094637d5bacfdb
.quad 0x3feffff187b6bc0e, 0x3f080cfdc72220cf
.quad 0x3feffff2436a21dc, 0x3f06e2367dc27f95
.quad 0x3feffff2f5fefcaa, 0x3f05c540b4936fd2
.quad 0x3feffff39fe16963, 0x3f04b581b8d170fc
.quad 0x3feffff44178c8d2, 0x3f03b2652b06c2b2
.quad 0x3feffff4db27f146, 0x3f02bb5cc22e5db6
.quad 0x3feffff56d4d5e5e, 0x3f01cfe010e2052d
.quad 0x3feffff5f8435efc, 0x3f00ef6c4c84a0fe
.quad 0x3feffff67c604180, 0x3f001984165a5f36
.quad 0x3feffff6f9f67e55, 0x3efe9b5e8d00ce77
.quad 0x3feffff77154e0d6, 0x3efd16f5716c6c1a
.quad 0x3feffff7e2c6aea2, 0x3efba4f035d60e03
.quad 0x3feffff84e93cd75, 0x3efa447b7b03f045
.quad 0x3feffff8b500e77c, 0x3ef8f4ccca7fc90d
.quad 0x3feffff9164f8e46, 0x3ef7b5223dac7336
.quad 0x3feffff972be5c59, 0x3ef684c227fcacef
.quad 0x3feffff9ca891572, 0x3ef562fac4329b48
.quad 0x3feffffa1de8c582, 0x3ef44f21e49054f2
.quad 0x3feffffa6d13de73, 0x3ef34894a5e24657
.quad 0x3feffffab83e54b8, 0x3ef24eb7254ccf83
.quad 0x3feffffaff99bac4, 0x3ef160f438c70913
.quad 0x3feffffb43555b5f, 0x3ef07ebd2a2d2844
.quad 0x3feffffb839e52f3, 0x3eef4f12e9ab070a
.quad 0x3feffffbc09fa7cd, 0x3eedb5ad0b27805c
.quad 0x3feffffbfa82616b, 0x3eec304efa2c6f4e
.quad 0x3feffffc316d9ed0, 0x3eeabe09e9144b5e
.quad 0x3feffffc6586abf6, 0x3ee95df988e76644
.quad 0x3feffffc96f1165e, 0x3ee80f439b4ee04b
.quad 0x3feffffcc5cec0c1, 0x3ee6d11788a69c64
.quad 0x3feffffcf23ff5fc, 0x3ee5a2adfa0b4bc4
.quad 0x3feffffd1c637b2b, 0x3ee4834877429b8f
.quad 0x3feffffd4456a10d, 0x3ee37231085c7d9a
.quad 0x3feffffd6a3554a1, 0x3ee26eb9daed6f7e
.quad 0x3feffffd8e1a2f22, 0x3ee1783ceac28910
.quad 0x3feffffdb01e8546, 0x3ee08e1badf0fced
.quad 0x3feffffdd05a75ea, 0x3edf5f7d88472604
.quad 0x3feffffdeee4f810, 0x3eddb92b5212fb8d
.quad 0x3feffffe0bd3e852, 0x3edc282cd3957eda
.quad 0x3feffffe273c15b7, 0x3edaab7abace48dc
.quad 0x3feffffe41314e06, 0x3ed94219bfcb4928
.quad 0x3feffffe59c6698b, 0x3ed7eb1a2075864e
.quad 0x3feffffe710d565e, 0x3ed6a597219a93da
.quad 0x3feffffe8717232d, 0x3ed570b69502f313
.quad 0x3feffffe9bf4098c, 0x3ed44ba864670882
.quad 0x3feffffeafb377d5, 0x3ed335a62115bce2
.quad 0x3feffffec2641a9e, 0x3ed22df298214423
.quad 0x3feffffed413e5b7, 0x3ed133d96ae7e0dd
.quad 0x3feffffee4d01cd6, 0x3ed046aeabcfcdec
.quad 0x3feffffef4a55bd4, 0x3ececb9cfe1d8642
.quad 0x3fefffff039f9e8f, 0x3ecd21397ead99cb
.quad 0x3fefffff11ca4876, 0x3ecb8d094c86d374
.quad 0x3fefffff1f302bc1, 0x3eca0df0f0c626dc
.quad 0x3fefffff2bdb904d, 0x3ec8a2e269750a39
.quad 0x3fefffff37d63a36, 0x3ec74adc8f4064d3
.quad 0x3fefffff43297019, 0x3ec604ea819f007c
.quad 0x3fefffff4dde0118, 0x3ec4d0231928c6f9
.quad 0x3fefffff57fc4a95, 0x3ec3aba85fe22e20
.quad 0x3fefffff618c3da6, 0x3ec296a70f414053
.quad 0x3fefffff6a956450, 0x3ec1905613b3abf2
.quad 0x3fefffff731ee681, 0x3ec097f6156f32c5
.quad 0x3fefffff7b2f8ed6, 0x3ebf59a20caf6695
.quad 0x3fefffff82cdcf1b, 0x3ebd9c73698fb1dc
.quad 0x3fefffff89ffc4aa, 0x3ebbf716c6168bae
.quad 0x3fefffff90cb3c81, 0x3eba6852c6b58392
.quad 0x3fefffff9735b73b, 0x3eb8eefd70594a89
.quad 0x3fefffff9d446ccc, 0x3eb789fb715aae95
.quad 0x3fefffffa2fc5015, 0x3eb6383f726a8e04
.quad 0x3fefffffa8621251, 0x3eb4f8c96f26a26a
.quad 0x3fefffffad7a2652, 0x3eb3caa61607f920
.quad 0x3fefffffb248c39d, 0x3eb2acee2f5ecdb8
.quad 0x3fefffffb6d1e95d, 0x3eb19ec60b1242ed
.quad 0x3fefffffbb196132, 0x3eb09f5cf4dd2877
.quad 0x3fefffffbf22c1e2, 0x3eaf5bd95d8730d8
.quad 0x3fefffffc2f171e3, 0x3ead9371e2ff7c35
.quad 0x3fefffffc688a9cf, 0x3eabe41de54d155a
.quad 0x3fefffffc9eb76ac, 0x3eaa4c89e08ef4f3
.quad 0x3fefffffcd1cbc28, 0x3ea8cb738399b12c
.quad 0x3fefffffd01f36af, 0x3ea75fa8dbc84bec
.quad 0x3fefffffd2f57d68, 0x3ea608078a70dcbc
.quad 0x3fefffffd5a2041f, 0x3ea4c37c0394d094
.quad 0x3fefffffd8271d12, 0x3ea39100d5687bfe
.quad 0x3fefffffda86faa9, 0x3ea26f9df8519bd7
.quad 0x3fefffffdcc3b117, 0x3ea15e6827001f18
.quad 0x3fefffffdedf37ed, 0x3ea05c803e4831c1
.quad 0x3fefffffe0db6b91, 0x3e9ed22548cffd35
.quad 0x3fefffffe2ba0ea5, 0x3e9d06ad6ecdf971
.quad 0x3fefffffe47ccb60, 0x3e9b551c847fbc96
.quad 0x3fefffffe62534d4, 0x3e99bc09f112b494
.quad 0x3fefffffe7b4c81e, 0x3e983a1ff0aa239d
.quad 0x3fefffffe92ced93, 0x3e96ce1aa3fd7bdd
.quad 0x3fefffffea8ef9cf, 0x3e9576c72b514859
.quad 0x3fefffffebdc2ec6, 0x3e943302cc4a0da8
.quad 0x3fefffffed15bcba, 0x3e9301ba221dc9bb
.quad 0x3fefffffee3cc32c, 0x3e91e1e857adc568
.quad 0x3fefffffef5251c2, 0x3e90d2966b1746f7
.quad 0x3feffffff0576917, 0x3e8fa5b4f49cc6b2
.quad 0x3feffffff14cfb92, 0x3e8dc3ae30b55c16
.quad 0x3feffffff233ee1d, 0x3e8bfd7555a3bd68
.quad 0x3feffffff30d18e8, 0x3e8a517d9e61628a
.quad 0x3feffffff3d9480f, 0x3e88be4f8f6c951f
.quad 0x3feffffff4993c46, 0x3e874287ded49339
.quad 0x3feffffff54dab72, 0x3e85dcd669f2cd34
.quad 0x3feffffff5f74141, 0x3e848bfd38302871
.quad 0x3feffffff6969fb8, 0x3e834ecf8a3c124a
.quad 0x3feffffff72c5fb6, 0x3e822430f521cbcf
.quad 0x3feffffff7b91176, 0x3e810b1488aeb235
.quad 0x3feffffff83d3d07, 0x3e80027c00a263a6
.quad 0x3feffffff8b962be, 0x3e7e12ee004efc37
.quad 0x3feffffff92dfba2, 0x3e7c3e44ae32b16b
.quad 0x3feffffff99b79d2, 0x3e7a854ea14102a8
.quad 0x3feffffffa0248e8, 0x3e78e6761569f45d
.quad 0x3feffffffa62ce54, 0x3e77603bac345f65
.quad 0x3feffffffabd69b4, 0x3e75f1353cdad001
.quad 0x3feffffffb127525, 0x3e74980cb3c80949
.quad 0x3feffffffb624592, 0x3e73537f00b6ad4d
.quad 0x3feffffffbad2aff, 0x3e72225b12bffc68
.quad 0x3feffffffbf370cd, 0x3e710380e1adb7e9
.quad 0x3feffffffc355dfd, 0x3e6febc107d5efaa
.quad 0x3feffffffc733572, 0x3e6df0f2a0ee6947
.quad 0x3feffffffcad3626, 0x3e6c14b2188bcee4
.quad 0x3feffffffce39b67, 0x3e6a553644f7f07d
.quad 0x3feffffffd169d0c, 0x3e68b0cfce0579e0
.quad 0x3feffffffd466fa5, 0x3e6725e7c5dd20f7
.quad 0x3feffffffd7344aa, 0x3e65b2fe547a1340
.quad 0x3feffffffd9d4aab, 0x3e6456a974e92e93
.quad 0x3feffffffdc4ad7a, 0x3e630f93c3699078
.quad 0x3feffffffde9964e, 0x3e61dc7b5b978cf8
.quad 0x3feffffffe0c2bf0, 0x3e60bc30c5d52f15
.quad 0x3feffffffe2c92db, 0x3e5f5b2be65a0c7f
.quad 0x3feffffffe4aed5e, 0x3e5d5f3a8dea7357
.quad 0x3feffffffe675bbd, 0x3e5b82915b03515b
.quad 0x3feffffffe81fc4e, 0x3e59c3517e789488
.quad 0x3feffffffe9aeb97, 0x3e581fb7df06136e
.quad 0x3feffffffeb24467, 0x3e56961b8d641d06
.quad 0x3feffffffec81ff2, 0x3e5524ec4d916cae
.quad 0x3feffffffedc95e7, 0x3e53cab1343d18d1
.quad 0x3feffffffeefbc85, 0x3e52860757487a01
.quad 0x3fefffffff01a8b6, 0x3e5155a09065d4f7
.quad 0x3fefffffff126e1e, 0x3e50384250e4c9fc
.quad 0x3fefffffff221f30, 0x3e4e59890b926c78
.quad 0x3fefffffff30cd3f, 0x3e4c642116a8a9e3
.quad 0x3fefffffff3e8892, 0x3e4a8e405e651ab6
.quad 0x3fefffffff4b606f, 0x3e48d5f98114f872
.quad 0x3fefffffff57632d, 0x3e47397c5a66e307
.quad 0x3fefffffff629e44, 0x3e45b71456c5a4c4
.quad 0x3fefffffff6d1e56, 0x3e444d26de513197
.quad 0x3fefffffff76ef3f, 0x3e42fa31d6371537
.quad 0x3fefffffff801c1f, 0x3e41bcca373b7b43
.quad 0x3fefffffff88af67, 0x3e40939ab853339f
.quad 0x3fefffffff90b2e3, 0x3e3efac5187b2863
.quad 0x3fefffffff982fc1, 0x3e3cf1e86235d0e7
.quad 0x3fefffffff9f2e9f, 0x3e3b0a68a2128bab
.quad 0x3fefffffffa5b790, 0x3e39423165bc4444
.quad 0x3fefffffffabd229, 0x3e37974e743dea3d
.quad 0x3fefffffffb18582, 0x3e3607e9eacd1050
.quad 0x3fefffffffb6d844, 0x3e34924a74dec729
.quad 0x3fefffffffbbd0aa, 0x3e3334d19e0c2160
.quad 0x3fefffffffc0748f, 0x3e31edfa3c5f5cca
.quad 0x3fefffffffc4c96c, 0x3e30bc56f1b54701
.quad 0x3fefffffffc8d462, 0x3e2f3d2185e047d9
.quad 0x3fefffffffcc9a41, 0x3e2d26cb87945e87
.quad 0x3fefffffffd01f89, 0x3e2b334fac4b9f99
.quad 0x3fefffffffd36871, 0x3e296076f7918d1c
.quad 0x3fefffffffd678ed, 0x3e27ac2d72fc2c63
.quad 0x3fefffffffd954ae, 0x3e2614801550319e
.quad 0x3fefffffffdbff2a, 0x3e24979ac8b28927
.quad 0x3fefffffffde7ba0, 0x3e2333c68e2d0548
.quad 0x3fefffffffe0cd16, 0x3e21e767bce37dd7
.quad 0x3fefffffffe2f664, 0x3e20b0fc5b6d05a0
.quad 0x3fefffffffe4fa30, 0x3e1f1e3523b41d7d
.quad 0x3fefffffffe6daf7, 0x3e1d00de6608effe
.quad 0x3fefffffffe89b0c, 0x3e1b0778b7b3301b
.quad 0x3fefffffffea3c9a, 0x3e192fb04ec0f6cf
.quad 0x3fefffffffebc1a9, 0x3e177756ec9f78fa
.quad 0x3fefffffffed2c21, 0x3e15dc61922d5a06
.quad 0x3fefffffffee7dc8, 0x3e145ce65699ff6d
.quad 0x3fefffffffefb847, 0x3e12f71a5f159970
.quad 0x3feffffffff0dd2b, 0x3e11a94ff571654f
.quad 0x3feffffffff1ede9, 0x3e1071f4bbea09ec
.quad 0x3feffffffff2ebda, 0x3e0e9f1ff8ddd774
.quad 0x3feffffffff3d843, 0x3e0c818223a202c7
.quad 0x3feffffffff4b453, 0x3e0a887bd2b4404d
.quad 0x3feffffffff58126, 0x3e08b1a336c5eb6b
.quad 0x3feffffffff63fc3, 0x3e06fab63324088a
.quad 0x3feffffffff6f121, 0x3e056197e30205ba
.quad 0x3feffffffff79626, 0x3e03e44e45301b92
.quad 0x3feffffffff82fab, 0x3e0281000bfe4c3f
.quad 0x3feffffffff8be77, 0x3e0135f28f2d50b4
.quad 0x3feffffffff94346, 0x3e000187dded5975
.quad 0x3feffffffff9bec8, 0x3dfdc479de0ef001
.quad 0x3feffffffffa319f, 0x3dfbad4fdad3caa1
.quad 0x3feffffffffa9c63, 0x3df9baed3ed27ab8
.quad 0x3feffffffffaffa4, 0x3df7ead9ce4285bb
.quad 0x3feffffffffb5be5, 0x3df63ac6b4edc88e
.quad 0x3feffffffffbb1a2, 0x3df4a88be2a6390c
.quad 0x3feffffffffc014e, 0x3df332259185f1a0
.quad 0x3feffffffffc4b56, 0x3df1d5b1f3793044
.quad 0x3feffffffffc901c, 0x3df0916f04b6e18b
.quad 0x3feffffffffccfff, 0x3deec77101de6926
.quad 0x3feffffffffd0b56, 0x3dec960bf23153e0
.quad 0x3feffffffffd4271, 0x3dea8bd20fc65ef7
.quad 0x3feffffffffd759d, 0x3de8a61745ec7d1d
.quad 0x3feffffffffda520, 0x3de6e25d0e756261
.quad 0x3feffffffffdd13c, 0x3de53e4f7d1666cb
.quad 0x3feffffffffdfa2d, 0x3de3b7c27a7ddb0e
.quad 0x3feffffffffe202d, 0x3de24caf2c32af14
.quad 0x3feffffffffe4371, 0x3de0fb3186804d0f
.quad 0x3feffffffffe642a, 0x3ddf830c0bb41fd7
.quad 0x3feffffffffe8286, 0x3ddd3c0f1a91c846
.quad 0x3feffffffffe9eb0, 0x3ddb1e5acf351d87
.quad 0x3feffffffffeb8d0, 0x3dd92712d259ce66
.quad 0x3feffffffffed10a, 0x3dd7538c60a04476
.quad 0x3feffffffffee782, 0x3dd5a14b04b47879
.quad 0x3feffffffffefc57, 0x3dd40dfd87456f4c
.quad 0x3fefffffffff0fa7, 0x3dd2977b1172b9d5
.quad 0x3fefffffffff218f, 0x3dd13bc07e891491
.quad 0x3fefffffffff3227, 0x3dcff1dbb4300811
.quad 0x3fefffffffff4188, 0x3dcd9a880f306bd8
.quad 0x3fefffffffff4fc9, 0x3dcb6e45220b55e0
.quad 0x3fefffffffff5cfd, 0x3dc96a0b33f2c4da
.quad 0x3fefffffffff6939, 0x3dc78b07e9e924ac
.quad 0x3fefffffffff748e, 0x3dc5ce9ab1670dd2
.quad 0x3fefffffffff7f0d, 0x3dc4325167006bb0
.quad 0x3fefffffffff88c5, 0x3dc2b3e53538ff3f
.quad 0x3fefffffffff91c6, 0x3dc15137a7f44864
.quad 0x3fefffffffff9a1b, 0x3dc0084ff125639d
.quad 0x3fefffffffffa1d2, 0x3dbdaeb0b7311ec7
.quad 0x3fefffffffffa8f6, 0x3dbb7937d1c40c53
.quad 0x3fefffffffffaf92, 0x3db96d082f59ab06
.quad 0x3fefffffffffb5b0, 0x3db7872d9fa10aad
.quad 0x3fefffffffffbb58, 0x3db5c4e8e37bc7d0
.quad 0x3fefffffffffc095, 0x3db423ac0df49a40
.quad 0x3fefffffffffc56d, 0x3db2a117230ad284
.quad 0x3fefffffffffc9e8, 0x3db13af4f04f9998
.quad 0x3fefffffffffce0d, 0x3dafde703724e560
.quad 0x3fefffffffffd1e1, 0x3dad77f0c82e7641
.quad 0x3fefffffffffd56c, 0x3dab3ee02611d7dd
.quad 0x3fefffffffffd8b3, 0x3da92ff33023d5bd
.quad 0x3fefffffffffdbba, 0x3da7481a9e69f53f
.quad 0x3fefffffffffde86, 0x3da5847eda620959
.quad 0x3fefffffffffe11d, 0x3da3e27c1fcc74bd
.quad 0x3fefffffffffe380, 0x3da25f9ee0b923dc
.quad 0x3fefffffffffe5b6, 0x3da0f9a068653200
.quad 0x3fefffffffffe7c0, 0x3d9f5cc7718082b0
.quad 0x3fefffffffffe9a2, 0x3d9cf7e53d6a2ca5
.quad 0x3fefffffffffeb60, 0x3d9ac0f5f3229372
.quad 0x3fefffffffffecfb, 0x3d98b498644847ea
.quad 0x3fefffffffffee77, 0x3d96cfa9bcca59dc
.quad 0x3fefffffffffefd6, 0x3d950f411d4fd2cd
.quad 0x3feffffffffff11a, 0x3d9370ab8327af5e
.quad 0x3feffffffffff245, 0x3d91f167f88c6b6e
.quad 0x3feffffffffff359, 0x3d908f24085d4597
.quad 0x3feffffffffff457, 0x3d8e8f70e181d61a
.quad 0x3feffffffffff542, 0x3d8c324c20e337dc
.quad 0x3feffffffffff61b, 0x3d8a03261574b54e
.quad 0x3feffffffffff6e3, 0x3d87fe903cdf5855
.quad 0x3feffffffffff79b, 0x3d86215c58da3450
.quad 0x3feffffffffff845, 0x3d846897d4b69fc6
.quad 0x3feffffffffff8e2, 0x3d82d1877d731b7b
.quad 0x3feffffffffff973, 0x3d8159a386b11517
.quad 0x3feffffffffff9f8, 0x3d7ffd27ae9393ce
.quad 0x3feffffffffffa73, 0x3d7d7c593130dd0b
.quad 0x3feffffffffffae4, 0x3d7b2cd607c79bcf
.quad 0x3feffffffffffb4c, 0x3d790ae4d3405651
.quad 0x3feffffffffffbad, 0x3d771312dd1759e2
.quad 0x3feffffffffffc05, 0x3d75422ef5d8949d
.quad 0x3feffffffffffc57, 0x3d739544b0ecc957
.quad 0x3feffffffffffca2, 0x3d720997f73e73dd
.quad 0x3feffffffffffce7, 0x3d709ca0eaacd277
.quad 0x3feffffffffffd27, 0x3d6e9810295890ec
.quad 0x3feffffffffffd62, 0x3d6c2b45b5aa4a1d
.quad 0x3feffffffffffd98, 0x3d69eee068fa7596
.quad 0x3feffffffffffdca, 0x3d67df2b399c10a8
.quad 0x3feffffffffffdf8, 0x3d65f8b87a31bd85
.quad 0x3feffffffffffe22, 0x3d64385c96e9a2d9
.quad 0x3feffffffffffe49, 0x3d629b2933ef4cbc
.quad 0x3feffffffffffe6c, 0x3d611e68a6378f8a
.quad 0x3feffffffffffe8d, 0x3d5f7f338086a86b
.quad 0x3feffffffffffeab, 0x3d5cf8d7d9ce040a
.quad 0x3feffffffffffec7, 0x3d5aa577251ae485
.quad 0x3feffffffffffee1, 0x3d58811d739efb5f
.quad 0x3feffffffffffef8, 0x3d568823e52970be
.quad 0x3fefffffffffff0e, 0x3d54b72ae68e8b4c
.quad 0x3fefffffffffff22, 0x3d530b14dbe876bc
.quad 0x3fefffffffffff34, 0x3d5181012ef86610
.quad 0x3fefffffffffff45, 0x3d501647ba798745
.quad 0x3fefffffffffff54, 0x3d4d90e917701675
.quad 0x3fefffffffffff62, 0x3d4b2a87e86d0c8a
.quad 0x3fefffffffffff6f, 0x3d48f53dcb377293
.quad 0x3fefffffffffff7b, 0x3d46ed2f2515e933
.quad 0x3fefffffffffff86, 0x3d450ecc9ed47f19
.quad 0x3fefffffffffff90, 0x3d4356cd5ce7799e
.quad 0x3fefffffffffff9a, 0x3d41c229a587ab78
.quad 0x3fefffffffffffa2, 0x3d404e15ecc7f3f6
.quad 0x3fefffffffffffaa, 0x3d3deffc7e6a6017
.quad 0x3fefffffffffffb1, 0x3d3b7b040832f310
.quad 0x3fefffffffffffb8, 0x3d3938e021f36d76
.quad 0x3fefffffffffffbe, 0x3d37258610b3b233
.quad 0x3fefffffffffffc3, 0x3d353d3bfc82a909
.quad 0x3fefffffffffffc8, 0x3d337c92babdc2fd
.quad 0x3fefffffffffffcd, 0x3d31e06010120f6a
.quad 0x3fefffffffffffd1, 0x3d3065b9616170d4
.quad 0x3fefffffffffffd5, 0x3d2e13dd96b3753b
.quad 0x3fefffffffffffd9, 0x3d2b950d32467392
.quad 0x3fefffffffffffdc, 0x3d294a72263259a5
.quad 0x3fefffffffffffdf, 0x3d272fd93e036cdc
.quad 0x3fefffffffffffe2, 0x3d254164576929ab
.quad 0x3fefffffffffffe4, 0x3d237b83c521fe96
.quad 0x3fefffffffffffe7, 0x3d21daf033182e96
.quad 0x3fefffffffffffe9, 0x3d205ca50205d26a
.quad 0x3fefffffffffffeb, 0x3d1dfbb6235639fa
.quad 0x3fefffffffffffed, 0x3d1b7807e294781f
.quad 0x3fefffffffffffee, 0x3d19298add70a734
.quad 0x3feffffffffffff0, 0x3d170beaf9c7ffb6
.quad 0x3feffffffffffff1, 0x3d151b2cd6709222
.quad 0x3feffffffffffff3, 0x3d1353a6cf7f7fff
.quad 0x3feffffffffffff4, 0x3d11b1fa8cbe84a7
.quad 0x3feffffffffffff5, 0x3d10330f0fd69921
.quad 0x3feffffffffffff6, 0x3d0da81670f96f9b
.quad 0x3feffffffffffff7, 0x3d0b24a16b4d09aa
.quad 0x3feffffffffffff7, 0x3d08d6eeb6efdbd6
.quad 0x3feffffffffffff8, 0x3d06ba91ac734786
.quad 0x3feffffffffffff9, 0x3d04cb7966770ab5
.quad 0x3feffffffffffff9, 0x3d0305e9721d0981
.quad 0x3feffffffffffffa, 0x3d01667311fff70a
.quad 0x3feffffffffffffb, 0x3cffd3de10d62855
.quad 0x3feffffffffffffb, 0x3cfd1aefbcd48d0c
.quad 0x3feffffffffffffb, 0x3cfa9cc93c25aca9
.quad 0x3feffffffffffffc, 0x3cf85487ee3ea735
.quad 0x3feffffffffffffc, 0x3cf63daf8b4b1e0c
.quad 0x3feffffffffffffd, 0x3cf45421e69a6ca1
.quad 0x3feffffffffffffd, 0x3cf294175802d99a
.quad 0x3feffffffffffffd, 0x3cf0fa17bf41068f
.quad 0x3feffffffffffffd, 0x3cef05e82aae2bb9
.quad 0x3feffffffffffffe, 0x3cec578101b29058
.quad 0x3feffffffffffffe, 0x3ce9e39dc5dd2f7c
.quad 0x3feffffffffffffe, 0x3ce7a553a728bbf2
.quad 0x3feffffffffffffe, 0x3ce5982008db1304
.quad 0x3feffffffffffffe, 0x3ce3b7e00422e51b
.quad 0x3feffffffffffffe, 0x3ce200c898d9ee3e
.quad 0x3fefffffffffffff, 0x3ce06f5f7eb65a56
.quad 0x3fefffffffffffff, 0x3cde00e9148a1d25
.quad 0x3fefffffffffffff, 0x3cdb623734024e92
.quad 0x3fefffffffffffff, 0x3cd8fd4e01891bf8
.quad 0x3fefffffffffffff, 0x3cd6cd44c7470d89
.quad 0x3fefffffffffffff, 0x3cd4cd9c04158cd7
.quad 0x3fefffffffffffff, 0x3cd2fa34bf5c8344
.quad 0x3fefffffffffffff, 0x3cd14f4890ff2461
.quad 0x3fefffffffffffff, 0x3ccf92c49dfa4df5
.quad 0x3fefffffffffffff, 0x3ccccaaea71ab0df
.quad 0x3fefffffffffffff, 0x3cca40829f001197
.quad 0x3ff0000000000000, 0x3cc7eef13b59e96c
.quad 0x3ff0000000000000, 0x3cc5d11e1a252bf5
.quad 0x3ff0000000000000, 0x3cc3e296303b2297
.quad 0x3ff0000000000000, 0x3cc21f47009f43ce
.quad 0x3ff0000000000000, 0x3cc083768c5e4542
.quad 0x3ff0000000000000, 0x3cbe1777d831265f
.quad 0x3ff0000000000000, 0x3cbb69f10b0191b5
.quad 0x3ff0000000000000, 0x3cb8f8a3a05b5b53
.quad 0x3ff0000000000000, 0x3cb6be573c40c8e7
.quad 0x3ff0000000000000, 0x3cb4b645ba991fdb
.align 64
.quad 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff, 0x7fffffffffffffff /* _AbsMask */
.align 64
.quad 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000, 0x4017f80000000000 /* _MaxThreshold = 6.0 - 1.0/128.0 */
.align 64
.quad 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000, 0x42c0000000000000 /* SRound */
.align 64
.quad 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000, 0x2ff0000000000000 /* _U2THreshold */
.align 64
.quad 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5, 0xbfa6c16db05bdea5 /* _poly_1_0 */
.align 64
.quad 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1, 0x3fc1111235a363b1 /* _poly_1_1 */
.align 64
.quad 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57, 0x3fcc71ca1c71eb57 /* _poly_3_0 */
.align 64
.quad 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8, 0xbfd9999c2be2dda8 /* _poly_3_1 */
.align 64
.quad 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F, 0xbfc5555800001B4F /* _poly_5_0 */
.align 64
.quad 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122, 0x3fb9999E2BE2F122 /* _poly_5_1 */
.align 64
.quad 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6, 0xbfd55555555547f6 /* _poly_1_2 */
.align 64
.quad 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd, 0x3fdfffffffffd4cd /* _poly_3_2 */
.align 64
.quad 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c, 0x3fe5555555554b0c /* _poly_1_3 */
.align 64
.quad 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555, 0xbfd5555555555555 /* _poly_3_3 */
.align 64
.quad 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff, 0x00000000ffffffff /* _Mask32 */
.align 64
.type __svml_derf_data_internal,@object
.size __svml_derf_data_internal,.-__svml_derf_data_internal

View File

@ -0,0 +1,20 @@
/* AVX2 version of vectorized erff.
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_erff _ZGVeN16v_erff_avx2_wrapper
#include "../svml_s_erff16_core.S"

View File

@ -0,0 +1,28 @@
/* Multiple versions of vectorized erff, 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_erff
#include "ifunc-mathvec-avx512-skx.h"
libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
#ifdef SHARED
__hidden_ver1 (_ZGVeN16v_erff, __GI__ZGVeN16v_erff,
__redirect__ZGVeN16v_erff)
__attribute__ ((visibility ("hidden")));
#endif

View File

@ -0,0 +1,185 @@
/* Function erff 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:
*
* erf(x) is computed as higher precision simple polynomial
* with no lookup table:
*
* R = P0 + x^2*(P1 + x^2*(P2 + .... x^2*P12));
* erf(x) = R * R * x;
*
* Special cases:
*
* erf(0) = 0
* erf(+INF) = +1
* erf(-INF) = -1
* erf(QNaN) = QNaN
* erf(SNaN) = QNaN
*
*/
/* Offsets for data table __svml_serf_data_internal
*/
#define _AbsMask 0
#define _One 64
#define _gf_MaxThreshold_LA 128
#define _gf_la_poly_0 192
#define _gf_la_poly_1 256
#define _gf_la_poly_2 320
#define _gf_la_poly_3 384
#define _gf_la_poly_4 448
#define _gf_la_poly_5 512
#define _gf_la_poly_6 576
#define _gf_la_poly_7 640
#define _gf_la_poly_8 704
#define _gf_la_poly_9 768
#define _gf_la_poly_10 832
#define _gf_la_poly_11 896
#define _gf_la_poly_12 960
#include <sysdep.h>
.text
.section .text.exex512,"ax",@progbits
ENTRY(_ZGVeN16v_erff_skx)
vmovaps %zmm0, %zmm8
vmulps {rn-sae}, %zmm8, %zmm8, %zmm11
vmovups _gf_la_poly_11+__svml_serf_data_internal(%rip), %zmm15
vmovups _gf_la_poly_12+__svml_serf_data_internal(%rip), %zmm10
vmovups _gf_la_poly_10+__svml_serf_data_internal(%rip), %zmm9
vmovups _gf_la_poly_9+__svml_serf_data_internal(%rip), %zmm7
vmovups _gf_la_poly_8+__svml_serf_data_internal(%rip), %zmm0
vmovups _gf_la_poly_7+__svml_serf_data_internal(%rip), %zmm1
vmovups _gf_la_poly_6+__svml_serf_data_internal(%rip), %zmm2
vmovups _gf_la_poly_5+__svml_serf_data_internal(%rip), %zmm3
vmovups _gf_la_poly_4+__svml_serf_data_internal(%rip), %zmm4
vmovups _gf_la_poly_3+__svml_serf_data_internal(%rip), %zmm5
vmovups _gf_la_poly_2+__svml_serf_data_internal(%rip), %zmm6
vextractf32x8 $1, %zmm8, %ymm13
vcvtps2pd {sae}, %ymm8, %zmm12
vcvtps2pd {sae}, %ymm13, %zmm14
vmulpd {rn-sae}, %zmm12, %zmm12, %zmm12
vmulpd {rn-sae}, %zmm14, %zmm14, %zmm13
/* R = P0 + x^2*(P1 + x^2*(P2 + .... x^2*P12)); */
vmovaps %zmm15, %zmm14
vfmadd231pd {rn-sae}, %zmm12, %zmm10, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm10, %zmm15
vmovups _gf_la_poly_1+__svml_serf_data_internal(%rip), %zmm10
vfmadd213pd {rn-sae}, %zmm9, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm15, %zmm9
vfmadd213pd {rn-sae}, %zmm7, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm9, %zmm7
vfmadd213pd {rn-sae}, %zmm0, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm7, %zmm0
vmovups _gf_MaxThreshold_LA+__svml_serf_data_internal(%rip), %zmm7
vfmadd213pd {rn-sae}, %zmm1, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm0, %zmm1
vmovups _gf_la_poly_0+__svml_serf_data_internal(%rip), %zmm0
vcmpps $22, {sae}, %zmm11, %zmm7, %k1
vfmadd213pd {rn-sae}, %zmm2, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm1, %zmm2
vfmadd213pd {rn-sae}, %zmm3, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm2, %zmm3
vfmadd213pd {rn-sae}, %zmm4, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm3, %zmm4
vfmadd213pd {rn-sae}, %zmm5, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm4, %zmm5
vfmadd213pd {rn-sae}, %zmm6, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm5, %zmm6
vmovups _AbsMask+__svml_serf_data_internal(%rip), %zmm5
vfmadd213pd {rn-sae}, %zmm10, %zmm12, %zmm14
vfmadd231pd {rn-sae}, %zmm13, %zmm6, %zmm10
vandnps %zmm8, %zmm5, %zmm6
vfmadd213pd {rn-sae}, %zmm0, %zmm14, %zmm12
vfmadd213pd {rn-sae}, %zmm0, %zmm10, %zmm13
vorps _One+__svml_serf_data_internal(%rip), %zmm6, %zmm0
vmulpd {rn-sae}, %zmm12, %zmm12, %zmm1
vmulpd {rn-sae}, %zmm13, %zmm13, %zmm3
vcvtpd2ps {rn-sae}, %zmm1, %ymm2
vcvtpd2ps {rn-sae}, %zmm3, %ymm4
vinsertf32x8 $1, %ymm4, %zmm2, %zmm9
/* erf(x) = R * R * x; */
vmulps {rn-sae}, %zmm8, %zmm9, %zmm0{%k1}
ret
END(_ZGVeN16v_erff_skx)
.section .rodata, "a"
.align 64
#ifdef __svml_serf_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct
{
__declspec(align(64)) VUINT32 _AbsMask[16][1];
__declspec(align(64)) VUINT32 _One[16][1];
__declspec(align(64)) VUINT32 _gf_MaxThreshold_LA[16][1];
__declspec(align(64)) VUINT32 _gf_la_poly_0[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_1[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_2[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_3[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_4[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_5[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_6[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_7[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_8[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_9[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_10[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_11[8][2];
__declspec(align(64)) VUINT32 _gf_la_poly_12[8][2];
} __svml_serf_data_internal;
#endif
__svml_serf_data_internal:
.long 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff /* _AbsMask */
.align 64
.long 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000 /* _One */
.align 64
.long 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a, 0x41558c5a /* _gf_MaxThreshold_LA */
.align 64
.quad 0x3ff0fefbd933b903, 0x3ff0fefbd933b903, 0x3ff0fefbd933b903, 0x3ff0fefbd933b903, 0x3ff0fefbd933b903, 0x3ff0fefbd933b903, 0x3ff0fefbd933b903, 0x3ff0fefbd933b903 /* _gf_la_poly_0 */
.align 64
.quad 0xbfc6a948101e6367, 0xbfc6a948101e6367, 0xbfc6a948101e6367, 0xbfc6a948101e6367, 0xbfc6a948101e6367, 0xbfc6a948101e6367, 0xbfc6a948101e6367, 0xbfc6a948101e6367 /* _gf_la_poly_1 */
.align 64
.quad 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b, 0x3fa3a334ce602c6b /* _gf_la_poly_2 */
.align 64
.quad 0xbf799309ea0c81dc, 0xbf799309ea0c81dc, 0xbf799309ea0c81dc, 0xbf799309ea0c81dc, 0xbf799309ea0c81dc, 0xbf799309ea0c81dc, 0xbf799309ea0c81dc, 0xbf799309ea0c81dc /* _gf_la_poly_3 */
.align 64
.quad 0x3f476df64a40e392, 0x3f476df64a40e392, 0x3f476df64a40e392, 0x3f476df64a40e392, 0x3f476df64a40e392, 0x3f476df64a40e392, 0x3f476df64a40e392, 0x3f476df64a40e392 /* _gf_la_poly_4 */
.align 64
.quad 0xbf0a5216b9508ede, 0xbf0a5216b9508ede, 0xbf0a5216b9508ede, 0xbf0a5216b9508ede, 0xbf0a5216b9508ede, 0xbf0a5216b9508ede, 0xbf0a5216b9508ede, 0xbf0a5216b9508ede /* _gf_la_poly_5 */
.align 64
.quad 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0, 0x3ea5794b95c8e8a0 /* _gf_la_poly_6 */
.align 64
.quad 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f, 0x3e94b6c0b485f30f /* _gf_la_poly_7 */
.align 64
.quad 0xbe65806ce17f0523, 0xbe65806ce17f0523, 0xbe65806ce17f0523, 0xbe65806ce17f0523, 0xbe65806ce17f0523, 0xbe65806ce17f0523, 0xbe65806ce17f0523, 0xbe65806ce17f0523 /* _gf_la_poly_8 */
.align 64
.quad 0x3e2715640470db47, 0x3e2715640470db47, 0x3e2715640470db47, 0x3e2715640470db47, 0x3e2715640470db47, 0x3e2715640470db47, 0x3e2715640470db47, 0x3e2715640470db47 /* _gf_la_poly_9 */
.align 64
.quad 0xbdddcb2653d80f03, 0xbdddcb2653d80f03, 0xbdddcb2653d80f03, 0xbdddcb2653d80f03, 0xbdddcb2653d80f03, 0xbdddcb2653d80f03, 0xbdddcb2653d80f03, 0xbdddcb2653d80f03 /* _gf_la_poly_10 */
.align 64
.quad 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb, 0x3d85eadfc762d3eb /* _gf_la_poly_11 */
.align 64
.quad 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1, 0xbd1c668a2871f0f1 /* _gf_la_poly_12 */
.align 64
.type __svml_serf_data_internal,@object
.size __svml_serf_data_internal,.-__svml_serf_data_internal

View File

@ -0,0 +1,20 @@
/* SSE2 version of vectorized erff, 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_erff _ZGVbN4v_erff_sse2
#include "../svml_s_erff4_core.S"

View File

@ -0,0 +1,28 @@
/* Multiple versions of vectorized erff, 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_erff
#include "ifunc-mathvec-sse4_1.h"
libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
#ifdef SHARED
__hidden_ver1 (_ZGVbN4v_erff, __GI__ZGVbN4v_erff,
__redirect__ZGVbN4v_erff)
__attribute__ ((visibility ("hidden")));
#endif

View File

@ -0,0 +1,664 @@
/* Function erff 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:
*
* Basic formula is
* erf(x) ~ erf(x0) +
* + exp(-x0*x0)*D*(1+c0+T*P1(T)+D^2*P3(T)+D^4*p5)
* where D=x-x0, T=x0*D
* x0 is x rounded to a specified number of fractional bits (in this case 8),
* except that x0=0 for |x|<3.5/256.0 (using x0=0 for first 4 table entries)
*
* Data table packs both erf(x0)_high and a few bits of erf(x0)_low in one
* entry (in place of redundant exponent bits)
*
*/
/* Offsets for data table __svml_serf_data_internal
*/
#define _erf_tbl 0
#define _AbsMask 4032
#define _MaxThreshold 4048
#define _SRound 4064
#define _U2Threshold 4080
#define _poly3_0 4096
/* Lookup bias for data table __svml_serf_data_internal. */
#define Table_Lookup_Bias -0x3c000000
#include <sysdep.h>
.text
.section .text.sse4,"ax",@progbits
ENTRY(_ZGVbN4v_erff_sse4)
lea Table_Lookup_Bias+__svml_serf_data_internal(%rip), %rdi
movups _AbsMask+__svml_serf_data_internal(%rip), %xmm9
andps %xmm0, %xmm9
/*
* erf(x) rounds to 1.0 for x>_MaxThreshold (3.9375)
* can compute all results in the main path
*/
movaps %xmm9, %xmm12
/* save sign */
pxor %xmm9, %xmm0
minps _MaxThreshold+__svml_serf_data_internal(%rip), %xmm12
/*
* vector gather:
* erf(x0), exp(-x0*x0)*2.0/sqrt(pi)
*/
movups _SRound+__svml_serf_data_internal(%rip), %xmm1
movaps %xmm1, %xmm4
movups _U2Threshold+__svml_serf_data_internal(%rip), %xmm11
addps %xmm12, %xmm4
cmpltps %xmm12, %xmm11
movaps %xmm4, %xmm10
pslld $3, %xmm4
pshufd $1, %xmm4, %xmm2
subps %xmm1, %xmm10
movd %xmm4, %eax
movd %xmm2, %edx
pshufd $2, %xmm4, %xmm3
subps %xmm10, %xmm12
movd %xmm3, %ecx
andps %xmm12, %xmm11
/* D2 = Diff^2 */
mulps %xmm11, %xmm11
mulps %xmm12, %xmm10
/* NaN fixup */
minps %xmm9, %xmm12
/*
* Start polynomial evaluation
* P1
*/
mulps _poly3_0+__svml_serf_data_internal(%rip), %xmm11
pshufd $3, %xmm4, %xmm5
subps %xmm10, %xmm11
movd %xmm5, %esi
/*
* branch-free
* (exp_h(x0) * Diff) * (poly + 1.0)
*/
mulps %xmm12, %xmm11
movslq %eax, %rax
addps %xmm11, %xmm12
movslq %edx, %rdx
movslq %ecx, %rcx
movslq %esi, %rsi
movq (%rdi,%rax), %xmm13
movq (%rdi,%rdx), %xmm6
movq (%rdi,%rcx), %xmm8
movq (%rdi,%rsi), %xmm7
unpcklps %xmm6, %xmm13
unpcklps %xmm7, %xmm8
movaps %xmm13, %xmm14
shufps $238, %xmm8, %xmm13
/* Final result */
mulps %xmm12, %xmm13
movlhps %xmm8, %xmm14
addps %xmm13, %xmm14
/* set sign */
orps %xmm14, %xmm0
ret
END(_ZGVbN4v_erff_sse4)
.section .rodata, "a"
.align 16
#ifdef __svml_serf_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct
{
__declspec(align(16)) VUINT32 _erf_tbl[1008][1];
__declspec(align(16)) VUINT32 _AbsMask[4][1];
__declspec(align(16)) VUINT32 _MaxThreshold[4][1];
__declspec(align(16)) VUINT32 _SRound[4][1];
__declspec(align(16)) VUINT32 _U2Threshold[4][1];
__declspec(align(16)) VUINT32 _poly3_0[4][1];
} __svml_serf_data_internal;
#endif
__svml_serf_data_internal:
/*== _erf_tbl ==*/
.long 0x00000000, 0x3f906ebb
.long 0x3c106dfa, 0x3f906c79
.long 0x3c906bb8, 0x3f9065b4
.long 0x3cd89bf0, 0x3f905a6c
.long 0x3d1062b2, 0x3f904aa3
.long 0x3d3472ea, 0x3f90365a
.long 0x3d587d7f, 0x3f901d93
.long 0x3d7c8154, 0x3f900050
.long 0x3d903ea4, 0x3f8fde94
.long 0x3da2381f, 0x3f8fb862
.long 0x3db42c8d, 0x3f8f8dbd
.long 0x3dc61b5f, 0x3f8f5eab
.long 0x3dd80409, 0x3f8f2b2e
.long 0x3de9e5fc, 0x3f8ef34c
.long 0x3dfbc0ad, 0x3f8eb70a
.long 0x3e06c9c8, 0x3f8e766e
.long 0x3e0faf0d, 0x3f8e317d
.long 0x3e188fe1, 0x3f8de83e
.long 0x3e216bfe, 0x3f8d9ab9
.long 0x3e2a4321, 0x3f8d48f3
.long 0x3e331506, 0x3f8cf2f5
.long 0x3e3be169, 0x3f8c98c6
.long 0x3e44a808, 0x3f8c3a6f
.long 0x3e4d68a1, 0x3f8bd7f8
.long 0x3e5622f2, 0x3f8b716c
.long 0x3e5ed6b9, 0x3f8b06d2
.long 0x3e6783b7, 0x3f8a9834
.long 0x3e7029aa, 0x3f8a259e
.long 0x3e78c855, 0x3f89af18
.long 0x3e80afbc, 0x3f8934af
.long 0x3e84f76b, 0x3f88b66c
.long 0x3e893b19, 0x3f88345d
.long 0x3e8d7aa7, 0x3f87ae8b
.long 0x3e91b5f8, 0x3f872504
.long 0x3e95ecee, 0x3f8697d3
.long 0x3e9a1f6b, 0x3f860705
.long 0x3e9e4d54, 0x3f8572a8
.long 0x3ea2768c, 0x3f84dac8
.long 0x3ea69af8, 0x3f843f72
.long 0x3eaaba7a, 0x3f83a0b6
.long 0x3eaed4fa, 0x3f82fe9f
.long 0x3eb2ea5c, 0x3f82593e
.long 0x3eb6fa85, 0x3f81b0a0
.long 0x3ebb055d, 0x3f8104d3
.long 0x3ebf0aca, 0x3f8055e8
.long 0x3ec30ab3, 0x3f7f47d8
.long 0x3ec70501, 0x3f7ddddf
.long 0x3ecaf99b, 0x3f7c6e05
.long 0x3ecee869, 0x3f7af867
.long 0x3ed2d156, 0x3f797d26
.long 0x3ed6b44b, 0x3f77fc62
.long 0x3eda9132, 0x3f76763c
.long 0x3ede67f6, 0x3f74ead4
.long 0x3ee23882, 0x3f735a4c
.long 0x3ee602c2, 0x3f71c4c4
.long 0x3ee9c6a2, 0x3f702a5f
.long 0x3eed840e, 0x3f6e8b3e
.long 0x3ef13af5, 0x3f6ce783
.long 0x3ef4eb45, 0x3f6b3f51
.long 0x3ef894ea, 0x3f6992c9
.long 0x3efc37d5, 0x3f67e20f
.long 0x3effd3f5, 0x3f662d45
.long 0x3f01b49d, 0x3f64748e
.long 0x3f037bca, 0x3f62b80d
.long 0x3f053f7b, 0x3f60f7e5
.long 0x3f06ffa8, 0x3f5f3439
.long 0x3f08bc4a, 0x3f5d6d2d
.long 0x3f0a755a, 0x3f5ba2e3
.long 0x3f0c2ad3, 0x3f59d57e
.long 0x3f0ddcae, 0x3f580523
.long 0x3f0f8ae6, 0x3f5631f4
.long 0x3f113574, 0x3f545c14
.long 0x3f12dc54, 0x3f5283a7
.long 0x3f147f81, 0x3f50a8cf
.long 0x3f161ef6, 0x3f4ecbb1
.long 0x3f17baae, 0x3f4cec6d
.long 0x3f1952a6, 0x3f4b0b28
.long 0x3f1ae6da, 0x3f492804
.long 0x3f1c7745, 0x3f474323
.long 0x3f1e03e5, 0x3f455ca8
.long 0x3f1f8cb7, 0x3f4374b5
.long 0x3f2111b7, 0x3f418b6b
.long 0x3f2292e4, 0x3f3fa0ee
.long 0x3f24103a, 0x3f3db55e
.long 0x3f2589b9, 0x3f3bc8dc
.long 0x3f26ff5d, 0x3f39db8a
.long 0x3f287126, 0x3f37ed89
.long 0x3f29df13, 0x3f35fef8
.long 0x3f2b4922, 0x3f340ff9
.long 0x3f2caf53, 0x3f3220ab
.long 0x3f2e11a4, 0x3f30312e
.long 0x3f2f7017, 0x3f2e41a1
.long 0x3f30caab, 0x3f2c5223
.long 0x3f322160, 0x3f2a62d3
.long 0x3f337437, 0x3f2873cf
.long 0x3f34c32f, 0x3f268534
.long 0x3f360e4c, 0x3f249721
.long 0x3f37558c, 0x3f22a9b3
.long 0x3f3898f3, 0x3f20bd06
.long 0x3f39d881, 0x3f1ed137
.long 0x3f3b1438, 0x3f1ce661
.long 0x3f3c4c1b, 0x3f1afca0
.long 0x3f3d802c, 0x3f19140f
.long 0x3f3eb06c, 0x3f172cc9
.long 0x3f3fdce0, 0x3f1546e7
.long 0x3f410589, 0x3f136284
.long 0x3f422a6b, 0x3f117fb9
.long 0x3f434b89, 0x3f0f9e9e
.long 0x3f4468e7, 0x3f0dbf4c
.long 0x3f458287, 0x3f0be1db
.long 0x3f46986f, 0x3f0a0662
.long 0x3f47aaa2, 0x3f082cf7
.long 0x3f48b925, 0x3f0655b1
.long 0x3f49c3fb, 0x3f0480a6
.long 0x3f4acb29, 0x3f02adeb
.long 0x3f4bceb4, 0x3f00dd96
.long 0x3f4ccea1, 0x3efe1f73
.long 0x3f4dcaf4, 0x3efa88d5
.long 0x3f4ec3b4, 0x3ef6f777
.long 0x3f4fb8e5, 0x3ef36b80
.long 0x3f50aa8d, 0x3eefe513
.long 0x3f5198b1, 0x3eec6455
.long 0x3f528358, 0x3ee8e968
.long 0x3f536a86, 0x3ee5746d
.long 0x3f544e43, 0x3ee20584
.long 0x3f552e93, 0x3ede9ccc
.long 0x3f560b7e, 0x3edb3a64
.long 0x3f56e50a, 0x3ed7de6a
.long 0x3f57bb3d, 0x3ed488f8
.long 0x3f588e1e, 0x3ed13a2b
.long 0x3f595db4, 0x3ecdf21c
.long 0x3f5a2a05, 0x3ecab0e4
.long 0x3f5af318, 0x3ec7769b
.long 0x3f5bb8f4, 0x3ec44359
.long 0x3f5c7ba1, 0x3ec11733
.long 0x3f5d3b25, 0x3ebdf23d
.long 0x3f5df788, 0x3ebad48d
.long 0x3f5eb0d1, 0x3eb7be35
.long 0x3f5f6707, 0x3eb4af46
.long 0x3f601a32, 0x3eb1a7d3
.long 0x3f60ca59, 0x3eaea7ea
.long 0x3f617784, 0x3eabaf9a
.long 0x3f6221bb, 0x3ea8bef3
.long 0x3f62c905, 0x3ea5d600
.long 0x3f636d69, 0x3ea2f4ce
.long 0x3f640ef1, 0x3ea01b68
.long 0x3f64ada3, 0x3e9d49d9
.long 0x3f654987, 0x3e9a8029
.long 0x3f65e2a6, 0x3e97be62
.long 0x3f667906, 0x3e95048b
.long 0x3f670cb1, 0x3e9252aa
.long 0x3f679dae, 0x3e8fa8c5
.long 0x3f682c06, 0x3e8d06e3
.long 0x3f68b7bf, 0x3e8a6d05
.long 0x3f6940e2, 0x3e87db31
.long 0x3f69c778, 0x3e855168
.long 0x3f6a4b88, 0x3e82cfad
.long 0x3f6acd1a, 0x3e805600
.long 0x3f6b4c36, 0x3e7bc8c2
.long 0x3f6bc8e5, 0x3e76f5a0
.long 0x3f6c432f, 0x3e723298
.long 0x3f6cbb1b, 0x3e6d7fa5
.long 0x3f6d30b1, 0x3e68dcc1
.long 0x3f6da3fa, 0x3e6449e7
.long 0x3f6e14fe, 0x3e5fc70e
.long 0x3f6e83c4, 0x3e5b542b
.long 0x3f6ef055, 0x3e56f136
.long 0x3f6f5ab8, 0x3e529e21
.long 0x3f6fc2f5, 0x3e4e5adf
.long 0x3f702915, 0x3e4a2761
.long 0x3f708d1f, 0x3e460399
.long 0x3f70ef1b, 0x3e41ef75
.long 0x3f714f11, 0x3e3deae4
.long 0x3f71ad09, 0x3e39f5d2
.long 0x3f72090a, 0x3e36102b
.long 0x3f72631c, 0x3e3239db
.long 0x3f72bb46, 0x3e2e72cb
.long 0x3f731191, 0x3e2abae4
.long 0x3f736604, 0x3e27120f
.long 0x3f73b8a5, 0x3e237833
.long 0x3f74097e, 0x3e1fed36
.long 0x3f745895, 0x3e1c70fd
.long 0x3f74a5f2, 0x3e19036e
.long 0x3f74f19b, 0x3e15a46d
.long 0x3f753b98, 0x3e1253dc
.long 0x3f7583f1, 0x3e0f119f
.long 0x3f75caac, 0x3e0bdd96
.long 0x3f760fd1, 0x3e08b7a4
.long 0x3f765366, 0x3e059fa9
.long 0x3f769573, 0x3e029586
.long 0x3f76d5fe, 0x3dff3230
.long 0x3f77150f, 0x3df95481
.long 0x3f7752ab, 0x3df391b9
.long 0x3f778eda, 0x3dede995
.long 0x3f77c9a2, 0x3de85bd0
.long 0x3f78030a, 0x3de2e825
.long 0x3f783b18, 0x3ddd8e4c
.long 0x3f7871d3, 0x3dd84dfe
.long 0x3f78a741, 0x3dd326f3
.long 0x3f78db68, 0x3dce18e3
.long 0x3f790e50, 0x3dc92385
.long 0x3f793ffc, 0x3dc4468f
.long 0x3f797075, 0x3dbf81b6
.long 0x3f799fbf, 0x3dbad4b0
.long 0x3f79cde1, 0x3db63f32
.long 0x3f79fae1, 0x3db1c0f1
.long 0x3f7a26c4, 0x3dad59a1
.long 0x3f7a518f, 0x3da908f6
.long 0x3f7a7b4a, 0x3da4cea4
.long 0x3f7aa3f9, 0x3da0aa5e
.long 0x3f7acba1, 0x3d9c9bd9
.long 0x3f7af248, 0x3d98a2c7
.long 0x3f7b17f4, 0x3d94bedd
.long 0x3f7b3ca9, 0x3d90efcd
.long 0x3f7b606e, 0x3d8d354b
.long 0x3f7b8346, 0x3d898f0a
.long 0x3f7ba537, 0x3d85fcbf
.long 0x3f7bc646, 0x3d827e1d
.long 0x3f7be677, 0x3d7e25af
.long 0x3f7c05d1, 0x3d777546
.long 0x3f7c2456, 0x3d70ea68
.long 0x3f7c420d, 0x3d6a847d
.long 0x3f7c5ef9, 0x3d6442f0
.long 0x3f7c7b1f, 0x3d5e252a
.long 0x3f7c9684, 0x3d582a98
.long 0x3f7cb12b, 0x3d5252a5
.long 0x3f7ccb1a, 0x3d4c9cbd
.long 0x3f7ce454, 0x3d47084e
.long 0x3f7cfcdd, 0x3d4194c7
.long 0x3f7d14ba, 0x3d3c4196
.long 0x3f7d2bef, 0x3d370e2c
.long 0x3f7d427f, 0x3d31f9fb
.long 0x3f7d586f, 0x3d2d0474
.long 0x3f7d6dc2, 0x3d282d0c
.long 0x3f7d827b, 0x3d237336
.long 0x3f7d96a0, 0x3d1ed669
.long 0x3f7daa32, 0x3d1a561b
.long 0x3f7dbd36, 0x3d15f1c6
.long 0x3f7dcfb0, 0x3d11a8e1
.long 0x3f7de1a2, 0x3d0d7ae9
.long 0x3f7df30f, 0x3d09675a
.long 0x3f7e03fd, 0x3d056db0
.long 0x3f7e146c, 0x3d018d6b
.long 0x3f7e2461, 0x3cfb8c15
.long 0x3f7e33de, 0x3cf42e22
.long 0x3f7e42e8, 0x3ced0003
.long 0x3f7e517f, 0x3ce600c0
.long 0x3f7e5fa9, 0x3cdf2f67
.long 0x3f7e6d66, 0x3cd88b05
.long 0x3f7e7abb, 0x3cd212ad
.long 0x3f7e87aa, 0x3ccbc574
.long 0x3f7e9435, 0x3cc5a273
.long 0x3f7ea05f, 0x3cbfa8c4
.long 0x3f7eac2b, 0x3cb9d786
.long 0x3f7eb79a, 0x3cb42ddb
.long 0x3f7ec2b1, 0x3caeaae6
.long 0x3f7ecd71, 0x3ca94dcf
.long 0x3f7ed7dc, 0x3ca415c2
.long 0x3f7ee1f4, 0x3c9f01ec
.long 0x3f7eebbd, 0x3c9a117f
.long 0x3f7ef537, 0x3c9543ae
.long 0x3f7efe66, 0x3c9097b1
.long 0x3f7f074b, 0x3c8c0cc2
.long 0x3f7f0fe8, 0x3c87a21f
.long 0x3f7f1840, 0x3c83570a
.long 0x3f7f2053, 0x3c7e558a
.long 0x3f7f2826, 0x3c763931
.long 0x3f7f2fb8, 0x3c6e579b
.long 0x3f7f370c, 0x3c66af65
.long 0x3f7f3e23, 0x3c5f3f2d
.long 0x3f7f4500, 0x3c58059c
.long 0x3f7f4ba4, 0x3c51015f
.long 0x3f7f5211, 0x3c4a3127
.long 0x3f7f5848, 0x3c4393af
.long 0x3f7f5e4b, 0x3c3d27b5
.long 0x3f7f641b, 0x3c36ebff
.long 0x3f7f69ba, 0x3c30df57
.long 0x3f7f6f29, 0x3c2b008e
.long 0x3f7f746a, 0x3c254e7b
.long 0x3f7f797f, 0x3c1fc7fb
.long 0x3f7f7e67, 0x3c1a6bee
.long 0x3f7f8326, 0x3c15393d
.long 0x3f7f87bb, 0x3c102ed6
.long 0x3f7f8c29, 0x3c0b4bab
.long 0x3f7f9070, 0x3c068eb5
.long 0x3f7f9492, 0x3c01f6f1
.long 0x3f7f9890, 0x3bfb06c5
.long 0x3f7f9c6b, 0x3bf26625
.long 0x3f7fa024, 0x3bea0a1d
.long 0x3f7fa3bc, 0x3be1f0d3
.long 0x3f7fa734, 0x3bda1876
.long 0x3f7faa8d, 0x3bd27f42
.long 0x3f7fadc8, 0x3bcb237a
.long 0x3f7fb0e6, 0x3bc4036c
.long 0x3f7fb3e8, 0x3bbd1d6f
.long 0x3f7fb6cf, 0x3bb66fe6
.long 0x3f7fb99c, 0x3baff93b
.long 0x3f7fbc4f, 0x3ba9b7e1
.long 0x3f7fbeea, 0x3ba3aa56
.long 0x3f7fc16d, 0x3b9dcf20
.long 0x3f7fc3d9, 0x3b9824ce
.long 0x3f7fc62e, 0x3b92a9f7
.long 0x3f7fc86e, 0x3b8d5d3c
.long 0x3f7fca99, 0x3b883d46
.long 0x3f7fccb0, 0x3b8348c6
.long 0x3f7fceb4, 0x3b7cfce8
.long 0x3f7fd0a5, 0x3b73ba24
.long 0x3f7fd283, 0x3b6ac6d3
.long 0x3f7fd450, 0x3b622096
.long 0x3f7fd60c, 0x3b59c51d
.long 0x3f7fd7b7, 0x3b51b22a
.long 0x3f7fd953, 0x3b49e589
.long 0x3f7fdadf, 0x3b425d18
.long 0x3f7fdc5c, 0x3b3b16c2
.long 0x3f7fddcc, 0x3b341080
.long 0x3f7fdf2d, 0x3b2d4858
.long 0x3f7fe081, 0x3b26bc5e
.long 0x3f7fe1c8, 0x3b206ab2
.long 0x3f7fe303, 0x3b1a5183
.long 0x3f7fe431, 0x3b146f09
.long 0x3f7fe554, 0x3b0ec18c
.long 0x3f7fe66c, 0x3b09475d
.long 0x3f7fe77a, 0x3b03feda
.long 0x3f7fe87d, 0x3afdccdc
.long 0x3f7fe975, 0x3af3f919
.long 0x3f7fea65, 0x3aea7f6c
.long 0x3f7feb4b, 0x3ae15ce8
.long 0x3f7fec27, 0x3ad88eb8
.long 0x3f7fecfc, 0x3ad0121b
.long 0x3f7fedc8, 0x3ac7e464
.long 0x3f7fee8c, 0x3ac002f8
.long 0x3f7fef48, 0x3ab86b52
.long 0x3f7feffd, 0x3ab11afe
.long 0x3f7ff0aa, 0x3aaa0f9a
.long 0x3f7ff151, 0x3aa346d7
.long 0x3f7ff1f1, 0x3a9cbe77
.long 0x3f7ff28a, 0x3a96744c
.long 0x3f7ff31e, 0x3a90663b
.long 0x3f7ff3ab, 0x3a8a9237
.long 0x3f7ff433, 0x3a84f643
.long 0x3f7ff4b5, 0x3a7f20e7
.long 0x3f7ff532, 0x3a74bdd2
.long 0x3f7ff5aa, 0x3a6abfa9
.long 0x3f7ff61d, 0x3a6122ea
.long 0x3f7ff68b, 0x3a57e42f
.long 0x3f7ff6f5, 0x3a4f002c
.long 0x3f7ff75a, 0x3a4673af
.long 0x3f7ff7bb, 0x3a3e3ba2
.long 0x3f7ff819, 0x3a365507
.long 0x3f7ff872, 0x3a2ebcf6
.long 0x3f7ff8c7, 0x3a2770a1
.long 0x3f7ff919, 0x3a206d52
.long 0x3f7ff968, 0x3a19b066
.long 0x3f7ff9b3, 0x3a133754
.long 0x3f7ff9fb, 0x3a0cffa3
.long 0x3f7ffa40, 0x3a0706f4
.long 0x3f7ffa82, 0x3a014af8
.long 0x3f7ffac1, 0x39f792ea
.long 0x3f7ffafe, 0x39ed0088
.long 0x3f7ffb38, 0x39e2daa1
.long 0x3f7ffb6f, 0x39d91d2d
.long 0x3f7ffba5, 0x39cfc44a
.long 0x3f7ffbd7, 0x39c6cc35
.long 0x3f7ffc08, 0x39be314d
.long 0x3f7ffc36, 0x39b5f011
.long 0x3f7ffc63, 0x39ae051c
.long 0x3f7ffc8e, 0x39a66d2a
.long 0x3f7ffcb6, 0x399f2512
.long 0x3f7ffcdd, 0x399829c8
.long 0x3f7ffd02, 0x3991785a
.long 0x3f7ffd26, 0x398b0df2
.long 0x3f7ffd48, 0x3984e7d2
.long 0x3f7ffd68, 0x397e06ab
.long 0x3f7ffd87, 0x3972bbde
.long 0x3f7ffda5, 0x3967ea53
.long 0x3f7ffdc1, 0x395d8d4b
.long 0x3f7ffddc, 0x3953a034
.long 0x3f7ffdf6, 0x394a1ea5
.long 0x3f7ffe0f, 0x3941045e
.long 0x3f7ffe27, 0x39384d47
.long 0x3f7ffe3d, 0x392ff56d
.long 0x3f7ffe53, 0x3927f904
.long 0x3f7ffe67, 0x39205461
.long 0x3f7ffe7b, 0x391903fe
.long 0x3f7ffe8d, 0x39120475
.long 0x3f7ffe9f, 0x390b5281
.long 0x3f7ffeb0, 0x3904eafc
.long 0x3f7ffec0, 0x38fd95bd
.long 0x3f7ffed0, 0x38f1de7a
.long 0x3f7ffedf, 0x38e6aa94
.long 0x3f7ffeed, 0x38dbf4a3
.long 0x3f7ffefa, 0x38d1b776
.long 0x3f7fff07, 0x38c7ee0e
.long 0x3f7fff13, 0x38be939c
.long 0x3f7fff1f, 0x38b5a381
.long 0x3f7fff2a, 0x38ad194e
.long 0x3f7fff34, 0x38a4f0bc
.long 0x3f7fff3f, 0x389d25b0
.long 0x3f7fff48, 0x3895b43b
.long 0x3f7fff51, 0x388e9890
.long 0x3f7fff5a, 0x3887cf0e
.long 0x3f7fff62, 0x38815434
.long 0x3f7fff6a, 0x3876494d
.long 0x3f7fff72, 0x386a7a5a
.long 0x3f7fff79, 0x385f355e
.long 0x3f7fff80, 0x38547466
.long 0x3f7fff86, 0x384a31bf
.long 0x3f7fff8c, 0x384067ee
.long 0x3f7fff92, 0x383711b4
.long 0x3f7fff98, 0x382e2a06
.long 0x3f7fff9d, 0x3825ac0e
.long 0x3f7fffa2, 0x381d9329
.long 0x3f7fffa7, 0x3815dae6
.long 0x3f7fffab, 0x380e7f01
.long 0x3f7fffb0, 0x38077b62
.long 0x3f7fffb4, 0x3800cc21
.long 0x3f7fffb8, 0x37f4daf4
.long 0x3f7fffbc, 0x37e8b7ac
.long 0x3f7fffbf, 0x37dd2782
.long 0x3f7fffc2, 0x37d223dc
.long 0x3f7fffc6, 0x37c7a666
.long 0x3f7fffc9, 0x37bda912
.long 0x3f7fffcc, 0x37b42611
.long 0x3f7fffce, 0x37ab17d6
.long 0x3f7fffd1, 0x37a2790f
.long 0x3f7fffd3, 0x379a44a5
.long 0x3f7fffd6, 0x379275b9
.long 0x3f7fffd8, 0x378b07a2
.long 0x3f7fffda, 0x3783f5e9
.long 0x3f7fffdc, 0x377a7897
.long 0x3f7fffde, 0x376dad68
.long 0x3f7fffe0, 0x37618278
.long 0x3f7fffe2, 0x3755f04f
.long 0x3f7fffe3, 0x374aefcc
.long 0x3f7fffe5, 0x37407a1d
.long 0x3f7fffe6, 0x373688bc
.long 0x3f7fffe8, 0x372d1570
.long 0x3f7fffe9, 0x37241a44
.long 0x3f7fffea, 0x371b9188
.long 0x3f7fffeb, 0x371375cf
.long 0x3f7fffec, 0x370bc1e7
.long 0x3f7fffee, 0x370470dd
.long 0x3f7fffef, 0x36fafbec
.long 0x3f7fffef, 0x36edc95b
.long 0x3f7ffff0, 0x36e14167
.long 0x3f7ffff1, 0x36d55bd6
.long 0x3f7ffff2, 0x36ca10ce
.long 0x3f7ffff3, 0x36bf58d1
.long 0x3f7ffff4, 0x36b52cb9
.long 0x3f7ffff4, 0x36ab85b5
.long 0x3f7ffff5, 0x36a25d43
.long 0x3f7ffff5, 0x3699ad31
.long 0x3f7ffff6, 0x36916f95
.long 0x3f7ffff7, 0x36899ecb
.long 0x3f7ffff7, 0x36823575
.long 0x3f7ffff8, 0x36765ce8
.long 0x3f7ffff8, 0x366909cc
.long 0x3f7ffff9, 0x365c684a
.long 0x3f7ffff9, 0x36506f88
.long 0x3f7ffff9, 0x36451713
.long 0x3f7ffffa, 0x363a56e4
.long 0x3f7ffffa, 0x36302754
.long 0x3f7ffffa, 0x36268119
.long 0x3f7ffffb, 0x361d5d43
.long 0x3f7ffffb, 0x3614b538
.long 0x3f7ffffb, 0x360c82b1
.long 0x3f7ffffc, 0x3604bfb1
.long 0x3f7ffffc, 0x35facd10
.long 0x3f7ffffc, 0x35ece39b
.long 0x3f7ffffc, 0x35dfb8b6
.long 0x3f7ffffd, 0x35d34296
.long 0x3f7ffffd, 0x35c777ec
.long 0x3f7ffffd, 0x35bc4fdc
.long 0x3f7ffffd, 0x35b1c1fc
.long 0x3f7ffffd, 0x35a7c64b
.long 0x3f7ffffd, 0x359e5531
.long 0x3f7ffffe, 0x35956771
.long 0x3f7ffffe, 0x358cf630
.long 0x3f7ffffe, 0x3584fae8
.long 0x3f7ffffe, 0x357adecb
.long 0x3f7ffffe, 0x356c9b8f
.long 0x3f7ffffe, 0x355f20ef
.long 0x3f7ffffe, 0x3552644f
.long 0x3f7ffffe, 0x35465b9c
.long 0x3f7fffff, 0x353afd47
.long 0x3f7fffff, 0x3530403c
.long 0x3f7fffff, 0x35261be0
.long 0x3f7fffff, 0x351c8807
.long 0x3f7fffff, 0x35137cf0
.long 0x3f7fffff, 0x350af341
.long 0x3f7fffff, 0x3502e402
.long 0x3f7fffff, 0x34f6912a
.long 0x3f7fffff, 0x34e8356b
.long 0x3f7fffff, 0x34daa8e4
.long 0x3f7fffff, 0x34cde050
.long 0x3f7fffff, 0x34c1d100
.long 0x3f7fffff, 0x34b670d5
.long 0x3f7fffff, 0x34abb639
.long 0x3f7fffff, 0x34a19816
.long 0x3f7fffff, 0x34980dd1
.long 0x3f7fffff, 0x348f0f43
.long 0x3f7fffff, 0x348694b3
.long 0x3f800000, 0x347d2da8
.long 0x3f800000, 0x346e1d72
.align 16
.long 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff /* _AbsMask */
.align 16
.long 0x407b8000, 0x407b8000, 0x407b8000, 0x407b8000 /* _MaxThreshold */
.align 16
.long 0x47800000, 0x47800000, 0x47800000, 0x47800000 /* _SRound */
.align 16
.long 0x2f800000, 0x2f800000, 0x2f800000, 0x2f800000 /* _U2THreshold */
.align 16
.long 0xbeaaaade, 0xbeaaaade, 0xbeaaaade, 0xbeaaaade /* _poly_3_0 */
.align 16
.type __svml_serf_data_internal,@object
.size __svml_serf_data_internal,.-__svml_serf_data_internal

View File

@ -0,0 +1,20 @@
/* SSE version of vectorized erff, 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_erff _ZGVdN8v_erff_sse_wrapper
#include "../svml_s_erff8_core.S"

View File

@ -0,0 +1,28 @@
/* Multiple versions of vectorized erff, 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_erff
#include "ifunc-mathvec-avx2.h"
libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ());
#ifdef SHARED
__hidden_ver1 (_ZGVdN8v_erff, __GI__ZGVdN8v_erff,
__redirect__ZGVdN8v_erff)
__attribute__ ((visibility ("hidden")));
#endif

View File

@ -0,0 +1,669 @@
/* Function erff 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:
*
* Basic formula is
* erf(x) ~ erf(x0) +
* + exp(-x0*x0)*D*(1+c0+T*P1(T)+D^2*P3(T)+D^4*p5)
* where D=x-x0, T=x0*D
* x0 is x rounded to a specified number of fractional bits (in this case 8),
* except that x0=0 for |x|<3.5/256.0 (using x0=0 for first 4 table entries)
*
* Data table packs both erf(x0)_high and a few bits of erf(x0)_low in one
* entry (in place of redundant exponent bits)
*
*/
/* Offsets for data table __svml_serf_data_internal
*/
#define _erf_tbl 0
#define _AbsMask 4032
#define _MaxThreshold 4064
#define _SRound 4096
#define _U2Threshold 4128
#define _poly3_0 4160
/* Lookup bias for data table __svml_serf_data_internal. */
#define Table_Lookup_Bias -0x3c000000
#include <sysdep.h>
.text
.section .text.avx2,"ax",@progbits
ENTRY(_ZGVdN8v_erff_avx2)
lea Table_Lookup_Bias+__svml_serf_data_internal(%rip), %rax
/*
* vector gather:
* erf(x0), exp(-x0*x0)*2.0/sqrt(pi)
*/
vmovups _SRound+__svml_serf_data_internal(%rip), %ymm7
vandps _AbsMask+__svml_serf_data_internal(%rip), %ymm0, %ymm6
/*
* erf(x) rounds to 1.0 for x>_MaxThreshold (3.9375)
* can compute all results in the main path
*/
vminps _MaxThreshold+__svml_serf_data_internal(%rip), %ymm6, %ymm8
vaddps %ymm7, %ymm8, %ymm10
vcmpgt_oqps _U2Threshold+__svml_serf_data_internal(%rip), %ymm8, %ymm9
vpslld $3, %ymm10, %ymm11
vsubps %ymm7, %ymm10, %ymm4
vsubps %ymm4, %ymm8, %ymm3
vandps %ymm9, %ymm3, %ymm2
/* NaN fixup */
vminps %ymm6, %ymm3, %ymm3
/* D2 = Diff^2 */
vmulps %ymm2, %ymm2, %ymm2
/* save sign */
vxorps %ymm0, %ymm6, %ymm5
vmovd %xmm11, %edx
vextractf128 $1, %ymm11, %xmm12
vpextrd $2, %xmm11, %esi
movslq %edx, %rdx
movslq %esi, %rsi
vmovd %xmm12, %r8d
vmovq (%rax,%rdx), %xmm13
vmovq (%rax,%rsi), %xmm14
vunpcklps %xmm14, %xmm13, %xmm10
vmovups _poly3_0+__svml_serf_data_internal(%rip), %ymm14
vpextrd $1, %xmm11, %ecx
vpextrd $3, %xmm11, %edi
vpextrd $1, %xmm12, %r9d
vpextrd $2, %xmm12, %r10d
vpextrd $3, %xmm12, %r11d
/*
* Start polynomial evaluation
* P1
*/
vfmsub231ps %ymm14, %ymm3, %ymm4
movslq %ecx, %rcx
movslq %edi, %rdi
movslq %r8d, %r8
movslq %r9d, %r9
movslq %r10d, %r10
movslq %r11d, %r11
vmovq (%rax,%rcx), %xmm1
vmovq (%rax,%rdi), %xmm15
/*
* branch-free
* (exp_h(x0) * Diff) * (poly + 1.0)
*/
vfmadd213ps %ymm3, %ymm2, %ymm4
vmovq (%rax,%r8), %xmm7
vmovq (%rax,%r9), %xmm0
vmovq (%rax,%r10), %xmm8
vmovq (%rax,%r11), %xmm9
vunpcklps %xmm15, %xmm1, %xmm11
vunpcklps %xmm8, %xmm7, %xmm1
vunpcklps %xmm9, %xmm0, %xmm0
vinsertf128 $1, %xmm1, %ymm10, %ymm12
vinsertf128 $1, %xmm0, %ymm11, %ymm13
vunpcklps %ymm13, %ymm12, %ymm0
vunpckhps %ymm13, %ymm12, %ymm15
/* Final result */
vfmadd213ps %ymm0, %ymm15, %ymm4
/* set sign */
vorps %ymm5, %ymm4, %ymm0
ret
END(_ZGVdN8v_erff_avx2)
.section .rodata, "a"
.align 32
#ifdef __svml_serf_data_internal_typedef
typedef unsigned int VUINT32;
typedef struct
{
__declspec(align(32)) VUINT32 _erf_tbl[1008][1];
__declspec(align(32)) VUINT32 _AbsMask[8][1];
__declspec(align(32)) VUINT32 _MaxThreshold[8][1];
__declspec(align(32)) VUINT32 _SRound[8][1];
__declspec(align(32)) VUINT32 _U2Threshold[8][1];
__declspec(align(32)) VUINT32 _poly3_0[8][1];
} __svml_serf_data_internal;
#endif
__svml_serf_data_internal:
/*== _erf_tbl ==*/
.long 0x00000000, 0x3f906ebb
.long 0x3c106dfa, 0x3f906c79
.long 0x3c906bb8, 0x3f9065b4
.long 0x3cd89bf0, 0x3f905a6c
.long 0x3d1062b2, 0x3f904aa3
.long 0x3d3472ea, 0x3f90365a
.long 0x3d587d7f, 0x3f901d93
.long 0x3d7c8154, 0x3f900050
.long 0x3d903ea4, 0x3f8fde94
.long 0x3da2381f, 0x3f8fb862
.long 0x3db42c8d, 0x3f8f8dbd
.long 0x3dc61b5f, 0x3f8f5eab
.long 0x3dd80409, 0x3f8f2b2e
.long 0x3de9e5fc, 0x3f8ef34c
.long 0x3dfbc0ad, 0x3f8eb70a
.long 0x3e06c9c8, 0x3f8e766e
.long 0x3e0faf0d, 0x3f8e317d
.long 0x3e188fe1, 0x3f8de83e
.long 0x3e216bfe, 0x3f8d9ab9
.long 0x3e2a4321, 0x3f8d48f3
.long 0x3e331506, 0x3f8cf2f5
.long 0x3e3be169, 0x3f8c98c6
.long 0x3e44a808, 0x3f8c3a6f
.long 0x3e4d68a1, 0x3f8bd7f8
.long 0x3e5622f2, 0x3f8b716c
.long 0x3e5ed6b9, 0x3f8b06d2
.long 0x3e6783b7, 0x3f8a9834
.long 0x3e7029aa, 0x3f8a259e
.long 0x3e78c855, 0x3f89af18
.long 0x3e80afbc, 0x3f8934af
.long 0x3e84f76b, 0x3f88b66c
.long 0x3e893b19, 0x3f88345d
.long 0x3e8d7aa7, 0x3f87ae8b
.long 0x3e91b5f8, 0x3f872504
.long 0x3e95ecee, 0x3f8697d3
.long 0x3e9a1f6b, 0x3f860705
.long 0x3e9e4d54, 0x3f8572a8
.long 0x3ea2768c, 0x3f84dac8
.long 0x3ea69af8, 0x3f843f72
.long 0x3eaaba7a, 0x3f83a0b6
.long 0x3eaed4fa, 0x3f82fe9f
.long 0x3eb2ea5c, 0x3f82593e
.long 0x3eb6fa85, 0x3f81b0a0
.long 0x3ebb055d, 0x3f8104d3
.long 0x3ebf0aca, 0x3f8055e8
.long 0x3ec30ab3, 0x3f7f47d8
.long 0x3ec70501, 0x3f7ddddf
.long 0x3ecaf99b, 0x3f7c6e05
.long 0x3ecee869, 0x3f7af867
.long 0x3ed2d156, 0x3f797d26
.long 0x3ed6b44b, 0x3f77fc62
.long 0x3eda9132, 0x3f76763c
.long 0x3ede67f6, 0x3f74ead4
.long 0x3ee23882, 0x3f735a4c
.long 0x3ee602c2, 0x3f71c4c4
.long 0x3ee9c6a2, 0x3f702a5f
.long 0x3eed840e, 0x3f6e8b3e
.long 0x3ef13af5, 0x3f6ce783
.long 0x3ef4eb45, 0x3f6b3f51
.long 0x3ef894ea, 0x3f6992c9
.long 0x3efc37d5, 0x3f67e20f
.long 0x3effd3f5, 0x3f662d45
.long 0x3f01b49d, 0x3f64748e
.long 0x3f037bca, 0x3f62b80d
.long 0x3f053f7b, 0x3f60f7e5
.long 0x3f06ffa8, 0x3f5f3439
.long 0x3f08bc4a, 0x3f5d6d2d
.long 0x3f0a755a, 0x3f5ba2e3
.long 0x3f0c2ad3, 0x3f59d57e
.long 0x3f0ddcae, 0x3f580523
.long 0x3f0f8ae6, 0x3f5631f4
.long 0x3f113574, 0x3f545c14
.long 0x3f12dc54, 0x3f5283a7
.long 0x3f147f81, 0x3f50a8cf
.long 0x3f161ef6, 0x3f4ecbb1
.long 0x3f17baae, 0x3f4cec6d
.long 0x3f1952a6, 0x3f4b0b28
.long 0x3f1ae6da, 0x3f492804
.long 0x3f1c7745, 0x3f474323
.long 0x3f1e03e5, 0x3f455ca8
.long 0x3f1f8cb7, 0x3f4374b5
.long 0x3f2111b7, 0x3f418b6b
.long 0x3f2292e4, 0x3f3fa0ee
.long 0x3f24103a, 0x3f3db55e
.long 0x3f2589b9, 0x3f3bc8dc
.long 0x3f26ff5d, 0x3f39db8a
.long 0x3f287126, 0x3f37ed89
.long 0x3f29df13, 0x3f35fef8
.long 0x3f2b4922, 0x3f340ff9
.long 0x3f2caf53, 0x3f3220ab
.long 0x3f2e11a4, 0x3f30312e
.long 0x3f2f7017, 0x3f2e41a1
.long 0x3f30caab, 0x3f2c5223
.long 0x3f322160, 0x3f2a62d3
.long 0x3f337437, 0x3f2873cf
.long 0x3f34c32f, 0x3f268534
.long 0x3f360e4c, 0x3f249721
.long 0x3f37558c, 0x3f22a9b3
.long 0x3f3898f3, 0x3f20bd06
.long 0x3f39d881, 0x3f1ed137
.long 0x3f3b1438, 0x3f1ce661
.long 0x3f3c4c1b, 0x3f1afca0
.long 0x3f3d802c, 0x3f19140f
.long 0x3f3eb06c, 0x3f172cc9
.long 0x3f3fdce0, 0x3f1546e7
.long 0x3f410589, 0x3f136284
.long 0x3f422a6b, 0x3f117fb9
.long 0x3f434b89, 0x3f0f9e9e
.long 0x3f4468e7, 0x3f0dbf4c
.long 0x3f458287, 0x3f0be1db
.long 0x3f46986f, 0x3f0a0662
.long 0x3f47aaa2, 0x3f082cf7
.long 0x3f48b925, 0x3f0655b1
.long 0x3f49c3fb, 0x3f0480a6
.long 0x3f4acb29, 0x3f02adeb
.long 0x3f4bceb4, 0x3f00dd96
.long 0x3f4ccea1, 0x3efe1f73
.long 0x3f4dcaf4, 0x3efa88d5
.long 0x3f4ec3b4, 0x3ef6f777
.long 0x3f4fb8e5, 0x3ef36b80
.long 0x3f50aa8d, 0x3eefe513
.long 0x3f5198b1, 0x3eec6455
.long 0x3f528358, 0x3ee8e968
.long 0x3f536a86, 0x3ee5746d
.long 0x3f544e43, 0x3ee20584
.long 0x3f552e93, 0x3ede9ccc
.long 0x3f560b7e, 0x3edb3a64
.long 0x3f56e50a, 0x3ed7de6a
.long 0x3f57bb3d, 0x3ed488f8
.long 0x3f588e1e, 0x3ed13a2b
.long 0x3f595db4, 0x3ecdf21c
.long 0x3f5a2a05, 0x3ecab0e4
.long 0x3f5af318, 0x3ec7769b
.long 0x3f5bb8f4, 0x3ec44359
.long 0x3f5c7ba1, 0x3ec11733
.long 0x3f5d3b25, 0x3ebdf23d
.long 0x3f5df788, 0x3ebad48d
.long 0x3f5eb0d1, 0x3eb7be35
.long 0x3f5f6707, 0x3eb4af46
.long 0x3f601a32, 0x3eb1a7d3
.long 0x3f60ca59, 0x3eaea7ea
.long 0x3f617784, 0x3eabaf9a
.long 0x3f6221bb, 0x3ea8bef3
.long 0x3f62c905, 0x3ea5d600
.long 0x3f636d69, 0x3ea2f4ce
.long 0x3f640ef1, 0x3ea01b68
.long 0x3f64ada3, 0x3e9d49d9
.long 0x3f654987, 0x3e9a8029
.long 0x3f65e2a6, 0x3e97be62
.long 0x3f667906, 0x3e95048b
.long 0x3f670cb1, 0x3e9252aa
.long 0x3f679dae, 0x3e8fa8c5
.long 0x3f682c06, 0x3e8d06e3
.long 0x3f68b7bf, 0x3e8a6d05
.long 0x3f6940e2, 0x3e87db31
.long 0x3f69c778, 0x3e855168
.long 0x3f6a4b88, 0x3e82cfad
.long 0x3f6acd1a, 0x3e805600
.long 0x3f6b4c36, 0x3e7bc8c2
.long 0x3f6bc8e5, 0x3e76f5a0
.long 0x3f6c432f, 0x3e723298
.long 0x3f6cbb1b, 0x3e6d7fa5
.long 0x3f6d30b1, 0x3e68dcc1
.long 0x3f6da3fa, 0x3e6449e7
.long 0x3f6e14fe, 0x3e5fc70e
.long 0x3f6e83c4, 0x3e5b542b
.long 0x3f6ef055, 0x3e56f136
.long 0x3f6f5ab8, 0x3e529e21
.long 0x3f6fc2f5, 0x3e4e5adf
.long 0x3f702915, 0x3e4a2761
.long 0x3f708d1f, 0x3e460399
.long 0x3f70ef1b, 0x3e41ef75
.long 0x3f714f11, 0x3e3deae4
.long 0x3f71ad09, 0x3e39f5d2
.long 0x3f72090a, 0x3e36102b
.long 0x3f72631c, 0x3e3239db
.long 0x3f72bb46, 0x3e2e72cb
.long 0x3f731191, 0x3e2abae4
.long 0x3f736604, 0x3e27120f
.long 0x3f73b8a5, 0x3e237833
.long 0x3f74097e, 0x3e1fed36
.long 0x3f745895, 0x3e1c70fd
.long 0x3f74a5f2, 0x3e19036e
.long 0x3f74f19b, 0x3e15a46d
.long 0x3f753b98, 0x3e1253dc
.long 0x3f7583f1, 0x3e0f119f
.long 0x3f75caac, 0x3e0bdd96
.long 0x3f760fd1, 0x3e08b7a4
.long 0x3f765366, 0x3e059fa9
.long 0x3f769573, 0x3e029586
.long 0x3f76d5fe, 0x3dff3230
.long 0x3f77150f, 0x3df95481
.long 0x3f7752ab, 0x3df391b9
.long 0x3f778eda, 0x3dede995
.long 0x3f77c9a2, 0x3de85bd0
.long 0x3f78030a, 0x3de2e825
.long 0x3f783b18, 0x3ddd8e4c
.long 0x3f7871d3, 0x3dd84dfe
.long 0x3f78a741, 0x3dd326f3
.long 0x3f78db68, 0x3dce18e3
.long 0x3f790e50, 0x3dc92385
.long 0x3f793ffc, 0x3dc4468f
.long 0x3f797075, 0x3dbf81b6
.long 0x3f799fbf, 0x3dbad4b0
.long 0x3f79cde1, 0x3db63f32
.long 0x3f79fae1, 0x3db1c0f1
.long 0x3f7a26c4, 0x3dad59a1
.long 0x3f7a518f, 0x3da908f6
.long 0x3f7a7b4a, 0x3da4cea4
.long 0x3f7aa3f9, 0x3da0aa5e
.long 0x3f7acba1, 0x3d9c9bd9
.long 0x3f7af248, 0x3d98a2c7
.long 0x3f7b17f4, 0x3d94bedd
.long 0x3f7b3ca9, 0x3d90efcd
.long 0x3f7b606e, 0x3d8d354b
.long 0x3f7b8346, 0x3d898f0a
.long 0x3f7ba537, 0x3d85fcbf
.long 0x3f7bc646, 0x3d827e1d
.long 0x3f7be677, 0x3d7e25af
.long 0x3f7c05d1, 0x3d777546
.long 0x3f7c2456, 0x3d70ea68
.long 0x3f7c420d, 0x3d6a847d
.long 0x3f7c5ef9, 0x3d6442f0
.long 0x3f7c7b1f, 0x3d5e252a
.long 0x3f7c9684, 0x3d582a98
.long 0x3f7cb12b, 0x3d5252a5
.long 0x3f7ccb1a, 0x3d4c9cbd
.long 0x3f7ce454, 0x3d47084e
.long 0x3f7cfcdd, 0x3d4194c7
.long 0x3f7d14ba, 0x3d3c4196
.long 0x3f7d2bef, 0x3d370e2c
.long 0x3f7d427f, 0x3d31f9fb
.long 0x3f7d586f, 0x3d2d0474
.long 0x3f7d6dc2, 0x3d282d0c
.long 0x3f7d827b, 0x3d237336
.long 0x3f7d96a0, 0x3d1ed669
.long 0x3f7daa32, 0x3d1a561b
.long 0x3f7dbd36, 0x3d15f1c6
.long 0x3f7dcfb0, 0x3d11a8e1
.long 0x3f7de1a2, 0x3d0d7ae9
.long 0x3f7df30f, 0x3d09675a
.long 0x3f7e03fd, 0x3d056db0
.long 0x3f7e146c, 0x3d018d6b
.long 0x3f7e2461, 0x3cfb8c15
.long 0x3f7e33de, 0x3cf42e22
.long 0x3f7e42e8, 0x3ced0003
.long 0x3f7e517f, 0x3ce600c0
.long 0x3f7e5fa9, 0x3cdf2f67
.long 0x3f7e6d66, 0x3cd88b05
.long 0x3f7e7abb, 0x3cd212ad
.long 0x3f7e87aa, 0x3ccbc574
.long 0x3f7e9435, 0x3cc5a273
.long 0x3f7ea05f, 0x3cbfa8c4
.long 0x3f7eac2b, 0x3cb9d786
.long 0x3f7eb79a, 0x3cb42ddb
.long 0x3f7ec2b1, 0x3caeaae6
.long 0x3f7ecd71, 0x3ca94dcf
.long 0x3f7ed7dc, 0x3ca415c2
.long 0x3f7ee1f4, 0x3c9f01ec
.long 0x3f7eebbd, 0x3c9a117f
.long 0x3f7ef537, 0x3c9543ae
.long 0x3f7efe66, 0x3c9097b1
.long 0x3f7f074b, 0x3c8c0cc2
.long 0x3f7f0fe8, 0x3c87a21f
.long 0x3f7f1840, 0x3c83570a
.long 0x3f7f2053, 0x3c7e558a
.long 0x3f7f2826, 0x3c763931
.long 0x3f7f2fb8, 0x3c6e579b
.long 0x3f7f370c, 0x3c66af65
.long 0x3f7f3e23, 0x3c5f3f2d
.long 0x3f7f4500, 0x3c58059c
.long 0x3f7f4ba4, 0x3c51015f
.long 0x3f7f5211, 0x3c4a3127
.long 0x3f7f5848, 0x3c4393af
.long 0x3f7f5e4b, 0x3c3d27b5
.long 0x3f7f641b, 0x3c36ebff
.long 0x3f7f69ba, 0x3c30df57
.long 0x3f7f6f29, 0x3c2b008e
.long 0x3f7f746a, 0x3c254e7b
.long 0x3f7f797f, 0x3c1fc7fb
.long 0x3f7f7e67, 0x3c1a6bee
.long 0x3f7f8326, 0x3c15393d
.long 0x3f7f87bb, 0x3c102ed6
.long 0x3f7f8c29, 0x3c0b4bab
.long 0x3f7f9070, 0x3c068eb5
.long 0x3f7f9492, 0x3c01f6f1
.long 0x3f7f9890, 0x3bfb06c5
.long 0x3f7f9c6b, 0x3bf26625
.long 0x3f7fa024, 0x3bea0a1d
.long 0x3f7fa3bc, 0x3be1f0d3
.long 0x3f7fa734, 0x3bda1876
.long 0x3f7faa8d, 0x3bd27f42
.long 0x3f7fadc8, 0x3bcb237a
.long 0x3f7fb0e6, 0x3bc4036c
.long 0x3f7fb3e8, 0x3bbd1d6f
.long 0x3f7fb6cf, 0x3bb66fe6
.long 0x3f7fb99c, 0x3baff93b
.long 0x3f7fbc4f, 0x3ba9b7e1
.long 0x3f7fbeea, 0x3ba3aa56
.long 0x3f7fc16d, 0x3b9dcf20
.long 0x3f7fc3d9, 0x3b9824ce
.long 0x3f7fc62e, 0x3b92a9f7
.long 0x3f7fc86e, 0x3b8d5d3c
.long 0x3f7fca99, 0x3b883d46
.long 0x3f7fccb0, 0x3b8348c6
.long 0x3f7fceb4, 0x3b7cfce8
.long 0x3f7fd0a5, 0x3b73ba24
.long 0x3f7fd283, 0x3b6ac6d3
.long 0x3f7fd450, 0x3b622096
.long 0x3f7fd60c, 0x3b59c51d
.long 0x3f7fd7b7, 0x3b51b22a
.long 0x3f7fd953, 0x3b49e589
.long 0x3f7fdadf, 0x3b425d18
.long 0x3f7fdc5c, 0x3b3b16c2
.long 0x3f7fddcc, 0x3b341080
.long 0x3f7fdf2d, 0x3b2d4858
.long 0x3f7fe081, 0x3b26bc5e
.long 0x3f7fe1c8, 0x3b206ab2
.long 0x3f7fe303, 0x3b1a5183
.long 0x3f7fe431, 0x3b146f09
.long 0x3f7fe554, 0x3b0ec18c
.long 0x3f7fe66c, 0x3b09475d
.long 0x3f7fe77a, 0x3b03feda
.long 0x3f7fe87d, 0x3afdccdc
.long 0x3f7fe975, 0x3af3f919
.long 0x3f7fea65, 0x3aea7f6c
.long 0x3f7feb4b, 0x3ae15ce8
.long 0x3f7fec27, 0x3ad88eb8
.long 0x3f7fecfc, 0x3ad0121b
.long 0x3f7fedc8, 0x3ac7e464
.long 0x3f7fee8c, 0x3ac002f8
.long 0x3f7fef48, 0x3ab86b52
.long 0x3f7feffd, 0x3ab11afe
.long 0x3f7ff0aa, 0x3aaa0f9a
.long 0x3f7ff151, 0x3aa346d7
.long 0x3f7ff1f1, 0x3a9cbe77
.long 0x3f7ff28a, 0x3a96744c
.long 0x3f7ff31e, 0x3a90663b
.long 0x3f7ff3ab, 0x3a8a9237
.long 0x3f7ff433, 0x3a84f643
.long 0x3f7ff4b5, 0x3a7f20e7
.long 0x3f7ff532, 0x3a74bdd2
.long 0x3f7ff5aa, 0x3a6abfa9
.long 0x3f7ff61d, 0x3a6122ea
.long 0x3f7ff68b, 0x3a57e42f
.long 0x3f7ff6f5, 0x3a4f002c
.long 0x3f7ff75a, 0x3a4673af
.long 0x3f7ff7bb, 0x3a3e3ba2
.long 0x3f7ff819, 0x3a365507
.long 0x3f7ff872, 0x3a2ebcf6
.long 0x3f7ff8c7, 0x3a2770a1
.long 0x3f7ff919, 0x3a206d52
.long 0x3f7ff968, 0x3a19b066
.long 0x3f7ff9b3, 0x3a133754
.long 0x3f7ff9fb, 0x3a0cffa3
.long 0x3f7ffa40, 0x3a0706f4
.long 0x3f7ffa82, 0x3a014af8
.long 0x3f7ffac1, 0x39f792ea
.long 0x3f7ffafe, 0x39ed0088
.long 0x3f7ffb38, 0x39e2daa1
.long 0x3f7ffb6f, 0x39d91d2d
.long 0x3f7ffba5, 0x39cfc44a
.long 0x3f7ffbd7, 0x39c6cc35
.long 0x3f7ffc08, 0x39be314d
.long 0x3f7ffc36, 0x39b5f011
.long 0x3f7ffc63, 0x39ae051c
.long 0x3f7ffc8e, 0x39a66d2a
.long 0x3f7ffcb6, 0x399f2512
.long 0x3f7ffcdd, 0x399829c8
.long 0x3f7ffd02, 0x3991785a
.long 0x3f7ffd26, 0x398b0df2
.long 0x3f7ffd48, 0x3984e7d2
.long 0x3f7ffd68, 0x397e06ab
.long 0x3f7ffd87, 0x3972bbde
.long 0x3f7ffda5, 0x3967ea53
.long 0x3f7ffdc1, 0x395d8d4b
.long 0x3f7ffddc, 0x3953a034
.long 0x3f7ffdf6, 0x394a1ea5
.long 0x3f7ffe0f, 0x3941045e
.long 0x3f7ffe27, 0x39384d47
.long 0x3f7ffe3d, 0x392ff56d
.long 0x3f7ffe53, 0x3927f904
.long 0x3f7ffe67, 0x39205461
.long 0x3f7ffe7b, 0x391903fe
.long 0x3f7ffe8d, 0x39120475
.long 0x3f7ffe9f, 0x390b5281
.long 0x3f7ffeb0, 0x3904eafc
.long 0x3f7ffec0, 0x38fd95bd
.long 0x3f7ffed0, 0x38f1de7a
.long 0x3f7ffedf, 0x38e6aa94
.long 0x3f7ffeed, 0x38dbf4a3
.long 0x3f7ffefa, 0x38d1b776
.long 0x3f7fff07, 0x38c7ee0e
.long 0x3f7fff13, 0x38be939c
.long 0x3f7fff1f, 0x38b5a381
.long 0x3f7fff2a, 0x38ad194e
.long 0x3f7fff34, 0x38a4f0bc
.long 0x3f7fff3f, 0x389d25b0
.long 0x3f7fff48, 0x3895b43b
.long 0x3f7fff51, 0x388e9890
.long 0x3f7fff5a, 0x3887cf0e
.long 0x3f7fff62, 0x38815434
.long 0x3f7fff6a, 0x3876494d
.long 0x3f7fff72, 0x386a7a5a
.long 0x3f7fff79, 0x385f355e
.long 0x3f7fff80, 0x38547466
.long 0x3f7fff86, 0x384a31bf
.long 0x3f7fff8c, 0x384067ee
.long 0x3f7fff92, 0x383711b4
.long 0x3f7fff98, 0x382e2a06
.long 0x3f7fff9d, 0x3825ac0e
.long 0x3f7fffa2, 0x381d9329
.long 0x3f7fffa7, 0x3815dae6
.long 0x3f7fffab, 0x380e7f01
.long 0x3f7fffb0, 0x38077b62
.long 0x3f7fffb4, 0x3800cc21
.long 0x3f7fffb8, 0x37f4daf4
.long 0x3f7fffbc, 0x37e8b7ac
.long 0x3f7fffbf, 0x37dd2782
.long 0x3f7fffc2, 0x37d223dc
.long 0x3f7fffc6, 0x37c7a666
.long 0x3f7fffc9, 0x37bda912
.long 0x3f7fffcc, 0x37b42611
.long 0x3f7fffce, 0x37ab17d6
.long 0x3f7fffd1, 0x37a2790f
.long 0x3f7fffd3, 0x379a44a5
.long 0x3f7fffd6, 0x379275b9
.long 0x3f7fffd8, 0x378b07a2
.long 0x3f7fffda, 0x3783f5e9
.long 0x3f7fffdc, 0x377a7897
.long 0x3f7fffde, 0x376dad68
.long 0x3f7fffe0, 0x37618278
.long 0x3f7fffe2, 0x3755f04f
.long 0x3f7fffe3, 0x374aefcc
.long 0x3f7fffe5, 0x37407a1d
.long 0x3f7fffe6, 0x373688bc
.long 0x3f7fffe8, 0x372d1570
.long 0x3f7fffe9, 0x37241a44
.long 0x3f7fffea, 0x371b9188
.long 0x3f7fffeb, 0x371375cf
.long 0x3f7fffec, 0x370bc1e7
.long 0x3f7fffee, 0x370470dd
.long 0x3f7fffef, 0x36fafbec
.long 0x3f7fffef, 0x36edc95b
.long 0x3f7ffff0, 0x36e14167
.long 0x3f7ffff1, 0x36d55bd6
.long 0x3f7ffff2, 0x36ca10ce
.long 0x3f7ffff3, 0x36bf58d1
.long 0x3f7ffff4, 0x36b52cb9
.long 0x3f7ffff4, 0x36ab85b5
.long 0x3f7ffff5, 0x36a25d43
.long 0x3f7ffff5, 0x3699ad31
.long 0x3f7ffff6, 0x36916f95
.long 0x3f7ffff7, 0x36899ecb
.long 0x3f7ffff7, 0x36823575
.long 0x3f7ffff8, 0x36765ce8
.long 0x3f7ffff8, 0x366909cc
.long 0x3f7ffff9, 0x365c684a
.long 0x3f7ffff9, 0x36506f88
.long 0x3f7ffff9, 0x36451713
.long 0x3f7ffffa, 0x363a56e4
.long 0x3f7ffffa, 0x36302754
.long 0x3f7ffffa, 0x36268119
.long 0x3f7ffffb, 0x361d5d43
.long 0x3f7ffffb, 0x3614b538
.long 0x3f7ffffb, 0x360c82b1
.long 0x3f7ffffc, 0x3604bfb1
.long 0x3f7ffffc, 0x35facd10
.long 0x3f7ffffc, 0x35ece39b
.long 0x3f7ffffc, 0x35dfb8b6
.long 0x3f7ffffd, 0x35d34296
.long 0x3f7ffffd, 0x35c777ec
.long 0x3f7ffffd, 0x35bc4fdc
.long 0x3f7ffffd, 0x35b1c1fc
.long 0x3f7ffffd, 0x35a7c64b
.long 0x3f7ffffd, 0x359e5531
.long 0x3f7ffffe, 0x35956771
.long 0x3f7ffffe, 0x358cf630
.long 0x3f7ffffe, 0x3584fae8
.long 0x3f7ffffe, 0x357adecb
.long 0x3f7ffffe, 0x356c9b8f
.long 0x3f7ffffe, 0x355f20ef
.long 0x3f7ffffe, 0x3552644f
.long 0x3f7ffffe, 0x35465b9c
.long 0x3f7fffff, 0x353afd47
.long 0x3f7fffff, 0x3530403c
.long 0x3f7fffff, 0x35261be0
.long 0x3f7fffff, 0x351c8807
.long 0x3f7fffff, 0x35137cf0
.long 0x3f7fffff, 0x350af341
.long 0x3f7fffff, 0x3502e402
.long 0x3f7fffff, 0x34f6912a
.long 0x3f7fffff, 0x34e8356b
.long 0x3f7fffff, 0x34daa8e4
.long 0x3f7fffff, 0x34cde050
.long 0x3f7fffff, 0x34c1d100
.long 0x3f7fffff, 0x34b670d5
.long 0x3f7fffff, 0x34abb639
.long 0x3f7fffff, 0x34a19816
.long 0x3f7fffff, 0x34980dd1
.long 0x3f7fffff, 0x348f0f43
.long 0x3f7fffff, 0x348694b3
.long 0x3f800000, 0x347d2da8
.long 0x3f800000, 0x346e1d72
.align 32
.long 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff /* _AbsMask */
.align 32
.long 0x407b8000, 0x407b8000, 0x407b8000, 0x407b8000, 0x407b8000, 0x407b8000, 0x407b8000, 0x407b8000 /* _MaxThreshold */
.align 32
.long 0x47800000, 0x47800000, 0x47800000, 0x47800000, 0x47800000, 0x47800000, 0x47800000, 0x47800000 /* _SRound */
.align 32
.long 0x2f800000, 0x2f800000, 0x2f800000, 0x2f800000, 0x2f800000, 0x2f800000, 0x2f800000, 0x2f800000 /* _U2THreshold */
.align 32
.long 0xbeaaaade, 0xbeaaaade, 0xbeaaaade, 0xbeaaaade, 0xbeaaaade, 0xbeaaaade, 0xbeaaaade, 0xbeaaaade /* _poly_3_0 */
.align 32
.type __svml_serf_data_internal,@object
.size __svml_serf_data_internal,.-__svml_serf_data_internal

View File

@ -0,0 +1,29 @@
/* Function erf 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_erf)
WRAPPER_IMPL_SSE2 erf
END (_ZGVbN2v_erf)
#ifndef USE_MULTIARCH
libmvec_hidden_def (_ZGVbN2v_erf)
#endif

View File

@ -0,0 +1,29 @@
/* Function erf 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_erf)
WRAPPER_IMPL_AVX _ZGVbN2v_erf
END (_ZGVdN4v_erf)
#ifndef USE_MULTIARCH
libmvec_hidden_def (_ZGVdN4v_erf)
#endif

View File

@ -0,0 +1,25 @@
/* Function erf 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_erf)
WRAPPER_IMPL_AVX _ZGVbN2v_erf
END (_ZGVcN4v_erf)

View File

@ -0,0 +1,25 @@
/* Function erf 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_erf)
WRAPPER_IMPL_AVX512 _ZGVdN4v_erf
END (_ZGVeN8v_erf)

View File

@ -0,0 +1,25 @@
/* Function erff 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_erff)
WRAPPER_IMPL_AVX512 _ZGVdN8v_erff
END (_ZGVeN16v_erff)

View File

@ -0,0 +1,29 @@
/* Function erff 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_erff)
WRAPPER_IMPL_SSE2 erff
END (_ZGVbN4v_erff)
#ifndef USE_MULTIARCH
libmvec_hidden_def (_ZGVbN4v_erff)
#endif

View File

@ -0,0 +1,29 @@
/* Function erff 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_erff)
WRAPPER_IMPL_AVX _ZGVbN4v_erff
END (_ZGVdN8v_erff)
#ifndef USE_MULTIARCH
libmvec_hidden_def (_ZGVdN8v_erff)
#endif

View File

@ -0,0 +1,25 @@
/* Function erff 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_erff)
WRAPPER_IMPL_AVX _ZGVbN4v_erff
END (_ZGVcN8v_erff)

View File

@ -0,0 +1 @@
#include "test-double-libmvec-erf.c"

View File

@ -0,0 +1 @@
#include "test-double-libmvec-erf.c"

View File

@ -0,0 +1 @@
#include "test-double-libmvec-erf.c"

View File

@ -0,0 +1,3 @@
#define LIBMVEC_TYPE double
#define LIBMVEC_FUNC erf
#include "test-vector-abi-arg1.h"

View File

@ -43,6 +43,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVbN2v_log2)
VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVbN2v_log1p)
VECTOR_WRAPPER (WRAPPER_NAME (atanh), _ZGVbN2v_atanh)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVbN2v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (erf), _ZGVbN2v_erf)
#define VEC_INT_TYPE __m128i

View File

@ -46,6 +46,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVdN4v_log2)
VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVdN4v_log1p)
VECTOR_WRAPPER (WRAPPER_NAME (atanh), _ZGVdN4v_atanh)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVdN4v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (erf), _ZGVdN4v_erf)
#ifndef __ILP32__
# define VEC_INT_TYPE __m256i

View File

@ -43,6 +43,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVcN4v_log2)
VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVcN4v_log1p)
VECTOR_WRAPPER (WRAPPER_NAME (atanh), _ZGVcN4v_atanh)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVcN4v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (erf), _ZGVcN4v_erf)
#define VEC_INT_TYPE __m128i

View File

@ -43,6 +43,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVeN8v_log2)
VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVeN8v_log1p)
VECTOR_WRAPPER (WRAPPER_NAME (atanh), _ZGVeN8v_atanh)
VECTOR_WRAPPER (WRAPPER_NAME (acosh), _ZGVeN8v_acosh)
VECTOR_WRAPPER (WRAPPER_NAME (erf), _ZGVeN8v_erf)
#ifndef __ILP32__
# define VEC_INT_TYPE __m512i

View File

@ -0,0 +1 @@
#include "test-float-libmvec-erff.c"

View File

@ -0,0 +1 @@
#include "test-float-libmvec-erff.c"

View File

@ -0,0 +1 @@
#include "test-float-libmvec-erff.c"

View File

@ -0,0 +1,3 @@
#define LIBMVEC_TYPE float
#define LIBMVEC_FUNC erff
#include "test-vector-abi-arg1.h"

View File

@ -43,6 +43,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVeN16v_log2f)
VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVeN16v_log1pf)
VECTOR_WRAPPER (WRAPPER_NAME (atanhf), _ZGVeN16v_atanhf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVeN16v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (erff), _ZGVeN16v_erff)
#define VEC_INT_TYPE __m512i

View File

@ -43,6 +43,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVbN4v_log2f)
VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVbN4v_log1pf)
VECTOR_WRAPPER (WRAPPER_NAME (atanhf), _ZGVbN4v_atanhf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVbN4v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (erff), _ZGVbN4v_erff)
#define VEC_INT_TYPE __m128i

View File

@ -46,6 +46,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVdN8v_log2f)
VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVdN8v_log1pf)
VECTOR_WRAPPER (WRAPPER_NAME (atanhf), _ZGVdN8v_atanhf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVdN8v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (erff), _ZGVdN8v_erff)
/* Redefinition of wrapper to be compatible with _ZGVdN8vvv_sincosf. */
#undef VECTOR_WRAPPER_fFF

View File

@ -43,6 +43,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVcN8v_log2f)
VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVcN8v_log1pf)
VECTOR_WRAPPER (WRAPPER_NAME (atanhf), _ZGVcN8v_atanhf)
VECTOR_WRAPPER (WRAPPER_NAME (acoshf), _ZGVcN8v_acoshf)
VECTOR_WRAPPER (WRAPPER_NAME (erff), _ZGVcN8v_erff)
#define VEC_INT_TYPE __m128i