From patchwork Thu Dec 9 05:04:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Pandey X-Patchwork-Id: 48688 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4042D3858434 for ; Thu, 9 Dec 2021 05:50:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4042D3858434 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1639029006; bh=RWKSDelnxVFfxTsR/yAN30EPYxj/RTFQdTWJ/JLlUEw=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=ET8csizafMtMaTb/5254m6FHPFMQDVBu/6si5G++IQHrxEVZSjbhIq6AiYGHXoBqh SL00jAyj4bQwMJozn1X2NVSkYQnBr6b4jdJjuBS4+kpPDsd9M7OOzdxEzPAysdHPv7 39YDp6ofYxooyxqxU0XvghtIRQdXh4CxgiBOnc1I= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by sourceware.org (Postfix) with ESMTPS id 96BEF3858430 for ; Thu, 9 Dec 2021 05:05:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 96BEF3858430 X-IronPort-AV: E=McAfee;i="6200,9189,10192"; a="224885885" X-IronPort-AV: E=Sophos;i="5.88,191,1635231600"; d="scan'208";a="224885885" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Dec 2021 21:05:16 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,191,1635231600"; d="scan'208";a="658641231" Received: from scymds01.sc.intel.com ([10.148.94.138]) by fmsmga001.fm.intel.com with ESMTP; 08 Dec 2021 21:05:15 -0800 Received: from gskx-1.sc.intel.com (gskx-1.sc.intel.com [172.25.149.211]) by scymds01.sc.intel.com with ESMTP id 1B9558Y3031636; Wed, 8 Dec 2021 21:05:15 -0800 To: libc-alpha@sourceware.org Subject: [PATCH v2 31/42] x86-64: Add vector log10/log10f implementation to libmvec Date: Wed, 8 Dec 2021 21:04:57 -0800 Message-Id: <20211209050508.2614536-32-skpgkp2@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209050508.2614536-1-skpgkp2@gmail.com> References: <20211209050508.2614536-1-skpgkp2@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-6.0 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, FORGED_GMAIL_RCVD, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, GIT_PATCH_0, HK_RANDOM_ENVFROM, HK_RANDOM_FROM, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_SHORT, KAM_STOCKGEN, LOTS_OF_MONEY, NML_ADSP_CUSTOM_MED, SPF_HELO_NONE, SPF_SOFTFAIL, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Sunil K Pandey via Libc-alpha From: Sunil Pandey Reply-To: Sunil K Pandey Cc: andrey.kolesov@intel.com Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Implement vectorized log10/log10f containing SSE, AVX, AVX2 and AVX512 versions for libmvec as per vector ABI. It also contains accuracy and ABI tests for vector log10/log10f with regenerated ulps. --- bits/libm-simd-decl-stubs.h | 11 + math/bits/mathcalls.h | 2 +- .../unix/sysv/linux/x86_64/libmvec.abilist | 8 + sysdeps/x86/fpu/bits/math-vector.h | 4 + .../x86/fpu/finclude/math-vector-fortran.h | 4 + sysdeps/x86_64/fpu/Makeconfig | 1 + sysdeps/x86_64/fpu/Versions | 2 + sysdeps/x86_64/fpu/libm-test-ulps | 20 + .../fpu/multiarch/svml_d_log102_core-sse2.S | 20 + .../x86_64/fpu/multiarch/svml_d_log102_core.c | 27 + .../fpu/multiarch/svml_d_log102_core_sse4.S | 3958 +++++++++++++++++ .../fpu/multiarch/svml_d_log104_core-sse.S | 20 + .../x86_64/fpu/multiarch/svml_d_log104_core.c | 27 + .../fpu/multiarch/svml_d_log104_core_avx2.S | 3782 ++++++++++++++++ .../fpu/multiarch/svml_d_log108_core-avx2.S | 20 + .../x86_64/fpu/multiarch/svml_d_log108_core.c | 27 + .../fpu/multiarch/svml_d_log108_core_avx512.S | 1082 +++++ .../fpu/multiarch/svml_s_log10f16_core-avx2.S | 20 + .../fpu/multiarch/svml_s_log10f16_core.c | 28 + .../multiarch/svml_s_log10f16_core_avx512.S | 727 +++ .../fpu/multiarch/svml_s_log10f4_core-sse2.S | 20 + .../fpu/multiarch/svml_s_log10f4_core.c | 28 + .../fpu/multiarch/svml_s_log10f4_core_sse4.S | 1968 ++++++++ .../fpu/multiarch/svml_s_log10f8_core-sse.S | 20 + .../fpu/multiarch/svml_s_log10f8_core.c | 28 + .../fpu/multiarch/svml_s_log10f8_core_avx2.S | 1861 ++++++++ sysdeps/x86_64/fpu/svml_d_log102_core.S | 29 + sysdeps/x86_64/fpu/svml_d_log104_core.S | 29 + sysdeps/x86_64/fpu/svml_d_log104_core_avx.S | 25 + sysdeps/x86_64/fpu/svml_d_log108_core.S | 25 + sysdeps/x86_64/fpu/svml_s_log10f16_core.S | 25 + sysdeps/x86_64/fpu/svml_s_log10f4_core.S | 29 + sysdeps/x86_64/fpu/svml_s_log10f8_core.S | 29 + sysdeps/x86_64/fpu/svml_s_log10f8_core_avx.S | 25 + .../fpu/test-double-libmvec-log10-avx.c | 1 + .../fpu/test-double-libmvec-log10-avx2.c | 1 + .../fpu/test-double-libmvec-log10-avx512f.c | 1 + .../x86_64/fpu/test-double-libmvec-log10.c | 3 + .../x86_64/fpu/test-double-vlen2-wrappers.c | 1 + .../fpu/test-double-vlen4-avx2-wrappers.c | 1 + .../x86_64/fpu/test-double-vlen4-wrappers.c | 1 + .../x86_64/fpu/test-double-vlen8-wrappers.c | 1 + .../fpu/test-float-libmvec-log10f-avx.c | 1 + .../fpu/test-float-libmvec-log10f-avx2.c | 1 + .../fpu/test-float-libmvec-log10f-avx512f.c | 1 + .../x86_64/fpu/test-float-libmvec-log10f.c | 3 + .../x86_64/fpu/test-float-vlen16-wrappers.c | 1 + .../x86_64/fpu/test-float-vlen4-wrappers.c | 1 + .../fpu/test-float-vlen8-avx2-wrappers.c | 1 + .../x86_64/fpu/test-float-vlen8-wrappers.c | 1 + 50 files changed, 13950 insertions(+), 1 deletion(-) create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log102_core-sse2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log102_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log102_core_sse4.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log104_core-sse.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log104_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log104_core_avx2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log108_core-avx2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log108_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log108_core_avx512.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core-avx2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core_avx512.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core-sse2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core_sse4.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core-sse.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core_avx2.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log102_core.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log104_core.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log104_core_avx.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log108_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log10f16_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log10f4_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log10f8_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log10f8_core_avx.S create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log10-avx.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log10-avx2.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log10-avx512f.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log10.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx2.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx512f.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log10f.c diff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h index 4e08de9936..005b578162 100644 --- a/bits/libm-simd-decl-stubs.h +++ b/bits/libm-simd-decl-stubs.h @@ -263,4 +263,15 @@ #define __DECL_SIMD_hypotf32x #define __DECL_SIMD_hypotf64x #define __DECL_SIMD_hypotf128x + +#define __DECL_SIMD_log10 +#define __DECL_SIMD_log10f +#define __DECL_SIMD_log10l +#define __DECL_SIMD_log10f16 +#define __DECL_SIMD_log10f32 +#define __DECL_SIMD_log10f64 +#define __DECL_SIMD_log10f128 +#define __DECL_SIMD_log10f32x +#define __DECL_SIMD_log10f64x +#define __DECL_SIMD_log10f128x #endif diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index 32f487c109..7abbb2c116 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -104,7 +104,7 @@ __MATHCALL (ldexp,, (_Mdouble_ __x, int __exponent)); __MATHCALL_VEC (log,, (_Mdouble_ __x)); /* Base-ten logarithm of X. */ -__MATHCALL (log10,, (_Mdouble_ __x)); +__MATHCALL_VEC (log10,, (_Mdouble_ __x)); /* Break VALUE into integral and fractional parts. */ __MATHCALL (modf,, (_Mdouble_ __x, _Mdouble_ *__iptr)) __nonnull ((2)); diff --git a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist index 4fbc8629a1..7c2c633d77 100644 --- a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist @@ -59,6 +59,7 @@ GLIBC_2.35 _ZGVbN2v_erfc F GLIBC_2.35 _ZGVbN2v_exp10 F GLIBC_2.35 _ZGVbN2v_exp2 F GLIBC_2.35 _ZGVbN2v_expm1 F +GLIBC_2.35 _ZGVbN2v_log10 F GLIBC_2.35 _ZGVbN2vv_atan2 F GLIBC_2.35 _ZGVbN2vv_hypot F GLIBC_2.35 _ZGVbN4v_acosf F @@ -74,6 +75,7 @@ GLIBC_2.35 _ZGVbN4v_erff F GLIBC_2.35 _ZGVbN4v_exp10f F GLIBC_2.35 _ZGVbN4v_exp2f F GLIBC_2.35 _ZGVbN4v_expm1f F +GLIBC_2.35 _ZGVbN4v_log10f F GLIBC_2.35 _ZGVbN4vv_atan2f F GLIBC_2.35 _ZGVbN4vv_hypotf F GLIBC_2.35 _ZGVcN4v_acos F @@ -89,6 +91,7 @@ GLIBC_2.35 _ZGVcN4v_erfc F GLIBC_2.35 _ZGVcN4v_exp10 F GLIBC_2.35 _ZGVcN4v_exp2 F GLIBC_2.35 _ZGVcN4v_expm1 F +GLIBC_2.35 _ZGVcN4v_log10 F GLIBC_2.35 _ZGVcN4vv_atan2 F GLIBC_2.35 _ZGVcN4vv_hypot F GLIBC_2.35 _ZGVcN8v_acosf F @@ -104,6 +107,7 @@ GLIBC_2.35 _ZGVcN8v_erff F GLIBC_2.35 _ZGVcN8v_exp10f F GLIBC_2.35 _ZGVcN8v_exp2f F GLIBC_2.35 _ZGVcN8v_expm1f F +GLIBC_2.35 _ZGVcN8v_log10f F GLIBC_2.35 _ZGVcN8vv_atan2f F GLIBC_2.35 _ZGVcN8vv_hypotf F GLIBC_2.35 _ZGVdN4v_acos F @@ -119,6 +123,7 @@ GLIBC_2.35 _ZGVdN4v_erfc F GLIBC_2.35 _ZGVdN4v_exp10 F GLIBC_2.35 _ZGVdN4v_exp2 F GLIBC_2.35 _ZGVdN4v_expm1 F +GLIBC_2.35 _ZGVdN4v_log10 F GLIBC_2.35 _ZGVdN4vv_atan2 F GLIBC_2.35 _ZGVdN4vv_hypot F GLIBC_2.35 _ZGVdN8v_acosf F @@ -134,6 +139,7 @@ GLIBC_2.35 _ZGVdN8v_erff F GLIBC_2.35 _ZGVdN8v_exp10f F GLIBC_2.35 _ZGVdN8v_exp2f F GLIBC_2.35 _ZGVdN8v_expm1f F +GLIBC_2.35 _ZGVdN8v_log10f F GLIBC_2.35 _ZGVdN8vv_atan2f F GLIBC_2.35 _ZGVdN8vv_hypotf F GLIBC_2.35 _ZGVeN16v_acosf F @@ -149,6 +155,7 @@ GLIBC_2.35 _ZGVeN16v_erff F GLIBC_2.35 _ZGVeN16v_exp10f F GLIBC_2.35 _ZGVeN16v_exp2f F GLIBC_2.35 _ZGVeN16v_expm1f F +GLIBC_2.35 _ZGVeN16v_log10f F GLIBC_2.35 _ZGVeN16vv_atan2f F GLIBC_2.35 _ZGVeN16vv_hypotf F GLIBC_2.35 _ZGVeN8v_acos F @@ -164,5 +171,6 @@ GLIBC_2.35 _ZGVeN8v_erfc F GLIBC_2.35 _ZGVeN8v_exp10 F GLIBC_2.35 _ZGVeN8v_exp2 F GLIBC_2.35 _ZGVeN8v_expm1 F +GLIBC_2.35 _ZGVeN8v_log10 F GLIBC_2.35 _ZGVeN8vv_atan2 F GLIBC_2.35 _ZGVeN8vv_hypot F diff --git a/sysdeps/x86/fpu/bits/math-vector.h b/sysdeps/x86/fpu/bits/math-vector.h index 0f43244b3f..8fb29e5869 100644 --- a/sysdeps/x86/fpu/bits/math-vector.h +++ b/sysdeps/x86/fpu/bits/math-vector.h @@ -118,6 +118,10 @@ # define __DECL_SIMD_hypot __DECL_SIMD_x86_64 # undef __DECL_SIMD_hypotf # define __DECL_SIMD_hypotf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_log10 +# define __DECL_SIMD_log10 __DECL_SIMD_x86_64 +# undef __DECL_SIMD_log10f +# define __DECL_SIMD_log10f __DECL_SIMD_x86_64 # endif #endif diff --git a/sysdeps/x86/fpu/finclude/math-vector-fortran.h b/sysdeps/x86/fpu/finclude/math-vector-fortran.h index 42f4adbd06..de11e0c929 100644 --- a/sysdeps/x86/fpu/finclude/math-vector-fortran.h +++ b/sysdeps/x86/fpu/finclude/math-vector-fortran.h @@ -58,6 +58,8 @@ !GCC$ builtin (expm1f) attributes simd (notinbranch) if('x86_64') !GCC$ builtin (hypot) attributes simd (notinbranch) if('x86_64') !GCC$ builtin (hypotf) attributes simd (notinbranch) if('x86_64') +!GCC$ builtin (log10) attributes simd (notinbranch) if('x86_64') +!GCC$ builtin (log10f) attributes simd (notinbranch) if('x86_64') !GCC$ builtin (cos) attributes simd (notinbranch) if('x32') !GCC$ builtin (cosf) attributes simd (notinbranch) if('x32') @@ -101,3 +103,5 @@ !GCC$ builtin (expm1f) attributes simd (notinbranch) if('x32') !GCC$ builtin (hypot) attributes simd (notinbranch) if('x32') !GCC$ builtin (hypotf) attributes simd (notinbranch) if('x32') +!GCC$ builtin (log10) attributes simd (notinbranch) if('x32') +!GCC$ builtin (log10f) attributes simd (notinbranch) if('x32') diff --git a/sysdeps/x86_64/fpu/Makeconfig b/sysdeps/x86_64/fpu/Makeconfig index c8040e39d1..c67a1a17b8 100644 --- a/sysdeps/x86_64/fpu/Makeconfig +++ b/sysdeps/x86_64/fpu/Makeconfig @@ -40,6 +40,7 @@ libmvec-funcs = \ expm1 \ hypot \ log \ + log10 \ pow \ sin \ sincos \ diff --git a/sysdeps/x86_64/fpu/Versions b/sysdeps/x86_64/fpu/Versions index 6beaa3bf8b..563781cc04 100644 --- a/sysdeps/x86_64/fpu/Versions +++ b/sysdeps/x86_64/fpu/Versions @@ -27,6 +27,7 @@ libmvec { _ZGVbN2v_exp10; _ZGVcN4v_exp10; _ZGVdN4v_exp10; _ZGVeN8v_exp10; _ZGVbN2v_exp2; _ZGVcN4v_exp2; _ZGVdN4v_exp2; _ZGVeN8v_exp2; _ZGVbN2v_expm1; _ZGVcN4v_expm1; _ZGVdN4v_expm1; _ZGVeN8v_expm1; + _ZGVbN2v_log10; _ZGVcN4v_log10; _ZGVdN4v_log10; _ZGVeN8v_log10; _ZGVbN2vv_atan2; _ZGVcN4vv_atan2; _ZGVdN4vv_atan2; _ZGVeN8vv_atan2; _ZGVbN2vv_hypot; _ZGVcN4vv_hypot; _ZGVdN4vv_hypot; _ZGVeN8vv_hypot; _ZGVbN4v_acosf; _ZGVcN8v_acosf; _ZGVdN8v_acosf; _ZGVeN16v_acosf; @@ -42,6 +43,7 @@ libmvec { _ZGVbN4v_exp10f; _ZGVcN8v_exp10f; _ZGVdN8v_exp10f; _ZGVeN16v_exp10f; _ZGVbN4v_exp2f; _ZGVcN8v_exp2f; _ZGVdN8v_exp2f; _ZGVeN16v_exp2f; _ZGVbN4v_expm1f; _ZGVcN8v_expm1f; _ZGVdN8v_expm1f; _ZGVeN16v_expm1f; + _ZGVbN4v_log10f; _ZGVcN8v_log10f; _ZGVdN8v_log10f; _ZGVeN16v_log10f; _ZGVbN4vv_atan2f; _ZGVcN8vv_atan2f; _ZGVdN8vv_atan2f; _ZGVeN16vv_atan2f; _ZGVbN4vv_hypotf; _ZGVcN8vv_hypotf; _ZGVdN8vv_hypotf; _ZGVeN16vv_hypotf; } diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index 577ffd239a..764311972a 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -1738,6 +1738,26 @@ float: 2 float128: 1 ldouble: 1 +Function: "log10_vlen16": +float: 1 + +Function: "log10_vlen2": +double: 1 + +Function: "log10_vlen4": +double: 1 +float: 1 + +Function: "log10_vlen4_avx2": +double: 1 + +Function: "log10_vlen8": +double: 1 +float: 1 + +Function: "log10_vlen8_avx2": +float: 1 + Function: "log1p": double: 1 float: 1 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core-sse2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core-sse2.S new file mode 100644 index 0000000000..e654db6d6c --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core-sse2.S @@ -0,0 +1,20 @@ +/* SSE2 version of vectorized log10, 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 + . */ + +#define _ZGVbN2v_log10 _ZGVbN2v_log10_sse2 +#include "../svml_d_log102_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core.c new file mode 100644 index 0000000000..1c775f33b6 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core.c @@ -0,0 +1,27 @@ +/* Multiple versions of vectorized log10, 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 + . */ + +#define SYMBOL_NAME _ZGVbN2v_log10 +#include "ifunc-mathvec-sse4_1.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVbN2v_log10, __GI__ZGVbN2v_log10, __redirect__ZGVbN2v_log10) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core_sse4.S new file mode 100644 index 0000000000..049ccfcaa1 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log102_core_sse4.S @@ -0,0 +1,3958 @@ +/* Function log10 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: + * + * Get short reciprocal approximation Rcp ~ 1/mantissa(x) + * R = Rcp*x - 1.0 + * log10(x) = k*log10(2.0) - log10(Rcp) + poly_approximation(R) + * log10(Rcp) is tabulated + * + * + */ + +#include + + .text + .section .text.sse4,"ax",@progbits +ENTRY(_ZGVbN2v_log10_sse4) + pushq %rbp + cfi_def_cfa_offset(16) + movq %rsp, %rbp + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + andq $-64, %rsp + subq $320, %rsp + movaps %xmm0, %xmm6 + +/* preserve mantissa, set input exponent to 2^(-10) */ + movups 8576+__svml_dlog10_data_internal(%rip), %xmm5 + +/* check range */ + movaps %xmm6, %xmm3 + andps %xmm6, %xmm5 + movaps %xmm6, %xmm2 + orps 8640+__svml_dlog10_data_internal(%rip), %xmm5 + lea -4222912+__svml_dlog10_data_internal(%rip), %r8 + +/* reciprocal approximation good to at least 11 bits */ + cvtpd2ps %xmm5, %xmm7 + cmpltpd 8704+__svml_dlog10_data_internal(%rip), %xmm3 + cmpnlepd 8768+__svml_dlog10_data_internal(%rip), %xmm2 + movlhps %xmm7, %xmm7 + orps %xmm2, %xmm3 + rcpps %xmm7, %xmm0 + +/* combine and get argument value range mask */ + movmskpd %xmm3, %edx + +/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ + movups .FLT_16(%rip), %xmm1 + +/* argument reduction */ + movups 8832+__svml_dlog10_data_internal(%rip), %xmm2 + cvtps2pd %xmm0, %xmm4 + addpd %xmm1, %xmm4 + subpd %xmm1, %xmm4 + andps %xmm5, %xmm2 + +/* exponent bits */ + movaps %xmm6, %xmm0 + subpd %xmm2, %xmm5 + mulpd %xmm4, %xmm2 + mulpd %xmm4, %xmm5 + subpd 8960+__svml_dlog10_data_internal(%rip), %xmm2 + addpd %xmm2, %xmm5 + psrlq $20, %xmm0 + +/* + * prepare table index + * table lookup + */ + movaps %xmm4, %xmm3 + pshufd $221, %xmm0, %xmm7 + psrlq $40, %xmm3 + +/* biased exponent in DP format */ + cvtdq2pd %xmm7, %xmm0 + movd %xmm3, %eax + +/* exponent*log(2.0) */ + movups 9152+__svml_dlog10_data_internal(%rip), %xmm7 + cmpltpd %xmm4, %xmm7 + +/* polynomial */ + movups 8448+__svml_dlog10_data_internal(%rip), %xmm4 + mulpd %xmm5, %xmm4 + pshufd $2, %xmm3, %xmm2 + movaps %xmm5, %xmm3 + mulpd %xmm5, %xmm3 + movd %xmm2, %ecx + movups 8480+__svml_dlog10_data_internal(%rip), %xmm2 + andps 9216+__svml_dlog10_data_internal(%rip), %xmm7 + addpd 8464+__svml_dlog10_data_internal(%rip), %xmm4 + mulpd %xmm5, %xmm2 + mulpd %xmm3, %xmm4 + addpd 8496+__svml_dlog10_data_internal(%rip), %xmm2 + addpd %xmm4, %xmm2 + orps 9280+__svml_dlog10_data_internal(%rip), %xmm7 + subpd %xmm7, %xmm0 + mulpd %xmm2, %xmm3 + mulpd 9344+__svml_dlog10_data_internal(%rip), %xmm0 + movups 8512+__svml_dlog10_data_internal(%rip), %xmm7 + mulpd %xmm5, %xmm7 + movslq %eax, %rax + addpd %xmm3, %xmm7 + movslq %ecx, %rcx + movsd (%r8,%rax), %xmm1 + movhpd (%r8,%rcx), %xmm1 + +/* reconstruction */ + addpd %xmm7, %xmm1 + addpd %xmm1, %xmm0 + testl %edx, %edx + jne L(2) + +L(1): + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +L(2): + movups %xmm6, 192(%rsp) + movups %xmm0, 256(%rsp) + xorl %eax, %eax + movups %xmm8, 112(%rsp) + movups %xmm9, 96(%rsp) + movups %xmm10, 80(%rsp) + movups %xmm11, 64(%rsp) + movups %xmm12, 48(%rsp) + movups %xmm13, 32(%rsp) + movups %xmm14, 16(%rsp) + movups %xmm15, (%rsp) + movq %rsi, 136(%rsp) + movq %rdi, 128(%rsp) + movq %r12, 152(%rsp) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x19, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x30, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1a, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1b, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x10, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x00, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1e, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1f, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x20, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xfe, 0xff, 0xff, 0x22 + movl %eax, %r12d + movq %r13, 144(%rsp) + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + movl %edx, %r13d + +L(3): + btl %r12d, %r13d + jc L(5) + +L(4): + incl %r12d + cmpl $2, %r12d + jl L(3) + movups 112(%rsp), %xmm8 + cfi_restore(25) + movups 96(%rsp), %xmm9 + cfi_restore(26) + movups 80(%rsp), %xmm10 + cfi_restore(27) + movups 64(%rsp), %xmm11 + cfi_restore(28) + movups 48(%rsp), %xmm12 + cfi_restore(29) + movups 32(%rsp), %xmm13 + cfi_restore(30) + movups 16(%rsp), %xmm14 + cfi_restore(31) + movups (%rsp), %xmm15 + cfi_restore(32) + movq 136(%rsp), %rsi + cfi_restore(4) + movq 128(%rsp), %rdi + cfi_restore(5) + movq 152(%rsp), %r12 + cfi_restore(12) + movq 144(%rsp), %r13 + cfi_restore(13) + movups 256(%rsp), %xmm0 + jmp L(1) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x19, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x30, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1a, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1b, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x10, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x00, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1e, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1f, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x20, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xfe, 0xff, 0xff, 0x22 + +L(5): + lea 192(%rsp,%r12,8), %rdi + lea 256(%rsp,%r12,8), %rsi + call __svml_dlog10_cout_rare_internal + jmp L(4) + +END(_ZGVbN2v_log10_sse4) + + .align 16,0x90 + +__svml_dlog10_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 6(%rdi), %edx + andl $32752, %edx + cmpl $32752, %edx + je L(11) + movsd (%rdi), %xmm2 + xorl %ecx, %ecx + movsd %xmm2, -8(%rsp) + movzwl -2(%rsp), %edx + testl $32752, %edx + jne L(6) + movsd 1600+__dlog10_la_CoutTab(%rip), %xmm0 + movl $-60, %ecx + mulsd %xmm0, %xmm2 + movsd %xmm2, -8(%rsp) + +L(6): + movsd 1608+__dlog10_la_CoutTab(%rip), %xmm0 + comisd %xmm0, %xmm2 + jbe L(8) + movaps %xmm2, %xmm1 + subsd .FLT_90(%rip), %xmm1 + movsd %xmm1, -16(%rsp) + andb $127, -9(%rsp) + movsd -16(%rsp), %xmm0 + comisd 1592+__dlog10_la_CoutTab(%rip), %xmm0 + jbe L(7) + movsd %xmm2, -16(%rsp) + pxor %xmm7, %xmm7 + movzwl -10(%rsp), %edi + lea __dlog10_la_CoutTab(%rip), %r10 + andl $-32753, %edi + addl $16368, %edi + movw %di, -10(%rsp) + movsd -16(%rsp), %xmm3 + movaps %xmm3, %xmm1 + movaps %xmm3, %xmm2 + movsd 1688+__dlog10_la_CoutTab(%rip), %xmm5 + movzwl -2(%rsp), %edx + andl $32752, %edx + addsd 1576+__dlog10_la_CoutTab(%rip), %xmm1 + addsd 1584+__dlog10_la_CoutTab(%rip), %xmm2 + movsd %xmm1, -24(%rsp) + movl -24(%rsp), %r8d + movsd %xmm2, -24(%rsp) + andl $127, %r8d + movsd -24(%rsp), %xmm8 + movsd 1560+__dlog10_la_CoutTab(%rip), %xmm9 + movsd 1568+__dlog10_la_CoutTab(%rip), %xmm0 + shrl $4, %edx + subsd 1584+__dlog10_la_CoutTab(%rip), %xmm8 + lea (%r8,%r8,2), %r9d + movsd (%r10,%r9,8), %xmm6 + lea -1023(%rcx,%rdx), %ecx + cvtsi2sd %ecx, %xmm7 + subsd %xmm8, %xmm3 + mulsd %xmm6, %xmm8 + mulsd %xmm7, %xmm9 + subsd 1624+__dlog10_la_CoutTab(%rip), %xmm8 + mulsd %xmm3, %xmm6 + mulsd %xmm0, %xmm7 + addsd 8(%r10,%r9,8), %xmm9 + addsd 16(%r10,%r9,8), %xmm7 + addsd %xmm8, %xmm9 + movaps %xmm8, %xmm4 + addsd %xmm6, %xmm4 + mulsd %xmm4, %xmm5 + addsd 1680+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1672+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1664+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1656+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1648+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1640+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1632+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm5, %xmm8 + mulsd %xmm6, %xmm5 + addsd %xmm5, %xmm7 + addsd %xmm6, %xmm7 + addsd %xmm7, %xmm8 + addsd %xmm8, %xmm9 + movsd %xmm9, (%rsi) + ret + +L(7): + movsd 1624+__dlog10_la_CoutTab(%rip), %xmm0 + mulsd %xmm0, %xmm1 + movsd 1688+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1680+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1672+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1664+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1656+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1648+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1640+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1632+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd %xmm1, %xmm2 + movsd %xmm2, (%rsi) + ret + +L(8): + ucomisd %xmm0, %xmm2 + jp L(9) + je L(10) + +L(9): + divsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + movl $1, %eax + ret + +L(10): + movsd 1616+__dlog10_la_CoutTab(%rip), %xmm1 + movl $2, %eax + xorps .FLT_89(%rip), %xmm1 + divsd %xmm0, %xmm1 + movsd %xmm1, (%rsi) + ret + +L(11): + movb 7(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je L(13) + +L(12): + movsd (%rdi), %xmm0 + mulsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + ret + +L(13): + testl $1048575, 4(%rdi) + jne L(12) + cmpl $0, (%rdi) + jne L(12) + movsd 1608+__dlog10_la_CoutTab(%rip), %xmm0 + movl $1, %eax + divsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + ret + + cfi_endproc + + .type __svml_dlog10_cout_rare_internal,@function + .size __svml_dlog10_cout_rare_internal,.-__svml_dlog10_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_dlog10_data_internal: + .long 1190572160 + .long 3228777073 + .long 3860447744 + .long 3189665916 + .long 1198987632 + .long 3228777077 + .long 3228397393 + .long 3189668294 + .long 1168821104 + .long 3228777081 + .long 637194908 + .long 3189668066 + .long 1100245360 + .long 3228777085 + .long 133785915 + .long 3189667542 + .long 993432048 + .long 3228777089 + .long 3017828443 + .long 3189667588 + .long 848551680 + .long 3228777093 + .long 560605178 + .long 3189668289 + .long 665773664 + .long 3228777097 + .long 3849538177 + .long 3189667548 + .long 445266208 + .long 3228777101 + .long 3804908986 + .long 3189667886 + .long 187196464 + .long 3228777105 + .long 3516966431 + .long 3189667858 + .long 4186697744 + .long 3228777108 + .long 3052190817 + .long 3189667809 + .long 3854000384 + .long 3228777112 + .long 1554781574 + .long 3189667427 + .long 3484235504 + .long 3228777116 + .long 4153839410 + .long 3189667384 + .long 3077565856 + .long 3228777120 + .long 4000768869 + .long 3189667904 + .long 2634153136 + .long 3228777124 + .long 4244738174 + .long 3189668339 + .long 2154157984 + .long 3228777128 + .long 3014247306 + .long 3189667771 + .long 1637739952 + .long 3228777132 + .long 1906045981 + .long 3189667650 + .long 1085057568 + .long 3228777136 + .long 3987700171 + .long 3189668284 + .long 496268368 + .long 3228777140 + .long 1674280096 + .long 3189667373 + .long 4166496080 + .long 3228777143 + .long 2078815235 + .long 3189667744 + .long 3505961600 + .long 3228777147 + .long 4286802640 + .long 3189667683 + .long 2809786672 + .long 3228777151 + .long 1913564473 + .long 3189667639 + .long 2078124752 + .long 3228777155 + .long 2693682663 + .long 3189667702 + .long 1311128304 + .long 3228777159 + .long 1012063542 + .long 3189668158 + .long 508948832 + .long 3228777163 + .long 2489929809 + .long 3189667978 + .long 3966704144 + .long 3228777166 + .long 2165614611 + .long 3189667408 + .long 3094609184 + .long 3228777170 + .long 2488783422 + .long 3189667472 + .long 2187779856 + .long 3228777174 + .long 2723126436 + .long 3189667428 + .long 1246363792 + .long 3228777178 + .long 3017034520 + .long 3189668359 + .long 270507744 + .long 3228777182 + .long 1972662349 + .long 3189667544 + .long 3555324736 + .long 3228777185 + .long 898998658 + .long 3189668182 + .long 2511025072 + .long 3228777189 + .long 2160314027 + .long 3189667608 + .long 1432719952 + .long 3228777193 + .long 1911887828 + .long 3189668033 + .long 320552432 + .long 3228777197 + .long 3280422502 + .long 3189667818 + .long 3469631920 + .long 3228777200 + .long 3027884278 + .long 3189668109 + .long 2290165072 + .long 3228777204 + .long 3517602960 + .long 3189668197 + .long 1077259536 + .long 3228777208 + .long 3013130823 + .long 3189668046 + .long 4126022080 + .long 3228777211 + .long 3235689898 + .long 3189667740 + .long 2846656704 + .long 3228777215 + .long 87643117 + .long 3189667953 + .long 1534268448 + .long 3228777219 + .long 754951962 + .long 3189668360 + .long 188994208 + .long 3228777223 + .long 3023581101 + .long 3189668100 + .long 3105937296 + .long 3228777226 + .long 1490072819 + .long 3189668276 + .long 1695298320 + .long 3228777230 + .long 3738440902 + .long 3189668304 + .long 252178944 + .long 3228777234 + .long 897194307 + .long 3189667388 + .long 3071679952 + .long 3228777237 + .long 195484330 + .long 3189668024 + .long 1563999488 + .long 3228777241 + .long 3795554301 + .long 3189668248 + .long 24236736 + .long 3228777245 + .long 2858806924 + .long 3189668212 + .long 2747490080 + .long 3228777248 + .long 4259795627 + .long 3189667532 + .long 1143955184 + .long 3228777252 + .long 4279885499 + .long 3189667764 + .long 3803696144 + .long 3228777255 + .long 3997664578 + .long 3189667698 + .long 2136907056 + .long 3228777259 + .long 2176158532 + .long 3189667869 + .long 438683136 + .long 3228777263 + .long 227964261 + .long 3189667893 + .long 3004118816 + .long 3228777266 + .long 2296676690 + .long 3189667896 + .long 1243405872 + .long 3228777270 + .long 2079834385 + .long 3189667894 + .long 3746604496 + .long 3228777273 + .long 3850151037 + .long 3189668185 + .long 1923904960 + .long 3228777277 + .long 574763554 + .long 3189667699 + .long 70398640 + .long 3228777281 + .long 3827982506 + .long 3189667452 + .long 2481176176 + .long 3228777284 + .long 1146808857 + .long 3189667869 + .long 566425600 + .long 3228777288 + .long 4238446104 + .long 3189668130 + .long 2916203392 + .long 3228777291 + .long 3553887815 + .long 3189667582 + .long 940696080 + .long 3228777295 + .long 1221192380 + .long 3189668153 + .long 3229958720 + .long 3228777298 + .long 2271570828 + .long 3189667556 + .long 1194176400 + .long 3228777302 + .long 3002536483 + .long 3189667850 + .long 3423402736 + .long 3228777305 + .long 2434838684 + .long 3189667608 + .long 1327821424 + .long 3228777309 + .long 2687777298 + .long 3189667396 + .long 3497484640 + .long 3228777312 + .long 2749657917 + .long 3189668082 + .long 1342574720 + .long 3228777316 + .long 3002546917 + .long 3189668115 + .long 3453142464 + .long 3228777319 + .long 3498283957 + .long 3189667970 + .long 1239368816 + .long 3228777323 + .long 455121273 + .long 3189667422 + .long 3291303200 + .long 3228777326 + .long 2621841620 + .long 3189667932 + .long 3012883008 + .long 3228777333 + .long 2362501462 + .long 3189667975 + .long 2618787376 + .long 3228777340 + .long 1091754251 + .long 3189667994 + .long 2109911280 + .long 3228777347 + .long 193599334 + .long 3189668101 + .long 1487139360 + .long 3228777354 + .long 3757852586 + .long 3189667728 + .long 751346048 + .long 3228777361 + .long 1167306858 + .long 3189667607 + .long 4198363056 + .long 3228777367 + .long 3727503052 + .long 3189667447 + .long 3239110320 + .long 3228777374 + .long 4101491224 + .long 3189667535 + .long 2169399936 + .long 3228777381 + .long 1682828411 + .long 3189668088 + .long 990067152 + .long 3228777388 + .long 325154957 + .long 3189667406 + .long 3996905008 + .long 3228777394 + .long 333920478 + .long 3189668041 + .long 2600795440 + .long 3228777401 + .long 1868291498 + .long 3189667430 + .long 1097513040 + .long 3228777408 + .long 2092796598 + .long 3189667816 + .long 3782823440 + .long 3228777414 + .long 2342635878 + .long 3189667569 + .long 2067581456 + .long 3228777421 + .long 2489432283 + .long 3189667708 + .long 247535056 + .long 3228777428 + .long 2233925548 + .long 3189668023 + .long 2618423584 + .long 3228777434 + .long 2884435678 + .long 3189668162 + .long 591076000 + .long 3228777441 + .long 2793733516 + .long 3189667544 + .long 2756182032 + .long 3228777447 + .long 726899401 + .long 3189668194 + .long 524554032 + .long 3228777454 + .long 3888914666 + .long 3189668216 + .long 2486865376 + .long 3228777460 + .long 2627594277 + .long 3189667420 + .long 53912208 + .long 3228777467 + .long 2333314786 + .long 3189667677 + .long 1816352000 + .long 3228777473 + .long 860249135 + .long 3189668031 + .long 3479932544 + .long 3228777479 + .long 1333576769 + .long 3189667862 + .long 750393936 + .long 3228777486 + .long 3863808803 + .long 3189667876 + .long 2218370608 + .long 3228777492 + .long 988274049 + .long 3189667895 + .long 3589587648 + .long 3228777498 + .long 1363020542 + .long 3189667588 + .long 569762768 + .long 3228777505 + .long 2860785679 + .long 3189668116 + .long 1749508368 + .long 3228777511 + .long 3454164214 + .long 3189667505 + .long 2834527744 + .long 3228777517 + .long 551781933 + .long 3189668193 + .long 3825484512 + .long 3228777523 + .long 2204991099 + .long 3189668076 + .long 428068000 + .long 3228777530 + .long 330816187 + .long 3189667835 + .long 1232862576 + .long 3228777536 + .long 1875584004 + .long 3189667900 + .long 1945543984 + .long 3228777542 + .long 3147029736 + .long 3189667368 + .long 2566748560 + .long 3228777548 + .long 2759544833 + .long 3189667927 + .long 3097106128 + .long 3228777554 + .long 2378335007 + .long 3189667440 + .long 3537239968 + .long 3228777560 + .long 59134449 + .long 3189667766 + .long 3887767008 + .long 3228777566 + .long 2237380018 + .long 3189668142 + .long 4149297872 + .long 3228777572 + .long 2899689733 + .long 3189667692 + .long 27469632 + .long 3228777579 + .long 2818642709 + .long 3189667832 + .long 112815152 + .long 3228777585 + .long 4092579806 + .long 3189667420 + .long 110959312 + .long 3228777591 + .long 936570796 + .long 3189668056 + .long 22488368 + .long 3228777597 + .long 365917996 + .long 3189668022 + .long 4142949952 + .long 3228777602 + .long 3149756965 + .long 3189667408 + .long 3882983968 + .long 3228777608 + .long 4081670258 + .long 3189668028 + .long 3538126528 + .long 3228777614 + .long 1719873156 + .long 3189668130 + .long 3108940752 + .long 3228777620 + .long 3284322898 + .long 3189668289 + .long 2595984192 + .long 3228777626 + .long 1642430589 + .long 3189668010 + .long 1999808880 + .long 3228777632 + .long 4232900950 + .long 3189667360 + .long 1320961392 + .long 3228777638 + .long 346567365 + .long 3189667513 + .long 559982960 + .long 3228777644 + .long 2138178062 + .long 3189668130 + .long 4012376832 + .long 3228777649 + .long 2536292360 + .long 3189667756 + .long 3088739088 + .long 3228777655 + .long 2310947316 + .long 3189668224 + .long 2084562592 + .long 3228777661 + .long 719337470 + .long 3189667732 + .long 1000367760 + .long 3228777667 + .long 2925814745 + .long 3189668182 + .long 4131637328 + .long 3228777672 + .long 2769058114 + .long 3189668120 + .long 2888947152 + .long 3228777678 + .long 2397746692 + .long 3189667888 + .long 1567770080 + .long 3228777684 + .long 1319666757 + .long 3189667549 + .long 168606816 + .long 3228777690 + .long 3249166601 + .long 3189667815 + .long 2986920608 + .long 3228777695 + .long 3117551188 + .long 3189667844 + .long 1433268080 + .long 3228777701 + .long 2392446108 + .long 3189668088 + .long 4098070400 + .long 3228777706 + .long 1952984424 + .long 3189667965 + .long 2391874944 + .long 3228777712 + .long 3260016359 + .long 3189667565 + .long 610126416 + .long 3228777718 + .long 1206683346 + .long 3189668275 + .long 3048265088 + .long 3228777723 + .long 3467821979 + .long 3189668220 + .long 1116824880 + .long 3228777729 + .long 3688655521 + .long 3189667898 + .long 3406204528 + .long 3228777734 + .long 3255713182 + .long 3189667556 + .long 1326929264 + .long 3228777740 + .long 200527713 + .long 3189667591 + .long 3469389248 + .long 3228777745 + .long 1129326388 + .long 3189667868 + .long 1244101248 + .long 3228777751 + .long 308865650 + .long 3189668017 + .long 3241447056 + .long 3228777756 + .long 3090939005 + .long 3189667668 + .long 871935152 + .long 3228777762 + .long 3265000937 + .long 3189667670 + .long 2725939152 + .long 3228777767 + .long 4229796659 + .long 3189668178 + .long 213959504 + .long 3228777773 + .long 1991139447 + .long 3189667724 + .long 1926361824 + .long 3228777778 + .long 2528808771 + .long 3189668376 + .long 3568606000 + .long 3228777783 + .long 4260639448 + .long 3189667546 + .long 846147968 + .long 3228777789 + .long 806895635 + .long 3189668179 + .long 2349341824 + .long 3228777794 + .long 3346322191 + .long 3189667388 + .long 3783635920 + .long 3228777799 + .long 175610890 + .long 3189667587 + .long 854474928 + .long 3228777805 + .long 2938776958 + .long 3189668104 + .long 2152201728 + .long 3228777810 + .long 2503702909 + .long 3189668036 + .long 3382253648 + .long 3228777815 + .long 990471545 + .long 3189668020 + .long 250064432 + .long 3228777821 + .long 2919909380 + .long 3189667876 + .long 1345966144 + .long 3228777826 + .long 3002840896 + .long 3189668306 + .long 2375385488 + .long 3228777831 + .long 3730416038 + .long 3189667426 + .long 3338712928 + .long 3228777836 + .long 1372953258 + .long 3189667506 + .long 4236335536 + .long 3228777841 + .long 3486643335 + .long 3189668352 + .long 773669728 + .long 3228777847 + .long 3527808638 + .long 3189667828 + .long 1541030400 + .long 3228777852 + .long 1323886332 + .long 3189667450 + .long 2243827264 + .long 3228777857 + .long 3473574637 + .long 3189667708 + .long 2882434080 + .long 3228777862 + .long 2116524762 + .long 3189667453 + .long 3457221328 + .long 3228777867 + .long 3472145296 + .long 3189668357 + .long 3968556352 + .long 3228777872 + .long 1399438939 + .long 3189668087 + .long 121835984 + .long 3228777878 + .long 1630440586 + .long 3189667769 + .long 507355824 + .long 3228777883 + .long 414821867 + .long 3189668165 + .long 830506528 + .long 3228777888 + .long 1651489076 + .long 3189667856 + .long 1091642960 + .long 3228777893 + .long 1914960493 + .long 3189667544 + .long 1291116960 + .long 3228777898 + .long 1585226677 + .long 3189668172 + .long 1429277424 + .long 3228777903 + .long 1458536815 + .long 3189667992 + .long 1506470256 + .long 3228777908 + .long 5177277 + .long 3189667794 + .long 1523038448 + .long 3228777913 + .long 2100423580 + .long 3189667910 + .long 1479322112 + .long 3228777918 + .long 2766296967 + .long 3189668266 + .long 1375658528 + .long 3228777923 + .long 3908110271 + .long 3189667373 + .long 1212382096 + .long 3228777928 + .long 1728734206 + .long 3189667440 + .long 989824464 + .long 3228777933 + .long 2721564364 + .long 3189668188 + .long 708314544 + .long 3228777938 + .long 1548992985 + .long 3189667813 + .long 368178464 + .long 3228777943 + .long 102841028 + .long 3189668008 + .long 4264706992 + .long 3228777947 + .long 975947285 + .long 3189667700 + .long 3808286304 + .long 3228777952 + .long 3025865597 + .long 3189668024 + .long 3294201856 + .long 3228777957 + .long 905114809 + .long 3189668054 + .long 2722769184 + .long 3228777962 + .long 3281428766 + .long 3189667672 + .long 2094301216 + .long 3228777967 + .long 2831959372 + .long 3189668375 + .long 1409108384 + .long 3228777972 + .long 2859726358 + .long 3189667900 + .long 667498528 + .long 3228777977 + .long 3483539044 + .long 3189668146 + .long 4164744336 + .long 3228777981 + .long 643592870 + .long 3189667709 + .long 3311214096 + .long 3228777986 + .long 3888135264 + .long 3189667701 + .long 2402175552 + .long 3228777991 + .long 1565708850 + .long 3189668342 + .long 1437926768 + .long 3228777996 + .long 3880143694 + .long 3189667559 + .long 418763344 + .long 3228778001 + .long 2177554551 + .long 3189667774 + .long 3639945856 + .long 3228778005 + .long 632683322 + .long 3189668317 + .long 2511830656 + .long 3228778010 + .long 1595152623 + .long 3189668068 + .long 1329673632 + .long 3228778015 + .long 1921601627 + .long 3189668075 + .long 93761104 + .long 3228778020 + .long 1757445293 + .long 3189668004 + .long 3099344416 + .long 3228778024 + .long 1435123721 + .long 3189667691 + .long 1756770768 + .long 3228778029 + .long 783914014 + .long 3189667649 + .long 361287040 + .long 3228778034 + .long 2235532382 + .long 3189667506 + .long 3208137904 + .long 3228778038 + .long 1904486204 + .long 3189667498 + .long 1707663968 + .long 3228778043 + .long 41908474 + .long 3189667890 + .long 155105584 + .long 3228778048 + .long 2107716085 + .long 3189668380 + .long 2845700992 + .long 3228778052 + .long 3156927676 + .long 3189667488 + .long 1189784368 + .long 3228778057 + .long 4047204189 + .long 3189668063 + .long 3777557072 + .long 3228778061 + .long 577628716 + .long 3189667418 + .long 2019349136 + .long 3228778066 + .long 2610467089 + .long 3189667920 + .long 210390496 + .long 3228778071 + .long 2766766141 + .long 3189668118 + .long 2645909040 + .long 3228778075 + .long 3243727052 + .long 3189668176 + .long 736228768 + .long 3228778080 + .long 3122320416 + .long 3189668130 + .long 3071540880 + .long 3228778084 + .long 3131821814 + .long 3189668172 + .long 1062165440 + .long 3228778089 + .long 3213377517 + .long 3189667895 + .long 3298289744 + .long 3228778093 + .long 2564668383 + .long 3189667569 + .long 1190229968 + .long 3228778098 + .long 3238426468 + .long 3189668376 + .long 3328169632 + .long 3228778102 + .long 1168702877 + .long 3189667512 + .long 1122421104 + .long 3228778107 + .long 19789062 + .long 3189667604 + .long 3163164128 + .long 3228778111 + .long 1630085837 + .long 3189667685 + .long 860707408 + .long 3228778116 + .long 4114762240 + .long 3189667464 + .long 2805226992 + .long 3228778120 + .long 18835043 + .long 3189667485 + .long 407027936 + .long 3228778125 + .long 1254882039 + .long 3189668241 + .long 2256282720 + .long 3228778129 + .long 1578671063 + .long 3189668264 + .long 4058260128 + .long 3228778133 + .long 2087871538 + .long 3189668330 + .long 1518227216 + .long 3228778138 + .long 1874562670 + .long 3189667466 + .long 3226351136 + .long 3228778142 + .long 1975306748 + .long 3189668156 + .long 592928208 + .long 3228778147 + .long 2027557844 + .long 3189668223 + .long 2208122192 + .long 3228778151 + .long 3385698680 + .long 3189668056 + .long 3777193280 + .long 3228778155 + .long 2370310143 + .long 3189667586 + .long 1005399968 + .long 3228778160 + .long 259325820 + .long 3189668365 + .long 2482901056 + .long 3228778164 + .long 780809723 + .long 3189667443 + .long 3914951728 + .long 3228778168 + .long 212773867 + .long 3189667618 + .long 1006805600 + .long 3228778173 + .long 951469551 + .long 3189668212 + .long 2348616576 + .long 3228778177 + .long 2086655720 + .long 3189668128 + .long 3645635056 + .long 3228778181 + .long 2113468742 + .long 3189667868 + .long 603109872 + .long 3228778186 + .long 1652875995 + .long 3189667443 + .long 1811190160 + .long 3228778190 + .long 2629878773 + .long 3189668368 + .long 2975121696 + .long 3228778194 + .long 346123600 + .long 3189667455 + .long 4095115920 + .long 3228778198 + .long 3526019824 + .long 3189667996 + .long 876415552 + .long 3228778203 + .long 1439312045 + .long 3189667395 + .long 1909163616 + .long 3228778207 + .long 3349683269 + .long 3189668324 + .long 2898599856 + .long 3228778211 + .long 649479362 + .long 3189667358 + .long 3844929728 + .long 3228778215 + .long 2676997587 + .long 3189668158 + .long 453390032 + .long 3228778220 + .long 848895008 + .long 3189668036 + .long 1314117952 + .long 3228778224 + .long 3492148440 + .long 3189668045 + .long 2132347376 + .long 3228778228 + .long 281429102 + .long 3189667715 + .long 2908278048 + .long 3228778232 + .long 2940038679 + .long 3189667953 + .long 3642108336 + .long 3228778236 + .long 3909547671 + .long 3189667808 + .long 39067888 + .long 3228778241 + .long 3920787602 + .long 3189668378 + .long 689286912 + .long 3228778245 + .long 1690865565 + .long 3189667500 + .long 1297992288 + .long 3228778249 + .long 2169866692 + .long 3189667738 + .long 1865376896 + .long 3228778253 + .long 967083596 + .long 3189667983 + .long 2391632256 + .long 3228778257 + .long 1361458469 + .long 3189668348 + .long 2876948576 + .long 3228778261 + .long 32611984 + .long 3189667893 + .long 3321514720 + .long 3228778265 + .long 2193827755 + .long 3189667454 + .long 3725518240 + .long 3228778269 + .long 2245419299 + .long 3189668375 + .long 4089145456 + .long 3228778273 + .long 3497133018 + .long 3189668150 + .long 117614048 + .long 3228778278 + .long 175818393 + .long 3189668353 + .long 401042352 + .long 3228778282 + .long 3839976210 + .long 3189668213 + .long 644645552 + .long 3228778286 + .long 3041010480 + .long 3189667412 + .long 848604848 + .long 3228778290 + .long 2760940853 + .long 3189667832 + .long 1013100256 + .long 3228778294 + .long 2385564198 + .long 3189668140 + .long 1138310560 + .long 3228778298 + .long 2892472831 + .long 3189667574 + .long 1224413296 + .long 3228778302 + .long 781676890 + .long 3189667676 + .long 1271584832 + .long 3228778306 + .long 3578454272 + .long 3189667868 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 0 + .long 2256045239 + .long 3209413770 + .long 2491592457 + .long 3210460574 + .long 1804910333 + .long 3211053321 + .long 1914826022 + .long 3211505620 + .long 3803025062 + .long 3211872665 + .long 1674748349 + .long 3212097941 + .long 1798374224 + .long 3212322782 + .long 2768032015 + .long 3212547190 + .long 3136444289 + .long 3212771167 + .long 2855105875 + .long 3212915789 + .long 2332612951 + .long 3213027349 + .long 1363424900 + .long 3213138696 + .long 3437629661 + .long 3213249830 + .long 3435456176 + .long 3213360753 + .long 512327647 + .long 3213471466 + .long 2393978768 + .long 3213581968 + .long 3901767770 + .long 3213692261 + .long 4132692718 + .long 3213802346 + .long 1082284973 + .long 3213898832 + .long 2823056504 + .long 3213953667 + .long 366152305 + .long 3214008400 + .long 3959556563 + .long 3214063029 + .long 2367110801 + .long 3214117557 + .long 1523289056 + .long 3214171983 + .long 3058430271 + .long 3214226307 + .long 3839215 + .long 3214280531 + .long 2561657861 + .long 3214334653 + .long 3745193976 + .long 3214388675 + .long 853823952 + .long 3214442598 + .long 4062993129 + .long 3214496420 + .long 2064542556 + .long 3214550144 + .long 721479184 + .long 3214603769 + .long 1593203319 + .long 3214657295 + .long 1935571978 + .long 3214710723 + .long 3290896245 + .long 3214764053 + .long 2898068879 + .long 3214817286 + .long 2282560537 + .long 3214870422 + .long 2961513548 + .long 3214923461 + .long 1074417563 + .long 3214955210 + .long 2820079616 + .long 3214981633 + .long 1021551109 + .long 3215008009 + .long 716013687 + .long 3215034337 + .long 2641666110 + .long 3215060617 + .long 3237753164 + .long 3215086850 + .long 3234528909 + .long 3215113036 + .long 3358317786 + .long 3215139175 + .long 36575458 + .long 3215165268 + .long 2577785893 + .long 3215191313 + .long 3106717932 + .long 3215217312 + .long 2334256463 + .long 3215243265 + .long 967494986 + .long 3215269172 + .long 4004729818 + .long 3215295032 + .long 3555617588 + .long 3215320847 + .long 316038151 + .long 3215346617 + .long 3568120799 + .long 3215372340 + .long 1115499161 + .long 3215398019 + .long 2233009907 + .long 3215423652 + .long 3306979906 + .long 3215449240 + .long 720153405 + .long 3215474784 + .long 3736618996 + .long 3215500282 + .long 142096100 + .long 3215525737 + .long 3488599868 + .long 3215551146 + .long 1554858050 + .long 3215576512 + .long 3590975466 + .long 3215601833 + .long 1663752343 + .long 3215627111 + .long 721479184 + .long 3215652345 + .long 1414091172 + .long 3215677535 + .long 93191556 + .long 3215702682 + .long 1696976726 + .long 3215727785 + .long 2570390009 + .long 3215752845 + .long 3350046349 + .long 3215777862 + .long 374320308 + .long 3215802837 + .long 2863237644 + .long 3215827768 + .long 2853726453 + .long 3215852657 + .long 969442960 + .long 3215877504 + .long 2125826056 + .long 3215902308 + .long 2645217056 + .long 3215927070 + .long 3141783046 + .long 3215951790 + .long 4226570871 + .long 3215976468 + .long 3253764118 + .long 3215991848 + .long 999795016 + .long 3216004146 + .long 4242218727 + .long 3216016422 + .long 395520918 + .long 3216028679 + .long 2642482782 + .long 3216040914 + .long 2689550894 + .long 3216053129 + .long 831618312 + .long 3216065324 + .long 1657067230 + .long 3216077498 + .long 1162876950 + .long 3216089652 + .long 3934502846 + .long 3216101785 + .long 1671049587 + .long 3216113899 + .long 3250051821 + .long 3216125992 + .long 367745354 + .long 3216138066 + .long 1898814972 + .long 3216150119 + .long 3831632753 + .long 3216162152 + .long 2153169263 + .long 3216174166 + .long 1438937368 + .long 3216186160 + .long 1968099508 + .long 3216198134 + .long 4018444062 + .long 3216210088 + .long 3571427061 + .long 3216222023 + .long 902115705 + .long 3216233939 + .long 579197221 + .long 3216245835 + .long 2875053055 + .long 3216257711 + .long 3765767585 + .long 3216269568 + .long 3521071355 + .long 3216281406 + .long 2409382351 + .long 3216293225 + .long 697814500 + .long 3216305025 + .long 2947153405 + .long 3216316805 + .long 831995525 + .long 3216328567 + .long 3205527541 + .long 3216340309 + .long 1739796226 + .long 3216352033 + .long 990487678 + .long 3216363738 + .long 1217066237 + .long 3216375424 + .long 2677749815 + .long 3216387091 + .long 1334550573 + .long 3216398740 + .long 1738184714 + .long 3216410370 + .long 4143178441 + .long 3216421981 + .long 212908442 + .long 3216433575 + .long 3084380679 + .long 3216445149 + .long 123597797 + .long 3216456706 + .long 170206973 + .long 3216468244 + .long 3472736381 + .long 3216479763 + .long 1688602678 + .long 3216491265 + .long 3653922191 + .long 3216502748 + .long 1023779914 + .long 3216514214 + .long 2631975180 + .long 3216525661 + .long 131290539 + .long 3216537091 + .long 2353237313 + .long 3216548502 + .long 948324365 + .long 3216559896 + .long 450836243 + .long 3216571272 + .long 1098971024 + .long 3216582630 + .long 3129814575 + .long 3216593970 + .long 2484380169 + .long 3216605293 + .long 3692517238 + .long 3216616598 + .long 2693048988 + .long 3216627886 + .long 4013648344 + .long 3216639156 + .long 3590975466 + .long 3216650409 + .long 1655586284 + .long 3216661645 + .long 2731939102 + .long 3216672863 + .long 2753499254 + .long 3216684064 + .long 1947647495 + .long 3216695248 + .long 540719148 + .long 3216706415 + .long 3052977802 + .long 3216717564 + .long 1118752477 + .long 3216728697 + .long 3551215000 + .long 3216739812 + .long 1982647887 + .long 3216750911 + .long 929221623 + .long 3216761993 + .long 611131637 + .long 3216773058 + .long 1247571711 + .long 3216784106 + .long 3056740043 + .long 3216795137 + .long 1960877976 + .long 3216806152 + .long 2471177857 + .long 3216817150 + .long 507919781 + .long 3216828132 + .long 580346667 + .long 3216839097 + .long 2901768203 + .long 3216850045 + .long 3389566649 + .long 3216860977 + .long 2255137180 + .long 3216871893 + .long 4003893595 + .long 3216882792 + .long 255404805 + .long 3216893676 + .long 4103138823 + .long 3216904542 + .long 2869828094 + .long 3216915393 + .long 1057147997 + .long 3216926228 + .long 3165853160 + .long 3216937046 + .long 810881035 + .long 3216947849 + .long 2786128388 + .long 3216958635 + .long 704718315 + .long 3216969406 + .long 3358743942 + .long 3216980160 + .long 2359535366 + .long 3216990899 + .long 2202435985 + .long 3217001622 + .long 3086938536 + .long 3217012329 + .long 916690285 + .long 3217023021 + .long 2239683676 + .long 3217032432 + .long 2690954374 + .long 3217037762 + .long 4057646264 + .long 3217043084 + .long 2142368519 + .long 3217048399 + .long 1337238495 + .long 3217053706 + .long 1738982326 + .long 3217059005 + .long 3443904681 + .long 3217064296 + .long 2252923910 + .long 3217069580 + .long 2556476367 + .long 3217074856 + .long 154649628 + .long 3217080125 + .long 3732021368 + .long 3217085385 + .long 497923366 + .long 3217090639 + .long 3431084121 + .long 3217095884 + .long 4034990935 + .long 3217101122 + .long 2402663310 + .long 3217106353 + .long 2921687961 + .long 3217111576 + .long 1389319216 + .long 3217116792 + .long 2192350480 + .long 3217122000 + .long 1127247302 + .long 3217127201 + .long 2580018809 + .long 3217132394 + .long 2346350743 + .long 3217137580 + .long 516509563 + .long 3217142759 + .long 1475344637 + .long 3217147930 + .long 1017388536 + .long 3217153094 + .long 3526728381 + .long 3217158250 + .long 502171511 + .long 3217163400 + .long 622018689 + .long 3217168542 + .long 3974262445 + .long 3217173676 + .long 2056589177 + .long 3217178804 + .long 3546185020 + .long 3217183924 + .long 4234966846 + .long 3217189037 + .long 4209453505 + .long 3217194143 + .long 3555800579 + .long 3217199242 + .long 2359802410 + .long 3217204334 + .long 706894115 + .long 3217209419 + .long 2977120889 + .long 3217214496 + .long 665270808 + .long 3217219567 + .long 2445647873 + .long 3217224630 + .long 4107302903 + .long 3217229686 + .long 1438937368 + .long 3217234736 + .long 3113807214 + .long 3217239778 + .long 624953709 + .long 3217244814 + .long 60313751 + .long 1069756916 + .long 2039124234 + .long 1069751894 + .long 3639817142 + .long 1069746879 + .long 485812347 + .long 1069741872 + .long 1085767695 + .long 1069736871 + .long 1063773387 + .long 1069731877 + .long 339219334 + .long 1069726890 + .long 3126793337 + .long 1069721909 + .long 756610100 + .long 1069716936 + .long 1738980508 + .long 1069711969 + .long 1699638774 + .long 1069707009 + .long 559609852 + .long 1069702056 + .long 2535207687 + .long 1069697109 + .long 3253131575 + .long 1069692169 + .long 2635366323 + .long 1069687236 + .long 604213229 + .long 1069682310 + .long 1377255668 + .long 1069677390 + .long 582455508 + .long 1069672477 + .long 2438020609 + .long 1069667570 + .long 2572533958 + .long 1069662670 + .long 909853896 + .long 1069657777 + .long 1669112469 + .long 1069652890 + .long 479811889 + .long 1069648010 + .long 1561692097 + .long 1069643136 + .long 544859953 + .long 1069638269 + .long 1649656813 + .long 1069633408 + .long 506787744 + .long 1069628554 + .long 1337189126 + .long 1069623706 + .long 4067125179 + .long 1069618864 + .long 33219107 + .long 1069614030 + .long 2047222611 + .long 1069609201 + .long 1446341380 + .long 1069604379 + .long 2452971930 + .long 1069599563 + .long 699863591 + .long 1069594754 + .long 409986179 + .long 1069589951 + .long 1511626604 + .long 1069585154 + .long 3933354665 + .long 1069580363 + .long 3309054273 + .long 1069575579 + .long 3862823860 + .long 1069570801 + .long 1229105731 + .long 1069566030 + .long 3927521083 + .long 1069561264 + .long 3298097489 + .long 1069556505 + .long 3566038531 + .long 1069551752 + .long 733771779 + .long 1069546492 + .long 147741522 + .long 1069537011 + .long 941119220 + .long 1069527542 + .long 2976542023 + .long 1069518085 + .long 1822213927 + .long 1069508641 + .long 1636804890 + .long 1069499209 + .long 2284546202 + .long 1069489789 + .long 3630195051 + .long 1069480381 + .long 1244064508 + .long 1069470986 + .long 3581890024 + .long 1069461602 + .long 1920055674 + .long 1069452231 + .long 420362572 + .long 1069442872 + .long 3245124339 + .long 1069433524 + .long 1672262586 + .long 1069424189 + .long 4160075380 + .long 1069414865 + .long 1987496281 + .long 1069405554 + .long 3613830132 + .long 1069396254 + .long 319012134 + .long 1069386967 + .long 563343667 + .long 1069377691 + .long 4217685989 + .long 1069368426 + .long 2563457725 + .long 1069359174 + .long 4062436141 + .long 1069349933 + .long 4291983603 + .long 1069340704 + .long 3124914285 + .long 1069331487 + .long 434524433 + .long 1069322282 + .long 389557226 + .long 1069313088 + .long 2864265763 + .long 1069303905 + .long 3438410662 + .long 1069294734 + .long 1987192267 + .long 1069285575 + .long 2681248272 + .long 1069276427 + .long 1101749478 + .long 1069267291 + .long 1420266631 + .long 1069258166 + .long 3513866211 + .long 1069249052 + .long 2965108111 + .long 1069239950 + .long 3946945232 + .long 1069230859 + .long 2042852013 + .long 1069221780 + .long 1426691339 + .long 1069212712 + .long 1977810406 + .long 1069203655 + .long 3576005764 + .long 1069194609 + .long 1806553800 + .long 1069185575 + .long 845110407 + .long 1069176552 + .long 572806897 + .long 1069167540 + .long 871215109 + .long 1069158539 + .long 1622345234 + .long 1069149549 + .long 2708643653 + .long 1069140570 + .long 4012990793 + .long 1069131602 + .long 1123731696 + .long 1069122646 + .long 2514543080 + .long 1069113700 + .long 3774627456 + .long 1069104765 + .long 493612919 + .long 1069095842 + .long 1146452959 + .long 1069086929 + .long 1323620609 + .long 1069078027 + .long 910975575 + .long 1069069136 + .long 4089762193 + .long 1069060255 + .long 2156738208 + .long 1069051386 + .long 3588943832 + .long 1069042527 + .long 3978928661 + .long 1069033679 + .long 3214618865 + .long 1069024842 + .long 1184347908 + .long 1069016016 + .long 2071821874 + .long 1069007200 + .long 1471215619 + .long 1068998395 + .long 3567040008 + .long 1068989600 + .long 3954270794 + .long 1068980816 + .long 2523248584 + .long 1068972043 + .long 3459676924 + .long 1068963280 + .long 2359718512 + .long 1068954528 + .long 3409862494 + .long 1068945786 + .long 2207053396 + .long 1068937055 + .long 2938558446 + .long 1068928334 + .long 1202096535 + .long 1068919624 + .long 1185705549 + .long 1068910924 + .long 2782838657 + .long 1068902234 + .long 1592362481 + .long 1068893555 + .long 1803457173 + .long 1068884886 + .long 3310712729 + .long 1068876227 + .long 1714127196 + .long 1068867579 + .long 1204006779 + .long 1068858941 + .long 1676062187 + .long 1068850313 + .long 3026374166 + .long 1068841695 + .long 856424459 + .long 1068833088 + .long 3652963247 + .long 1068824490 + .long 2723236352 + .long 1068815903 + .long 2259754591 + .long 1068807326 + .long 2160422882 + .long 1068798759 + .long 2323505847 + .long 1068790202 + .long 2647626118 + .long 1068781655 + .long 3031762665 + .long 1068773118 + .long 3375249122 + .long 1068764591 + .long 3577772136 + .long 1068756074 + .long 3539369713 + .long 1068747567 + .long 3160429578 + .long 1068739070 + .long 2341687551 + .long 1068730583 + .long 984225923 + .long 1068722106 + .long 3284439142 + .long 1068713638 + .long 554163028 + .long 1068705181 + .long 1285444256 + .long 1068696733 + .long 1085767695 + .long 1068688295 + .long 4152891319 + .long 1068679866 + .long 1800008162 + .long 1068671448 + .long 2520515836 + .long 1068663039 + .long 1923243906 + .long 1068654640 + .long 4207288842 + .long 1068646250 + .long 687176001 + .long 1068637871 + .long 4152596484 + .long 1068629500 + .long 1623765359 + .long 1068621140 + .long 1596060423 + .long 1068612789 + .long 3975249632 + .long 1068604447 + .long 77489616 + .long 1068596116 + .long 2694095274 + .long 1068587793 + .long 3141865345 + .long 1068579480 + .long 1327852022 + .long 1068571177 + .long 1454392201 + .long 1068562883 + .long 3429171450 + .long 1068554598 + .long 2865222567 + .long 1068546323 + .long 3965826047 + .long 1068538057 + .long 2344639476 + .long 1068529801 + .long 2205565304 + .long 1068521554 + .long 3457847553 + .long 1068513316 + .long 1716070423 + .long 1068505088 + .long 2370117590 + .long 1068494794 + .long 3549949915 + .long 1068478374 + .long 2497601776 + .long 1068461973 + .long 3329575662 + .long 1068445590 + .long 1573040697 + .long 1068429226 + .long 1345699131 + .long 1068412880 + .long 2470881766 + .long 1068396552 + .long 477545290 + .long 1068380243 + .long 3780138808 + .long 1068363951 + .long 3613830132 + .long 1068347678 + .long 4099274231 + .long 1068331423 + .long 767774141 + .long 1068315187 + .long 2036114853 + .long 1068298968 + .long 3436756955 + .long 1068282767 + .long 502735958 + .long 1068266585 + .long 1652561629 + .long 1068250420 + .long 2420411682 + .long 1068234273 + .long 2635998437 + .long 1068218144 + .long 2129599017 + .long 1068202033 + .long 732052851 + .long 1068185940 + .long 2569726489 + .long 1068169864 + .long 3179609248 + .long 1068153806 + .long 2394212644 + .long 1068137766 + .long 46600658 + .long 1068121744 + .long 265354603 + .long 1068105739 + .long 2884636119 + .long 1068089751 + .long 3444184771 + .long 1068073781 + .long 1779250256 + .long 1068057829 + .long 2020590027 + .long 1068041894 + .long 4004532340 + .long 1068025976 + .long 3272973907 + .long 1068010076 + .long 3958279445 + .long 1067994193 + .long 1603410172 + .long 1067978328 + .long 341790679 + .long 1067962480 + .long 12404745 + .long 1067946649 + .long 454760348 + .long 1067930835 + .long 1508887391 + .long 1067915038 + .long 3015335440 + .long 1067899258 + .long 520204185 + .long 1067883496 + .long 2455010382 + .long 1067867750 + .long 71914560 + .long 1067852022 + .long 1803457173 + .long 1067836310 + .long 3197785334 + .long 1067820615 + .long 4098519806 + .long 1067804937 + .long 54818232 + .long 1067789277 + .long 3796209456 + .long 1067773632 + .long 2282918403 + .long 1067758005 + .long 3950504196 + .long 1067742394 + .long 55152364 + .long 1067726801 + .long 3328378382 + .long 1067711223 + .long 732385311 + .long 1067695663 + .long 704701956 + .long 1067680119 + .long 3093409710 + .long 1067664591 + .long 3452107773 + .long 1067649080 + .long 1629845684 + .long 1067633586 + .long 1771121268 + .long 1067618108 + .long 3725944001 + .long 1067602646 + .long 3049832979 + .long 1067587201 + .long 3888716792 + .long 1067571772 + .long 1799062323 + .long 1067556360 + .long 927741940 + .long 1067540964 + .long 1127129614 + .long 1067525584 + .long 2250066244 + .long 1067510220 + .long 4149857685 + .long 1067494872 + .long 2385305499 + .long 1067479541 + .long 1105606892 + .long 1067464226 + .long 330901792 + .long 1067447486 + .long 3134934760 + .long 1067416919 + .long 1744581096 + .long 1067386385 + .long 166917835 + .long 1067355883 + .long 2409924962 + .long 1067325412 + .long 3892547049 + .long 1067294973 + .long 34624089 + .long 1067264567 + .long 3436756955 + .long 1067234191 + .long 930630721 + .long 1067203848 + .long 823651223 + .long 1067173536 + .long 2834170318 + .long 1067143255 + .long 2386449519 + .long 1067113006 + .long 3495558248 + .long 1067082788 + .long 1587501032 + .long 1067052602 + .long 679083091 + .long 1067022447 + .long 493004867 + .long 1066992323 + .long 752825758 + .long 1066962230 + .long 1182960573 + .long 1066932168 + .long 1508676010 + .long 1066902137 + .long 1456087143 + .long 1066872137 + .long 752153937 + .long 1066842168 + .long 3419645073 + .long 1066812229 + .long 597265304 + .long 1066782322 + .long 604423098 + .long 1066752445 + .long 3171423441 + .long 1066722598 + .long 3734431730 + .long 1066692782 + .long 2025404984 + .long 1066662997 + .long 2072088478 + .long 1066633242 + .long 3608077800 + .long 1066603517 + .long 2072815517 + .long 1066573823 + .long 1496489755 + .long 1066544159 + .long 1615129006 + .long 1066514525 + .long 2165566144 + .long 1066484921 + .long 2885435163 + .long 1066455347 + .long 3513167923 + .long 1066425803 + .long 3281014557 + .long 1066390787 + .long 2604876893 + .long 1066331819 + .long 184567847 + .long 1066272911 + .long 4093204381 + .long 1066214061 + .long 930630721 + .long 1066155272 + .long 3068052312 + .long 1066096541 + .long 1403389294 + .long 1066037870 + .long 4015975920 + .long 1065979257 + .long 1806815988 + .long 1065920704 + .long 2858315029 + .long 1065862209 + .long 2369503088 + .long 1065803773 + .long 4130865093 + .long 1065745395 + .long 3344465584 + .long 1065687076 + .long 3803811842 + .long 1065628815 + .long 713978687 + .long 1065570613 + .long 2166438958 + .long 1065512468 + .long 3369253777 + .long 1065454381 + .long 3826935798 + .long 1065396352 + .long 1795984718 + .long 1065323547 + .long 1064675693 + .long 1065207720 + .long 182837332 + .long 1065092008 + .long 2466218622 + .long 1064976410 + .long 2643543973 + .long 1064860927 + .long 4036370876 + .long 1064745558 + .long 1379209261 + .long 1064630304 + .long 2294346567 + .long 1064515163 + .long 1522032624 + .long 1064400136 + .long 495642370 + .long 1064265805 + .long 3615182787 + .long 1064036203 + .long 1900236729 + .long 1063806828 + .long 2033862474 + .long 1063577678 + .long 2114800432 + .long 1063348753 + .long 494771388 + .long 1062984042 + .long 1967954106 + .long 1062527089 + .long 1170198565 + .long 1061933680 + .long 417502738 + .long 1060884213 + .long 0 + .long 2147483648 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 368569247 + .long 3223701786 + .long 368569247 + .long 3223701786 + .long 1671522011 + .long 1075227560 + .long 1671522011 + .long 1075227560 + .long 1691548315 + .long 3221787401 + .long 1691548315 + .long 3221787401 + .long 3700771192 + .long 1073506818 + .long 3700771192 + .long 1073506818 + .long 3698831637 + .long 3220339442 + .long 3698831637 + .long 3220339442 + .long 3207479564 + .long 1062894188 + .long 3207479564 + .long 1062894188 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 589282582 + .long 1068907621 + .long 589282582 + .long 1068907621 + .long 1325131787 + .long 3216755581 + .long 1325131787 + .long 3216755581 + .long 1668232222 + .long 1069713319 + .long 1668232222 + .long 1069713319 + .long 354868790 + .long 3217804155 + .long 354868790 + .long 3217804155 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4294967295 + .long 1048575 + .long 4294967295 + .long 1048575 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1062207488 + .long 0 + .long 1062207488 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4227858432 + .long 4294967295 + .long 4227858432 + .long 4294967295 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1071366144 + .long 0 + .long 1071366144 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1352597504 + .long 1070810131 + .long 1352597504 + .long 1070810131 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 3296460800 + .long 1031700412 + .long 3296460800 + .long 1031700412 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1082564608 + .long 0 + .long 1082564608 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1083176960 + .long 0 + .long 1083176960 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1083174912 + .long 0 + .long 1083174912 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 2146435072 + .long 0 + .long 4293918720 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .type __svml_dlog10_data_internal,@object + .size __svml_dlog10_data_internal,9600 + .align 32 + +__dlog10_la_CoutTab: + .long 0 + .long 1071366144 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1071337728 + .long 184549376 + .long 1065092008 + .long 2099961998 + .long 3178897324 + .long 0 + .long 1071309312 + .long 931135488 + .long 1066155272 + .long 2365712557 + .long 3178155773 + .long 0 + .long 1071280896 + .long 603979776 + .long 1066752445 + .long 709057215 + .long 1031474920 + .long 0 + .long 1071252480 + .long 3437232128 + .long 1067234191 + .long 1515412199 + .long 3179085970 + .long 0 + .long 1071238272 + .long 1105723392 + .long 1067464226 + .long 153915826 + .long 3178000698 + .long 0 + .long 1071209856 + .long 3328442368 + .long 1067711223 + .long 3899912278 + .long 3177135692 + .long 0 + .long 1071181440 + .long 341835776 + .long 1067962480 + .long 2509208190 + .long 3176531222 + .long 0 + .long 1071167232 + .long 2884632576 + .long 1068089751 + .long 1030636902 + .long 1025224143 + .long 0 + .long 1071138816 + .long 3613917184 + .long 1068347678 + .long 3527163461 + .long 3177529532 + .long 0 + .long 1071124608 + .long 3549954048 + .long 1068478374 + .long 3498894081 + .long 3173000425 + .long 0 + .long 1071096192 + .long 1623785472 + .long 1068621140 + .long 2889825554 + .long 3176375375 + .long 0 + .long 1071081984 + .long 1085800448 + .long 1068688295 + .long 4015256301 + .long 3177184346 + .long 0 + .long 1071053568 + .long 3652976640 + .long 1068824490 + .long 3600693529 + .long 3175753877 + .long 0 + .long 1071039360 + .long 1592393728 + .long 1068893555 + .long 231073830 + .long 3177087939 + .long 0 + .long 1071025152 + .long 3459645440 + .long 1068963280 + .long 1740576090 + .long 1029619435 + .long 0 + .long 1070996736 + .long 3774611456 + .long 1069104765 + .long 3858552785 + .long 1028603845 + .long 0 + .long 1070982528 + .long 845086720 + .long 1069176552 + .long 3138879731 + .long 1029120443 + .long 0 + .long 1070968320 + .long 3513843712 + .long 1069249052 + .long 2107125367 + .long 1029044389 + .long 0 + .long 1070954112 + .long 434503680 + .long 1069322282 + .long 3827602229 + .long 1028932700 + .long 0 + .long 1070939904 + .long 3613851648 + .long 1069396254 + .long 1223751955 + .long 3176465139 + .long 0 + .long 1070911488 + .long 733741056 + .long 1069546492 + .long 1625232067 + .long 1029570781 + .long 0 + .long 1070897280 + .long 1511620608 + .long 1069585154 + .long 3044605139 + .long 1028090775 + .long 0 + .long 1070883072 + .long 1337196544 + .long 1069623706 + .long 2602639001 + .long 3175938675 + .long 0 + .long 1070868864 + .long 2572533760 + .long 1069662670 + .long 3067107955 + .long 1022933137 + .long 0 + .long 1070854656 + .long 559611904 + .long 1069702056 + .long 764145786 + .long 3174041535 + .long 0 + .long 1070840448 + .long 485818368 + .long 1069741872 + .long 2037567072 + .long 3175580956 + .long 0 + .long 1070826240 + .long 259604480 + .long 1069782128 + .long 4012068429 + .long 1027865895 + .long 0 + .long 1070812032 + .long 3454042112 + .long 1069822833 + .long 2867680007 + .long 3174202478 + .long 0 + .long 1070797824 + .long 2188754944 + .long 1069863999 + .long 2538655286 + .long 3175840981 + .long 0 + .long 1070783616 + .long 2965241856 + .long 1069905635 + .long 1338936972 + .long 3176093950 + .long 0 + .long 1070769408 + .long 966279168 + .long 1069947753 + .long 1774547674 + .long 3175051484 + .long 0 + .long 1070755200 + .long 1604042752 + .long 1069990363 + .long 2557470738 + .long 3174667448 + .long 0 + .long 1070740992 + .long 3417833472 + .long 1070033477 + .long 2268255117 + .long 3175678264 + .long 0 + .long 1070740992 + .long 3417833472 + .long 1070033477 + .long 2268255117 + .long 3175678264 + .long 0 + .long 1070726784 + .long 2451292160 + .long 1070077108 + .long 3757728941 + .long 1027943275 + .long 0 + .long 1070712576 + .long 929644544 + .long 1070121268 + .long 899045708 + .long 1027944939 + .long 0 + .long 1070698368 + .long 3057254400 + .long 1070165969 + .long 3880649376 + .long 3172972504 + .long 0 + .long 1070684160 + .long 2231091200 + .long 1070211226 + .long 521319256 + .long 1027600177 + .long 0 + .long 1070684160 + .long 2231091200 + .long 1070211226 + .long 521319256 + .long 1027600177 + .long 0 + .long 1070669952 + .long 2620162048 + .long 1070257052 + .long 1385613369 + .long 3176104036 + .long 0 + .long 1070655744 + .long 2096726016 + .long 1070303462 + .long 3138305819 + .long 3173646777 + .long 0 + .long 1070641536 + .long 944717824 + .long 1070350471 + .long 1065120110 + .long 1027539054 + .long 0 + .long 1070641536 + .long 944717824 + .long 1070350471 + .long 1065120110 + .long 1027539054 + .long 0 + .long 1070627328 + .long 1985789952 + .long 1070398094 + .long 3635943864 + .long 3173136490 + .long 0 + .long 1070613120 + .long 2123825152 + .long 1070446348 + .long 1125219725 + .long 3175615738 + .long 0 + .long 1070598912 + .long 1078378496 + .long 1070495250 + .long 603852726 + .long 3174570526 + .long 0 + .long 1070598912 + .long 1078378496 + .long 1070495250 + .long 603852726 + .long 3174570526 + .long 0 + .long 1070573312 + .long 1537933312 + .long 1070544817 + .long 998069198 + .long 1026662908 + .long 0 + .long 1070544896 + .long 733773824 + .long 1070595068 + .long 4061058002 + .long 3174036009 + .long 0 + .long 1070544896 + .long 733773824 + .long 1070595068 + .long 4061058002 + .long 3174036009 + .long 0 + .long 1070516480 + .long 3897544704 + .long 1070621058 + .long 951856294 + .long 1026731877 + .long 0 + .long 1070516480 + .long 3897544704 + .long 1070621058 + .long 951856294 + .long 1026731877 + .long 0 + .long 1070488064 + .long 493535232 + .long 1070646897 + .long 3852369308 + .long 3173264746 + .long 0 + .long 1070459648 + .long 463249408 + .long 1070673107 + .long 2853152111 + .long 3174564937 + .long 0 + .long 1070459648 + .long 463249408 + .long 1070673107 + .long 2853152111 + .long 3174564937 + .long 0 + .long 1070431232 + .long 3186585600 + .long 1070699699 + .long 1874718356 + .long 3174139933 + .long 0 + .long 1070431232 + .long 3186585600 + .long 1070699699 + .long 1874718356 + .long 3174139933 + .long 0 + .long 1070402816 + .long 1525858304 + .long 1070726686 + .long 3039843523 + .long 1024724665 + .long 0 + .long 1070402816 + .long 1525858304 + .long 1070726686 + .long 3039843523 + .long 1024724665 + .long 0 + .long 1070374400 + .long 3425300480 + .long 1070754078 + .long 1303046649 + .long 1022401701 + .long 0 + .long 1070374400 + .long 3425300480 + .long 1070754078 + .long 1303046649 + .long 1022401701 + .long 0 + .long 1070345984 + .long 1980465152 + .long 1070781889 + .long 3188656319 + .long 1027271390 + .long 0 + .long 1070345984 + .long 1980465152 + .long 1070781889 + .long 3188656319 + .long 1027271390 + .long 0 + .long 1070317568 + .long 1352630272 + .long 1070810131 + .long 3090895658 + .long 3174564915 + .long 1352630272 + .long 1070810131 + .long 3090895658 + .long 3174564915 + .long 64 + .long 1120927744 + .long 0 + .long 1096810496 + .long 0 + .long 1064828928 + .long 0 + .long 1135607808 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 1071366144 + .long 3207479559 + .long 1062894188 + .long 3698831637 + .long 3220339442 + .long 3700832817 + .long 1073506818 + .long 1691624569 + .long 3221787401 + .long 2065628764 + .long 1075227551 + .long 1770847080 + .long 3223701774 + .long 3786517112 + .long 1077250450 + .long 1316351650 + .long 3225793313 + .type __dlog10_la_CoutTab,@object + .size __dlog10_la_CoutTab,1696 + .align 16 + +.FLT_16: + .long 0x00000000,0x43380000,0x00000000,0x43380000 + .type .FLT_16,@object + .size .FLT_16,16 + .align 16 + +.FLT_89: + .long 0x00000000,0x80000000,0x00000000,0x00000000 + .type .FLT_89,@object + .size .FLT_89,16 + .align 8 + +.FLT_90: + .long 0x00000000,0x3ff00000 + .type .FLT_90,@object + .size .FLT_90,8 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core-sse.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core-sse.S new file mode 100644 index 0000000000..0a101666f5 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core-sse.S @@ -0,0 +1,20 @@ +/* SSE version of vectorized log10, 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 + . */ + +#define _ZGVdN4v_log10 _ZGVdN4v_log10_sse_wrapper +#include "../svml_d_log104_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core.c new file mode 100644 index 0000000000..48c63cfb3d --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core.c @@ -0,0 +1,27 @@ +/* Multiple versions of vectorized log10, 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 + . */ + +#define SYMBOL_NAME _ZGVdN4v_log10 +#include "ifunc-mathvec-avx2.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVdN4v_log10, __GI__ZGVdN4v_log10, __redirect__ZGVdN4v_log10) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core_avx2.S new file mode 100644 index 0000000000..2c15645fc2 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log104_core_avx2.S @@ -0,0 +1,3782 @@ +/* Function log10 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: + * + * Get short reciprocal approximation Rcp ~ 1/mantissa(x) + * R = Rcp*x - 1.0 + * log10(x) = k*log10(2.0) - log10(Rcp) + poly_approximation(R) + * log10(Rcp) is tabulated + * + * + */ + +#include + + .text + .section .text.avx2,"ax",@progbits +ENTRY(_ZGVdN4v_log10_avx2) + pushq %rbp + cfi_def_cfa_offset(16) + movq %rsp, %rbp + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + andq $-64, %rsp + subq $384, %rsp + lea -4222912+__svml_dlog10_data_internal(%rip), %rax + vmovapd %ymm0, %ymm3 + +/* preserve mantissa, set input exponent to 2^(-10) */ + vandpd 8704+__svml_dlog10_data_internal(%rip), %ymm3, %ymm4 + vorpd 8768+__svml_dlog10_data_internal(%rip), %ymm4, %ymm2 + +/* reciprocal approximation good to at least 11 bits */ + vcvtpd2ps %ymm2, %xmm5 + +/* exponent bits */ + vpsrlq $20, %ymm3, %ymm7 + vmovups %ymm8, 32(%rsp) + vmovups %ymm9, 96(%rsp) + vmovups %ymm15, 320(%rsp) + .cfi_escape 0x10, 0xdb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe2, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x22 + +/* exponent*log(2.0) */ + vmovupd 9280+__svml_dlog10_data_internal(%rip), %ymm15 + vmovups %ymm12, 224(%rsp) + vmovups %ymm10, 160(%rsp) + vmovups %ymm13, 256(%rsp) + vmovups %ymm11, 192(%rsp) + vmovups %ymm14, 288(%rsp) + vrcpps %xmm5, %xmm6 + +/* check range */ + vcmplt_oqpd 8832+__svml_dlog10_data_internal(%rip), %ymm3, %ymm5 + vcvtps2pd %xmm6, %ymm1 + vcmpnle_uqpd 8896+__svml_dlog10_data_internal(%rip), %ymm3, %ymm6 + +/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ + vroundpd $0, %ymm1, %ymm1 + .cfi_escape 0x10, 0xdd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xde, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdf, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe0, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe1, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xff, 0xff, 0xff, 0x22 + vorpd %ymm6, %ymm5, %ymm8 + +/* combine and get argument value range mask */ + vmovmskpd %ymm8, %edx + +/* argument reduction */ + vfmsub213pd 9088+__svml_dlog10_data_internal(%rip), %ymm1, %ymm2 + +/* polynomial */ + vmovupd 8512+__svml_dlog10_data_internal(%rip), %ymm8 + vmovupd 8576+__svml_dlog10_data_internal(%rip), %ymm5 + +/* + * prepare table index + * table lookup + */ + vpsrlq $40, %ymm1, %ymm9 + vmulpd %ymm2, %ymm2, %ymm6 + vfmadd213pd 8544+__svml_dlog10_data_internal(%rip), %ymm2, %ymm8 + vfmadd213pd 8608+__svml_dlog10_data_internal(%rip), %ymm2, %ymm5 + vmulpd 8640+__svml_dlog10_data_internal(%rip), %ymm2, %ymm2 + vcmplt_oqpd %ymm1, %ymm15, %ymm1 + vfmadd213pd %ymm5, %ymm6, %ymm8 + vandpd 9344+__svml_dlog10_data_internal(%rip), %ymm1, %ymm15 + vfmadd213pd %ymm2, %ymm6, %ymm8 + vextractf128 $1, %ymm9, %xmm12 + vmovd %xmm9, %ecx + vmovd %xmm12, %r9d + movslq %ecx, %rcx + vpextrd $2, %xmm9, %r8d + movslq %r9d, %r9 + vpextrd $2, %xmm12, %r10d + movslq %r8d, %r8 + movslq %r10d, %r10 + vmovsd (%rax,%rcx), %xmm10 + vmovsd (%rax,%r9), %xmm13 + vmovhpd (%rax,%r8), %xmm10, %xmm11 + vmovhpd (%rax,%r10), %xmm13, %xmm14 + vextractf128 $1, %ymm7, %xmm0 + vshufps $221, %xmm0, %xmm7, %xmm4 + +/* biased exponent in DP format */ + vcvtdq2pd %xmm4, %ymm0 + vorpd 9408+__svml_dlog10_data_internal(%rip), %ymm15, %ymm4 + vsubpd %ymm4, %ymm0, %ymm0 + vmulpd 9472+__svml_dlog10_data_internal(%rip), %ymm0, %ymm9 + vinsertf128 $1, %xmm14, %ymm11, %ymm7 + +/* reconstruction */ + vaddpd %ymm8, %ymm7, %ymm0 + vaddpd %ymm0, %ymm9, %ymm0 + testl %edx, %edx + jne L(2) + +L(1): + vmovups 32(%rsp), %ymm8 + cfi_restore(91) + vmovups 96(%rsp), %ymm9 + cfi_restore(92) + vmovups 160(%rsp), %ymm10 + cfi_restore(93) + vmovups 192(%rsp), %ymm11 + cfi_restore(94) + vmovups 224(%rsp), %ymm12 + cfi_restore(95) + vmovups 256(%rsp), %ymm13 + cfi_restore(96) + vmovups 288(%rsp), %ymm14 + cfi_restore(97) + vmovups 320(%rsp), %ymm15 + cfi_restore(98) + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + .cfi_escape 0x10, 0xdb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xde, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdf, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe0, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe1, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe2, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x22 + +L(2): + vmovupd %ymm3, 64(%rsp) + vmovupd %ymm0, 128(%rsp) + je L(1) + xorl %eax, %eax + vzeroupper + movq %rsi, 8(%rsp) + movq %rdi, (%rsp) + movq %r12, 24(%rsp) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x88, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x98, 0xfe, 0xff, 0xff, 0x22 + movl %eax, %r12d + movq %r13, 16(%rsp) + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x90, 0xfe, 0xff, 0xff, 0x22 + movl %edx, %r13d + +L(3): + btl %r12d, %r13d + jc L(5) + +L(4): + incl %r12d + cmpl $4, %r12d + jl L(3) + movq 8(%rsp), %rsi + cfi_restore(4) + movq (%rsp), %rdi + cfi_restore(5) + movq 24(%rsp), %r12 + cfi_restore(12) + movq 16(%rsp), %r13 + cfi_restore(13) + vmovupd 128(%rsp), %ymm0 + jmp L(1) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x88, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x98, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x90, 0xfe, 0xff, 0xff, 0x22 + +L(5): + lea 64(%rsp,%r12,8), %rdi + lea 128(%rsp,%r12,8), %rsi + call __svml_dlog10_cout_rare_internal + jmp L(4) + +END(_ZGVdN4v_log10_avx2) + + .align 16,0x90 + +__svml_dlog10_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 6(%rdi), %edx + andl $32752, %edx + cmpl $32752, %edx + je L(11) + movsd (%rdi), %xmm2 + xorl %ecx, %ecx + movsd %xmm2, -8(%rsp) + movzwl -2(%rsp), %edx + testl $32752, %edx + jne L(6) + movsd 1600+__dlog10_la_CoutTab(%rip), %xmm0 + movl $-60, %ecx + mulsd %xmm0, %xmm2 + movsd %xmm2, -8(%rsp) + +L(6): + movsd 1608+__dlog10_la_CoutTab(%rip), %xmm0 + comisd %xmm0, %xmm2 + jbe L(8) + movaps %xmm2, %xmm1 + subsd .FLT_89(%rip), %xmm1 + movsd %xmm1, -16(%rsp) + andb $127, -9(%rsp) + movsd -16(%rsp), %xmm0 + comisd 1592+__dlog10_la_CoutTab(%rip), %xmm0 + jbe L(7) + movsd %xmm2, -16(%rsp) + pxor %xmm7, %xmm7 + movzwl -10(%rsp), %edi + lea __dlog10_la_CoutTab(%rip), %r10 + andl $-32753, %edi + addl $16368, %edi + movw %di, -10(%rsp) + movsd -16(%rsp), %xmm3 + movaps %xmm3, %xmm1 + movaps %xmm3, %xmm2 + movsd 1688+__dlog10_la_CoutTab(%rip), %xmm5 + movzwl -2(%rsp), %edx + andl $32752, %edx + addsd 1576+__dlog10_la_CoutTab(%rip), %xmm1 + addsd 1584+__dlog10_la_CoutTab(%rip), %xmm2 + movsd %xmm1, -24(%rsp) + movl -24(%rsp), %r8d + movsd %xmm2, -24(%rsp) + andl $127, %r8d + movsd -24(%rsp), %xmm8 + movsd 1560+__dlog10_la_CoutTab(%rip), %xmm9 + movsd 1568+__dlog10_la_CoutTab(%rip), %xmm0 + shrl $4, %edx + subsd 1584+__dlog10_la_CoutTab(%rip), %xmm8 + lea (%r8,%r8,2), %r9d + movsd (%r10,%r9,8), %xmm6 + lea -1023(%rcx,%rdx), %ecx + cvtsi2sd %ecx, %xmm7 + subsd %xmm8, %xmm3 + mulsd %xmm6, %xmm8 + mulsd %xmm7, %xmm9 + subsd 1624+__dlog10_la_CoutTab(%rip), %xmm8 + mulsd %xmm3, %xmm6 + mulsd %xmm0, %xmm7 + addsd 8(%r10,%r9,8), %xmm9 + addsd 16(%r10,%r9,8), %xmm7 + addsd %xmm8, %xmm9 + movaps %xmm8, %xmm4 + addsd %xmm6, %xmm4 + mulsd %xmm4, %xmm5 + addsd 1680+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1672+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1664+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1656+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1648+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1640+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1632+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm5, %xmm8 + mulsd %xmm6, %xmm5 + addsd %xmm5, %xmm7 + addsd %xmm6, %xmm7 + addsd %xmm7, %xmm8 + addsd %xmm8, %xmm9 + movsd %xmm9, (%rsi) + ret + +L(7): + movsd 1624+__dlog10_la_CoutTab(%rip), %xmm0 + mulsd %xmm0, %xmm1 + movsd 1688+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1680+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1672+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1664+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1656+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1648+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1640+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1632+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd %xmm1, %xmm2 + movsd %xmm2, (%rsi) + ret + +L(8): + ucomisd %xmm0, %xmm2 + jp L(9) + je L(10) + +L(9): + divsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + movl $1, %eax + ret + +L(10): + movsd 1616+__dlog10_la_CoutTab(%rip), %xmm1 + movl $2, %eax + xorps .FLT_88(%rip), %xmm1 + divsd %xmm0, %xmm1 + movsd %xmm1, (%rsi) + ret + +L(11): + movb 7(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je L(13) + +L(12): + movsd (%rdi), %xmm0 + mulsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + ret + +L(13): + testl $1048575, 4(%rdi) + jne L(12) + cmpl $0, (%rdi) + jne L(12) + movsd 1608+__dlog10_la_CoutTab(%rip), %xmm0 + movl $1, %eax + divsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + ret + + cfi_endproc + + .type __svml_dlog10_cout_rare_internal,@function + .size __svml_dlog10_cout_rare_internal,.-__svml_dlog10_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_dlog10_data_internal: + .long 1190572160 + .long 3228777073 + .long 3860447744 + .long 3189665916 + .long 1198987632 + .long 3228777077 + .long 3228397393 + .long 3189668294 + .long 1168821104 + .long 3228777081 + .long 637194908 + .long 3189668066 + .long 1100245360 + .long 3228777085 + .long 133785915 + .long 3189667542 + .long 993432048 + .long 3228777089 + .long 3017828443 + .long 3189667588 + .long 848551680 + .long 3228777093 + .long 560605178 + .long 3189668289 + .long 665773664 + .long 3228777097 + .long 3849538177 + .long 3189667548 + .long 445266208 + .long 3228777101 + .long 3804908986 + .long 3189667886 + .long 187196464 + .long 3228777105 + .long 3516966431 + .long 3189667858 + .long 4186697744 + .long 3228777108 + .long 3052190817 + .long 3189667809 + .long 3854000384 + .long 3228777112 + .long 1554781574 + .long 3189667427 + .long 3484235504 + .long 3228777116 + .long 4153839410 + .long 3189667384 + .long 3077565856 + .long 3228777120 + .long 4000768869 + .long 3189667904 + .long 2634153136 + .long 3228777124 + .long 4244738174 + .long 3189668339 + .long 2154157984 + .long 3228777128 + .long 3014247306 + .long 3189667771 + .long 1637739952 + .long 3228777132 + .long 1906045981 + .long 3189667650 + .long 1085057568 + .long 3228777136 + .long 3987700171 + .long 3189668284 + .long 496268368 + .long 3228777140 + .long 1674280096 + .long 3189667373 + .long 4166496080 + .long 3228777143 + .long 2078815235 + .long 3189667744 + .long 3505961600 + .long 3228777147 + .long 4286802640 + .long 3189667683 + .long 2809786672 + .long 3228777151 + .long 1913564473 + .long 3189667639 + .long 2078124752 + .long 3228777155 + .long 2693682663 + .long 3189667702 + .long 1311128304 + .long 3228777159 + .long 1012063542 + .long 3189668158 + .long 508948832 + .long 3228777163 + .long 2489929809 + .long 3189667978 + .long 3966704144 + .long 3228777166 + .long 2165614611 + .long 3189667408 + .long 3094609184 + .long 3228777170 + .long 2488783422 + .long 3189667472 + .long 2187779856 + .long 3228777174 + .long 2723126436 + .long 3189667428 + .long 1246363792 + .long 3228777178 + .long 3017034520 + .long 3189668359 + .long 270507744 + .long 3228777182 + .long 1972662349 + .long 3189667544 + .long 3555324736 + .long 3228777185 + .long 898998658 + .long 3189668182 + .long 2511025072 + .long 3228777189 + .long 2160314027 + .long 3189667608 + .long 1432719952 + .long 3228777193 + .long 1911887828 + .long 3189668033 + .long 320552432 + .long 3228777197 + .long 3280422502 + .long 3189667818 + .long 3469631920 + .long 3228777200 + .long 3027884278 + .long 3189668109 + .long 2290165072 + .long 3228777204 + .long 3517602960 + .long 3189668197 + .long 1077259536 + .long 3228777208 + .long 3013130823 + .long 3189668046 + .long 4126022080 + .long 3228777211 + .long 3235689898 + .long 3189667740 + .long 2846656704 + .long 3228777215 + .long 87643117 + .long 3189667953 + .long 1534268448 + .long 3228777219 + .long 754951962 + .long 3189668360 + .long 188994208 + .long 3228777223 + .long 3023581101 + .long 3189668100 + .long 3105937296 + .long 3228777226 + .long 1490072819 + .long 3189668276 + .long 1695298320 + .long 3228777230 + .long 3738440902 + .long 3189668304 + .long 252178944 + .long 3228777234 + .long 897194307 + .long 3189667388 + .long 3071679952 + .long 3228777237 + .long 195484330 + .long 3189668024 + .long 1563999488 + .long 3228777241 + .long 3795554301 + .long 3189668248 + .long 24236736 + .long 3228777245 + .long 2858806924 + .long 3189668212 + .long 2747490080 + .long 3228777248 + .long 4259795627 + .long 3189667532 + .long 1143955184 + .long 3228777252 + .long 4279885499 + .long 3189667764 + .long 3803696144 + .long 3228777255 + .long 3997664578 + .long 3189667698 + .long 2136907056 + .long 3228777259 + .long 2176158532 + .long 3189667869 + .long 438683136 + .long 3228777263 + .long 227964261 + .long 3189667893 + .long 3004118816 + .long 3228777266 + .long 2296676690 + .long 3189667896 + .long 1243405872 + .long 3228777270 + .long 2079834385 + .long 3189667894 + .long 3746604496 + .long 3228777273 + .long 3850151037 + .long 3189668185 + .long 1923904960 + .long 3228777277 + .long 574763554 + .long 3189667699 + .long 70398640 + .long 3228777281 + .long 3827982506 + .long 3189667452 + .long 2481176176 + .long 3228777284 + .long 1146808857 + .long 3189667869 + .long 566425600 + .long 3228777288 + .long 4238446104 + .long 3189668130 + .long 2916203392 + .long 3228777291 + .long 3553887815 + .long 3189667582 + .long 940696080 + .long 3228777295 + .long 1221192380 + .long 3189668153 + .long 3229958720 + .long 3228777298 + .long 2271570828 + .long 3189667556 + .long 1194176400 + .long 3228777302 + .long 3002536483 + .long 3189667850 + .long 3423402736 + .long 3228777305 + .long 2434838684 + .long 3189667608 + .long 1327821424 + .long 3228777309 + .long 2687777298 + .long 3189667396 + .long 3497484640 + .long 3228777312 + .long 2749657917 + .long 3189668082 + .long 1342574720 + .long 3228777316 + .long 3002546917 + .long 3189668115 + .long 3453142464 + .long 3228777319 + .long 3498283957 + .long 3189667970 + .long 1239368816 + .long 3228777323 + .long 455121273 + .long 3189667422 + .long 3291303200 + .long 3228777326 + .long 2621841620 + .long 3189667932 + .long 3012883008 + .long 3228777333 + .long 2362501462 + .long 3189667975 + .long 2618787376 + .long 3228777340 + .long 1091754251 + .long 3189667994 + .long 2109911280 + .long 3228777347 + .long 193599334 + .long 3189668101 + .long 1487139360 + .long 3228777354 + .long 3757852586 + .long 3189667728 + .long 751346048 + .long 3228777361 + .long 1167306858 + .long 3189667607 + .long 4198363056 + .long 3228777367 + .long 3727503052 + .long 3189667447 + .long 3239110320 + .long 3228777374 + .long 4101491224 + .long 3189667535 + .long 2169399936 + .long 3228777381 + .long 1682828411 + .long 3189668088 + .long 990067152 + .long 3228777388 + .long 325154957 + .long 3189667406 + .long 3996905008 + .long 3228777394 + .long 333920478 + .long 3189668041 + .long 2600795440 + .long 3228777401 + .long 1868291498 + .long 3189667430 + .long 1097513040 + .long 3228777408 + .long 2092796598 + .long 3189667816 + .long 3782823440 + .long 3228777414 + .long 2342635878 + .long 3189667569 + .long 2067581456 + .long 3228777421 + .long 2489432283 + .long 3189667708 + .long 247535056 + .long 3228777428 + .long 2233925548 + .long 3189668023 + .long 2618423584 + .long 3228777434 + .long 2884435678 + .long 3189668162 + .long 591076000 + .long 3228777441 + .long 2793733516 + .long 3189667544 + .long 2756182032 + .long 3228777447 + .long 726899401 + .long 3189668194 + .long 524554032 + .long 3228777454 + .long 3888914666 + .long 3189668216 + .long 2486865376 + .long 3228777460 + .long 2627594277 + .long 3189667420 + .long 53912208 + .long 3228777467 + .long 2333314786 + .long 3189667677 + .long 1816352000 + .long 3228777473 + .long 860249135 + .long 3189668031 + .long 3479932544 + .long 3228777479 + .long 1333576769 + .long 3189667862 + .long 750393936 + .long 3228777486 + .long 3863808803 + .long 3189667876 + .long 2218370608 + .long 3228777492 + .long 988274049 + .long 3189667895 + .long 3589587648 + .long 3228777498 + .long 1363020542 + .long 3189667588 + .long 569762768 + .long 3228777505 + .long 2860785679 + .long 3189668116 + .long 1749508368 + .long 3228777511 + .long 3454164214 + .long 3189667505 + .long 2834527744 + .long 3228777517 + .long 551781933 + .long 3189668193 + .long 3825484512 + .long 3228777523 + .long 2204991099 + .long 3189668076 + .long 428068000 + .long 3228777530 + .long 330816187 + .long 3189667835 + .long 1232862576 + .long 3228777536 + .long 1875584004 + .long 3189667900 + .long 1945543984 + .long 3228777542 + .long 3147029736 + .long 3189667368 + .long 2566748560 + .long 3228777548 + .long 2759544833 + .long 3189667927 + .long 3097106128 + .long 3228777554 + .long 2378335007 + .long 3189667440 + .long 3537239968 + .long 3228777560 + .long 59134449 + .long 3189667766 + .long 3887767008 + .long 3228777566 + .long 2237380018 + .long 3189668142 + .long 4149297872 + .long 3228777572 + .long 2899689733 + .long 3189667692 + .long 27469632 + .long 3228777579 + .long 2818642709 + .long 3189667832 + .long 112815152 + .long 3228777585 + .long 4092579806 + .long 3189667420 + .long 110959312 + .long 3228777591 + .long 936570796 + .long 3189668056 + .long 22488368 + .long 3228777597 + .long 365917996 + .long 3189668022 + .long 4142949952 + .long 3228777602 + .long 3149756965 + .long 3189667408 + .long 3882983968 + .long 3228777608 + .long 4081670258 + .long 3189668028 + .long 3538126528 + .long 3228777614 + .long 1719873156 + .long 3189668130 + .long 3108940752 + .long 3228777620 + .long 3284322898 + .long 3189668289 + .long 2595984192 + .long 3228777626 + .long 1642430589 + .long 3189668010 + .long 1999808880 + .long 3228777632 + .long 4232900950 + .long 3189667360 + .long 1320961392 + .long 3228777638 + .long 346567365 + .long 3189667513 + .long 559982960 + .long 3228777644 + .long 2138178062 + .long 3189668130 + .long 4012376832 + .long 3228777649 + .long 2536292360 + .long 3189667756 + .long 3088739088 + .long 3228777655 + .long 2310947316 + .long 3189668224 + .long 2084562592 + .long 3228777661 + .long 719337470 + .long 3189667732 + .long 1000367760 + .long 3228777667 + .long 2925814745 + .long 3189668182 + .long 4131637328 + .long 3228777672 + .long 2769058114 + .long 3189668120 + .long 2888947152 + .long 3228777678 + .long 2397746692 + .long 3189667888 + .long 1567770080 + .long 3228777684 + .long 1319666757 + .long 3189667549 + .long 168606816 + .long 3228777690 + .long 3249166601 + .long 3189667815 + .long 2986920608 + .long 3228777695 + .long 3117551188 + .long 3189667844 + .long 1433268080 + .long 3228777701 + .long 2392446108 + .long 3189668088 + .long 4098070400 + .long 3228777706 + .long 1952984424 + .long 3189667965 + .long 2391874944 + .long 3228777712 + .long 3260016359 + .long 3189667565 + .long 610126416 + .long 3228777718 + .long 1206683346 + .long 3189668275 + .long 3048265088 + .long 3228777723 + .long 3467821979 + .long 3189668220 + .long 1116824880 + .long 3228777729 + .long 3688655521 + .long 3189667898 + .long 3406204528 + .long 3228777734 + .long 3255713182 + .long 3189667556 + .long 1326929264 + .long 3228777740 + .long 200527713 + .long 3189667591 + .long 3469389248 + .long 3228777745 + .long 1129326388 + .long 3189667868 + .long 1244101248 + .long 3228777751 + .long 308865650 + .long 3189668017 + .long 3241447056 + .long 3228777756 + .long 3090939005 + .long 3189667668 + .long 871935152 + .long 3228777762 + .long 3265000937 + .long 3189667670 + .long 2725939152 + .long 3228777767 + .long 4229796659 + .long 3189668178 + .long 213959504 + .long 3228777773 + .long 1991139447 + .long 3189667724 + .long 1926361824 + .long 3228777778 + .long 2528808771 + .long 3189668376 + .long 3568606000 + .long 3228777783 + .long 4260639448 + .long 3189667546 + .long 846147968 + .long 3228777789 + .long 806895635 + .long 3189668179 + .long 2349341824 + .long 3228777794 + .long 3346322191 + .long 3189667388 + .long 3783635920 + .long 3228777799 + .long 175610890 + .long 3189667587 + .long 854474928 + .long 3228777805 + .long 2938776958 + .long 3189668104 + .long 2152201728 + .long 3228777810 + .long 2503702909 + .long 3189668036 + .long 3382253648 + .long 3228777815 + .long 990471545 + .long 3189668020 + .long 250064432 + .long 3228777821 + .long 2919909380 + .long 3189667876 + .long 1345966144 + .long 3228777826 + .long 3002840896 + .long 3189668306 + .long 2375385488 + .long 3228777831 + .long 3730416038 + .long 3189667426 + .long 3338712928 + .long 3228777836 + .long 1372953258 + .long 3189667506 + .long 4236335536 + .long 3228777841 + .long 3486643335 + .long 3189668352 + .long 773669728 + .long 3228777847 + .long 3527808638 + .long 3189667828 + .long 1541030400 + .long 3228777852 + .long 1323886332 + .long 3189667450 + .long 2243827264 + .long 3228777857 + .long 3473574637 + .long 3189667708 + .long 2882434080 + .long 3228777862 + .long 2116524762 + .long 3189667453 + .long 3457221328 + .long 3228777867 + .long 3472145296 + .long 3189668357 + .long 3968556352 + .long 3228777872 + .long 1399438939 + .long 3189668087 + .long 121835984 + .long 3228777878 + .long 1630440586 + .long 3189667769 + .long 507355824 + .long 3228777883 + .long 414821867 + .long 3189668165 + .long 830506528 + .long 3228777888 + .long 1651489076 + .long 3189667856 + .long 1091642960 + .long 3228777893 + .long 1914960493 + .long 3189667544 + .long 1291116960 + .long 3228777898 + .long 1585226677 + .long 3189668172 + .long 1429277424 + .long 3228777903 + .long 1458536815 + .long 3189667992 + .long 1506470256 + .long 3228777908 + .long 5177277 + .long 3189667794 + .long 1523038448 + .long 3228777913 + .long 2100423580 + .long 3189667910 + .long 1479322112 + .long 3228777918 + .long 2766296967 + .long 3189668266 + .long 1375658528 + .long 3228777923 + .long 3908110271 + .long 3189667373 + .long 1212382096 + .long 3228777928 + .long 1728734206 + .long 3189667440 + .long 989824464 + .long 3228777933 + .long 2721564364 + .long 3189668188 + .long 708314544 + .long 3228777938 + .long 1548992985 + .long 3189667813 + .long 368178464 + .long 3228777943 + .long 102841028 + .long 3189668008 + .long 4264706992 + .long 3228777947 + .long 975947285 + .long 3189667700 + .long 3808286304 + .long 3228777952 + .long 3025865597 + .long 3189668024 + .long 3294201856 + .long 3228777957 + .long 905114809 + .long 3189668054 + .long 2722769184 + .long 3228777962 + .long 3281428766 + .long 3189667672 + .long 2094301216 + .long 3228777967 + .long 2831959372 + .long 3189668375 + .long 1409108384 + .long 3228777972 + .long 2859726358 + .long 3189667900 + .long 667498528 + .long 3228777977 + .long 3483539044 + .long 3189668146 + .long 4164744336 + .long 3228777981 + .long 643592870 + .long 3189667709 + .long 3311214096 + .long 3228777986 + .long 3888135264 + .long 3189667701 + .long 2402175552 + .long 3228777991 + .long 1565708850 + .long 3189668342 + .long 1437926768 + .long 3228777996 + .long 3880143694 + .long 3189667559 + .long 418763344 + .long 3228778001 + .long 2177554551 + .long 3189667774 + .long 3639945856 + .long 3228778005 + .long 632683322 + .long 3189668317 + .long 2511830656 + .long 3228778010 + .long 1595152623 + .long 3189668068 + .long 1329673632 + .long 3228778015 + .long 1921601627 + .long 3189668075 + .long 93761104 + .long 3228778020 + .long 1757445293 + .long 3189668004 + .long 3099344416 + .long 3228778024 + .long 1435123721 + .long 3189667691 + .long 1756770768 + .long 3228778029 + .long 783914014 + .long 3189667649 + .long 361287040 + .long 3228778034 + .long 2235532382 + .long 3189667506 + .long 3208137904 + .long 3228778038 + .long 1904486204 + .long 3189667498 + .long 1707663968 + .long 3228778043 + .long 41908474 + .long 3189667890 + .long 155105584 + .long 3228778048 + .long 2107716085 + .long 3189668380 + .long 2845700992 + .long 3228778052 + .long 3156927676 + .long 3189667488 + .long 1189784368 + .long 3228778057 + .long 4047204189 + .long 3189668063 + .long 3777557072 + .long 3228778061 + .long 577628716 + .long 3189667418 + .long 2019349136 + .long 3228778066 + .long 2610467089 + .long 3189667920 + .long 210390496 + .long 3228778071 + .long 2766766141 + .long 3189668118 + .long 2645909040 + .long 3228778075 + .long 3243727052 + .long 3189668176 + .long 736228768 + .long 3228778080 + .long 3122320416 + .long 3189668130 + .long 3071540880 + .long 3228778084 + .long 3131821814 + .long 3189668172 + .long 1062165440 + .long 3228778089 + .long 3213377517 + .long 3189667895 + .long 3298289744 + .long 3228778093 + .long 2564668383 + .long 3189667569 + .long 1190229968 + .long 3228778098 + .long 3238426468 + .long 3189668376 + .long 3328169632 + .long 3228778102 + .long 1168702877 + .long 3189667512 + .long 1122421104 + .long 3228778107 + .long 19789062 + .long 3189667604 + .long 3163164128 + .long 3228778111 + .long 1630085837 + .long 3189667685 + .long 860707408 + .long 3228778116 + .long 4114762240 + .long 3189667464 + .long 2805226992 + .long 3228778120 + .long 18835043 + .long 3189667485 + .long 407027936 + .long 3228778125 + .long 1254882039 + .long 3189668241 + .long 2256282720 + .long 3228778129 + .long 1578671063 + .long 3189668264 + .long 4058260128 + .long 3228778133 + .long 2087871538 + .long 3189668330 + .long 1518227216 + .long 3228778138 + .long 1874562670 + .long 3189667466 + .long 3226351136 + .long 3228778142 + .long 1975306748 + .long 3189668156 + .long 592928208 + .long 3228778147 + .long 2027557844 + .long 3189668223 + .long 2208122192 + .long 3228778151 + .long 3385698680 + .long 3189668056 + .long 3777193280 + .long 3228778155 + .long 2370310143 + .long 3189667586 + .long 1005399968 + .long 3228778160 + .long 259325820 + .long 3189668365 + .long 2482901056 + .long 3228778164 + .long 780809723 + .long 3189667443 + .long 3914951728 + .long 3228778168 + .long 212773867 + .long 3189667618 + .long 1006805600 + .long 3228778173 + .long 951469551 + .long 3189668212 + .long 2348616576 + .long 3228778177 + .long 2086655720 + .long 3189668128 + .long 3645635056 + .long 3228778181 + .long 2113468742 + .long 3189667868 + .long 603109872 + .long 3228778186 + .long 1652875995 + .long 3189667443 + .long 1811190160 + .long 3228778190 + .long 2629878773 + .long 3189668368 + .long 2975121696 + .long 3228778194 + .long 346123600 + .long 3189667455 + .long 4095115920 + .long 3228778198 + .long 3526019824 + .long 3189667996 + .long 876415552 + .long 3228778203 + .long 1439312045 + .long 3189667395 + .long 1909163616 + .long 3228778207 + .long 3349683269 + .long 3189668324 + .long 2898599856 + .long 3228778211 + .long 649479362 + .long 3189667358 + .long 3844929728 + .long 3228778215 + .long 2676997587 + .long 3189668158 + .long 453390032 + .long 3228778220 + .long 848895008 + .long 3189668036 + .long 1314117952 + .long 3228778224 + .long 3492148440 + .long 3189668045 + .long 2132347376 + .long 3228778228 + .long 281429102 + .long 3189667715 + .long 2908278048 + .long 3228778232 + .long 2940038679 + .long 3189667953 + .long 3642108336 + .long 3228778236 + .long 3909547671 + .long 3189667808 + .long 39067888 + .long 3228778241 + .long 3920787602 + .long 3189668378 + .long 689286912 + .long 3228778245 + .long 1690865565 + .long 3189667500 + .long 1297992288 + .long 3228778249 + .long 2169866692 + .long 3189667738 + .long 1865376896 + .long 3228778253 + .long 967083596 + .long 3189667983 + .long 2391632256 + .long 3228778257 + .long 1361458469 + .long 3189668348 + .long 2876948576 + .long 3228778261 + .long 32611984 + .long 3189667893 + .long 3321514720 + .long 3228778265 + .long 2193827755 + .long 3189667454 + .long 3725518240 + .long 3228778269 + .long 2245419299 + .long 3189668375 + .long 4089145456 + .long 3228778273 + .long 3497133018 + .long 3189668150 + .long 117614048 + .long 3228778278 + .long 175818393 + .long 3189668353 + .long 401042352 + .long 3228778282 + .long 3839976210 + .long 3189668213 + .long 644645552 + .long 3228778286 + .long 3041010480 + .long 3189667412 + .long 848604848 + .long 3228778290 + .long 2760940853 + .long 3189667832 + .long 1013100256 + .long 3228778294 + .long 2385564198 + .long 3189668140 + .long 1138310560 + .long 3228778298 + .long 2892472831 + .long 3189667574 + .long 1224413296 + .long 3228778302 + .long 781676890 + .long 3189667676 + .long 1271584832 + .long 3228778306 + .long 3578454272 + .long 3189667868 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 0 + .long 2256045239 + .long 3209413770 + .long 2491592457 + .long 3210460574 + .long 1804910333 + .long 3211053321 + .long 1914826022 + .long 3211505620 + .long 3803025062 + .long 3211872665 + .long 1674748349 + .long 3212097941 + .long 1798374224 + .long 3212322782 + .long 2768032015 + .long 3212547190 + .long 3136444289 + .long 3212771167 + .long 2855105875 + .long 3212915789 + .long 2332612951 + .long 3213027349 + .long 1363424900 + .long 3213138696 + .long 3437629661 + .long 3213249830 + .long 3435456176 + .long 3213360753 + .long 512327647 + .long 3213471466 + .long 2393978768 + .long 3213581968 + .long 3901767770 + .long 3213692261 + .long 4132692718 + .long 3213802346 + .long 1082284973 + .long 3213898832 + .long 2823056504 + .long 3213953667 + .long 366152305 + .long 3214008400 + .long 3959556563 + .long 3214063029 + .long 2367110801 + .long 3214117557 + .long 1523289056 + .long 3214171983 + .long 3058430271 + .long 3214226307 + .long 3839215 + .long 3214280531 + .long 2561657861 + .long 3214334653 + .long 3745193976 + .long 3214388675 + .long 853823952 + .long 3214442598 + .long 4062993129 + .long 3214496420 + .long 2064542556 + .long 3214550144 + .long 721479184 + .long 3214603769 + .long 1593203319 + .long 3214657295 + .long 1935571978 + .long 3214710723 + .long 3290896245 + .long 3214764053 + .long 2898068879 + .long 3214817286 + .long 2282560537 + .long 3214870422 + .long 2961513548 + .long 3214923461 + .long 1074417563 + .long 3214955210 + .long 2820079616 + .long 3214981633 + .long 1021551109 + .long 3215008009 + .long 716013687 + .long 3215034337 + .long 2641666110 + .long 3215060617 + .long 3237753164 + .long 3215086850 + .long 3234528909 + .long 3215113036 + .long 3358317786 + .long 3215139175 + .long 36575458 + .long 3215165268 + .long 2577785893 + .long 3215191313 + .long 3106717932 + .long 3215217312 + .long 2334256463 + .long 3215243265 + .long 967494986 + .long 3215269172 + .long 4004729818 + .long 3215295032 + .long 3555617588 + .long 3215320847 + .long 316038151 + .long 3215346617 + .long 3568120799 + .long 3215372340 + .long 1115499161 + .long 3215398019 + .long 2233009907 + .long 3215423652 + .long 3306979906 + .long 3215449240 + .long 720153405 + .long 3215474784 + .long 3736618996 + .long 3215500282 + .long 142096100 + .long 3215525737 + .long 3488599868 + .long 3215551146 + .long 1554858050 + .long 3215576512 + .long 3590975466 + .long 3215601833 + .long 1663752343 + .long 3215627111 + .long 721479184 + .long 3215652345 + .long 1414091172 + .long 3215677535 + .long 93191556 + .long 3215702682 + .long 1696976726 + .long 3215727785 + .long 2570390009 + .long 3215752845 + .long 3350046349 + .long 3215777862 + .long 374320308 + .long 3215802837 + .long 2863237644 + .long 3215827768 + .long 2853726453 + .long 3215852657 + .long 969442960 + .long 3215877504 + .long 2125826056 + .long 3215902308 + .long 2645217056 + .long 3215927070 + .long 3141783046 + .long 3215951790 + .long 4226570871 + .long 3215976468 + .long 3253764118 + .long 3215991848 + .long 999795016 + .long 3216004146 + .long 4242218727 + .long 3216016422 + .long 395520918 + .long 3216028679 + .long 2642482782 + .long 3216040914 + .long 2689550894 + .long 3216053129 + .long 831618312 + .long 3216065324 + .long 1657067230 + .long 3216077498 + .long 1162876950 + .long 3216089652 + .long 3934502846 + .long 3216101785 + .long 1671049587 + .long 3216113899 + .long 3250051821 + .long 3216125992 + .long 367745354 + .long 3216138066 + .long 1898814972 + .long 3216150119 + .long 3831632753 + .long 3216162152 + .long 2153169263 + .long 3216174166 + .long 1438937368 + .long 3216186160 + .long 1968099508 + .long 3216198134 + .long 4018444062 + .long 3216210088 + .long 3571427061 + .long 3216222023 + .long 902115705 + .long 3216233939 + .long 579197221 + .long 3216245835 + .long 2875053055 + .long 3216257711 + .long 3765767585 + .long 3216269568 + .long 3521071355 + .long 3216281406 + .long 2409382351 + .long 3216293225 + .long 697814500 + .long 3216305025 + .long 2947153405 + .long 3216316805 + .long 831995525 + .long 3216328567 + .long 3205527541 + .long 3216340309 + .long 1739796226 + .long 3216352033 + .long 990487678 + .long 3216363738 + .long 1217066237 + .long 3216375424 + .long 2677749815 + .long 3216387091 + .long 1334550573 + .long 3216398740 + .long 1738184714 + .long 3216410370 + .long 4143178441 + .long 3216421981 + .long 212908442 + .long 3216433575 + .long 3084380679 + .long 3216445149 + .long 123597797 + .long 3216456706 + .long 170206973 + .long 3216468244 + .long 3472736381 + .long 3216479763 + .long 1688602678 + .long 3216491265 + .long 3653922191 + .long 3216502748 + .long 1023779914 + .long 3216514214 + .long 2631975180 + .long 3216525661 + .long 131290539 + .long 3216537091 + .long 2353237313 + .long 3216548502 + .long 948324365 + .long 3216559896 + .long 450836243 + .long 3216571272 + .long 1098971024 + .long 3216582630 + .long 3129814575 + .long 3216593970 + .long 2484380169 + .long 3216605293 + .long 3692517238 + .long 3216616598 + .long 2693048988 + .long 3216627886 + .long 4013648344 + .long 3216639156 + .long 3590975466 + .long 3216650409 + .long 1655586284 + .long 3216661645 + .long 2731939102 + .long 3216672863 + .long 2753499254 + .long 3216684064 + .long 1947647495 + .long 3216695248 + .long 540719148 + .long 3216706415 + .long 3052977802 + .long 3216717564 + .long 1118752477 + .long 3216728697 + .long 3551215000 + .long 3216739812 + .long 1982647887 + .long 3216750911 + .long 929221623 + .long 3216761993 + .long 611131637 + .long 3216773058 + .long 1247571711 + .long 3216784106 + .long 3056740043 + .long 3216795137 + .long 1960877976 + .long 3216806152 + .long 2471177857 + .long 3216817150 + .long 507919781 + .long 3216828132 + .long 580346667 + .long 3216839097 + .long 2901768203 + .long 3216850045 + .long 3389566649 + .long 3216860977 + .long 2255137180 + .long 3216871893 + .long 4003893595 + .long 3216882792 + .long 255404805 + .long 3216893676 + .long 4103138823 + .long 3216904542 + .long 2869828094 + .long 3216915393 + .long 1057147997 + .long 3216926228 + .long 3165853160 + .long 3216937046 + .long 810881035 + .long 3216947849 + .long 2786128388 + .long 3216958635 + .long 704718315 + .long 3216969406 + .long 3358743942 + .long 3216980160 + .long 2359535366 + .long 3216990899 + .long 2202435985 + .long 3217001622 + .long 3086938536 + .long 3217012329 + .long 916690285 + .long 3217023021 + .long 2239683676 + .long 3217032432 + .long 2690954374 + .long 3217037762 + .long 4057646264 + .long 3217043084 + .long 2142368519 + .long 3217048399 + .long 1337238495 + .long 3217053706 + .long 1738982326 + .long 3217059005 + .long 3443904681 + .long 3217064296 + .long 2252923910 + .long 3217069580 + .long 2556476367 + .long 3217074856 + .long 154649628 + .long 3217080125 + .long 3732021368 + .long 3217085385 + .long 497923366 + .long 3217090639 + .long 3431084121 + .long 3217095884 + .long 4034990935 + .long 3217101122 + .long 2402663310 + .long 3217106353 + .long 2921687961 + .long 3217111576 + .long 1389319216 + .long 3217116792 + .long 2192350480 + .long 3217122000 + .long 1127247302 + .long 3217127201 + .long 2580018809 + .long 3217132394 + .long 2346350743 + .long 3217137580 + .long 516509563 + .long 3217142759 + .long 1475344637 + .long 3217147930 + .long 1017388536 + .long 3217153094 + .long 3526728381 + .long 3217158250 + .long 502171511 + .long 3217163400 + .long 622018689 + .long 3217168542 + .long 3974262445 + .long 3217173676 + .long 2056589177 + .long 3217178804 + .long 3546185020 + .long 3217183924 + .long 4234966846 + .long 3217189037 + .long 4209453505 + .long 3217194143 + .long 3555800579 + .long 3217199242 + .long 2359802410 + .long 3217204334 + .long 706894115 + .long 3217209419 + .long 2977120889 + .long 3217214496 + .long 665270808 + .long 3217219567 + .long 2445647873 + .long 3217224630 + .long 4107302903 + .long 3217229686 + .long 1438937368 + .long 3217234736 + .long 3113807214 + .long 3217239778 + .long 624953709 + .long 3217244814 + .long 60313751 + .long 1069756916 + .long 2039124234 + .long 1069751894 + .long 3639817142 + .long 1069746879 + .long 485812347 + .long 1069741872 + .long 1085767695 + .long 1069736871 + .long 1063773387 + .long 1069731877 + .long 339219334 + .long 1069726890 + .long 3126793337 + .long 1069721909 + .long 756610100 + .long 1069716936 + .long 1738980508 + .long 1069711969 + .long 1699638774 + .long 1069707009 + .long 559609852 + .long 1069702056 + .long 2535207687 + .long 1069697109 + .long 3253131575 + .long 1069692169 + .long 2635366323 + .long 1069687236 + .long 604213229 + .long 1069682310 + .long 1377255668 + .long 1069677390 + .long 582455508 + .long 1069672477 + .long 2438020609 + .long 1069667570 + .long 2572533958 + .long 1069662670 + .long 909853896 + .long 1069657777 + .long 1669112469 + .long 1069652890 + .long 479811889 + .long 1069648010 + .long 1561692097 + .long 1069643136 + .long 544859953 + .long 1069638269 + .long 1649656813 + .long 1069633408 + .long 506787744 + .long 1069628554 + .long 1337189126 + .long 1069623706 + .long 4067125179 + .long 1069618864 + .long 33219107 + .long 1069614030 + .long 2047222611 + .long 1069609201 + .long 1446341380 + .long 1069604379 + .long 2452971930 + .long 1069599563 + .long 699863591 + .long 1069594754 + .long 409986179 + .long 1069589951 + .long 1511626604 + .long 1069585154 + .long 3933354665 + .long 1069580363 + .long 3309054273 + .long 1069575579 + .long 3862823860 + .long 1069570801 + .long 1229105731 + .long 1069566030 + .long 3927521083 + .long 1069561264 + .long 3298097489 + .long 1069556505 + .long 3566038531 + .long 1069551752 + .long 733771779 + .long 1069546492 + .long 147741522 + .long 1069537011 + .long 941119220 + .long 1069527542 + .long 2976542023 + .long 1069518085 + .long 1822213927 + .long 1069508641 + .long 1636804890 + .long 1069499209 + .long 2284546202 + .long 1069489789 + .long 3630195051 + .long 1069480381 + .long 1244064508 + .long 1069470986 + .long 3581890024 + .long 1069461602 + .long 1920055674 + .long 1069452231 + .long 420362572 + .long 1069442872 + .long 3245124339 + .long 1069433524 + .long 1672262586 + .long 1069424189 + .long 4160075380 + .long 1069414865 + .long 1987496281 + .long 1069405554 + .long 3613830132 + .long 1069396254 + .long 319012134 + .long 1069386967 + .long 563343667 + .long 1069377691 + .long 4217685989 + .long 1069368426 + .long 2563457725 + .long 1069359174 + .long 4062436141 + .long 1069349933 + .long 4291983603 + .long 1069340704 + .long 3124914285 + .long 1069331487 + .long 434524433 + .long 1069322282 + .long 389557226 + .long 1069313088 + .long 2864265763 + .long 1069303905 + .long 3438410662 + .long 1069294734 + .long 1987192267 + .long 1069285575 + .long 2681248272 + .long 1069276427 + .long 1101749478 + .long 1069267291 + .long 1420266631 + .long 1069258166 + .long 3513866211 + .long 1069249052 + .long 2965108111 + .long 1069239950 + .long 3946945232 + .long 1069230859 + .long 2042852013 + .long 1069221780 + .long 1426691339 + .long 1069212712 + .long 1977810406 + .long 1069203655 + .long 3576005764 + .long 1069194609 + .long 1806553800 + .long 1069185575 + .long 845110407 + .long 1069176552 + .long 572806897 + .long 1069167540 + .long 871215109 + .long 1069158539 + .long 1622345234 + .long 1069149549 + .long 2708643653 + .long 1069140570 + .long 4012990793 + .long 1069131602 + .long 1123731696 + .long 1069122646 + .long 2514543080 + .long 1069113700 + .long 3774627456 + .long 1069104765 + .long 493612919 + .long 1069095842 + .long 1146452959 + .long 1069086929 + .long 1323620609 + .long 1069078027 + .long 910975575 + .long 1069069136 + .long 4089762193 + .long 1069060255 + .long 2156738208 + .long 1069051386 + .long 3588943832 + .long 1069042527 + .long 3978928661 + .long 1069033679 + .long 3214618865 + .long 1069024842 + .long 1184347908 + .long 1069016016 + .long 2071821874 + .long 1069007200 + .long 1471215619 + .long 1068998395 + .long 3567040008 + .long 1068989600 + .long 3954270794 + .long 1068980816 + .long 2523248584 + .long 1068972043 + .long 3459676924 + .long 1068963280 + .long 2359718512 + .long 1068954528 + .long 3409862494 + .long 1068945786 + .long 2207053396 + .long 1068937055 + .long 2938558446 + .long 1068928334 + .long 1202096535 + .long 1068919624 + .long 1185705549 + .long 1068910924 + .long 2782838657 + .long 1068902234 + .long 1592362481 + .long 1068893555 + .long 1803457173 + .long 1068884886 + .long 3310712729 + .long 1068876227 + .long 1714127196 + .long 1068867579 + .long 1204006779 + .long 1068858941 + .long 1676062187 + .long 1068850313 + .long 3026374166 + .long 1068841695 + .long 856424459 + .long 1068833088 + .long 3652963247 + .long 1068824490 + .long 2723236352 + .long 1068815903 + .long 2259754591 + .long 1068807326 + .long 2160422882 + .long 1068798759 + .long 2323505847 + .long 1068790202 + .long 2647626118 + .long 1068781655 + .long 3031762665 + .long 1068773118 + .long 3375249122 + .long 1068764591 + .long 3577772136 + .long 1068756074 + .long 3539369713 + .long 1068747567 + .long 3160429578 + .long 1068739070 + .long 2341687551 + .long 1068730583 + .long 984225923 + .long 1068722106 + .long 3284439142 + .long 1068713638 + .long 554163028 + .long 1068705181 + .long 1285444256 + .long 1068696733 + .long 1085767695 + .long 1068688295 + .long 4152891319 + .long 1068679866 + .long 1800008162 + .long 1068671448 + .long 2520515836 + .long 1068663039 + .long 1923243906 + .long 1068654640 + .long 4207288842 + .long 1068646250 + .long 687176001 + .long 1068637871 + .long 4152596484 + .long 1068629500 + .long 1623765359 + .long 1068621140 + .long 1596060423 + .long 1068612789 + .long 3975249632 + .long 1068604447 + .long 77489616 + .long 1068596116 + .long 2694095274 + .long 1068587793 + .long 3141865345 + .long 1068579480 + .long 1327852022 + .long 1068571177 + .long 1454392201 + .long 1068562883 + .long 3429171450 + .long 1068554598 + .long 2865222567 + .long 1068546323 + .long 3965826047 + .long 1068538057 + .long 2344639476 + .long 1068529801 + .long 2205565304 + .long 1068521554 + .long 3457847553 + .long 1068513316 + .long 1716070423 + .long 1068505088 + .long 2370117590 + .long 1068494794 + .long 3549949915 + .long 1068478374 + .long 2497601776 + .long 1068461973 + .long 3329575662 + .long 1068445590 + .long 1573040697 + .long 1068429226 + .long 1345699131 + .long 1068412880 + .long 2470881766 + .long 1068396552 + .long 477545290 + .long 1068380243 + .long 3780138808 + .long 1068363951 + .long 3613830132 + .long 1068347678 + .long 4099274231 + .long 1068331423 + .long 767774141 + .long 1068315187 + .long 2036114853 + .long 1068298968 + .long 3436756955 + .long 1068282767 + .long 502735958 + .long 1068266585 + .long 1652561629 + .long 1068250420 + .long 2420411682 + .long 1068234273 + .long 2635998437 + .long 1068218144 + .long 2129599017 + .long 1068202033 + .long 732052851 + .long 1068185940 + .long 2569726489 + .long 1068169864 + .long 3179609248 + .long 1068153806 + .long 2394212644 + .long 1068137766 + .long 46600658 + .long 1068121744 + .long 265354603 + .long 1068105739 + .long 2884636119 + .long 1068089751 + .long 3444184771 + .long 1068073781 + .long 1779250256 + .long 1068057829 + .long 2020590027 + .long 1068041894 + .long 4004532340 + .long 1068025976 + .long 3272973907 + .long 1068010076 + .long 3958279445 + .long 1067994193 + .long 1603410172 + .long 1067978328 + .long 341790679 + .long 1067962480 + .long 12404745 + .long 1067946649 + .long 454760348 + .long 1067930835 + .long 1508887391 + .long 1067915038 + .long 3015335440 + .long 1067899258 + .long 520204185 + .long 1067883496 + .long 2455010382 + .long 1067867750 + .long 71914560 + .long 1067852022 + .long 1803457173 + .long 1067836310 + .long 3197785334 + .long 1067820615 + .long 4098519806 + .long 1067804937 + .long 54818232 + .long 1067789277 + .long 3796209456 + .long 1067773632 + .long 2282918403 + .long 1067758005 + .long 3950504196 + .long 1067742394 + .long 55152364 + .long 1067726801 + .long 3328378382 + .long 1067711223 + .long 732385311 + .long 1067695663 + .long 704701956 + .long 1067680119 + .long 3093409710 + .long 1067664591 + .long 3452107773 + .long 1067649080 + .long 1629845684 + .long 1067633586 + .long 1771121268 + .long 1067618108 + .long 3725944001 + .long 1067602646 + .long 3049832979 + .long 1067587201 + .long 3888716792 + .long 1067571772 + .long 1799062323 + .long 1067556360 + .long 927741940 + .long 1067540964 + .long 1127129614 + .long 1067525584 + .long 2250066244 + .long 1067510220 + .long 4149857685 + .long 1067494872 + .long 2385305499 + .long 1067479541 + .long 1105606892 + .long 1067464226 + .long 330901792 + .long 1067447486 + .long 3134934760 + .long 1067416919 + .long 1744581096 + .long 1067386385 + .long 166917835 + .long 1067355883 + .long 2409924962 + .long 1067325412 + .long 3892547049 + .long 1067294973 + .long 34624089 + .long 1067264567 + .long 3436756955 + .long 1067234191 + .long 930630721 + .long 1067203848 + .long 823651223 + .long 1067173536 + .long 2834170318 + .long 1067143255 + .long 2386449519 + .long 1067113006 + .long 3495558248 + .long 1067082788 + .long 1587501032 + .long 1067052602 + .long 679083091 + .long 1067022447 + .long 493004867 + .long 1066992323 + .long 752825758 + .long 1066962230 + .long 1182960573 + .long 1066932168 + .long 1508676010 + .long 1066902137 + .long 1456087143 + .long 1066872137 + .long 752153937 + .long 1066842168 + .long 3419645073 + .long 1066812229 + .long 597265304 + .long 1066782322 + .long 604423098 + .long 1066752445 + .long 3171423441 + .long 1066722598 + .long 3734431730 + .long 1066692782 + .long 2025404984 + .long 1066662997 + .long 2072088478 + .long 1066633242 + .long 3608077800 + .long 1066603517 + .long 2072815517 + .long 1066573823 + .long 1496489755 + .long 1066544159 + .long 1615129006 + .long 1066514525 + .long 2165566144 + .long 1066484921 + .long 2885435163 + .long 1066455347 + .long 3513167923 + .long 1066425803 + .long 3281014557 + .long 1066390787 + .long 2604876893 + .long 1066331819 + .long 184567847 + .long 1066272911 + .long 4093204381 + .long 1066214061 + .long 930630721 + .long 1066155272 + .long 3068052312 + .long 1066096541 + .long 1403389294 + .long 1066037870 + .long 4015975920 + .long 1065979257 + .long 1806815988 + .long 1065920704 + .long 2858315029 + .long 1065862209 + .long 2369503088 + .long 1065803773 + .long 4130865093 + .long 1065745395 + .long 3344465584 + .long 1065687076 + .long 3803811842 + .long 1065628815 + .long 713978687 + .long 1065570613 + .long 2166438958 + .long 1065512468 + .long 3369253777 + .long 1065454381 + .long 3826935798 + .long 1065396352 + .long 1795984718 + .long 1065323547 + .long 1064675693 + .long 1065207720 + .long 182837332 + .long 1065092008 + .long 2466218622 + .long 1064976410 + .long 2643543973 + .long 1064860927 + .long 4036370876 + .long 1064745558 + .long 1379209261 + .long 1064630304 + .long 2294346567 + .long 1064515163 + .long 1522032624 + .long 1064400136 + .long 495642370 + .long 1064265805 + .long 3615182787 + .long 1064036203 + .long 1900236729 + .long 1063806828 + .long 2033862474 + .long 1063577678 + .long 2114800432 + .long 1063348753 + .long 494771388 + .long 1062984042 + .long 1967954106 + .long 1062527089 + .long 1170198565 + .long 1061933680 + .long 417502738 + .long 1060884213 + .long 0 + .long 2147483648 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 368569247 + .long 3223701786 + .long 368569247 + .long 3223701786 + .long 368569247 + .long 3223701786 + .long 368569247 + .long 3223701786 + .long 1671522011 + .long 1075227560 + .long 1671522011 + .long 1075227560 + .long 1671522011 + .long 1075227560 + .long 1671522011 + .long 1075227560 + .long 1691548315 + .long 3221787401 + .long 1691548315 + .long 3221787401 + .long 1691548315 + .long 3221787401 + .long 1691548315 + .long 3221787401 + .long 3700771192 + .long 1073506818 + .long 3700771192 + .long 1073506818 + .long 3700771192 + .long 1073506818 + .long 3700771192 + .long 1073506818 + .long 3698831637 + .long 3220339442 + .long 3698831637 + .long 3220339442 + .long 3698831637 + .long 3220339442 + .long 3698831637 + .long 3220339442 + .long 3207479564 + .long 1062894188 + .long 3207479564 + .long 1062894188 + .long 3207479564 + .long 1062894188 + .long 3207479564 + .long 1062894188 + .long 589282582 + .long 1068907621 + .long 589282582 + .long 1068907621 + .long 589282582 + .long 1068907621 + .long 589282582 + .long 1068907621 + .long 1325131787 + .long 3216755581 + .long 1325131787 + .long 3216755581 + .long 1325131787 + .long 3216755581 + .long 1325131787 + .long 3216755581 + .long 1668232222 + .long 1069713319 + .long 1668232222 + .long 1069713319 + .long 1668232222 + .long 1069713319 + .long 1668232222 + .long 1069713319 + .long 354868790 + .long 3217804155 + .long 354868790 + .long 3217804155 + .long 354868790 + .long 3217804155 + .long 354868790 + .long 3217804155 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4294967295 + .long 1048575 + .long 4294967295 + .long 1048575 + .long 4294967295 + .long 1048575 + .long 4294967295 + .long 1048575 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1062207488 + .long 0 + .long 1062207488 + .long 0 + .long 1062207488 + .long 0 + .long 1062207488 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4227858432 + .long 4294967295 + .long 4227858432 + .long 4294967295 + .long 4227858432 + .long 4294967295 + .long 4227858432 + .long 4294967295 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1071366144 + .long 0 + .long 1071366144 + .long 0 + .long 1071366144 + .long 0 + .long 1071366144 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1352597504 + .long 1070810131 + .long 1352597504 + .long 1070810131 + .long 1352597504 + .long 1070810131 + .long 1352597504 + .long 1070810131 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 3296460800 + .long 1031700412 + .long 3296460800 + .long 1031700412 + .long 3296460800 + .long 1031700412 + .long 3296460800 + .long 1031700412 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1082564608 + .long 0 + .long 1082564608 + .long 0 + .long 1082564608 + .long 0 + .long 1082564608 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1083176960 + .long 0 + .long 1083176960 + .long 0 + .long 1083176960 + .long 0 + .long 1083176960 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1083174912 + .long 0 + .long 1083174912 + .long 0 + .long 1083174912 + .long 0 + .long 1083174912 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 2146435072 + .long 0 + .long 4293918720 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 0 + .long 0 + .long 2147483648 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .type __svml_dlog10_data_internal,@object + .size __svml_dlog10_data_internal,9728 + .align 32 + +__dlog10_la_CoutTab: + .long 0 + .long 1071366144 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1071337728 + .long 184549376 + .long 1065092008 + .long 2099961998 + .long 3178897324 + .long 0 + .long 1071309312 + .long 931135488 + .long 1066155272 + .long 2365712557 + .long 3178155773 + .long 0 + .long 1071280896 + .long 603979776 + .long 1066752445 + .long 709057215 + .long 1031474920 + .long 0 + .long 1071252480 + .long 3437232128 + .long 1067234191 + .long 1515412199 + .long 3179085970 + .long 0 + .long 1071238272 + .long 1105723392 + .long 1067464226 + .long 153915826 + .long 3178000698 + .long 0 + .long 1071209856 + .long 3328442368 + .long 1067711223 + .long 3899912278 + .long 3177135692 + .long 0 + .long 1071181440 + .long 341835776 + .long 1067962480 + .long 2509208190 + .long 3176531222 + .long 0 + .long 1071167232 + .long 2884632576 + .long 1068089751 + .long 1030636902 + .long 1025224143 + .long 0 + .long 1071138816 + .long 3613917184 + .long 1068347678 + .long 3527163461 + .long 3177529532 + .long 0 + .long 1071124608 + .long 3549954048 + .long 1068478374 + .long 3498894081 + .long 3173000425 + .long 0 + .long 1071096192 + .long 1623785472 + .long 1068621140 + .long 2889825554 + .long 3176375375 + .long 0 + .long 1071081984 + .long 1085800448 + .long 1068688295 + .long 4015256301 + .long 3177184346 + .long 0 + .long 1071053568 + .long 3652976640 + .long 1068824490 + .long 3600693529 + .long 3175753877 + .long 0 + .long 1071039360 + .long 1592393728 + .long 1068893555 + .long 231073830 + .long 3177087939 + .long 0 + .long 1071025152 + .long 3459645440 + .long 1068963280 + .long 1740576090 + .long 1029619435 + .long 0 + .long 1070996736 + .long 3774611456 + .long 1069104765 + .long 3858552785 + .long 1028603845 + .long 0 + .long 1070982528 + .long 845086720 + .long 1069176552 + .long 3138879731 + .long 1029120443 + .long 0 + .long 1070968320 + .long 3513843712 + .long 1069249052 + .long 2107125367 + .long 1029044389 + .long 0 + .long 1070954112 + .long 434503680 + .long 1069322282 + .long 3827602229 + .long 1028932700 + .long 0 + .long 1070939904 + .long 3613851648 + .long 1069396254 + .long 1223751955 + .long 3176465139 + .long 0 + .long 1070911488 + .long 733741056 + .long 1069546492 + .long 1625232067 + .long 1029570781 + .long 0 + .long 1070897280 + .long 1511620608 + .long 1069585154 + .long 3044605139 + .long 1028090775 + .long 0 + .long 1070883072 + .long 1337196544 + .long 1069623706 + .long 2602639001 + .long 3175938675 + .long 0 + .long 1070868864 + .long 2572533760 + .long 1069662670 + .long 3067107955 + .long 1022933137 + .long 0 + .long 1070854656 + .long 559611904 + .long 1069702056 + .long 764145786 + .long 3174041535 + .long 0 + .long 1070840448 + .long 485818368 + .long 1069741872 + .long 2037567072 + .long 3175580956 + .long 0 + .long 1070826240 + .long 259604480 + .long 1069782128 + .long 4012068429 + .long 1027865895 + .long 0 + .long 1070812032 + .long 3454042112 + .long 1069822833 + .long 2867680007 + .long 3174202478 + .long 0 + .long 1070797824 + .long 2188754944 + .long 1069863999 + .long 2538655286 + .long 3175840981 + .long 0 + .long 1070783616 + .long 2965241856 + .long 1069905635 + .long 1338936972 + .long 3176093950 + .long 0 + .long 1070769408 + .long 966279168 + .long 1069947753 + .long 1774547674 + .long 3175051484 + .long 0 + .long 1070755200 + .long 1604042752 + .long 1069990363 + .long 2557470738 + .long 3174667448 + .long 0 + .long 1070740992 + .long 3417833472 + .long 1070033477 + .long 2268255117 + .long 3175678264 + .long 0 + .long 1070740992 + .long 3417833472 + .long 1070033477 + .long 2268255117 + .long 3175678264 + .long 0 + .long 1070726784 + .long 2451292160 + .long 1070077108 + .long 3757728941 + .long 1027943275 + .long 0 + .long 1070712576 + .long 929644544 + .long 1070121268 + .long 899045708 + .long 1027944939 + .long 0 + .long 1070698368 + .long 3057254400 + .long 1070165969 + .long 3880649376 + .long 3172972504 + .long 0 + .long 1070684160 + .long 2231091200 + .long 1070211226 + .long 521319256 + .long 1027600177 + .long 0 + .long 1070684160 + .long 2231091200 + .long 1070211226 + .long 521319256 + .long 1027600177 + .long 0 + .long 1070669952 + .long 2620162048 + .long 1070257052 + .long 1385613369 + .long 3176104036 + .long 0 + .long 1070655744 + .long 2096726016 + .long 1070303462 + .long 3138305819 + .long 3173646777 + .long 0 + .long 1070641536 + .long 944717824 + .long 1070350471 + .long 1065120110 + .long 1027539054 + .long 0 + .long 1070641536 + .long 944717824 + .long 1070350471 + .long 1065120110 + .long 1027539054 + .long 0 + .long 1070627328 + .long 1985789952 + .long 1070398094 + .long 3635943864 + .long 3173136490 + .long 0 + .long 1070613120 + .long 2123825152 + .long 1070446348 + .long 1125219725 + .long 3175615738 + .long 0 + .long 1070598912 + .long 1078378496 + .long 1070495250 + .long 603852726 + .long 3174570526 + .long 0 + .long 1070598912 + .long 1078378496 + .long 1070495250 + .long 603852726 + .long 3174570526 + .long 0 + .long 1070573312 + .long 1537933312 + .long 1070544817 + .long 998069198 + .long 1026662908 + .long 0 + .long 1070544896 + .long 733773824 + .long 1070595068 + .long 4061058002 + .long 3174036009 + .long 0 + .long 1070544896 + .long 733773824 + .long 1070595068 + .long 4061058002 + .long 3174036009 + .long 0 + .long 1070516480 + .long 3897544704 + .long 1070621058 + .long 951856294 + .long 1026731877 + .long 0 + .long 1070516480 + .long 3897544704 + .long 1070621058 + .long 951856294 + .long 1026731877 + .long 0 + .long 1070488064 + .long 493535232 + .long 1070646897 + .long 3852369308 + .long 3173264746 + .long 0 + .long 1070459648 + .long 463249408 + .long 1070673107 + .long 2853152111 + .long 3174564937 + .long 0 + .long 1070459648 + .long 463249408 + .long 1070673107 + .long 2853152111 + .long 3174564937 + .long 0 + .long 1070431232 + .long 3186585600 + .long 1070699699 + .long 1874718356 + .long 3174139933 + .long 0 + .long 1070431232 + .long 3186585600 + .long 1070699699 + .long 1874718356 + .long 3174139933 + .long 0 + .long 1070402816 + .long 1525858304 + .long 1070726686 + .long 3039843523 + .long 1024724665 + .long 0 + .long 1070402816 + .long 1525858304 + .long 1070726686 + .long 3039843523 + .long 1024724665 + .long 0 + .long 1070374400 + .long 3425300480 + .long 1070754078 + .long 1303046649 + .long 1022401701 + .long 0 + .long 1070374400 + .long 3425300480 + .long 1070754078 + .long 1303046649 + .long 1022401701 + .long 0 + .long 1070345984 + .long 1980465152 + .long 1070781889 + .long 3188656319 + .long 1027271390 + .long 0 + .long 1070345984 + .long 1980465152 + .long 1070781889 + .long 3188656319 + .long 1027271390 + .long 0 + .long 1070317568 + .long 1352630272 + .long 1070810131 + .long 3090895658 + .long 3174564915 + .long 1352630272 + .long 1070810131 + .long 3090895658 + .long 3174564915 + .long 64 + .long 1120927744 + .long 0 + .long 1096810496 + .long 0 + .long 1064828928 + .long 0 + .long 1135607808 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 1071366144 + .long 3207479559 + .long 1062894188 + .long 3698831637 + .long 3220339442 + .long 3700832817 + .long 1073506818 + .long 1691624569 + .long 3221787401 + .long 2065628764 + .long 1075227551 + .long 1770847080 + .long 3223701774 + .long 3786517112 + .long 1077250450 + .long 1316351650 + .long 3225793313 + .type __dlog10_la_CoutTab,@object + .size __dlog10_la_CoutTab,1696 + .align 16 + +.FLT_88: + .long 0x00000000,0x80000000,0x00000000,0x00000000 + .type .FLT_88,@object + .size .FLT_88,16 + .align 8 + +.FLT_89: + .long 0x00000000,0x3ff00000 + .type .FLT_89,@object + .size .FLT_89,8 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core-avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core-avx2.S new file mode 100644 index 0000000000..3432e7cffe --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core-avx2.S @@ -0,0 +1,20 @@ +/* AVX2 version of vectorized log10, 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 + . */ + +#define _ZGVeN8v_log10 _ZGVeN8v_log10_avx2_wrapper +#include "../svml_d_log108_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core.c new file mode 100644 index 0000000000..273a0d4739 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core.c @@ -0,0 +1,27 @@ +/* Multiple versions of vectorized log10, 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 + . */ + +#define SYMBOL_NAME _ZGVeN8v_log10 +#include "ifunc-mathvec-avx512-skx.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVeN8v_log10, __GI__ZGVeN8v_log10, __redirect__ZGVeN8v_log10) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core_avx512.S new file mode 100644 index 0000000000..5dda561d49 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log108_core_avx512.S @@ -0,0 +1,1082 @@ +/* Function log10 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: + * + * Get short reciprocal approximation Rcp ~ 1/mantissa(x) + * R = Rcp*x - 1.0 + * log10(x) = k*log10(2.0) - log10(Rcp) + poly_approximation(R) + * log10(Rcp) is tabulated + * + * + */ + +#include + + .text + .section .text.evex512,"ax",@progbits +ENTRY(_ZGVeN8v_log10_skx) + pushq %rbp + cfi_def_cfa_offset(16) + movq %rsp, %rbp + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + andq $-64, %rsp + subq $192, %rsp + vmovaps %zmm0, %zmm7 + vgetmantpd $8, {sae}, %zmm7, %zmm6 + vmovups 128+__svml_dlog10_data_internal_avx512(%rip), %zmm3 + vmovups 512+__svml_dlog10_data_internal_avx512(%rip), %zmm12 + vmovups 640+__svml_dlog10_data_internal_avx512(%rip), %zmm13 + +/* Start polynomial evaluation */ + vmovups 256+__svml_dlog10_data_internal_avx512(%rip), %zmm10 + vmovups 320+__svml_dlog10_data_internal_avx512(%rip), %zmm1 + vmovups 384+__svml_dlog10_data_internal_avx512(%rip), %zmm11 + vmovups 448+__svml_dlog10_data_internal_avx512(%rip), %zmm14 + +/* Prepare exponent correction: DblRcp<0.75? */ + vmovups 192+__svml_dlog10_data_internal_avx512(%rip), %zmm2 + +/* Table lookup */ + vmovups __svml_dlog10_data_internal_avx512(%rip), %zmm5 + +/* GetExp(x) */ + vgetexppd {sae}, %zmm7, %zmm0 + +/* DblRcp ~ 1/Mantissa */ + vrcp14pd %zmm6, %zmm8 + +/* x<=0? */ + vfpclasspd $94, %zmm7, %k0 + +/* round DblRcp to 4 fractional bits (RN mode, no Precision exception) */ + vrndscalepd $88, {sae}, %zmm8, %zmm4 + vmovups 576+__svml_dlog10_data_internal_avx512(%rip), %zmm8 + kmovw %k0, %edx + +/* Reduced argument: R = DblRcp*Mantissa - 1 */ + vfmsub213pd {rn-sae}, %zmm3, %zmm4, %zmm6 + vcmppd $17, {sae}, %zmm2, %zmm4, %k1 + vfmadd231pd {rn-sae}, %zmm6, %zmm12, %zmm8 + vmovups 704+__svml_dlog10_data_internal_avx512(%rip), %zmm12 + vfmadd231pd {rn-sae}, %zmm6, %zmm10, %zmm1 + vfmadd231pd {rn-sae}, %zmm6, %zmm11, %zmm14 + vmovups 768+__svml_dlog10_data_internal_avx512(%rip), %zmm2 + +/* R^2 */ + vmulpd {rn-sae}, %zmm6, %zmm6, %zmm15 + vfmadd231pd {rn-sae}, %zmm6, %zmm13, %zmm12 + +/* Prepare table index */ + vpsrlq $48, %zmm4, %zmm9 + +/* add 1 to Expon if DblRcp<0.75 */ + vaddpd {rn-sae}, %zmm3, %zmm0, %zmm0{%k1} + vmulpd {rn-sae}, %zmm15, %zmm15, %zmm13 + vfmadd213pd {rn-sae}, %zmm14, %zmm15, %zmm1 + vfmadd213pd {rn-sae}, %zmm12, %zmm15, %zmm8 + vpermt2pd 64+__svml_dlog10_data_internal_avx512(%rip), %zmm9, %zmm5 + +/* polynomial */ + vfmadd213pd {rn-sae}, %zmm8, %zmm13, %zmm1 + vfmadd213pd {rn-sae}, %zmm2, %zmm6, %zmm1 + vfmadd213pd {rn-sae}, %zmm5, %zmm1, %zmm6 + vmovups 832+__svml_dlog10_data_internal_avx512(%rip), %zmm1 + vfmadd213pd {rn-sae}, %zmm6, %zmm1, %zmm0 + testl %edx, %edx + jne L(2) + +L(1): + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +L(2): + vmovups %zmm7, 64(%rsp) + vmovups %zmm0, 128(%rsp) + je L(1) + xorl %eax, %eax + vzeroupper + kmovw %k4, 24(%rsp) + kmovw %k5, 16(%rsp) + kmovw %k6, 8(%rsp) + kmovw %k7, (%rsp) + movq %rsi, 40(%rsp) + movq %rdi, 32(%rsp) + movq %r12, 56(%rsp) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x68, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x78, 0xff, 0xff, 0xff, 0x22 + movl %eax, %r12d + movq %r13, 48(%rsp) + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x70, 0xff, 0xff, 0xff, 0x22 + movl %edx, %r13d + .cfi_escape 0x10, 0xfa, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + +L(3): + btl %r12d, %r13d + jc L(5) + +L(4): + incl %r12d + cmpl $8, %r12d + jl L(3) + kmovw 24(%rsp), %k4 + cfi_restore(122) + kmovw 16(%rsp), %k5 + cfi_restore(123) + kmovw 8(%rsp), %k6 + cfi_restore(124) + kmovw (%rsp), %k7 + cfi_restore(125) + vmovups 128(%rsp), %zmm0 + movq 40(%rsp), %rsi + cfi_restore(4) + movq 32(%rsp), %rdi + cfi_restore(5) + movq 56(%rsp), %r12 + cfi_restore(12) + movq 48(%rsp), %r13 + cfi_restore(13) + jmp L(1) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x68, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x78, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x70, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfa, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + +L(5): + lea 64(%rsp,%r12,8), %rdi + lea 128(%rsp,%r12,8), %rsi + call __svml_dlog10_cout_rare_internal + jmp L(4) + +END(_ZGVeN8v_log10_skx) + + .align 16,0x90 + +__svml_dlog10_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 6(%rdi), %edx + andl $32752, %edx + cmpl $32752, %edx + je L(11) + movsd (%rdi), %xmm2 + xorl %ecx, %ecx + movsd %xmm2, -8(%rsp) + movzwl -2(%rsp), %edx + testl $32752, %edx + jne L(6) + movsd 1600+__dlog10_la_CoutTab(%rip), %xmm0 + movl $-60, %ecx + mulsd %xmm0, %xmm2 + movsd %xmm2, -8(%rsp) + +L(6): + movsd 1608+__dlog10_la_CoutTab(%rip), %xmm0 + comisd %xmm0, %xmm2 + jbe L(8) + movaps %xmm2, %xmm1 + subsd .FLT_89(%rip), %xmm1 + movsd %xmm1, -16(%rsp) + andb $127, -9(%rsp) + movsd -16(%rsp), %xmm0 + comisd 1592+__dlog10_la_CoutTab(%rip), %xmm0 + jbe L(7) + movsd %xmm2, -16(%rsp) + pxor %xmm7, %xmm7 + movzwl -10(%rsp), %edi + lea __dlog10_la_CoutTab(%rip), %r10 + andl $-32753, %edi + addl $16368, %edi + movw %di, -10(%rsp) + movsd -16(%rsp), %xmm3 + movaps %xmm3, %xmm1 + movaps %xmm3, %xmm2 + movsd 1688+__dlog10_la_CoutTab(%rip), %xmm5 + movzwl -2(%rsp), %edx + andl $32752, %edx + addsd 1576+__dlog10_la_CoutTab(%rip), %xmm1 + addsd 1584+__dlog10_la_CoutTab(%rip), %xmm2 + movsd %xmm1, -24(%rsp) + movl -24(%rsp), %r8d + movsd %xmm2, -24(%rsp) + andl $127, %r8d + movsd -24(%rsp), %xmm8 + movsd 1560+__dlog10_la_CoutTab(%rip), %xmm9 + movsd 1568+__dlog10_la_CoutTab(%rip), %xmm0 + shrl $4, %edx + subsd 1584+__dlog10_la_CoutTab(%rip), %xmm8 + lea (%r8,%r8,2), %r9d + movsd (%r10,%r9,8), %xmm6 + lea -1023(%rcx,%rdx), %ecx + cvtsi2sd %ecx, %xmm7 + subsd %xmm8, %xmm3 + mulsd %xmm6, %xmm8 + mulsd %xmm7, %xmm9 + subsd 1624+__dlog10_la_CoutTab(%rip), %xmm8 + mulsd %xmm3, %xmm6 + mulsd %xmm0, %xmm7 + addsd 8(%r10,%r9,8), %xmm9 + addsd 16(%r10,%r9,8), %xmm7 + addsd %xmm8, %xmm9 + movaps %xmm8, %xmm4 + addsd %xmm6, %xmm4 + mulsd %xmm4, %xmm5 + addsd 1680+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1672+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1664+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1656+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1648+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1640+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm4, %xmm5 + addsd 1632+__dlog10_la_CoutTab(%rip), %xmm5 + mulsd %xmm5, %xmm8 + mulsd %xmm6, %xmm5 + addsd %xmm5, %xmm7 + addsd %xmm6, %xmm7 + addsd %xmm7, %xmm8 + addsd %xmm8, %xmm9 + movsd %xmm9, (%rsi) + ret + +L(7): + movsd 1624+__dlog10_la_CoutTab(%rip), %xmm0 + mulsd %xmm0, %xmm1 + movsd 1688+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1680+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1672+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1664+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1656+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1648+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1640+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd 1632+__dlog10_la_CoutTab(%rip), %xmm2 + mulsd %xmm1, %xmm2 + addsd %xmm1, %xmm2 + movsd %xmm2, (%rsi) + ret + +L(8): + ucomisd %xmm0, %xmm2 + jp L(9) + je L(10) + +L(9): + divsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + movl $1, %eax + ret + +L(10): + movsd 1616+__dlog10_la_CoutTab(%rip), %xmm1 + movl $2, %eax + xorps .FLT_88(%rip), %xmm1 + divsd %xmm0, %xmm1 + movsd %xmm1, (%rsi) + ret + +L(11): + movb 7(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je L(13) + +L(12): + movsd (%rdi), %xmm0 + mulsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + ret + +L(13): + testl $1048575, 4(%rdi) + jne L(12) + cmpl $0, (%rdi) + jne L(12) + movsd 1608+__dlog10_la_CoutTab(%rip), %xmm0 + movl $1, %eax + divsd %xmm0, %xmm0 + movsd %xmm0, (%rsi) + ret + + cfi_endproc + + .type __svml_dlog10_cout_rare_internal,@function + .size __svml_dlog10_cout_rare_internal,.-__svml_dlog10_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_dlog10_data_internal_avx512: + .long 0 + .long 0 + .long 721479184 + .long 3214603769 + .long 3590975466 + .long 3215601833 + .long 1438937368 + .long 3216186160 + .long 948324365 + .long 3216559896 + .long 2869828094 + .long 3216915393 + .long 516509563 + .long 3217142759 + .long 2145647618 + .long 3217304702 + .long 733771779 + .long 1069546492 + .long 3513866211 + .long 1069249052 + .long 3459676924 + .long 1068963280 + .long 1085767695 + .long 1068688295 + .long 3613830132 + .long 1068347678 + .long 1803457173 + .long 1067836310 + .long 3436756955 + .long 1067234191 + .long 930630721 + .long 1066155272 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 0 + .long 1072168960 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 675808112 + .long 1068024536 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 2516752404 + .long 3215710221 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 4085995682 + .long 1068483574 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 879025280 + .long 3216148390 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 2004821977 + .long 1068907618 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 356255395 + .long 3216755579 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 1668235916 + .long 1069713319 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870491 + .long 3217804155 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 354870542 + .long 1071369083 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 1352628735 + .long 1070810131 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 120 + .long 0 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 0 + .long 1048576 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .long 4294967295 + .long 2146435071 + .type __svml_dlog10_data_internal_avx512,@object + .size __svml_dlog10_data_internal_avx512,1152 + .align 32 + +__dlog10_la_CoutTab: + .long 0 + .long 1071366144 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 1071337728 + .long 184549376 + .long 1065092008 + .long 2099961998 + .long 3178897324 + .long 0 + .long 1071309312 + .long 931135488 + .long 1066155272 + .long 2365712557 + .long 3178155773 + .long 0 + .long 1071280896 + .long 603979776 + .long 1066752445 + .long 709057215 + .long 1031474920 + .long 0 + .long 1071252480 + .long 3437232128 + .long 1067234191 + .long 1515412199 + .long 3179085970 + .long 0 + .long 1071238272 + .long 1105723392 + .long 1067464226 + .long 153915826 + .long 3178000698 + .long 0 + .long 1071209856 + .long 3328442368 + .long 1067711223 + .long 3899912278 + .long 3177135692 + .long 0 + .long 1071181440 + .long 341835776 + .long 1067962480 + .long 2509208190 + .long 3176531222 + .long 0 + .long 1071167232 + .long 2884632576 + .long 1068089751 + .long 1030636902 + .long 1025224143 + .long 0 + .long 1071138816 + .long 3613917184 + .long 1068347678 + .long 3527163461 + .long 3177529532 + .long 0 + .long 1071124608 + .long 3549954048 + .long 1068478374 + .long 3498894081 + .long 3173000425 + .long 0 + .long 1071096192 + .long 1623785472 + .long 1068621140 + .long 2889825554 + .long 3176375375 + .long 0 + .long 1071081984 + .long 1085800448 + .long 1068688295 + .long 4015256301 + .long 3177184346 + .long 0 + .long 1071053568 + .long 3652976640 + .long 1068824490 + .long 3600693529 + .long 3175753877 + .long 0 + .long 1071039360 + .long 1592393728 + .long 1068893555 + .long 231073830 + .long 3177087939 + .long 0 + .long 1071025152 + .long 3459645440 + .long 1068963280 + .long 1740576090 + .long 1029619435 + .long 0 + .long 1070996736 + .long 3774611456 + .long 1069104765 + .long 3858552785 + .long 1028603845 + .long 0 + .long 1070982528 + .long 845086720 + .long 1069176552 + .long 3138879731 + .long 1029120443 + .long 0 + .long 1070968320 + .long 3513843712 + .long 1069249052 + .long 2107125367 + .long 1029044389 + .long 0 + .long 1070954112 + .long 434503680 + .long 1069322282 + .long 3827602229 + .long 1028932700 + .long 0 + .long 1070939904 + .long 3613851648 + .long 1069396254 + .long 1223751955 + .long 3176465139 + .long 0 + .long 1070911488 + .long 733741056 + .long 1069546492 + .long 1625232067 + .long 1029570781 + .long 0 + .long 1070897280 + .long 1511620608 + .long 1069585154 + .long 3044605139 + .long 1028090775 + .long 0 + .long 1070883072 + .long 1337196544 + .long 1069623706 + .long 2602639001 + .long 3175938675 + .long 0 + .long 1070868864 + .long 2572533760 + .long 1069662670 + .long 3067107955 + .long 1022933137 + .long 0 + .long 1070854656 + .long 559611904 + .long 1069702056 + .long 764145786 + .long 3174041535 + .long 0 + .long 1070840448 + .long 485818368 + .long 1069741872 + .long 2037567072 + .long 3175580956 + .long 0 + .long 1070826240 + .long 259604480 + .long 1069782128 + .long 4012068429 + .long 1027865895 + .long 0 + .long 1070812032 + .long 3454042112 + .long 1069822833 + .long 2867680007 + .long 3174202478 + .long 0 + .long 1070797824 + .long 2188754944 + .long 1069863999 + .long 2538655286 + .long 3175840981 + .long 0 + .long 1070783616 + .long 2965241856 + .long 1069905635 + .long 1338936972 + .long 3176093950 + .long 0 + .long 1070769408 + .long 966279168 + .long 1069947753 + .long 1774547674 + .long 3175051484 + .long 0 + .long 1070755200 + .long 1604042752 + .long 1069990363 + .long 2557470738 + .long 3174667448 + .long 0 + .long 1070740992 + .long 3417833472 + .long 1070033477 + .long 2268255117 + .long 3175678264 + .long 0 + .long 1070740992 + .long 3417833472 + .long 1070033477 + .long 2268255117 + .long 3175678264 + .long 0 + .long 1070726784 + .long 2451292160 + .long 1070077108 + .long 3757728941 + .long 1027943275 + .long 0 + .long 1070712576 + .long 929644544 + .long 1070121268 + .long 899045708 + .long 1027944939 + .long 0 + .long 1070698368 + .long 3057254400 + .long 1070165969 + .long 3880649376 + .long 3172972504 + .long 0 + .long 1070684160 + .long 2231091200 + .long 1070211226 + .long 521319256 + .long 1027600177 + .long 0 + .long 1070684160 + .long 2231091200 + .long 1070211226 + .long 521319256 + .long 1027600177 + .long 0 + .long 1070669952 + .long 2620162048 + .long 1070257052 + .long 1385613369 + .long 3176104036 + .long 0 + .long 1070655744 + .long 2096726016 + .long 1070303462 + .long 3138305819 + .long 3173646777 + .long 0 + .long 1070641536 + .long 944717824 + .long 1070350471 + .long 1065120110 + .long 1027539054 + .long 0 + .long 1070641536 + .long 944717824 + .long 1070350471 + .long 1065120110 + .long 1027539054 + .long 0 + .long 1070627328 + .long 1985789952 + .long 1070398094 + .long 3635943864 + .long 3173136490 + .long 0 + .long 1070613120 + .long 2123825152 + .long 1070446348 + .long 1125219725 + .long 3175615738 + .long 0 + .long 1070598912 + .long 1078378496 + .long 1070495250 + .long 603852726 + .long 3174570526 + .long 0 + .long 1070598912 + .long 1078378496 + .long 1070495250 + .long 603852726 + .long 3174570526 + .long 0 + .long 1070573312 + .long 1537933312 + .long 1070544817 + .long 998069198 + .long 1026662908 + .long 0 + .long 1070544896 + .long 733773824 + .long 1070595068 + .long 4061058002 + .long 3174036009 + .long 0 + .long 1070544896 + .long 733773824 + .long 1070595068 + .long 4061058002 + .long 3174036009 + .long 0 + .long 1070516480 + .long 3897544704 + .long 1070621058 + .long 951856294 + .long 1026731877 + .long 0 + .long 1070516480 + .long 3897544704 + .long 1070621058 + .long 951856294 + .long 1026731877 + .long 0 + .long 1070488064 + .long 493535232 + .long 1070646897 + .long 3852369308 + .long 3173264746 + .long 0 + .long 1070459648 + .long 463249408 + .long 1070673107 + .long 2853152111 + .long 3174564937 + .long 0 + .long 1070459648 + .long 463249408 + .long 1070673107 + .long 2853152111 + .long 3174564937 + .long 0 + .long 1070431232 + .long 3186585600 + .long 1070699699 + .long 1874718356 + .long 3174139933 + .long 0 + .long 1070431232 + .long 3186585600 + .long 1070699699 + .long 1874718356 + .long 3174139933 + .long 0 + .long 1070402816 + .long 1525858304 + .long 1070726686 + .long 3039843523 + .long 1024724665 + .long 0 + .long 1070402816 + .long 1525858304 + .long 1070726686 + .long 3039843523 + .long 1024724665 + .long 0 + .long 1070374400 + .long 3425300480 + .long 1070754078 + .long 1303046649 + .long 1022401701 + .long 0 + .long 1070374400 + .long 3425300480 + .long 1070754078 + .long 1303046649 + .long 1022401701 + .long 0 + .long 1070345984 + .long 1980465152 + .long 1070781889 + .long 3188656319 + .long 1027271390 + .long 0 + .long 1070345984 + .long 1980465152 + .long 1070781889 + .long 3188656319 + .long 1027271390 + .long 0 + .long 1070317568 + .long 1352630272 + .long 1070810131 + .long 3090895658 + .long 3174564915 + .long 1352630272 + .long 1070810131 + .long 3090895658 + .long 3174564915 + .long 64 + .long 1120927744 + .long 0 + .long 1096810496 + .long 0 + .long 1064828928 + .long 0 + .long 1135607808 + .long 0 + .long 0 + .long 0 + .long 1072693248 + .long 0 + .long 1071366144 + .long 3207479559 + .long 1062894188 + .long 3698831637 + .long 3220339442 + .long 3700832817 + .long 1073506818 + .long 1691624569 + .long 3221787401 + .long 2065628764 + .long 1075227551 + .long 1770847080 + .long 3223701774 + .long 3786517112 + .long 1077250450 + .long 1316351650 + .long 3225793313 + .type __dlog10_la_CoutTab,@object + .size __dlog10_la_CoutTab,1696 + .align 16 + +.FLT_88: + .long 0x00000000,0x80000000,0x00000000,0x00000000 + .type .FLT_88,@object + .size .FLT_88,16 + .align 8 + +.FLT_89: + .long 0x00000000,0x3ff00000 + .type .FLT_89,@object + .size .FLT_89,8 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core-avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core-avx2.S new file mode 100644 index 0000000000..e389e2eca1 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core-avx2.S @@ -0,0 +1,20 @@ +/* AVX2 version of vectorized log10f. + 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 + . */ + +#define _ZGVeN16v_log10f _ZGVeN16v_log10f_avx2_wrapper +#include "../svml_s_log10f16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core.c new file mode 100644 index 0000000000..274fc7e0ff --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core.c @@ -0,0 +1,28 @@ +/* Multiple versions of vectorized log10f, 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 + . */ + +#define SYMBOL_NAME _ZGVeN16v_log10f +#include "ifunc-mathvec-avx512-skx.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVeN16v_log10f, __GI__ZGVeN16v_log10f, + __redirect__ZGVeN16v_log10f) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core_avx512.S new file mode 100644 index 0000000000..26462c14f1 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f16_core_avx512.S @@ -0,0 +1,727 @@ +/* Function log10f 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: + * + * Get short reciprocal approximation Rcp ~ 1/mantissa(x) + * R = Rcp*x - 1.0 + * log10(x) = k*log10(2.0) - log10(Rcp) + poly_approximation(R) + * log10(Rcp) is tabulated + * + * + */ + +#include + + .text + .section .text.exex512,"ax",@progbits +ENTRY(_ZGVeN16v_log10f_skx) + pushq %rbp + cfi_def_cfa_offset(16) + movq %rsp, %rbp + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + andq $-64, %rsp + subq $192, %rsp + vgetmantps $11, {sae}, %zmm0, %zmm3 + vmovups __svml_slog10_data_internal_avx512(%rip), %zmm1 + vgetexpps {sae}, %zmm0, %zmm5 + vmovups 320+__svml_slog10_data_internal_avx512(%rip), %zmm10 + vpsrld $19, %zmm3, %zmm7 + vgetexpps {sae}, %zmm3, %zmm6 + vsubps {rn-sae}, %zmm1, %zmm3, %zmm11 + vpermps 64+__svml_slog10_data_internal_avx512(%rip), %zmm7, %zmm1 + vpermps 128+__svml_slog10_data_internal_avx512(%rip), %zmm7, %zmm2 + vsubps {rn-sae}, %zmm6, %zmm5, %zmm9 + vpermps 192+__svml_slog10_data_internal_avx512(%rip), %zmm7, %zmm4 + vpermps 256+__svml_slog10_data_internal_avx512(%rip), %zmm7, %zmm8 + +/* x<=0? */ + vfpclassps $94, %zmm0, %k0 + vfmadd213ps {rn-sae}, %zmm2, %zmm11, %zmm1 + vmulps {rn-sae}, %zmm10, %zmm9, %zmm12 + vfmadd213ps {rn-sae}, %zmm4, %zmm11, %zmm1 + kmovw %k0, %edx + vfmadd213ps {rn-sae}, %zmm8, %zmm11, %zmm1 + vfmadd213ps {rn-sae}, %zmm12, %zmm11, %zmm1 + testl %edx, %edx + jne L(2) + +L(1): + vmovaps %zmm1, %zmm0 + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +L(2): + vmovups %zmm0, 64(%rsp) + vmovups %zmm1, 128(%rsp) + je L(1) + xorl %eax, %eax + vzeroupper + kmovw %k4, 24(%rsp) + kmovw %k5, 16(%rsp) + kmovw %k6, 8(%rsp) + kmovw %k7, (%rsp) + movq %rsi, 40(%rsp) + movq %rdi, 32(%rsp) + movq %r12, 56(%rsp) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x68, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x78, 0xff, 0xff, 0xff, 0x22 + movl %eax, %r12d + movq %r13, 48(%rsp) + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x70, 0xff, 0xff, 0xff, 0x22 + movl %edx, %r13d + .cfi_escape 0x10, 0xfa, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + +L(3): + btl %r12d, %r13d + jc L(5) + +L(4): + incl %r12d + cmpl $16, %r12d + jl L(3) + kmovw 24(%rsp), %k4 + cfi_restore(122) + kmovw 16(%rsp), %k5 + cfi_restore(123) + kmovw 8(%rsp), %k6 + cfi_restore(124) + kmovw (%rsp), %k7 + cfi_restore(125) + vmovups 128(%rsp), %zmm1 + movq 40(%rsp), %rsi + cfi_restore(4) + movq 32(%rsp), %rdi + cfi_restore(5) + movq 56(%rsp), %r12 + cfi_restore(12) + movq 48(%rsp), %r13 + cfi_restore(13) + jmp L(1) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x68, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x78, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x70, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfa, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xfd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + +L(5): + lea 64(%rsp,%r12,4), %rdi + lea 128(%rsp,%r12,4), %rsi + call __svml_slog10_cout_rare_internal + jmp L(4) + +END(_ZGVeN16v_log10f_skx) + + .align 16,0x90 + +__svml_slog10_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 2(%rdi), %edx + andl $32640, %edx + cmpl $32640, %edx + je L(11) + movss (%rdi), %xmm2 + xorl %ecx, %ecx + movss %xmm2, -16(%rsp) + movzwl -14(%rsp), %edx + testl $32640, %edx + jne L(6) + mulss .FLT_77(%rip), %xmm2 + movl $-40, %ecx + movss %xmm2, -16(%rsp) + +L(6): + pxor %xmm0, %xmm0 + comiss %xmm0, %xmm2 + jbe L(8) + movaps %xmm2, %xmm1 + subss .FLT_93(%rip), %xmm1 + movss %xmm1, -20(%rsp) + andb $127, -17(%rsp) + movss -20(%rsp), %xmm0 + comiss .FLT_78(%rip), %xmm0 + jbe L(7) + movss %xmm2, -20(%rsp) + pxor %xmm8, %xmm8 + movzwl -18(%rsp), %edi + lea __slog10_la_CoutTab(%rip), %r10 + andl $-32641, %edi + addl $16256, %edi + movw %di, -18(%rsp) + movss -20(%rsp), %xmm3 + movaps %xmm3, %xmm0 + movss .FLT_80(%rip), %xmm2 + movaps %xmm2, %xmm1 + addss .FLT_79(%rip), %xmm0 + addss %xmm3, %xmm1 + movss %xmm0, -24(%rsp) + movl -24(%rsp), %r8d + movss %xmm1, -24(%rsp) + andl $127, %r8d + movss -24(%rsp), %xmm9 + movss .FLT_89(%rip), %xmm6 + subss %xmm2, %xmm9 + movzwl -14(%rsp), %edx + lea (%r8,%r8,2), %r9d + movss (%r10,%r9,4), %xmm7 + andl $32640, %edx + shrl $7, %edx + subss %xmm9, %xmm3 + mulss %xmm7, %xmm9 + mulss %xmm3, %xmm7 + subss .FLT_81(%rip), %xmm9 + movaps %xmm9, %xmm4 + lea -127(%rcx,%rdx), %ecx + cvtsi2ss %ecx, %xmm8 + addss %xmm7, %xmm4 + mulss %xmm4, %xmm6 + movss .FLT_90(%rip), %xmm10 + mulss %xmm8, %xmm10 + addss .FLT_88(%rip), %xmm6 + addss 4(%r10,%r9,4), %xmm10 + mulss %xmm4, %xmm6 + addss %xmm9, %xmm10 + addss .FLT_87(%rip), %xmm6 + mulss %xmm4, %xmm6 + movss .FLT_91(%rip), %xmm5 + mulss %xmm5, %xmm8 + addss .FLT_86(%rip), %xmm6 + addss 8(%r10,%r9,4), %xmm8 + mulss %xmm4, %xmm6 + addss .FLT_85(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_84(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_83(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_82(%rip), %xmm6 + mulss %xmm6, %xmm9 + mulss %xmm7, %xmm6 + addss %xmm6, %xmm8 + addss %xmm7, %xmm8 + addss %xmm8, %xmm9 + addss %xmm9, %xmm10 + movss %xmm10, (%rsi) + ret + +L(7): + movss .FLT_81(%rip), %xmm0 + mulss %xmm0, %xmm1 + movss .FLT_89(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_88(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_87(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_86(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_85(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_84(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_83(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_82(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss %xmm1, %xmm2 + movss %xmm2, (%rsi) + ret + +L(8): + ucomiss %xmm0, %xmm2 + jp L(9) + je L(10) + +L(9): + divss %xmm0, %xmm0 + movss %xmm0, (%rsi) + movl $1, %eax + ret + +L(10): + movss .FLT_92(%rip), %xmm1 + movl $2, %eax + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + +L(11): + movb 3(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je L(13) + +L(12): + movss (%rdi), %xmm0 + mulss %xmm0, %xmm0 + movss %xmm0, (%rsi) + ret + +L(13): + testl $8388607, (%rdi) + jne L(12) + movl $1, %eax + pxor %xmm1, %xmm1 + pxor %xmm0, %xmm0 + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + + cfi_endproc + + .type __svml_slog10_cout_rare_internal,@function + .size __svml_slog10_cout_rare_internal,.-__svml_slog10_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_slog10_data_internal_avx512: + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 3184111259 + .long 3181837556 + .long 3180047478 + .long 3177957936 + .long 3175655835 + .long 3173780127 + .long 3172237531 + .long 3170958066 + .long 3196205737 + .long 3194315592 + .long 3192585145 + .long 3191105685 + .long 3189833727 + .long 3188734475 + .long 3187779868 + .long 3186223182 + .long 1041488008 + .long 1041279100 + .long 1040946627 + .long 1040547595 + .long 1040048184 + .long 1039171801 + .long 1038306334 + .long 1037468467 + .long 1034710670 + .long 1037388369 + .long 1039339328 + .long 1040458589 + .long 1040937011 + .long 1041247376 + .long 1041427373 + .long 1041506296 + .long 3193854619 + .long 3193841271 + .long 3193799669 + .long 3193724950 + .long 3193617675 + .long 3193480957 + .long 3193318914 + .long 3193135864 + .long 3194544764 + .long 3194251079 + .long 3194067571 + .long 3193958490 + .long 3193898352 + .long 3193869008 + .long 3193857579 + .long 3193854984 + .long 1054759896 + .long 1054759749 + .long 1054758872 + .long 1054756529 + .long 1054752055 + .long 1054744934 + .long 1054734809 + .long 1054721467 + .long 1054738669 + .long 1054749415 + .long 1054755175 + .long 1054758032 + .long 1054759295 + .long 1054759760 + .long 1054759882 + .long 1054759897 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .type __svml_slog10_data_internal_avx512,@object + .size __svml_slog10_data_internal_avx512,384 + .align 32 + +__slog10_la_CoutTab: + .long 1121868800 + .long 0 + .long 0 + .long 1121641104 + .long 1004535808 + .long 912917177 + .long 1121413408 + .long 1013055488 + .long 3065901602 + .long 1121185712 + .long 1017839616 + .long 3083361151 + .long 1120958016 + .long 1021673472 + .long 929297206 + .long 1120844168 + .long 1023524864 + .long 3077496589 + .long 1120616472 + .long 1025499136 + .long 3070500046 + .long 1120388776 + .long 1027506176 + .long 912271551 + .long 1120274928 + .long 1028521984 + .long 927716856 + .long 1120047232 + .long 1030586368 + .long 923757491 + .long 1119933384 + .long 1031634944 + .long 3056752848 + .long 1119705688 + .long 1032775680 + .long 917029265 + .long 1119591840 + .long 1033314304 + .long 3065085585 + .long 1119364144 + .long 1034403840 + .long 3064614024 + .long 1119250296 + .long 1034954752 + .long 921091539 + .long 1119136448 + .long 1035513856 + .long 3057436454 + .long 1118908752 + .long 1036644352 + .long 922468856 + .long 1118794904 + .long 1037219840 + .long 3049155845 + .long 1118681056 + .long 1037799424 + .long 904301451 + .long 1118567208 + .long 1038385152 + .long 908617625 + .long 1118453360 + .long 1038977024 + .long 905362229 + .long 1118225664 + .long 1040179200 + .long 3027570914 + .long 1118111816 + .long 1040488448 + .long 882280038 + .long 1117997968 + .long 1040796672 + .long 911375775 + .long 1117884120 + .long 1041108480 + .long 904500572 + .long 1117770272 + .long 1041423872 + .long 3057579304 + .long 1117656424 + .long 1041742336 + .long 3053334705 + .long 1117542576 + .long 1042064384 + .long 3053389931 + .long 1117428728 + .long 1042390016 + .long 3051561465 + .long 1117314880 + .long 1042719232 + .long 3011187895 + .long 1117201032 + .long 1043052544 + .long 3059907089 + .long 1117087184 + .long 1043389440 + .long 3057005374 + .long 1116973336 + .long 1043729920 + .long 911932638 + .long 1116859488 + .long 1044075008 + .long 892958461 + .long 1116859488 + .long 1044075008 + .long 892958461 + .long 1116745640 + .long 1044424192 + .long 3048660547 + .long 1116631792 + .long 1044777472 + .long 3049032043 + .long 1116517944 + .long 1045134848 + .long 906867152 + .long 1116404096 + .long 1045496832 + .long 911484894 + .long 1116404096 + .long 1045496832 + .long 911484894 + .long 1116290248 + .long 1045863424 + .long 912580963 + .long 1116176400 + .long 1046235136 + .long 3058440244 + .long 1116062552 + .long 1046610944 + .long 895945194 + .long 1116062552 + .long 1046610944 + .long 895945194 + .long 1115948704 + .long 1046991872 + .long 904357324 + .long 1115834856 + .long 1047377920 + .long 902293870 + .long 1115721008 + .long 1047769088 + .long 907149878 + .long 1115721008 + .long 1047769088 + .long 907149878 + .long 1115529456 + .long 1048165888 + .long 3052029263 + .long 1115301760 + .long 1048567808 + .long 3035959522 + .long 1115301760 + .long 1048567808 + .long 3035959522 + .long 1115074064 + .long 1048775680 + .long 892998645 + .long 1115074064 + .long 1048775680 + .long 892998645 + .long 1114846368 + .long 1048982400 + .long 881767775 + .long 1114618672 + .long 1049192064 + .long 893839142 + .long 1114618672 + .long 1049192064 + .long 893839142 + .long 1114390976 + .long 1049404800 + .long 896498651 + .long 1114390976 + .long 1049404800 + .long 896498651 + .long 1114163280 + .long 1049620736 + .long 3033695903 + .long 1114163280 + .long 1049620736 + .long 3033695903 + .long 1113935584 + .long 1049839872 + .long 3029986056 + .long 1113935584 + .long 1049839872 + .long 3029986056 + .long 1113707888 + .long 1050062336 + .long 884671939 + .long 1113707888 + .long 1050062336 + .long 884671939 + .long 1113480192 + .long 1050288256 + .long 894707678 + .long 1050279936 + .long 964848148 + .long 1207959616 + .long 1174405120 + .long 1002438656 + .long 1400897536 + .long 0 + .long 1065353216 + .long 1121868800 + .long 3212771328 + .long 3079888218 + .long 870463078 + .long 2957202361 + .long 749987585 + .long 2838272395 + .long 631921661 + .long 2720751022 + .type __slog10_la_CoutTab,@object + .size __slog10_la_CoutTab,848 + .align 4 + +.FLT_77: + .long 0x53800000 + .type .FLT_77,@object + .size .FLT_77,4 + .align 4 + +.FLT_78: + .long 0x3bc00000 + .type .FLT_78,@object + .size .FLT_78,4 + .align 4 + +.FLT_79: + .long 0x48000040 + .type .FLT_79,@object + .size .FLT_79,4 + .align 4 + +.FLT_80: + .long 0x46000000 + .type .FLT_80,@object + .size .FLT_80,4 + .align 4 + +.FLT_81: + .long 0x42de5c00 + .type .FLT_81,@object + .size .FLT_81,4 + .align 4 + +.FLT_82: + .long 0xbf7f0000 + .type .FLT_82,@object + .size .FLT_82,4 + .align 4 + +.FLT_83: + .long 0xb7935d5a + .type .FLT_83,@object + .size .FLT_83,4 + .align 4 + +.FLT_84: + .long 0x33e23666 + .type .FLT_84,@object + .size .FLT_84,4 + .align 4 + +.FLT_85: + .long 0xb04353b9 + .type .FLT_85,@object + .size .FLT_85,4 + .align 4 + +.FLT_86: + .long 0x2cb3e701 + .type .FLT_86,@object + .size .FLT_86,4 + .align 4 + +.FLT_87: + .long 0xa92c998b + .type .FLT_87,@object + .size .FLT_87,4 + .align 4 + +.FLT_88: + .long 0x25aa5bfd + .type .FLT_88,@object + .size .FLT_88,4 + .align 4 + +.FLT_89: + .long 0xa22b5dae + .type .FLT_89,@object + .size .FLT_89,4 + .align 4 + +.FLT_90: + .long 0x3e9a0000 + .type .FLT_90,@object + .size .FLT_90,4 + .align 4 + +.FLT_91: + .long 0x39826a14 + .type .FLT_91,@object + .size .FLT_91,4 + .align 4 + +.FLT_92: + .long 0xbf800000 + .type .FLT_92,@object + .size .FLT_92,4 + .align 4 + +.FLT_93: + .long 0x3f800000 + .type .FLT_93,@object + .size .FLT_93,4 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core-sse2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core-sse2.S new file mode 100644 index 0000000000..bb1cdee37e --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core-sse2.S @@ -0,0 +1,20 @@ +/* SSE2 version of vectorized log10f, 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 + . */ + +#define _ZGVbN4v_log10f _ZGVbN4v_log10f_sse2 +#include "../svml_s_log10f4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core.c new file mode 100644 index 0000000000..67e9e71a76 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core.c @@ -0,0 +1,28 @@ +/* Multiple versions of vectorized log10f, 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 + . */ + +#define SYMBOL_NAME _ZGVbN4v_log10f +#include "ifunc-mathvec-sse4_1.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVbN4v_log10f, __GI__ZGVbN4v_log10f, + __redirect__ZGVbN4v_log10f) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core_sse4.S new file mode 100644 index 0000000000..bc4f7f7a88 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f4_core_sse4.S @@ -0,0 +1,1968 @@ +/* Function log10f 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: + * + * Get short reciprocal approximation Rcp ~ 1/mantissa(x) + * R = Rcp*x - 1.0 + * log10(x) = k*log10(2.0) - log10(Rcp) + poly_approximation(R) + * log10(Rcp) is tabulated + * + * + */ + +#include + + .text + .section .text.sse4,"ax",@progbits +ENTRY(_ZGVbN4v_log10f_sse4) + pushq %rbp + cfi_def_cfa_offset(16) + movq %rsp, %rbp + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + andq $-64, %rsp + subq $320, %rsp + movaps %xmm0, %xmm4 + +/* reduction: compute r,n */ + movdqu 1664+__svml_slog10_data_internal(%rip), %xmm5 + movaps %xmm0, %xmm7 + movdqu 1728+__svml_slog10_data_internal(%rip), %xmm3 + psubd %xmm5, %xmm4 + pand %xmm4, %xmm3 + movaps %xmm0, %xmm6 + paddd %xmm5, %xmm3 + psrad $23, %xmm4 + cmpltps 1280+__svml_slog10_data_internal(%rip), %xmm7 + cmpnleps 1344+__svml_slog10_data_internal(%rip), %xmm6 + cvtdq2ps %xmm4, %xmm2 + subps 1792+__svml_slog10_data_internal(%rip), %xmm3 + movups 1856+__svml_slog10_data_internal(%rip), %xmm1 + orps %xmm6, %xmm7 + mulps %xmm3, %xmm1 + movaps %xmm3, %xmm6 + mulps %xmm3, %xmm6 + +/* combine and get argument value range mask */ + movmskps %xmm7, %edx + addps 1872+__svml_slog10_data_internal(%rip), %xmm1 + movups 1888+__svml_slog10_data_internal(%rip), %xmm4 + mulps %xmm3, %xmm4 + mulps %xmm6, %xmm1 + addps 1904+__svml_slog10_data_internal(%rip), %xmm4 + movups 1920+__svml_slog10_data_internal(%rip), %xmm5 + addps %xmm1, %xmm4 + mulps %xmm3, %xmm5 + mulps %xmm6, %xmm4 + addps 1936+__svml_slog10_data_internal(%rip), %xmm5 + movups 1952+__svml_slog10_data_internal(%rip), %xmm1 + addps %xmm4, %xmm5 + mulps %xmm3, %xmm1 + mulps %xmm5, %xmm6 + addps 1968+__svml_slog10_data_internal(%rip), %xmm1 + movups 1600+__svml_slog10_data_internal(%rip), %xmm4 + addps %xmm6, %xmm1 + mulps %xmm2, %xmm4 + mulps %xmm3, %xmm1 + movups 1536+__svml_slog10_data_internal(%rip), %xmm7 + mulps %xmm7, %xmm2 + addps 1984+__svml_slog10_data_internal(%rip), %xmm1 + mulps %xmm1, %xmm3 + addps %xmm3, %xmm4 + addps %xmm2, %xmm4 + testl %edx, %edx + jne L(2) + +L(1): + movaps %xmm4, %xmm0 + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +L(2): + movups %xmm0, 192(%rsp) + movups %xmm4, 256(%rsp) + xorl %eax, %eax + movups %xmm8, 112(%rsp) + movups %xmm9, 96(%rsp) + movups %xmm10, 80(%rsp) + movups %xmm11, 64(%rsp) + movups %xmm12, 48(%rsp) + movups %xmm13, 32(%rsp) + movups %xmm14, 16(%rsp) + movups %xmm15, (%rsp) + movq %rsi, 136(%rsp) + movq %rdi, 128(%rsp) + movq %r12, 152(%rsp) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x19, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x30, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1a, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1b, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x10, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x00, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1e, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1f, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x20, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xfe, 0xff, 0xff, 0x22 + movl %eax, %r12d + movq %r13, 144(%rsp) + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + movl %edx, %r13d + +L(3): + btl %r12d, %r13d + jc L(5) + +L(4): + incl %r12d + cmpl $4, %r12d + jl L(3) + movups 112(%rsp), %xmm8 + cfi_restore(25) + movups 96(%rsp), %xmm9 + cfi_restore(26) + movups 80(%rsp), %xmm10 + cfi_restore(27) + movups 64(%rsp), %xmm11 + cfi_restore(28) + movups 48(%rsp), %xmm12 + cfi_restore(29) + movups 32(%rsp), %xmm13 + cfi_restore(30) + movups 16(%rsp), %xmm14 + cfi_restore(31) + movups (%rsp), %xmm15 + cfi_restore(32) + movq 136(%rsp), %rsi + cfi_restore(4) + movq 128(%rsp), %rdi + cfi_restore(5) + movq 152(%rsp), %r12 + cfi_restore(12) + movq 144(%rsp), %r13 + cfi_restore(13) + movups 256(%rsp), %xmm4 + jmp L(1) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x48, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x58, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x50, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x19, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x30, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1a, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1b, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x10, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x00, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xf0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1e, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x1f, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xd0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x20, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xfe, 0xff, 0xff, 0x22 + +L(5): + lea 192(%rsp,%r12,4), %rdi + lea 256(%rsp,%r12,4), %rsi + call __svml_slog10_cout_rare_internal + jmp L(4) + +END(_ZGVbN4v_log10f_sse4) + + .align 16,0x90 + +__svml_slog10_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 2(%rdi), %edx + andl $32640, %edx + cmpl $32640, %edx + je L(11) + movss (%rdi), %xmm2 + xorl %ecx, %ecx + movss %xmm2, -16(%rsp) + movzwl -14(%rsp), %edx + testl $32640, %edx + jne L(6) + mulss .FLT_83(%rip), %xmm2 + movl $-40, %ecx + movss %xmm2, -16(%rsp) + +L(6): + pxor %xmm0, %xmm0 + comiss %xmm0, %xmm2 + jbe L(8) + movaps %xmm2, %xmm1 + subss .FLT_99(%rip), %xmm1 + movss %xmm1, -20(%rsp) + andb $127, -17(%rsp) + movss -20(%rsp), %xmm0 + comiss .FLT_84(%rip), %xmm0 + jbe L(7) + movss %xmm2, -20(%rsp) + pxor %xmm8, %xmm8 + movzwl -18(%rsp), %edi + lea __slog10_la_CoutTab(%rip), %r10 + andl $-32641, %edi + addl $16256, %edi + movw %di, -18(%rsp) + movss -20(%rsp), %xmm3 + movaps %xmm3, %xmm0 + movss .FLT_86(%rip), %xmm2 + movaps %xmm2, %xmm1 + addss .FLT_85(%rip), %xmm0 + addss %xmm3, %xmm1 + movss %xmm0, -24(%rsp) + movl -24(%rsp), %r8d + movss %xmm1, -24(%rsp) + andl $127, %r8d + movss -24(%rsp), %xmm9 + movss .FLT_95(%rip), %xmm6 + subss %xmm2, %xmm9 + movzwl -14(%rsp), %edx + lea (%r8,%r8,2), %r9d + movss (%r10,%r9,4), %xmm7 + andl $32640, %edx + shrl $7, %edx + subss %xmm9, %xmm3 + mulss %xmm7, %xmm9 + mulss %xmm3, %xmm7 + subss .FLT_87(%rip), %xmm9 + movaps %xmm9, %xmm4 + lea -127(%rcx,%rdx), %ecx + cvtsi2ss %ecx, %xmm8 + addss %xmm7, %xmm4 + mulss %xmm4, %xmm6 + movss .FLT_96(%rip), %xmm10 + mulss %xmm8, %xmm10 + addss .FLT_94(%rip), %xmm6 + addss 4(%r10,%r9,4), %xmm10 + mulss %xmm4, %xmm6 + addss %xmm9, %xmm10 + addss .FLT_93(%rip), %xmm6 + mulss %xmm4, %xmm6 + movss .FLT_97(%rip), %xmm5 + mulss %xmm5, %xmm8 + addss .FLT_92(%rip), %xmm6 + addss 8(%r10,%r9,4), %xmm8 + mulss %xmm4, %xmm6 + addss .FLT_91(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_90(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_89(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_88(%rip), %xmm6 + mulss %xmm6, %xmm9 + mulss %xmm7, %xmm6 + addss %xmm6, %xmm8 + addss %xmm7, %xmm8 + addss %xmm8, %xmm9 + addss %xmm9, %xmm10 + movss %xmm10, (%rsi) + ret + +L(7): + movss .FLT_87(%rip), %xmm0 + mulss %xmm0, %xmm1 + movss .FLT_95(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_94(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_93(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_92(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_91(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_90(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_89(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_88(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss %xmm1, %xmm2 + movss %xmm2, (%rsi) + ret + +L(8): + ucomiss %xmm0, %xmm2 + jp L(9) + je L(10) + +L(9): + divss %xmm0, %xmm0 + movss %xmm0, (%rsi) + movl $1, %eax + ret + +L(10): + movss .FLT_98(%rip), %xmm1 + movl $2, %eax + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + +L(11): + movb 3(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je L(13) + +L(12): + movss (%rdi), %xmm0 + mulss %xmm0, %xmm0 + movss %xmm0, (%rsi) + ret + +L(13): + testl $8388607, (%rdi) + jne L(12) + movl $1, %eax + pxor %xmm1, %xmm1 + pxor %xmm0, %xmm0 + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + + cfi_endproc + + .type __svml_slog10_cout_rare_internal,@function + .size __svml_slog10_cout_rare_internal,.-__svml_slog10_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_slog10_data_internal: + .long 3256334460 + .long 969394728 + .long 3256334974 + .long 969699354 + .long 3256335486 + .long 970041911 + .long 3256335982 + .long 968584717 + .long 3256336494 + .long 969519438 + .long 3256336990 + .long 968649168 + .long 3256337502 + .long 970165641 + .long 3256337998 + .long 969872020 + .long 3256338494 + .long 969862955 + .long 3256338990 + .long 970135976 + .long 3256339470 + .long 968591496 + .long 3256339966 + .long 969421411 + .long 3256340462 + .long 970526195 + .long 3256340942 + .long 969806353 + .long 3256341422 + .long 969356721 + .long 3256341902 + .long 969175014 + .long 3256342382 + .long 969258977 + .long 3256342862 + .long 969606381 + .long 3256343342 + .long 970215027 + .long 3256343806 + .long 968985590 + .long 3256344286 + .long 970110228 + .long 3256344750 + .long 969392519 + .long 3256345214 + .long 968927522 + .long 3256345678 + .long 968713169 + .long 3256346142 + .long 968747418 + .long 3256346606 + .long 969028253 + .long 3256347070 + .long 969553681 + .long 3256347534 + .long 970321733 + .long 3256347982 + .long 969233313 + .long 3256348446 + .long 970480802 + .long 3256348894 + .long 969867999 + .long 3256349342 + .long 969490179 + .long 3256349790 + .long 969345487 + .long 3256350238 + .long 969432093 + .long 3256350686 + .long 969748186 + .long 3256351566 + .long 968964541 + .long 3256352446 + .long 969077639 + .long 3256353326 + .long 970073736 + .long 3256354190 + .long 969842251 + .long 3256355054 + .long 970467209 + .long 3256355902 + .long 969838628 + .long 3256356750 + .long 970041115 + .long 3256357582 + .long 968965252 + .long 3256358414 + .long 968696192 + .long 3256359246 + .long 969222201 + .long 3256360078 + .long 970531798 + .long 3256360894 + .long 970516595 + .long 3256361694 + .long 969165599 + .long 3256362494 + .long 968565200 + .long 3256363294 + .long 968704863 + .long 3256364094 + .long 969574273 + .long 3256364878 + .long 969066179 + .long 3256365662 + .long 969267840 + .long 3256366446 + .long 970169567 + .long 3256367214 + .long 969664714 + .long 3256367982 + .long 969841134 + .long 3256368734 + .long 968592559 + .long 3256369502 + .long 970104362 + .long 3256370254 + .long 970173483 + .long 3256370990 + .long 968791339 + .long 3256371742 + .long 970143819 + .long 3256372478 + .long 970028365 + .long 3256373214 + .long 970534037 + .long 3256373934 + .long 969555746 + .long 3256374654 + .long 969182856 + .long 3256375374 + .long 969407729 + .long 3256376094 + .long 970222869 + .long 3256376798 + .long 969523769 + .long 3256377502 + .long 969400361 + .long 3256378206 + .long 969845561 + .long 3256378894 + .long 968755260 + .long 3256379598 + .long 970316935 + .long 3256380286 + .long 970329575 + .long 3256380958 + .long 968786598 + .long 3256381646 + .long 969875841 + .long 3256382318 + .long 969396649 + .long 3256382990 + .long 969439935 + .long 3256383662 + .long 969999571 + .long 3256384318 + .long 968972383 + .long 3256384990 + .long 970546758 + .long 3256385646 + .long 970522577 + .long 3256386286 + .long 968894127 + .long 3256386942 + .long 969850093 + .long 3256387582 + .long 969190651 + .long 3256388222 + .long 969007524 + .long 3256388862 + .long 969295375 + .long 3256389502 + .long 970048957 + .long 3256390126 + .long 969165958 + .long 3256390750 + .long 968738453 + .long 3256391374 + .long 968761452 + .long 3256391998 + .long 969230043 + .long 3256392622 + .long 970139398 + .long 3256393230 + .long 969387611 + .long 3256393838 + .long 969067159 + .long 3256394446 + .long 969173441 + .long 3256395054 + .long 969701929 + .long 3256395646 + .long 968551015 + .long 3256396254 + .long 969910618 + .long 3256396846 + .long 969582116 + .long 3256397438 + .long 969658411 + .long 3256398030 + .long 970135319 + .long 3256398606 + .long 968911569 + .long 3256399198 + .long 970177409 + .long 3256399774 + .long 969734540 + .long 3256400350 + .long 969676181 + .long 3256400926 + .long 969998457 + .long 3256401486 + .long 968600401 + .long 3256402062 + .long 969672558 + .long 3256402622 + .long 969016921 + .long 3256403182 + .long 968726993 + .long 3256403742 + .long 968799182 + .long 3256404302 + .long 969229944 + .long 3256404862 + .long 970015791 + .long 3256405406 + .long 969056131 + .long 3256405966 + .long 970541879 + .long 3256406510 + .long 970275391 + .long 3256407054 + .long 970350525 + .long 3256407582 + .long 968666884 + .long 3256408126 + .long 969415571 + .long 3256408670 + .long 970496282 + .long 3256409198 + .long 969808752 + .long 3256409726 + .long 969447067 + .long 3256410254 + .long 969408203 + .long 3256410782 + .long 969689179 + .long 3256411310 + .long 970287052 + .long 3256411822 + .long 969101770 + .long 3256412350 + .long 970324777 + .long 3256412862 + .long 969758945 + .long 3256413374 + .long 969498644 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 986960742 + .long 986960742 + .long 986960742 + .long 986960742 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 989855744 + .long 989855744 + .long 989855744 + .long 989855744 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 8388608 + .long 8388608 + .long 8388608 + .long 8388608 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 2139095040 + .long 4286578688 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1065353216 + .long 3212836864 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 2147483648 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .type __svml_slog10_data_internal,@object + .size __svml_slog10_data_internal,2432 + .align 32 + +__slog10_la_CoutTab: + .long 1121868800 + .long 0 + .long 0 + .long 1121641104 + .long 1004535808 + .long 912917177 + .long 1121413408 + .long 1013055488 + .long 3065901602 + .long 1121185712 + .long 1017839616 + .long 3083361151 + .long 1120958016 + .long 1021673472 + .long 929297206 + .long 1120844168 + .long 1023524864 + .long 3077496589 + .long 1120616472 + .long 1025499136 + .long 3070500046 + .long 1120388776 + .long 1027506176 + .long 912271551 + .long 1120274928 + .long 1028521984 + .long 927716856 + .long 1120047232 + .long 1030586368 + .long 923757491 + .long 1119933384 + .long 1031634944 + .long 3056752848 + .long 1119705688 + .long 1032775680 + .long 917029265 + .long 1119591840 + .long 1033314304 + .long 3065085585 + .long 1119364144 + .long 1034403840 + .long 3064614024 + .long 1119250296 + .long 1034954752 + .long 921091539 + .long 1119136448 + .long 1035513856 + .long 3057436454 + .long 1118908752 + .long 1036644352 + .long 922468856 + .long 1118794904 + .long 1037219840 + .long 3049155845 + .long 1118681056 + .long 1037799424 + .long 904301451 + .long 1118567208 + .long 1038385152 + .long 908617625 + .long 1118453360 + .long 1038977024 + .long 905362229 + .long 1118225664 + .long 1040179200 + .long 3027570914 + .long 1118111816 + .long 1040488448 + .long 882280038 + .long 1117997968 + .long 1040796672 + .long 911375775 + .long 1117884120 + .long 1041108480 + .long 904500572 + .long 1117770272 + .long 1041423872 + .long 3057579304 + .long 1117656424 + .long 1041742336 + .long 3053334705 + .long 1117542576 + .long 1042064384 + .long 3053389931 + .long 1117428728 + .long 1042390016 + .long 3051561465 + .long 1117314880 + .long 1042719232 + .long 3011187895 + .long 1117201032 + .long 1043052544 + .long 3059907089 + .long 1117087184 + .long 1043389440 + .long 3057005374 + .long 1116973336 + .long 1043729920 + .long 911932638 + .long 1116859488 + .long 1044075008 + .long 892958461 + .long 1116859488 + .long 1044075008 + .long 892958461 + .long 1116745640 + .long 1044424192 + .long 3048660547 + .long 1116631792 + .long 1044777472 + .long 3049032043 + .long 1116517944 + .long 1045134848 + .long 906867152 + .long 1116404096 + .long 1045496832 + .long 911484894 + .long 1116404096 + .long 1045496832 + .long 911484894 + .long 1116290248 + .long 1045863424 + .long 912580963 + .long 1116176400 + .long 1046235136 + .long 3058440244 + .long 1116062552 + .long 1046610944 + .long 895945194 + .long 1116062552 + .long 1046610944 + .long 895945194 + .long 1115948704 + .long 1046991872 + .long 904357324 + .long 1115834856 + .long 1047377920 + .long 902293870 + .long 1115721008 + .long 1047769088 + .long 907149878 + .long 1115721008 + .long 1047769088 + .long 907149878 + .long 1115529456 + .long 1048165888 + .long 3052029263 + .long 1115301760 + .long 1048567808 + .long 3035959522 + .long 1115301760 + .long 1048567808 + .long 3035959522 + .long 1115074064 + .long 1048775680 + .long 892998645 + .long 1115074064 + .long 1048775680 + .long 892998645 + .long 1114846368 + .long 1048982400 + .long 881767775 + .long 1114618672 + .long 1049192064 + .long 893839142 + .long 1114618672 + .long 1049192064 + .long 893839142 + .long 1114390976 + .long 1049404800 + .long 896498651 + .long 1114390976 + .long 1049404800 + .long 896498651 + .long 1114163280 + .long 1049620736 + .long 3033695903 + .long 1114163280 + .long 1049620736 + .long 3033695903 + .long 1113935584 + .long 1049839872 + .long 3029986056 + .long 1113935584 + .long 1049839872 + .long 3029986056 + .long 1113707888 + .long 1050062336 + .long 884671939 + .long 1113707888 + .long 1050062336 + .long 884671939 + .long 1113480192 + .long 1050288256 + .long 894707678 + .long 1050279936 + .long 964848148 + .long 1207959616 + .long 1174405120 + .long 1002438656 + .long 1400897536 + .long 0 + .long 1065353216 + .long 1121868800 + .long 3212771328 + .long 3079888218 + .long 870463078 + .long 2957202361 + .long 749987585 + .long 2838272395 + .long 631921661 + .long 2720751022 + .type __slog10_la_CoutTab,@object + .size __slog10_la_CoutTab,848 + .align 4 + +.FLT_83: + .long 0x53800000 + .type .FLT_83,@object + .size .FLT_83,4 + .align 4 + +.FLT_84: + .long 0x3bc00000 + .type .FLT_84,@object + .size .FLT_84,4 + .align 4 + +.FLT_85: + .long 0x48000040 + .type .FLT_85,@object + .size .FLT_85,4 + .align 4 + +.FLT_86: + .long 0x46000000 + .type .FLT_86,@object + .size .FLT_86,4 + .align 4 + +.FLT_87: + .long 0x42de5c00 + .type .FLT_87,@object + .size .FLT_87,4 + .align 4 + +.FLT_88: + .long 0xbf7f0000 + .type .FLT_88,@object + .size .FLT_88,4 + .align 4 + +.FLT_89: + .long 0xb7935d5a + .type .FLT_89,@object + .size .FLT_89,4 + .align 4 + +.FLT_90: + .long 0x33e23666 + .type .FLT_90,@object + .size .FLT_90,4 + .align 4 + +.FLT_91: + .long 0xb04353b9 + .type .FLT_91,@object + .size .FLT_91,4 + .align 4 + +.FLT_92: + .long 0x2cb3e701 + .type .FLT_92,@object + .size .FLT_92,4 + .align 4 + +.FLT_93: + .long 0xa92c998b + .type .FLT_93,@object + .size .FLT_93,4 + .align 4 + +.FLT_94: + .long 0x25aa5bfd + .type .FLT_94,@object + .size .FLT_94,4 + .align 4 + +.FLT_95: + .long 0xa22b5dae + .type .FLT_95,@object + .size .FLT_95,4 + .align 4 + +.FLT_96: + .long 0x3e9a0000 + .type .FLT_96,@object + .size .FLT_96,4 + .align 4 + +.FLT_97: + .long 0x39826a14 + .type .FLT_97,@object + .size .FLT_97,4 + .align 4 + +.FLT_98: + .long 0xbf800000 + .type .FLT_98,@object + .size .FLT_98,4 + .align 4 + +.FLT_99: + .long 0x3f800000 + .type .FLT_99,@object + .size .FLT_99,4 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core-sse.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core-sse.S new file mode 100644 index 0000000000..e3467e5c90 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core-sse.S @@ -0,0 +1,20 @@ +/* SSE version of vectorized log10f, 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 + . */ + +#define _ZGVdN8v_log10f _ZGVdN8v_log10f_sse_wrapper +#include "../svml_s_log10f8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core.c new file mode 100644 index 0000000000..bfd3ef6554 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core.c @@ -0,0 +1,28 @@ +/* Multiple versions of vectorized log10f, 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 + . */ + +#define SYMBOL_NAME _ZGVdN8v_log10f +#include "ifunc-mathvec-avx2.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVdN8v_log10f, __GI__ZGVdN8v_log10f, + __redirect__ZGVdN8v_log10f) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core_avx2.S new file mode 100644 index 0000000000..9c7c67950f --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log10f8_core_avx2.S @@ -0,0 +1,1861 @@ +/* Function log10f 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: + * + * Get short reciprocal approximation Rcp ~ 1/mantissa(x) + * R = Rcp*x - 1.0 + * log10(x) = k*log10(2.0) - log10(Rcp) + poly_approximation(R) + * log10(Rcp) is tabulated + * + * + */ + +#include + + .text + .section .text.avx2,"ax",@progbits +ENTRY(_ZGVdN8v_log10f_avx2) + pushq %rbp + cfi_def_cfa_offset(16) + movq %rsp, %rbp + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + andq $-64, %rsp + subq $384, %rsp + +/* reduction: compute r,n */ + vmovups 1728+__svml_slog10_data_internal(%rip), %ymm4 + vmovups %ymm8, 32(%rsp) + vmovups %ymm9, 96(%rsp) + .cfi_escape 0x10, 0xdb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + vmovups 1920+__svml_slog10_data_internal(%rip), %ymm8 + vmovups %ymm15, 320(%rsp) + vmovups %ymm14, 288(%rsp) + vmovups %ymm13, 256(%rsp) + vmovups %ymm12, 224(%rsp) + vmovups %ymm11, 192(%rsp) + vmovups %ymm10, 160(%rsp) + vpsubd %ymm4, %ymm0, %ymm1 + vcmplt_oqps 1344+__svml_slog10_data_internal(%rip), %ymm0, %ymm5 + vcmpnle_uqps 1408+__svml_slog10_data_internal(%rip), %ymm0, %ymm6 + vpand 1792+__svml_slog10_data_internal(%rip), %ymm1, %ymm3 + vpsrad $23, %ymm1, %ymm2 + vpaddd %ymm4, %ymm3, %ymm1 + vmovups 2048+__svml_slog10_data_internal(%rip), %ymm3 + .cfi_escape 0x10, 0xdd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xde, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdf, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe0, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe1, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe2, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x22 + vcvtdq2ps %ymm2, %ymm9 + vmovups 1984+__svml_slog10_data_internal(%rip), %ymm2 + vorps %ymm6, %ymm5, %ymm7 + vsubps 1856+__svml_slog10_data_internal(%rip), %ymm1, %ymm6 + vmovups 2112+__svml_slog10_data_internal(%rip), %ymm5 + vfmadd213ps 1952+__svml_slog10_data_internal(%rip), %ymm6, %ymm8 + vfmadd213ps 2016+__svml_slog10_data_internal(%rip), %ymm6, %ymm2 + vmulps %ymm6, %ymm6, %ymm4 + vfmadd213ps 2080+__svml_slog10_data_internal(%rip), %ymm6, %ymm3 + vfmadd213ps 2144+__svml_slog10_data_internal(%rip), %ymm6, %ymm5 + vfmadd213ps %ymm2, %ymm4, %ymm8 + vfmadd213ps %ymm3, %ymm4, %ymm8 + vfmadd213ps %ymm5, %ymm4, %ymm8 + vfmadd213ps 2176+__svml_slog10_data_internal(%rip), %ymm6, %ymm8 + +/* combine and get argument value range mask */ + vmovmskps %ymm7, %edx + vmulps 1664+__svml_slog10_data_internal(%rip), %ymm9, %ymm7 + vfmadd213ps %ymm7, %ymm6, %ymm8 + vfmadd132ps 1600+__svml_slog10_data_internal(%rip), %ymm8, %ymm9 + testl %edx, %edx + jne L(2) + +L(1): + vmovaps %ymm9, %ymm0 + vmovups 32(%rsp), %ymm8 + cfi_restore(91) + vmovups 96(%rsp), %ymm9 + cfi_restore(92) + vmovups 160(%rsp), %ymm10 + cfi_restore(93) + vmovups 192(%rsp), %ymm11 + cfi_restore(94) + vmovups 224(%rsp), %ymm12 + cfi_restore(95) + vmovups 256(%rsp), %ymm13 + cfi_restore(96) + vmovups 288(%rsp), %ymm14 + cfi_restore(97) + vmovups 320(%rsp), %ymm15 + cfi_restore(98) + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + .cfi_escape 0x10, 0xdb, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdc, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xe0, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdd, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x20, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xde, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x40, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xdf, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x60, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe0, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe1, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xa0, 0xff, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0xe2, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x22 + +L(2): + vmovups %ymm0, 64(%rsp) + vmovups %ymm9, 128(%rsp) + je L(1) + xorl %eax, %eax + vzeroupper + movq %rsi, 8(%rsp) + movq %rdi, (%rsp) + movq %r12, 24(%rsp) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x88, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x98, 0xfe, 0xff, 0xff, 0x22 + movl %eax, %r12d + movq %r13, 16(%rsp) + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x90, 0xfe, 0xff, 0xff, 0x22 + movl %edx, %r13d + +L(3): + btl %r12d, %r13d + jc L(5) + +L(4): + incl %r12d + cmpl $8, %r12d + jl L(3) + movq 8(%rsp), %rsi + cfi_restore(4) + movq (%rsp), %rdi + cfi_restore(5) + movq 24(%rsp), %r12 + cfi_restore(12) + movq 16(%rsp), %r13 + cfi_restore(13) + vmovups 128(%rsp), %ymm9 + jmp L(1) + .cfi_escape 0x10, 0x04, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x88, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x05, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x80, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0c, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x98, 0xfe, 0xff, 0xff, 0x22 + .cfi_escape 0x10, 0x0d, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0x90, 0xfe, 0xff, 0xff, 0x22 + +L(5): + lea 64(%rsp,%r12,4), %rdi + lea 128(%rsp,%r12,4), %rsi + call __svml_slog10_cout_rare_internal + jmp L(4) + +END(_ZGVdN8v_log10f_avx2) + + .align 16,0x90 + +__svml_slog10_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 2(%rdi), %edx + andl $32640, %edx + cmpl $32640, %edx + je L(11) + movss (%rdi), %xmm2 + xorl %ecx, %ecx + movss %xmm2, -16(%rsp) + movzwl -14(%rsp), %edx + testl $32640, %edx + jne L(6) + mulss .FLT_83(%rip), %xmm2 + movl $-40, %ecx + movss %xmm2, -16(%rsp) + +L(6): + pxor %xmm0, %xmm0 + comiss %xmm0, %xmm2 + jbe L(8) + movaps %xmm2, %xmm1 + subss .FLT_99(%rip), %xmm1 + movss %xmm1, -20(%rsp) + andb $127, -17(%rsp) + movss -20(%rsp), %xmm0 + comiss .FLT_84(%rip), %xmm0 + jbe L(7) + movss %xmm2, -20(%rsp) + pxor %xmm8, %xmm8 + movzwl -18(%rsp), %edi + lea __slog10_la_CoutTab(%rip), %r10 + andl $-32641, %edi + addl $16256, %edi + movw %di, -18(%rsp) + movss -20(%rsp), %xmm3 + movaps %xmm3, %xmm0 + movss .FLT_86(%rip), %xmm2 + movaps %xmm2, %xmm1 + addss .FLT_85(%rip), %xmm0 + addss %xmm3, %xmm1 + movss %xmm0, -24(%rsp) + movl -24(%rsp), %r8d + movss %xmm1, -24(%rsp) + andl $127, %r8d + movss -24(%rsp), %xmm9 + movss .FLT_95(%rip), %xmm6 + subss %xmm2, %xmm9 + movzwl -14(%rsp), %edx + lea (%r8,%r8,2), %r9d + movss (%r10,%r9,4), %xmm7 + andl $32640, %edx + shrl $7, %edx + subss %xmm9, %xmm3 + mulss %xmm7, %xmm9 + mulss %xmm3, %xmm7 + subss .FLT_87(%rip), %xmm9 + movaps %xmm9, %xmm4 + lea -127(%rcx,%rdx), %ecx + cvtsi2ss %ecx, %xmm8 + addss %xmm7, %xmm4 + mulss %xmm4, %xmm6 + movss .FLT_96(%rip), %xmm10 + mulss %xmm8, %xmm10 + addss .FLT_94(%rip), %xmm6 + addss 4(%r10,%r9,4), %xmm10 + mulss %xmm4, %xmm6 + addss %xmm9, %xmm10 + addss .FLT_93(%rip), %xmm6 + mulss %xmm4, %xmm6 + movss .FLT_97(%rip), %xmm5 + mulss %xmm5, %xmm8 + addss .FLT_92(%rip), %xmm6 + addss 8(%r10,%r9,4), %xmm8 + mulss %xmm4, %xmm6 + addss .FLT_91(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_90(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_89(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_88(%rip), %xmm6 + mulss %xmm6, %xmm9 + mulss %xmm7, %xmm6 + addss %xmm6, %xmm8 + addss %xmm7, %xmm8 + addss %xmm8, %xmm9 + addss %xmm9, %xmm10 + movss %xmm10, (%rsi) + ret + +L(7): + movss .FLT_87(%rip), %xmm0 + mulss %xmm0, %xmm1 + movss .FLT_95(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_94(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_93(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_92(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_91(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_90(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_89(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_88(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss %xmm1, %xmm2 + movss %xmm2, (%rsi) + ret + +L(8): + ucomiss %xmm0, %xmm2 + jp L(9) + je L(10) + +L(9): + divss %xmm0, %xmm0 + movss %xmm0, (%rsi) + movl $1, %eax + ret + +L(10): + movss .FLT_98(%rip), %xmm1 + movl $2, %eax + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + +L(11): + movb 3(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je L(13) + +L(12): + movss (%rdi), %xmm0 + mulss %xmm0, %xmm0 + movss %xmm0, (%rsi) + ret + +L(13): + testl $8388607, (%rdi) + jne L(12) + movl $1, %eax + pxor %xmm1, %xmm1 + pxor %xmm0, %xmm0 + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + + cfi_endproc + + .type __svml_slog10_cout_rare_internal,@function + .size __svml_slog10_cout_rare_internal,.-__svml_slog10_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_slog10_data_internal: + .long 3256334460 + .long 969394728 + .long 3256334974 + .long 969699354 + .long 3256335486 + .long 970041911 + .long 3256335982 + .long 968584717 + .long 3256336494 + .long 969519438 + .long 3256336990 + .long 968649168 + .long 3256337502 + .long 970165641 + .long 3256337998 + .long 969872020 + .long 3256338494 + .long 969862955 + .long 3256338990 + .long 970135976 + .long 3256339470 + .long 968591496 + .long 3256339966 + .long 969421411 + .long 3256340462 + .long 970526195 + .long 3256340942 + .long 969806353 + .long 3256341422 + .long 969356721 + .long 3256341902 + .long 969175014 + .long 3256342382 + .long 969258977 + .long 3256342862 + .long 969606381 + .long 3256343342 + .long 970215027 + .long 3256343806 + .long 968985590 + .long 3256344286 + .long 970110228 + .long 3256344750 + .long 969392519 + .long 3256345214 + .long 968927522 + .long 3256345678 + .long 968713169 + .long 3256346142 + .long 968747418 + .long 3256346606 + .long 969028253 + .long 3256347070 + .long 969553681 + .long 3256347534 + .long 970321733 + .long 3256347982 + .long 969233313 + .long 3256348446 + .long 970480802 + .long 3256348894 + .long 969867999 + .long 3256349342 + .long 969490179 + .long 3256349790 + .long 969345487 + .long 3256350238 + .long 969432093 + .long 3256350686 + .long 969748186 + .long 3256351566 + .long 968964541 + .long 3256352446 + .long 969077639 + .long 3256353326 + .long 970073736 + .long 3256354190 + .long 969842251 + .long 3256355054 + .long 970467209 + .long 3256355902 + .long 969838628 + .long 3256356750 + .long 970041115 + .long 3256357582 + .long 968965252 + .long 3256358414 + .long 968696192 + .long 3256359246 + .long 969222201 + .long 3256360078 + .long 970531798 + .long 3256360894 + .long 970516595 + .long 3256361694 + .long 969165599 + .long 3256362494 + .long 968565200 + .long 3256363294 + .long 968704863 + .long 3256364094 + .long 969574273 + .long 3256364878 + .long 969066179 + .long 3256365662 + .long 969267840 + .long 3256366446 + .long 970169567 + .long 3256367214 + .long 969664714 + .long 3256367982 + .long 969841134 + .long 3256368734 + .long 968592559 + .long 3256369502 + .long 970104362 + .long 3256370254 + .long 970173483 + .long 3256370990 + .long 968791339 + .long 3256371742 + .long 970143819 + .long 3256372478 + .long 970028365 + .long 3256373214 + .long 970534037 + .long 3256373934 + .long 969555746 + .long 3256374654 + .long 969182856 + .long 3256375374 + .long 969407729 + .long 3256376094 + .long 970222869 + .long 3256376798 + .long 969523769 + .long 3256377502 + .long 969400361 + .long 3256378206 + .long 969845561 + .long 3256378894 + .long 968755260 + .long 3256379598 + .long 970316935 + .long 3256380286 + .long 970329575 + .long 3256380958 + .long 968786598 + .long 3256381646 + .long 969875841 + .long 3256382318 + .long 969396649 + .long 3256382990 + .long 969439935 + .long 3256383662 + .long 969999571 + .long 3256384318 + .long 968972383 + .long 3256384990 + .long 970546758 + .long 3256385646 + .long 970522577 + .long 3256386286 + .long 968894127 + .long 3256386942 + .long 969850093 + .long 3256387582 + .long 969190651 + .long 3256388222 + .long 969007524 + .long 3256388862 + .long 969295375 + .long 3256389502 + .long 970048957 + .long 3256390126 + .long 969165958 + .long 3256390750 + .long 968738453 + .long 3256391374 + .long 968761452 + .long 3256391998 + .long 969230043 + .long 3256392622 + .long 970139398 + .long 3256393230 + .long 969387611 + .long 3256393838 + .long 969067159 + .long 3256394446 + .long 969173441 + .long 3256395054 + .long 969701929 + .long 3256395646 + .long 968551015 + .long 3256396254 + .long 969910618 + .long 3256396846 + .long 969582116 + .long 3256397438 + .long 969658411 + .long 3256398030 + .long 970135319 + .long 3256398606 + .long 968911569 + .long 3256399198 + .long 970177409 + .long 3256399774 + .long 969734540 + .long 3256400350 + .long 969676181 + .long 3256400926 + .long 969998457 + .long 3256401486 + .long 968600401 + .long 3256402062 + .long 969672558 + .long 3256402622 + .long 969016921 + .long 3256403182 + .long 968726993 + .long 3256403742 + .long 968799182 + .long 3256404302 + .long 969229944 + .long 3256404862 + .long 970015791 + .long 3256405406 + .long 969056131 + .long 3256405966 + .long 970541879 + .long 3256406510 + .long 970275391 + .long 3256407054 + .long 970350525 + .long 3256407582 + .long 968666884 + .long 3256408126 + .long 969415571 + .long 3256408670 + .long 970496282 + .long 3256409198 + .long 969808752 + .long 3256409726 + .long 969447067 + .long 3256410254 + .long 969408203 + .long 3256410782 + .long 969689179 + .long 3256411310 + .long 970287052 + .long 3256411822 + .long 969101770 + .long 3256412350 + .long 970324777 + .long 3256412862 + .long 969758945 + .long 3256413374 + .long 969498644 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 1071862019 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 3214137316 + .long 986960742 + .long 986960742 + .long 986960742 + .long 986960742 + .long 986960742 + .long 986960742 + .long 986960742 + .long 986960742 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 989855744 + .long 989855744 + .long 989855744 + .long 989855744 + .long 989855744 + .long 989855744 + .long 989855744 + .long 989855744 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 8388608 + .long 8388608 + .long 8388608 + .long 8388608 + .long 8388608 + .long 8388608 + .long 8388608 + .long 8388608 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .long 2139095039 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .long 4294967040 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .long 1054736384 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .long 1050288384 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .long 3058365952 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .long 1059760811 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .long 8388607 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .long 1065353216 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 1031824308 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 3179872371 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 1031230231 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 3180460839 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 1035078550 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 3185471008 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 1041513701 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 3193854917 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .long 1054759897 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 1036894503 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 3186945393 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 1041464766 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 3193833762 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .long 1054760110 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .long 1050288283 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 2139095040 + .long 4286578688 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 1065353216 + .long 3212836864 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 2147483648 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .type __svml_slog10_data_internal,@object + .size __svml_slog10_data_internal,2688 + .align 32 + +__slog10_la_CoutTab: + .long 1121868800 + .long 0 + .long 0 + .long 1121641104 + .long 1004535808 + .long 912917177 + .long 1121413408 + .long 1013055488 + .long 3065901602 + .long 1121185712 + .long 1017839616 + .long 3083361151 + .long 1120958016 + .long 1021673472 + .long 929297206 + .long 1120844168 + .long 1023524864 + .long 3077496589 + .long 1120616472 + .long 1025499136 + .long 3070500046 + .long 1120388776 + .long 1027506176 + .long 912271551 + .long 1120274928 + .long 1028521984 + .long 927716856 + .long 1120047232 + .long 1030586368 + .long 923757491 + .long 1119933384 + .long 1031634944 + .long 3056752848 + .long 1119705688 + .long 1032775680 + .long 917029265 + .long 1119591840 + .long 1033314304 + .long 3065085585 + .long 1119364144 + .long 1034403840 + .long 3064614024 + .long 1119250296 + .long 1034954752 + .long 921091539 + .long 1119136448 + .long 1035513856 + .long 3057436454 + .long 1118908752 + .long 1036644352 + .long 922468856 + .long 1118794904 + .long 1037219840 + .long 3049155845 + .long 1118681056 + .long 1037799424 + .long 904301451 + .long 1118567208 + .long 1038385152 + .long 908617625 + .long 1118453360 + .long 1038977024 + .long 905362229 + .long 1118225664 + .long 1040179200 + .long 3027570914 + .long 1118111816 + .long 1040488448 + .long 882280038 + .long 1117997968 + .long 1040796672 + .long 911375775 + .long 1117884120 + .long 1041108480 + .long 904500572 + .long 1117770272 + .long 1041423872 + .long 3057579304 + .long 1117656424 + .long 1041742336 + .long 3053334705 + .long 1117542576 + .long 1042064384 + .long 3053389931 + .long 1117428728 + .long 1042390016 + .long 3051561465 + .long 1117314880 + .long 1042719232 + .long 3011187895 + .long 1117201032 + .long 1043052544 + .long 3059907089 + .long 1117087184 + .long 1043389440 + .long 3057005374 + .long 1116973336 + .long 1043729920 + .long 911932638 + .long 1116859488 + .long 1044075008 + .long 892958461 + .long 1116859488 + .long 1044075008 + .long 892958461 + .long 1116745640 + .long 1044424192 + .long 3048660547 + .long 1116631792 + .long 1044777472 + .long 3049032043 + .long 1116517944 + .long 1045134848 + .long 906867152 + .long 1116404096 + .long 1045496832 + .long 911484894 + .long 1116404096 + .long 1045496832 + .long 911484894 + .long 1116290248 + .long 1045863424 + .long 912580963 + .long 1116176400 + .long 1046235136 + .long 3058440244 + .long 1116062552 + .long 1046610944 + .long 895945194 + .long 1116062552 + .long 1046610944 + .long 895945194 + .long 1115948704 + .long 1046991872 + .long 904357324 + .long 1115834856 + .long 1047377920 + .long 902293870 + .long 1115721008 + .long 1047769088 + .long 907149878 + .long 1115721008 + .long 1047769088 + .long 907149878 + .long 1115529456 + .long 1048165888 + .long 3052029263 + .long 1115301760 + .long 1048567808 + .long 3035959522 + .long 1115301760 + .long 1048567808 + .long 3035959522 + .long 1115074064 + .long 1048775680 + .long 892998645 + .long 1115074064 + .long 1048775680 + .long 892998645 + .long 1114846368 + .long 1048982400 + .long 881767775 + .long 1114618672 + .long 1049192064 + .long 893839142 + .long 1114618672 + .long 1049192064 + .long 893839142 + .long 1114390976 + .long 1049404800 + .long 896498651 + .long 1114390976 + .long 1049404800 + .long 896498651 + .long 1114163280 + .long 1049620736 + .long 3033695903 + .long 1114163280 + .long 1049620736 + .long 3033695903 + .long 1113935584 + .long 1049839872 + .long 3029986056 + .long 1113935584 + .long 1049839872 + .long 3029986056 + .long 1113707888 + .long 1050062336 + .long 884671939 + .long 1113707888 + .long 1050062336 + .long 884671939 + .long 1113480192 + .long 1050288256 + .long 894707678 + .long 1050279936 + .long 964848148 + .long 1207959616 + .long 1174405120 + .long 1002438656 + .long 1400897536 + .long 0 + .long 1065353216 + .long 1121868800 + .long 3212771328 + .long 3079888218 + .long 870463078 + .long 2957202361 + .long 749987585 + .long 2838272395 + .long 631921661 + .long 2720751022 + .type __slog10_la_CoutTab,@object + .size __slog10_la_CoutTab,848 + .align 4 + +.FLT_83: + .long 0x53800000 + .type .FLT_83,@object + .size .FLT_83,4 + .align 4 + +.FLT_84: + .long 0x3bc00000 + .type .FLT_84,@object + .size .FLT_84,4 + .align 4 + +.FLT_85: + .long 0x48000040 + .type .FLT_85,@object + .size .FLT_85,4 + .align 4 + +.FLT_86: + .long 0x46000000 + .type .FLT_86,@object + .size .FLT_86,4 + .align 4 + +.FLT_87: + .long 0x42de5c00 + .type .FLT_87,@object + .size .FLT_87,4 + .align 4 + +.FLT_88: + .long 0xbf7f0000 + .type .FLT_88,@object + .size .FLT_88,4 + .align 4 + +.FLT_89: + .long 0xb7935d5a + .type .FLT_89,@object + .size .FLT_89,4 + .align 4 + +.FLT_90: + .long 0x33e23666 + .type .FLT_90,@object + .size .FLT_90,4 + .align 4 + +.FLT_91: + .long 0xb04353b9 + .type .FLT_91,@object + .size .FLT_91,4 + .align 4 + +.FLT_92: + .long 0x2cb3e701 + .type .FLT_92,@object + .size .FLT_92,4 + .align 4 + +.FLT_93: + .long 0xa92c998b + .type .FLT_93,@object + .size .FLT_93,4 + .align 4 + +.FLT_94: + .long 0x25aa5bfd + .type .FLT_94,@object + .size .FLT_94,4 + .align 4 + +.FLT_95: + .long 0xa22b5dae + .type .FLT_95,@object + .size .FLT_95,4 + .align 4 + +.FLT_96: + .long 0x3e9a0000 + .type .FLT_96,@object + .size .FLT_96,4 + .align 4 + +.FLT_97: + .long 0x39826a14 + .type .FLT_97,@object + .size .FLT_97,4 + .align 4 + +.FLT_98: + .long 0xbf800000 + .type .FLT_98,@object + .size .FLT_98,4 + .align 4 + +.FLT_99: + .long 0x3f800000 + .type .FLT_99,@object + .size .FLT_99,4 diff --git a/sysdeps/x86_64/fpu/svml_d_log102_core.S b/sysdeps/x86_64/fpu/svml_d_log102_core.S new file mode 100644 index 0000000000..3d0c058ac2 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log102_core.S @@ -0,0 +1,29 @@ +/* Function log10 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 + . */ + +#include +#include "svml_d_wrapper_impl.h" + + .text +ENTRY (_ZGVbN2v_log10) +WRAPPER_IMPL_SSE2 log10 +END (_ZGVbN2v_log10) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVbN2v_log10) +#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log104_core.S b/sysdeps/x86_64/fpu/svml_d_log104_core.S new file mode 100644 index 0000000000..9e32c62c0e --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log104_core.S @@ -0,0 +1,29 @@ +/* Function log10 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 + . */ + +#include +#include "svml_d_wrapper_impl.h" + + .text +ENTRY (_ZGVdN4v_log10) +WRAPPER_IMPL_AVX _ZGVbN2v_log10 +END (_ZGVdN4v_log10) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVdN4v_log10) +#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log104_core_avx.S b/sysdeps/x86_64/fpu/svml_d_log104_core_avx.S new file mode 100644 index 0000000000..2b073b16f9 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log104_core_avx.S @@ -0,0 +1,25 @@ +/* Function log10 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 + . */ + +#include +#include "svml_d_wrapper_impl.h" + + .text +ENTRY (_ZGVcN4v_log10) +WRAPPER_IMPL_AVX _ZGVbN2v_log10 +END (_ZGVcN4v_log10) diff --git a/sysdeps/x86_64/fpu/svml_d_log108_core.S b/sysdeps/x86_64/fpu/svml_d_log108_core.S new file mode 100644 index 0000000000..853d791f2d --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log108_core.S @@ -0,0 +1,25 @@ +/* Function log10 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 + . */ + +#include +#include "svml_d_wrapper_impl.h" + + .text +ENTRY (_ZGVeN8v_log10) +WRAPPER_IMPL_AVX512 _ZGVdN4v_log10 +END (_ZGVeN8v_log10) diff --git a/sysdeps/x86_64/fpu/svml_s_log10f16_core.S b/sysdeps/x86_64/fpu/svml_s_log10f16_core.S new file mode 100644 index 0000000000..769603c92d --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log10f16_core.S @@ -0,0 +1,25 @@ +/* Function log10f 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 + . */ + +#include +#include "svml_s_wrapper_impl.h" + + .text +ENTRY (_ZGVeN16v_log10f) +WRAPPER_IMPL_AVX512 _ZGVdN8v_log10f +END (_ZGVeN16v_log10f) diff --git a/sysdeps/x86_64/fpu/svml_s_log10f4_core.S b/sysdeps/x86_64/fpu/svml_s_log10f4_core.S new file mode 100644 index 0000000000..523525409b --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log10f4_core.S @@ -0,0 +1,29 @@ +/* Function log10f 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 + . */ + +#include +#include "svml_s_wrapper_impl.h" + + .text +ENTRY (_ZGVbN4v_log10f) +WRAPPER_IMPL_SSE2 log10f +END (_ZGVbN4v_log10f) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVbN4v_log10f) +#endif diff --git a/sysdeps/x86_64/fpu/svml_s_log10f8_core.S b/sysdeps/x86_64/fpu/svml_s_log10f8_core.S new file mode 100644 index 0000000000..630ec76b7f --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log10f8_core.S @@ -0,0 +1,29 @@ +/* Function log10f 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 + . */ + +#include +#include "svml_s_wrapper_impl.h" + + .text +ENTRY (_ZGVdN8v_log10f) +WRAPPER_IMPL_AVX _ZGVbN4v_log10f +END (_ZGVdN8v_log10f) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVdN8v_log10f) +#endif diff --git a/sysdeps/x86_64/fpu/svml_s_log10f8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_log10f8_core_avx.S new file mode 100644 index 0000000000..374208cb2c --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log10f8_core_avx.S @@ -0,0 +1,25 @@ +/* Function log10f 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 + . */ + +#include +#include "svml_s_wrapper_impl.h" + + .text +ENTRY (_ZGVcN8v_log10f) +WRAPPER_IMPL_AVX _ZGVbN4v_log10f +END (_ZGVcN8v_log10f) diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx.c new file mode 100644 index 0000000000..770fd725e0 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log10.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx2.c new file mode 100644 index 0000000000..770fd725e0 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log10.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx512f.c new file mode 100644 index 0000000000..770fd725e0 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log10-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log10.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log10.c b/sysdeps/x86_64/fpu/test-double-libmvec-log10.c new file mode 100644 index 0000000000..cb1ab36819 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log10.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC log10 +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c index 8e1aeb6cff..3ef095ae62 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c @@ -42,6 +42,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10), _ZGVbN2v_exp10) VECTOR_WRAPPER (WRAPPER_NAME (exp2), _ZGVbN2v_exp2) VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVbN2v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVbN2vv_hypot) +VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVbN2v_log10) #define VEC_INT_TYPE __m128i diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c index 7f144711bf..1606920439 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c @@ -45,6 +45,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10), _ZGVdN4v_exp10) VECTOR_WRAPPER (WRAPPER_NAME (exp2), _ZGVdN4v_exp2) VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVdN4v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVdN4vv_hypot) +VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVdN4v_log10) #ifndef __ILP32__ # define VEC_INT_TYPE __m256i diff --git a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c index 48824d699a..934003b172 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c @@ -42,6 +42,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10), _ZGVcN4v_exp10) VECTOR_WRAPPER (WRAPPER_NAME (exp2), _ZGVcN4v_exp2) VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVcN4v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVcN4vv_hypot) +VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVcN4v_log10) #define VEC_INT_TYPE __m128i diff --git a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c b/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c index eda821a402..f6eff0b72d 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c @@ -42,6 +42,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10), _ZGVeN8v_exp10) VECTOR_WRAPPER (WRAPPER_NAME (exp2), _ZGVeN8v_exp2) VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVeN8v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVeN8vv_hypot) +VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVeN8v_log10) #ifndef __ILP32__ # define VEC_INT_TYPE __m512i diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx.c new file mode 100644 index 0000000000..04f017f1e2 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-log10f.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx2.c new file mode 100644 index 0000000000..04f017f1e2 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-log10f.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx512f.c new file mode 100644 index 0000000000..04f017f1e2 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log10f-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-log10f.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log10f.c b/sysdeps/x86_64/fpu/test-float-libmvec-log10f.c new file mode 100644 index 0000000000..682ce1e239 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log10f.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC log10f +#include "test-vector-abi-arg1.h" diff --git a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c index 89132d61e9..3927d2e332 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c @@ -42,6 +42,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10f), _ZGVeN16v_exp10f) VECTOR_WRAPPER (WRAPPER_NAME (exp2f), _ZGVeN16v_exp2f) VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVeN16v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVeN16vv_hypotf) +VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVeN16v_log10f) #define VEC_INT_TYPE __m512i diff --git a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c index 5100f35035..a9f012a4ba 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c @@ -42,6 +42,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10f), _ZGVbN4v_exp10f) VECTOR_WRAPPER (WRAPPER_NAME (exp2f), _ZGVbN4v_exp2f) VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVbN4v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVbN4vv_hypotf) +VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVbN4v_log10f) #define VEC_INT_TYPE __m128i diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c index cd9be5eed4..00486c2965 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c @@ -45,6 +45,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10f), _ZGVdN8v_exp10f) VECTOR_WRAPPER (WRAPPER_NAME (exp2f), _ZGVdN8v_exp2f) VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVdN8v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVdN8vv_hypotf) +VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVdN8v_log10f) /* Redefinition of wrapper to be compatible with _ZGVdN8vvv_sincosf. */ #undef VECTOR_WRAPPER_fFF diff --git a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c b/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c index 44e4fd773c..296a4d68a8 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c @@ -42,6 +42,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (exp10f), _ZGVcN8v_exp10f) VECTOR_WRAPPER (WRAPPER_NAME (exp2f), _ZGVcN8v_exp2f) VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVcN8v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVcN8vv_hypotf) +VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVcN8v_log10f) #define VEC_INT_TYPE __m128i