From patchwork Wed Nov 24 19:38:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunil Pandey X-Patchwork-Id: 48088 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 45E6F385803A for ; Wed, 24 Nov 2021 20:03:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 45E6F385803A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1637784182; bh=Ujd+GNn4qAILddOaOlMCQA5FIwy7ZQGOP/LXtId9PTA=; 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=l9IR/WKG8M0Oh3t1dPfqW1wncIGrCTrev2VIcE4G2SftDQiynlqwajYiCSMEYf5Xb ladlkBLKZDXeIT6kf67H/08UBQJD9J2TJ/AkqGF0z4DVo2AcaafgLnP9oUU7Lhjiyf vMrbgmr3hKn2jLiHk2S9LcfH5FLhSJmyO5TIiOJs= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by sourceware.org (Postfix) with ESMTPS id AB3913857C71 for ; Wed, 24 Nov 2021 19:38:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AB3913857C71 X-IronPort-AV: E=McAfee;i="6200,9189,10178"; a="259249057" X-IronPort-AV: E=Sophos;i="5.87,261,1631602800"; d="scan'208";a="259249057" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2021 11:38:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,261,1631602800"; d="scan'208";a="597829535" Received: from scymds02.sc.intel.com ([10.82.73.244]) by fmsmga002.fm.intel.com with ESMTP; 24 Nov 2021 11:38:14 -0800 Received: from gskx-1.sc.intel.com (gskx-1.sc.intel.com [172.25.149.211]) by scymds02.sc.intel.com with ESMTP id 1AOJc7XM021555; Wed, 24 Nov 2021 11:38:14 -0800 To: libc-alpha@sourceware.org Subject: [PATCH 35/42] x86-64: Add vector log2/log2f implementation to libmvec Date: Wed, 24 Nov 2021 11:38:00 -0800 Message-Id: <20211124193807.2093208-36-skpgkp2@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211124193807.2093208-1-skpgkp2@gmail.com> References: <20211124193807.2093208-1-skpgkp2@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-6.7 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, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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 log2/log2f containing SSE, AVX, AVX2 and AVX512 versions for libmvec as per vector ABI. It also contains accuracy and ABI tests for vector log2/log2f 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 + sysdeps/x86_64/fpu/Makeconfig | 1 + sysdeps/x86_64/fpu/Versions | 2 + sysdeps/x86_64/fpu/libm-test-ulps | 20 + .../fpu/multiarch/svml_d_log22_core-sse2.S | 20 + .../x86_64/fpu/multiarch/svml_d_log22_core.c | 27 + .../fpu/multiarch/svml_d_log22_core_sse4.S | 5474 +++++++++++++++++ .../fpu/multiarch/svml_d_log24_core-sse.S | 20 + .../x86_64/fpu/multiarch/svml_d_log24_core.c | 27 + .../fpu/multiarch/svml_d_log24_core_avx2.S | 5321 ++++++++++++++++ .../fpu/multiarch/svml_d_log28_core-avx2.S | 20 + .../x86_64/fpu/multiarch/svml_d_log28_core.c | 27 + .../fpu/multiarch/svml_d_log28_core_avx512.S | 1661 +++++ .../fpu/multiarch/svml_s_log2f16_core-avx2.S | 20 + .../fpu/multiarch/svml_s_log2f16_core.c | 28 + .../multiarch/svml_s_log2f16_core_avx512.S | 697 +++ .../fpu/multiarch/svml_s_log2f4_core-sse2.S | 20 + .../x86_64/fpu/multiarch/svml_s_log2f4_core.c | 28 + .../fpu/multiarch/svml_s_log2f4_core_sse4.S | 1795 ++++++ .../fpu/multiarch/svml_s_log2f8_core-sse.S | 20 + .../x86_64/fpu/multiarch/svml_s_log2f8_core.c | 28 + .../fpu/multiarch/svml_s_log2f8_core_avx2.S | 1727 ++++++ sysdeps/x86_64/fpu/svml_d_log22_core.S | 29 + sysdeps/x86_64/fpu/svml_d_log24_core.S | 29 + sysdeps/x86_64/fpu/svml_d_log24_core_avx.S | 25 + sysdeps/x86_64/fpu/svml_d_log28_core.S | 25 + sysdeps/x86_64/fpu/svml_s_log2f16_core.S | 25 + sysdeps/x86_64/fpu/svml_s_log2f4_core.S | 29 + sysdeps/x86_64/fpu/svml_s_log2f8_core.S | 29 + sysdeps/x86_64/fpu/svml_s_log2f8_core_avx.S | 25 + .../x86_64/fpu/test-double-libmvec-log2-avx.c | 1 + .../fpu/test-double-libmvec-log2-avx2.c | 1 + .../fpu/test-double-libmvec-log2-avx512f.c | 1 + sysdeps/x86_64/fpu/test-double-libmvec-log2.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 + .../x86_64/fpu/test-float-libmvec-log2f-avx.c | 1 + .../fpu/test-float-libmvec-log2f-avx2.c | 1 + .../fpu/test-float-libmvec-log2f-avx512f.c | 1 + sysdeps/x86_64/fpu/test-float-libmvec-log2f.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 + 49 files changed, 17243 insertions(+), 1 deletion(-) create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log22_core-sse2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log22_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log22_core_sse4.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log24_core-sse.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log24_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log24_core_avx2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log28_core-avx2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log28_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_d_log28_core_avx512.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core-avx2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core_avx512.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core-sse2.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core_sse4.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core-sse.S create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core.c create mode 100644 sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core_avx2.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log22_core.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log24_core.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log24_core_avx.S create mode 100644 sysdeps/x86_64/fpu/svml_d_log28_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log2f16_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log2f4_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log2f8_core.S create mode 100644 sysdeps/x86_64/fpu/svml_s_log2f8_core_avx.S create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log2-avx.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log2-avx2.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log2-avx512f.c create mode 100644 sysdeps/x86_64/fpu/test-double-libmvec-log2.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx2.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx512f.c create mode 100644 sysdeps/x86_64/fpu/test-float-libmvec-log2f.c diff --git a/bits/libm-simd-decl-stubs.h b/bits/libm-simd-decl-stubs.h index 6f10e52d7c..728864ac0d 100644 --- a/bits/libm-simd-decl-stubs.h +++ b/bits/libm-simd-decl-stubs.h @@ -285,4 +285,15 @@ #define __DECL_SIMD_log1pf32x #define __DECL_SIMD_log1pf64x #define __DECL_SIMD_log1pf128x + +#define __DECL_SIMD_log2 +#define __DECL_SIMD_log2f +#define __DECL_SIMD_log2l +#define __DECL_SIMD_log2f16 +#define __DECL_SIMD_log2f32 +#define __DECL_SIMD_log2f64 +#define __DECL_SIMD_log2f128 +#define __DECL_SIMD_log2f32x +#define __DECL_SIMD_log2f64x +#define __DECL_SIMD_log2f128x #endif diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h index 34810571b2..5db493d938 100644 --- a/math/bits/mathcalls.h +++ b/math/bits/mathcalls.h @@ -130,7 +130,7 @@ __MATHCALL (logb,, (_Mdouble_ __x)); __MATHCALL_VEC (exp2,, (_Mdouble_ __x)); /* Compute base-2 logarithm of X. */ -__MATHCALL (log2,, (_Mdouble_ __x)); +__MATHCALL_VEC (log2,, (_Mdouble_ __x)); #endif diff --git a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist index 9daf3ce9c0..c3b83b6de0 100644 --- a/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/libmvec.abilist @@ -61,6 +61,7 @@ GLIBC_2.35 _ZGVbN2v_exp2 F GLIBC_2.35 _ZGVbN2v_expm1 F GLIBC_2.35 _ZGVbN2v_log10 F GLIBC_2.35 _ZGVbN2v_log1p F +GLIBC_2.35 _ZGVbN2v_log2 F GLIBC_2.35 _ZGVbN2vv_atan2 F GLIBC_2.35 _ZGVbN2vv_hypot F GLIBC_2.35 _ZGVbN4v_acosf F @@ -78,6 +79,7 @@ GLIBC_2.35 _ZGVbN4v_exp2f F GLIBC_2.35 _ZGVbN4v_expm1f F GLIBC_2.35 _ZGVbN4v_log10f F GLIBC_2.35 _ZGVbN4v_log1pf F +GLIBC_2.35 _ZGVbN4v_log2f F GLIBC_2.35 _ZGVbN4vv_atan2f F GLIBC_2.35 _ZGVbN4vv_hypotf F GLIBC_2.35 _ZGVcN4v_acos F @@ -95,6 +97,7 @@ GLIBC_2.35 _ZGVcN4v_exp2 F GLIBC_2.35 _ZGVcN4v_expm1 F GLIBC_2.35 _ZGVcN4v_log10 F GLIBC_2.35 _ZGVcN4v_log1p F +GLIBC_2.35 _ZGVcN4v_log2 F GLIBC_2.35 _ZGVcN4vv_atan2 F GLIBC_2.35 _ZGVcN4vv_hypot F GLIBC_2.35 _ZGVcN8v_acosf F @@ -112,6 +115,7 @@ GLIBC_2.35 _ZGVcN8v_exp2f F GLIBC_2.35 _ZGVcN8v_expm1f F GLIBC_2.35 _ZGVcN8v_log10f F GLIBC_2.35 _ZGVcN8v_log1pf F +GLIBC_2.35 _ZGVcN8v_log2f F GLIBC_2.35 _ZGVcN8vv_atan2f F GLIBC_2.35 _ZGVcN8vv_hypotf F GLIBC_2.35 _ZGVdN4v_acos F @@ -129,6 +133,7 @@ GLIBC_2.35 _ZGVdN4v_exp2 F GLIBC_2.35 _ZGVdN4v_expm1 F GLIBC_2.35 _ZGVdN4v_log10 F GLIBC_2.35 _ZGVdN4v_log1p F +GLIBC_2.35 _ZGVdN4v_log2 F GLIBC_2.35 _ZGVdN4vv_atan2 F GLIBC_2.35 _ZGVdN4vv_hypot F GLIBC_2.35 _ZGVdN8v_acosf F @@ -146,6 +151,7 @@ GLIBC_2.35 _ZGVdN8v_exp2f F GLIBC_2.35 _ZGVdN8v_expm1f F GLIBC_2.35 _ZGVdN8v_log10f F GLIBC_2.35 _ZGVdN8v_log1pf F +GLIBC_2.35 _ZGVdN8v_log2f F GLIBC_2.35 _ZGVdN8vv_atan2f F GLIBC_2.35 _ZGVdN8vv_hypotf F GLIBC_2.35 _ZGVeN16v_acosf F @@ -163,6 +169,7 @@ GLIBC_2.35 _ZGVeN16v_exp2f F GLIBC_2.35 _ZGVeN16v_expm1f F GLIBC_2.35 _ZGVeN16v_log10f F GLIBC_2.35 _ZGVeN16v_log1pf F +GLIBC_2.35 _ZGVeN16v_log2f F GLIBC_2.35 _ZGVeN16vv_atan2f F GLIBC_2.35 _ZGVeN16vv_hypotf F GLIBC_2.35 _ZGVeN8v_acos F @@ -180,5 +187,6 @@ GLIBC_2.35 _ZGVeN8v_exp2 F GLIBC_2.35 _ZGVeN8v_expm1 F GLIBC_2.35 _ZGVeN8v_log10 F GLIBC_2.35 _ZGVeN8v_log1p F +GLIBC_2.35 _ZGVeN8v_log2 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 b822ddc5e1..613e9c94b9 100644 --- a/sysdeps/x86/fpu/bits/math-vector.h +++ b/sysdeps/x86/fpu/bits/math-vector.h @@ -126,6 +126,10 @@ # define __DECL_SIMD_log1p __DECL_SIMD_x86_64 # undef __DECL_SIMD_log1pf # define __DECL_SIMD_log1pf __DECL_SIMD_x86_64 +# undef __DECL_SIMD_log2 +# define __DECL_SIMD_log2 __DECL_SIMD_x86_64 +# undef __DECL_SIMD_log2f +# define __DECL_SIMD_log2f __DECL_SIMD_x86_64 # endif #endif diff --git a/sysdeps/x86_64/fpu/Makeconfig b/sysdeps/x86_64/fpu/Makeconfig index b557030447..44700c3f2b 100644 --- a/sysdeps/x86_64/fpu/Makeconfig +++ b/sysdeps/x86_64/fpu/Makeconfig @@ -42,6 +42,7 @@ libmvec-funcs = \ log \ log10 \ log1p \ + log2 \ pow \ sin \ sincos \ diff --git a/sysdeps/x86_64/fpu/Versions b/sysdeps/x86_64/fpu/Versions index 496cd09d2b..d1625d07de 100644 --- a/sysdeps/x86_64/fpu/Versions +++ b/sysdeps/x86_64/fpu/Versions @@ -29,6 +29,7 @@ libmvec { _ZGVbN2v_expm1; _ZGVcN4v_expm1; _ZGVdN4v_expm1; _ZGVeN8v_expm1; _ZGVbN2v_log10; _ZGVcN4v_log10; _ZGVdN4v_log10; _ZGVeN8v_log10; _ZGVbN2v_log1p; _ZGVcN4v_log1p; _ZGVdN4v_log1p; _ZGVeN8v_log1p; + _ZGVbN2v_log2; _ZGVcN4v_log2; _ZGVdN4v_log2; _ZGVeN8v_log2; _ZGVbN2vv_atan2; _ZGVcN4vv_atan2; _ZGVdN4vv_atan2; _ZGVeN8vv_atan2; _ZGVbN2vv_hypot; _ZGVcN4vv_hypot; _ZGVdN4vv_hypot; _ZGVeN8vv_hypot; _ZGVbN4v_acosf; _ZGVcN8v_acosf; _ZGVdN8v_acosf; _ZGVeN16v_acosf; @@ -46,6 +47,7 @@ libmvec { _ZGVbN4v_expm1f; _ZGVcN8v_expm1f; _ZGVdN8v_expm1f; _ZGVeN16v_expm1f; _ZGVbN4v_log10f; _ZGVcN8v_log10f; _ZGVdN8v_log10f; _ZGVeN16v_log10f; _ZGVbN4v_log1pf; _ZGVcN8v_log1pf; _ZGVdN8v_log1pf; _ZGVeN16v_log1pf; + _ZGVbN4v_log2f; _ZGVcN8v_log2f; _ZGVdN8v_log2f; _ZGVeN16v_log2f; _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 af68c48b2b..0df9130e8d 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -1826,6 +1826,26 @@ float: 3 float128: 1 ldouble: 1 +Function: "log2_vlen16": +float: 1 + +Function: "log2_vlen2": +double: 1 + +Function: "log2_vlen4": +double: 1 +float: 1 + +Function: "log2_vlen4_avx2": +double: 1 + +Function: "log2_vlen8": +double: 1 +float: 1 + +Function: "log2_vlen8_avx2": +float: 1 + Function: "log_downward": float: 2 float128: 1 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core-sse2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core-sse2.S new file mode 100644 index 0000000000..e0833a174b --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core-sse2.S @@ -0,0 +1,20 @@ +/* SSE2 version of vectorized log2, 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_log2 _ZGVbN2v_log2_sse2 +#include "../svml_d_log22_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core.c new file mode 100644 index 0000000000..6d0b5a03ca --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core.c @@ -0,0 +1,27 @@ +/* Multiple versions of vectorized log2, 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_log2 +#include "ifunc-mathvec-sse4_1.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVbN2v_log2, __GI__ZGVbN2v_log2, __redirect__ZGVbN2v_log2) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core_sse4.S new file mode 100644 index 0000000000..f748fc7d3c --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log22_core_sse4.S @@ -0,0 +1,5474 @@ +/* Function log 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 + * log2(x) = k - log2(Rcp) + poly_approximation(R) + * log2(Rcp) is tabulated + * + * + */ + +#include + + .text +ENTRY(_ZGVbN2v_log2_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 12672+__svml_dlog2_data_internal(%rip), %xmm5 + +/* check range */ + movaps %xmm6, %xmm3 + andps %xmm6, %xmm5 + movaps %xmm6, %xmm2 + orps 12800+__svml_dlog2_data_internal(%rip), %xmm5 + lea -4218816+__svml_dlog2_data_internal(%rip), %r8 + +/* reciprocal approximation good to at least 11 bits */ + cvtpd2ps %xmm5, %xmm7 + cmpltpd 12864+__svml_dlog2_data_internal(%rip), %xmm3 + cmpnlepd 12928+__svml_dlog2_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 12992+__svml_dlog2_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 13120+__svml_dlog2_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 */ + movups 13184+__svml_dlog2_data_internal(%rip), %xmm7 + cmpltpd %xmm4, %xmm7 + +/* polynomial */ + movups 12544+__svml_dlog2_data_internal(%rip), %xmm4 + mulpd %xmm5, %xmm4 + pshufd $2, %xmm3, %xmm2 + movaps %xmm5, %xmm3 + mulpd %xmm5, %xmm3 + movd %xmm2, %ecx + movups 12576+__svml_dlog2_data_internal(%rip), %xmm2 + andps 13248+__svml_dlog2_data_internal(%rip), %xmm7 + addpd 12560+__svml_dlog2_data_internal(%rip), %xmm4 + mulpd %xmm5, %xmm2 + mulpd %xmm3, %xmm4 + addpd 12592+__svml_dlog2_data_internal(%rip), %xmm2 + addpd %xmm4, %xmm2 + orps 13312+__svml_dlog2_data_internal(%rip), %xmm7 + subpd %xmm7, %xmm0 + mulpd %xmm2, %xmm3 + movups 12608+__svml_dlog2_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 .LBL_1_3 + +.LBL_1_2: + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +.LBL_1_3: + 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 + +.LBL_1_7: + btl %r12d, %r13d + jc .LBL_1_10 + +.LBL_1_8: + incl %r12d + cmpl $2, %r12d + jl .LBL_1_7 + 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 .LBL_1_2 + .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 + +.LBL_1_10: + lea 192(%rsp,%r12,8), %rdi + lea 256(%rsp,%r12,8), %rsi + call __svml_dlog2_cout_rare_internal + jmp .LBL_1_8 + +END(_ZGVbN2v_log2_sse4) + + .align 16,0x90 + +__svml_dlog2_cout_rare_internal: + + cfi_startproc + + movq $0, -64(%rsp) + movsd -64(%rsp), %xmm0 + movsd (%rdi), %xmm1 + movups _zeros.173.0.0.1(%rip), %xmm2 + subsd %xmm0, %xmm1 + movsd %xmm1, -8(%rsp) + movups %xmm2, -56(%rsp) + movups _ones.173.0.0.1(%rip), %xmm0 + movups %xmm0, -40(%rsp) + movups _infs.173.0.0.1(%rip), %xmm0 + movups %xmm0, -24(%rsp) + movl -4(%rsp), %eax + cmpl $2146435072, %eax + jae .LBL_2_19 + lea -1072660480(%rax), %edx + cmpl $53248, %edx + jae .LBL_2_14 + lea -1072693232(%rax), %edx + cmpl $24, %edx + jae .LBL_2_13 + movl -8(%rsp), %edi + movl %eax, %ecx + movl %edi, %edx + shll $11, %ecx + shrl $21, %edx + orl %edx, %ecx + addl $-2147483646, %ecx + cmpl $3, %ecx + jae .LBL_2_12 + addl $-1072693248, %eax + orl %edi, %eax + jne .LBL_2_10 + movq -56(%rsp), %rax + movq %rax, (%rsi) + jmp .LBL_2_11 + +.LBL_2_10: + movsd -8(%rsp), %xmm0 + movsd 16+__dlog2_la__Q3(%rip), %xmm2 + movsd 24+__dlog2_la__Q3(%rip), %xmm1 + addsd -32(%rsp), %xmm0 + mulsd %xmm0, %xmm2 + mulsd %xmm0, %xmm1 + addsd 8+__dlog2_la__Q3(%rip), %xmm2 + mulsd %xmm0, %xmm2 + movsd %xmm0, -8(%rsp) + addsd __dlog2_la__Q3(%rip), %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm1, %xmm2 + movsd %xmm2, (%rsi) + +.LBL_2_11: + xorl %eax, %eax + ret + +.LBL_2_12: + movsd -8(%rsp), %xmm2 + xorl %eax, %eax + movsd 16+__dlog2_la__Q2(%rip), %xmm1 + movsd 24+__dlog2_la__Q2(%rip), %xmm3 + addsd -32(%rsp), %xmm2 + movaps %xmm2, %xmm0 + mulsd %xmm2, %xmm0 + mulsd %xmm0, %xmm1 + mulsd %xmm0, %xmm3 + addsd __dlog2_la__Q2(%rip), %xmm1 + addsd 8+__dlog2_la__Q2(%rip), %xmm3 + mulsd %xmm2, %xmm1 + mulsd %xmm0, %xmm3 + movsd %xmm2, -8(%rsp) + addsd %xmm1, %xmm3 + movl $0, -8(%rsp) + movsd -8(%rsp), %xmm4 + subsd %xmm4, %xmm2 + addsd %xmm2, %xmm4 + mulsd 32+__dlog2_la__Q2(%rip), %xmm4 + addsd %xmm3, %xmm4 + movsd %xmm4, (%rsi) + ret + +.LBL_2_13: + movsd -8(%rsp), %xmm2 + xorl %eax, %eax + movsd 72+__dlog2_la__Q1(%rip), %xmm10 + movsd 64+__dlog2_la__Q1(%rip), %xmm4 + movsd __dlog2_la__TWO_32P(%rip), %xmm5 + movsd __dlog2_la__TWO_32P(%rip), %xmm7 + movsd 88+__dlog2_la__Q1(%rip), %xmm14 + movsd __dlog2_la__TWO_32P(%rip), %xmm11 + movsd __dlog2_la__TWO_32P(%rip), %xmm15 + addsd -32(%rsp), %xmm2 + movaps %xmm2, %xmm3 + movaps %xmm2, %xmm6 + mulsd %xmm2, %xmm3 + movaps %xmm2, %xmm0 + mulsd %xmm2, %xmm5 + mulsd __dlog2_la__TWO_32(%rip), %xmm6 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 56+__dlog2_la__Q1(%rip), %xmm10 + addsd 48+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 40+__dlog2_la__Q1(%rip), %xmm10 + addsd 32+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 24+__dlog2_la__Q1(%rip), %xmm10 + addsd 16+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm2, %xmm4 + movsd __dlog2_la__TWO_32(%rip), %xmm3 + addsd %xmm4, %xmm10 + mulsd %xmm10, %xmm7 + movaps %xmm3, %xmm8 + mulsd %xmm10, %xmm8 + movsd %xmm5, -72(%rsp) + movsd -72(%rsp), %xmm1 + movsd %xmm7, -72(%rsp) + subsd %xmm6, %xmm1 + movsd -72(%rsp), %xmm9 + subsd %xmm1, %xmm0 + subsd %xmm8, %xmm9 + movsd %xmm1, -8(%rsp) + subsd %xmm9, %xmm10 + addsd %xmm9, %xmm14 + addsd 8+__dlog2_la__Q1(%rip), %xmm10 + movaps %xmm14, %xmm4 + mulsd %xmm0, %xmm4 + mulsd %xmm2, %xmm10 + mulsd %xmm1, %xmm14 + addsd %xmm0, %xmm1 + addsd %xmm10, %xmm4 + movaps %xmm4, %xmm12 + movsd 80+__dlog2_la__Q1(%rip), %xmm9 + addsd %xmm14, %xmm12 + mulsd %xmm12, %xmm11 + mulsd %xmm3, %xmm12 + movsd %xmm11, -72(%rsp) + movsd -72(%rsp), %xmm13 + subsd %xmm12, %xmm13 + subsd %xmm13, %xmm4 + addsd %xmm13, %xmm9 + addsd %xmm14, %xmm4 + movaps %xmm9, %xmm13 + addsd __dlog2_la__Q1(%rip), %xmm4 + addsd %xmm4, %xmm13 + mulsd %xmm13, %xmm15 + mulsd %xmm3, %xmm13 + movsd %xmm15, -72(%rsp) + movsd -72(%rsp), %xmm14 + subsd %xmm13, %xmm14 + mulsd %xmm14, %xmm1 + subsd %xmm14, %xmm9 + addsd %xmm9, %xmm4 + mulsd %xmm2, %xmm4 + addsd %xmm4, %xmm1 + movsd %xmm1, (%rsi) + ret + +.LBL_2_14: + movl %eax, %ecx + movl %eax, %edx + shrl $20, %ecx + andl $1048575, %edx + addl $-1023, %ecx + cmpl $1048576, %eax + jae .LBL_2_18 + movl %edx, -4(%rsp) + movl -8(%rsp), %edx + orl %edx, %eax + jne .LBL_2_17 + movsd -32(%rsp), %xmm0 + movl $2, %eax + divsd -56(%rsp), %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_17: + movsd -8(%rsp), %xmm0 + mulsd __dlog2_la__TWO_55(%rip), %xmm0 + movsd %xmm0, -8(%rsp) + movl -4(%rsp), %edx + movl %edx, %ecx + shrl $20, %ecx + movl %edx, %eax + addl $-1078, %ecx + +.LBL_2_18: + shrl $12, %eax + orl $1072693248, %edx + movzbl %al, %edi + pxor %xmm7, %xmm7 + movl %edx, -4(%rsp) + lea __dlog2_la___libm_rcp_table_256(%rip), %rdx + movsd -8(%rsp), %xmm10 + pxor %xmm8, %xmm8 + movl $0, -8(%rsp) + lea __dlog2_la___libm_log2_table_256(%rip), %rax + movsd -8(%rsp), %xmm0 + cvtss2sd (%rdx,%rdi,4), %xmm7 + cvtsi2sd %ecx, %xmm8 + subsd %xmm0, %xmm10 + mulsd %xmm7, %xmm10 + mulsd %xmm0, %xmm7 + movsd 40+__dlog2_la__P(%rip), %xmm4 + movsd 32+__dlog2_la__P(%rip), %xmm3 + movsd 48+__dlog2_la__P(%rip), %xmm5 + movsd __dlog2_la__TWO_32(%rip), %xmm6 + shlq $4, %rdi + addsd -32(%rsp), %xmm7 + movaps %xmm7, %xmm2 + mulsd %xmm5, %xmm7 + addsd %xmm10, %xmm2 + mulsd %xmm5, %xmm10 + addsd %xmm7, %xmm6 + movaps %xmm2, %xmm1 + mulsd %xmm2, %xmm1 + mulsd %xmm1, %xmm4 + mulsd %xmm1, %xmm3 + addsd 24+__dlog2_la__P(%rip), %xmm4 + addsd 16+__dlog2_la__P(%rip), %xmm3 + mulsd %xmm1, %xmm4 + mulsd %xmm1, %xmm3 + addsd 8+__dlog2_la__P(%rip), %xmm4 + addsd __dlog2_la__P(%rip), %xmm3 + mulsd %xmm1, %xmm4 + mulsd %xmm2, %xmm3 + movsd %xmm6, -72(%rsp) + addsd %xmm3, %xmm4 + addsd 8(%rax,%rdi), %xmm8 + addsd %xmm4, %xmm10 + movsd -72(%rsp), %xmm9 + subsd __dlog2_la__TWO_32(%rip), %xmm9 + subsd %xmm9, %xmm7 + addsd %xmm8, %xmm9 + addsd (%rax,%rdi), %xmm7 + movsd %xmm9, -8(%rsp) + xorl %eax, %eax + addsd %xmm7, %xmm10 + addsd %xmm9, %xmm10 + movsd %xmm10, (%rsi) + ret + +.LBL_2_19: + movl %eax, %edx + andl $2147483647, %edx + cmpl $2146435072, %edx + ja .LBL_2_28 + jne .LBL_2_22 + cmpl $0, -8(%rsp) + jne .LBL_2_28 + +.LBL_2_22: + testl $-2147483648, %eax + je .LBL_2_27 + movl -8(%rsp), %eax + orl %eax, %edx + movsd -56(%rsp), %xmm1 + jne .LBL_2_25 + movsd -32(%rsp), %xmm0 + movl $2, %eax + divsd %xmm1, %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_25: + movsd -24(%rsp), %xmm0 + movl $1, %eax + mulsd %xmm1, %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_27: + movq -8(%rsp), %rax + movq %rax, (%rsi) + xorl %eax, %eax + ret + +.LBL_2_28: + movsd -8(%rsp), %xmm0 + xorl %eax, %eax + mulsd -40(%rsp), %xmm0 + movsd %xmm0, (%rsi) + ret + + cfi_endproc + + .type __svml_dlog2_cout_rare_internal,@function + .size __svml_dlog2_cout_rare_internal,.-__svml_dlog2_cout_rare_internal + .section .rodata, "a" + .align 64 + .align 16 + +_zeros.173.0.0.1: + .long 0 + .long 0 + .long 0 + .long 2147483648 + .align 16 + +_ones.173.0.0.1: + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .align 16 + +_infs.173.0.0.1: + .long 0 + .long 2146435072 + .long 0 + .long 4293918720 + + .section .rodata, "a" + .space 16, 0x00 + .align 64 + +__svml_dlog2_data_internal: + .long 0 + .long 3230658560 + .long 0 + .long 0 + .long 3721504 + .long 3230658564 + .long 390392217 + .long 1028833224 + .long 4279173520 + .long 3230658567 + .long 3697526933 + .long 3176772302 + .long 4236484232 + .long 3230658571 + .long 3866369393 + .long 3173573477 + .long 4170683432 + .long 3230658575 + .long 2406066045 + .long 1027614617 + .long 4081833376 + .long 3230658579 + .long 872311433 + .long 1029558987 + .long 3969996056 + .long 3230658583 + .long 3455238169 + .long 3176293652 + .long 3835233240 + .long 3230658587 + .long 3122028036 + .long 3175399406 + .long 3677606424 + .long 3230658591 + .long 3775975107 + .long 3175065502 + .long 3497176864 + .long 3230658595 + .long 1120402784 + .long 3176065974 + .long 3294005576 + .long 3230658599 + .long 3607704643 + .long 1027775251 + .long 3068153320 + .long 3230658603 + .long 3174454558 + .long 1028715334 + .long 2819680616 + .long 3230658607 + .long 1714361654 + .long 3176145083 + .long 2548647760 + .long 3230658611 + .long 1446250901 + .long 1029564267 + .long 2255114776 + .long 3230658615 + .long 4080025744 + .long 1029178975 + .long 1939141472 + .long 3230658619 + .long 841987973 + .long 1029054409 + .long 1600787408 + .long 3230658623 + .long 399562616 + .long 1024114381 + .long 1240111912 + .long 3230658627 + .long 3503181124 + .long 3176697658 + .long 857174080 + .long 3230658631 + .long 1254487117 + .long 3175371962 + .long 452032760 + .long 3230658635 + .long 4205447303 + .long 3176492920 + .long 24746584 + .long 3230658639 + .long 1994290281 + .long 1028250505 + .long 3870341224 + .long 3230658642 + .long 3457675008 + .long 3176979311 + .long 3398940264 + .long 3230658646 + .long 3225497353 + .long 3176623592 + .long 2905568928 + .long 3230658650 + .long 2126923612 + .long 1026561068 + .long 2390284912 + .long 3230658654 + .long 4230405746 + .long 3172886618 + .long 1853145696 + .long 3230658658 + .long 2504030371 + .long 3175134796 + .long 1294208528 + .long 3230658662 + .long 2470849917 + .long 3177172451 + .long 713530440 + .long 3230658666 + .long 4008627283 + .long 3176362565 + .long 111168232 + .long 3230658670 + .long 3947344950 + .long 1028309766 + .long 3782145768 + .long 3230658673 + .long 3547697003 + .long 3176800217 + .long 3136584832 + .long 3230658677 + .long 2863038012 + .long 1025769979 + .long 2469508848 + .long 3230658681 + .long 4101655891 + .long 1028623806 + .long 1780973736 + .long 3230658685 + .long 180044497 + .long 1028727134 + .long 1071035200 + .long 3230658689 + .long 1240324917 + .long 1029164642 + .long 339748720 + .long 3230658693 + .long 3339205157 + .long 3174606851 + .long 3882136872 + .long 3230658696 + .long 3953461054 + .long 1027744139 + .long 3108320112 + .long 3230658700 + .long 4056294543 + .long 1027898214 + .long 2313320576 + .long 3230658704 + .long 2017978773 + .long 3176388905 + .long 1497192904 + .long 3230658708 + .long 2630318761 + .long 3172120215 + .long 659991504 + .long 3230658712 + .long 1173149442 + .long 3176476805 + .long 4096737888 + .long 3230658715 + .long 2084279151 + .long 3176632233 + .long 3217551464 + .long 3230658719 + .long 147752605 + .long 3175187076 + .long 2317453320 + .long 3230658723 + .long 3463598502 + .long 1029004710 + .long 1396497032 + .long 3230658727 + .long 348113666 + .long 3175216077 + .long 454735992 + .long 3230658731 + .long 2797541458 + .long 3172926093 + .long 3787190664 + .long 3230658734 + .long 3810950996 + .long 3175936077 + .long 2803979432 + .long 3230658738 + .long 1880742672 + .long 3175438052 + .long 1800122360 + .long 3230658742 + .long 185990116 + .long 1025407904 + .long 775672016 + .long 3230658746 + .long 3308007208 + .long 1029438945 + .long 4025648056 + .long 3230658749 + .long 3792627158 + .long 1028183615 + .long 2960168064 + .long 3230658753 + .long 2550675711 + .long 1029174609 + .long 1874251296 + .long 3230658757 + .long 522796161 + .long 3175188745 + .long 767949536 + .long 3230658761 + .long 99639657 + .long 1028478111 + .long 3936281640 + .long 3230658764 + .long 1618272739 + .long 3176759878 + .long 2789364408 + .long 3230658768 + .long 2976648779 + .long 3177001126 + .long 1622216320 + .long 3230658772 + .long 995205633 + .long 3174119615 + .long 434888360 + .long 3230658776 + .long 201851350 + .long 3175435880 + .long 3522398632 + .long 3230658779 + .long 1631082790 + .long 1029197235 + .long 2294863136 + .long 3230658783 + .long 1386753027 + .long 3176550178 + .long 1047299600 + .long 3230658787 + .long 1591070772 + .long 3176954051 + .long 4074725544 + .long 3230658790 + .long 701119861 + .long 3176328095 + .long 2787256416 + .long 3230658794 + .long 3223019512 + .long 1028866240 + .long 1479909352 + .long 3230658798 + .long 2952422582 + .long 1024508588 + .long 152734024 + .long 3230658802 + .long 288366270 + .long 3175075539 + .long 3100747208 + .long 3230658805 + .long 1494938379 + .long 1027731037 + .long 1734063600 + .long 3230658809 + .long 1796105868 + .long 1028158292 + .long 347699608 + .long 3230658813 + .long 2172100889 + .long 1029347730 + .long 3236671448 + .long 3230658816 + .long 321576108 + .long 1027051181 + .long 1811093280 + .long 3230658820 + .long 3159981384 + .long 1028760888 + .long 365980952 + .long 3230658824 + .long 4083088766 + .long 3176402658 + .long 3196350152 + .long 3230658827 + .long 1966791372 + .long 3176779668 + .long 1712314488 + .long 3230658831 + .long 3599116437 + .long 3176268195 + .long 208889280 + .long 3230658835 + .long 3498192131 + .long 1027096101 + .long 2981089664 + .long 3230658838 + .long 3152711547 + .long 3171644297 + .long 1439028720 + .long 3230658842 + .long 142239255 + .long 3176002168 + .long 4172688536 + .long 3230658845 + .long 2394955302 + .long 3175668459 + .long 2592181840 + .long 3230658849 + .long 772412634 + .long 1029163313 + .long 992523056 + .long 3230658853 + .long 239947902 + .long 3177123772 + .long 3668726472 + .long 3230658856 + .long 3993011847 + .long 3173133053 + .long 2030904280 + .long 3230658860 + .long 1203564427 + .long 1024968471 + .long 374070408 + .long 3230658864 + .long 3495014224 + .long 1029532111 + .long 2993238600 + .long 3230658867 + .long 1693008698 + .long 1029300208 + .long 1298520552 + .long 3230658871 + .long 229843979 + .long 1028616611 + .long 3879896968 + .long 3230658874 + .long 2840741382 + .long 3177076399 + .long 2147479216 + .long 3230658878 + .long 1315931416 + .long 3175394520 + .long 396280360 + .long 3230658882 + .long 2917523745 + .long 3176241221 + .long 2921313312 + .long 3230658885 + .long 954068080 + .long 3176872778 + .long 1132688928 + .long 3230658889 + .long 1539389383 + .long 3177096379 + .long 3620387088 + .long 3230658892 + .long 3213801166 + .long 1029050611 + .long 1794518304 + .long 3230658896 + .long 224494799 + .long 1029157143 + .long 4245062128 + .long 3230658899 + .long 2292409870 + .long 1029149094 + .long 2382128760 + .long 3230658903 + .long 4172000302 + .long 1029521900 + .long 500730120 + .long 3230658907 + .long 1566889331 + .long 1022410137 + .long 2895877976 + .long 3230658910 + .long 3447287041 + .long 3177068115 + .long 977682048 + .long 3230658914 + .long 6222552 + .long 3176756595 + .long 3336121072 + .long 3230658917 + .long 3594755137 + .long 3176063522 + .long 1381304448 + .long 3230658921 + .long 1172789584 + .long 1029247928 + .long 3703210584 + .long 3230658924 + .long 2721646462 + .long 3176500859 + .long 1711948584 + .long 3230658928 + .long 1244442214 + .long 1029312023 + .long 3997496536 + .long 3230658931 + .long 272480018 + .long 1025685723 + .long 1969963224 + .long 3230658935 + .long 1208505284 + .long 1029490192 + .long 4219326432 + .long 3230658938 + .long 3360578575 + .long 3174058635 + .long 2155694632 + .long 3230658942 + .long 2245681021 + .long 1026963921 + .long 74078008 + .long 3230658946 + .long 3496835215 + .long 3176351493 + .long 2269486608 + .long 3230658949 + .long 2995409405 + .long 3176402213 + .long 152028432 + .long 3230658953 + .long 2946959370 + .long 3171080196 + .long 2311680512 + .long 3230658956 + .long 811079866 + .long 1029646941 + .long 158550536 + .long 3230658960 + .long 2634400740 + .long 3174719534 + .long 2282615248 + .long 3230658963 + .long 3704965237 + .long 3176349039 + .long 93982048 + .long 3230658967 + .long 2840134146 + .long 1025829616 + .long 2182627360 + .long 3230658970 + .long 1838738265 + .long 3176564070 + .long 4253625592 + .long 3230658973 + .long 1173390987 + .long 3176177543 + .long 2012050992 + .long 3230658977 + .long 1084871272 + .long 3173895075 + .long 4047879552 + .long 3230658980 + .long 3493007974 + .long 1028200188 + .long 1771217928 + .long 3230658984 + .long 866422899 + .long 3176434896 + .long 3772041832 + .long 3230658987 + .long 241037730 + .long 3176289012 + .long 1460457632 + .long 3230658991 + .long 1003496008 + .long 3176406370 + .long 3426440744 + .long 3230658994 + .long 2184560753 + .long 3173354948 + .long 1080097248 + .long 3230658998 + .long 4029600754 + .long 3175828440 + .long 3011402280 + .long 3230659001 + .long 2827800738 + .long 1028558112 + .long 630461632 + .long 3230659005 + .long 1669381205 + .long 1027303067 + .long 2527250152 + .long 3230659008 + .long 1507135636 + .long 3175470401 + .long 111873368 + .long 3230659012 + .long 4290552909 + .long 1029305988 + .long 1974305832 + .long 3230659015 + .long 491815833 + .long 1028930331 + .long 3819620088 + .long 3230659018 + .long 974322798 + .long 1029451925 + .long 1352888528 + .long 3230659022 + .long 1335536991 + .long 3172426672 + .long 3164085312 + .long 3230659025 + .long 2773436098 + .long 1029127279 + .long 663315256 + .long 3230659029 + .long 2684187733 + .long 1028181243 + .long 2440552240 + .long 3230659032 + .long 2161571790 + .long 1027765615 + .long 4200868112 + .long 3230659035 + .long 3277047205 + .long 3174837243 + .long 1649334592 + .long 3230659039 + .long 4124850187 + .long 1025335396 + .long 3375925144 + .long 3230659042 + .long 3003584975 + .long 1021519814 + .long 790743920 + .long 3230659046 + .long 1415914940 + .long 1024723625 + .long 2483764120 + .long 3230659049 + .long 1136793699 + .long 3172319743 + .long 4160056928 + .long 3230659052 + .long 2148664472 + .long 1029245862 + .long 1524693384 + .long 3230659056 + .long 3056467792 + .long 1028886726 + .long 3167646296 + .long 3230659059 + .long 142099839 + .long 1028497609 + .long 499019152 + .long 3230659063 + .long 3699751308 + .long 1026582910 + .long 2108784496 + .long 3230659066 + .long 2287012473 + .long 1023727633 + .long 3702012848 + .long 3230659069 + .long 2554126940 + .long 3177131484 + .long 983774616 + .long 3230659073 + .long 263088196 + .long 1028047407 + .long 2544041936 + .long 3230659076 + .long 1900821763 + .long 3176347035 + .long 4087884960 + .long 3230659079 + .long 1428486283 + .long 3175804842 + .long 1320373696 + .long 3230659083 + .long 1249103901 + .long 1027194698 + .long 2831479912 + .long 3230659086 + .long 4024111846 + .long 1027875195 + .long 31306072 + .long 3230659090 + .long 2178201336 + .long 1028790706 + .long 1509823688 + .long 3230659093 + .long 863228784 + .long 3177069330 + .long 2972102280 + .long 3230659096 + .long 2800600011 + .long 3176772901 + .long 123211224 + .long 3230659100 + .long 2000143580 + .long 3175827790 + .long 1553121664 + .long 3230659103 + .long 3598597716 + .long 3174664631 + .long 2966902736 + .long 3230659106 + .long 160093135 + .long 1028156559 + .long 69623448 + .long 3230659110 + .long 1838028210 + .long 1028805781 + .long 1451254576 + .long 3230659113 + .long 171321689 + .long 1027544179 + .long 2816864888 + .long 3230659116 + .long 48443041 + .long 3175147757 + .long 4166490328 + .long 3230659119 + .long 2602435169 + .long 3175152427 + .long 1205199416 + .long 3230659123 + .long 3778841539 + .long 3176922801 + .long 2522962456 + .long 3230659126 + .long 69075835 + .long 1029409055 + .long 3824847712 + .long 3230659129 + .long 660089785 + .long 3174442320 + .long 815923368 + .long 3230659133 + .long 2460308321 + .long 1029094234 + .long 2086159344 + .long 3230659136 + .long 3024187972 + .long 3174141999 + .long 3340623576 + .long 3230659139 + .long 1011494086 + .long 3176827516 + .long 284383880 + .long 3230659143 + .long 3868463126 + .long 3173236251 + .long 1507409832 + .long 3230659146 + .long 4210695494 + .long 1029032026 + .long 2714769000 + .long 3230659149 + .long 2695744497 + .long 3176876805 + .long 3906496160 + .long 3230659152 + .long 343340875 + .long 1024675097 + .long 787658648 + .long 3230659156 + .long 2519963105 + .long 1029601486 + .long 1948225576 + .long 3230659159 + .long 2834660375 + .long 1027576345 + .long 3093264072 + .long 3230659162 + .long 1202481435 + .long 1029504111 + .long 4222808424 + .long 3230659165 + .long 548784753 + .long 1028305847 + .long 1041925528 + .long 3230659169 + .long 2583607066 + .long 1028957355 + .long 2140584040 + .long 3230659172 + .long 2642007844 + .long 3175275174 + .long 3223850632 + .long 3230659175 + .long 352423749 + .long 3174321553 + .long 4291759144 + .long 3230659178 + .long 339552960 + .long 3176556350 + .long 1049376024 + .long 3230659182 + .long 2660353592 + .long 1027255432 + .long 2086669480 + .long 3230659185 + .long 1104152295 + .long 1028453979 + .long 3108705728 + .long 3230659188 + .long 540614262 + .long 3175907859 + .long 4115518184 + .long 3230659191 + .long 3806184097 + .long 1028762582 + .long 812172832 + .long 3230659195 + .long 308602627 + .long 3173981149 + .long 1788637456 + .long 3230659198 + .long 1325608725 + .long 3176678267 + .long 2749977840 + .long 3230659201 + .long 990288509 + .long 3176107526 + .long 3696226952 + .long 3230659204 + .long 1916429866 + .long 1028814544 + .long 332450344 + .long 3230659208 + .long 3336107755 + .long 3176608247 + .long 1248615376 + .long 3230659211 + .long 4035119084 + .long 3176707463 + .long 2149787400 + .long 3230659214 + .long 2050304943 + .long 1029173658 + .long 3035998944 + .long 3230659217 + .long 2951948176 + .long 1029115289 + .long 3907282448 + .long 3230659220 + .long 2907658715 + .long 1028586234 + .long 468702944 + .long 3230659224 + .long 674698596 + .long 3175213847 + .long 1310227256 + .long 3230659227 + .long 3034611927 + .long 1027966053 + .long 2136920200 + .long 3230659230 + .long 2687871008 + .long 1028041908 + .long 2948813792 + .long 3230659233 + .long 596497875 + .long 3174693992 + .long 3745939952 + .long 3230659236 + .long 3329560030 + .long 1028812176 + .long 233363184 + .long 3230659240 + .long 1501722877 + .long 1028149340 + .long 1001049792 + .long 3230659243 + .long 3907078376 + .long 1028788204 + .long 1754064080 + .long 3230659246 + .long 946102851 + .long 1024784319 + .long 2492437552 + .long 3230659249 + .long 2477139935 + .long 3176834550 + .long 3216201616 + .long 3230659252 + .long 3861383265 + .long 3175556568 + .long 3925387568 + .long 3230659255 + .long 1708411866 + .long 1028140551 + .long 325059304 + .long 3230659259 + .long 1571249374 + .long 3176283508 + .long 1005182528 + .long 3230659262 + .long 1100083059 + .long 3174229259 + .long 1670820936 + .long 3230659265 + .long 3756028850 + .long 3175680086 + .long 2322005432 + .long 3230659268 + .long 1631050573 + .long 3176213330 + .long 2958766824 + .long 3230659271 + .long 1907582341 + .long 1029438684 + .long 3581135800 + .long 3230659274 + .long 2950542199 + .long 3173786866 + .long 4189142976 + .long 3230659277 + .long 114954998 + .long 3177096717 + .long 487851568 + .long 3230659281 + .long 2653253061 + .long 3176673071 + .long 1067226576 + .long 3230659284 + .long 1766996068 + .long 3175354818 + .long 1632331016 + .long 3230659287 + .long 3950907539 + .long 3175157886 + .long 2183195112 + .long 3230659290 + .long 2440105690 + .long 1029327524 + .long 2719848976 + .long 3230659293 + .long 341115768 + .long 1028056330 + .long 3242322640 + .long 3230659296 + .long 3179572713 + .long 3175645667 + .long 3750646040 + .long 3230659299 + .long 935147933 + .long 3175536948 + .long 4244849008 + .long 3230659302 + .long 3916511820 + .long 3176877809 + .long 429994000 + .long 3230659306 + .long 3978671087 + .long 1028263473 + .long 896045240 + .long 3230659309 + .long 230228243 + .long 3176823382 + .long 1348065008 + .long 3230659312 + .long 1603302089 + .long 1028781499 + .long 1786082752 + .long 3230659315 + .long 1397794181 + .long 1029625122 + .long 2210127840 + .long 3230659318 + .long 3655812571 + .long 3172766563 + .long 2620229560 + .long 3230659321 + .long 2385997325 + .long 1026727032 + .long 3016417088 + .long 3230659324 + .long 697404896 + .long 3176786781 + .long 3398719528 + .long 3230659327 + .long 3231162475 + .long 3175777962 + .long 3767165880 + .long 3230659330 + .long 2548610257 + .long 1028922412 + .long 4121785048 + .long 3230659333 + .long 3962667547 + .long 1027852637 + .long 167638560 + .long 3230659337 + .long 3554092856 + .long 3176729278 + .long 494689752 + .long 3230659340 + .long 2911955219 + .long 1028435709 + .long 807999952 + .long 3230659343 + .long 3789336944 + .long 3176103637 + .long 1107597728 + .long 3230659346 + .long 3750507527 + .long 1027365134 + .long 1393511536 + .long 3230659349 + .long 1827158241 + .long 1028945876 + .long 1665769752 + .long 3230659352 + .long 3306289784 + .long 1029589760 + .long 1924400656 + .long 3230659355 + .long 1510741592 + .long 3176411966 + .long 2169432464 + .long 3230659358 + .long 2294259978 + .long 1025847307 + .long 2400893272 + .long 3230659361 + .long 539270871 + .long 3176922069 + .long 2618811120 + .long 3230659364 + .long 3685107127 + .long 1027828508 + .long 2823213928 + .long 3230659367 + .long 3271061162 + .long 3176969831 + .long 3014129568 + .long 3230659370 + .long 1787956575 + .long 1028863184 + .long 3191585784 + .long 3230659373 + .long 716587587 + .long 3176400736 + .long 3355610272 + .long 3230659376 + .long 2630361878 + .long 3176313132 + .long 3506230624 + .long 3230659379 + .long 3623957067 + .long 1024822653 + .long 3643474344 + .long 3230659382 + .long 3940980068 + .long 3174610269 + .long 3767368864 + .long 3230659385 + .long 499400003 + .long 1028297429 + .long 3877941520 + .long 3230659388 + .long 3143491592 + .long 1028937135 + .long 3975219568 + .long 3230659391 + .long 1265600507 + .long 1027302761 + .long 4059230184 + .long 3230659394 + .long 3423756523 + .long 3174759308 + .long 4130000464 + .long 3230659397 + .long 2126977913 + .long 1029294479 + .long 4187557400 + .long 3230659400 + .long 1341359213 + .long 3176282153 + .long 4231927936 + .long 3230659403 + .long 142327675 + .long 1028516775 + .long 4263138896 + .long 3230659406 + .long 3537045733 + .long 3176611365 + .long 4281217056 + .long 3230659409 + .long 804943611 + .long 3175398448 + .long 4286189088 + .long 3230659412 + .long 2300440576 + .long 3173821797 + .long 4278081592 + .long 3230659415 + .long 650140298 + .long 1028345827 + .long 4256921080 + .long 3230659418 + .long 258434203 + .long 1024439656 + .long 4222733992 + .long 3230659421 + .long 2845277783 + .long 3175806217 + .long 4175546688 + .long 3230659424 + .long 486214358 + .long 1021995298 + .long 4115385440 + .long 3230659427 + .long 362801877 + .long 1027412332 + .long 4042276440 + .long 3230659430 + .long 3220639070 + .long 3177080040 + .long 3956245816 + .long 3230659433 + .long 3857709974 + .long 3176973100 + .long 3857319608 + .long 3230659436 + .long 300219354 + .long 1029159912 + .long 3745523760 + .long 3230659439 + .long 2500015736 + .long 3170135365 + .long 3620884168 + .long 3230659442 + .long 3361192444 + .long 1028410302 + .long 3483426624 + .long 3230659445 + .long 962673197 + .long 3176780787 + .long 3333176872 + .long 3230659448 + .long 466308644 + .long 1029193870 + .long 3170160544 + .long 3230659451 + .long 1036576323 + .long 1029692281 + .long 2994403208 + .long 3230659454 + .long 1262493470 + .long 3177123208 + .long 2805930376 + .long 3230659457 + .long 2116833460 + .long 3176824531 + .long 2604767464 + .long 3230659460 + .long 4130386607 + .long 1029379265 + .long 2390939800 + .long 3230659463 + .long 3203410687 + .long 1028676250 + .long 2164472656 + .long 3230659466 + .long 1369952708 + .long 3175783357 + .long 1925391232 + .long 3230659469 + .long 879032334 + .long 1028096866 + .long 1673720632 + .long 3230659472 + .long 4136287431 + .long 3171822968 + .long 1409485904 + .long 3230659475 + .long 1676116683 + .long 1027498055 + .long 1132712008 + .long 3230659478 + .long 2215341913 + .long 3175421168 + .long 843423840 + .long 3230659481 + .long 1029715364 + .long 3176433781 + .long 541646224 + .long 3230659484 + .long 2606758269 + .long 1029491721 + .long 227403888 + .long 3230659487 + .long 2201115753 + .long 1027951322 + .long 4195688808 + .long 3230659489 + .long 4218769073 + .long 1025395495 + .long 3856590992 + .long 3230659492 + .long 434820483 + .long 1029228152 + .long 3505102248 + .long 3230659495 + .long 3898434635 + .long 3176361218 + .long 3141247048 + .long 3230659498 + .long 3118973316 + .long 1029656842 + .long 2765049752 + .long 3230659501 + .long 2996229621 + .long 1029012421 + .long 2376534672 + .long 3230659504 + .long 2407486153 + .long 3175647547 + .long 1975726056 + .long 3230659507 + .long 2587350529 + .long 1029480630 + .long 1562648048 + .long 3230659510 + .long 4294469746 + .long 3176242263 + .long 1137324760 + .long 3230659513 + .long 3819488195 + .long 1023708576 + .long 699780200 + .long 3230659516 + .long 116131792 + .long 3177042014 + .long 250038336 + .long 3230659519 + .long 1551898075 + .long 1029096746 + .long 4083090328 + .long 3230659521 + .long 2844986349 + .long 1028973019 + .long 3609025400 + .long 3230659524 + .long 2591634103 + .long 1026318183 + .long 3122834592 + .long 3230659527 + .long 2325851864 + .long 3175053154 + .long 2114169952 + .long 3230659533 + .long 790463889 + .long 3176974498 + .long 1057284960 + .long 3230659539 + .long 1675706223 + .long 1028317332 + .long 4247334344 + .long 3230659544 + .long 4226562338 + .long 1027765102 + .long 3094569872 + .long 3230659550 + .long 2366937865 + .long 3168809551 + .long 1894144112 + .long 3230659556 + .long 1267587328 + .long 3176269982 + .long 646241264 + .long 3230659562 + .long 1575621247 + .long 3177156253 + .long 3646011760 + .long 3230659567 + .long 2645567153 + .long 3175833815 + .long 2303703080 + .long 3230659573 + .long 1827286098 + .long 1027997469 + .long 914463544 + .long 3230659579 + .long 752350642 + .long 1029527042 + .long 3773440424 + .long 3230659584 + .long 160463655 + .long 3176715839 + .long 2290878096 + .long 3230659590 + .long 909081824 + .long 3175933674 + .long 761921776 + .long 3230659596 + .long 2905535403 + .long 1028759497 + .long 3481715656 + .long 3230659601 + .long 3887423264 + .long 3176529033 + .long 1860501056 + .long 3230659607 + .long 2811353534 + .long 3176342172 + .long 193420168 + .long 3230659613 + .long 3875218385 + .long 1029601075 + .long 2775614176 + .long 3230659618 + .long 915846711 + .long 1029206337 + .long 1017321408 + .long 3230659624 + .long 2817823673 + .long 1028329866 + .long 3508648392 + .long 3230659629 + .long 2457221968 + .long 1028382518 + .long 1659831496 + .long 3230659635 + .long 1953946979 + .long 1028155361 + .long 4060975304 + .long 3230659640 + .long 1103591667 + .long 3177007543 + .long 2122314280 + .long 3230659646 + .long 1917780451 + .long 1029286965 + .long 138983784 + .long 3230659652 + .long 3695788845 + .long 3176288716 + .long 2406118280 + .long 3230659657 + .long 1052548871 + .long 1029099285 + .long 333949368 + .long 3230659663 + .long 1769629084 + .long 1028668282 + .long 2512576920 + .long 3230659668 + .long 2829899890 + .long 3177160765 + .long 352230712 + .long 3230659674 + .long 190593276 + .long 3177082107 + .long 2443008776 + .long 3230659679 + .long 308933071 + .long 1028033311 + .long 195139040 + .long 3230659685 + .long 2406662387 + .long 3174119994 + .long 2198717736 + .long 3230659690 + .long 3951897556 + .long 1025531185 + .long 4158938296 + .long 3230659695 + .long 3747433104 + .long 3176582029 + .long 1780993280 + .long 3230659701 + .long 1185733823 + .long 1025977389 + .long 3654976232 + .long 3230659706 + .long 2876938397 + .long 3175696111 + .long 1191110656 + .long 3230659712 + .long 1221563196 + .long 3173251774 + .long 2979488360 + .long 3230659717 + .long 2581073785 + .long 1028588464 + .long 430331104 + .long 3230659723 + .long 1522002357 + .long 1028645059 + .long 2133728976 + .long 3230659728 + .long 1060437513 + .long 3176445060 + .long 3794869336 + .long 3230659733 + .long 1092840036 + .long 3177052773 + .long 1118938696 + .long 3230659739 + .long 2353106107 + .long 1029111084 + .long 2696024600 + .long 3230659744 + .long 4060627338 + .long 1029597310 + .long 4231311888 + .long 3230659749 + .long 3779876129 + .long 1028286236 + .long 1429984576 + .long 3230659755 + .long 48483734 + .long 1027710210 + .long 2882127744 + .long 3230659760 + .long 445208449 + .long 1029139348 + .long 4292923760 + .long 3230659765 + .long 2295142960 + .long 3176049005 + .long 1367554208 + .long 3230659771 + .long 1540635558 + .long 1028483904 + .long 2696101728 + .long 3230659776 + .long 352999095 + .long 3169858434 + .long 3983746296 + .long 3230659781 + .long 1810565431 + .long 3175091705 + .long 935667088 + .long 3230659787 + .long 349039573 + .long 3176928791 + .long 2141944392 + .long 3230659792 + .long 3659173497 + .long 3174252174 + .long 3307755816 + .long 3230659797 + .long 58840479 + .long 1028893602 + .long 138278192 + .long 3230659803 + .long 2062870396 + .long 3175475632 + .long 1223589488 + .long 3230659808 + .long 3079310401 + .long 3176348925 + .long 2268865008 + .long 3230659813 + .long 4107437042 + .long 3177028487 + .long 3274246600 + .long 3230659818 + .long 3740178426 + .long 3176375927 + .long 4239875352 + .long 3230659823 + .long 1575862792 + .long 3176856991 + .long 870924320 + .long 3230659829 + .long 1293986679 + .long 1021959545 + .long 1757467688 + .long 3230659834 + .long 1268894705 + .long 3177114344 + .long 2604677040 + .long 3230659839 + .long 1483899592 + .long 3176088657 + .long 3412690504 + .long 3230659844 + .long 1351083799 + .long 3175751585 + .long 4181645488 + .long 3230659849 + .long 1119433498 + .long 3177131776 + .long 616711392 + .long 3230659855 + .long 4175979329 + .long 3173786505 + .long 1307958768 + .long 3230659860 + .long 2068378112 + .long 3176493003 + .long 1960555592 + .long 3230659865 + .long 178688056 + .long 1027848710 + .long 2574636408 + .long 3230659870 + .long 2359427625 + .long 1028095731 + .long 3150335072 + .long 3230659875 + .long 446961290 + .long 1028242607 + .long 3687784736 + .long 3230659880 + .long 2606786686 + .long 3176252768 + .long 4187117872 + .long 3230659885 + .long 147991783 + .long 3176229143 + .long 353498960 + .long 3230659891 + .long 2565649361 + .long 1026609244 + .long 776993680 + .long 3230659896 + .long 91083332 + .long 3175234267 + .long 1162765160 + .long 3230659901 + .long 1883429456 + .long 3174458208 + .long 1510943144 + .long 3230659906 + .long 1013024678 + .long 1027761501 + .long 1821656704 + .long 3230659911 + .long 2329976096 + .long 3171060885 + .long 2095034256 + .long 3230659916 + .long 393569875 + .long 3175313071 + .long 2331203560 + .long 3230659921 + .long 3866070308 + .long 1029684158 + .long 2530291696 + .long 3230659926 + .long 2303293568 + .long 3177026483 + .long 2692425136 + .long 3230659931 + .long 4151833399 + .long 3175350159 + .long 2817729672 + .long 3230659936 + .long 65831588 + .long 3170064008 + .long 2906330464 + .long 3230659941 + .long 3126642666 + .long 3176187966 + .long 2958352048 + .long 3230659946 + .long 1091895479 + .long 1029434562 + .long 2973918296 + .long 3230659951 + .long 1341819779 + .long 3177032854 + .long 2953152496 + .long 3230659956 + .long 3431130783 + .long 1025344246 + .long 2896177272 + .long 3230659961 + .long 222319660 + .long 3174332028 + .long 2803114648 + .long 3230659966 + .long 2574176974 + .long 3176321678 + .long 2674086032 + .long 3230659971 + .long 3543599213 + .long 3175295621 + .long 2509212216 + .long 3230659976 + .long 3961571325 + .long 1028729606 + .long 2308613376 + .long 3230659981 + .long 1968562443 + .long 3175604756 + .long 2072409104 + .long 3230659986 + .long 169553949 + .long 3175973960 + .long 1800718384 + .long 3230659991 + .long 1866092989 + .long 1029054996 + .long 1493659592 + .long 3230659996 + .long 3321480082 + .long 1028052101 + .long 1151350528 + .long 3230660001 + .long 1162474749 + .long 3175441009 + .long 773908408 + .long 3230660006 + .long 2117491299 + .long 1028922038 + .long 361449840 + .long 3230660011 + .long 1720394601 + .long 3176859733 + .long 4209058184 + .long 3230660015 + .long 3270331864 + .long 1026022939 + .long 3726914304 + .long 3230660020 + .long 761189460 + .long 1027666521 + .long 3210100392 + .long 3230660025 + .long 3128639134 + .long 3176063736 + .long 2658730784 + .long 3230660030 + .long 861675876 + .long 3174834708 + .long 2072919240 + .long 3230660035 + .long 598417369 + .long 1026585686 + .long 1452778960 + .long 3230660040 + .long 2969558584 + .long 3174198415 + .long 798422592 + .long 3230660045 + .long 1955836092 + .long 3175908135 + .long 109962232 + .long 3230660050 + .long 1441195450 + .long 1027193622 + .long 3682476712 + .long 3230660054 + .long 3027916121 + .long 1027617136 + .long 2926142440 + .long 3230660059 + .long 4058891045 + .long 1029177821 + .long 2136037160 + .long 3230660064 + .long 3295666276 + .long 1028335364 + .long 1312270792 + .long 3230660069 + .long 2664877443 + .long 1029314281 + .long 454952704 + .long 3230660074 + .long 2887304751 + .long 3176354723 + .long 3859159056 + .long 3230660078 + .long 3247043098 + .long 1029078121 + .long 2935063552 + .long 3230660083 + .long 551596274 + .long 3176193330 + .long 1977741296 + .long 3230660088 + .long 2154007986 + .long 3174741581 + .long 987299552 + .long 3230660093 + .long 1133524394 + .long 1027524435 + .long 4258812360 + .long 3230660097 + .long 1600085620 + .long 3177058369 + .long 3202451376 + .long 3230660102 + .long 2333163438 + .long 3176526084 + .long 2113289616 + .long 3230660107 + .long 276039368 + .long 1025414372 + .long 991432288 + .long 3230660112 + .long 3502468789 + .long 3176017589 + .long 4131951408 + .long 3230660116 + .long 1901031578 + .long 1027861596 + .long 2945016584 + .long 3230660121 + .long 1505110536 + .long 1028759236 + .long 1725698816 + .long 3230660126 + .long 2648053277 + .long 3176895440 + .long 474101336 + .long 3230660131 + .long 1239242430 + .long 1029534392 + .long 3485294136 + .long 3230660135 + .long 845517171 + .long 3173477246 + .long 2169444872 + .long 3230660140 + .long 4075267769 + .long 1028643096 + .long 821622576 + .long 3230660145 + .long 499928215 + .long 1029048762 + .long 3736895800 + .long 3230660149 + .long 870045772 + .long 3176516274 + .long 2325430744 + .long 3230660154 + .long 3081415625 + .long 3176560522 + .long 882295008 + .long 3230660159 + .long 3662267248 + .long 1029384081 + .long 3702555704 + .long 3230660163 + .long 4011089820 + .long 1029189731 + .long 2196377600 + .long 3230660168 + .long 2872532918 + .long 3175632540 + .long 658826888 + .long 3230660173 + .long 2512614570 + .long 3176940300 + .long 3384969288 + .long 3230660177 + .long 2018053043 + .long 3176636781 + .long 1784968168 + .long 3230660182 + .long 927902188 + .long 3175374192 + .long 153888328 + .long 3230660187 + .long 338402635 + .long 1029478185 + .long 2786794096 + .long 3230660191 + .long 2634228741 + .long 3175787031 + .long 1093847488 + .long 3230660196 + .long 13726686 + .long 3173662371 + .long 3665079232 + .long 3230660200 + .long 955232272 + .long 1029144724 + .long 1910650416 + .long 3230660205 + .long 1913213398 + .long 3177091414 + .long 125623600 + .long 3230660210 + .long 3896909877 + .long 3176901474 + .long 2605060880 + .long 3230660214 + .long 1162024003 + .long 3171225909 + .long 759122024 + .long 3230660219 + .long 101180827 + .long 1028720107 + .long 3177835544 + .long 3230660223 + .long 1119059392 + .long 3177080184 + .long 1271360360 + .long 3230660228 + .long 2533735500 + .long 1028313476 + .long 3629724104 + .long 3230660232 + .long 2461458646 + .long 3176172399 + .long 1663084832 + .long 3230660237 + .long 3468033532 + .long 1028155452 + .long 3961469328 + .long 3230660241 + .long 688573429 + .long 3173787118 + .long 1935034792 + .long 3230660246 + .long 852313808 + .long 1029214281 + .long 4173807160 + .long 3230660250 + .long 1743831019 + .long 3176961601 + .long 2087942800 + .long 3230660255 + .long 939132585 + .long 3175339625 + .long 4267466816 + .long 3230660259 + .long 804943611 + .long 3176447024 + .long 2122534736 + .long 3230660264 + .long 1216317347 + .long 1028000177 + .long 4243170840 + .long 3230660268 + .long 2936275121 + .long 3175268569 + .long 2039529840 + .long 3230660273 + .long 2537367085 + .long 1028954723 + .long 4101635200 + .long 3230660277 + .long 2494170689 + .long 3173567976 + .long 1839640816 + .long 3230660282 + .long 392206900 + .long 3176845046 + .long 3843569368 + .long 3230660286 + .long 4090462392 + .long 1028307871 + .long 1523573928 + .long 3230660291 + .long 460756979 + .long 3176389882 + .long 3469676392 + .long 3230660295 + .long 2929822293 + .long 1029426676 + .long 1092029040 + .long 3230660300 + .long 3560063032 + .long 1027386665 + .long 2980652976 + .long 3230660304 + .long 2630002021 + .long 1029084255 + .long 545699712 + .long 3230660309 + .long 3251005607 + .long 1029513439 + .long 2377189560 + .long 3230660313 + .long 2613820932 + .long 1027076618 + .long 4180240568 + .long 3230660317 + .long 2799936722 + .long 1025378340 + .long 1659970392 + .long 3230660322 + .long 3210945223 + .long 3175522055 + .long 3406398200 + .long 3230660326 + .long 2950429423 + .long 3176973715 + .long 829673600 + .long 3230660331 + .long 1432187170 + .long 3177113229 + .long 2519815008 + .long 3230660335 + .long 3601043748 + .long 3172224737 + .long 4181938568 + .long 3230660339 + .long 814468389 + .long 3175150283 + .long 1521160064 + .long 3230660344 + .long 3976767292 + .long 3177175436 + .long 3127496808 + .long 3230660348 + .long 2716501510 + .long 1028977394 + .long 411096528 + .long 3230660353 + .long 878128567 + .long 3176628610 + .long 1961975816 + .long 3230660357 + .long 2184878723 + .long 1028801182 + .long 3485248976 + .long 3230660361 + .long 3145811820 + .long 1029533129 + .long 686029968 + .long 3230660366 + .long 3776363698 + .long 1029165449 + .long 2154334280 + .long 3230660370 + .long 671743341 + .long 1024333977 + .long 3595275160 + .long 3230660374 + .long 2461553818 + .long 3174779052 + .long 713965496 + .long 3230660379 + .long 2151713083 + .long 3175993252 + .long 2100419720 + .long 3230660383 + .long 3102031601 + .long 1029232965 + .long 3459750008 + .long 3230660387 + .long 4013823470 + .long 1028620538 + .long 497068208 + .long 3230660392 + .long 4248883599 + .long 1028910528 + .long 1802387696 + .long 3230660396 + .long 1846273839 + .long 3175860934 + .long 3080819632 + .long 3230660400 + .long 1848559975 + .long 3175415033 + .long 37474824 + .long 3230660405 + .long 883985798 + .long 1029169919 + .long 1262365616 + .long 3230660409 + .long 2970327261 + .long 3175919327 + .long 2460602152 + .long 3230660413 + .long 2212867178 + .long 3176520464 + .long 3632261520 + .long 3230660417 + .long 3872739030 + .long 3176664707 + .long 482453184 + .long 3230660422 + .long 1041960122 + .long 1024886984 + .long 1601188152 + .long 3230660426 + .long 3362961153 + .long 3176317848 + .long 2693575232 + .long 3230660430 + .long 914600537 + .long 3175721660 + .long 3759690192 + .long 3230660434 + .long 3732031835 + .long 1029491624 + .long 504641160 + .long 3230660439 + .long 1661949843 + .long 3176759759 + .long 1518437864 + .long 3230660443 + .long 1155538621 + .long 3176080216 + .long 2506187792 + .long 3230660447 + .long 2074668130 + .long 3176155102 + .long 3467965424 + .long 3230660451 + .long 5072226 + .long 1029678430 + .long 108877600 + .long 3230660456 + .long 3844188174 + .long 3175740294 + .long 1018932768 + .long 3230660460 + .long 509804163 + .long 1026986837 + .long 1903237144 + .long 3230660464 + .long 817284140 + .long 1028367931 + .long 2761863936 + .long 3230660468 + .long 1026749811 + .long 1028400722 + .long 3594886040 + .long 3230660472 + .long 134616122 + .long 1027302887 + .long 107408744 + .long 3230660477 + .long 3388129995 + .long 3176634073 + .long 889438928 + .long 3230660481 + .long 4952363 + .long 1026762363 + .long 1646081256 + .long 3230660485 + .long 602092353 + .long 1025334666 + .long 2377407400 + .long 3230660489 + .long 870715200 + .long 1028049234 + .long 3083488720 + .long 3230660493 + .long 2898850879 + .long 1026959461 + .long 3764396280 + .long 3230660497 + .long 1041634577 + .long 3172001824 + .long 125233544 + .long 3230660502 + .long 4098260650 + .long 3176968164 + .long 756005576 + .long 3230660506 + .long 3936264397 + .long 3176271837 + .long 1361815248 + .long 3230660510 + .long 2005773894 + .long 1029460947 + .long 1942732416 + .long 3230660514 + .long 2286486375 + .long 3177123695 + .long 2498826688 + .long 3230660518 + .long 1062595601 + .long 1029046698 + .long 3030167328 + .long 3230660522 + .long 589866180 + .long 3176077962 + .long 3536823352 + .long 3230660526 + .long 1103133966 + .long 3175759187 + .long 4018863464 + .long 3230660530 + .long 1280466737 + .long 3177138719 + .long 181388800 + .long 3230660535 + .long 2008274805 + .long 3175962957 + .long 614402088 + .long 3230660539 + .long 3816723771 + .long 1026223943 + .long 1023003888 + .long 3230660543 + .long 3028155298 + .long 1028659203 + .long 1407261776 + .long 3230660547 + .long 2229630046 + .long 1029625324 + .long 1767243040 + .long 3230660551 + .long 3164503958 + .long 3174949449 + .long 2103014712 + .long 3230660555 + .long 874323935 + .long 1029396372 + .long 2414643512 + .long 3230660559 + .long 136799065 + .long 3176242621 + .long 2702195920 + .long 3230660563 + .long 3087239240 + .long 3175416105 + .long 2965738120 + .long 3230660567 + .long 3552260349 + .long 1026854656 + .long 3205336024 + .long 3230660571 + .long 628231562 + .long 3175305872 + .long 3421055288 + .long 3230660575 + .long 723080663 + .long 1029356970 + .long 3612961272 + .long 3230660579 + .long 3562572440 + .long 3176040503 + .long 3781119104 + .long 3230660583 + .long 2799655455 + .long 1029154690 + .long 3925593608 + .long 3230660587 + .long 3936971761 + .long 1026575267 + .long 4046449368 + .long 3230660591 + .long 2072414816 + .long 3175590577 + .long 4143750696 + .long 3230660595 + .long 1765517578 + .long 3176912984 + .long 4217561648 + .long 3230660599 + .long 3309795482 + .long 1025944498 + .long 4267946000 + .long 3230660603 + .long 3577983989 + .long 3176780675 + .long 0 + .long 3230660608 + .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 + .long 0 + .long 0 + .long 4278875493 + .long 3211202435 + .long 1836756087 + .long 3212249540 + .long 2166742286 + .long 3212919558 + .long 3069118545 + .long 3213295184 + .long 2882618713 + .long 3213670083 + .long 396983052 + .long 3213964849 + .long 2254986537 + .long 3214151575 + .long 2244137514 + .long 3214337942 + .long 2001317058 + .long 3214523951 + .long 3129282438 + .long 3214709603 + .long 2901961050 + .long 3214894900 + .long 3574805523 + .long 3215006929 + .long 97153270 + .long 3215099225 + .long 2489866790 + .long 3215191344 + .long 733531480 + .long 3215283289 + .long 1972305287 + .long 3215375059 + .long 449270987 + .long 3215466656 + .long 3276362132 + .long 3215558079 + .long 369713010 + .long 3215649331 + .long 3104484191 + .long 3215740410 + .long 1365308336 + .long 3215831319 + .long 2201113504 + .long 3215922057 + .long 4175201612 + .long 3215997608 + .long 2678235035 + .long 3216042808 + .long 111107850 + .long 3216087924 + .long 2115197501 + .long 3216132955 + .long 1439478642 + .long 3216177903 + .long 3710382531 + .long 3216222767 + .long 1662048346 + .long 3216267549 + .long 906181559 + .long 3216312248 + .long 2752238835 + .long 3216356864 + .long 4207481622 + .long 3216401398 + .long 2271996550 + .long 3216445851 + .long 2528682625 + .long 3216490222 + .long 1963434183 + .long 3216534512 + .long 1850094427 + .long 3216578721 + .long 3455539314 + .long 3216622849 + .long 3744760980 + .long 3216666897 + .long 3970852583 + .long 3216710865 + .long 1085123514 + .long 3216754754 + .long 622050639 + .long 3216798563 + .long 3814425306 + .long 3216842292 + .long 3298434523 + .long 3216885943 + .long 293578162 + .long 3216929516 + .long 307749260 + .long 3216973010 + .long 252379301 + .long 3217016426 + .long 663693424 + .long 3217045466 + .long 2363128292 + .long 3217067096 + .long 1523075309 + .long 3217088688 + .long 3028878894 + .long 3217110241 + .long 3172800190 + .long 3217131756 + .long 2538941307 + .long 3217153233 + .long 1708300177 + .long 3217174672 + .long 1258792512 + .long 3217196073 + .long 1765273565 + .long 3217217436 + .long 3799559706 + .long 3217238761 + .long 3635482505 + .long 3217260049 + .long 1838844516 + .long 3217281300 + .long 3267440290 + .long 3217302513 + .long 4186175309 + .long 3217323689 + .long 857021220 + .long 3217344829 + .long 2423938186 + .long 3217365931 + .long 848124101 + .long 3217386997 + .long 972805768 + .long 3217408026 + .long 3343389647 + .long 3217429018 + .long 4207481622 + .long 3217449974 + .long 4104841180 + .long 3217470894 + .long 3572433535 + .long 3217491778 + .long 3144448886 + .long 3217512626 + .long 3352321503 + .long 3217533438 + .long 429781357 + .long 3217554215 + .long 3492742067 + .long 3217574955 + .long 179581133 + .long 3217595661 + .long 3895798636 + .long 3217616330 + .long 2274427972 + .long 3217636965 + .long 125726943 + .long 3217657565 + .long 2257326549 + .long 3217678129 + .long 589346923 + .long 3217698659 + .long 4219186077 + .long 3217719153 + .long 766831764 + .long 3217739614 + .long 3619519104 + .long 3217760039 + .long 392140265 + .long 3217780431 + .long 171901807 + .long 3217800788 + .long 3453570542 + .long 3217821110 + .long 2139490342 + .long 3217841399 + .long 1014435273 + .long 3217861654 + .long 565756928 + .long 3217881875 + .long 1278368112 + .long 3217902062 + .long 3634759079 + .long 3217922215 + .long 3820046351 + .long 3217942335 + .long 2311923285 + .long 3217962422 + .long 3880675917 + .long 3217982475 + .long 409329490 + .long 3218002496 + .long 958435111 + .long 3218022483 + .long 1701314133 + .long 3218042437 + .long 3103942666 + .long 3218062358 + .long 2814999741 + .long 3218080995 + .long 2722956900 + .long 3218090923 + .long 1505407411 + .long 3218100835 + .long 3685756937 + .long 3218110730 + .long 901390368 + .long 3218120610 + .long 1968450191 + .long 3218130473 + .long 2817072651 + .long 3218140320 + .long 3671264118 + .long 3218150151 + .long 458973606 + .long 3218159967 + .long 1991969023 + .long 3218169766 + .long 4196040400 + .long 3218179549 + .long 2995908720 + .long 3218189317 + .long 2905167410 + .long 3218199069 + .long 4141387283 + .long 3218208805 + .long 2626123321 + .long 3218218526 + .long 2869823290 + .long 3218228231 + .long 791965228 + .long 3218237921 + .long 900933251 + .long 3218247595 + .long 3409122230 + .long 3218257253 + .long 4232944303 + .long 3218266896 + .long 3582769936 + .long 3218276524 + .long 1667967030 + .long 3218286137 + .long 2991874584 + .long 3218295734 + .long 3466907117 + .long 3218305316 + .long 3299462810 + .long 3218314883 + .long 2694962427 + .long 3218324435 + .long 1857855474 + .long 3218333972 + .long 991626313 + .long 3218343494 + .long 298800229 + .long 3218353001 + .long 4275916740 + .long 3218362492 + .long 238699089 + .long 3218371970 + .long 1271733131 + .long 3218381432 + .long 3278800247 + .long 3218390879 + .long 2162752362 + .long 3218400312 + .long 2415452322 + .long 3218409730 + .long 4232877747 + .long 3218419133 + .long 3515126734 + .long 3218428522 + .long 456358091 + .long 3218437897 + .long 3839764252 + .long 3218447256 + .long 972805768 + .long 3218456602 + .long 636889785 + .long 3218465933 + .long 3022604462 + .long 3218475249 + .long 4024691694 + .long 3218484551 + .long 3831987111 + .long 3218493839 + .long 2632458130 + .long 3218503113 + .long 613209272 + .long 3218512373 + .long 2255454733 + .long 3218521618 + .long 3449621726 + .long 3218530849 + .long 85290269 + .long 3218540067 + .long 936100227 + .long 3218549270 + .long 1889952648 + .long 3218558459 + .long 3128884028 + .long 3218567634 + .long 539136753 + .long 3218576796 + .long 2891033284 + .long 3218585943 + .long 1774210047 + .long 3218595077 + .long 1662393428 + .long 3218604197 + .long 2733535479 + .long 3218613303 + .long 869818766 + .long 3218622396 + .long 542563073 + .long 3218631475 + .long 1927328294 + .long 3218640540 + .long 903919170 + .long 3218649592 + .long 1941291890 + .long 3218658630 + .long 917689576 + .long 3218667655 + .long 2300516105 + .long 3218676666 + .long 1966471527 + .long 3218685664 + .long 86458524 + .long 3218694649 + .long 1125586940 + .long 3218703620 + .long 958276399 + .long 3218712578 + .long 4048129956 + .long 3218721522 + .long 1973102048 + .long 3218730454 + .long 3490273972 + .long 3218739372 + .long 176119889 + .long 3218748278 + .long 786249521 + .long 3218757170 + .long 1190641396 + .long 3218766049 + .long 1553516298 + .long 3218774915 + .long 2038374217 + .long 3218783768 + .long 2807998562 + .long 3218792608 + .long 4024460340 + .long 3218801435 + .long 1554155016 + .long 3218810250 + .long 4147675809 + .long 3218819051 + .long 3375046719 + .long 3218827840 + .long 3690497658 + .long 3218836616 + .long 957631997 + .long 3218845380 + .long 3924267057 + .long 3218854130 + .long 4157667002 + .long 3218862868 + .long 1814350566 + .long 3218871594 + .long 1345127672 + .long 3218880307 + .long 2905168726 + .long 3218889007 + .long 2354008484 + .long 3218897695 + .long 4140451764 + .long 3218906370 + .long 4122708074 + .long 3218915033 + .long 2453297277 + .long 3218923684 + .long 3579053340 + .long 3218932322 + .long 3356226173 + .long 3218940948 + .long 1935387215 + .long 3218949562 + .long 3761433103 + .long 3218958163 + .long 393720137 + .long 3218966753 + .long 570838969 + .long 3218975330 + .long 145847129 + .long 3218983895 + .long 3561109068 + .long 3218992447 + .long 2373463229 + .long 3219000988 + .long 1024029336 + .long 3219009517 + .long 3953310001 + .long 3219018033 + .long 2716292306 + .long 3219026538 + .long 1752255026 + .long 3219035031 + .long 1204902862 + .long 3219043512 + .long 1217337138 + .long 3219051981 + .long 1932059168 + .long 3219060438 + .long 3490973615 + .long 3219068883 + .long 1740424513 + .long 3219077317 + .long 1116100460 + .long 3219085739 + .long 1758136015 + .long 3219094149 + .long 3806082244 + .long 3219102547 + .long 3103942666 + .long 3219110934 + .long 4085078348 + .long 3219119309 + .long 2592341915 + .long 3219127673 + .long 1237017397 + .long 1071636966 + .long 2971350592 + .long 1071628625 + .long 2474540381 + .long 1071620296 + .long 3905998082 + .long 1071611978 + .long 2835758645 + .long 1071603672 + .long 3424346780 + .long 1071595377 + .long 1242904730 + .long 1071587094 + .long 453058437 + .long 1071578822 + .long 922012657 + .long 1071570561 + .long 2517515272 + .long 1071562311 + .long 812887046 + .long 1071554073 + .long 4266887859 + .long 1071545845 + .long 4158942730 + .long 1071537629 + .long 358942686 + .long 1071529425 + .long 1327241886 + .long 1071521231 + .long 2639818283 + .long 1071513048 + .long 4168139969 + .long 1071504876 + .long 1489227762 + .long 1071496716 + .long 3065521585 + .long 1071488566 + .long 180106617 + .long 1071480428 + .long 1296448894 + .long 1071472300 + .long 1993621492 + .long 1071464183 + .long 2146170984 + .long 1071456077 + .long 1629147435 + .long 1071447982 + .long 318101713 + .long 1071439898 + .long 2384050109 + .long 1071431824 + .long 3408569797 + .long 1071423761 + .long 3268698084 + .long 1071415709 + .long 1841962494 + .long 1071407668 + .long 3301345460 + .long 1071399637 + .long 3230379855 + .long 1071391617 + .long 1508048307 + .long 1071383608 + .long 2308780654 + .long 1071375609 + .long 1217549516 + .long 1071367621 + .long 2409736962 + .long 1071359643 + .long 1471262832 + .long 1071351676 + .long 2578451427 + .long 1071343719 + .long 1318159863 + .long 1071335773 + .long 1867644803 + .long 1071327837 + .long 4109658128 + .long 1071319911 + .long 3632444524 + .long 1071311996 + .long 319673663 + .long 1071304092 + .long 2645405118 + .long 1071296197 + .long 1904282206 + .long 1071288313 + .long 2276300709 + .long 1071280439 + .long 3646937343 + .long 1071272575 + .long 1607147436 + .long 1071264722 + .long 338264500 + .long 1071256879 + .long 4022063343 + .long 1071249045 + .long 3955855900 + .long 1071241222 + .long 27325445 + .long 1071233410 + .long 714524338 + .long 1071225607 + .long 1611035309 + .long 1071217814 + .long 2605838414 + .long 1071210031 + .long 3588341533 + .long 1071202258 + .long 153410875 + .long 1071194496 + .long 781237988 + .long 1071186743 + .long 1067533806 + .long 1071179000 + .long 903395686 + .long 1071171267 + .long 180337970 + .long 1071163544 + .long 3085257158 + .long 1071155830 + .long 920560604 + .long 1071148127 + .long 2168935497 + .long 1071140433 + .long 2428575699 + .long 1071132749 + .long 1593048857 + .long 1071125075 + .long 3851294344 + .long 1071117410 + .long 507752028 + .long 1071109756 + .long 47131309 + .long 1071102111 + .long 2364605328 + .long 1071094475 + .long 3060776247 + .long 1071086849 + .long 2031607852 + .long 1071079233 + .long 3468423567 + .long 1071071626 + .long 2973002597 + .long 1071064029 + .long 442479858 + .long 1071056442 + .long 69344031 + .long 1071048864 + .long 1751501034 + .long 1071041295 + .long 1092272106 + .long 1071033736 + .long 2285293781 + .long 1071026186 + .long 934646808 + .long 1071018646 + .long 1234723447 + .long 1071011115 + .long 3085323714 + .long 1071003593 + .long 2091653507 + .long 1070996081 + .long 2449224655 + .long 1070988578 + .long 4058951182 + .long 1070981084 + .long 2527147484 + .long 1070973600 + .long 2050428397 + .long 1070966125 + .long 2530805506 + .long 1070958659 + .long 3870652645 + .long 1070951202 + .long 1677736816 + .long 1070943755 + .long 150118311 + .long 1070936317 + .long 3486214350 + .long 1070928887 + .long 2999895448 + .long 1070921467 + .long 2890287450 + .long 1070914056 + .long 3061900616 + .long 1070906654 + .long 3419595198 + .long 1070899261 + .long 3868579735 + .long 1070891877 + .long 19442055 + .long 1070884503 + .long 368016775 + .long 1070877137 + .long 525579846 + .long 1070869780 + .long 398716067 + .long 1070862432 + .long 4189317433 + .long 1070855092 + .long 3214712303 + .long 1070847762 + .long 1677467535 + .long 1070840441 + .long 3780484975 + .long 1070833128 + .long 842097952 + .long 1070825825 + .long 1360840737 + .long 1070818530 + .long 950675880 + .long 1070811244 + .long 3815829096 + .long 1070803966 + .long 1275951213 + .long 1070796698 + .long 1830887666 + .long 1070789438 + .long 1095905871 + .long 1070782187 + .long 3276530156 + .long 1070774944 + .long 3988671029 + .long 1070767710 + .long 3143525540 + .long 1070760485 + .long 652608459 + .long 1070753269 + .long 722718060 + .long 1070746061 + .long 3266000023 + .long 1070738861 + .long 3899945937 + .long 1070731670 + .long 2537326407 + .long 1070724488 + .long 3386189576 + .long 1070717314 + .long 2064957766 + .long 1070710149 + .long 2782295200 + .long 1070702992 + .long 1157237371 + .long 1070695844 + .long 1399058776 + .long 1070688704 + .long 3422369598 + .long 1070681572 + .long 2847114276 + .long 1070674449 + .long 3883471977 + .long 1070667334 + .long 2151986001 + .long 1070660228 + .long 1863431563 + .long 1070653130 + .long 2933912512 + .long 1070646040 + .long 984859948 + .long 1070638959 + .long 227932728 + .long 1070631886 + .long 580114212 + .long 1070624821 + .long 1958678199 + .long 1070617764 + .long 4281187571 + .long 1070610715 + .long 3170525652 + .long 1070603675 + .long 2839796761 + .long 1070596643 + .long 2119878685 + .long 1070583143 + .long 4089253071 + .long 1070569111 + .long 2835758645 + .long 1070555096 + .long 2492901513 + .long 1070541097 + .long 2899780145 + .long 1070527114 + .long 3896050086 + .long 1070513147 + .long 1026954088 + .long 1070499197 + .long 2723188744 + .long 1070485262 + .long 236130877 + .long 1070471344 + .long 1997573379 + .long 1070457441 + .long 3554951635 + .long 1070443554 + .long 456242909 + .long 1070429684 + .long 1134865756 + .long 1070415829 + .long 1139873776 + .long 1070401990 + .long 315822345 + .long 1070388167 + .long 2802766176 + .long 1070374359 + .long 4151355006 + .long 1070360567 + .long 4207733072 + .long 1070346791 + .long 2818569420 + .long 1070333031 + .long 4126022811 + .long 1070319286 + .long 3682837469 + .long 1070305557 + .long 1337242607 + .long 1070291844 + .long 1232950086 + .long 1070278146 + .long 3219217489 + .long 1070264463 + .long 2850845810 + .long 1070250796 + .long 4273079031 + .long 1070237144 + .long 3041732648 + .long 1070223508 + .long 3303060581 + .long 1070209887 + .long 613883718 + .long 1070196282 + .long 3416424147 + .long 1070182691 + .long 2973531841 + .long 1070169116 + .long 3433453502 + .long 1070155556 + .long 354993870 + .long 1070142012 + .long 2182349993 + .long 1070128482 + .long 180337970 + .long 1070114968 + .long 2794129140 + .long 1070101468 + .long 1289509543 + .long 1070087984 + .long 4112616140 + .long 1070074514 + .long 2530196300 + .long 1070061060 + .long 694376742 + .long 1070047621 + .long 2757759525 + .long 1070034196 + .long 4283485357 + .long 1070020786 + .long 835166085 + .long 1070007392 + .long 861784501 + .long 1069994012 + .long 4222855791 + .long 1069980646 + .long 2188425477 + .long 1069967296 + .long 3208871137 + .long 1069953960 + .long 2850129301 + .long 1069940639 + .long 973562605 + .long 1069927333 + .long 1735957778 + .long 1069914041 + .long 704621746 + .long 1069900764 + .long 2037248826 + .long 1069887501 + .long 1302049555 + .long 1069874253 + .long 2657617909 + .long 1069861019 + .long 1673060149 + .long 1069847800 + .long 2507862062 + .long 1069834595 + .long 732017833 + .long 1069821405 + .long 505897304 + .long 1069808229 + .long 1695342161 + .long 1069795067 + .long 4166631327 + .long 1069781919 + .long 3491511767 + .long 1069768786 + .long 3832098487 + .long 1069755667 + .long 761003473 + .long 1069742563 + .long 2736170304 + .long 1069729472 + .long 1036101224 + .long 1069716396 + .long 4119593661 + .long 1069703333 + .long 3266000023 + .long 1069690285 + .long 2639996940 + .long 1069677251 + .long 2111714268 + .long 1069664231 + .long 1551700571 + .long 1069651225 + .long 830921328 + .long 1069638233 + .long 4115724438 + .long 1069625254 + .long 2687969258 + .long 1069612290 + .long 714828609 + .long 1069599340 + .long 2363885129 + .long 1069586403 + .long 3213194931 + .long 1069573480 + .long 3136187749 + .long 1069560571 + .long 2006697909 + .long 1069547676 + .long 3692892517 + .long 1069522069 + .long 765175007 + .long 1069496334 + .long 3570253499 + .long 1069470625 + .long 3269064532 + .long 1069444944 + .long 3908238678 + .long 1069419290 + .long 945260706 + .long 1069393664 + .long 2723302721 + .long 1069368064 + .long 406449780 + .long 1069342492 + .long 2339434949 + .long 1069316946 + .long 3982864956 + .long 1069291427 + .long 798118804 + .long 1069265936 + .long 1132246414 + .long 1069240471 + .long 448161614 + .long 1069215033 + .long 2799475404 + .long 1069189621 + .long 3650623571 + .long 1069164236 + .long 2761765396 + .long 1069138878 + .long 4188780490 + .long 1069113546 + .long 3398363754 + .long 1069088241 + .long 152924136 + .long 1069062963 + .long 2805548810 + .long 1069037710 + .long 2530196300 + .long 1069012484 + .long 3386464469 + .long 1068987284 + .long 844750970 + .long 1068962111 + .long 3261086672 + .long 1068936963 + .long 1812361559 + .long 1068911842 + .long 561092771 + .long 1068886747 + .long 3570519722 + .long 1068861677 + .long 2019699215 + .long 1068836634 + .long 4268273544 + .long 1068811616 + .long 1496729166 + .long 1068786625 + .long 2066132126 + .long 1068761659 + .long 1453354059 + .long 1068736719 + .long 3725905754 + .long 1068711804 + .long 67097779 + .long 1068686916 + .long 3135775963 + .long 1068662052 + .long 4116645570 + .long 1068637214 + .long 2785039517 + .long 1068612402 + .long 3211948238 + .long 1068587615 + .long 879114973 + .long 1068562854 + .long 4153869436 + .long 1068538117 + .long 4224353950 + .long 1068513406 + .long 1738648877 + .long 1068478498 + .long 621328029 + .long 1068429177 + .long 361989374 + .long 1068379906 + .long 522185726 + .long 1068330685 + .long 664805953 + .long 1068281514 + .long 354069550 + .long 1068232393 + .long 3450488540 + .long 1068183321 + .long 930992923 + .long 1068134300 + .long 953696405 + .long 1068085328 + .long 3088087314 + .long 1068036405 + .long 2609990599 + .long 1067987532 + .long 3386464469 + .long 1067938708 + .long 695925966 + .long 1067889934 + .long 2702982241 + .long 1067841208 + .long 393654302 + .long 1067792532 + .long 1935110223 + .long 1067743904 + .long 2610888947 + .long 1067695325 + .long 2000764363 + .long 1067646795 + .long 3980740227 + .long 1067598313 + .long 3838143224 + .long 1067549880 + .long 1156519829 + .long 1067501496 + .long 4110598596 + .long 1067453159 + .long 3097995520 + .long 1067359375 + .long 3297851897 + .long 1067262895 + .long 3702812359 + .long 1067166511 + .long 3492345695 + .long 1067070223 + .long 1848366390 + .long 1066974031 + .long 2250192214 + .long 1066877934 + .long 3884599966 + .long 1066781932 + .long 1645815860 + .long 1066686026 + .long 3315375145 + .long 1066590214 + .long 3792308805 + .long 1066494497 + .long 251039259 + .long 1066395959 + .long 207414748 + .long 1066204903 + .long 1561045812 + .long 1066014035 + .long 2718921511 + .long 1065823355 + .long 2092732370 + .long 1065632863 + .long 2393819184 + .long 1065442558 + .long 4086440081 + .long 1065151664 + .long 3228205919 + .long 1064771801 + .long 3368528065 + .long 1064392310 + .long 2754502618 + .long 1063721742 + .long 2303420870 + .long 1062672426 + .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 2696122091 + .long 3214636092 + .long 2696122091 + .long 3214636092 + .long 60798926 + .long 1067957842 + .long 60798926 + .long 1067957842 + .long 4242638864 + .long 3216335824 + .long 4242638864 + .long 3216335824 + .long 3540051903 + .long 1069845994 + .long 3540051903 + .long 1069845994 + .long 2610650434 + .long 3218487403 + .long 2610650434 + .long 3218487403 + .long 734375590 + .long 1062030445 + .long 734375590 + .long 1062030445 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 2574098898 + .long 1070757742 + .long 2574098898 + .long 1070757742 + .long 1279163547 + .long 3218543945 + .long 1279163547 + .long 3218543945 + .long 3694782758 + .long 1071564553 + .long 3694782758 + .long 1071564553 + .long 1697348856 + .long 3219592519 + .long 1697348856 + .long 3219592519 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1063256064 + .long 0 + .long 1063256064 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1073156096 + .long 0 + .long 1073156096 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 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 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_dlog2_data_internal,@object + .size __svml_dlog2_data_internal,13568 + .align 64 + +__dlog2_la__Q3: + .long 3213221364 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3694789629 + .long 1071564553 + .long 0 + .long 1073157447 + .type __dlog2_la__Q3,@object + .size __dlog2_la__Q3,32 + .space 32, 0x00 + .align 64 + +__dlog2_la__Q2: + .long 3213221358 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3695167823 + .long 1071564553 + .long 1697791998 + .long 3218543943 + .long 0 + .long 1073157447 + .type __dlog2_la__Q2,@object + .size __dlog2_la__Q2,40 + .space 24, 0x00 + .align 64 + +__dlog2_la__Q1: + .long 3213221370 + .long 1050233568 + .long 3213207734 + .long 3196668640 + .long 3694789628 + .long 1071564553 + .long 1697350743 + .long 3218543943 + .long 1357908666 + .long 1070757740 + .long 3685007067 + .long 3217999625 + .long 96832070 + .long 1070227830 + .long 1140452344 + .long 3217495379 + .long 2606274745 + .long 1069844296 + .long 1933654871 + .long 3217172449 + .long 0 + .long 1073157447 + .long 0 + .long 3219592519 + .type __dlog2_la__Q1,@object + .size __dlog2_la__Q1,96 + .space 32, 0x00 + .align 64 + +__dlog2_la__TWO_32P: + .long 1048576 + .long 1106247680 + .type __dlog2_la__TWO_32P,@object + .size __dlog2_la__TWO_32P,8 + .space 56, 0x00 + .align 64 + +__dlog2_la__TWO_32: + .long 0 + .long 1106247680 + .type __dlog2_la__TWO_32,@object + .size __dlog2_la__TWO_32,8 + .space 56, 0x00 + .align 64 + +__dlog2_la__TWO_55: + .long 0 + .long 1130364928 + .type __dlog2_la__TWO_55,@object + .size __dlog2_la__TWO_55,8 + .space 56, 0x00 + .align 64 + +__dlog2_la___libm_rcp_table_256: + .long 0x3f7f8000 + .long 0x3f7e8000 + .long 0x3f7d8000 + .long 0x3f7c8000 + .long 0x3f7ba000 + .long 0x3f7aa000 + .long 0x3f79a000 + .long 0x3f78c000 + .long 0x3f77c000 + .long 0x3f76e000 + .long 0x3f75e000 + .long 0x3f750000 + .long 0x3f742000 + .long 0x3f732000 + .long 0x3f724000 + .long 0x3f716000 + .long 0x3f708000 + .long 0x3f6fa000 + .long 0x3f6ec000 + .long 0x3f6de000 + .long 0x3f6d0000 + .long 0x3f6c2000 + .long 0x3f6b6000 + .long 0x3f6a8000 + .long 0x3f69a000 + .long 0x3f68c000 + .long 0x3f680000 + .long 0x3f672000 + .long 0x3f666000 + .long 0x3f658000 + .long 0x3f64c000 + .long 0x3f640000 + .long 0x3f632000 + .long 0x3f626000 + .long 0x3f61a000 + .long 0x3f60e000 + .long 0x3f600000 + .long 0x3f5f4000 + .long 0x3f5e8000 + .long 0x3f5dc000 + .long 0x3f5d0000 + .long 0x3f5c4000 + .long 0x3f5b8000 + .long 0x3f5ae000 + .long 0x3f5a2000 + .long 0x3f596000 + .long 0x3f58a000 + .long 0x3f57e000 + .long 0x3f574000 + .long 0x3f568000 + .long 0x3f55e000 + .long 0x3f552000 + .long 0x3f546000 + .long 0x3f53c000 + .long 0x3f532000 + .long 0x3f526000 + .long 0x3f51c000 + .long 0x3f510000 + .long 0x3f506000 + .long 0x3f4fc000 + .long 0x3f4f2000 + .long 0x3f4e6000 + .long 0x3f4dc000 + .long 0x3f4d2000 + .long 0x3f4c8000 + .long 0x3f4be000 + .long 0x3f4b4000 + .long 0x3f4aa000 + .long 0x3f4a0000 + .long 0x3f496000 + .long 0x3f48c000 + .long 0x3f482000 + .long 0x3f478000 + .long 0x3f46e000 + .long 0x3f464000 + .long 0x3f45c000 + .long 0x3f452000 + .long 0x3f448000 + .long 0x3f43e000 + .long 0x3f436000 + .long 0x3f42c000 + .long 0x3f422000 + .long 0x3f41a000 + .long 0x3f410000 + .long 0x3f408000 + .long 0x3f3fe000 + .long 0x3f3f6000 + .long 0x3f3ec000 + .long 0x3f3e4000 + .long 0x3f3da000 + .long 0x3f3d2000 + .long 0x3f3ca000 + .long 0x3f3c0000 + .long 0x3f3b8000 + .long 0x3f3b0000 + .long 0x3f3a8000 + .long 0x3f39e000 + .long 0x3f396000 + .long 0x3f38e000 + .long 0x3f386000 + .long 0x3f37e000 + .long 0x3f376000 + .long 0x3f36c000 + .long 0x3f364000 + .long 0x3f35c000 + .long 0x3f354000 + .long 0x3f34c000 + .long 0x3f344000 + .long 0x3f33c000 + .long 0x3f334000 + .long 0x3f32e000 + .long 0x3f326000 + .long 0x3f31e000 + .long 0x3f316000 + .long 0x3f30e000 + .long 0x3f306000 + .long 0x3f2fe000 + .long 0x3f2f8000 + .long 0x3f2f0000 + .long 0x3f2e8000 + .long 0x3f2e2000 + .long 0x3f2da000 + .long 0x3f2d2000 + .long 0x3f2cc000 + .long 0x3f2c4000 + .long 0x3f2bc000 + .long 0x3f2b6000 + .long 0x3f2ae000 + .long 0x3f2a8000 + .long 0x3f2a0000 + .long 0x3f29a000 + .long 0x3f292000 + .long 0x3f28c000 + .long 0x3f284000 + .long 0x3f27e000 + .long 0x3f276000 + .long 0x3f270000 + .long 0x3f268000 + .long 0x3f262000 + .long 0x3f25c000 + .long 0x3f254000 + .long 0x3f24e000 + .long 0x3f248000 + .long 0x3f240000 + .long 0x3f23a000 + .long 0x3f234000 + .long 0x3f22e000 + .long 0x3f226000 + .long 0x3f220000 + .long 0x3f21a000 + .long 0x3f214000 + .long 0x3f20e000 + .long 0x3f206000 + .long 0x3f200000 + .long 0x3f1fa000 + .long 0x3f1f4000 + .long 0x3f1ee000 + .long 0x3f1e8000 + .long 0x3f1e2000 + .long 0x3f1dc000 + .long 0x3f1d6000 + .long 0x3f1d0000 + .long 0x3f1ca000 + .long 0x3f1c4000 + .long 0x3f1be000 + .long 0x3f1b8000 + .long 0x3f1b2000 + .long 0x3f1ac000 + .long 0x3f1a6000 + .long 0x3f1a0000 + .long 0x3f19a000 + .long 0x3f194000 + .long 0x3f190000 + .long 0x3f18a000 + .long 0x3f184000 + .long 0x3f17e000 + .long 0x3f178000 + .long 0x3f172000 + .long 0x3f16e000 + .long 0x3f168000 + .long 0x3f162000 + .long 0x3f15c000 + .long 0x3f158000 + .long 0x3f152000 + .long 0x3f14c000 + .long 0x3f148000 + .long 0x3f142000 + .long 0x3f13c000 + .long 0x3f138000 + .long 0x3f132000 + .long 0x3f12c000 + .long 0x3f128000 + .long 0x3f122000 + .long 0x3f11c000 + .long 0x3f118000 + .long 0x3f112000 + .long 0x3f10e000 + .long 0x3f108000 + .long 0x3f104000 + .long 0x3f0fe000 + .long 0x3f0f8000 + .long 0x3f0f4000 + .long 0x3f0ee000 + .long 0x3f0ea000 + .long 0x3f0e6000 + .long 0x3f0e0000 + .long 0x3f0dc000 + .long 0x3f0d6000 + .long 0x3f0d2000 + .long 0x3f0cc000 + .long 0x3f0c8000 + .long 0x3f0c2000 + .long 0x3f0be000 + .long 0x3f0ba000 + .long 0x3f0b4000 + .long 0x3f0b0000 + .long 0x3f0ac000 + .long 0x3f0a6000 + .long 0x3f0a2000 + .long 0x3f09e000 + .long 0x3f098000 + .long 0x3f094000 + .long 0x3f090000 + .long 0x3f08a000 + .long 0x3f086000 + .long 0x3f082000 + .long 0x3f07e000 + .long 0x3f078000 + .long 0x3f074000 + .long 0x3f070000 + .long 0x3f06c000 + .long 0x3f066000 + .long 0x3f062000 + .long 0x3f05e000 + .long 0x3f05a000 + .long 0x3f056000 + .long 0x3f052000 + .long 0x3f04c000 + .long 0x3f048000 + .long 0x3f044000 + .long 0x3f040000 + .long 0x3f03c000 + .long 0x3f038000 + .long 0x3f034000 + .long 0x3f030000 + .long 0x3f02a000 + .long 0x3f026000 + .long 0x3f022000 + .long 0x3f01e000 + .long 0x3f01a000 + .long 0x3f016000 + .long 0x3f012000 + .long 0x3f00e000 + .long 0x3f00a000 + .long 0x3f006000 + .long 0x3f002000 + .type __dlog2_la___libm_rcp_table_256,@object + .size __dlog2_la___libm_rcp_table_256,1024 + .align 64 + +__dlog2_la___libm_log2_table_256: + .long 0xfb44c3b7,0x3e1485cb + .long 0x00000000,0x3f671b0e + .long 0x06028ac0,0x3e31d5d9 + .long 0x00000000,0x3f815cfe + .long 0xb8d7240b,0x3df8b9cb + .long 0x00000000,0x3f8cfee7 + .long 0x0d179106,0x3e38864a + .long 0x00000000,0x3f94564a + .long 0xecba1593,0x3e459c6a + .long 0x00000000,0x3f997723 + .long 0x94120c14,0x3e48d36a + .long 0x00000000,0x3f9f5923 + .long 0xd2571490,0x3e5410ba + .long 0x00000000,0x3fa2a094 + .long 0x1dc036a2,0x3e2776b0 + .long 0x00000000,0x3fa53894 + .long 0x78efe2b1,0x3e537229 + .long 0x00000000,0x3fa8324c + .long 0xfd29dc75,0x3e59c0fa + .long 0x00000000,0x3faacf54 + .long 0x046734f7,0x3e4636b7 + .long 0x00000000,0x3fadced9 + .long 0xd3b410b8,0x3e6f7950 + .long 0x00000000,0x3fb0387e + .long 0x00f2200a,0x3e19d1e7 + .long 0x00000000,0x3fb18ac6 + .long 0x8661ba82,0x3e4f09a9 + .long 0x00000000,0x3fb30edd + .long 0x9367107c,0x3e564d91 + .long 0x00000000,0x3fb463c1 + .long 0x0e4a4ce8,0x3e4e1fd1 + .long 0x00000000,0x3fb5b9e1 + .long 0x3cdb6374,0x3e492cf0 + .long 0x00000000,0x3fb7113f + .long 0x069c4f7f,0x3e61a364 + .long 0x00000000,0x3fb869dd + .long 0x427b631b,0x3e6493a6 + .long 0x00000000,0x3fb9c3be + .long 0xe02b3e8b,0x3e6af2c2 + .long 0x00000000,0x3fbb1ee4 + .long 0x389f4365,0x3e616e1e + .long 0x00000000,0x3fbc7b52 + .long 0x6a31fd96,0x3e4633b7 + .long 0x00000000,0x3fbdd90a + .long 0x0508664d,0x3e62ed84 + .long 0x00000000,0x3fbf05d4 + .long 0xaca1905c,0x3e775dcd + .long 0x00000000,0x3fc032fb + .long 0x094fbeeb,0x3e753e65 + .long 0x00000000,0x3fc0e3b5 + .long 0x96aa4b17,0x3e671f44 + .long 0x00000000,0x3fc19519 + .long 0x92da5a47,0x3e785566 + .long 0x00000000,0x3fc22dad + .long 0xbeb7d722,0x3e518efa + .long 0x00000000,0x3fc2e050 + .long 0xab57551c,0x3e738564 + .long 0x00000000,0x3fc379f7 + .long 0x54a914e3,0x3e55d0da + .long 0x00000000,0x3fc42ddd + .long 0xfe974017,0x3e73cd00 + .long 0x00000000,0x3fc4c89b + .long 0x59064390,0x3e54ffd6 + .long 0x00000000,0x3fc563dc + .long 0x633ab50f,0x3e67d75e + .long 0x00000000,0x3fc619a2 + .long 0xc8877e8a,0x3e77e6ce + .long 0x00000000,0x3fc6b5ff + .long 0x1ab7837f,0x3e7ecc1f + .long 0x00000000,0x3fc752e1 + .long 0xf9d5827a,0x3e7cea7c + .long 0x00000000,0x3fc7f049 + .long 0x64ccd537,0x3e357f7a + .long 0x00000000,0x3fc8a898 + .long 0xf7c9b05b,0x3e7994ca + .long 0x00000000,0x3fc94724 + .long 0xa2f56536,0x3e524b8f + .long 0x00000000,0x3fc9e63a + .long 0x5edaab42,0x3e7fd640 + .long 0x00000000,0x3fca85d8 + .long 0xd163379a,0x3e625f54 + .long 0x00000000,0x3fcb2602 + .long 0x936acd51,0x3e7ebdc3 + .long 0x00000000,0x3fcbc6b6 + .long 0xcfbc0aa0,0x3e7eee14 + .long 0x00000000,0x3fcc67f7 + .long 0xf73bcdad,0x3e764469 + .long 0x00000000,0x3fcceec4 + .long 0x60971b86,0x3e6eb44e + .long 0x00000000,0x3fcd9109 + .long 0xcd2052a5,0x3e65fcf4 + .long 0x00000000,0x3fce33dd + .long 0xc402867b,0x3e61af1e + .long 0x00000000,0x3fced741 + .long 0xa0c956e4,0x3e61bfbd + .long 0x00000000,0x3fcf7b36 + .long 0x831e77ff,0x3e85287b + .long 0x00000000,0x3fd00223 + .long 0xaddfdee2,0x3e7d2fc3 + .long 0x00000000,0x3fd054a4 + .long 0x342052c1,0x3e83724b + .long 0x00000000,0x3fd0999d + .long 0x602bcd34,0x3e7b4ec9 + .long 0x00000000,0x3fd0eca6 + .long 0x3aa20ead,0x3e6742da + .long 0x00000000,0x3fd13ffa + .long 0x9ecdadf4,0x3e713e82 + .long 0x00000000,0x3fd185a4 + .long 0xfef3031b,0x3e52f27e + .long 0x00000000,0x3fd1cb83 + .long 0x79e4af8a,0x3e710739 + .long 0x00000000,0x3fd21fa1 + .long 0xe59ad84a,0x3e637301 + .long 0x00000000,0x3fd265f5 + .long 0x3d7dfd9b,0x3e88697c + .long 0x00000000,0x3fd2baa0 + .long 0x738117b0,0x3e717788 + .long 0x00000000,0x3fd3016b + .long 0xd3c26a97,0x3e6c5514 + .long 0x00000000,0x3fd3486c + .long 0x4c4ff246,0x3e8df550 + .long 0x00000000,0x3fd38fa3 + .long 0x40340fa6,0x3e88102d + .long 0x00000000,0x3fd3e562 + .long 0x4592f4c3,0x3e5f53b6 + .long 0x00000000,0x3fd42d14 + .long 0x8b149a00,0x3e750fc8 + .long 0x00000000,0x3fd474fd + .long 0xa8f50e5f,0x3e86d01c + .long 0x00000000,0x3fd4bd1e + .long 0x7a22a88a,0x3e83c469 + .long 0x00000000,0x3fd50578 + .long 0xdc18b6d2,0x3e79000e + .long 0x00000000,0x3fd54e0b + .long 0x7c00250b,0x3e7870f0 + .long 0x00000000,0x3fd596d7 + .long 0xc1c885ae,0x3e8e3dd5 + .long 0x00000000,0x3fd5dfdc + .long 0xa6ecc47e,0x3e7bf64c + .long 0x00000000,0x3fd6291c + .long 0x0bc16c18,0x3e6bdaca + .long 0x00000000,0x3fd67296 + .long 0x1f925729,0x3e84d25c + .long 0x00000000,0x3fd6bc4a + .long 0xf23978de,0x3e5a5fb4 + .long 0x00000000,0x3fd7063a + .long 0xe2ac7f60,0x3e8e3da0 + .long 0x00000000,0x3fd75064 + .long 0x71f51a7b,0x3e819e20 + .long 0x00000000,0x3fd79acb + .long 0x5b924234,0x3e5e43ae + .long 0x00000000,0x3fd7d67c + .long 0xe9aedf37,0x3e701a2b + .long 0x00000000,0x3fd8214f + .long 0xeddd33ea,0x3e6b6f51 + .long 0x00000000,0x3fd86c5f + .long 0xe732b3c4,0x3e79375f + .long 0x00000000,0x3fd8b7ac + .long 0xe47cb9df,0x3e7e831b + .long 0x00000000,0x3fd8f416 + .long 0xe392d3c8,0x3e8abc37 + .long 0x00000000,0x3fd93fd2 + .long 0x28b35c77,0x3e80852d + .long 0x00000000,0x3fd98bcd + .long 0xd29cea36,0x3e69f374 + .long 0x00000000,0x3fd9c8c3 + .long 0xb3d7b0e6,0x3e542981 + .long 0x00000000,0x3fda152f + .long 0x1fe6d5ac,0x3e8b2bfb + .long 0x00000000,0x3fda527f + .long 0xf32e5dda,0x3e6f6f5c + .long 0x00000000,0x3fda9f5e + .long 0xd34d0d30,0x3e65abaa + .long 0x00000000,0x3fdadd0b + .long 0xe0ac9602,0x3e7bd47f + .long 0x00000000,0x3fdb2a5d + .long 0x7c5c784b,0x3e833601 + .long 0x00000000,0x3fdb6867 + .long 0xd7b0821f,0x3e5b887c + .long 0x00000000,0x3fdbb62f + .long 0xcd0a8f6a,0x3e83eccc + .long 0x00000000,0x3fdbf497 + .long 0x7500a4e8,0x3e7ba0e6 + .long 0x00000000,0x3fdc332a + .long 0xfc8712bb,0x3e885a8b + .long 0x00000000,0x3fdc819d + .long 0xf7a3a78f,0x3e81c336 + .long 0x00000000,0x3fdcc090 + .long 0x4ad8a38b,0x3e7846b4 + .long 0x00000000,0x3fdcffae + .long 0xfcfc3a99,0x3e7db50f + .long 0x00000000,0x3fdd3ef7 + .long 0x433cccd2,0x3e238809 + .long 0x00000000,0x3fdd8e50 + .long 0x6828fa82,0x3e721b2e + .long 0x00000000,0x3fddcdfb + .long 0xfc7c49c1,0x3e82848b + .long 0x00000000,0x3fde0dd2 + .long 0x1fce4d49,0x3e615144 + .long 0x00000000,0x3fde4dd6 + .long 0x77e2e8fd,0x3e68b88a + .long 0x00000000,0x3fde8e06 + .long 0x22a961b0,0x3e8fd353 + .long 0x00000000,0x3fdece62 + .long 0x266f2e1f,0x3e72854e + .long 0x00000000,0x3fdf1f16 + .long 0xc69211fe,0x3e8520c7 + .long 0x00000000,0x3fdf5fd8 + .long 0xaba878d5,0x3e826fcf + .long 0x00000000,0x3fdfa0c8 + .long 0xcd5b35b1,0x3e726ed8 + .long 0x00000000,0x3fdfe1e6 + .long 0x678a4f1c,0x3e49054d + .long 0x00000000,0x3fe01199 + .long 0x3bc19f18,0x3e5d23cb + .long 0x00000000,0x3fe03256 + .long 0x12772acb,0x3e87af35 + .long 0x00000000,0x3fe0532a + .long 0x2849c88a,0x3e67f5fc + .long 0x00000000,0x3fe07416 + .long 0x0e574fa1,0x3e84fce2 + .long 0x00000000,0x3fe08cd6 + .long 0x0ec2b5fa,0x3e857044 + .long 0x00000000,0x3fe0adeb + .long 0xd031f353,0x3e6d5d1d + .long 0x00000000,0x3fe0cf18 + .long 0xdae75c4d,0x3e99a159 + .long 0x00000000,0x3fe0f05c + .long 0x1553afb9,0x3e90eaf1 + .long 0x00000000,0x3fe111b9 + .long 0xdcc5c3c7,0x3e8bc6f3 + .long 0x00000000,0x3fe1332e + .long 0x1109e597,0x3e94ef84 + .long 0x00000000,0x3fe154bb + .long 0xd82adea4,0x3e937f40 + .long 0x00000000,0x3fe16df5 + .long 0x78336a2f,0x3e96dc5a + .long 0x00000000,0x3fe18fad + .long 0x84c2c804,0x3e90935b + .long 0x00000000,0x3fe1b17e + .long 0x04fd30aa,0x3e8a837a + .long 0x00000000,0x3fe1caeb + .long 0xd924b0ac,0x3e99061d + .long 0x00000000,0x3fe1ece7 + .long 0xef9b9d01,0x3e7ed700 + .long 0x00000000,0x3fe20efd + .long 0x202c81ec,0x3e9c6ebb + .long 0x00000000,0x3fe2289d + .long 0xfc0d7d76,0x3e936d4d + .long 0x00000000,0x3fe24adf + .long 0x9f8756ba,0x3e9a35d7 + .long 0x00000000,0x3fe26d3a + .long 0xe7c79d83,0x3e584ee3 + .long 0x00000000,0x3fe28710 + .long 0x942065a0,0x3e7d9e0d + .long 0x00000000,0x3fe2a998 + .long 0x2175afbf,0x3e872108 + .long 0x00000000,0x3fe2c38f + .long 0xfaf6283c,0x3e9f5809 + .long 0x00000000,0x3fe2e644 + .long 0x411d0507,0x3e871209 + .long 0x00000000,0x3fe3005e + .long 0x370c24bf,0x3e9c3b11 + .long 0x00000000,0x3fe32341 + .long 0x8044bb5a,0x3e9bce8e + .long 0x00000000,0x3fe33d7d + .long 0x698ea854,0x3e98aca0 + .long 0x00000000,0x3fe3608f + .long 0xd4d873bb,0x3e972a8e + .long 0x00000000,0x3fe37aee + .long 0x615e8182,0x3e8f669b + .long 0x00000000,0x3fe39e2f + .long 0xdda5b49a,0x3e98d1f4 + .long 0x00000000,0x3fe3b8b1 + .long 0xe72383f7,0x3e9cc279 + .long 0x00000000,0x3fe3dc21 + .long 0x497497f1,0x3e9c6774 + .long 0x00000000,0x3fe3f6c7 + .long 0x801bd0e6,0x3e82c7f6 + .long 0x00000000,0x3fe4117d + .long 0xd0ee28b4,0x3e9dfdd6 + .long 0x00000000,0x3fe43531 + .long 0xb70d3761,0x3e92d3a2 + .long 0x00000000,0x3fe4500b + .long 0xe7d6bcb2,0x3e9c8343 + .long 0x00000000,0x3fe46af4 + .long 0x90d43957,0x3e693179 + .long 0x00000000,0x3fe48eef + .long 0xf12570df,0x3e799eab + .long 0x00000000,0x3fe4a9fd + .long 0x1b88755d,0x3e78c5f8 + .long 0x00000000,0x3fe4c51b + .long 0xdf99a22c,0x3e7369be + .long 0x00000000,0x3fe4e049 + .long 0x6ed50f62,0x3e88fd93 + .long 0x00000000,0x3fe5049f + .long 0x978605ff,0x3e9c6042 + .long 0x00000000,0x3fe51ff2 + .long 0xe6c85f4c,0x3e930ae6 + .long 0x00000000,0x3fe53b56 + .long 0xc3275ba6,0x3e92e7b6 + .long 0x00000000,0x3fe556ca + .long 0x91597938,0x3e9e6401 + .long 0x00000000,0x3fe5724e + .long 0x448ebb62,0x3e3d2dee + .long 0x00000000,0x3fe59719 + .long 0x47501b6d,0x3e9b432e + .long 0x00000000,0x3fe5b2c3 + .long 0x571fa7cd,0x3e83cf9b + .long 0x00000000,0x3fe5ce7f + .long 0x7359819d,0x3e8dc615 + .long 0x00000000,0x3fe5ea4b + .long 0xc78a85ed,0x3e8973c3 + .long 0x00000000,0x3fe60628 + .long 0xc15a9f3d,0x3e77d788 + .long 0x00000000,0x3fe62216 + .long 0x51952736,0x3e9d2538 + .long 0x00000000,0x3fe63e14 + .long 0xde792c07,0x3e94dab9 + .long 0x00000000,0x3fe65a24 + .long 0x5bfa4318,0x3e8f5be1 + .long 0x00000000,0x3fe67645 + .long 0x55090ec8,0x3e903b26 + .long 0x00000000,0x3fe69277 + .long 0xc78b6175,0x3e99236f + .long 0x00000000,0x3fe6aeba + .long 0x3a80db6a,0x3e8a1972 + .long 0x00000000,0x3fe6cb0f + .long 0xf558aa96,0x3e8d43a2 + .long 0x00000000,0x3fe6e775 + .long 0xd9a82f2e,0x3e424ee3 + .long 0x00000000,0x3fe703ed + .long 0x583878f6,0x3e764d8e + .long 0x00000000,0x3fe72076 + .long 0xc1150a3e,0x3e379604 + .long 0x00000000,0x3fe73d11 + .long 0xed85584b,0x3e93b229 + .long 0x00000000,0x3fe759bd + .long 0x451a7b48,0x3e62967a + .long 0x00000000,0x3fe7767c + .long 0xc044e72d,0x3e8e12d7 + .long 0x00000000,0x3fe7934c + .long 0xfdfb6949,0x3e9ca45d + .long 0x00000000,0x3fe7b02e + .long 0xff690fce,0x3e9244fc + .long 0x00000000,0x3fe7c37a + .long 0x81487a2c,0x3e7e9cea + .long 0x00000000,0x3fe7e07b + .long 0xd0ad2d9a,0x3e760da0 + .long 0x00000000,0x3fe7fd8e + .long 0x096f45d9,0x3e8d7703 + .long 0x00000000,0x3fe81ab3 + .long 0x1b17115b,0x3e78dbee + .long 0x00000000,0x3fe837eb + .long 0x7c252ee0,0x3e8dc5a4 + .long 0x00000000,0x3fe85535 + .long 0x42d5123f,0x3e950116 + .long 0x00000000,0x3fe868c6 + .long 0xf11e41be,0x3e4c4eb7 + .long 0x00000000,0x3fe88630 + .long 0xdb2890b4,0x3e7773b8 + .long 0x00000000,0x3fe8a3ac + .long 0x7ffb4479,0x3e7bc8e7 + .long 0x00000000,0x3fe8c13b + .long 0x237693b3,0x3e8c388f + .long 0x00000000,0x3fe8d4fa + .long 0x45fcf1a0,0x3e731cd4 + .long 0x00000000,0x3fe8f2a9 + .long 0xe4895b91,0x3e9fae07 + .long 0x00000000,0x3fe9106a + .long 0x42d2824e,0x3e7d140d + .long 0x00000000,0x3fe9244c + .long 0x39900f67,0x3e75c3c8 + .long 0x00000000,0x3fe9422e + .long 0xa314252b,0x3e902422 + .long 0x00000000,0x3fe96023 + .long 0xf2a6b8ef,0x3e7b9be8 + .long 0x00000000,0x3fe97427 + .long 0x1476f5e9,0x3e66b188 + .long 0x00000000,0x3fe9923d + .long 0xdde10a6f,0x3e93c377 + .long 0x00000000,0x3fe9b066 + .long 0x4944a32c,0x3e817cad + .long 0x00000000,0x3fe9c48d + .long 0xc738e7ef,0x3e9927f2 + .long 0x00000000,0x3fe9e2d7 + .long 0xd25cfd94,0x3e7ccc41 + .long 0x00000000,0x3fea0136 + .long 0x2210e81b,0x3e8382fa + .long 0x00000000,0x3fea1580 + .long 0x1e690ce2,0x3e7752a7 + .long 0x00000000,0x3fea3400 + .long 0x122315d2,0x3e94cfee + .long 0x00000000,0x3fea4860 + .long 0xce98333b,0x3e80536e + .long 0x00000000,0x3fea6702 + .long 0xc30f00e9,0x3e838b7e + .long 0x00000000,0x3fea7b79 + .long 0x05b0c779,0x3e9dc380 + .long 0x00000000,0x3fea9a3c + .long 0xdd6dd3fe,0x3e6be168 + .long 0x00000000,0x3feab915 + .long 0x26e0d276,0x3e966757 + .long 0x00000000,0x3feacdb0 + .long 0x0aad615c,0x3e880252 + .long 0x00000000,0x3feaecab + .long 0x7927096a,0x3e607c31 + .long 0x00000000,0x3feb015e + .long 0x53b3d90e,0x3e596513 + .long 0x00000000,0x3feb161a + .long 0x8f2f0570,0x3e90ec3a + .long 0x00000000,0x3feb3545 + .long 0x81193954,0x3e9cb640 + .long 0x00000000,0x3feb4a18 + .long 0x311e7236,0x3e936479 + .long 0x00000000,0x3feb6967 + .long 0x3a42a413,0x3e9210e8 + .long 0x00000000,0x3feb7e52 + .long 0x4a0daeb2,0x3e9a1717 + .long 0x00000000,0x3feb9dc4 + .long 0xce900653,0x3e925bb7 + .long 0x00000000,0x3febb2c7 + .long 0xb5087588,0x3e95dbb8 + .long 0x00000000,0x3febd25d + .long 0x4a41204c,0x3e8d0aa9 + .long 0x00000000,0x3febe778 + .long 0x69a0d774,0x3e9c772f + .long 0x00000000,0x3febfc9c + .long 0x79d0a9a5,0x3e97b6a0 + .long 0x00000000,0x3fec1c65 + .long 0xd26f1a12,0x3e8f7402 + .long 0x00000000,0x3fec31a2 + .long 0x1243bc84,0x3e4db2f1 + .long 0x00000000,0x3fec46e9 + .long 0x477e1755,0x3e80dcc2 + .long 0x00000000,0x3fec66e5 + .long 0xc2f904c1,0x3e8b1e31 + .long 0x00000000,0x3fec7c44 + .long 0x1785b0c4,0x3e8fb619 + .long 0x00000000,0x3fec91ad + .long 0xedb052ef,0x3e98832d + .long 0x00000000,0x3fecb1dd + .long 0x9e373618,0x3e98c822 + .long 0x00000000,0x3fecc75f + .long 0x32954637,0x3e9a46e7 + .long 0x00000000,0x3fecdceb + .long 0xf0e6b2a9,0x3e996305 + .long 0x00000000,0x3fecfd50 + .long 0x1a6614ee,0x3e68c160 + .long 0x00000000,0x3fed12f6 + .long 0x09e33b28,0x3e9229c4 + .long 0x00000000,0x3fed28a5 + .long 0xe53b994c,0x3e7f281b + .long 0x00000000,0x3fed3e5f + .long 0x1124ac35,0x3e9f27f3 + .long 0x00000000,0x3fed5f08 + .long 0x3d2fdc03,0x3e84e779 + .long 0x00000000,0x3fed74dc + .long 0x1e93fd97,0x3e416c07 + .long 0x00000000,0x3fed8aba + .long 0x91b415ef,0x3e654669 + .long 0x00000000,0x3feda0a2 + .long 0x6495f594,0x3e9712d4 + .long 0x00000000,0x3fedc191 + .long 0x40171789,0x3e9ca7b2 + .long 0x00000000,0x3fedd793 + .long 0xe8fc4323,0x3e929afa + .long 0x00000000,0x3fededa0 + .long 0xeb03bd09,0x3e9a2e96 + .long 0x00000000,0x3fee03b7 + .long 0xca370ea2,0x3e94a63d + .long 0x00000000,0x3fee19d9 + .long 0xe30512ec,0x3e6a3bcb + .long 0x00000000,0x3fee3006 + .long 0x411c95ce,0x3e99d3ed + .long 0x00000000,0x3fee515c + .long 0x35cfaf8e,0x3e3e5b57 + .long 0x00000000,0x3fee67a4 + .long 0x5669df6a,0x3e9fca71 + .long 0x00000000,0x3fee7df5 + .long 0x04f19d94,0x3e9914e2 + .long 0x00000000,0x3fee9452 + .long 0xcaa19134,0x3e8b511c + .long 0x00000000,0x3feeaaba + .long 0x4bb3bfb1,0x3e9ed72f + .long 0x00000000,0x3feec12c + .long 0x3c29d75e,0x3e8be8d6 + .long 0x00000000,0x3feed7aa + .long 0x97da24fd,0x3e9c55d9 + .long 0x00000000,0x3feeee32 + .long 0x983c68ea,0x3e7ddfb1 + .long 0x00000000,0x3fef1014 + .long 0xf4425883,0x3e83ce66 + .long 0x00000000,0x3fef26b8 + .long 0xf7857f23,0x3e9055c3 + .long 0x00000000,0x3fef3d67 + .long 0x2805b525,0x3e9c2223 + .long 0x00000000,0x3fef5421 + .long 0x0c347fcf,0x3e8d59ba + .long 0x00000000,0x3fef6ae7 + .long 0x7c901c44,0x3e82b110 + .long 0x00000000,0x3fef81b8 + .long 0x74d1b482,0x3e8b1394 + .long 0x00000000,0x3fef9894 + .long 0x36fb9eb2,0x3e9ca75b + .long 0x00000000,0x3fefaf7b + .long 0x629b1b7e,0x3e981a0a + .long 0x00000000,0x3fefc66e + .long 0x7b8c1116,0x3e54cc20 + .long 0x00000000,0x3fefdd6d + .long 0xc0babe05,0x3e99ac8b + .long 0x00000000,0x3feff476 + .type __dlog2_la___libm_log2_table_256,@object + .size __dlog2_la___libm_log2_table_256,4096 + .space 512, 0x00 + .align 64 + +__dlog2_la__P: + .long 3213235158 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3694740707 + .long 1071564553 + .long 1697260025 + .long 3218543943 + .long 2542794428 + .long 1070757746 + .long 2165113687 + .long 3217999640 + .long 0 + .long 1073157447 + .type __dlog2_la__P,@object + .size __dlog2_la__P,56 + .space 8, 0x00 + .align 16 + +.FLT_16: + .long 0x00000000,0x43380000,0x00000000,0x43380000 + .type .FLT_16,@object + .size .FLT_16,16 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core-sse.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core-sse.S new file mode 100644 index 0000000000..882ee276f2 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core-sse.S @@ -0,0 +1,20 @@ +/* SSE version of vectorized log2, 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_log2 _ZGVdN4v_log2_sse_wrapper +#include "../svml_d_log24_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core.c new file mode 100644 index 0000000000..7678090d11 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core.c @@ -0,0 +1,27 @@ +/* Multiple versions of vectorized log2, 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_log2 +#include "ifunc-mathvec-avx2.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVdN4v_log2, __GI__ZGVdN4v_log2, __redirect__ZGVdN4v_log2) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core_avx2.S new file mode 100644 index 0000000000..3960338639 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log24_core_avx2.S @@ -0,0 +1,5321 @@ +/* Function log 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 + * log2(x) = k - log2(Rcp) + poly_approximation(R) + * log2(Rcp) is tabulated + * + * + */ + +#include + + .text +ENTRY(_ZGVdN4v_log2_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 -4218816+__svml_dlog2_data_internal(%rip), %rax + vmovapd %ymm0, %ymm3 + +/* preserve mantissa, set input exponent to 2^(-10) */ + vandpd 12800+__svml_dlog2_data_internal(%rip), %ymm3, %ymm4 + vorpd 12928+__svml_dlog2_data_internal(%rip), %ymm4, %ymm2 + +/* reciprocal approximation good to at least 11 bits */ + vcvtpd2ps %ymm2, %xmm5 + +/* exponent bits */ + vpsrlq $20, %ymm3, %ymm7 + vmovups %ymm15, 320(%rsp) + .cfi_escape 0x10, 0xe2, 0x00, 0x0e, 0x38, 0x1c, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x1a, 0x0d, 0xc0, 0xff, 0xff, 0xff, 0x22 + +/* exponent */ + vmovupd 13312+__svml_dlog2_data_internal(%rip), %ymm15 + vmovups %ymm9, 96(%rsp) + vmovups %ymm8, 32(%rsp) + 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 12992+__svml_dlog2_data_internal(%rip), %ymm3, %ymm5 + vcvtps2pd %xmm6, %ymm1 + vcmpnle_uqpd 13056+__svml_dlog2_data_internal(%rip), %ymm3, %ymm6 + +/* round reciprocal to nearest integer, will have 1+9 mantissa bits */ + vroundpd $0, %ymm1, %ymm1 + +/* argument reduction */ + vfmsub213pd 13248+__svml_dlog2_data_internal(%rip), %ymm1, %ymm2 + .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 + +/* + * prepare table index + * table lookup + */ + vpsrlq $40, %ymm1, %ymm9 + vcmplt_oqpd %ymm1, %ymm15, %ymm1 + vandpd 13376+__svml_dlog2_data_internal(%rip), %ymm1, %ymm15 + vorpd %ymm6, %ymm5, %ymm8 + +/* combine and get argument value range mask */ + vmovmskpd %ymm8, %edx + vmulpd %ymm2, %ymm2, %ymm5 + vextractf128 $1, %ymm7, %xmm0 + vshufps $221, %xmm0, %xmm7, %xmm4 + +/* biased exponent in DP format */ + vcvtdq2pd %xmm4, %ymm0 + +/* polynomial */ + vmovupd 12608+__svml_dlog2_data_internal(%rip), %ymm7 + vorpd 13440+__svml_dlog2_data_internal(%rip), %ymm15, %ymm4 + vsubpd %ymm4, %ymm0, %ymm8 + vmovupd 12672+__svml_dlog2_data_internal(%rip), %ymm0 + vfmadd213pd 12640+__svml_dlog2_data_internal(%rip), %ymm2, %ymm7 + vfmadd213pd 12704+__svml_dlog2_data_internal(%rip), %ymm2, %ymm0 + vmulpd 12736+__svml_dlog2_data_internal(%rip), %ymm2, %ymm2 + vfmadd213pd %ymm0, %ymm5, %ymm7 + vfmadd213pd %ymm2, %ymm5, %ymm7 + 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 + vinsertf128 $1, %xmm14, %ymm11, %ymm6 + +/* reconstruction */ + vaddpd %ymm7, %ymm6, %ymm0 + vaddpd %ymm0, %ymm8, %ymm0 + testl %edx, %edx + jne .LBL_1_3 + +.LBL_1_2: + 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 + +.LBL_1_3: + vmovupd %ymm3, 64(%rsp) + vmovupd %ymm0, 128(%rsp) + je .LBL_1_2 + 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 + +.LBL_1_7: + btl %r12d, %r13d + jc .LBL_1_10 + +.LBL_1_8: + incl %r12d + cmpl $4, %r12d + jl .LBL_1_7 + 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 .LBL_1_2 + .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 + +.LBL_1_10: + lea 64(%rsp,%r12,8), %rdi + lea 128(%rsp,%r12,8), %rsi + call __svml_dlog2_cout_rare_internal + jmp .LBL_1_8 + +END(_ZGVdN4v_log2_avx2) + + .align 16,0x90 + +__svml_dlog2_cout_rare_internal: + + cfi_startproc + + movq $0, -64(%rsp) + movsd -64(%rsp), %xmm0 + movsd (%rdi), %xmm1 + movups _zeros.201.0.0.1(%rip), %xmm2 + subsd %xmm0, %xmm1 + movsd %xmm1, -8(%rsp) + movups %xmm2, -56(%rsp) + movups _ones.201.0.0.1(%rip), %xmm0 + movups %xmm0, -40(%rsp) + movups _infs.201.0.0.1(%rip), %xmm0 + movups %xmm0, -24(%rsp) + movl -4(%rsp), %eax + cmpl $2146435072, %eax + jae .LBL_2_19 + lea -1072660480(%rax), %edx + cmpl $53248, %edx + jae .LBL_2_14 + lea -1072693232(%rax), %edx + cmpl $24, %edx + jae .LBL_2_13 + movl -8(%rsp), %edi + movl %eax, %ecx + movl %edi, %edx + shll $11, %ecx + shrl $21, %edx + orl %edx, %ecx + addl $-2147483646, %ecx + cmpl $3, %ecx + jae .LBL_2_12 + addl $-1072693248, %eax + orl %edi, %eax + jne .LBL_2_10 + movq -56(%rsp), %rax + movq %rax, (%rsi) + jmp .LBL_2_11 + +.LBL_2_10: + movsd -8(%rsp), %xmm0 + movsd 16+__dlog2_la__Q3(%rip), %xmm2 + movsd 24+__dlog2_la__Q3(%rip), %xmm1 + addsd -32(%rsp), %xmm0 + mulsd %xmm0, %xmm2 + mulsd %xmm0, %xmm1 + addsd 8+__dlog2_la__Q3(%rip), %xmm2 + mulsd %xmm0, %xmm2 + movsd %xmm0, -8(%rsp) + addsd __dlog2_la__Q3(%rip), %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm1, %xmm2 + movsd %xmm2, (%rsi) + +.LBL_2_11: + xorl %eax, %eax + ret + +.LBL_2_12: + movsd -8(%rsp), %xmm2 + xorl %eax, %eax + movsd 16+__dlog2_la__Q2(%rip), %xmm1 + movsd 24+__dlog2_la__Q2(%rip), %xmm3 + addsd -32(%rsp), %xmm2 + movaps %xmm2, %xmm0 + mulsd %xmm2, %xmm0 + mulsd %xmm0, %xmm1 + mulsd %xmm0, %xmm3 + addsd __dlog2_la__Q2(%rip), %xmm1 + addsd 8+__dlog2_la__Q2(%rip), %xmm3 + mulsd %xmm2, %xmm1 + mulsd %xmm0, %xmm3 + movsd %xmm2, -8(%rsp) + addsd %xmm1, %xmm3 + movl $0, -8(%rsp) + movsd -8(%rsp), %xmm4 + subsd %xmm4, %xmm2 + addsd %xmm2, %xmm4 + mulsd 32+__dlog2_la__Q2(%rip), %xmm4 + addsd %xmm3, %xmm4 + movsd %xmm4, (%rsi) + ret + +.LBL_2_13: + movsd -8(%rsp), %xmm2 + xorl %eax, %eax + movsd 72+__dlog2_la__Q1(%rip), %xmm10 + movsd 64+__dlog2_la__Q1(%rip), %xmm4 + movsd __dlog2_la__TWO_32P(%rip), %xmm5 + movsd __dlog2_la__TWO_32P(%rip), %xmm7 + movsd 88+__dlog2_la__Q1(%rip), %xmm14 + movsd __dlog2_la__TWO_32P(%rip), %xmm11 + movsd __dlog2_la__TWO_32P(%rip), %xmm15 + addsd -32(%rsp), %xmm2 + movaps %xmm2, %xmm3 + movaps %xmm2, %xmm6 + mulsd %xmm2, %xmm3 + movaps %xmm2, %xmm0 + mulsd %xmm2, %xmm5 + mulsd __dlog2_la__TWO_32(%rip), %xmm6 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 56+__dlog2_la__Q1(%rip), %xmm10 + addsd 48+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 40+__dlog2_la__Q1(%rip), %xmm10 + addsd 32+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 24+__dlog2_la__Q1(%rip), %xmm10 + addsd 16+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm2, %xmm4 + movsd __dlog2_la__TWO_32(%rip), %xmm3 + addsd %xmm4, %xmm10 + mulsd %xmm10, %xmm7 + movaps %xmm3, %xmm8 + mulsd %xmm10, %xmm8 + movsd %xmm5, -72(%rsp) + movsd -72(%rsp), %xmm1 + movsd %xmm7, -72(%rsp) + subsd %xmm6, %xmm1 + movsd -72(%rsp), %xmm9 + subsd %xmm1, %xmm0 + subsd %xmm8, %xmm9 + movsd %xmm1, -8(%rsp) + subsd %xmm9, %xmm10 + addsd %xmm9, %xmm14 + addsd 8+__dlog2_la__Q1(%rip), %xmm10 + movaps %xmm14, %xmm4 + mulsd %xmm0, %xmm4 + mulsd %xmm2, %xmm10 + mulsd %xmm1, %xmm14 + addsd %xmm0, %xmm1 + addsd %xmm10, %xmm4 + movaps %xmm4, %xmm12 + movsd 80+__dlog2_la__Q1(%rip), %xmm9 + addsd %xmm14, %xmm12 + mulsd %xmm12, %xmm11 + mulsd %xmm3, %xmm12 + movsd %xmm11, -72(%rsp) + movsd -72(%rsp), %xmm13 + subsd %xmm12, %xmm13 + subsd %xmm13, %xmm4 + addsd %xmm13, %xmm9 + addsd %xmm14, %xmm4 + movaps %xmm9, %xmm13 + addsd __dlog2_la__Q1(%rip), %xmm4 + addsd %xmm4, %xmm13 + mulsd %xmm13, %xmm15 + mulsd %xmm3, %xmm13 + movsd %xmm15, -72(%rsp) + movsd -72(%rsp), %xmm14 + subsd %xmm13, %xmm14 + mulsd %xmm14, %xmm1 + subsd %xmm14, %xmm9 + addsd %xmm9, %xmm4 + mulsd %xmm2, %xmm4 + addsd %xmm4, %xmm1 + movsd %xmm1, (%rsi) + ret + +.LBL_2_14: + movl %eax, %ecx + movl %eax, %edx + shrl $20, %ecx + andl $1048575, %edx + addl $-1023, %ecx + cmpl $1048576, %eax + jae .LBL_2_18 + movl %edx, -4(%rsp) + movl -8(%rsp), %edx + orl %edx, %eax + jne .LBL_2_17 + movsd -32(%rsp), %xmm0 + movl $2, %eax + divsd -56(%rsp), %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_17: + movsd -8(%rsp), %xmm0 + mulsd __dlog2_la__TWO_55(%rip), %xmm0 + movsd %xmm0, -8(%rsp) + movl -4(%rsp), %edx + movl %edx, %ecx + shrl $20, %ecx + movl %edx, %eax + addl $-1078, %ecx + +.LBL_2_18: + shrl $12, %eax + orl $1072693248, %edx + movzbl %al, %edi + pxor %xmm7, %xmm7 + movl %edx, -4(%rsp) + lea __dlog2_la___libm_rcp_table_256(%rip), %rdx + movsd -8(%rsp), %xmm10 + pxor %xmm8, %xmm8 + movl $0, -8(%rsp) + lea __dlog2_la___libm_log2_table_256(%rip), %rax + movsd -8(%rsp), %xmm0 + cvtss2sd (%rdx,%rdi,4), %xmm7 + cvtsi2sd %ecx, %xmm8 + subsd %xmm0, %xmm10 + mulsd %xmm7, %xmm10 + mulsd %xmm0, %xmm7 + movsd 40+__dlog2_la__P(%rip), %xmm4 + movsd 32+__dlog2_la__P(%rip), %xmm3 + movsd 48+__dlog2_la__P(%rip), %xmm5 + movsd __dlog2_la__TWO_32(%rip), %xmm6 + shlq $4, %rdi + addsd -32(%rsp), %xmm7 + movaps %xmm7, %xmm2 + mulsd %xmm5, %xmm7 + addsd %xmm10, %xmm2 + mulsd %xmm5, %xmm10 + addsd %xmm7, %xmm6 + movaps %xmm2, %xmm1 + mulsd %xmm2, %xmm1 + mulsd %xmm1, %xmm4 + mulsd %xmm1, %xmm3 + addsd 24+__dlog2_la__P(%rip), %xmm4 + addsd 16+__dlog2_la__P(%rip), %xmm3 + mulsd %xmm1, %xmm4 + mulsd %xmm1, %xmm3 + addsd 8+__dlog2_la__P(%rip), %xmm4 + addsd __dlog2_la__P(%rip), %xmm3 + mulsd %xmm1, %xmm4 + mulsd %xmm2, %xmm3 + movsd %xmm6, -72(%rsp) + addsd %xmm3, %xmm4 + addsd 8(%rax,%rdi), %xmm8 + addsd %xmm4, %xmm10 + movsd -72(%rsp), %xmm9 + subsd __dlog2_la__TWO_32(%rip), %xmm9 + subsd %xmm9, %xmm7 + addsd %xmm8, %xmm9 + addsd (%rax,%rdi), %xmm7 + movsd %xmm9, -8(%rsp) + xorl %eax, %eax + addsd %xmm7, %xmm10 + addsd %xmm9, %xmm10 + movsd %xmm10, (%rsi) + ret + +.LBL_2_19: + movl %eax, %edx + andl $2147483647, %edx + cmpl $2146435072, %edx + ja .LBL_2_28 + jne .LBL_2_22 + cmpl $0, -8(%rsp) + jne .LBL_2_28 + +.LBL_2_22: + testl $-2147483648, %eax + je .LBL_2_27 + movl -8(%rsp), %eax + orl %eax, %edx + movsd -56(%rsp), %xmm1 + jne .LBL_2_25 + movsd -32(%rsp), %xmm0 + movl $2, %eax + divsd %xmm1, %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_25: + movsd -24(%rsp), %xmm0 + movl $1, %eax + mulsd %xmm1, %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_27: + movq -8(%rsp), %rax + movq %rax, (%rsi) + xorl %eax, %eax + ret + +.LBL_2_28: + movsd -8(%rsp), %xmm0 + xorl %eax, %eax + mulsd -40(%rsp), %xmm0 + movsd %xmm0, (%rsi) + ret + + cfi_endproc + + .type __svml_dlog2_cout_rare_internal,@function + .size __svml_dlog2_cout_rare_internal,.-__svml_dlog2_cout_rare_internal + .section .rodata, "a" + .align 64 + .align 16 + +_zeros.201.0.0.1: + .long 0 + .long 0 + .long 0 + .long 2147483648 + .align 16 + +_ones.201.0.0.1: + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .align 16 + +_infs.201.0.0.1: + .long 0 + .long 2146435072 + .long 0 + .long 4293918720 + + .section .rodata, "a" + .space 16, 0x00 + .align 64 + +__svml_dlog2_data_internal: + .long 0 + .long 3230658560 + .long 0 + .long 0 + .long 3721504 + .long 3230658564 + .long 390392217 + .long 1028833224 + .long 4279173520 + .long 3230658567 + .long 3697526933 + .long 3176772302 + .long 4236484232 + .long 3230658571 + .long 3866369393 + .long 3173573477 + .long 4170683432 + .long 3230658575 + .long 2406066045 + .long 1027614617 + .long 4081833376 + .long 3230658579 + .long 872311433 + .long 1029558987 + .long 3969996056 + .long 3230658583 + .long 3455238169 + .long 3176293652 + .long 3835233240 + .long 3230658587 + .long 3122028036 + .long 3175399406 + .long 3677606424 + .long 3230658591 + .long 3775975107 + .long 3175065502 + .long 3497176864 + .long 3230658595 + .long 1120402784 + .long 3176065974 + .long 3294005576 + .long 3230658599 + .long 3607704643 + .long 1027775251 + .long 3068153320 + .long 3230658603 + .long 3174454558 + .long 1028715334 + .long 2819680616 + .long 3230658607 + .long 1714361654 + .long 3176145083 + .long 2548647760 + .long 3230658611 + .long 1446250901 + .long 1029564267 + .long 2255114776 + .long 3230658615 + .long 4080025744 + .long 1029178975 + .long 1939141472 + .long 3230658619 + .long 841987973 + .long 1029054409 + .long 1600787408 + .long 3230658623 + .long 399562616 + .long 1024114381 + .long 1240111912 + .long 3230658627 + .long 3503181124 + .long 3176697658 + .long 857174080 + .long 3230658631 + .long 1254487117 + .long 3175371962 + .long 452032760 + .long 3230658635 + .long 4205447303 + .long 3176492920 + .long 24746584 + .long 3230658639 + .long 1994290281 + .long 1028250505 + .long 3870341224 + .long 3230658642 + .long 3457675008 + .long 3176979311 + .long 3398940264 + .long 3230658646 + .long 3225497353 + .long 3176623592 + .long 2905568928 + .long 3230658650 + .long 2126923612 + .long 1026561068 + .long 2390284912 + .long 3230658654 + .long 4230405746 + .long 3172886618 + .long 1853145696 + .long 3230658658 + .long 2504030371 + .long 3175134796 + .long 1294208528 + .long 3230658662 + .long 2470849917 + .long 3177172451 + .long 713530440 + .long 3230658666 + .long 4008627283 + .long 3176362565 + .long 111168232 + .long 3230658670 + .long 3947344950 + .long 1028309766 + .long 3782145768 + .long 3230658673 + .long 3547697003 + .long 3176800217 + .long 3136584832 + .long 3230658677 + .long 2863038012 + .long 1025769979 + .long 2469508848 + .long 3230658681 + .long 4101655891 + .long 1028623806 + .long 1780973736 + .long 3230658685 + .long 180044497 + .long 1028727134 + .long 1071035200 + .long 3230658689 + .long 1240324917 + .long 1029164642 + .long 339748720 + .long 3230658693 + .long 3339205157 + .long 3174606851 + .long 3882136872 + .long 3230658696 + .long 3953461054 + .long 1027744139 + .long 3108320112 + .long 3230658700 + .long 4056294543 + .long 1027898214 + .long 2313320576 + .long 3230658704 + .long 2017978773 + .long 3176388905 + .long 1497192904 + .long 3230658708 + .long 2630318761 + .long 3172120215 + .long 659991504 + .long 3230658712 + .long 1173149442 + .long 3176476805 + .long 4096737888 + .long 3230658715 + .long 2084279151 + .long 3176632233 + .long 3217551464 + .long 3230658719 + .long 147752605 + .long 3175187076 + .long 2317453320 + .long 3230658723 + .long 3463598502 + .long 1029004710 + .long 1396497032 + .long 3230658727 + .long 348113666 + .long 3175216077 + .long 454735992 + .long 3230658731 + .long 2797541458 + .long 3172926093 + .long 3787190664 + .long 3230658734 + .long 3810950996 + .long 3175936077 + .long 2803979432 + .long 3230658738 + .long 1880742672 + .long 3175438052 + .long 1800122360 + .long 3230658742 + .long 185990116 + .long 1025407904 + .long 775672016 + .long 3230658746 + .long 3308007208 + .long 1029438945 + .long 4025648056 + .long 3230658749 + .long 3792627158 + .long 1028183615 + .long 2960168064 + .long 3230658753 + .long 2550675711 + .long 1029174609 + .long 1874251296 + .long 3230658757 + .long 522796161 + .long 3175188745 + .long 767949536 + .long 3230658761 + .long 99639657 + .long 1028478111 + .long 3936281640 + .long 3230658764 + .long 1618272739 + .long 3176759878 + .long 2789364408 + .long 3230658768 + .long 2976648779 + .long 3177001126 + .long 1622216320 + .long 3230658772 + .long 995205633 + .long 3174119615 + .long 434888360 + .long 3230658776 + .long 201851350 + .long 3175435880 + .long 3522398632 + .long 3230658779 + .long 1631082790 + .long 1029197235 + .long 2294863136 + .long 3230658783 + .long 1386753027 + .long 3176550178 + .long 1047299600 + .long 3230658787 + .long 1591070772 + .long 3176954051 + .long 4074725544 + .long 3230658790 + .long 701119861 + .long 3176328095 + .long 2787256416 + .long 3230658794 + .long 3223019512 + .long 1028866240 + .long 1479909352 + .long 3230658798 + .long 2952422582 + .long 1024508588 + .long 152734024 + .long 3230658802 + .long 288366270 + .long 3175075539 + .long 3100747208 + .long 3230658805 + .long 1494938379 + .long 1027731037 + .long 1734063600 + .long 3230658809 + .long 1796105868 + .long 1028158292 + .long 347699608 + .long 3230658813 + .long 2172100889 + .long 1029347730 + .long 3236671448 + .long 3230658816 + .long 321576108 + .long 1027051181 + .long 1811093280 + .long 3230658820 + .long 3159981384 + .long 1028760888 + .long 365980952 + .long 3230658824 + .long 4083088766 + .long 3176402658 + .long 3196350152 + .long 3230658827 + .long 1966791372 + .long 3176779668 + .long 1712314488 + .long 3230658831 + .long 3599116437 + .long 3176268195 + .long 208889280 + .long 3230658835 + .long 3498192131 + .long 1027096101 + .long 2981089664 + .long 3230658838 + .long 3152711547 + .long 3171644297 + .long 1439028720 + .long 3230658842 + .long 142239255 + .long 3176002168 + .long 4172688536 + .long 3230658845 + .long 2394955302 + .long 3175668459 + .long 2592181840 + .long 3230658849 + .long 772412634 + .long 1029163313 + .long 992523056 + .long 3230658853 + .long 239947902 + .long 3177123772 + .long 3668726472 + .long 3230658856 + .long 3993011847 + .long 3173133053 + .long 2030904280 + .long 3230658860 + .long 1203564427 + .long 1024968471 + .long 374070408 + .long 3230658864 + .long 3495014224 + .long 1029532111 + .long 2993238600 + .long 3230658867 + .long 1693008698 + .long 1029300208 + .long 1298520552 + .long 3230658871 + .long 229843979 + .long 1028616611 + .long 3879896968 + .long 3230658874 + .long 2840741382 + .long 3177076399 + .long 2147479216 + .long 3230658878 + .long 1315931416 + .long 3175394520 + .long 396280360 + .long 3230658882 + .long 2917523745 + .long 3176241221 + .long 2921313312 + .long 3230658885 + .long 954068080 + .long 3176872778 + .long 1132688928 + .long 3230658889 + .long 1539389383 + .long 3177096379 + .long 3620387088 + .long 3230658892 + .long 3213801166 + .long 1029050611 + .long 1794518304 + .long 3230658896 + .long 224494799 + .long 1029157143 + .long 4245062128 + .long 3230658899 + .long 2292409870 + .long 1029149094 + .long 2382128760 + .long 3230658903 + .long 4172000302 + .long 1029521900 + .long 500730120 + .long 3230658907 + .long 1566889331 + .long 1022410137 + .long 2895877976 + .long 3230658910 + .long 3447287041 + .long 3177068115 + .long 977682048 + .long 3230658914 + .long 6222552 + .long 3176756595 + .long 3336121072 + .long 3230658917 + .long 3594755137 + .long 3176063522 + .long 1381304448 + .long 3230658921 + .long 1172789584 + .long 1029247928 + .long 3703210584 + .long 3230658924 + .long 2721646462 + .long 3176500859 + .long 1711948584 + .long 3230658928 + .long 1244442214 + .long 1029312023 + .long 3997496536 + .long 3230658931 + .long 272480018 + .long 1025685723 + .long 1969963224 + .long 3230658935 + .long 1208505284 + .long 1029490192 + .long 4219326432 + .long 3230658938 + .long 3360578575 + .long 3174058635 + .long 2155694632 + .long 3230658942 + .long 2245681021 + .long 1026963921 + .long 74078008 + .long 3230658946 + .long 3496835215 + .long 3176351493 + .long 2269486608 + .long 3230658949 + .long 2995409405 + .long 3176402213 + .long 152028432 + .long 3230658953 + .long 2946959370 + .long 3171080196 + .long 2311680512 + .long 3230658956 + .long 811079866 + .long 1029646941 + .long 158550536 + .long 3230658960 + .long 2634400740 + .long 3174719534 + .long 2282615248 + .long 3230658963 + .long 3704965237 + .long 3176349039 + .long 93982048 + .long 3230658967 + .long 2840134146 + .long 1025829616 + .long 2182627360 + .long 3230658970 + .long 1838738265 + .long 3176564070 + .long 4253625592 + .long 3230658973 + .long 1173390987 + .long 3176177543 + .long 2012050992 + .long 3230658977 + .long 1084871272 + .long 3173895075 + .long 4047879552 + .long 3230658980 + .long 3493007974 + .long 1028200188 + .long 1771217928 + .long 3230658984 + .long 866422899 + .long 3176434896 + .long 3772041832 + .long 3230658987 + .long 241037730 + .long 3176289012 + .long 1460457632 + .long 3230658991 + .long 1003496008 + .long 3176406370 + .long 3426440744 + .long 3230658994 + .long 2184560753 + .long 3173354948 + .long 1080097248 + .long 3230658998 + .long 4029600754 + .long 3175828440 + .long 3011402280 + .long 3230659001 + .long 2827800738 + .long 1028558112 + .long 630461632 + .long 3230659005 + .long 1669381205 + .long 1027303067 + .long 2527250152 + .long 3230659008 + .long 1507135636 + .long 3175470401 + .long 111873368 + .long 3230659012 + .long 4290552909 + .long 1029305988 + .long 1974305832 + .long 3230659015 + .long 491815833 + .long 1028930331 + .long 3819620088 + .long 3230659018 + .long 974322798 + .long 1029451925 + .long 1352888528 + .long 3230659022 + .long 1335536991 + .long 3172426672 + .long 3164085312 + .long 3230659025 + .long 2773436098 + .long 1029127279 + .long 663315256 + .long 3230659029 + .long 2684187733 + .long 1028181243 + .long 2440552240 + .long 3230659032 + .long 2161571790 + .long 1027765615 + .long 4200868112 + .long 3230659035 + .long 3277047205 + .long 3174837243 + .long 1649334592 + .long 3230659039 + .long 4124850187 + .long 1025335396 + .long 3375925144 + .long 3230659042 + .long 3003584975 + .long 1021519814 + .long 790743920 + .long 3230659046 + .long 1415914940 + .long 1024723625 + .long 2483764120 + .long 3230659049 + .long 1136793699 + .long 3172319743 + .long 4160056928 + .long 3230659052 + .long 2148664472 + .long 1029245862 + .long 1524693384 + .long 3230659056 + .long 3056467792 + .long 1028886726 + .long 3167646296 + .long 3230659059 + .long 142099839 + .long 1028497609 + .long 499019152 + .long 3230659063 + .long 3699751308 + .long 1026582910 + .long 2108784496 + .long 3230659066 + .long 2287012473 + .long 1023727633 + .long 3702012848 + .long 3230659069 + .long 2554126940 + .long 3177131484 + .long 983774616 + .long 3230659073 + .long 263088196 + .long 1028047407 + .long 2544041936 + .long 3230659076 + .long 1900821763 + .long 3176347035 + .long 4087884960 + .long 3230659079 + .long 1428486283 + .long 3175804842 + .long 1320373696 + .long 3230659083 + .long 1249103901 + .long 1027194698 + .long 2831479912 + .long 3230659086 + .long 4024111846 + .long 1027875195 + .long 31306072 + .long 3230659090 + .long 2178201336 + .long 1028790706 + .long 1509823688 + .long 3230659093 + .long 863228784 + .long 3177069330 + .long 2972102280 + .long 3230659096 + .long 2800600011 + .long 3176772901 + .long 123211224 + .long 3230659100 + .long 2000143580 + .long 3175827790 + .long 1553121664 + .long 3230659103 + .long 3598597716 + .long 3174664631 + .long 2966902736 + .long 3230659106 + .long 160093135 + .long 1028156559 + .long 69623448 + .long 3230659110 + .long 1838028210 + .long 1028805781 + .long 1451254576 + .long 3230659113 + .long 171321689 + .long 1027544179 + .long 2816864888 + .long 3230659116 + .long 48443041 + .long 3175147757 + .long 4166490328 + .long 3230659119 + .long 2602435169 + .long 3175152427 + .long 1205199416 + .long 3230659123 + .long 3778841539 + .long 3176922801 + .long 2522962456 + .long 3230659126 + .long 69075835 + .long 1029409055 + .long 3824847712 + .long 3230659129 + .long 660089785 + .long 3174442320 + .long 815923368 + .long 3230659133 + .long 2460308321 + .long 1029094234 + .long 2086159344 + .long 3230659136 + .long 3024187972 + .long 3174141999 + .long 3340623576 + .long 3230659139 + .long 1011494086 + .long 3176827516 + .long 284383880 + .long 3230659143 + .long 3868463126 + .long 3173236251 + .long 1507409832 + .long 3230659146 + .long 4210695494 + .long 1029032026 + .long 2714769000 + .long 3230659149 + .long 2695744497 + .long 3176876805 + .long 3906496160 + .long 3230659152 + .long 343340875 + .long 1024675097 + .long 787658648 + .long 3230659156 + .long 2519963105 + .long 1029601486 + .long 1948225576 + .long 3230659159 + .long 2834660375 + .long 1027576345 + .long 3093264072 + .long 3230659162 + .long 1202481435 + .long 1029504111 + .long 4222808424 + .long 3230659165 + .long 548784753 + .long 1028305847 + .long 1041925528 + .long 3230659169 + .long 2583607066 + .long 1028957355 + .long 2140584040 + .long 3230659172 + .long 2642007844 + .long 3175275174 + .long 3223850632 + .long 3230659175 + .long 352423749 + .long 3174321553 + .long 4291759144 + .long 3230659178 + .long 339552960 + .long 3176556350 + .long 1049376024 + .long 3230659182 + .long 2660353592 + .long 1027255432 + .long 2086669480 + .long 3230659185 + .long 1104152295 + .long 1028453979 + .long 3108705728 + .long 3230659188 + .long 540614262 + .long 3175907859 + .long 4115518184 + .long 3230659191 + .long 3806184097 + .long 1028762582 + .long 812172832 + .long 3230659195 + .long 308602627 + .long 3173981149 + .long 1788637456 + .long 3230659198 + .long 1325608725 + .long 3176678267 + .long 2749977840 + .long 3230659201 + .long 990288509 + .long 3176107526 + .long 3696226952 + .long 3230659204 + .long 1916429866 + .long 1028814544 + .long 332450344 + .long 3230659208 + .long 3336107755 + .long 3176608247 + .long 1248615376 + .long 3230659211 + .long 4035119084 + .long 3176707463 + .long 2149787400 + .long 3230659214 + .long 2050304943 + .long 1029173658 + .long 3035998944 + .long 3230659217 + .long 2951948176 + .long 1029115289 + .long 3907282448 + .long 3230659220 + .long 2907658715 + .long 1028586234 + .long 468702944 + .long 3230659224 + .long 674698596 + .long 3175213847 + .long 1310227256 + .long 3230659227 + .long 3034611927 + .long 1027966053 + .long 2136920200 + .long 3230659230 + .long 2687871008 + .long 1028041908 + .long 2948813792 + .long 3230659233 + .long 596497875 + .long 3174693992 + .long 3745939952 + .long 3230659236 + .long 3329560030 + .long 1028812176 + .long 233363184 + .long 3230659240 + .long 1501722877 + .long 1028149340 + .long 1001049792 + .long 3230659243 + .long 3907078376 + .long 1028788204 + .long 1754064080 + .long 3230659246 + .long 946102851 + .long 1024784319 + .long 2492437552 + .long 3230659249 + .long 2477139935 + .long 3176834550 + .long 3216201616 + .long 3230659252 + .long 3861383265 + .long 3175556568 + .long 3925387568 + .long 3230659255 + .long 1708411866 + .long 1028140551 + .long 325059304 + .long 3230659259 + .long 1571249374 + .long 3176283508 + .long 1005182528 + .long 3230659262 + .long 1100083059 + .long 3174229259 + .long 1670820936 + .long 3230659265 + .long 3756028850 + .long 3175680086 + .long 2322005432 + .long 3230659268 + .long 1631050573 + .long 3176213330 + .long 2958766824 + .long 3230659271 + .long 1907582341 + .long 1029438684 + .long 3581135800 + .long 3230659274 + .long 2950542199 + .long 3173786866 + .long 4189142976 + .long 3230659277 + .long 114954998 + .long 3177096717 + .long 487851568 + .long 3230659281 + .long 2653253061 + .long 3176673071 + .long 1067226576 + .long 3230659284 + .long 1766996068 + .long 3175354818 + .long 1632331016 + .long 3230659287 + .long 3950907539 + .long 3175157886 + .long 2183195112 + .long 3230659290 + .long 2440105690 + .long 1029327524 + .long 2719848976 + .long 3230659293 + .long 341115768 + .long 1028056330 + .long 3242322640 + .long 3230659296 + .long 3179572713 + .long 3175645667 + .long 3750646040 + .long 3230659299 + .long 935147933 + .long 3175536948 + .long 4244849008 + .long 3230659302 + .long 3916511820 + .long 3176877809 + .long 429994000 + .long 3230659306 + .long 3978671087 + .long 1028263473 + .long 896045240 + .long 3230659309 + .long 230228243 + .long 3176823382 + .long 1348065008 + .long 3230659312 + .long 1603302089 + .long 1028781499 + .long 1786082752 + .long 3230659315 + .long 1397794181 + .long 1029625122 + .long 2210127840 + .long 3230659318 + .long 3655812571 + .long 3172766563 + .long 2620229560 + .long 3230659321 + .long 2385997325 + .long 1026727032 + .long 3016417088 + .long 3230659324 + .long 697404896 + .long 3176786781 + .long 3398719528 + .long 3230659327 + .long 3231162475 + .long 3175777962 + .long 3767165880 + .long 3230659330 + .long 2548610257 + .long 1028922412 + .long 4121785048 + .long 3230659333 + .long 3962667547 + .long 1027852637 + .long 167638560 + .long 3230659337 + .long 3554092856 + .long 3176729278 + .long 494689752 + .long 3230659340 + .long 2911955219 + .long 1028435709 + .long 807999952 + .long 3230659343 + .long 3789336944 + .long 3176103637 + .long 1107597728 + .long 3230659346 + .long 3750507527 + .long 1027365134 + .long 1393511536 + .long 3230659349 + .long 1827158241 + .long 1028945876 + .long 1665769752 + .long 3230659352 + .long 3306289784 + .long 1029589760 + .long 1924400656 + .long 3230659355 + .long 1510741592 + .long 3176411966 + .long 2169432464 + .long 3230659358 + .long 2294259978 + .long 1025847307 + .long 2400893272 + .long 3230659361 + .long 539270871 + .long 3176922069 + .long 2618811120 + .long 3230659364 + .long 3685107127 + .long 1027828508 + .long 2823213928 + .long 3230659367 + .long 3271061162 + .long 3176969831 + .long 3014129568 + .long 3230659370 + .long 1787956575 + .long 1028863184 + .long 3191585784 + .long 3230659373 + .long 716587587 + .long 3176400736 + .long 3355610272 + .long 3230659376 + .long 2630361878 + .long 3176313132 + .long 3506230624 + .long 3230659379 + .long 3623957067 + .long 1024822653 + .long 3643474344 + .long 3230659382 + .long 3940980068 + .long 3174610269 + .long 3767368864 + .long 3230659385 + .long 499400003 + .long 1028297429 + .long 3877941520 + .long 3230659388 + .long 3143491592 + .long 1028937135 + .long 3975219568 + .long 3230659391 + .long 1265600507 + .long 1027302761 + .long 4059230184 + .long 3230659394 + .long 3423756523 + .long 3174759308 + .long 4130000464 + .long 3230659397 + .long 2126977913 + .long 1029294479 + .long 4187557400 + .long 3230659400 + .long 1341359213 + .long 3176282153 + .long 4231927936 + .long 3230659403 + .long 142327675 + .long 1028516775 + .long 4263138896 + .long 3230659406 + .long 3537045733 + .long 3176611365 + .long 4281217056 + .long 3230659409 + .long 804943611 + .long 3175398448 + .long 4286189088 + .long 3230659412 + .long 2300440576 + .long 3173821797 + .long 4278081592 + .long 3230659415 + .long 650140298 + .long 1028345827 + .long 4256921080 + .long 3230659418 + .long 258434203 + .long 1024439656 + .long 4222733992 + .long 3230659421 + .long 2845277783 + .long 3175806217 + .long 4175546688 + .long 3230659424 + .long 486214358 + .long 1021995298 + .long 4115385440 + .long 3230659427 + .long 362801877 + .long 1027412332 + .long 4042276440 + .long 3230659430 + .long 3220639070 + .long 3177080040 + .long 3956245816 + .long 3230659433 + .long 3857709974 + .long 3176973100 + .long 3857319608 + .long 3230659436 + .long 300219354 + .long 1029159912 + .long 3745523760 + .long 3230659439 + .long 2500015736 + .long 3170135365 + .long 3620884168 + .long 3230659442 + .long 3361192444 + .long 1028410302 + .long 3483426624 + .long 3230659445 + .long 962673197 + .long 3176780787 + .long 3333176872 + .long 3230659448 + .long 466308644 + .long 1029193870 + .long 3170160544 + .long 3230659451 + .long 1036576323 + .long 1029692281 + .long 2994403208 + .long 3230659454 + .long 1262493470 + .long 3177123208 + .long 2805930376 + .long 3230659457 + .long 2116833460 + .long 3176824531 + .long 2604767464 + .long 3230659460 + .long 4130386607 + .long 1029379265 + .long 2390939800 + .long 3230659463 + .long 3203410687 + .long 1028676250 + .long 2164472656 + .long 3230659466 + .long 1369952708 + .long 3175783357 + .long 1925391232 + .long 3230659469 + .long 879032334 + .long 1028096866 + .long 1673720632 + .long 3230659472 + .long 4136287431 + .long 3171822968 + .long 1409485904 + .long 3230659475 + .long 1676116683 + .long 1027498055 + .long 1132712008 + .long 3230659478 + .long 2215341913 + .long 3175421168 + .long 843423840 + .long 3230659481 + .long 1029715364 + .long 3176433781 + .long 541646224 + .long 3230659484 + .long 2606758269 + .long 1029491721 + .long 227403888 + .long 3230659487 + .long 2201115753 + .long 1027951322 + .long 4195688808 + .long 3230659489 + .long 4218769073 + .long 1025395495 + .long 3856590992 + .long 3230659492 + .long 434820483 + .long 1029228152 + .long 3505102248 + .long 3230659495 + .long 3898434635 + .long 3176361218 + .long 3141247048 + .long 3230659498 + .long 3118973316 + .long 1029656842 + .long 2765049752 + .long 3230659501 + .long 2996229621 + .long 1029012421 + .long 2376534672 + .long 3230659504 + .long 2407486153 + .long 3175647547 + .long 1975726056 + .long 3230659507 + .long 2587350529 + .long 1029480630 + .long 1562648048 + .long 3230659510 + .long 4294469746 + .long 3176242263 + .long 1137324760 + .long 3230659513 + .long 3819488195 + .long 1023708576 + .long 699780200 + .long 3230659516 + .long 116131792 + .long 3177042014 + .long 250038336 + .long 3230659519 + .long 1551898075 + .long 1029096746 + .long 4083090328 + .long 3230659521 + .long 2844986349 + .long 1028973019 + .long 3609025400 + .long 3230659524 + .long 2591634103 + .long 1026318183 + .long 3122834592 + .long 3230659527 + .long 2325851864 + .long 3175053154 + .long 2114169952 + .long 3230659533 + .long 790463889 + .long 3176974498 + .long 1057284960 + .long 3230659539 + .long 1675706223 + .long 1028317332 + .long 4247334344 + .long 3230659544 + .long 4226562338 + .long 1027765102 + .long 3094569872 + .long 3230659550 + .long 2366937865 + .long 3168809551 + .long 1894144112 + .long 3230659556 + .long 1267587328 + .long 3176269982 + .long 646241264 + .long 3230659562 + .long 1575621247 + .long 3177156253 + .long 3646011760 + .long 3230659567 + .long 2645567153 + .long 3175833815 + .long 2303703080 + .long 3230659573 + .long 1827286098 + .long 1027997469 + .long 914463544 + .long 3230659579 + .long 752350642 + .long 1029527042 + .long 3773440424 + .long 3230659584 + .long 160463655 + .long 3176715839 + .long 2290878096 + .long 3230659590 + .long 909081824 + .long 3175933674 + .long 761921776 + .long 3230659596 + .long 2905535403 + .long 1028759497 + .long 3481715656 + .long 3230659601 + .long 3887423264 + .long 3176529033 + .long 1860501056 + .long 3230659607 + .long 2811353534 + .long 3176342172 + .long 193420168 + .long 3230659613 + .long 3875218385 + .long 1029601075 + .long 2775614176 + .long 3230659618 + .long 915846711 + .long 1029206337 + .long 1017321408 + .long 3230659624 + .long 2817823673 + .long 1028329866 + .long 3508648392 + .long 3230659629 + .long 2457221968 + .long 1028382518 + .long 1659831496 + .long 3230659635 + .long 1953946979 + .long 1028155361 + .long 4060975304 + .long 3230659640 + .long 1103591667 + .long 3177007543 + .long 2122314280 + .long 3230659646 + .long 1917780451 + .long 1029286965 + .long 138983784 + .long 3230659652 + .long 3695788845 + .long 3176288716 + .long 2406118280 + .long 3230659657 + .long 1052548871 + .long 1029099285 + .long 333949368 + .long 3230659663 + .long 1769629084 + .long 1028668282 + .long 2512576920 + .long 3230659668 + .long 2829899890 + .long 3177160765 + .long 352230712 + .long 3230659674 + .long 190593276 + .long 3177082107 + .long 2443008776 + .long 3230659679 + .long 308933071 + .long 1028033311 + .long 195139040 + .long 3230659685 + .long 2406662387 + .long 3174119994 + .long 2198717736 + .long 3230659690 + .long 3951897556 + .long 1025531185 + .long 4158938296 + .long 3230659695 + .long 3747433104 + .long 3176582029 + .long 1780993280 + .long 3230659701 + .long 1185733823 + .long 1025977389 + .long 3654976232 + .long 3230659706 + .long 2876938397 + .long 3175696111 + .long 1191110656 + .long 3230659712 + .long 1221563196 + .long 3173251774 + .long 2979488360 + .long 3230659717 + .long 2581073785 + .long 1028588464 + .long 430331104 + .long 3230659723 + .long 1522002357 + .long 1028645059 + .long 2133728976 + .long 3230659728 + .long 1060437513 + .long 3176445060 + .long 3794869336 + .long 3230659733 + .long 1092840036 + .long 3177052773 + .long 1118938696 + .long 3230659739 + .long 2353106107 + .long 1029111084 + .long 2696024600 + .long 3230659744 + .long 4060627338 + .long 1029597310 + .long 4231311888 + .long 3230659749 + .long 3779876129 + .long 1028286236 + .long 1429984576 + .long 3230659755 + .long 48483734 + .long 1027710210 + .long 2882127744 + .long 3230659760 + .long 445208449 + .long 1029139348 + .long 4292923760 + .long 3230659765 + .long 2295142960 + .long 3176049005 + .long 1367554208 + .long 3230659771 + .long 1540635558 + .long 1028483904 + .long 2696101728 + .long 3230659776 + .long 352999095 + .long 3169858434 + .long 3983746296 + .long 3230659781 + .long 1810565431 + .long 3175091705 + .long 935667088 + .long 3230659787 + .long 349039573 + .long 3176928791 + .long 2141944392 + .long 3230659792 + .long 3659173497 + .long 3174252174 + .long 3307755816 + .long 3230659797 + .long 58840479 + .long 1028893602 + .long 138278192 + .long 3230659803 + .long 2062870396 + .long 3175475632 + .long 1223589488 + .long 3230659808 + .long 3079310401 + .long 3176348925 + .long 2268865008 + .long 3230659813 + .long 4107437042 + .long 3177028487 + .long 3274246600 + .long 3230659818 + .long 3740178426 + .long 3176375927 + .long 4239875352 + .long 3230659823 + .long 1575862792 + .long 3176856991 + .long 870924320 + .long 3230659829 + .long 1293986679 + .long 1021959545 + .long 1757467688 + .long 3230659834 + .long 1268894705 + .long 3177114344 + .long 2604677040 + .long 3230659839 + .long 1483899592 + .long 3176088657 + .long 3412690504 + .long 3230659844 + .long 1351083799 + .long 3175751585 + .long 4181645488 + .long 3230659849 + .long 1119433498 + .long 3177131776 + .long 616711392 + .long 3230659855 + .long 4175979329 + .long 3173786505 + .long 1307958768 + .long 3230659860 + .long 2068378112 + .long 3176493003 + .long 1960555592 + .long 3230659865 + .long 178688056 + .long 1027848710 + .long 2574636408 + .long 3230659870 + .long 2359427625 + .long 1028095731 + .long 3150335072 + .long 3230659875 + .long 446961290 + .long 1028242607 + .long 3687784736 + .long 3230659880 + .long 2606786686 + .long 3176252768 + .long 4187117872 + .long 3230659885 + .long 147991783 + .long 3176229143 + .long 353498960 + .long 3230659891 + .long 2565649361 + .long 1026609244 + .long 776993680 + .long 3230659896 + .long 91083332 + .long 3175234267 + .long 1162765160 + .long 3230659901 + .long 1883429456 + .long 3174458208 + .long 1510943144 + .long 3230659906 + .long 1013024678 + .long 1027761501 + .long 1821656704 + .long 3230659911 + .long 2329976096 + .long 3171060885 + .long 2095034256 + .long 3230659916 + .long 393569875 + .long 3175313071 + .long 2331203560 + .long 3230659921 + .long 3866070308 + .long 1029684158 + .long 2530291696 + .long 3230659926 + .long 2303293568 + .long 3177026483 + .long 2692425136 + .long 3230659931 + .long 4151833399 + .long 3175350159 + .long 2817729672 + .long 3230659936 + .long 65831588 + .long 3170064008 + .long 2906330464 + .long 3230659941 + .long 3126642666 + .long 3176187966 + .long 2958352048 + .long 3230659946 + .long 1091895479 + .long 1029434562 + .long 2973918296 + .long 3230659951 + .long 1341819779 + .long 3177032854 + .long 2953152496 + .long 3230659956 + .long 3431130783 + .long 1025344246 + .long 2896177272 + .long 3230659961 + .long 222319660 + .long 3174332028 + .long 2803114648 + .long 3230659966 + .long 2574176974 + .long 3176321678 + .long 2674086032 + .long 3230659971 + .long 3543599213 + .long 3175295621 + .long 2509212216 + .long 3230659976 + .long 3961571325 + .long 1028729606 + .long 2308613376 + .long 3230659981 + .long 1968562443 + .long 3175604756 + .long 2072409104 + .long 3230659986 + .long 169553949 + .long 3175973960 + .long 1800718384 + .long 3230659991 + .long 1866092989 + .long 1029054996 + .long 1493659592 + .long 3230659996 + .long 3321480082 + .long 1028052101 + .long 1151350528 + .long 3230660001 + .long 1162474749 + .long 3175441009 + .long 773908408 + .long 3230660006 + .long 2117491299 + .long 1028922038 + .long 361449840 + .long 3230660011 + .long 1720394601 + .long 3176859733 + .long 4209058184 + .long 3230660015 + .long 3270331864 + .long 1026022939 + .long 3726914304 + .long 3230660020 + .long 761189460 + .long 1027666521 + .long 3210100392 + .long 3230660025 + .long 3128639134 + .long 3176063736 + .long 2658730784 + .long 3230660030 + .long 861675876 + .long 3174834708 + .long 2072919240 + .long 3230660035 + .long 598417369 + .long 1026585686 + .long 1452778960 + .long 3230660040 + .long 2969558584 + .long 3174198415 + .long 798422592 + .long 3230660045 + .long 1955836092 + .long 3175908135 + .long 109962232 + .long 3230660050 + .long 1441195450 + .long 1027193622 + .long 3682476712 + .long 3230660054 + .long 3027916121 + .long 1027617136 + .long 2926142440 + .long 3230660059 + .long 4058891045 + .long 1029177821 + .long 2136037160 + .long 3230660064 + .long 3295666276 + .long 1028335364 + .long 1312270792 + .long 3230660069 + .long 2664877443 + .long 1029314281 + .long 454952704 + .long 3230660074 + .long 2887304751 + .long 3176354723 + .long 3859159056 + .long 3230660078 + .long 3247043098 + .long 1029078121 + .long 2935063552 + .long 3230660083 + .long 551596274 + .long 3176193330 + .long 1977741296 + .long 3230660088 + .long 2154007986 + .long 3174741581 + .long 987299552 + .long 3230660093 + .long 1133524394 + .long 1027524435 + .long 4258812360 + .long 3230660097 + .long 1600085620 + .long 3177058369 + .long 3202451376 + .long 3230660102 + .long 2333163438 + .long 3176526084 + .long 2113289616 + .long 3230660107 + .long 276039368 + .long 1025414372 + .long 991432288 + .long 3230660112 + .long 3502468789 + .long 3176017589 + .long 4131951408 + .long 3230660116 + .long 1901031578 + .long 1027861596 + .long 2945016584 + .long 3230660121 + .long 1505110536 + .long 1028759236 + .long 1725698816 + .long 3230660126 + .long 2648053277 + .long 3176895440 + .long 474101336 + .long 3230660131 + .long 1239242430 + .long 1029534392 + .long 3485294136 + .long 3230660135 + .long 845517171 + .long 3173477246 + .long 2169444872 + .long 3230660140 + .long 4075267769 + .long 1028643096 + .long 821622576 + .long 3230660145 + .long 499928215 + .long 1029048762 + .long 3736895800 + .long 3230660149 + .long 870045772 + .long 3176516274 + .long 2325430744 + .long 3230660154 + .long 3081415625 + .long 3176560522 + .long 882295008 + .long 3230660159 + .long 3662267248 + .long 1029384081 + .long 3702555704 + .long 3230660163 + .long 4011089820 + .long 1029189731 + .long 2196377600 + .long 3230660168 + .long 2872532918 + .long 3175632540 + .long 658826888 + .long 3230660173 + .long 2512614570 + .long 3176940300 + .long 3384969288 + .long 3230660177 + .long 2018053043 + .long 3176636781 + .long 1784968168 + .long 3230660182 + .long 927902188 + .long 3175374192 + .long 153888328 + .long 3230660187 + .long 338402635 + .long 1029478185 + .long 2786794096 + .long 3230660191 + .long 2634228741 + .long 3175787031 + .long 1093847488 + .long 3230660196 + .long 13726686 + .long 3173662371 + .long 3665079232 + .long 3230660200 + .long 955232272 + .long 1029144724 + .long 1910650416 + .long 3230660205 + .long 1913213398 + .long 3177091414 + .long 125623600 + .long 3230660210 + .long 3896909877 + .long 3176901474 + .long 2605060880 + .long 3230660214 + .long 1162024003 + .long 3171225909 + .long 759122024 + .long 3230660219 + .long 101180827 + .long 1028720107 + .long 3177835544 + .long 3230660223 + .long 1119059392 + .long 3177080184 + .long 1271360360 + .long 3230660228 + .long 2533735500 + .long 1028313476 + .long 3629724104 + .long 3230660232 + .long 2461458646 + .long 3176172399 + .long 1663084832 + .long 3230660237 + .long 3468033532 + .long 1028155452 + .long 3961469328 + .long 3230660241 + .long 688573429 + .long 3173787118 + .long 1935034792 + .long 3230660246 + .long 852313808 + .long 1029214281 + .long 4173807160 + .long 3230660250 + .long 1743831019 + .long 3176961601 + .long 2087942800 + .long 3230660255 + .long 939132585 + .long 3175339625 + .long 4267466816 + .long 3230660259 + .long 804943611 + .long 3176447024 + .long 2122534736 + .long 3230660264 + .long 1216317347 + .long 1028000177 + .long 4243170840 + .long 3230660268 + .long 2936275121 + .long 3175268569 + .long 2039529840 + .long 3230660273 + .long 2537367085 + .long 1028954723 + .long 4101635200 + .long 3230660277 + .long 2494170689 + .long 3173567976 + .long 1839640816 + .long 3230660282 + .long 392206900 + .long 3176845046 + .long 3843569368 + .long 3230660286 + .long 4090462392 + .long 1028307871 + .long 1523573928 + .long 3230660291 + .long 460756979 + .long 3176389882 + .long 3469676392 + .long 3230660295 + .long 2929822293 + .long 1029426676 + .long 1092029040 + .long 3230660300 + .long 3560063032 + .long 1027386665 + .long 2980652976 + .long 3230660304 + .long 2630002021 + .long 1029084255 + .long 545699712 + .long 3230660309 + .long 3251005607 + .long 1029513439 + .long 2377189560 + .long 3230660313 + .long 2613820932 + .long 1027076618 + .long 4180240568 + .long 3230660317 + .long 2799936722 + .long 1025378340 + .long 1659970392 + .long 3230660322 + .long 3210945223 + .long 3175522055 + .long 3406398200 + .long 3230660326 + .long 2950429423 + .long 3176973715 + .long 829673600 + .long 3230660331 + .long 1432187170 + .long 3177113229 + .long 2519815008 + .long 3230660335 + .long 3601043748 + .long 3172224737 + .long 4181938568 + .long 3230660339 + .long 814468389 + .long 3175150283 + .long 1521160064 + .long 3230660344 + .long 3976767292 + .long 3177175436 + .long 3127496808 + .long 3230660348 + .long 2716501510 + .long 1028977394 + .long 411096528 + .long 3230660353 + .long 878128567 + .long 3176628610 + .long 1961975816 + .long 3230660357 + .long 2184878723 + .long 1028801182 + .long 3485248976 + .long 3230660361 + .long 3145811820 + .long 1029533129 + .long 686029968 + .long 3230660366 + .long 3776363698 + .long 1029165449 + .long 2154334280 + .long 3230660370 + .long 671743341 + .long 1024333977 + .long 3595275160 + .long 3230660374 + .long 2461553818 + .long 3174779052 + .long 713965496 + .long 3230660379 + .long 2151713083 + .long 3175993252 + .long 2100419720 + .long 3230660383 + .long 3102031601 + .long 1029232965 + .long 3459750008 + .long 3230660387 + .long 4013823470 + .long 1028620538 + .long 497068208 + .long 3230660392 + .long 4248883599 + .long 1028910528 + .long 1802387696 + .long 3230660396 + .long 1846273839 + .long 3175860934 + .long 3080819632 + .long 3230660400 + .long 1848559975 + .long 3175415033 + .long 37474824 + .long 3230660405 + .long 883985798 + .long 1029169919 + .long 1262365616 + .long 3230660409 + .long 2970327261 + .long 3175919327 + .long 2460602152 + .long 3230660413 + .long 2212867178 + .long 3176520464 + .long 3632261520 + .long 3230660417 + .long 3872739030 + .long 3176664707 + .long 482453184 + .long 3230660422 + .long 1041960122 + .long 1024886984 + .long 1601188152 + .long 3230660426 + .long 3362961153 + .long 3176317848 + .long 2693575232 + .long 3230660430 + .long 914600537 + .long 3175721660 + .long 3759690192 + .long 3230660434 + .long 3732031835 + .long 1029491624 + .long 504641160 + .long 3230660439 + .long 1661949843 + .long 3176759759 + .long 1518437864 + .long 3230660443 + .long 1155538621 + .long 3176080216 + .long 2506187792 + .long 3230660447 + .long 2074668130 + .long 3176155102 + .long 3467965424 + .long 3230660451 + .long 5072226 + .long 1029678430 + .long 108877600 + .long 3230660456 + .long 3844188174 + .long 3175740294 + .long 1018932768 + .long 3230660460 + .long 509804163 + .long 1026986837 + .long 1903237144 + .long 3230660464 + .long 817284140 + .long 1028367931 + .long 2761863936 + .long 3230660468 + .long 1026749811 + .long 1028400722 + .long 3594886040 + .long 3230660472 + .long 134616122 + .long 1027302887 + .long 107408744 + .long 3230660477 + .long 3388129995 + .long 3176634073 + .long 889438928 + .long 3230660481 + .long 4952363 + .long 1026762363 + .long 1646081256 + .long 3230660485 + .long 602092353 + .long 1025334666 + .long 2377407400 + .long 3230660489 + .long 870715200 + .long 1028049234 + .long 3083488720 + .long 3230660493 + .long 2898850879 + .long 1026959461 + .long 3764396280 + .long 3230660497 + .long 1041634577 + .long 3172001824 + .long 125233544 + .long 3230660502 + .long 4098260650 + .long 3176968164 + .long 756005576 + .long 3230660506 + .long 3936264397 + .long 3176271837 + .long 1361815248 + .long 3230660510 + .long 2005773894 + .long 1029460947 + .long 1942732416 + .long 3230660514 + .long 2286486375 + .long 3177123695 + .long 2498826688 + .long 3230660518 + .long 1062595601 + .long 1029046698 + .long 3030167328 + .long 3230660522 + .long 589866180 + .long 3176077962 + .long 3536823352 + .long 3230660526 + .long 1103133966 + .long 3175759187 + .long 4018863464 + .long 3230660530 + .long 1280466737 + .long 3177138719 + .long 181388800 + .long 3230660535 + .long 2008274805 + .long 3175962957 + .long 614402088 + .long 3230660539 + .long 3816723771 + .long 1026223943 + .long 1023003888 + .long 3230660543 + .long 3028155298 + .long 1028659203 + .long 1407261776 + .long 3230660547 + .long 2229630046 + .long 1029625324 + .long 1767243040 + .long 3230660551 + .long 3164503958 + .long 3174949449 + .long 2103014712 + .long 3230660555 + .long 874323935 + .long 1029396372 + .long 2414643512 + .long 3230660559 + .long 136799065 + .long 3176242621 + .long 2702195920 + .long 3230660563 + .long 3087239240 + .long 3175416105 + .long 2965738120 + .long 3230660567 + .long 3552260349 + .long 1026854656 + .long 3205336024 + .long 3230660571 + .long 628231562 + .long 3175305872 + .long 3421055288 + .long 3230660575 + .long 723080663 + .long 1029356970 + .long 3612961272 + .long 3230660579 + .long 3562572440 + .long 3176040503 + .long 3781119104 + .long 3230660583 + .long 2799655455 + .long 1029154690 + .long 3925593608 + .long 3230660587 + .long 3936971761 + .long 1026575267 + .long 4046449368 + .long 3230660591 + .long 2072414816 + .long 3175590577 + .long 4143750696 + .long 3230660595 + .long 1765517578 + .long 3176912984 + .long 4217561648 + .long 3230660599 + .long 3309795482 + .long 1025944498 + .long 4267946000 + .long 3230660603 + .long 3577983989 + .long 3176780675 + .long 0 + .long 3230660608 + .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 + .long 0 + .long 0 + .long 4278875493 + .long 3211202435 + .long 1836756087 + .long 3212249540 + .long 2166742286 + .long 3212919558 + .long 3069118545 + .long 3213295184 + .long 2882618713 + .long 3213670083 + .long 396983052 + .long 3213964849 + .long 2254986537 + .long 3214151575 + .long 2244137514 + .long 3214337942 + .long 2001317058 + .long 3214523951 + .long 3129282438 + .long 3214709603 + .long 2901961050 + .long 3214894900 + .long 3574805523 + .long 3215006929 + .long 97153270 + .long 3215099225 + .long 2489866790 + .long 3215191344 + .long 733531480 + .long 3215283289 + .long 1972305287 + .long 3215375059 + .long 449270987 + .long 3215466656 + .long 3276362132 + .long 3215558079 + .long 369713010 + .long 3215649331 + .long 3104484191 + .long 3215740410 + .long 1365308336 + .long 3215831319 + .long 2201113504 + .long 3215922057 + .long 4175201612 + .long 3215997608 + .long 2678235035 + .long 3216042808 + .long 111107850 + .long 3216087924 + .long 2115197501 + .long 3216132955 + .long 1439478642 + .long 3216177903 + .long 3710382531 + .long 3216222767 + .long 1662048346 + .long 3216267549 + .long 906181559 + .long 3216312248 + .long 2752238835 + .long 3216356864 + .long 4207481622 + .long 3216401398 + .long 2271996550 + .long 3216445851 + .long 2528682625 + .long 3216490222 + .long 1963434183 + .long 3216534512 + .long 1850094427 + .long 3216578721 + .long 3455539314 + .long 3216622849 + .long 3744760980 + .long 3216666897 + .long 3970852583 + .long 3216710865 + .long 1085123514 + .long 3216754754 + .long 622050639 + .long 3216798563 + .long 3814425306 + .long 3216842292 + .long 3298434523 + .long 3216885943 + .long 293578162 + .long 3216929516 + .long 307749260 + .long 3216973010 + .long 252379301 + .long 3217016426 + .long 663693424 + .long 3217045466 + .long 2363128292 + .long 3217067096 + .long 1523075309 + .long 3217088688 + .long 3028878894 + .long 3217110241 + .long 3172800190 + .long 3217131756 + .long 2538941307 + .long 3217153233 + .long 1708300177 + .long 3217174672 + .long 1258792512 + .long 3217196073 + .long 1765273565 + .long 3217217436 + .long 3799559706 + .long 3217238761 + .long 3635482505 + .long 3217260049 + .long 1838844516 + .long 3217281300 + .long 3267440290 + .long 3217302513 + .long 4186175309 + .long 3217323689 + .long 857021220 + .long 3217344829 + .long 2423938186 + .long 3217365931 + .long 848124101 + .long 3217386997 + .long 972805768 + .long 3217408026 + .long 3343389647 + .long 3217429018 + .long 4207481622 + .long 3217449974 + .long 4104841180 + .long 3217470894 + .long 3572433535 + .long 3217491778 + .long 3144448886 + .long 3217512626 + .long 3352321503 + .long 3217533438 + .long 429781357 + .long 3217554215 + .long 3492742067 + .long 3217574955 + .long 179581133 + .long 3217595661 + .long 3895798636 + .long 3217616330 + .long 2274427972 + .long 3217636965 + .long 125726943 + .long 3217657565 + .long 2257326549 + .long 3217678129 + .long 589346923 + .long 3217698659 + .long 4219186077 + .long 3217719153 + .long 766831764 + .long 3217739614 + .long 3619519104 + .long 3217760039 + .long 392140265 + .long 3217780431 + .long 171901807 + .long 3217800788 + .long 3453570542 + .long 3217821110 + .long 2139490342 + .long 3217841399 + .long 1014435273 + .long 3217861654 + .long 565756928 + .long 3217881875 + .long 1278368112 + .long 3217902062 + .long 3634759079 + .long 3217922215 + .long 3820046351 + .long 3217942335 + .long 2311923285 + .long 3217962422 + .long 3880675917 + .long 3217982475 + .long 409329490 + .long 3218002496 + .long 958435111 + .long 3218022483 + .long 1701314133 + .long 3218042437 + .long 3103942666 + .long 3218062358 + .long 2814999741 + .long 3218080995 + .long 2722956900 + .long 3218090923 + .long 1505407411 + .long 3218100835 + .long 3685756937 + .long 3218110730 + .long 901390368 + .long 3218120610 + .long 1968450191 + .long 3218130473 + .long 2817072651 + .long 3218140320 + .long 3671264118 + .long 3218150151 + .long 458973606 + .long 3218159967 + .long 1991969023 + .long 3218169766 + .long 4196040400 + .long 3218179549 + .long 2995908720 + .long 3218189317 + .long 2905167410 + .long 3218199069 + .long 4141387283 + .long 3218208805 + .long 2626123321 + .long 3218218526 + .long 2869823290 + .long 3218228231 + .long 791965228 + .long 3218237921 + .long 900933251 + .long 3218247595 + .long 3409122230 + .long 3218257253 + .long 4232944303 + .long 3218266896 + .long 3582769936 + .long 3218276524 + .long 1667967030 + .long 3218286137 + .long 2991874584 + .long 3218295734 + .long 3466907117 + .long 3218305316 + .long 3299462810 + .long 3218314883 + .long 2694962427 + .long 3218324435 + .long 1857855474 + .long 3218333972 + .long 991626313 + .long 3218343494 + .long 298800229 + .long 3218353001 + .long 4275916740 + .long 3218362492 + .long 238699089 + .long 3218371970 + .long 1271733131 + .long 3218381432 + .long 3278800247 + .long 3218390879 + .long 2162752362 + .long 3218400312 + .long 2415452322 + .long 3218409730 + .long 4232877747 + .long 3218419133 + .long 3515126734 + .long 3218428522 + .long 456358091 + .long 3218437897 + .long 3839764252 + .long 3218447256 + .long 972805768 + .long 3218456602 + .long 636889785 + .long 3218465933 + .long 3022604462 + .long 3218475249 + .long 4024691694 + .long 3218484551 + .long 3831987111 + .long 3218493839 + .long 2632458130 + .long 3218503113 + .long 613209272 + .long 3218512373 + .long 2255454733 + .long 3218521618 + .long 3449621726 + .long 3218530849 + .long 85290269 + .long 3218540067 + .long 936100227 + .long 3218549270 + .long 1889952648 + .long 3218558459 + .long 3128884028 + .long 3218567634 + .long 539136753 + .long 3218576796 + .long 2891033284 + .long 3218585943 + .long 1774210047 + .long 3218595077 + .long 1662393428 + .long 3218604197 + .long 2733535479 + .long 3218613303 + .long 869818766 + .long 3218622396 + .long 542563073 + .long 3218631475 + .long 1927328294 + .long 3218640540 + .long 903919170 + .long 3218649592 + .long 1941291890 + .long 3218658630 + .long 917689576 + .long 3218667655 + .long 2300516105 + .long 3218676666 + .long 1966471527 + .long 3218685664 + .long 86458524 + .long 3218694649 + .long 1125586940 + .long 3218703620 + .long 958276399 + .long 3218712578 + .long 4048129956 + .long 3218721522 + .long 1973102048 + .long 3218730454 + .long 3490273972 + .long 3218739372 + .long 176119889 + .long 3218748278 + .long 786249521 + .long 3218757170 + .long 1190641396 + .long 3218766049 + .long 1553516298 + .long 3218774915 + .long 2038374217 + .long 3218783768 + .long 2807998562 + .long 3218792608 + .long 4024460340 + .long 3218801435 + .long 1554155016 + .long 3218810250 + .long 4147675809 + .long 3218819051 + .long 3375046719 + .long 3218827840 + .long 3690497658 + .long 3218836616 + .long 957631997 + .long 3218845380 + .long 3924267057 + .long 3218854130 + .long 4157667002 + .long 3218862868 + .long 1814350566 + .long 3218871594 + .long 1345127672 + .long 3218880307 + .long 2905168726 + .long 3218889007 + .long 2354008484 + .long 3218897695 + .long 4140451764 + .long 3218906370 + .long 4122708074 + .long 3218915033 + .long 2453297277 + .long 3218923684 + .long 3579053340 + .long 3218932322 + .long 3356226173 + .long 3218940948 + .long 1935387215 + .long 3218949562 + .long 3761433103 + .long 3218958163 + .long 393720137 + .long 3218966753 + .long 570838969 + .long 3218975330 + .long 145847129 + .long 3218983895 + .long 3561109068 + .long 3218992447 + .long 2373463229 + .long 3219000988 + .long 1024029336 + .long 3219009517 + .long 3953310001 + .long 3219018033 + .long 2716292306 + .long 3219026538 + .long 1752255026 + .long 3219035031 + .long 1204902862 + .long 3219043512 + .long 1217337138 + .long 3219051981 + .long 1932059168 + .long 3219060438 + .long 3490973615 + .long 3219068883 + .long 1740424513 + .long 3219077317 + .long 1116100460 + .long 3219085739 + .long 1758136015 + .long 3219094149 + .long 3806082244 + .long 3219102547 + .long 3103942666 + .long 3219110934 + .long 4085078348 + .long 3219119309 + .long 2592341915 + .long 3219127673 + .long 1237017397 + .long 1071636966 + .long 2971350592 + .long 1071628625 + .long 2474540381 + .long 1071620296 + .long 3905998082 + .long 1071611978 + .long 2835758645 + .long 1071603672 + .long 3424346780 + .long 1071595377 + .long 1242904730 + .long 1071587094 + .long 453058437 + .long 1071578822 + .long 922012657 + .long 1071570561 + .long 2517515272 + .long 1071562311 + .long 812887046 + .long 1071554073 + .long 4266887859 + .long 1071545845 + .long 4158942730 + .long 1071537629 + .long 358942686 + .long 1071529425 + .long 1327241886 + .long 1071521231 + .long 2639818283 + .long 1071513048 + .long 4168139969 + .long 1071504876 + .long 1489227762 + .long 1071496716 + .long 3065521585 + .long 1071488566 + .long 180106617 + .long 1071480428 + .long 1296448894 + .long 1071472300 + .long 1993621492 + .long 1071464183 + .long 2146170984 + .long 1071456077 + .long 1629147435 + .long 1071447982 + .long 318101713 + .long 1071439898 + .long 2384050109 + .long 1071431824 + .long 3408569797 + .long 1071423761 + .long 3268698084 + .long 1071415709 + .long 1841962494 + .long 1071407668 + .long 3301345460 + .long 1071399637 + .long 3230379855 + .long 1071391617 + .long 1508048307 + .long 1071383608 + .long 2308780654 + .long 1071375609 + .long 1217549516 + .long 1071367621 + .long 2409736962 + .long 1071359643 + .long 1471262832 + .long 1071351676 + .long 2578451427 + .long 1071343719 + .long 1318159863 + .long 1071335773 + .long 1867644803 + .long 1071327837 + .long 4109658128 + .long 1071319911 + .long 3632444524 + .long 1071311996 + .long 319673663 + .long 1071304092 + .long 2645405118 + .long 1071296197 + .long 1904282206 + .long 1071288313 + .long 2276300709 + .long 1071280439 + .long 3646937343 + .long 1071272575 + .long 1607147436 + .long 1071264722 + .long 338264500 + .long 1071256879 + .long 4022063343 + .long 1071249045 + .long 3955855900 + .long 1071241222 + .long 27325445 + .long 1071233410 + .long 714524338 + .long 1071225607 + .long 1611035309 + .long 1071217814 + .long 2605838414 + .long 1071210031 + .long 3588341533 + .long 1071202258 + .long 153410875 + .long 1071194496 + .long 781237988 + .long 1071186743 + .long 1067533806 + .long 1071179000 + .long 903395686 + .long 1071171267 + .long 180337970 + .long 1071163544 + .long 3085257158 + .long 1071155830 + .long 920560604 + .long 1071148127 + .long 2168935497 + .long 1071140433 + .long 2428575699 + .long 1071132749 + .long 1593048857 + .long 1071125075 + .long 3851294344 + .long 1071117410 + .long 507752028 + .long 1071109756 + .long 47131309 + .long 1071102111 + .long 2364605328 + .long 1071094475 + .long 3060776247 + .long 1071086849 + .long 2031607852 + .long 1071079233 + .long 3468423567 + .long 1071071626 + .long 2973002597 + .long 1071064029 + .long 442479858 + .long 1071056442 + .long 69344031 + .long 1071048864 + .long 1751501034 + .long 1071041295 + .long 1092272106 + .long 1071033736 + .long 2285293781 + .long 1071026186 + .long 934646808 + .long 1071018646 + .long 1234723447 + .long 1071011115 + .long 3085323714 + .long 1071003593 + .long 2091653507 + .long 1070996081 + .long 2449224655 + .long 1070988578 + .long 4058951182 + .long 1070981084 + .long 2527147484 + .long 1070973600 + .long 2050428397 + .long 1070966125 + .long 2530805506 + .long 1070958659 + .long 3870652645 + .long 1070951202 + .long 1677736816 + .long 1070943755 + .long 150118311 + .long 1070936317 + .long 3486214350 + .long 1070928887 + .long 2999895448 + .long 1070921467 + .long 2890287450 + .long 1070914056 + .long 3061900616 + .long 1070906654 + .long 3419595198 + .long 1070899261 + .long 3868579735 + .long 1070891877 + .long 19442055 + .long 1070884503 + .long 368016775 + .long 1070877137 + .long 525579846 + .long 1070869780 + .long 398716067 + .long 1070862432 + .long 4189317433 + .long 1070855092 + .long 3214712303 + .long 1070847762 + .long 1677467535 + .long 1070840441 + .long 3780484975 + .long 1070833128 + .long 842097952 + .long 1070825825 + .long 1360840737 + .long 1070818530 + .long 950675880 + .long 1070811244 + .long 3815829096 + .long 1070803966 + .long 1275951213 + .long 1070796698 + .long 1830887666 + .long 1070789438 + .long 1095905871 + .long 1070782187 + .long 3276530156 + .long 1070774944 + .long 3988671029 + .long 1070767710 + .long 3143525540 + .long 1070760485 + .long 652608459 + .long 1070753269 + .long 722718060 + .long 1070746061 + .long 3266000023 + .long 1070738861 + .long 3899945937 + .long 1070731670 + .long 2537326407 + .long 1070724488 + .long 3386189576 + .long 1070717314 + .long 2064957766 + .long 1070710149 + .long 2782295200 + .long 1070702992 + .long 1157237371 + .long 1070695844 + .long 1399058776 + .long 1070688704 + .long 3422369598 + .long 1070681572 + .long 2847114276 + .long 1070674449 + .long 3883471977 + .long 1070667334 + .long 2151986001 + .long 1070660228 + .long 1863431563 + .long 1070653130 + .long 2933912512 + .long 1070646040 + .long 984859948 + .long 1070638959 + .long 227932728 + .long 1070631886 + .long 580114212 + .long 1070624821 + .long 1958678199 + .long 1070617764 + .long 4281187571 + .long 1070610715 + .long 3170525652 + .long 1070603675 + .long 2839796761 + .long 1070596643 + .long 2119878685 + .long 1070583143 + .long 4089253071 + .long 1070569111 + .long 2835758645 + .long 1070555096 + .long 2492901513 + .long 1070541097 + .long 2899780145 + .long 1070527114 + .long 3896050086 + .long 1070513147 + .long 1026954088 + .long 1070499197 + .long 2723188744 + .long 1070485262 + .long 236130877 + .long 1070471344 + .long 1997573379 + .long 1070457441 + .long 3554951635 + .long 1070443554 + .long 456242909 + .long 1070429684 + .long 1134865756 + .long 1070415829 + .long 1139873776 + .long 1070401990 + .long 315822345 + .long 1070388167 + .long 2802766176 + .long 1070374359 + .long 4151355006 + .long 1070360567 + .long 4207733072 + .long 1070346791 + .long 2818569420 + .long 1070333031 + .long 4126022811 + .long 1070319286 + .long 3682837469 + .long 1070305557 + .long 1337242607 + .long 1070291844 + .long 1232950086 + .long 1070278146 + .long 3219217489 + .long 1070264463 + .long 2850845810 + .long 1070250796 + .long 4273079031 + .long 1070237144 + .long 3041732648 + .long 1070223508 + .long 3303060581 + .long 1070209887 + .long 613883718 + .long 1070196282 + .long 3416424147 + .long 1070182691 + .long 2973531841 + .long 1070169116 + .long 3433453502 + .long 1070155556 + .long 354993870 + .long 1070142012 + .long 2182349993 + .long 1070128482 + .long 180337970 + .long 1070114968 + .long 2794129140 + .long 1070101468 + .long 1289509543 + .long 1070087984 + .long 4112616140 + .long 1070074514 + .long 2530196300 + .long 1070061060 + .long 694376742 + .long 1070047621 + .long 2757759525 + .long 1070034196 + .long 4283485357 + .long 1070020786 + .long 835166085 + .long 1070007392 + .long 861784501 + .long 1069994012 + .long 4222855791 + .long 1069980646 + .long 2188425477 + .long 1069967296 + .long 3208871137 + .long 1069953960 + .long 2850129301 + .long 1069940639 + .long 973562605 + .long 1069927333 + .long 1735957778 + .long 1069914041 + .long 704621746 + .long 1069900764 + .long 2037248826 + .long 1069887501 + .long 1302049555 + .long 1069874253 + .long 2657617909 + .long 1069861019 + .long 1673060149 + .long 1069847800 + .long 2507862062 + .long 1069834595 + .long 732017833 + .long 1069821405 + .long 505897304 + .long 1069808229 + .long 1695342161 + .long 1069795067 + .long 4166631327 + .long 1069781919 + .long 3491511767 + .long 1069768786 + .long 3832098487 + .long 1069755667 + .long 761003473 + .long 1069742563 + .long 2736170304 + .long 1069729472 + .long 1036101224 + .long 1069716396 + .long 4119593661 + .long 1069703333 + .long 3266000023 + .long 1069690285 + .long 2639996940 + .long 1069677251 + .long 2111714268 + .long 1069664231 + .long 1551700571 + .long 1069651225 + .long 830921328 + .long 1069638233 + .long 4115724438 + .long 1069625254 + .long 2687969258 + .long 1069612290 + .long 714828609 + .long 1069599340 + .long 2363885129 + .long 1069586403 + .long 3213194931 + .long 1069573480 + .long 3136187749 + .long 1069560571 + .long 2006697909 + .long 1069547676 + .long 3692892517 + .long 1069522069 + .long 765175007 + .long 1069496334 + .long 3570253499 + .long 1069470625 + .long 3269064532 + .long 1069444944 + .long 3908238678 + .long 1069419290 + .long 945260706 + .long 1069393664 + .long 2723302721 + .long 1069368064 + .long 406449780 + .long 1069342492 + .long 2339434949 + .long 1069316946 + .long 3982864956 + .long 1069291427 + .long 798118804 + .long 1069265936 + .long 1132246414 + .long 1069240471 + .long 448161614 + .long 1069215033 + .long 2799475404 + .long 1069189621 + .long 3650623571 + .long 1069164236 + .long 2761765396 + .long 1069138878 + .long 4188780490 + .long 1069113546 + .long 3398363754 + .long 1069088241 + .long 152924136 + .long 1069062963 + .long 2805548810 + .long 1069037710 + .long 2530196300 + .long 1069012484 + .long 3386464469 + .long 1068987284 + .long 844750970 + .long 1068962111 + .long 3261086672 + .long 1068936963 + .long 1812361559 + .long 1068911842 + .long 561092771 + .long 1068886747 + .long 3570519722 + .long 1068861677 + .long 2019699215 + .long 1068836634 + .long 4268273544 + .long 1068811616 + .long 1496729166 + .long 1068786625 + .long 2066132126 + .long 1068761659 + .long 1453354059 + .long 1068736719 + .long 3725905754 + .long 1068711804 + .long 67097779 + .long 1068686916 + .long 3135775963 + .long 1068662052 + .long 4116645570 + .long 1068637214 + .long 2785039517 + .long 1068612402 + .long 3211948238 + .long 1068587615 + .long 879114973 + .long 1068562854 + .long 4153869436 + .long 1068538117 + .long 4224353950 + .long 1068513406 + .long 1738648877 + .long 1068478498 + .long 621328029 + .long 1068429177 + .long 361989374 + .long 1068379906 + .long 522185726 + .long 1068330685 + .long 664805953 + .long 1068281514 + .long 354069550 + .long 1068232393 + .long 3450488540 + .long 1068183321 + .long 930992923 + .long 1068134300 + .long 953696405 + .long 1068085328 + .long 3088087314 + .long 1068036405 + .long 2609990599 + .long 1067987532 + .long 3386464469 + .long 1067938708 + .long 695925966 + .long 1067889934 + .long 2702982241 + .long 1067841208 + .long 393654302 + .long 1067792532 + .long 1935110223 + .long 1067743904 + .long 2610888947 + .long 1067695325 + .long 2000764363 + .long 1067646795 + .long 3980740227 + .long 1067598313 + .long 3838143224 + .long 1067549880 + .long 1156519829 + .long 1067501496 + .long 4110598596 + .long 1067453159 + .long 3097995520 + .long 1067359375 + .long 3297851897 + .long 1067262895 + .long 3702812359 + .long 1067166511 + .long 3492345695 + .long 1067070223 + .long 1848366390 + .long 1066974031 + .long 2250192214 + .long 1066877934 + .long 3884599966 + .long 1066781932 + .long 1645815860 + .long 1066686026 + .long 3315375145 + .long 1066590214 + .long 3792308805 + .long 1066494497 + .long 251039259 + .long 1066395959 + .long 207414748 + .long 1066204903 + .long 1561045812 + .long 1066014035 + .long 2718921511 + .long 1065823355 + .long 2092732370 + .long 1065632863 + .long 2393819184 + .long 1065442558 + .long 4086440081 + .long 1065151664 + .long 3228205919 + .long 1064771801 + .long 3368528065 + .long 1064392310 + .long 2754502618 + .long 1063721742 + .long 2303420870 + .long 1062672426 + .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 2696122091 + .long 3214636092 + .long 2696122091 + .long 3214636092 + .long 2696122091 + .long 3214636092 + .long 2696122091 + .long 3214636092 + .long 60798926 + .long 1067957842 + .long 60798926 + .long 1067957842 + .long 60798926 + .long 1067957842 + .long 60798926 + .long 1067957842 + .long 4242638864 + .long 3216335824 + .long 4242638864 + .long 3216335824 + .long 4242638864 + .long 3216335824 + .long 4242638864 + .long 3216335824 + .long 3540051903 + .long 1069845994 + .long 3540051903 + .long 1069845994 + .long 3540051903 + .long 1069845994 + .long 3540051903 + .long 1069845994 + .long 2610650434 + .long 3218487403 + .long 2610650434 + .long 3218487403 + .long 2610650434 + .long 3218487403 + .long 2610650434 + .long 3218487403 + .long 734375590 + .long 1062030445 + .long 734375590 + .long 1062030445 + .long 734375590 + .long 1062030445 + .long 734375590 + .long 1062030445 + .long 2574098898 + .long 1070757742 + .long 2574098898 + .long 1070757742 + .long 2574098898 + .long 1070757742 + .long 2574098898 + .long 1070757742 + .long 1279163547 + .long 3218543945 + .long 1279163547 + .long 3218543945 + .long 1279163547 + .long 3218543945 + .long 1279163547 + .long 3218543945 + .long 3694782758 + .long 1071564553 + .long 3694782758 + .long 1071564553 + .long 3694782758 + .long 1071564553 + .long 3694782758 + .long 1071564553 + .long 1697348856 + .long 3219592519 + .long 1697348856 + .long 3219592519 + .long 1697348856 + .long 3219592519 + .long 1697348856 + .long 3219592519 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1063256064 + .long 0 + .long 1063256064 + .long 0 + .long 1063256064 + .long 0 + .long 1063256064 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1073156096 + .long 0 + .long 1073156096 + .long 0 + .long 1073156096 + .long 0 + .long 1073156096 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .long 0 + .long 1072693248 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .long 0 + .long 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 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_dlog2_data_internal,@object + .size __svml_dlog2_data_internal,13696 + .align 64 + +__dlog2_la__Q3: + .long 3213221364 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3694789629 + .long 1071564553 + .long 0 + .long 1073157447 + .type __dlog2_la__Q3,@object + .size __dlog2_la__Q3,32 + .space 32, 0x00 + .align 64 + +__dlog2_la__Q2: + .long 3213221358 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3695167823 + .long 1071564553 + .long 1697791998 + .long 3218543943 + .long 0 + .long 1073157447 + .type __dlog2_la__Q2,@object + .size __dlog2_la__Q2,40 + .space 24, 0x00 + .align 64 + +__dlog2_la__Q1: + .long 3213221370 + .long 1050233568 + .long 3213207734 + .long 3196668640 + .long 3694789628 + .long 1071564553 + .long 1697350743 + .long 3218543943 + .long 1357908666 + .long 1070757740 + .long 3685007067 + .long 3217999625 + .long 96832070 + .long 1070227830 + .long 1140452344 + .long 3217495379 + .long 2606274745 + .long 1069844296 + .long 1933654871 + .long 3217172449 + .long 0 + .long 1073157447 + .long 0 + .long 3219592519 + .type __dlog2_la__Q1,@object + .size __dlog2_la__Q1,96 + .space 32, 0x00 + .align 64 + +__dlog2_la__TWO_32P: + .long 1048576 + .long 1106247680 + .type __dlog2_la__TWO_32P,@object + .size __dlog2_la__TWO_32P,8 + .space 56, 0x00 + .align 64 + +__dlog2_la__TWO_32: + .long 0 + .long 1106247680 + .type __dlog2_la__TWO_32,@object + .size __dlog2_la__TWO_32,8 + .space 56, 0x00 + .align 64 + +__dlog2_la__TWO_55: + .long 0 + .long 1130364928 + .type __dlog2_la__TWO_55,@object + .size __dlog2_la__TWO_55,8 + .space 56, 0x00 + .align 64 + +__dlog2_la___libm_rcp_table_256: + .long 0x3f7f8000 + .long 0x3f7e8000 + .long 0x3f7d8000 + .long 0x3f7c8000 + .long 0x3f7ba000 + .long 0x3f7aa000 + .long 0x3f79a000 + .long 0x3f78c000 + .long 0x3f77c000 + .long 0x3f76e000 + .long 0x3f75e000 + .long 0x3f750000 + .long 0x3f742000 + .long 0x3f732000 + .long 0x3f724000 + .long 0x3f716000 + .long 0x3f708000 + .long 0x3f6fa000 + .long 0x3f6ec000 + .long 0x3f6de000 + .long 0x3f6d0000 + .long 0x3f6c2000 + .long 0x3f6b6000 + .long 0x3f6a8000 + .long 0x3f69a000 + .long 0x3f68c000 + .long 0x3f680000 + .long 0x3f672000 + .long 0x3f666000 + .long 0x3f658000 + .long 0x3f64c000 + .long 0x3f640000 + .long 0x3f632000 + .long 0x3f626000 + .long 0x3f61a000 + .long 0x3f60e000 + .long 0x3f600000 + .long 0x3f5f4000 + .long 0x3f5e8000 + .long 0x3f5dc000 + .long 0x3f5d0000 + .long 0x3f5c4000 + .long 0x3f5b8000 + .long 0x3f5ae000 + .long 0x3f5a2000 + .long 0x3f596000 + .long 0x3f58a000 + .long 0x3f57e000 + .long 0x3f574000 + .long 0x3f568000 + .long 0x3f55e000 + .long 0x3f552000 + .long 0x3f546000 + .long 0x3f53c000 + .long 0x3f532000 + .long 0x3f526000 + .long 0x3f51c000 + .long 0x3f510000 + .long 0x3f506000 + .long 0x3f4fc000 + .long 0x3f4f2000 + .long 0x3f4e6000 + .long 0x3f4dc000 + .long 0x3f4d2000 + .long 0x3f4c8000 + .long 0x3f4be000 + .long 0x3f4b4000 + .long 0x3f4aa000 + .long 0x3f4a0000 + .long 0x3f496000 + .long 0x3f48c000 + .long 0x3f482000 + .long 0x3f478000 + .long 0x3f46e000 + .long 0x3f464000 + .long 0x3f45c000 + .long 0x3f452000 + .long 0x3f448000 + .long 0x3f43e000 + .long 0x3f436000 + .long 0x3f42c000 + .long 0x3f422000 + .long 0x3f41a000 + .long 0x3f410000 + .long 0x3f408000 + .long 0x3f3fe000 + .long 0x3f3f6000 + .long 0x3f3ec000 + .long 0x3f3e4000 + .long 0x3f3da000 + .long 0x3f3d2000 + .long 0x3f3ca000 + .long 0x3f3c0000 + .long 0x3f3b8000 + .long 0x3f3b0000 + .long 0x3f3a8000 + .long 0x3f39e000 + .long 0x3f396000 + .long 0x3f38e000 + .long 0x3f386000 + .long 0x3f37e000 + .long 0x3f376000 + .long 0x3f36c000 + .long 0x3f364000 + .long 0x3f35c000 + .long 0x3f354000 + .long 0x3f34c000 + .long 0x3f344000 + .long 0x3f33c000 + .long 0x3f334000 + .long 0x3f32e000 + .long 0x3f326000 + .long 0x3f31e000 + .long 0x3f316000 + .long 0x3f30e000 + .long 0x3f306000 + .long 0x3f2fe000 + .long 0x3f2f8000 + .long 0x3f2f0000 + .long 0x3f2e8000 + .long 0x3f2e2000 + .long 0x3f2da000 + .long 0x3f2d2000 + .long 0x3f2cc000 + .long 0x3f2c4000 + .long 0x3f2bc000 + .long 0x3f2b6000 + .long 0x3f2ae000 + .long 0x3f2a8000 + .long 0x3f2a0000 + .long 0x3f29a000 + .long 0x3f292000 + .long 0x3f28c000 + .long 0x3f284000 + .long 0x3f27e000 + .long 0x3f276000 + .long 0x3f270000 + .long 0x3f268000 + .long 0x3f262000 + .long 0x3f25c000 + .long 0x3f254000 + .long 0x3f24e000 + .long 0x3f248000 + .long 0x3f240000 + .long 0x3f23a000 + .long 0x3f234000 + .long 0x3f22e000 + .long 0x3f226000 + .long 0x3f220000 + .long 0x3f21a000 + .long 0x3f214000 + .long 0x3f20e000 + .long 0x3f206000 + .long 0x3f200000 + .long 0x3f1fa000 + .long 0x3f1f4000 + .long 0x3f1ee000 + .long 0x3f1e8000 + .long 0x3f1e2000 + .long 0x3f1dc000 + .long 0x3f1d6000 + .long 0x3f1d0000 + .long 0x3f1ca000 + .long 0x3f1c4000 + .long 0x3f1be000 + .long 0x3f1b8000 + .long 0x3f1b2000 + .long 0x3f1ac000 + .long 0x3f1a6000 + .long 0x3f1a0000 + .long 0x3f19a000 + .long 0x3f194000 + .long 0x3f190000 + .long 0x3f18a000 + .long 0x3f184000 + .long 0x3f17e000 + .long 0x3f178000 + .long 0x3f172000 + .long 0x3f16e000 + .long 0x3f168000 + .long 0x3f162000 + .long 0x3f15c000 + .long 0x3f158000 + .long 0x3f152000 + .long 0x3f14c000 + .long 0x3f148000 + .long 0x3f142000 + .long 0x3f13c000 + .long 0x3f138000 + .long 0x3f132000 + .long 0x3f12c000 + .long 0x3f128000 + .long 0x3f122000 + .long 0x3f11c000 + .long 0x3f118000 + .long 0x3f112000 + .long 0x3f10e000 + .long 0x3f108000 + .long 0x3f104000 + .long 0x3f0fe000 + .long 0x3f0f8000 + .long 0x3f0f4000 + .long 0x3f0ee000 + .long 0x3f0ea000 + .long 0x3f0e6000 + .long 0x3f0e0000 + .long 0x3f0dc000 + .long 0x3f0d6000 + .long 0x3f0d2000 + .long 0x3f0cc000 + .long 0x3f0c8000 + .long 0x3f0c2000 + .long 0x3f0be000 + .long 0x3f0ba000 + .long 0x3f0b4000 + .long 0x3f0b0000 + .long 0x3f0ac000 + .long 0x3f0a6000 + .long 0x3f0a2000 + .long 0x3f09e000 + .long 0x3f098000 + .long 0x3f094000 + .long 0x3f090000 + .long 0x3f08a000 + .long 0x3f086000 + .long 0x3f082000 + .long 0x3f07e000 + .long 0x3f078000 + .long 0x3f074000 + .long 0x3f070000 + .long 0x3f06c000 + .long 0x3f066000 + .long 0x3f062000 + .long 0x3f05e000 + .long 0x3f05a000 + .long 0x3f056000 + .long 0x3f052000 + .long 0x3f04c000 + .long 0x3f048000 + .long 0x3f044000 + .long 0x3f040000 + .long 0x3f03c000 + .long 0x3f038000 + .long 0x3f034000 + .long 0x3f030000 + .long 0x3f02a000 + .long 0x3f026000 + .long 0x3f022000 + .long 0x3f01e000 + .long 0x3f01a000 + .long 0x3f016000 + .long 0x3f012000 + .long 0x3f00e000 + .long 0x3f00a000 + .long 0x3f006000 + .long 0x3f002000 + .type __dlog2_la___libm_rcp_table_256,@object + .size __dlog2_la___libm_rcp_table_256,1024 + .align 64 + +__dlog2_la___libm_log2_table_256: + .long 0xfb44c3b7,0x3e1485cb + .long 0x00000000,0x3f671b0e + .long 0x06028ac0,0x3e31d5d9 + .long 0x00000000,0x3f815cfe + .long 0xb8d7240b,0x3df8b9cb + .long 0x00000000,0x3f8cfee7 + .long 0x0d179106,0x3e38864a + .long 0x00000000,0x3f94564a + .long 0xecba1593,0x3e459c6a + .long 0x00000000,0x3f997723 + .long 0x94120c14,0x3e48d36a + .long 0x00000000,0x3f9f5923 + .long 0xd2571490,0x3e5410ba + .long 0x00000000,0x3fa2a094 + .long 0x1dc036a2,0x3e2776b0 + .long 0x00000000,0x3fa53894 + .long 0x78efe2b1,0x3e537229 + .long 0x00000000,0x3fa8324c + .long 0xfd29dc75,0x3e59c0fa + .long 0x00000000,0x3faacf54 + .long 0x046734f7,0x3e4636b7 + .long 0x00000000,0x3fadced9 + .long 0xd3b410b8,0x3e6f7950 + .long 0x00000000,0x3fb0387e + .long 0x00f2200a,0x3e19d1e7 + .long 0x00000000,0x3fb18ac6 + .long 0x8661ba82,0x3e4f09a9 + .long 0x00000000,0x3fb30edd + .long 0x9367107c,0x3e564d91 + .long 0x00000000,0x3fb463c1 + .long 0x0e4a4ce8,0x3e4e1fd1 + .long 0x00000000,0x3fb5b9e1 + .long 0x3cdb6374,0x3e492cf0 + .long 0x00000000,0x3fb7113f + .long 0x069c4f7f,0x3e61a364 + .long 0x00000000,0x3fb869dd + .long 0x427b631b,0x3e6493a6 + .long 0x00000000,0x3fb9c3be + .long 0xe02b3e8b,0x3e6af2c2 + .long 0x00000000,0x3fbb1ee4 + .long 0x389f4365,0x3e616e1e + .long 0x00000000,0x3fbc7b52 + .long 0x6a31fd96,0x3e4633b7 + .long 0x00000000,0x3fbdd90a + .long 0x0508664d,0x3e62ed84 + .long 0x00000000,0x3fbf05d4 + .long 0xaca1905c,0x3e775dcd + .long 0x00000000,0x3fc032fb + .long 0x094fbeeb,0x3e753e65 + .long 0x00000000,0x3fc0e3b5 + .long 0x96aa4b17,0x3e671f44 + .long 0x00000000,0x3fc19519 + .long 0x92da5a47,0x3e785566 + .long 0x00000000,0x3fc22dad + .long 0xbeb7d722,0x3e518efa + .long 0x00000000,0x3fc2e050 + .long 0xab57551c,0x3e738564 + .long 0x00000000,0x3fc379f7 + .long 0x54a914e3,0x3e55d0da + .long 0x00000000,0x3fc42ddd + .long 0xfe974017,0x3e73cd00 + .long 0x00000000,0x3fc4c89b + .long 0x59064390,0x3e54ffd6 + .long 0x00000000,0x3fc563dc + .long 0x633ab50f,0x3e67d75e + .long 0x00000000,0x3fc619a2 + .long 0xc8877e8a,0x3e77e6ce + .long 0x00000000,0x3fc6b5ff + .long 0x1ab7837f,0x3e7ecc1f + .long 0x00000000,0x3fc752e1 + .long 0xf9d5827a,0x3e7cea7c + .long 0x00000000,0x3fc7f049 + .long 0x64ccd537,0x3e357f7a + .long 0x00000000,0x3fc8a898 + .long 0xf7c9b05b,0x3e7994ca + .long 0x00000000,0x3fc94724 + .long 0xa2f56536,0x3e524b8f + .long 0x00000000,0x3fc9e63a + .long 0x5edaab42,0x3e7fd640 + .long 0x00000000,0x3fca85d8 + .long 0xd163379a,0x3e625f54 + .long 0x00000000,0x3fcb2602 + .long 0x936acd51,0x3e7ebdc3 + .long 0x00000000,0x3fcbc6b6 + .long 0xcfbc0aa0,0x3e7eee14 + .long 0x00000000,0x3fcc67f7 + .long 0xf73bcdad,0x3e764469 + .long 0x00000000,0x3fcceec4 + .long 0x60971b86,0x3e6eb44e + .long 0x00000000,0x3fcd9109 + .long 0xcd2052a5,0x3e65fcf4 + .long 0x00000000,0x3fce33dd + .long 0xc402867b,0x3e61af1e + .long 0x00000000,0x3fced741 + .long 0xa0c956e4,0x3e61bfbd + .long 0x00000000,0x3fcf7b36 + .long 0x831e77ff,0x3e85287b + .long 0x00000000,0x3fd00223 + .long 0xaddfdee2,0x3e7d2fc3 + .long 0x00000000,0x3fd054a4 + .long 0x342052c1,0x3e83724b + .long 0x00000000,0x3fd0999d + .long 0x602bcd34,0x3e7b4ec9 + .long 0x00000000,0x3fd0eca6 + .long 0x3aa20ead,0x3e6742da + .long 0x00000000,0x3fd13ffa + .long 0x9ecdadf4,0x3e713e82 + .long 0x00000000,0x3fd185a4 + .long 0xfef3031b,0x3e52f27e + .long 0x00000000,0x3fd1cb83 + .long 0x79e4af8a,0x3e710739 + .long 0x00000000,0x3fd21fa1 + .long 0xe59ad84a,0x3e637301 + .long 0x00000000,0x3fd265f5 + .long 0x3d7dfd9b,0x3e88697c + .long 0x00000000,0x3fd2baa0 + .long 0x738117b0,0x3e717788 + .long 0x00000000,0x3fd3016b + .long 0xd3c26a97,0x3e6c5514 + .long 0x00000000,0x3fd3486c + .long 0x4c4ff246,0x3e8df550 + .long 0x00000000,0x3fd38fa3 + .long 0x40340fa6,0x3e88102d + .long 0x00000000,0x3fd3e562 + .long 0x4592f4c3,0x3e5f53b6 + .long 0x00000000,0x3fd42d14 + .long 0x8b149a00,0x3e750fc8 + .long 0x00000000,0x3fd474fd + .long 0xa8f50e5f,0x3e86d01c + .long 0x00000000,0x3fd4bd1e + .long 0x7a22a88a,0x3e83c469 + .long 0x00000000,0x3fd50578 + .long 0xdc18b6d2,0x3e79000e + .long 0x00000000,0x3fd54e0b + .long 0x7c00250b,0x3e7870f0 + .long 0x00000000,0x3fd596d7 + .long 0xc1c885ae,0x3e8e3dd5 + .long 0x00000000,0x3fd5dfdc + .long 0xa6ecc47e,0x3e7bf64c + .long 0x00000000,0x3fd6291c + .long 0x0bc16c18,0x3e6bdaca + .long 0x00000000,0x3fd67296 + .long 0x1f925729,0x3e84d25c + .long 0x00000000,0x3fd6bc4a + .long 0xf23978de,0x3e5a5fb4 + .long 0x00000000,0x3fd7063a + .long 0xe2ac7f60,0x3e8e3da0 + .long 0x00000000,0x3fd75064 + .long 0x71f51a7b,0x3e819e20 + .long 0x00000000,0x3fd79acb + .long 0x5b924234,0x3e5e43ae + .long 0x00000000,0x3fd7d67c + .long 0xe9aedf37,0x3e701a2b + .long 0x00000000,0x3fd8214f + .long 0xeddd33ea,0x3e6b6f51 + .long 0x00000000,0x3fd86c5f + .long 0xe732b3c4,0x3e79375f + .long 0x00000000,0x3fd8b7ac + .long 0xe47cb9df,0x3e7e831b + .long 0x00000000,0x3fd8f416 + .long 0xe392d3c8,0x3e8abc37 + .long 0x00000000,0x3fd93fd2 + .long 0x28b35c77,0x3e80852d + .long 0x00000000,0x3fd98bcd + .long 0xd29cea36,0x3e69f374 + .long 0x00000000,0x3fd9c8c3 + .long 0xb3d7b0e6,0x3e542981 + .long 0x00000000,0x3fda152f + .long 0x1fe6d5ac,0x3e8b2bfb + .long 0x00000000,0x3fda527f + .long 0xf32e5dda,0x3e6f6f5c + .long 0x00000000,0x3fda9f5e + .long 0xd34d0d30,0x3e65abaa + .long 0x00000000,0x3fdadd0b + .long 0xe0ac9602,0x3e7bd47f + .long 0x00000000,0x3fdb2a5d + .long 0x7c5c784b,0x3e833601 + .long 0x00000000,0x3fdb6867 + .long 0xd7b0821f,0x3e5b887c + .long 0x00000000,0x3fdbb62f + .long 0xcd0a8f6a,0x3e83eccc + .long 0x00000000,0x3fdbf497 + .long 0x7500a4e8,0x3e7ba0e6 + .long 0x00000000,0x3fdc332a + .long 0xfc8712bb,0x3e885a8b + .long 0x00000000,0x3fdc819d + .long 0xf7a3a78f,0x3e81c336 + .long 0x00000000,0x3fdcc090 + .long 0x4ad8a38b,0x3e7846b4 + .long 0x00000000,0x3fdcffae + .long 0xfcfc3a99,0x3e7db50f + .long 0x00000000,0x3fdd3ef7 + .long 0x433cccd2,0x3e238809 + .long 0x00000000,0x3fdd8e50 + .long 0x6828fa82,0x3e721b2e + .long 0x00000000,0x3fddcdfb + .long 0xfc7c49c1,0x3e82848b + .long 0x00000000,0x3fde0dd2 + .long 0x1fce4d49,0x3e615144 + .long 0x00000000,0x3fde4dd6 + .long 0x77e2e8fd,0x3e68b88a + .long 0x00000000,0x3fde8e06 + .long 0x22a961b0,0x3e8fd353 + .long 0x00000000,0x3fdece62 + .long 0x266f2e1f,0x3e72854e + .long 0x00000000,0x3fdf1f16 + .long 0xc69211fe,0x3e8520c7 + .long 0x00000000,0x3fdf5fd8 + .long 0xaba878d5,0x3e826fcf + .long 0x00000000,0x3fdfa0c8 + .long 0xcd5b35b1,0x3e726ed8 + .long 0x00000000,0x3fdfe1e6 + .long 0x678a4f1c,0x3e49054d + .long 0x00000000,0x3fe01199 + .long 0x3bc19f18,0x3e5d23cb + .long 0x00000000,0x3fe03256 + .long 0x12772acb,0x3e87af35 + .long 0x00000000,0x3fe0532a + .long 0x2849c88a,0x3e67f5fc + .long 0x00000000,0x3fe07416 + .long 0x0e574fa1,0x3e84fce2 + .long 0x00000000,0x3fe08cd6 + .long 0x0ec2b5fa,0x3e857044 + .long 0x00000000,0x3fe0adeb + .long 0xd031f353,0x3e6d5d1d + .long 0x00000000,0x3fe0cf18 + .long 0xdae75c4d,0x3e99a159 + .long 0x00000000,0x3fe0f05c + .long 0x1553afb9,0x3e90eaf1 + .long 0x00000000,0x3fe111b9 + .long 0xdcc5c3c7,0x3e8bc6f3 + .long 0x00000000,0x3fe1332e + .long 0x1109e597,0x3e94ef84 + .long 0x00000000,0x3fe154bb + .long 0xd82adea4,0x3e937f40 + .long 0x00000000,0x3fe16df5 + .long 0x78336a2f,0x3e96dc5a + .long 0x00000000,0x3fe18fad + .long 0x84c2c804,0x3e90935b + .long 0x00000000,0x3fe1b17e + .long 0x04fd30aa,0x3e8a837a + .long 0x00000000,0x3fe1caeb + .long 0xd924b0ac,0x3e99061d + .long 0x00000000,0x3fe1ece7 + .long 0xef9b9d01,0x3e7ed700 + .long 0x00000000,0x3fe20efd + .long 0x202c81ec,0x3e9c6ebb + .long 0x00000000,0x3fe2289d + .long 0xfc0d7d76,0x3e936d4d + .long 0x00000000,0x3fe24adf + .long 0x9f8756ba,0x3e9a35d7 + .long 0x00000000,0x3fe26d3a + .long 0xe7c79d83,0x3e584ee3 + .long 0x00000000,0x3fe28710 + .long 0x942065a0,0x3e7d9e0d + .long 0x00000000,0x3fe2a998 + .long 0x2175afbf,0x3e872108 + .long 0x00000000,0x3fe2c38f + .long 0xfaf6283c,0x3e9f5809 + .long 0x00000000,0x3fe2e644 + .long 0x411d0507,0x3e871209 + .long 0x00000000,0x3fe3005e + .long 0x370c24bf,0x3e9c3b11 + .long 0x00000000,0x3fe32341 + .long 0x8044bb5a,0x3e9bce8e + .long 0x00000000,0x3fe33d7d + .long 0x698ea854,0x3e98aca0 + .long 0x00000000,0x3fe3608f + .long 0xd4d873bb,0x3e972a8e + .long 0x00000000,0x3fe37aee + .long 0x615e8182,0x3e8f669b + .long 0x00000000,0x3fe39e2f + .long 0xdda5b49a,0x3e98d1f4 + .long 0x00000000,0x3fe3b8b1 + .long 0xe72383f7,0x3e9cc279 + .long 0x00000000,0x3fe3dc21 + .long 0x497497f1,0x3e9c6774 + .long 0x00000000,0x3fe3f6c7 + .long 0x801bd0e6,0x3e82c7f6 + .long 0x00000000,0x3fe4117d + .long 0xd0ee28b4,0x3e9dfdd6 + .long 0x00000000,0x3fe43531 + .long 0xb70d3761,0x3e92d3a2 + .long 0x00000000,0x3fe4500b + .long 0xe7d6bcb2,0x3e9c8343 + .long 0x00000000,0x3fe46af4 + .long 0x90d43957,0x3e693179 + .long 0x00000000,0x3fe48eef + .long 0xf12570df,0x3e799eab + .long 0x00000000,0x3fe4a9fd + .long 0x1b88755d,0x3e78c5f8 + .long 0x00000000,0x3fe4c51b + .long 0xdf99a22c,0x3e7369be + .long 0x00000000,0x3fe4e049 + .long 0x6ed50f62,0x3e88fd93 + .long 0x00000000,0x3fe5049f + .long 0x978605ff,0x3e9c6042 + .long 0x00000000,0x3fe51ff2 + .long 0xe6c85f4c,0x3e930ae6 + .long 0x00000000,0x3fe53b56 + .long 0xc3275ba6,0x3e92e7b6 + .long 0x00000000,0x3fe556ca + .long 0x91597938,0x3e9e6401 + .long 0x00000000,0x3fe5724e + .long 0x448ebb62,0x3e3d2dee + .long 0x00000000,0x3fe59719 + .long 0x47501b6d,0x3e9b432e + .long 0x00000000,0x3fe5b2c3 + .long 0x571fa7cd,0x3e83cf9b + .long 0x00000000,0x3fe5ce7f + .long 0x7359819d,0x3e8dc615 + .long 0x00000000,0x3fe5ea4b + .long 0xc78a85ed,0x3e8973c3 + .long 0x00000000,0x3fe60628 + .long 0xc15a9f3d,0x3e77d788 + .long 0x00000000,0x3fe62216 + .long 0x51952736,0x3e9d2538 + .long 0x00000000,0x3fe63e14 + .long 0xde792c07,0x3e94dab9 + .long 0x00000000,0x3fe65a24 + .long 0x5bfa4318,0x3e8f5be1 + .long 0x00000000,0x3fe67645 + .long 0x55090ec8,0x3e903b26 + .long 0x00000000,0x3fe69277 + .long 0xc78b6175,0x3e99236f + .long 0x00000000,0x3fe6aeba + .long 0x3a80db6a,0x3e8a1972 + .long 0x00000000,0x3fe6cb0f + .long 0xf558aa96,0x3e8d43a2 + .long 0x00000000,0x3fe6e775 + .long 0xd9a82f2e,0x3e424ee3 + .long 0x00000000,0x3fe703ed + .long 0x583878f6,0x3e764d8e + .long 0x00000000,0x3fe72076 + .long 0xc1150a3e,0x3e379604 + .long 0x00000000,0x3fe73d11 + .long 0xed85584b,0x3e93b229 + .long 0x00000000,0x3fe759bd + .long 0x451a7b48,0x3e62967a + .long 0x00000000,0x3fe7767c + .long 0xc044e72d,0x3e8e12d7 + .long 0x00000000,0x3fe7934c + .long 0xfdfb6949,0x3e9ca45d + .long 0x00000000,0x3fe7b02e + .long 0xff690fce,0x3e9244fc + .long 0x00000000,0x3fe7c37a + .long 0x81487a2c,0x3e7e9cea + .long 0x00000000,0x3fe7e07b + .long 0xd0ad2d9a,0x3e760da0 + .long 0x00000000,0x3fe7fd8e + .long 0x096f45d9,0x3e8d7703 + .long 0x00000000,0x3fe81ab3 + .long 0x1b17115b,0x3e78dbee + .long 0x00000000,0x3fe837eb + .long 0x7c252ee0,0x3e8dc5a4 + .long 0x00000000,0x3fe85535 + .long 0x42d5123f,0x3e950116 + .long 0x00000000,0x3fe868c6 + .long 0xf11e41be,0x3e4c4eb7 + .long 0x00000000,0x3fe88630 + .long 0xdb2890b4,0x3e7773b8 + .long 0x00000000,0x3fe8a3ac + .long 0x7ffb4479,0x3e7bc8e7 + .long 0x00000000,0x3fe8c13b + .long 0x237693b3,0x3e8c388f + .long 0x00000000,0x3fe8d4fa + .long 0x45fcf1a0,0x3e731cd4 + .long 0x00000000,0x3fe8f2a9 + .long 0xe4895b91,0x3e9fae07 + .long 0x00000000,0x3fe9106a + .long 0x42d2824e,0x3e7d140d + .long 0x00000000,0x3fe9244c + .long 0x39900f67,0x3e75c3c8 + .long 0x00000000,0x3fe9422e + .long 0xa314252b,0x3e902422 + .long 0x00000000,0x3fe96023 + .long 0xf2a6b8ef,0x3e7b9be8 + .long 0x00000000,0x3fe97427 + .long 0x1476f5e9,0x3e66b188 + .long 0x00000000,0x3fe9923d + .long 0xdde10a6f,0x3e93c377 + .long 0x00000000,0x3fe9b066 + .long 0x4944a32c,0x3e817cad + .long 0x00000000,0x3fe9c48d + .long 0xc738e7ef,0x3e9927f2 + .long 0x00000000,0x3fe9e2d7 + .long 0xd25cfd94,0x3e7ccc41 + .long 0x00000000,0x3fea0136 + .long 0x2210e81b,0x3e8382fa + .long 0x00000000,0x3fea1580 + .long 0x1e690ce2,0x3e7752a7 + .long 0x00000000,0x3fea3400 + .long 0x122315d2,0x3e94cfee + .long 0x00000000,0x3fea4860 + .long 0xce98333b,0x3e80536e + .long 0x00000000,0x3fea6702 + .long 0xc30f00e9,0x3e838b7e + .long 0x00000000,0x3fea7b79 + .long 0x05b0c779,0x3e9dc380 + .long 0x00000000,0x3fea9a3c + .long 0xdd6dd3fe,0x3e6be168 + .long 0x00000000,0x3feab915 + .long 0x26e0d276,0x3e966757 + .long 0x00000000,0x3feacdb0 + .long 0x0aad615c,0x3e880252 + .long 0x00000000,0x3feaecab + .long 0x7927096a,0x3e607c31 + .long 0x00000000,0x3feb015e + .long 0x53b3d90e,0x3e596513 + .long 0x00000000,0x3feb161a + .long 0x8f2f0570,0x3e90ec3a + .long 0x00000000,0x3feb3545 + .long 0x81193954,0x3e9cb640 + .long 0x00000000,0x3feb4a18 + .long 0x311e7236,0x3e936479 + .long 0x00000000,0x3feb6967 + .long 0x3a42a413,0x3e9210e8 + .long 0x00000000,0x3feb7e52 + .long 0x4a0daeb2,0x3e9a1717 + .long 0x00000000,0x3feb9dc4 + .long 0xce900653,0x3e925bb7 + .long 0x00000000,0x3febb2c7 + .long 0xb5087588,0x3e95dbb8 + .long 0x00000000,0x3febd25d + .long 0x4a41204c,0x3e8d0aa9 + .long 0x00000000,0x3febe778 + .long 0x69a0d774,0x3e9c772f + .long 0x00000000,0x3febfc9c + .long 0x79d0a9a5,0x3e97b6a0 + .long 0x00000000,0x3fec1c65 + .long 0xd26f1a12,0x3e8f7402 + .long 0x00000000,0x3fec31a2 + .long 0x1243bc84,0x3e4db2f1 + .long 0x00000000,0x3fec46e9 + .long 0x477e1755,0x3e80dcc2 + .long 0x00000000,0x3fec66e5 + .long 0xc2f904c1,0x3e8b1e31 + .long 0x00000000,0x3fec7c44 + .long 0x1785b0c4,0x3e8fb619 + .long 0x00000000,0x3fec91ad + .long 0xedb052ef,0x3e98832d + .long 0x00000000,0x3fecb1dd + .long 0x9e373618,0x3e98c822 + .long 0x00000000,0x3fecc75f + .long 0x32954637,0x3e9a46e7 + .long 0x00000000,0x3fecdceb + .long 0xf0e6b2a9,0x3e996305 + .long 0x00000000,0x3fecfd50 + .long 0x1a6614ee,0x3e68c160 + .long 0x00000000,0x3fed12f6 + .long 0x09e33b28,0x3e9229c4 + .long 0x00000000,0x3fed28a5 + .long 0xe53b994c,0x3e7f281b + .long 0x00000000,0x3fed3e5f + .long 0x1124ac35,0x3e9f27f3 + .long 0x00000000,0x3fed5f08 + .long 0x3d2fdc03,0x3e84e779 + .long 0x00000000,0x3fed74dc + .long 0x1e93fd97,0x3e416c07 + .long 0x00000000,0x3fed8aba + .long 0x91b415ef,0x3e654669 + .long 0x00000000,0x3feda0a2 + .long 0x6495f594,0x3e9712d4 + .long 0x00000000,0x3fedc191 + .long 0x40171789,0x3e9ca7b2 + .long 0x00000000,0x3fedd793 + .long 0xe8fc4323,0x3e929afa + .long 0x00000000,0x3fededa0 + .long 0xeb03bd09,0x3e9a2e96 + .long 0x00000000,0x3fee03b7 + .long 0xca370ea2,0x3e94a63d + .long 0x00000000,0x3fee19d9 + .long 0xe30512ec,0x3e6a3bcb + .long 0x00000000,0x3fee3006 + .long 0x411c95ce,0x3e99d3ed + .long 0x00000000,0x3fee515c + .long 0x35cfaf8e,0x3e3e5b57 + .long 0x00000000,0x3fee67a4 + .long 0x5669df6a,0x3e9fca71 + .long 0x00000000,0x3fee7df5 + .long 0x04f19d94,0x3e9914e2 + .long 0x00000000,0x3fee9452 + .long 0xcaa19134,0x3e8b511c + .long 0x00000000,0x3feeaaba + .long 0x4bb3bfb1,0x3e9ed72f + .long 0x00000000,0x3feec12c + .long 0x3c29d75e,0x3e8be8d6 + .long 0x00000000,0x3feed7aa + .long 0x97da24fd,0x3e9c55d9 + .long 0x00000000,0x3feeee32 + .long 0x983c68ea,0x3e7ddfb1 + .long 0x00000000,0x3fef1014 + .long 0xf4425883,0x3e83ce66 + .long 0x00000000,0x3fef26b8 + .long 0xf7857f23,0x3e9055c3 + .long 0x00000000,0x3fef3d67 + .long 0x2805b525,0x3e9c2223 + .long 0x00000000,0x3fef5421 + .long 0x0c347fcf,0x3e8d59ba + .long 0x00000000,0x3fef6ae7 + .long 0x7c901c44,0x3e82b110 + .long 0x00000000,0x3fef81b8 + .long 0x74d1b482,0x3e8b1394 + .long 0x00000000,0x3fef9894 + .long 0x36fb9eb2,0x3e9ca75b + .long 0x00000000,0x3fefaf7b + .long 0x629b1b7e,0x3e981a0a + .long 0x00000000,0x3fefc66e + .long 0x7b8c1116,0x3e54cc20 + .long 0x00000000,0x3fefdd6d + .long 0xc0babe05,0x3e99ac8b + .long 0x00000000,0x3feff476 + .type __dlog2_la___libm_log2_table_256,@object + .size __dlog2_la___libm_log2_table_256,4096 + .space 512, 0x00 + .align 64 + +__dlog2_la__P: + .long 3213235158 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3694740707 + .long 1071564553 + .long 1697260025 + .long 3218543943 + .long 2542794428 + .long 1070757746 + .long 2165113687 + .long 3217999640 + .long 0 + .long 1073157447 + .type __dlog2_la__P,@object + .size __dlog2_la__P,56 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core-avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core-avx2.S new file mode 100644 index 0000000000..804de5fe0c --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core-avx2.S @@ -0,0 +1,20 @@ +/* AVX2 version of vectorized log2, 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_log2 _ZGVeN8v_log2_avx2_wrapper +#include "../svml_d_log28_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core.c b/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core.c new file mode 100644 index 0000000000..bd55abecc7 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core.c @@ -0,0 +1,27 @@ +/* Multiple versions of vectorized log2, 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_log2 +#include "ifunc-mathvec-avx512-skx.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVeN8v_log2, __GI__ZGVeN8v_log2, __redirect__ZGVeN8v_log2) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core_avx512.S new file mode 100644 index 0000000000..c92d0476f6 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_d_log28_core_avx512.S @@ -0,0 +1,1661 @@ +/* Function log 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 + * log2(x) = k - log2(Rcp) + poly_approximation(R) + * log2(Rcp) is tabulated + * + * + */ + +#include + + .text +ENTRY(_ZGVeN8v_log2_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_dlog2_data_internal_avx512(%rip), %zmm2 + vmovups 512+__svml_dlog2_data_internal_avx512(%rip), %zmm12 + vmovups 640+__svml_dlog2_data_internal_avx512(%rip), %zmm13 + +/* Start polynomial evaluation */ + vmovups 256+__svml_dlog2_data_internal_avx512(%rip), %zmm10 + vmovups 320+__svml_dlog2_data_internal_avx512(%rip), %zmm0 + vmovups 384+__svml_dlog2_data_internal_avx512(%rip), %zmm11 + vmovups 448+__svml_dlog2_data_internal_avx512(%rip), %zmm14 + +/* Prepare exponent correction: DblRcp<0.75? */ + vmovups 192+__svml_dlog2_data_internal_avx512(%rip), %zmm1 + +/* Table lookup */ + vmovups __svml_dlog2_data_internal_avx512(%rip), %zmm4 + +/* GetExp(x) */ + vgetexppd {sae}, %zmm7, %zmm5 + +/* 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, %zmm3 + vmovups 576+__svml_dlog2_data_internal_avx512(%rip), %zmm8 + kmovw %k0, %edx + +/* Reduced argument: R = DblRcp*Mantissa - 1 */ + vfmsub213pd {rn-sae}, %zmm2, %zmm3, %zmm6 + vcmppd $17, {sae}, %zmm1, %zmm3, %k1 + vfmadd231pd {rn-sae}, %zmm6, %zmm12, %zmm8 + vmovups 704+__svml_dlog2_data_internal_avx512(%rip), %zmm12 + vfmadd231pd {rn-sae}, %zmm6, %zmm10, %zmm0 + vfmadd231pd {rn-sae}, %zmm6, %zmm11, %zmm14 + vmovups 768+__svml_dlog2_data_internal_avx512(%rip), %zmm1 + +/* R^2 */ + vmulpd {rn-sae}, %zmm6, %zmm6, %zmm15 + vfmadd231pd {rn-sae}, %zmm6, %zmm13, %zmm12 + +/* Prepare table index */ + vpsrlq $48, %zmm3, %zmm9 + +/* add 1 to Expon if DblRcp<0.75 */ + vaddpd {rn-sae}, %zmm2, %zmm5, %zmm5{%k1} + vmulpd {rn-sae}, %zmm15, %zmm15, %zmm13 + vfmadd213pd {rn-sae}, %zmm14, %zmm15, %zmm0 + vfmadd213pd {rn-sae}, %zmm12, %zmm15, %zmm8 + vpermt2pd 64+__svml_dlog2_data_internal_avx512(%rip), %zmm9, %zmm4 + +/* polynomial */ + vfmadd213pd {rn-sae}, %zmm8, %zmm13, %zmm0 + vfmadd213pd {rn-sae}, %zmm1, %zmm6, %zmm0 + vfmadd213pd {rn-sae}, %zmm4, %zmm0, %zmm6 + vaddpd {rn-sae}, %zmm6, %zmm5, %zmm0 + testl %edx, %edx + jne .LBL_1_3 + +.LBL_1_2: + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +.LBL_1_3: + vmovups %zmm7, 64(%rsp) + vmovups %zmm0, 128(%rsp) + je .LBL_1_2 + 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 + +.LBL_1_7: + btl %r12d, %r13d + jc .LBL_1_10 + +.LBL_1_8: + incl %r12d + cmpl $8, %r12d + jl .LBL_1_7 + 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 .LBL_1_2 + .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 + +.LBL_1_10: + lea 64(%rsp,%r12,8), %rdi + lea 128(%rsp,%r12,8), %rsi + call __svml_dlog2_cout_rare_internal + jmp .LBL_1_8 + +END(_ZGVeN8v_log2_skx) + + .align 16,0x90 + +__svml_dlog2_cout_rare_internal: + + cfi_startproc + + movq $0, -64(%rsp) + movsd -64(%rsp), %xmm0 + movsd (%rdi), %xmm1 + movups _zeros.256.0.0.1(%rip), %xmm2 + subsd %xmm0, %xmm1 + movsd %xmm1, -8(%rsp) + movups %xmm2, -56(%rsp) + movups _ones.256.0.0.1(%rip), %xmm0 + movups %xmm0, -40(%rsp) + movups _infs.256.0.0.1(%rip), %xmm0 + movups %xmm0, -24(%rsp) + movl -4(%rsp), %eax + cmpl $2146435072, %eax + jae .LBL_2_19 + lea -1072660480(%rax), %edx + cmpl $53248, %edx + jae .LBL_2_14 + lea -1072693232(%rax), %edx + cmpl $24, %edx + jae .LBL_2_13 + movl -8(%rsp), %edi + movl %eax, %ecx + movl %edi, %edx + shll $11, %ecx + shrl $21, %edx + orl %edx, %ecx + addl $-2147483646, %ecx + cmpl $3, %ecx + jae .LBL_2_12 + addl $-1072693248, %eax + orl %edi, %eax + jne .LBL_2_10 + movq -56(%rsp), %rax + movq %rax, (%rsi) + jmp .LBL_2_11 + +.LBL_2_10: + movsd -8(%rsp), %xmm0 + movsd 16+__dlog2_la__Q3(%rip), %xmm2 + movsd 24+__dlog2_la__Q3(%rip), %xmm1 + addsd -32(%rsp), %xmm0 + mulsd %xmm0, %xmm2 + mulsd %xmm0, %xmm1 + addsd 8+__dlog2_la__Q3(%rip), %xmm2 + mulsd %xmm0, %xmm2 + movsd %xmm0, -8(%rsp) + addsd __dlog2_la__Q3(%rip), %xmm2 + mulsd %xmm0, %xmm2 + addsd %xmm1, %xmm2 + movsd %xmm2, (%rsi) + +.LBL_2_11: + xorl %eax, %eax + ret + +.LBL_2_12: + movsd -8(%rsp), %xmm2 + xorl %eax, %eax + movsd 16+__dlog2_la__Q2(%rip), %xmm1 + movsd 24+__dlog2_la__Q2(%rip), %xmm3 + addsd -32(%rsp), %xmm2 + movaps %xmm2, %xmm0 + mulsd %xmm2, %xmm0 + mulsd %xmm0, %xmm1 + mulsd %xmm0, %xmm3 + addsd __dlog2_la__Q2(%rip), %xmm1 + addsd 8+__dlog2_la__Q2(%rip), %xmm3 + mulsd %xmm2, %xmm1 + mulsd %xmm0, %xmm3 + movsd %xmm2, -8(%rsp) + addsd %xmm1, %xmm3 + movl $0, -8(%rsp) + movsd -8(%rsp), %xmm4 + subsd %xmm4, %xmm2 + addsd %xmm2, %xmm4 + mulsd 32+__dlog2_la__Q2(%rip), %xmm4 + addsd %xmm3, %xmm4 + movsd %xmm4, (%rsi) + ret + +.LBL_2_13: + movsd -8(%rsp), %xmm2 + xorl %eax, %eax + movsd 72+__dlog2_la__Q1(%rip), %xmm10 + movsd 64+__dlog2_la__Q1(%rip), %xmm4 + movsd __dlog2_la__TWO_32P(%rip), %xmm5 + movsd __dlog2_la__TWO_32P(%rip), %xmm7 + movsd 88+__dlog2_la__Q1(%rip), %xmm14 + movsd __dlog2_la__TWO_32P(%rip), %xmm11 + movsd __dlog2_la__TWO_32P(%rip), %xmm15 + addsd -32(%rsp), %xmm2 + movaps %xmm2, %xmm3 + movaps %xmm2, %xmm6 + mulsd %xmm2, %xmm3 + movaps %xmm2, %xmm0 + mulsd %xmm2, %xmm5 + mulsd __dlog2_la__TWO_32(%rip), %xmm6 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 56+__dlog2_la__Q1(%rip), %xmm10 + addsd 48+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 40+__dlog2_la__Q1(%rip), %xmm10 + addsd 32+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm3, %xmm4 + addsd 24+__dlog2_la__Q1(%rip), %xmm10 + addsd 16+__dlog2_la__Q1(%rip), %xmm4 + mulsd %xmm3, %xmm10 + mulsd %xmm2, %xmm4 + movsd __dlog2_la__TWO_32(%rip), %xmm3 + addsd %xmm4, %xmm10 + mulsd %xmm10, %xmm7 + movaps %xmm3, %xmm8 + mulsd %xmm10, %xmm8 + movsd %xmm5, -72(%rsp) + movsd -72(%rsp), %xmm1 + movsd %xmm7, -72(%rsp) + subsd %xmm6, %xmm1 + movsd -72(%rsp), %xmm9 + subsd %xmm1, %xmm0 + subsd %xmm8, %xmm9 + movsd %xmm1, -8(%rsp) + subsd %xmm9, %xmm10 + addsd %xmm9, %xmm14 + addsd 8+__dlog2_la__Q1(%rip), %xmm10 + movaps %xmm14, %xmm4 + mulsd %xmm0, %xmm4 + mulsd %xmm2, %xmm10 + mulsd %xmm1, %xmm14 + addsd %xmm0, %xmm1 + addsd %xmm10, %xmm4 + movaps %xmm4, %xmm12 + movsd 80+__dlog2_la__Q1(%rip), %xmm9 + addsd %xmm14, %xmm12 + mulsd %xmm12, %xmm11 + mulsd %xmm3, %xmm12 + movsd %xmm11, -72(%rsp) + movsd -72(%rsp), %xmm13 + subsd %xmm12, %xmm13 + subsd %xmm13, %xmm4 + addsd %xmm13, %xmm9 + addsd %xmm14, %xmm4 + movaps %xmm9, %xmm13 + addsd __dlog2_la__Q1(%rip), %xmm4 + addsd %xmm4, %xmm13 + mulsd %xmm13, %xmm15 + mulsd %xmm3, %xmm13 + movsd %xmm15, -72(%rsp) + movsd -72(%rsp), %xmm14 + subsd %xmm13, %xmm14 + mulsd %xmm14, %xmm1 + subsd %xmm14, %xmm9 + addsd %xmm9, %xmm4 + mulsd %xmm2, %xmm4 + addsd %xmm4, %xmm1 + movsd %xmm1, (%rsi) + ret + +.LBL_2_14: + movl %eax, %ecx + movl %eax, %edx + shrl $20, %ecx + andl $1048575, %edx + addl $-1023, %ecx + cmpl $1048576, %eax + jae .LBL_2_18 + movl %edx, -4(%rsp) + movl -8(%rsp), %edx + orl %edx, %eax + jne .LBL_2_17 + movsd -32(%rsp), %xmm0 + movl $2, %eax + divsd -56(%rsp), %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_17: + movsd -8(%rsp), %xmm0 + mulsd __dlog2_la__TWO_55(%rip), %xmm0 + movsd %xmm0, -8(%rsp) + movl -4(%rsp), %edx + movl %edx, %ecx + shrl $20, %ecx + movl %edx, %eax + addl $-1078, %ecx + +.LBL_2_18: + shrl $12, %eax + orl $1072693248, %edx + movzbl %al, %edi + pxor %xmm7, %xmm7 + movl %edx, -4(%rsp) + lea __dlog2_la___libm_rcp_table_256(%rip), %rdx + movsd -8(%rsp), %xmm10 + pxor %xmm8, %xmm8 + movl $0, -8(%rsp) + lea __dlog2_la___libm_log2_table_256(%rip), %rax + movsd -8(%rsp), %xmm0 + cvtss2sd (%rdx,%rdi,4), %xmm7 + cvtsi2sd %ecx, %xmm8 + subsd %xmm0, %xmm10 + mulsd %xmm7, %xmm10 + mulsd %xmm0, %xmm7 + movsd 40+__dlog2_la__P(%rip), %xmm4 + movsd 32+__dlog2_la__P(%rip), %xmm3 + movsd 48+__dlog2_la__P(%rip), %xmm5 + movsd __dlog2_la__TWO_32(%rip), %xmm6 + shlq $4, %rdi + addsd -32(%rsp), %xmm7 + movaps %xmm7, %xmm2 + mulsd %xmm5, %xmm7 + addsd %xmm10, %xmm2 + mulsd %xmm5, %xmm10 + addsd %xmm7, %xmm6 + movaps %xmm2, %xmm1 + mulsd %xmm2, %xmm1 + mulsd %xmm1, %xmm4 + mulsd %xmm1, %xmm3 + addsd 24+__dlog2_la__P(%rip), %xmm4 + addsd 16+__dlog2_la__P(%rip), %xmm3 + mulsd %xmm1, %xmm4 + mulsd %xmm1, %xmm3 + addsd 8+__dlog2_la__P(%rip), %xmm4 + addsd __dlog2_la__P(%rip), %xmm3 + mulsd %xmm1, %xmm4 + mulsd %xmm2, %xmm3 + movsd %xmm6, -72(%rsp) + addsd %xmm3, %xmm4 + addsd 8(%rax,%rdi), %xmm8 + addsd %xmm4, %xmm10 + movsd -72(%rsp), %xmm9 + subsd __dlog2_la__TWO_32(%rip), %xmm9 + subsd %xmm9, %xmm7 + addsd %xmm8, %xmm9 + addsd (%rax,%rdi), %xmm7 + movsd %xmm9, -8(%rsp) + xorl %eax, %eax + addsd %xmm7, %xmm10 + addsd %xmm9, %xmm10 + movsd %xmm10, (%rsi) + ret + +.LBL_2_19: + movl %eax, %edx + andl $2147483647, %edx + cmpl $2146435072, %edx + ja .LBL_2_28 + jne .LBL_2_22 + cmpl $0, -8(%rsp) + jne .LBL_2_28 + +.LBL_2_22: + testl $-2147483648, %eax + je .LBL_2_27 + movl -8(%rsp), %eax + orl %eax, %edx + movsd -56(%rsp), %xmm1 + jne .LBL_2_25 + movsd -32(%rsp), %xmm0 + movl $2, %eax + divsd %xmm1, %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_25: + movsd -24(%rsp), %xmm0 + movl $1, %eax + mulsd %xmm1, %xmm0 + movsd %xmm0, (%rsi) + ret + +.LBL_2_27: + movq -8(%rsp), %rax + movq %rax, (%rsi) + xorl %eax, %eax + ret + +.LBL_2_28: + movsd -8(%rsp), %xmm0 + xorl %eax, %eax + mulsd -40(%rsp), %xmm0 + movsd %xmm0, (%rsi) + ret + + cfi_endproc + + .type __svml_dlog2_cout_rare_internal,@function + .size __svml_dlog2_cout_rare_internal,.-__svml_dlog2_cout_rare_internal + .section .rodata, "a" + .align 64 + .align 16 + +_zeros.256.0.0.1: + .long 0 + .long 0 + .long 0 + .long 2147483648 + .align 16 + +_ones.256.0.0.1: + .long 0 + .long 1072693248 + .long 0 + .long 3220176896 + .align 16 + +_infs.256.0.0.1: + .long 0 + .long 2146435072 + .long 0 + .long 4293918720 + + .section .rodata, "a" + .space 16, 0x00 + .align 64 + +__svml_dlog2_data_internal_avx512: + .long 0 + .long 0 + .long 4207481622 + .long 3216401398 + .long 972805768 + .long 3217408026 + .long 3103942666 + .long 3218062358 + .long 1271733131 + .long 3218381432 + .long 2300516105 + .long 3218676666 + .long 3761433103 + .long 3218958163 + .long 14039718 + .long 3219177733 + .long 1904282206 + .long 1071288313 + .long 1751501034 + .long 1071041295 + .long 3815829096 + .long 1070803966 + .long 2835758645 + .long 1070555096 + .long 180337970 + .long 1070114968 + .long 3266000023 + .long 1069690285 + .long 2530196300 + .long 1069012484 + .long 3386464469 + .long 1067938708 + .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 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 3658358034 + .long 1069846603 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1307270350 + .long 3217498040 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 1367442963 + .long 1070227827 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 3840087116 + .long 3217999623 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1360320794 + .long 1070757740 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 1698500493 + .long 3218543943 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 3694789279 + .long 1071564553 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350356 + .long 3219592519 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .long 1697350398 + .long 1073157447 + .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_dlog2_data_internal_avx512,@object + .size __svml_dlog2_data_internal_avx512,1088 + .align 64 + +__dlog2_la__Q3: + .long 3213221364 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3694789629 + .long 1071564553 + .long 0 + .long 1073157447 + .type __dlog2_la__Q3,@object + .size __dlog2_la__Q3,32 + .space 32, 0x00 + .align 64 + +__dlog2_la__Q2: + .long 3213221358 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3695167823 + .long 1071564553 + .long 1697791998 + .long 3218543943 + .long 0 + .long 1073157447 + .type __dlog2_la__Q2,@object + .size __dlog2_la__Q2,40 + .space 24, 0x00 + .align 64 + +__dlog2_la__Q1: + .long 3213221370 + .long 1050233568 + .long 3213207734 + .long 3196668640 + .long 3694789628 + .long 1071564553 + .long 1697350743 + .long 3218543943 + .long 1357908666 + .long 1070757740 + .long 3685007067 + .long 3217999625 + .long 96832070 + .long 1070227830 + .long 1140452344 + .long 3217495379 + .long 2606274745 + .long 1069844296 + .long 1933654871 + .long 3217172449 + .long 0 + .long 1073157447 + .long 0 + .long 3219592519 + .type __dlog2_la__Q1,@object + .size __dlog2_la__Q1,96 + .space 32, 0x00 + .align 64 + +__dlog2_la__TWO_32P: + .long 1048576 + .long 1106247680 + .type __dlog2_la__TWO_32P,@object + .size __dlog2_la__TWO_32P,8 + .space 56, 0x00 + .align 64 + +__dlog2_la__TWO_32: + .long 0 + .long 1106247680 + .type __dlog2_la__TWO_32,@object + .size __dlog2_la__TWO_32,8 + .space 56, 0x00 + .align 64 + +__dlog2_la__TWO_55: + .long 0 + .long 1130364928 + .type __dlog2_la__TWO_55,@object + .size __dlog2_la__TWO_55,8 + .space 56, 0x00 + .align 64 + +__dlog2_la___libm_rcp_table_256: + .long 0x3f7f8000 + .long 0x3f7e8000 + .long 0x3f7d8000 + .long 0x3f7c8000 + .long 0x3f7ba000 + .long 0x3f7aa000 + .long 0x3f79a000 + .long 0x3f78c000 + .long 0x3f77c000 + .long 0x3f76e000 + .long 0x3f75e000 + .long 0x3f750000 + .long 0x3f742000 + .long 0x3f732000 + .long 0x3f724000 + .long 0x3f716000 + .long 0x3f708000 + .long 0x3f6fa000 + .long 0x3f6ec000 + .long 0x3f6de000 + .long 0x3f6d0000 + .long 0x3f6c2000 + .long 0x3f6b6000 + .long 0x3f6a8000 + .long 0x3f69a000 + .long 0x3f68c000 + .long 0x3f680000 + .long 0x3f672000 + .long 0x3f666000 + .long 0x3f658000 + .long 0x3f64c000 + .long 0x3f640000 + .long 0x3f632000 + .long 0x3f626000 + .long 0x3f61a000 + .long 0x3f60e000 + .long 0x3f600000 + .long 0x3f5f4000 + .long 0x3f5e8000 + .long 0x3f5dc000 + .long 0x3f5d0000 + .long 0x3f5c4000 + .long 0x3f5b8000 + .long 0x3f5ae000 + .long 0x3f5a2000 + .long 0x3f596000 + .long 0x3f58a000 + .long 0x3f57e000 + .long 0x3f574000 + .long 0x3f568000 + .long 0x3f55e000 + .long 0x3f552000 + .long 0x3f546000 + .long 0x3f53c000 + .long 0x3f532000 + .long 0x3f526000 + .long 0x3f51c000 + .long 0x3f510000 + .long 0x3f506000 + .long 0x3f4fc000 + .long 0x3f4f2000 + .long 0x3f4e6000 + .long 0x3f4dc000 + .long 0x3f4d2000 + .long 0x3f4c8000 + .long 0x3f4be000 + .long 0x3f4b4000 + .long 0x3f4aa000 + .long 0x3f4a0000 + .long 0x3f496000 + .long 0x3f48c000 + .long 0x3f482000 + .long 0x3f478000 + .long 0x3f46e000 + .long 0x3f464000 + .long 0x3f45c000 + .long 0x3f452000 + .long 0x3f448000 + .long 0x3f43e000 + .long 0x3f436000 + .long 0x3f42c000 + .long 0x3f422000 + .long 0x3f41a000 + .long 0x3f410000 + .long 0x3f408000 + .long 0x3f3fe000 + .long 0x3f3f6000 + .long 0x3f3ec000 + .long 0x3f3e4000 + .long 0x3f3da000 + .long 0x3f3d2000 + .long 0x3f3ca000 + .long 0x3f3c0000 + .long 0x3f3b8000 + .long 0x3f3b0000 + .long 0x3f3a8000 + .long 0x3f39e000 + .long 0x3f396000 + .long 0x3f38e000 + .long 0x3f386000 + .long 0x3f37e000 + .long 0x3f376000 + .long 0x3f36c000 + .long 0x3f364000 + .long 0x3f35c000 + .long 0x3f354000 + .long 0x3f34c000 + .long 0x3f344000 + .long 0x3f33c000 + .long 0x3f334000 + .long 0x3f32e000 + .long 0x3f326000 + .long 0x3f31e000 + .long 0x3f316000 + .long 0x3f30e000 + .long 0x3f306000 + .long 0x3f2fe000 + .long 0x3f2f8000 + .long 0x3f2f0000 + .long 0x3f2e8000 + .long 0x3f2e2000 + .long 0x3f2da000 + .long 0x3f2d2000 + .long 0x3f2cc000 + .long 0x3f2c4000 + .long 0x3f2bc000 + .long 0x3f2b6000 + .long 0x3f2ae000 + .long 0x3f2a8000 + .long 0x3f2a0000 + .long 0x3f29a000 + .long 0x3f292000 + .long 0x3f28c000 + .long 0x3f284000 + .long 0x3f27e000 + .long 0x3f276000 + .long 0x3f270000 + .long 0x3f268000 + .long 0x3f262000 + .long 0x3f25c000 + .long 0x3f254000 + .long 0x3f24e000 + .long 0x3f248000 + .long 0x3f240000 + .long 0x3f23a000 + .long 0x3f234000 + .long 0x3f22e000 + .long 0x3f226000 + .long 0x3f220000 + .long 0x3f21a000 + .long 0x3f214000 + .long 0x3f20e000 + .long 0x3f206000 + .long 0x3f200000 + .long 0x3f1fa000 + .long 0x3f1f4000 + .long 0x3f1ee000 + .long 0x3f1e8000 + .long 0x3f1e2000 + .long 0x3f1dc000 + .long 0x3f1d6000 + .long 0x3f1d0000 + .long 0x3f1ca000 + .long 0x3f1c4000 + .long 0x3f1be000 + .long 0x3f1b8000 + .long 0x3f1b2000 + .long 0x3f1ac000 + .long 0x3f1a6000 + .long 0x3f1a0000 + .long 0x3f19a000 + .long 0x3f194000 + .long 0x3f190000 + .long 0x3f18a000 + .long 0x3f184000 + .long 0x3f17e000 + .long 0x3f178000 + .long 0x3f172000 + .long 0x3f16e000 + .long 0x3f168000 + .long 0x3f162000 + .long 0x3f15c000 + .long 0x3f158000 + .long 0x3f152000 + .long 0x3f14c000 + .long 0x3f148000 + .long 0x3f142000 + .long 0x3f13c000 + .long 0x3f138000 + .long 0x3f132000 + .long 0x3f12c000 + .long 0x3f128000 + .long 0x3f122000 + .long 0x3f11c000 + .long 0x3f118000 + .long 0x3f112000 + .long 0x3f10e000 + .long 0x3f108000 + .long 0x3f104000 + .long 0x3f0fe000 + .long 0x3f0f8000 + .long 0x3f0f4000 + .long 0x3f0ee000 + .long 0x3f0ea000 + .long 0x3f0e6000 + .long 0x3f0e0000 + .long 0x3f0dc000 + .long 0x3f0d6000 + .long 0x3f0d2000 + .long 0x3f0cc000 + .long 0x3f0c8000 + .long 0x3f0c2000 + .long 0x3f0be000 + .long 0x3f0ba000 + .long 0x3f0b4000 + .long 0x3f0b0000 + .long 0x3f0ac000 + .long 0x3f0a6000 + .long 0x3f0a2000 + .long 0x3f09e000 + .long 0x3f098000 + .long 0x3f094000 + .long 0x3f090000 + .long 0x3f08a000 + .long 0x3f086000 + .long 0x3f082000 + .long 0x3f07e000 + .long 0x3f078000 + .long 0x3f074000 + .long 0x3f070000 + .long 0x3f06c000 + .long 0x3f066000 + .long 0x3f062000 + .long 0x3f05e000 + .long 0x3f05a000 + .long 0x3f056000 + .long 0x3f052000 + .long 0x3f04c000 + .long 0x3f048000 + .long 0x3f044000 + .long 0x3f040000 + .long 0x3f03c000 + .long 0x3f038000 + .long 0x3f034000 + .long 0x3f030000 + .long 0x3f02a000 + .long 0x3f026000 + .long 0x3f022000 + .long 0x3f01e000 + .long 0x3f01a000 + .long 0x3f016000 + .long 0x3f012000 + .long 0x3f00e000 + .long 0x3f00a000 + .long 0x3f006000 + .long 0x3f002000 + .type __dlog2_la___libm_rcp_table_256,@object + .size __dlog2_la___libm_rcp_table_256,1024 + .align 64 + +__dlog2_la___libm_log2_table_256: + .long 0xfb44c3b7,0x3e1485cb + .long 0x00000000,0x3f671b0e + .long 0x06028ac0,0x3e31d5d9 + .long 0x00000000,0x3f815cfe + .long 0xb8d7240b,0x3df8b9cb + .long 0x00000000,0x3f8cfee7 + .long 0x0d179106,0x3e38864a + .long 0x00000000,0x3f94564a + .long 0xecba1593,0x3e459c6a + .long 0x00000000,0x3f997723 + .long 0x94120c14,0x3e48d36a + .long 0x00000000,0x3f9f5923 + .long 0xd2571490,0x3e5410ba + .long 0x00000000,0x3fa2a094 + .long 0x1dc036a2,0x3e2776b0 + .long 0x00000000,0x3fa53894 + .long 0x78efe2b1,0x3e537229 + .long 0x00000000,0x3fa8324c + .long 0xfd29dc75,0x3e59c0fa + .long 0x00000000,0x3faacf54 + .long 0x046734f7,0x3e4636b7 + .long 0x00000000,0x3fadced9 + .long 0xd3b410b8,0x3e6f7950 + .long 0x00000000,0x3fb0387e + .long 0x00f2200a,0x3e19d1e7 + .long 0x00000000,0x3fb18ac6 + .long 0x8661ba82,0x3e4f09a9 + .long 0x00000000,0x3fb30edd + .long 0x9367107c,0x3e564d91 + .long 0x00000000,0x3fb463c1 + .long 0x0e4a4ce8,0x3e4e1fd1 + .long 0x00000000,0x3fb5b9e1 + .long 0x3cdb6374,0x3e492cf0 + .long 0x00000000,0x3fb7113f + .long 0x069c4f7f,0x3e61a364 + .long 0x00000000,0x3fb869dd + .long 0x427b631b,0x3e6493a6 + .long 0x00000000,0x3fb9c3be + .long 0xe02b3e8b,0x3e6af2c2 + .long 0x00000000,0x3fbb1ee4 + .long 0x389f4365,0x3e616e1e + .long 0x00000000,0x3fbc7b52 + .long 0x6a31fd96,0x3e4633b7 + .long 0x00000000,0x3fbdd90a + .long 0x0508664d,0x3e62ed84 + .long 0x00000000,0x3fbf05d4 + .long 0xaca1905c,0x3e775dcd + .long 0x00000000,0x3fc032fb + .long 0x094fbeeb,0x3e753e65 + .long 0x00000000,0x3fc0e3b5 + .long 0x96aa4b17,0x3e671f44 + .long 0x00000000,0x3fc19519 + .long 0x92da5a47,0x3e785566 + .long 0x00000000,0x3fc22dad + .long 0xbeb7d722,0x3e518efa + .long 0x00000000,0x3fc2e050 + .long 0xab57551c,0x3e738564 + .long 0x00000000,0x3fc379f7 + .long 0x54a914e3,0x3e55d0da + .long 0x00000000,0x3fc42ddd + .long 0xfe974017,0x3e73cd00 + .long 0x00000000,0x3fc4c89b + .long 0x59064390,0x3e54ffd6 + .long 0x00000000,0x3fc563dc + .long 0x633ab50f,0x3e67d75e + .long 0x00000000,0x3fc619a2 + .long 0xc8877e8a,0x3e77e6ce + .long 0x00000000,0x3fc6b5ff + .long 0x1ab7837f,0x3e7ecc1f + .long 0x00000000,0x3fc752e1 + .long 0xf9d5827a,0x3e7cea7c + .long 0x00000000,0x3fc7f049 + .long 0x64ccd537,0x3e357f7a + .long 0x00000000,0x3fc8a898 + .long 0xf7c9b05b,0x3e7994ca + .long 0x00000000,0x3fc94724 + .long 0xa2f56536,0x3e524b8f + .long 0x00000000,0x3fc9e63a + .long 0x5edaab42,0x3e7fd640 + .long 0x00000000,0x3fca85d8 + .long 0xd163379a,0x3e625f54 + .long 0x00000000,0x3fcb2602 + .long 0x936acd51,0x3e7ebdc3 + .long 0x00000000,0x3fcbc6b6 + .long 0xcfbc0aa0,0x3e7eee14 + .long 0x00000000,0x3fcc67f7 + .long 0xf73bcdad,0x3e764469 + .long 0x00000000,0x3fcceec4 + .long 0x60971b86,0x3e6eb44e + .long 0x00000000,0x3fcd9109 + .long 0xcd2052a5,0x3e65fcf4 + .long 0x00000000,0x3fce33dd + .long 0xc402867b,0x3e61af1e + .long 0x00000000,0x3fced741 + .long 0xa0c956e4,0x3e61bfbd + .long 0x00000000,0x3fcf7b36 + .long 0x831e77ff,0x3e85287b + .long 0x00000000,0x3fd00223 + .long 0xaddfdee2,0x3e7d2fc3 + .long 0x00000000,0x3fd054a4 + .long 0x342052c1,0x3e83724b + .long 0x00000000,0x3fd0999d + .long 0x602bcd34,0x3e7b4ec9 + .long 0x00000000,0x3fd0eca6 + .long 0x3aa20ead,0x3e6742da + .long 0x00000000,0x3fd13ffa + .long 0x9ecdadf4,0x3e713e82 + .long 0x00000000,0x3fd185a4 + .long 0xfef3031b,0x3e52f27e + .long 0x00000000,0x3fd1cb83 + .long 0x79e4af8a,0x3e710739 + .long 0x00000000,0x3fd21fa1 + .long 0xe59ad84a,0x3e637301 + .long 0x00000000,0x3fd265f5 + .long 0x3d7dfd9b,0x3e88697c + .long 0x00000000,0x3fd2baa0 + .long 0x738117b0,0x3e717788 + .long 0x00000000,0x3fd3016b + .long 0xd3c26a97,0x3e6c5514 + .long 0x00000000,0x3fd3486c + .long 0x4c4ff246,0x3e8df550 + .long 0x00000000,0x3fd38fa3 + .long 0x40340fa6,0x3e88102d + .long 0x00000000,0x3fd3e562 + .long 0x4592f4c3,0x3e5f53b6 + .long 0x00000000,0x3fd42d14 + .long 0x8b149a00,0x3e750fc8 + .long 0x00000000,0x3fd474fd + .long 0xa8f50e5f,0x3e86d01c + .long 0x00000000,0x3fd4bd1e + .long 0x7a22a88a,0x3e83c469 + .long 0x00000000,0x3fd50578 + .long 0xdc18b6d2,0x3e79000e + .long 0x00000000,0x3fd54e0b + .long 0x7c00250b,0x3e7870f0 + .long 0x00000000,0x3fd596d7 + .long 0xc1c885ae,0x3e8e3dd5 + .long 0x00000000,0x3fd5dfdc + .long 0xa6ecc47e,0x3e7bf64c + .long 0x00000000,0x3fd6291c + .long 0x0bc16c18,0x3e6bdaca + .long 0x00000000,0x3fd67296 + .long 0x1f925729,0x3e84d25c + .long 0x00000000,0x3fd6bc4a + .long 0xf23978de,0x3e5a5fb4 + .long 0x00000000,0x3fd7063a + .long 0xe2ac7f60,0x3e8e3da0 + .long 0x00000000,0x3fd75064 + .long 0x71f51a7b,0x3e819e20 + .long 0x00000000,0x3fd79acb + .long 0x5b924234,0x3e5e43ae + .long 0x00000000,0x3fd7d67c + .long 0xe9aedf37,0x3e701a2b + .long 0x00000000,0x3fd8214f + .long 0xeddd33ea,0x3e6b6f51 + .long 0x00000000,0x3fd86c5f + .long 0xe732b3c4,0x3e79375f + .long 0x00000000,0x3fd8b7ac + .long 0xe47cb9df,0x3e7e831b + .long 0x00000000,0x3fd8f416 + .long 0xe392d3c8,0x3e8abc37 + .long 0x00000000,0x3fd93fd2 + .long 0x28b35c77,0x3e80852d + .long 0x00000000,0x3fd98bcd + .long 0xd29cea36,0x3e69f374 + .long 0x00000000,0x3fd9c8c3 + .long 0xb3d7b0e6,0x3e542981 + .long 0x00000000,0x3fda152f + .long 0x1fe6d5ac,0x3e8b2bfb + .long 0x00000000,0x3fda527f + .long 0xf32e5dda,0x3e6f6f5c + .long 0x00000000,0x3fda9f5e + .long 0xd34d0d30,0x3e65abaa + .long 0x00000000,0x3fdadd0b + .long 0xe0ac9602,0x3e7bd47f + .long 0x00000000,0x3fdb2a5d + .long 0x7c5c784b,0x3e833601 + .long 0x00000000,0x3fdb6867 + .long 0xd7b0821f,0x3e5b887c + .long 0x00000000,0x3fdbb62f + .long 0xcd0a8f6a,0x3e83eccc + .long 0x00000000,0x3fdbf497 + .long 0x7500a4e8,0x3e7ba0e6 + .long 0x00000000,0x3fdc332a + .long 0xfc8712bb,0x3e885a8b + .long 0x00000000,0x3fdc819d + .long 0xf7a3a78f,0x3e81c336 + .long 0x00000000,0x3fdcc090 + .long 0x4ad8a38b,0x3e7846b4 + .long 0x00000000,0x3fdcffae + .long 0xfcfc3a99,0x3e7db50f + .long 0x00000000,0x3fdd3ef7 + .long 0x433cccd2,0x3e238809 + .long 0x00000000,0x3fdd8e50 + .long 0x6828fa82,0x3e721b2e + .long 0x00000000,0x3fddcdfb + .long 0xfc7c49c1,0x3e82848b + .long 0x00000000,0x3fde0dd2 + .long 0x1fce4d49,0x3e615144 + .long 0x00000000,0x3fde4dd6 + .long 0x77e2e8fd,0x3e68b88a + .long 0x00000000,0x3fde8e06 + .long 0x22a961b0,0x3e8fd353 + .long 0x00000000,0x3fdece62 + .long 0x266f2e1f,0x3e72854e + .long 0x00000000,0x3fdf1f16 + .long 0xc69211fe,0x3e8520c7 + .long 0x00000000,0x3fdf5fd8 + .long 0xaba878d5,0x3e826fcf + .long 0x00000000,0x3fdfa0c8 + .long 0xcd5b35b1,0x3e726ed8 + .long 0x00000000,0x3fdfe1e6 + .long 0x678a4f1c,0x3e49054d + .long 0x00000000,0x3fe01199 + .long 0x3bc19f18,0x3e5d23cb + .long 0x00000000,0x3fe03256 + .long 0x12772acb,0x3e87af35 + .long 0x00000000,0x3fe0532a + .long 0x2849c88a,0x3e67f5fc + .long 0x00000000,0x3fe07416 + .long 0x0e574fa1,0x3e84fce2 + .long 0x00000000,0x3fe08cd6 + .long 0x0ec2b5fa,0x3e857044 + .long 0x00000000,0x3fe0adeb + .long 0xd031f353,0x3e6d5d1d + .long 0x00000000,0x3fe0cf18 + .long 0xdae75c4d,0x3e99a159 + .long 0x00000000,0x3fe0f05c + .long 0x1553afb9,0x3e90eaf1 + .long 0x00000000,0x3fe111b9 + .long 0xdcc5c3c7,0x3e8bc6f3 + .long 0x00000000,0x3fe1332e + .long 0x1109e597,0x3e94ef84 + .long 0x00000000,0x3fe154bb + .long 0xd82adea4,0x3e937f40 + .long 0x00000000,0x3fe16df5 + .long 0x78336a2f,0x3e96dc5a + .long 0x00000000,0x3fe18fad + .long 0x84c2c804,0x3e90935b + .long 0x00000000,0x3fe1b17e + .long 0x04fd30aa,0x3e8a837a + .long 0x00000000,0x3fe1caeb + .long 0xd924b0ac,0x3e99061d + .long 0x00000000,0x3fe1ece7 + .long 0xef9b9d01,0x3e7ed700 + .long 0x00000000,0x3fe20efd + .long 0x202c81ec,0x3e9c6ebb + .long 0x00000000,0x3fe2289d + .long 0xfc0d7d76,0x3e936d4d + .long 0x00000000,0x3fe24adf + .long 0x9f8756ba,0x3e9a35d7 + .long 0x00000000,0x3fe26d3a + .long 0xe7c79d83,0x3e584ee3 + .long 0x00000000,0x3fe28710 + .long 0x942065a0,0x3e7d9e0d + .long 0x00000000,0x3fe2a998 + .long 0x2175afbf,0x3e872108 + .long 0x00000000,0x3fe2c38f + .long 0xfaf6283c,0x3e9f5809 + .long 0x00000000,0x3fe2e644 + .long 0x411d0507,0x3e871209 + .long 0x00000000,0x3fe3005e + .long 0x370c24bf,0x3e9c3b11 + .long 0x00000000,0x3fe32341 + .long 0x8044bb5a,0x3e9bce8e + .long 0x00000000,0x3fe33d7d + .long 0x698ea854,0x3e98aca0 + .long 0x00000000,0x3fe3608f + .long 0xd4d873bb,0x3e972a8e + .long 0x00000000,0x3fe37aee + .long 0x615e8182,0x3e8f669b + .long 0x00000000,0x3fe39e2f + .long 0xdda5b49a,0x3e98d1f4 + .long 0x00000000,0x3fe3b8b1 + .long 0xe72383f7,0x3e9cc279 + .long 0x00000000,0x3fe3dc21 + .long 0x497497f1,0x3e9c6774 + .long 0x00000000,0x3fe3f6c7 + .long 0x801bd0e6,0x3e82c7f6 + .long 0x00000000,0x3fe4117d + .long 0xd0ee28b4,0x3e9dfdd6 + .long 0x00000000,0x3fe43531 + .long 0xb70d3761,0x3e92d3a2 + .long 0x00000000,0x3fe4500b + .long 0xe7d6bcb2,0x3e9c8343 + .long 0x00000000,0x3fe46af4 + .long 0x90d43957,0x3e693179 + .long 0x00000000,0x3fe48eef + .long 0xf12570df,0x3e799eab + .long 0x00000000,0x3fe4a9fd + .long 0x1b88755d,0x3e78c5f8 + .long 0x00000000,0x3fe4c51b + .long 0xdf99a22c,0x3e7369be + .long 0x00000000,0x3fe4e049 + .long 0x6ed50f62,0x3e88fd93 + .long 0x00000000,0x3fe5049f + .long 0x978605ff,0x3e9c6042 + .long 0x00000000,0x3fe51ff2 + .long 0xe6c85f4c,0x3e930ae6 + .long 0x00000000,0x3fe53b56 + .long 0xc3275ba6,0x3e92e7b6 + .long 0x00000000,0x3fe556ca + .long 0x91597938,0x3e9e6401 + .long 0x00000000,0x3fe5724e + .long 0x448ebb62,0x3e3d2dee + .long 0x00000000,0x3fe59719 + .long 0x47501b6d,0x3e9b432e + .long 0x00000000,0x3fe5b2c3 + .long 0x571fa7cd,0x3e83cf9b + .long 0x00000000,0x3fe5ce7f + .long 0x7359819d,0x3e8dc615 + .long 0x00000000,0x3fe5ea4b + .long 0xc78a85ed,0x3e8973c3 + .long 0x00000000,0x3fe60628 + .long 0xc15a9f3d,0x3e77d788 + .long 0x00000000,0x3fe62216 + .long 0x51952736,0x3e9d2538 + .long 0x00000000,0x3fe63e14 + .long 0xde792c07,0x3e94dab9 + .long 0x00000000,0x3fe65a24 + .long 0x5bfa4318,0x3e8f5be1 + .long 0x00000000,0x3fe67645 + .long 0x55090ec8,0x3e903b26 + .long 0x00000000,0x3fe69277 + .long 0xc78b6175,0x3e99236f + .long 0x00000000,0x3fe6aeba + .long 0x3a80db6a,0x3e8a1972 + .long 0x00000000,0x3fe6cb0f + .long 0xf558aa96,0x3e8d43a2 + .long 0x00000000,0x3fe6e775 + .long 0xd9a82f2e,0x3e424ee3 + .long 0x00000000,0x3fe703ed + .long 0x583878f6,0x3e764d8e + .long 0x00000000,0x3fe72076 + .long 0xc1150a3e,0x3e379604 + .long 0x00000000,0x3fe73d11 + .long 0xed85584b,0x3e93b229 + .long 0x00000000,0x3fe759bd + .long 0x451a7b48,0x3e62967a + .long 0x00000000,0x3fe7767c + .long 0xc044e72d,0x3e8e12d7 + .long 0x00000000,0x3fe7934c + .long 0xfdfb6949,0x3e9ca45d + .long 0x00000000,0x3fe7b02e + .long 0xff690fce,0x3e9244fc + .long 0x00000000,0x3fe7c37a + .long 0x81487a2c,0x3e7e9cea + .long 0x00000000,0x3fe7e07b + .long 0xd0ad2d9a,0x3e760da0 + .long 0x00000000,0x3fe7fd8e + .long 0x096f45d9,0x3e8d7703 + .long 0x00000000,0x3fe81ab3 + .long 0x1b17115b,0x3e78dbee + .long 0x00000000,0x3fe837eb + .long 0x7c252ee0,0x3e8dc5a4 + .long 0x00000000,0x3fe85535 + .long 0x42d5123f,0x3e950116 + .long 0x00000000,0x3fe868c6 + .long 0xf11e41be,0x3e4c4eb7 + .long 0x00000000,0x3fe88630 + .long 0xdb2890b4,0x3e7773b8 + .long 0x00000000,0x3fe8a3ac + .long 0x7ffb4479,0x3e7bc8e7 + .long 0x00000000,0x3fe8c13b + .long 0x237693b3,0x3e8c388f + .long 0x00000000,0x3fe8d4fa + .long 0x45fcf1a0,0x3e731cd4 + .long 0x00000000,0x3fe8f2a9 + .long 0xe4895b91,0x3e9fae07 + .long 0x00000000,0x3fe9106a + .long 0x42d2824e,0x3e7d140d + .long 0x00000000,0x3fe9244c + .long 0x39900f67,0x3e75c3c8 + .long 0x00000000,0x3fe9422e + .long 0xa314252b,0x3e902422 + .long 0x00000000,0x3fe96023 + .long 0xf2a6b8ef,0x3e7b9be8 + .long 0x00000000,0x3fe97427 + .long 0x1476f5e9,0x3e66b188 + .long 0x00000000,0x3fe9923d + .long 0xdde10a6f,0x3e93c377 + .long 0x00000000,0x3fe9b066 + .long 0x4944a32c,0x3e817cad + .long 0x00000000,0x3fe9c48d + .long 0xc738e7ef,0x3e9927f2 + .long 0x00000000,0x3fe9e2d7 + .long 0xd25cfd94,0x3e7ccc41 + .long 0x00000000,0x3fea0136 + .long 0x2210e81b,0x3e8382fa + .long 0x00000000,0x3fea1580 + .long 0x1e690ce2,0x3e7752a7 + .long 0x00000000,0x3fea3400 + .long 0x122315d2,0x3e94cfee + .long 0x00000000,0x3fea4860 + .long 0xce98333b,0x3e80536e + .long 0x00000000,0x3fea6702 + .long 0xc30f00e9,0x3e838b7e + .long 0x00000000,0x3fea7b79 + .long 0x05b0c779,0x3e9dc380 + .long 0x00000000,0x3fea9a3c + .long 0xdd6dd3fe,0x3e6be168 + .long 0x00000000,0x3feab915 + .long 0x26e0d276,0x3e966757 + .long 0x00000000,0x3feacdb0 + .long 0x0aad615c,0x3e880252 + .long 0x00000000,0x3feaecab + .long 0x7927096a,0x3e607c31 + .long 0x00000000,0x3feb015e + .long 0x53b3d90e,0x3e596513 + .long 0x00000000,0x3feb161a + .long 0x8f2f0570,0x3e90ec3a + .long 0x00000000,0x3feb3545 + .long 0x81193954,0x3e9cb640 + .long 0x00000000,0x3feb4a18 + .long 0x311e7236,0x3e936479 + .long 0x00000000,0x3feb6967 + .long 0x3a42a413,0x3e9210e8 + .long 0x00000000,0x3feb7e52 + .long 0x4a0daeb2,0x3e9a1717 + .long 0x00000000,0x3feb9dc4 + .long 0xce900653,0x3e925bb7 + .long 0x00000000,0x3febb2c7 + .long 0xb5087588,0x3e95dbb8 + .long 0x00000000,0x3febd25d + .long 0x4a41204c,0x3e8d0aa9 + .long 0x00000000,0x3febe778 + .long 0x69a0d774,0x3e9c772f + .long 0x00000000,0x3febfc9c + .long 0x79d0a9a5,0x3e97b6a0 + .long 0x00000000,0x3fec1c65 + .long 0xd26f1a12,0x3e8f7402 + .long 0x00000000,0x3fec31a2 + .long 0x1243bc84,0x3e4db2f1 + .long 0x00000000,0x3fec46e9 + .long 0x477e1755,0x3e80dcc2 + .long 0x00000000,0x3fec66e5 + .long 0xc2f904c1,0x3e8b1e31 + .long 0x00000000,0x3fec7c44 + .long 0x1785b0c4,0x3e8fb619 + .long 0x00000000,0x3fec91ad + .long 0xedb052ef,0x3e98832d + .long 0x00000000,0x3fecb1dd + .long 0x9e373618,0x3e98c822 + .long 0x00000000,0x3fecc75f + .long 0x32954637,0x3e9a46e7 + .long 0x00000000,0x3fecdceb + .long 0xf0e6b2a9,0x3e996305 + .long 0x00000000,0x3fecfd50 + .long 0x1a6614ee,0x3e68c160 + .long 0x00000000,0x3fed12f6 + .long 0x09e33b28,0x3e9229c4 + .long 0x00000000,0x3fed28a5 + .long 0xe53b994c,0x3e7f281b + .long 0x00000000,0x3fed3e5f + .long 0x1124ac35,0x3e9f27f3 + .long 0x00000000,0x3fed5f08 + .long 0x3d2fdc03,0x3e84e779 + .long 0x00000000,0x3fed74dc + .long 0x1e93fd97,0x3e416c07 + .long 0x00000000,0x3fed8aba + .long 0x91b415ef,0x3e654669 + .long 0x00000000,0x3feda0a2 + .long 0x6495f594,0x3e9712d4 + .long 0x00000000,0x3fedc191 + .long 0x40171789,0x3e9ca7b2 + .long 0x00000000,0x3fedd793 + .long 0xe8fc4323,0x3e929afa + .long 0x00000000,0x3fededa0 + .long 0xeb03bd09,0x3e9a2e96 + .long 0x00000000,0x3fee03b7 + .long 0xca370ea2,0x3e94a63d + .long 0x00000000,0x3fee19d9 + .long 0xe30512ec,0x3e6a3bcb + .long 0x00000000,0x3fee3006 + .long 0x411c95ce,0x3e99d3ed + .long 0x00000000,0x3fee515c + .long 0x35cfaf8e,0x3e3e5b57 + .long 0x00000000,0x3fee67a4 + .long 0x5669df6a,0x3e9fca71 + .long 0x00000000,0x3fee7df5 + .long 0x04f19d94,0x3e9914e2 + .long 0x00000000,0x3fee9452 + .long 0xcaa19134,0x3e8b511c + .long 0x00000000,0x3feeaaba + .long 0x4bb3bfb1,0x3e9ed72f + .long 0x00000000,0x3feec12c + .long 0x3c29d75e,0x3e8be8d6 + .long 0x00000000,0x3feed7aa + .long 0x97da24fd,0x3e9c55d9 + .long 0x00000000,0x3feeee32 + .long 0x983c68ea,0x3e7ddfb1 + .long 0x00000000,0x3fef1014 + .long 0xf4425883,0x3e83ce66 + .long 0x00000000,0x3fef26b8 + .long 0xf7857f23,0x3e9055c3 + .long 0x00000000,0x3fef3d67 + .long 0x2805b525,0x3e9c2223 + .long 0x00000000,0x3fef5421 + .long 0x0c347fcf,0x3e8d59ba + .long 0x00000000,0x3fef6ae7 + .long 0x7c901c44,0x3e82b110 + .long 0x00000000,0x3fef81b8 + .long 0x74d1b482,0x3e8b1394 + .long 0x00000000,0x3fef9894 + .long 0x36fb9eb2,0x3e9ca75b + .long 0x00000000,0x3fefaf7b + .long 0x629b1b7e,0x3e981a0a + .long 0x00000000,0x3fefc66e + .long 0x7b8c1116,0x3e54cc20 + .long 0x00000000,0x3fefdd6d + .long 0xc0babe05,0x3e99ac8b + .long 0x00000000,0x3feff476 + .type __dlog2_la___libm_log2_table_256,@object + .size __dlog2_la___libm_log2_table_256,4096 + .space 512, 0x00 + .align 64 + +__dlog2_la__P: + .long 3213235158 + .long 1050233568 + .long 1697350398 + .long 3219592519 + .long 3694740707 + .long 1071564553 + .long 1697260025 + .long 3218543943 + .long 2542794428 + .long 1070757746 + .long 2165113687 + .long 3217999640 + .long 0 + .long 1073157447 + .type __dlog2_la__P,@object + .size __dlog2_la__P,56 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core-avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core-avx2.S new file mode 100644 index 0000000000..234bf4750b --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core-avx2.S @@ -0,0 +1,20 @@ +/* AVX2 version of vectorized log2f. + 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_log2f _ZGVeN16v_log2f_avx2_wrapper +#include "../svml_s_log2f16_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core.c new file mode 100644 index 0000000000..abf4f04988 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core.c @@ -0,0 +1,28 @@ +/* Multiple versions of vectorized log2f, 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_log2f +#include "ifunc-mathvec-avx512-skx.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVeN16v_log2f, __GI__ZGVeN16v_log2f, + __redirect__ZGVeN16v_log2f) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core_avx512.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core_avx512.S new file mode 100644 index 0000000000..ff71272cd3 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f16_core_avx512.S @@ -0,0 +1,697 @@ +/* Function logf16 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 + * log2(x) = k - log2(Rcp) + poly_approximation(R) + * log2(Rcp) is tabulated + * + * + */ + +#include + + .text +ENTRY(_ZGVeN16v_log2f_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_slog2_data_internal_avx512(%rip), %zmm1 + vgetexpps {sae}, %zmm0, %zmm5 + +/* x<=0? */ + vfpclassps $94, %zmm0, %k0 + vsubps {rn-sae}, %zmm1, %zmm3, %zmm9 + vpsrld $19, %zmm3, %zmm7 + vgetexpps {sae}, %zmm3, %zmm6 + vpermps 64+__svml_slog2_data_internal_avx512(%rip), %zmm7, %zmm1 + vpermps 128+__svml_slog2_data_internal_avx512(%rip), %zmm7, %zmm2 + vpermps 192+__svml_slog2_data_internal_avx512(%rip), %zmm7, %zmm4 + vpermps 256+__svml_slog2_data_internal_avx512(%rip), %zmm7, %zmm8 + vsubps {rn-sae}, %zmm6, %zmm5, %zmm10 + vfmadd213ps {rn-sae}, %zmm2, %zmm9, %zmm1 + kmovw %k0, %edx + vfmadd213ps {rn-sae}, %zmm4, %zmm9, %zmm1 + vfmadd213ps {rn-sae}, %zmm8, %zmm9, %zmm1 + vfmadd213ps {rn-sae}, %zmm10, %zmm9, %zmm1 + testl %edx, %edx + jne .LBL_1_3 + +.LBL_1_2: + 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) + +.LBL_1_3: + vmovups %zmm0, 64(%rsp) + vmovups %zmm1, 128(%rsp) + je .LBL_1_2 + 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 + +.LBL_1_7: + btl %r12d, %r13d + jc .LBL_1_10 + +.LBL_1_8: + incl %r12d + cmpl $16, %r12d + jl .LBL_1_7 + 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 .LBL_1_2 + .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 + +.LBL_1_10: + lea 64(%rsp,%r12,4), %rdi + lea 128(%rsp,%r12,4), %rsi + call __svml_slog2_cout_rare_internal + jmp .LBL_1_8 + +END(_ZGVeN16v_log2f_skx) + + .align 16,0x90 + +__svml_slog2_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 2(%rdi), %edx + andl $32640, %edx + cmpl $32640, %edx + je .LBL_2_13 + movss (%rdi), %xmm2 + xorl %ecx, %ecx + pxor %xmm1, %xmm1 + movss %xmm2, -16(%rsp) + ucomiss %xmm1, %xmm2 + jp .LBL_2_3 + je .LBL_2_5 + +.LBL_2_3: + movzwl -14(%rsp), %edx + testl $32640, %edx + jne .LBL_2_5 + movss .FLT_76(%rip), %xmm0 + movl $-27, %ecx + mulss %xmm0, %xmm2 + movss %xmm2, -16(%rsp) + +.LBL_2_5: + comiss %xmm1, %xmm2 + jbe .LBL_2_9 + movaps %xmm2, %xmm1 + subss .FLT_90(%rip), %xmm1 + movss %xmm1, -20(%rsp) + andb $127, -17(%rsp) + movss -20(%rsp), %xmm0 + comiss .FLT_77(%rip), %xmm0 + jbe .LBL_2_8 + movzwl -14(%rsp), %edx + pxor %xmm8, %xmm8 + andl $32640, %edx + lea __slog2_la_CoutTab(%rip), %r10 + shrl $7, %edx + movss %xmm2, -20(%rsp) + movss .FLT_79(%rip), %xmm2 + movaps %xmm2, %xmm1 + movss .FLT_88(%rip), %xmm6 + lea -127(%rcx,%rdx), %r9d + movzwl -18(%rsp), %ecx + andl $-32641, %ecx + addl $16256, %ecx + movw %cx, -18(%rsp) + movss -20(%rsp), %xmm3 + movaps %xmm3, %xmm0 + addss %xmm3, %xmm1 + addss .FLT_78(%rip), %xmm0 + cvtsi2ss %r9d, %xmm8 + movss %xmm0, -24(%rsp) + movl -24(%rsp), %edi + movss %xmm1, -24(%rsp) + andl $127, %edi + movss -24(%rsp), %xmm7 + subss %xmm2, %xmm7 + lea (%rdi,%rdi,2), %r8d + movss (%r10,%r8,4), %xmm5 + subss %xmm7, %xmm3 + addss 4(%r10,%r8,4), %xmm8 + mulss %xmm5, %xmm7 + mulss %xmm3, %xmm5 + subss .FLT_80(%rip), %xmm7 + movaps %xmm7, %xmm4 + addss %xmm7, %xmm8 + addss %xmm5, %xmm4 + mulss %xmm4, %xmm6 + addss .FLT_87(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_86(%rip), %xmm6 + 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 %xmm4, %xmm6 + addss .FLT_81(%rip), %xmm6 + mulss %xmm6, %xmm7 + mulss %xmm5, %xmm6 + addss 8(%r10,%r8,4), %xmm6 + addss %xmm5, %xmm6 + addss %xmm6, %xmm7 + addss %xmm7, %xmm8 + movss %xmm8, (%rsi) + ret + +.LBL_2_8: + movss .FLT_80(%rip), %xmm0 + mulss %xmm0, %xmm1 + movss .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 .FLT_81(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss %xmm1, %xmm2 + movss %xmm2, (%rsi) + ret + +.LBL_2_9: + ucomiss %xmm1, %xmm2 + jp .LBL_2_10 + je .LBL_2_12 + +.LBL_2_10: + divss %xmm1, %xmm1 + movss %xmm1, (%rsi) + movl $1, %eax + ret + +.LBL_2_12: + movss .FLT_89(%rip), %xmm0 + movl $2, %eax + divss %xmm1, %xmm0 + movss %xmm0, (%rsi) + ret + +.LBL_2_13: + movb 3(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je .LBL_2_15 + +.LBL_2_14: + movss (%rdi), %xmm0 + mulss %xmm0, %xmm0 + movss %xmm0, (%rsi) + ret + +.LBL_2_15: + testl $8388607, (%rdi) + jne .LBL_2_14 + movl $1, %eax + pxor %xmm1, %xmm1 + pxor %xmm0, %xmm0 + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + + cfi_endproc + + .type __svml_slog2_cout_rare_internal,@function + .size __svml_slog2_cout_rare_internal,.-__svml_slog2_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_slog2_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 3198647882 + .long 3196759613 + .long 3194486322 + .long 3192115638 + .long 3190203785 + .long 3188646043 + .long 3187058849 + .long 3184933705 + .long 3210235473 + .long 3208544417 + .long 3207107312 + .long 3205878647 + .long 3204822309 + .long 3203370544 + .long 3201784975 + .long 3200401796 + .long 1056280844 + .long 1055933857 + .long 1055381630 + .long 1054718852 + .long 1054004959 + .long 1053277138 + .long 1052558383 + .long 1051862550 + .long 1049572249 + .long 1051796030 + .long 1053416266 + .long 1054571017 + .long 1055365658 + .long 1055881163 + .long 1056180132 + .long 1056311220 + .long 3208161588 + .long 3208150502 + .long 3208115952 + .long 3208053899 + .long 3207964810 + .long 3207851268 + .long 3207716694 + .long 3207564674 + .long 3208734740 + .long 3208490840 + .long 3208338440 + .long 3208247850 + .long 3208197907 + .long 3208173537 + .long 3208164045 + .long 3208161890 + .long 1069066811 + .long 1069066688 + .long 1069065960 + .long 1069064014 + .long 1069060299 + .long 1069054385 + .long 1069045976 + .long 1069034896 + .long 1069049182 + .long 1069058106 + .long 1069062890 + .long 1069065263 + .long 1069066312 + .long 1069066697 + .long 1069066799 + .long 1069066811 + .type __svml_slog2_data_internal_avx512,@object + .size __svml_slog2_data_internal_avx512,320 + .align 32 + +__slog2_la_CoutTab: + .long 1136175680 + .long 0 + .long 0 + .long 1135986583 + .long 1018822656 + .long 930849160 + .long 1135809305 + .long 1026916352 + .long 941737263 + .long 1135632026 + .long 1032306688 + .long 936581683 + .long 1135466566 + .long 1035100160 + .long 929197062 + .long 1135301106 + .long 1037934592 + .long 897678483 + .long 1135135647 + .long 1040498688 + .long 3059980496 + .long 1134982005 + .long 1041852416 + .long 908010313 + .long 1134828364 + .long 1043226624 + .long 3073739761 + .long 1134686541 + .long 1044510720 + .long 918631281 + .long 1134538809 + .long 1045868544 + .long 3062817788 + .long 1134402896 + .long 1047134208 + .long 3064656237 + .long 1134266982 + .long 1048416256 + .long 3029590737 + .long 1134131069 + .long 1049145856 + .long 903671587 + .long 1134001065 + .long 1049775616 + .long 911388989 + .long 1133876970 + .long 1050384896 + .long 3069885983 + .long 1133752875 + .long 1051001344 + .long 3037530952 + .long 1133634689 + .long 1051596288 + .long 3069922038 + .long 1133516503 + .long 1052198400 + .long 3070222063 + .long 1133404227 + .long 1052776960 + .long 919559368 + .long 1133291951 + .long 1053363200 + .long 840060372 + .long 1133185584 + .long 1053924864 + .long 915603033 + .long 1133079217 + .long 1054493184 + .long 921334924 + .long 1132978759 + .long 1055036416 + .long 896601826 + .long 1132872392 + .long 1055618048 + .long 908913293 + .long 1132777843 + .long 1056141312 + .long 3065728751 + .long 1132677386 + .long 1056702976 + .long 909020429 + .long 1132582837 + .long 1057101312 + .long 3048020321 + .long 1132494198 + .long 1057354752 + .long 3038815896 + .long 1132337219 + .long 1057628160 + .long 3068137421 + .long 1132159940 + .long 1057887232 + .long 3069993595 + .long 1131994480 + .long 1058131456 + .long 3054354312 + .long 1131817202 + .long 1058395904 + .long 910223436 + .long 1131651742 + .long 1058645504 + .long 3046952660 + .long 1131486282 + .long 1058897664 + .long 3057670844 + .long 1131332641 + .long 1059133952 + .long 924929721 + .long 1131178999 + .long 1059373056 + .long 3068093797 + .long 1131025358 + .long 1059614208 + .long 3058851683 + .long 1130871717 + .long 1059857920 + .long 3069897752 + .long 1130729894 + .long 1060084736 + .long 924446297 + .long 1130576253 + .long 1060333312 + .long 903058075 + .long 1130434430 + .long 1060564992 + .long 3052757441 + .long 1130304426 + .long 1060779264 + .long 3045479197 + .long 1130162603 + .long 1061015040 + .long 924699798 + .long 1130032599 + .long 1061233664 + .long 3070937808 + .long 1129890776 + .long 1061473792 + .long 925912756 + .long 1129772591 + .long 1061676032 + .long 923952205 + .long 1129642586 + .long 1061900544 + .long 906547304 + .long 1129512582 + .long 1062127104 + .long 3050351427 + .long 1129394397 + .long 1062334976 + .long 3070601694 + .long 1129276211 + .long 1062544384 + .long 900519722 + .long 1129158025 + .long 1062755840 + .long 3055774932 + .long 1129039840 + .long 1062969088 + .long 3053661845 + .long 1128921654 + .long 1063184384 + .long 3073448373 + .long 1128815287 + .long 1063379456 + .long 907090876 + .long 1128697101 + .long 1063598336 + .long 881051555 + .long 1128590734 + .long 1063796992 + .long 898320955 + .long 1128484367 + .long 1063997440 + .long 3068804107 + .long 1128378000 + .long 1064199168 + .long 923531617 + .long 1128283452 + .long 1064380416 + .long 3070994608 + .long 1128177085 + .long 1064585472 + .long 901920533 + .long 1128082536 + .long 1064769536 + .long 3071653428 + .long 1127976169 + .long 1064977920 + .long 903017594 + .long 1127881621 + .long 1065164800 + .long 911713416 + .long 1127787072 + .long 1065353216 + .long 0 + .long 1065353216 + .long 0 + .long 1207959616 + .long 1174405120 + .long 1002438656 + .long 1291845632 + .long 0 + .long 1065353216 + .long 1136175680 + .long 3212771328 + .long 3065082383 + .long 841219731 + .long 2913632803 + .long 691870088 + .long 2765780188 + .long 545377693 + .long 2619180638 + .type __slog2_la_CoutTab,@object + .size __slog2_la_CoutTab,848 + .align 4 + +.FLT_76: + .long 0x4d000000 + .type .FLT_76,@object + .size .FLT_76,4 + .align 4 + +.FLT_77: + .long 0x3bc00000 + .type .FLT_77,@object + .size .FLT_77,4 + .align 4 + +.FLT_78: + .long 0x48000040 + .type .FLT_78,@object + .size .FLT_78,4 + .align 4 + +.FLT_79: + .long 0x46000000 + .type .FLT_79,@object + .size .FLT_79,4 + .align 4 + +.FLT_80: + .long 0x43b8aa40 + .type .FLT_80,@object + .size .FLT_80,4 + .align 4 + +.FLT_81: + .long 0xbf7f0000 + .type .FLT_81,@object + .size .FLT_81,4 + .align 4 + +.FLT_82: + .long 0xb6b1720f + .type .FLT_82,@object + .size .FLT_82,4 + .align 4 + +.FLT_83: + .long 0x3223fe93 + .type .FLT_83,@object + .size .FLT_83,4 + .align 4 + +.FLT_84: + .long 0xadaa8223 + .type .FLT_84,@object + .size .FLT_84,4 + .align 4 + +.FLT_85: + .long 0x293d1988 + .type .FLT_85,@object + .size .FLT_85,4 + .align 4 + +.FLT_86: + .long 0xa4da74dc + .type .FLT_86,@object + .size .FLT_86,4 + .align 4 + +.FLT_87: + .long 0x2081cd9d + .type .FLT_87,@object + .size .FLT_87,4 + .align 4 + +.FLT_88: + .long 0x9c1d865e + .type .FLT_88,@object + .size .FLT_88,4 + .align 4 + +.FLT_89: + .long 0xbf800000 + .type .FLT_89,@object + .size .FLT_89,4 + .align 4 + +.FLT_90: + .long 0x3f800000 + .type .FLT_90,@object + .size .FLT_90,4 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core-sse2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core-sse2.S new file mode 100644 index 0000000000..dd0e763ac9 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core-sse2.S @@ -0,0 +1,20 @@ +/* SSE2 version of vectorized log2f, 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_log2f _ZGVbN4v_log2f_sse2 +#include "../svml_s_log2f4_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core.c new file mode 100644 index 0000000000..1eb68d9f52 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core.c @@ -0,0 +1,28 @@ +/* Multiple versions of vectorized log2f, 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_log2f +#include "ifunc-mathvec-sse4_1.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVbN4v_log2f, __GI__ZGVbN4v_log2f, + __redirect__ZGVbN4v_log2f) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core_sse4.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core_sse4.S new file mode 100644 index 0000000000..5ad661f63a --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f4_core_sse4.S @@ -0,0 +1,1795 @@ +/* Function logf4 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 + * log2(x) = k - log2(Rcp) + poly_approximation(R) + * log2(Rcp) is tabulated + * + * + */ + +#include + + .text +ENTRY(_ZGVbN4v_log2f_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, %xmm2 + +/* reduction: compute r,n */ + movdqu 1536+__svml_slog2_data_internal(%rip), %xmm4 + movaps %xmm2, %xmm3 + movdqu 1600+__svml_slog2_data_internal(%rip), %xmm1 + psubd %xmm4, %xmm3 + pand %xmm3, %xmm1 + movaps %xmm2, %xmm6 + paddd %xmm4, %xmm1 + movaps %xmm2, %xmm5 + cmpltps 1280+__svml_slog2_data_internal(%rip), %xmm6 + cmpnleps 1344+__svml_slog2_data_internal(%rip), %xmm5 + subps 1664+__svml_slog2_data_internal(%rip), %xmm1 + movups 1728+__svml_slog2_data_internal(%rip), %xmm7 + psrad $23, %xmm3 + mulps %xmm1, %xmm7 + orps %xmm5, %xmm6 + cvtdq2ps %xmm3, %xmm0 + +/* combine and get argument value range mask */ + movmskps %xmm6, %edx + addps 1744+__svml_slog2_data_internal(%rip), %xmm7 + movups 1760+__svml_slog2_data_internal(%rip), %xmm3 + movaps %xmm1, %xmm5 + mulps %xmm1, %xmm3 + mulps %xmm1, %xmm5 + addps 1776+__svml_slog2_data_internal(%rip), %xmm3 + mulps %xmm5, %xmm7 + movups 1792+__svml_slog2_data_internal(%rip), %xmm4 + addps %xmm7, %xmm3 + mulps %xmm1, %xmm4 + mulps %xmm5, %xmm3 + addps 1808+__svml_slog2_data_internal(%rip), %xmm4 + movups 1824+__svml_slog2_data_internal(%rip), %xmm6 + addps %xmm3, %xmm4 + mulps %xmm1, %xmm6 + mulps %xmm4, %xmm5 + addps 1840+__svml_slog2_data_internal(%rip), %xmm6 + addps %xmm5, %xmm6 + mulps %xmm1, %xmm6 + addps 1856+__svml_slog2_data_internal(%rip), %xmm6 + mulps %xmm6, %xmm1 + addps %xmm1, %xmm0 + testl %edx, %edx + jne .LBL_1_3 + +.LBL_1_2: + movq %rbp, %rsp + popq %rbp + cfi_def_cfa(7, 8) + cfi_restore(6) + ret + cfi_def_cfa(6, 16) + cfi_offset(6, -16) + +.LBL_1_3: + movups %xmm2, 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 + +.LBL_1_7: + btl %r12d, %r13d + jc .LBL_1_10 + +.LBL_1_8: + incl %r12d + cmpl $4, %r12d + jl .LBL_1_7 + 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 .LBL_1_2 + .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 + +.LBL_1_10: + lea 192(%rsp,%r12,4), %rdi + lea 256(%rsp,%r12,4), %rsi + call __svml_slog2_cout_rare_internal + jmp .LBL_1_8 + +END(_ZGVbN4v_log2f_sse4) + + .align 16,0x90 + +__svml_slog2_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 2(%rdi), %edx + andl $32640, %edx + cmpl $32640, %edx + je .LBL_2_13 + movss (%rdi), %xmm2 + xorl %ecx, %ecx + pxor %xmm1, %xmm1 + movss %xmm2, -16(%rsp) + ucomiss %xmm1, %xmm2 + jp .LBL_2_3 + je .LBL_2_5 + +.LBL_2_3: + movzwl -14(%rsp), %edx + testl $32640, %edx + jne .LBL_2_5 + movss .FLT_81(%rip), %xmm0 + movl $-27, %ecx + mulss %xmm0, %xmm2 + movss %xmm2, -16(%rsp) + +.LBL_2_5: + comiss %xmm1, %xmm2 + jbe .LBL_2_9 + movaps %xmm2, %xmm1 + subss .FLT_95(%rip), %xmm1 + movss %xmm1, -20(%rsp) + andb $127, -17(%rsp) + movss -20(%rsp), %xmm0 + comiss .FLT_82(%rip), %xmm0 + jbe .LBL_2_8 + movzwl -14(%rsp), %edx + pxor %xmm8, %xmm8 + andl $32640, %edx + lea __slog2_la_CoutTab(%rip), %r10 + shrl $7, %edx + movss %xmm2, -20(%rsp) + movss .FLT_84(%rip), %xmm2 + movaps %xmm2, %xmm1 + movss .FLT_93(%rip), %xmm6 + lea -127(%rcx,%rdx), %r9d + movzwl -18(%rsp), %ecx + andl $-32641, %ecx + addl $16256, %ecx + movw %cx, -18(%rsp) + movss -20(%rsp), %xmm3 + movaps %xmm3, %xmm0 + addss %xmm3, %xmm1 + addss .FLT_83(%rip), %xmm0 + cvtsi2ss %r9d, %xmm8 + movss %xmm0, -24(%rsp) + movl -24(%rsp), %edi + movss %xmm1, -24(%rsp) + andl $127, %edi + movss -24(%rsp), %xmm7 + subss %xmm2, %xmm7 + lea (%rdi,%rdi,2), %r8d + movss (%r10,%r8,4), %xmm5 + subss %xmm7, %xmm3 + addss 4(%r10,%r8,4), %xmm8 + mulss %xmm5, %xmm7 + mulss %xmm3, %xmm5 + subss .FLT_85(%rip), %xmm7 + movaps %xmm7, %xmm4 + addss %xmm7, %xmm8 + addss %xmm5, %xmm4 + mulss %xmm4, %xmm6 + addss .FLT_92(%rip), %xmm6 + 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 %xmm4, %xmm6 + addss .FLT_87(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_86(%rip), %xmm6 + mulss %xmm6, %xmm7 + mulss %xmm5, %xmm6 + addss 8(%r10,%r8,4), %xmm6 + addss %xmm5, %xmm6 + addss %xmm6, %xmm7 + addss %xmm7, %xmm8 + movss %xmm8, (%rsi) + ret + +.LBL_2_8: + movss .FLT_85(%rip), %xmm0 + mulss %xmm0, %xmm1 + movss .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 .FLT_87(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_86(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss %xmm1, %xmm2 + movss %xmm2, (%rsi) + ret + +.LBL_2_9: + ucomiss %xmm1, %xmm2 + jp .LBL_2_10 + je .LBL_2_12 + +.LBL_2_10: + divss %xmm1, %xmm1 + movss %xmm1, (%rsi) + movl $1, %eax + ret + +.LBL_2_12: + movss .FLT_94(%rip), %xmm0 + movl $2, %eax + divss %xmm1, %xmm0 + movss %xmm0, (%rsi) + ret + +.LBL_2_13: + movb 3(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je .LBL_2_15 + +.LBL_2_14: + movss (%rdi), %xmm0 + mulss %xmm0, %xmm0 + movss %xmm0, (%rsi) + ret + +.LBL_2_15: + testl $8388607, (%rdi) + jne .LBL_2_14 + movl $1, %eax + pxor %xmm1, %xmm1 + pxor %xmm0, %xmm0 + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + + cfi_endproc + + .type __svml_slog2_cout_rare_internal,@function + .size __svml_slog2_cout_rare_internal,.-__svml_slog2_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_slog2_data_internal: + .long 3271294976 + .long 0 + .long 3271296000 + .long 3068856281 + .long 3271297024 + .long 938219729 + .long 3271298032 + .long 3079617137 + .long 3271299040 + .long 3081795326 + .long 3271300048 + .long 931444511 + .long 3271301040 + .long 3086175556 + .long 3271302040 + .long 937684290 + .long 3271303024 + .long 895273824 + .long 3271304008 + .long 929322840 + .long 3271304984 + .long 914973210 + .long 3271305952 + .long 3085691485 + .long 3271306920 + .long 3082544936 + .long 3271307888 + .long 934225115 + .long 3271308840 + .long 3081631497 + .long 3271309792 + .long 3084279599 + .long 3271310744 + .long 919294098 + .long 3271311688 + .long 928328979 + .long 3271312624 + .long 3066585895 + .long 3271313560 + .long 926130568 + .long 3271314488 + .long 901156711 + .long 3271315416 + .long 937414789 + .long 3271316336 + .long 936653537 + .long 3271317248 + .long 3058814943 + .long 3271318160 + .long 906908118 + .long 3271319064 + .long 3081401871 + .long 3271319968 + .long 3072543999 + .long 3271320864 + .long 3085330685 + .long 3271321760 + .long 3075910590 + .long 3271322648 + .long 3085106206 + .long 3271323536 + .long 3072312054 + .long 3271324416 + .long 3082060466 + .long 3271325296 + .long 3055197447 + .long 3271326168 + .long 3076357858 + .long 3271327040 + .long 920345845 + .long 3271327904 + .long 3063129936 + .long 3271328768 + .long 930567858 + .long 3271329624 + .long 909272754 + .long 3271330480 + .long 933804198 + .long 3271331328 + .long 918737494 + .long 3271332176 + .long 934022681 + .long 3271333016 + .long 910479685 + .long 3271333856 + .long 929589825 + .long 3271334688 + .long 3070655175 + .long 3271335520 + .long 3053267575 + .long 3271336344 + .long 3086194926 + .long 3271337168 + .long 3085997978 + .long 3271337992 + .long 3045913777 + .long 3271338808 + .long 3069765616 + .long 3271339624 + .long 928672192 + .long 3271340432 + .long 3045522449 + .long 3271341240 + .long 926802639 + .long 3271342040 + .long 3074232411 + .long 3271342840 + .long 3070586333 + .long 3271343640 + .long 934318260 + .long 3271344432 + .long 930283614 + .long 3271345216 + .long 3085545791 + .long 3271346008 + .long 931477852 + .long 3271346792 + .long 935625357 + .long 3271347568 + .long 3065394803 + .long 3271348344 + .long 3072676686 + .long 3271349120 + .long 925303420 + .long 3271349888 + .long 3069367164 + .long 3271350656 + .long 3038632180 + .long 3271351424 + .long 939079119 + .long 3271352184 + .long 935075887 + .long 3271352936 + .long 3082666870 + .long 3271353696 + .long 931789803 + .long 3271354448 + .long 932303901 + .long 3271355192 + .long 3081224294 + .long 3271355944 + .long 937147770 + .long 3271356680 + .long 3085250212 + .long 3271357424 + .long 908073671 + .long 3271358896 + .long 918282152 + .long 3271360352 + .long 3084832095 + .long 3271361808 + .long 937397780 + .long 3271363240 + .long 3080772107 + .long 3271364672 + .long 932533526 + .long 3271366088 + .long 930047759 + .long 3271367496 + .long 939267269 + .long 3271368888 + .long 910438307 + .long 3271370272 + .long 3069366057 + .long 3271371648 + .long 3050426335 + .long 3271373016 + .long 933100185 + .long 3271374368 + .long 3070825219 + .long 3271375712 + .long 3082654716 + .long 3271377048 + .long 3084246816 + .long 3271378376 + .long 3080058411 + .long 3271379696 + .long 3041317981 + .long 3271381008 + .long 936455786 + .long 3271382304 + .long 3057542833 + .long 3271383592 + .long 3083404326 + .long 3271384880 + .long 934663588 + .long 3271386152 + .long 926575359 + .long 3271387416 + .long 915856538 + .long 3271388672 + .long 897695912 + .long 3271389920 + .long 3031263839 + .long 3271391160 + .long 3025798075 + .long 3271392392 + .long 889828954 + .long 3271393616 + .long 898229073 + .long 3271394832 + .long 890611612 + .long 3271396040 + .long 3051312165 + .long 3271397240 + .long 3067504579 + .long 3271398432 + .long 3077629370 + .long 3271399616 + .long 3084686401 + .long 3271400800 + .long 932711104 + .long 3271401968 + .long 3061957243 + .long 3271403136 + .long 938752650 + .long 3271404288 + .long 3065929605 + .long 3271405440 + .long 928849078 + .long 3271406584 + .long 935935277 + .long 3271407720 + .long 937106840 + .long 3271408848 + .long 933163291 + .long 3271409968 + .long 905515466 + .long 3271411080 + .long 3084390822 + .long 3271412192 + .long 3060235563 + .long 3271413296 + .long 921719712 + .long 3271414392 + .long 918076967 + .long 3271415480 + .long 3071716852 + .long 3271416568 + .long 936042212 + .long 3271417640 + .long 3079912717 + .long 3271418712 + .long 3075951191 + .long 3271419776 + .long 3082895478 + .long 3271420840 + .long 927873550 + .long 3271421888 + .long 3086405181 + .long 3271422936 + .long 3084857775 + .long 3271423984 + .long 933876987 + .long 3271425016 + .long 3074395466 + .long 3271426048 + .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 1042663530 + .long 1042663530 + .long 1042663530 + .long 1042663530 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 996988896 + .long 996988896 + .long 996988896 + .long 996988896 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1006632960 + .long 1006632960 + .long 1006632960 + .long 1006632960 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1069023232 + .long 1069023232 + .long 1069023232 + .long 1069023232 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1045774354 + .long 1045774354 + .long 1045774354 + .long 1045774354 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1051385883 + .long 1051385883 + .long 1051385883 + .long 1051385883 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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_slog2_data_internal,@object + .size __svml_slog2_data_internal,2240 + .align 32 + +__slog2_la_CoutTab: + .long 1136175680 + .long 0 + .long 0 + .long 1135986583 + .long 1018822656 + .long 930849160 + .long 1135809305 + .long 1026916352 + .long 941737263 + .long 1135632026 + .long 1032306688 + .long 936581683 + .long 1135466566 + .long 1035100160 + .long 929197062 + .long 1135301106 + .long 1037934592 + .long 897678483 + .long 1135135647 + .long 1040498688 + .long 3059980496 + .long 1134982005 + .long 1041852416 + .long 908010313 + .long 1134828364 + .long 1043226624 + .long 3073739761 + .long 1134686541 + .long 1044510720 + .long 918631281 + .long 1134538809 + .long 1045868544 + .long 3062817788 + .long 1134402896 + .long 1047134208 + .long 3064656237 + .long 1134266982 + .long 1048416256 + .long 3029590737 + .long 1134131069 + .long 1049145856 + .long 903671587 + .long 1134001065 + .long 1049775616 + .long 911388989 + .long 1133876970 + .long 1050384896 + .long 3069885983 + .long 1133752875 + .long 1051001344 + .long 3037530952 + .long 1133634689 + .long 1051596288 + .long 3069922038 + .long 1133516503 + .long 1052198400 + .long 3070222063 + .long 1133404227 + .long 1052776960 + .long 919559368 + .long 1133291951 + .long 1053363200 + .long 840060372 + .long 1133185584 + .long 1053924864 + .long 915603033 + .long 1133079217 + .long 1054493184 + .long 921334924 + .long 1132978759 + .long 1055036416 + .long 896601826 + .long 1132872392 + .long 1055618048 + .long 908913293 + .long 1132777843 + .long 1056141312 + .long 3065728751 + .long 1132677386 + .long 1056702976 + .long 909020429 + .long 1132582837 + .long 1057101312 + .long 3048020321 + .long 1132494198 + .long 1057354752 + .long 3038815896 + .long 1132337219 + .long 1057628160 + .long 3068137421 + .long 1132159940 + .long 1057887232 + .long 3069993595 + .long 1131994480 + .long 1058131456 + .long 3054354312 + .long 1131817202 + .long 1058395904 + .long 910223436 + .long 1131651742 + .long 1058645504 + .long 3046952660 + .long 1131486282 + .long 1058897664 + .long 3057670844 + .long 1131332641 + .long 1059133952 + .long 924929721 + .long 1131178999 + .long 1059373056 + .long 3068093797 + .long 1131025358 + .long 1059614208 + .long 3058851683 + .long 1130871717 + .long 1059857920 + .long 3069897752 + .long 1130729894 + .long 1060084736 + .long 924446297 + .long 1130576253 + .long 1060333312 + .long 903058075 + .long 1130434430 + .long 1060564992 + .long 3052757441 + .long 1130304426 + .long 1060779264 + .long 3045479197 + .long 1130162603 + .long 1061015040 + .long 924699798 + .long 1130032599 + .long 1061233664 + .long 3070937808 + .long 1129890776 + .long 1061473792 + .long 925912756 + .long 1129772591 + .long 1061676032 + .long 923952205 + .long 1129642586 + .long 1061900544 + .long 906547304 + .long 1129512582 + .long 1062127104 + .long 3050351427 + .long 1129394397 + .long 1062334976 + .long 3070601694 + .long 1129276211 + .long 1062544384 + .long 900519722 + .long 1129158025 + .long 1062755840 + .long 3055774932 + .long 1129039840 + .long 1062969088 + .long 3053661845 + .long 1128921654 + .long 1063184384 + .long 3073448373 + .long 1128815287 + .long 1063379456 + .long 907090876 + .long 1128697101 + .long 1063598336 + .long 881051555 + .long 1128590734 + .long 1063796992 + .long 898320955 + .long 1128484367 + .long 1063997440 + .long 3068804107 + .long 1128378000 + .long 1064199168 + .long 923531617 + .long 1128283452 + .long 1064380416 + .long 3070994608 + .long 1128177085 + .long 1064585472 + .long 901920533 + .long 1128082536 + .long 1064769536 + .long 3071653428 + .long 1127976169 + .long 1064977920 + .long 903017594 + .long 1127881621 + .long 1065164800 + .long 911713416 + .long 1127787072 + .long 1065353216 + .long 0 + .long 1065353216 + .long 0 + .long 1207959616 + .long 1174405120 + .long 1002438656 + .long 1291845632 + .long 0 + .long 1065353216 + .long 1136175680 + .long 3212771328 + .long 3065082383 + .long 841219731 + .long 2913632803 + .long 691870088 + .long 2765780188 + .long 545377693 + .long 2619180638 + .type __slog2_la_CoutTab,@object + .size __slog2_la_CoutTab,848 + .align 4 + +.FLT_81: + .long 0x4d000000 + .type .FLT_81,@object + .size .FLT_81,4 + .align 4 + +.FLT_82: + .long 0x3bc00000 + .type .FLT_82,@object + .size .FLT_82,4 + .align 4 + +.FLT_83: + .long 0x48000040 + .type .FLT_83,@object + .size .FLT_83,4 + .align 4 + +.FLT_84: + .long 0x46000000 + .type .FLT_84,@object + .size .FLT_84,4 + .align 4 + +.FLT_85: + .long 0x43b8aa40 + .type .FLT_85,@object + .size .FLT_85,4 + .align 4 + +.FLT_86: + .long 0xbf7f0000 + .type .FLT_86,@object + .size .FLT_86,4 + .align 4 + +.FLT_87: + .long 0xb6b1720f + .type .FLT_87,@object + .size .FLT_87,4 + .align 4 + +.FLT_88: + .long 0x3223fe93 + .type .FLT_88,@object + .size .FLT_88,4 + .align 4 + +.FLT_89: + .long 0xadaa8223 + .type .FLT_89,@object + .size .FLT_89,4 + .align 4 + +.FLT_90: + .long 0x293d1988 + .type .FLT_90,@object + .size .FLT_90,4 + .align 4 + +.FLT_91: + .long 0xa4da74dc + .type .FLT_91,@object + .size .FLT_91,4 + .align 4 + +.FLT_92: + .long 0x2081cd9d + .type .FLT_92,@object + .size .FLT_92,4 + .align 4 + +.FLT_93: + .long 0x9c1d865e + .type .FLT_93,@object + .size .FLT_93,4 + .align 4 + +.FLT_94: + .long 0xbf800000 + .type .FLT_94,@object + .size .FLT_94,4 + .align 4 + +.FLT_95: + .long 0x3f800000 + .type .FLT_95,@object + .size .FLT_95,4 diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core-sse.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core-sse.S new file mode 100644 index 0000000000..ec4b70568d --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core-sse.S @@ -0,0 +1,20 @@ +/* SSE version of vectorized log2f, 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_log2f _ZGVdN8v_log2f_sse_wrapper +#include "../svml_s_log2f8_core.S" diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core.c b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core.c new file mode 100644 index 0000000000..b3e958021a --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core.c @@ -0,0 +1,28 @@ +/* Multiple versions of vectorized log2f, 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_log2f +#include "ifunc-mathvec-avx2.h" + +libc_ifunc_redirected (REDIRECT_NAME, SYMBOL_NAME, IFUNC_SELECTOR ()); + +#ifdef SHARED +__hidden_ver1 (_ZGVdN8v_log2f, __GI__ZGVdN8v_log2f, + __redirect__ZGVdN8v_log2f) + __attribute__ ((visibility ("hidden"))); +#endif diff --git a/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core_avx2.S b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core_avx2.S new file mode 100644 index 0000000000..ad01449e72 --- /dev/null +++ b/sysdeps/x86_64/fpu/multiarch/svml_s_log2f8_core_avx2.S @@ -0,0 +1,1727 @@ +/* Function logf8 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 + * log2(x) = k - log2(Rcp) + poly_approximation(R) + * log2(Rcp) is tabulated + * + * + */ + +#include + + .text +ENTRY(_ZGVdN8v_log2f_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 1600+__svml_slog2_data_internal(%rip), %ymm4 + vmovups %ymm15, 320(%rsp) + vmovups %ymm14, 288(%rsp) + vmovups %ymm13, 256(%rsp) + vmovups %ymm12, 224(%rsp) + vmovups %ymm11, 192(%rsp) + vmovups %ymm10, 160(%rsp) + vmovups %ymm9, 96(%rsp) + vmovups %ymm8, 32(%rsp) + vpsubd %ymm4, %ymm0, %ymm1 + vcmplt_oqps 1344+__svml_slog2_data_internal(%rip), %ymm0, %ymm5 + vcmpnle_uqps 1408+__svml_slog2_data_internal(%rip), %ymm0, %ymm6 + vpand 1664+__svml_slog2_data_internal(%rip), %ymm1, %ymm3 + vpsrad $23, %ymm1, %ymm2 + vmovups 1984+__svml_slog2_data_internal(%rip), %ymm1 + vpaddd %ymm4, %ymm3, %ymm3 + vmovups 1856+__svml_slog2_data_internal(%rip), %ymm4 + vcvtdq2ps %ymm2, %ymm2 + vorps %ymm6, %ymm5, %ymm7 + +/* combine and get argument value range mask */ + vmovmskps %ymm7, %edx + vsubps 1728+__svml_slog2_data_internal(%rip), %ymm3, %ymm7 + vmovups 1792+__svml_slog2_data_internal(%rip), %ymm3 + vmovups 1920+__svml_slog2_data_internal(%rip), %ymm5 + vfmadd213ps 1888+__svml_slog2_data_internal(%rip), %ymm7, %ymm4 + vmulps %ymm7, %ymm7, %ymm6 + vfmadd213ps 2016+__svml_slog2_data_internal(%rip), %ymm7, %ymm1 + vfmadd213ps 1824+__svml_slog2_data_internal(%rip), %ymm7, %ymm3 + vfmadd213ps 1952+__svml_slog2_data_internal(%rip), %ymm7, %ymm5 + vfmadd213ps %ymm4, %ymm6, %ymm3 + vfmadd213ps %ymm5, %ymm6, %ymm3 + vfmadd213ps %ymm1, %ymm6, %ymm3 + vfmadd213ps 2048+__svml_slog2_data_internal(%rip), %ymm7, %ymm3 + vfmadd213ps %ymm2, %ymm7, %ymm3 + testl %edx, %edx + jne .LBL_1_3 + .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 + +.LBL_1_2: + 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) + vmovaps %ymm3, %ymm0 + 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 + +.LBL_1_3: + vmovups %ymm0, 64(%rsp) + vmovups %ymm3, 128(%rsp) + je .LBL_1_2 + 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 + +.LBL_1_7: + btl %r12d, %r13d + jc .LBL_1_10 + +.LBL_1_8: + incl %r12d + cmpl $8, %r12d + jl .LBL_1_7 + 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), %ymm3 + jmp .LBL_1_2 + .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 + +.LBL_1_10: + lea 64(%rsp,%r12,4), %rdi + lea 128(%rsp,%r12,4), %rsi + call __svml_slog2_cout_rare_internal + jmp .LBL_1_8 + +END(_ZGVdN8v_log2f_avx2) + + .align 16,0x90 + +__svml_slog2_cout_rare_internal: + + cfi_startproc + + xorl %eax, %eax + movzwl 2(%rdi), %edx + andl $32640, %edx + cmpl $32640, %edx + je .LBL_2_13 + movss (%rdi), %xmm2 + xorl %ecx, %ecx + pxor %xmm1, %xmm1 + movss %xmm2, -16(%rsp) + ucomiss %xmm1, %xmm2 + jp .LBL_2_3 + je .LBL_2_5 + +.LBL_2_3: + movzwl -14(%rsp), %edx + testl $32640, %edx + jne .LBL_2_5 + movss .FLT_81(%rip), %xmm0 + movl $-27, %ecx + mulss %xmm0, %xmm2 + movss %xmm2, -16(%rsp) + +.LBL_2_5: + comiss %xmm1, %xmm2 + jbe .LBL_2_9 + movaps %xmm2, %xmm1 + subss .FLT_95(%rip), %xmm1 + movss %xmm1, -20(%rsp) + andb $127, -17(%rsp) + movss -20(%rsp), %xmm0 + comiss .FLT_82(%rip), %xmm0 + jbe .LBL_2_8 + movzwl -14(%rsp), %edx + pxor %xmm8, %xmm8 + andl $32640, %edx + lea __slog2_la_CoutTab(%rip), %r10 + shrl $7, %edx + movss %xmm2, -20(%rsp) + movss .FLT_84(%rip), %xmm2 + movaps %xmm2, %xmm1 + movss .FLT_93(%rip), %xmm6 + lea -127(%rcx,%rdx), %r9d + movzwl -18(%rsp), %ecx + andl $-32641, %ecx + addl $16256, %ecx + movw %cx, -18(%rsp) + movss -20(%rsp), %xmm3 + movaps %xmm3, %xmm0 + addss %xmm3, %xmm1 + addss .FLT_83(%rip), %xmm0 + cvtsi2ss %r9d, %xmm8 + movss %xmm0, -24(%rsp) + movl -24(%rsp), %edi + movss %xmm1, -24(%rsp) + andl $127, %edi + movss -24(%rsp), %xmm7 + subss %xmm2, %xmm7 + lea (%rdi,%rdi,2), %r8d + movss (%r10,%r8,4), %xmm5 + subss %xmm7, %xmm3 + addss 4(%r10,%r8,4), %xmm8 + mulss %xmm5, %xmm7 + mulss %xmm3, %xmm5 + subss .FLT_85(%rip), %xmm7 + movaps %xmm7, %xmm4 + addss %xmm7, %xmm8 + addss %xmm5, %xmm4 + mulss %xmm4, %xmm6 + addss .FLT_92(%rip), %xmm6 + 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 %xmm4, %xmm6 + addss .FLT_87(%rip), %xmm6 + mulss %xmm4, %xmm6 + addss .FLT_86(%rip), %xmm6 + mulss %xmm6, %xmm7 + mulss %xmm5, %xmm6 + addss 8(%r10,%r8,4), %xmm6 + addss %xmm5, %xmm6 + addss %xmm6, %xmm7 + addss %xmm7, %xmm8 + movss %xmm8, (%rsi) + ret + +.LBL_2_8: + movss .FLT_85(%rip), %xmm0 + mulss %xmm0, %xmm1 + movss .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 .FLT_87(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss .FLT_86(%rip), %xmm2 + mulss %xmm1, %xmm2 + addss %xmm1, %xmm2 + movss %xmm2, (%rsi) + ret + +.LBL_2_9: + ucomiss %xmm1, %xmm2 + jp .LBL_2_10 + je .LBL_2_12 + +.LBL_2_10: + divss %xmm1, %xmm1 + movss %xmm1, (%rsi) + movl $1, %eax + ret + +.LBL_2_12: + movss .FLT_94(%rip), %xmm0 + movl $2, %eax + divss %xmm1, %xmm0 + movss %xmm0, (%rsi) + ret + +.LBL_2_13: + movb 3(%rdi), %dl + andb $-128, %dl + cmpb $-128, %dl + je .LBL_2_15 + +.LBL_2_14: + movss (%rdi), %xmm0 + mulss %xmm0, %xmm0 + movss %xmm0, (%rsi) + ret + +.LBL_2_15: + testl $8388607, (%rdi) + jne .LBL_2_14 + movl $1, %eax + pxor %xmm1, %xmm1 + pxor %xmm0, %xmm0 + divss %xmm0, %xmm1 + movss %xmm1, (%rsi) + ret + + cfi_endproc + + .type __svml_slog2_cout_rare_internal,@function + .size __svml_slog2_cout_rare_internal,.-__svml_slog2_cout_rare_internal + + .section .rodata, "a" + .align 64 + +__svml_slog2_data_internal: + .long 3271294976 + .long 0 + .long 3271296000 + .long 3068856281 + .long 3271297024 + .long 938219729 + .long 3271298032 + .long 3079617137 + .long 3271299040 + .long 3081795326 + .long 3271300048 + .long 931444511 + .long 3271301040 + .long 3086175556 + .long 3271302040 + .long 937684290 + .long 3271303024 + .long 895273824 + .long 3271304008 + .long 929322840 + .long 3271304984 + .long 914973210 + .long 3271305952 + .long 3085691485 + .long 3271306920 + .long 3082544936 + .long 3271307888 + .long 934225115 + .long 3271308840 + .long 3081631497 + .long 3271309792 + .long 3084279599 + .long 3271310744 + .long 919294098 + .long 3271311688 + .long 928328979 + .long 3271312624 + .long 3066585895 + .long 3271313560 + .long 926130568 + .long 3271314488 + .long 901156711 + .long 3271315416 + .long 937414789 + .long 3271316336 + .long 936653537 + .long 3271317248 + .long 3058814943 + .long 3271318160 + .long 906908118 + .long 3271319064 + .long 3081401871 + .long 3271319968 + .long 3072543999 + .long 3271320864 + .long 3085330685 + .long 3271321760 + .long 3075910590 + .long 3271322648 + .long 3085106206 + .long 3271323536 + .long 3072312054 + .long 3271324416 + .long 3082060466 + .long 3271325296 + .long 3055197447 + .long 3271326168 + .long 3076357858 + .long 3271327040 + .long 920345845 + .long 3271327904 + .long 3063129936 + .long 3271328768 + .long 930567858 + .long 3271329624 + .long 909272754 + .long 3271330480 + .long 933804198 + .long 3271331328 + .long 918737494 + .long 3271332176 + .long 934022681 + .long 3271333016 + .long 910479685 + .long 3271333856 + .long 929589825 + .long 3271334688 + .long 3070655175 + .long 3271335520 + .long 3053267575 + .long 3271336344 + .long 3086194926 + .long 3271337168 + .long 3085997978 + .long 3271337992 + .long 3045913777 + .long 3271338808 + .long 3069765616 + .long 3271339624 + .long 928672192 + .long 3271340432 + .long 3045522449 + .long 3271341240 + .long 926802639 + .long 3271342040 + .long 3074232411 + .long 3271342840 + .long 3070586333 + .long 3271343640 + .long 934318260 + .long 3271344432 + .long 930283614 + .long 3271345216 + .long 3085545791 + .long 3271346008 + .long 931477852 + .long 3271346792 + .long 935625357 + .long 3271347568 + .long 3065394803 + .long 3271348344 + .long 3072676686 + .long 3271349120 + .long 925303420 + .long 3271349888 + .long 3069367164 + .long 3271350656 + .long 3038632180 + .long 3271351424 + .long 939079119 + .long 3271352184 + .long 935075887 + .long 3271352936 + .long 3082666870 + .long 3271353696 + .long 931789803 + .long 3271354448 + .long 932303901 + .long 3271355192 + .long 3081224294 + .long 3271355944 + .long 937147770 + .long 3271356680 + .long 3085250212 + .long 3271357424 + .long 908073671 + .long 3271358896 + .long 918282152 + .long 3271360352 + .long 3084832095 + .long 3271361808 + .long 937397780 + .long 3271363240 + .long 3080772107 + .long 3271364672 + .long 932533526 + .long 3271366088 + .long 930047759 + .long 3271367496 + .long 939267269 + .long 3271368888 + .long 910438307 + .long 3271370272 + .long 3069366057 + .long 3271371648 + .long 3050426335 + .long 3271373016 + .long 933100185 + .long 3271374368 + .long 3070825219 + .long 3271375712 + .long 3082654716 + .long 3271377048 + .long 3084246816 + .long 3271378376 + .long 3080058411 + .long 3271379696 + .long 3041317981 + .long 3271381008 + .long 936455786 + .long 3271382304 + .long 3057542833 + .long 3271383592 + .long 3083404326 + .long 3271384880 + .long 934663588 + .long 3271386152 + .long 926575359 + .long 3271387416 + .long 915856538 + .long 3271388672 + .long 897695912 + .long 3271389920 + .long 3031263839 + .long 3271391160 + .long 3025798075 + .long 3271392392 + .long 889828954 + .long 3271393616 + .long 898229073 + .long 3271394832 + .long 890611612 + .long 3271396040 + .long 3051312165 + .long 3271397240 + .long 3067504579 + .long 3271398432 + .long 3077629370 + .long 3271399616 + .long 3084686401 + .long 3271400800 + .long 932711104 + .long 3271401968 + .long 3061957243 + .long 3271403136 + .long 938752650 + .long 3271404288 + .long 3065929605 + .long 3271405440 + .long 928849078 + .long 3271406584 + .long 935935277 + .long 3271407720 + .long 937106840 + .long 3271408848 + .long 933163291 + .long 3271409968 + .long 905515466 + .long 3271411080 + .long 3084390822 + .long 3271412192 + .long 3060235563 + .long 3271413296 + .long 921719712 + .long 3271414392 + .long 918076967 + .long 3271415480 + .long 3071716852 + .long 3271416568 + .long 936042212 + .long 3271417640 + .long 3079912717 + .long 3271418712 + .long 3075951191 + .long 3271419776 + .long 3082895478 + .long 3271420840 + .long 927873550 + .long 3271421888 + .long 3086405181 + .long 3271422936 + .long 3084857775 + .long 3271423984 + .long 933876987 + .long 3271425016 + .long 3074395466 + .long 3271426048 + .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 1042663530 + .long 1042663530 + .long 1042663530 + .long 1042663530 + .long 1042663530 + .long 1042663530 + .long 1042663530 + .long 1042663530 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 3199384460 + .long 996988896 + .long 996988896 + .long 996988896 + .long 996988896 + .long 996988896 + .long 996988896 + .long 996988896 + .long 996988896 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1006632960 + .long 1006632960 + .long 1006632960 + .long 1006632960 + .long 1006632960 + .long 1006632960 + .long 1006632960 + .long 1006632960 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1069023232 + .long 1069023232 + .long 1069023232 + .long 1069023232 + .long 1069023232 + .long 1069023232 + .long 1069023232 + .long 1069023232 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1045774354 + .long 1045774354 + .long 1045774354 + .long 1045774354 + .long 1045774354 + .long 1045774354 + .long 1045774354 + .long 1045774354 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 3194195476 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 1045259787 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 3195172900 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 1049877767 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 3199777129 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 1056323520 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 3208161835 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .long 1069066811 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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 1051385883 + .long 1051385883 + .long 1051385883 + .long 1051385883 + .long 1051385883 + .long 1051385883 + .long 1051385883 + .long 1051385883 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 3201001580 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 1056242241 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 3208144266 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .long 1069066989 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .byte 0 + .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_slog2_data_internal,@object + .size __svml_slog2_data_internal,2496 + .align 32 + +__slog2_la_CoutTab: + .long 1136175680 + .long 0 + .long 0 + .long 1135986583 + .long 1018822656 + .long 930849160 + .long 1135809305 + .long 1026916352 + .long 941737263 + .long 1135632026 + .long 1032306688 + .long 936581683 + .long 1135466566 + .long 1035100160 + .long 929197062 + .long 1135301106 + .long 1037934592 + .long 897678483 + .long 1135135647 + .long 1040498688 + .long 3059980496 + .long 1134982005 + .long 1041852416 + .long 908010313 + .long 1134828364 + .long 1043226624 + .long 3073739761 + .long 1134686541 + .long 1044510720 + .long 918631281 + .long 1134538809 + .long 1045868544 + .long 3062817788 + .long 1134402896 + .long 1047134208 + .long 3064656237 + .long 1134266982 + .long 1048416256 + .long 3029590737 + .long 1134131069 + .long 1049145856 + .long 903671587 + .long 1134001065 + .long 1049775616 + .long 911388989 + .long 1133876970 + .long 1050384896 + .long 3069885983 + .long 1133752875 + .long 1051001344 + .long 3037530952 + .long 1133634689 + .long 1051596288 + .long 3069922038 + .long 1133516503 + .long 1052198400 + .long 3070222063 + .long 1133404227 + .long 1052776960 + .long 919559368 + .long 1133291951 + .long 1053363200 + .long 840060372 + .long 1133185584 + .long 1053924864 + .long 915603033 + .long 1133079217 + .long 1054493184 + .long 921334924 + .long 1132978759 + .long 1055036416 + .long 896601826 + .long 1132872392 + .long 1055618048 + .long 908913293 + .long 1132777843 + .long 1056141312 + .long 3065728751 + .long 1132677386 + .long 1056702976 + .long 909020429 + .long 1132582837 + .long 1057101312 + .long 3048020321 + .long 1132494198 + .long 1057354752 + .long 3038815896 + .long 1132337219 + .long 1057628160 + .long 3068137421 + .long 1132159940 + .long 1057887232 + .long 3069993595 + .long 1131994480 + .long 1058131456 + .long 3054354312 + .long 1131817202 + .long 1058395904 + .long 910223436 + .long 1131651742 + .long 1058645504 + .long 3046952660 + .long 1131486282 + .long 1058897664 + .long 3057670844 + .long 1131332641 + .long 1059133952 + .long 924929721 + .long 1131178999 + .long 1059373056 + .long 3068093797 + .long 1131025358 + .long 1059614208 + .long 3058851683 + .long 1130871717 + .long 1059857920 + .long 3069897752 + .long 1130729894 + .long 1060084736 + .long 924446297 + .long 1130576253 + .long 1060333312 + .long 903058075 + .long 1130434430 + .long 1060564992 + .long 3052757441 + .long 1130304426 + .long 1060779264 + .long 3045479197 + .long 1130162603 + .long 1061015040 + .long 924699798 + .long 1130032599 + .long 1061233664 + .long 3070937808 + .long 1129890776 + .long 1061473792 + .long 925912756 + .long 1129772591 + .long 1061676032 + .long 923952205 + .long 1129642586 + .long 1061900544 + .long 906547304 + .long 1129512582 + .long 1062127104 + .long 3050351427 + .long 1129394397 + .long 1062334976 + .long 3070601694 + .long 1129276211 + .long 1062544384 + .long 900519722 + .long 1129158025 + .long 1062755840 + .long 3055774932 + .long 1129039840 + .long 1062969088 + .long 3053661845 + .long 1128921654 + .long 1063184384 + .long 3073448373 + .long 1128815287 + .long 1063379456 + .long 907090876 + .long 1128697101 + .long 1063598336 + .long 881051555 + .long 1128590734 + .long 1063796992 + .long 898320955 + .long 1128484367 + .long 1063997440 + .long 3068804107 + .long 1128378000 + .long 1064199168 + .long 923531617 + .long 1128283452 + .long 1064380416 + .long 3070994608 + .long 1128177085 + .long 1064585472 + .long 901920533 + .long 1128082536 + .long 1064769536 + .long 3071653428 + .long 1127976169 + .long 1064977920 + .long 903017594 + .long 1127881621 + .long 1065164800 + .long 911713416 + .long 1127787072 + .long 1065353216 + .long 0 + .long 1065353216 + .long 0 + .long 1207959616 + .long 1174405120 + .long 1002438656 + .long 1291845632 + .long 0 + .long 1065353216 + .long 1136175680 + .long 3212771328 + .long 3065082383 + .long 841219731 + .long 2913632803 + .long 691870088 + .long 2765780188 + .long 545377693 + .long 2619180638 + .type __slog2_la_CoutTab,@object + .size __slog2_la_CoutTab,848 + .align 4 + +.FLT_81: + .long 0x4d000000 + .type .FLT_81,@object + .size .FLT_81,4 + .align 4 + +.FLT_82: + .long 0x3bc00000 + .type .FLT_82,@object + .size .FLT_82,4 + .align 4 + +.FLT_83: + .long 0x48000040 + .type .FLT_83,@object + .size .FLT_83,4 + .align 4 + +.FLT_84: + .long 0x46000000 + .type .FLT_84,@object + .size .FLT_84,4 + .align 4 + +.FLT_85: + .long 0x43b8aa40 + .type .FLT_85,@object + .size .FLT_85,4 + .align 4 + +.FLT_86: + .long 0xbf7f0000 + .type .FLT_86,@object + .size .FLT_86,4 + .align 4 + +.FLT_87: + .long 0xb6b1720f + .type .FLT_87,@object + .size .FLT_87,4 + .align 4 + +.FLT_88: + .long 0x3223fe93 + .type .FLT_88,@object + .size .FLT_88,4 + .align 4 + +.FLT_89: + .long 0xadaa8223 + .type .FLT_89,@object + .size .FLT_89,4 + .align 4 + +.FLT_90: + .long 0x293d1988 + .type .FLT_90,@object + .size .FLT_90,4 + .align 4 + +.FLT_91: + .long 0xa4da74dc + .type .FLT_91,@object + .size .FLT_91,4 + .align 4 + +.FLT_92: + .long 0x2081cd9d + .type .FLT_92,@object + .size .FLT_92,4 + .align 4 + +.FLT_93: + .long 0x9c1d865e + .type .FLT_93,@object + .size .FLT_93,4 + .align 4 + +.FLT_94: + .long 0xbf800000 + .type .FLT_94,@object + .size .FLT_94,4 + .align 4 + +.FLT_95: + .long 0x3f800000 + .type .FLT_95,@object + .size .FLT_95,4 diff --git a/sysdeps/x86_64/fpu/svml_d_log22_core.S b/sysdeps/x86_64/fpu/svml_d_log22_core.S new file mode 100644 index 0000000000..f181a62c7d --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log22_core.S @@ -0,0 +1,29 @@ +/* Function log2 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_log2) +WRAPPER_IMPL_SSE2 log2 +END (_ZGVbN2v_log2) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVbN2v_log2) +#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log24_core.S b/sysdeps/x86_64/fpu/svml_d_log24_core.S new file mode 100644 index 0000000000..b0a5aa9532 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log24_core.S @@ -0,0 +1,29 @@ +/* Function log2 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_log2) +WRAPPER_IMPL_AVX _ZGVbN2v_log2 +END (_ZGVdN4v_log2) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVdN4v_log2) +#endif diff --git a/sysdeps/x86_64/fpu/svml_d_log24_core_avx.S b/sysdeps/x86_64/fpu/svml_d_log24_core_avx.S new file mode 100644 index 0000000000..9a56cfed61 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log24_core_avx.S @@ -0,0 +1,25 @@ +/* Function log2 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_log2) +WRAPPER_IMPL_AVX _ZGVbN2v_log2 +END (_ZGVcN4v_log2) diff --git a/sysdeps/x86_64/fpu/svml_d_log28_core.S b/sysdeps/x86_64/fpu/svml_d_log28_core.S new file mode 100644 index 0000000000..443cbfd578 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_d_log28_core.S @@ -0,0 +1,25 @@ +/* Function log2 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_log2) +WRAPPER_IMPL_AVX512 _ZGVdN4v_log2 +END (_ZGVeN8v_log2) diff --git a/sysdeps/x86_64/fpu/svml_s_log2f16_core.S b/sysdeps/x86_64/fpu/svml_s_log2f16_core.S new file mode 100644 index 0000000000..6cf265fd33 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log2f16_core.S @@ -0,0 +1,25 @@ +/* Function log2f 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_log2f) +WRAPPER_IMPL_AVX512 _ZGVdN8v_log2f +END (_ZGVeN16v_log2f) diff --git a/sysdeps/x86_64/fpu/svml_s_log2f4_core.S b/sysdeps/x86_64/fpu/svml_s_log2f4_core.S new file mode 100644 index 0000000000..024ba9b8c5 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log2f4_core.S @@ -0,0 +1,29 @@ +/* Function log2f 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_log2f) +WRAPPER_IMPL_SSE2 log2f +END (_ZGVbN4v_log2f) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVbN4v_log2f) +#endif diff --git a/sysdeps/x86_64/fpu/svml_s_log2f8_core.S b/sysdeps/x86_64/fpu/svml_s_log2f8_core.S new file mode 100644 index 0000000000..5705590563 --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log2f8_core.S @@ -0,0 +1,29 @@ +/* Function log2f 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_log2f) +WRAPPER_IMPL_AVX _ZGVbN4v_log2f +END (_ZGVdN8v_log2f) + +#ifndef USE_MULTIARCH + libmvec_hidden_def (_ZGVdN8v_log2f) +#endif diff --git a/sysdeps/x86_64/fpu/svml_s_log2f8_core_avx.S b/sysdeps/x86_64/fpu/svml_s_log2f8_core_avx.S new file mode 100644 index 0000000000..38602c475e --- /dev/null +++ b/sysdeps/x86_64/fpu/svml_s_log2f8_core_avx.S @@ -0,0 +1,25 @@ +/* Function log2f 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_log2f) +WRAPPER_IMPL_AVX _ZGVbN4v_log2f +END (_ZGVcN8v_log2f) diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx.c b/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx.c new file mode 100644 index 0000000000..95d8e4bbd8 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log2.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx2.c b/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx2.c new file mode 100644 index 0000000000..95d8e4bbd8 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx2.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log2.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx512f.c b/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx512f.c new file mode 100644 index 0000000000..95d8e4bbd8 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log2-avx512f.c @@ -0,0 +1 @@ +#include "test-double-libmvec-log2.c" diff --git a/sysdeps/x86_64/fpu/test-double-libmvec-log2.c b/sysdeps/x86_64/fpu/test-double-libmvec-log2.c new file mode 100644 index 0000000000..326b6f1171 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-double-libmvec-log2.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE double +#define LIBMVEC_FUNC log2 +#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 4a62f72a9d..4ad2fc8868 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen2-wrappers.c @@ -44,6 +44,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVbN2v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVbN2vv_hypot) VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVbN2v_log10) VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVbN2v_log1p) +VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVbN2v_log2) #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 4390d83410..f48641aa6a 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen4-avx2-wrappers.c @@ -47,6 +47,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVdN4v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVdN4vv_hypot) VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVdN4v_log10) VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVdN4v_log1p) +VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVdN4v_log2) #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 838825f3bd..91ca44a4b0 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen4-wrappers.c @@ -44,6 +44,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVcN4v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVcN4vv_hypot) VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVcN4v_log10) VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVcN4v_log1p) +VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVcN4v_log2) #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 2898b231de..fa9b82c02d 100644 --- a/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c +++ b/sysdeps/x86_64/fpu/test-double-vlen8-wrappers.c @@ -44,6 +44,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1), _ZGVeN8v_expm1) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypot), _ZGVeN8vv_hypot) VECTOR_WRAPPER (WRAPPER_NAME (log10), _ZGVeN8v_log10) VECTOR_WRAPPER (WRAPPER_NAME (log1p), _ZGVeN8v_log1p) +VECTOR_WRAPPER (WRAPPER_NAME (log2), _ZGVeN8v_log2) #ifndef __ILP32__ # define VEC_INT_TYPE __m512i diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx.c b/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx.c new file mode 100644 index 0000000000..c88b3fc5a9 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx.c @@ -0,0 +1 @@ +#include "test-float-libmvec-log2f.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx2.c b/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx2.c new file mode 100644 index 0000000000..c88b3fc5a9 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx2.c @@ -0,0 +1 @@ +#include "test-float-libmvec-log2f.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx512f.c b/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx512f.c new file mode 100644 index 0000000000..c88b3fc5a9 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log2f-avx512f.c @@ -0,0 +1 @@ +#include "test-float-libmvec-log2f.c" diff --git a/sysdeps/x86_64/fpu/test-float-libmvec-log2f.c b/sysdeps/x86_64/fpu/test-float-libmvec-log2f.c new file mode 100644 index 0000000000..afba03d1e2 --- /dev/null +++ b/sysdeps/x86_64/fpu/test-float-libmvec-log2f.c @@ -0,0 +1,3 @@ +#define LIBMVEC_TYPE float +#define LIBMVEC_FUNC log2f +#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 132daa04f7..26efef1490 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen16-wrappers.c @@ -44,6 +44,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVeN16v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVeN16vv_hypotf) VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVeN16v_log10f) VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVeN16v_log1pf) +VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVeN16v_log2f) #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 0c2d93eaa2..9c484d4a15 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen4-wrappers.c @@ -44,6 +44,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVbN4v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVbN4vv_hypotf) VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVbN4v_log10f) VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVbN4v_log1pf) +VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVbN4v_log2f) #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 afc0e4d078..220f66567b 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen8-avx2-wrappers.c @@ -47,6 +47,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVdN8v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVdN8vv_hypotf) VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVdN8v_log10f) VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVdN8v_log1pf) +VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVdN8v_log2f) /* 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 0001f9a839..dbc69fb9d4 100644 --- a/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c +++ b/sysdeps/x86_64/fpu/test-float-vlen8-wrappers.c @@ -44,6 +44,7 @@ VECTOR_WRAPPER (WRAPPER_NAME (expm1f), _ZGVcN8v_expm1f) VECTOR_WRAPPER_ff (WRAPPER_NAME (hypotf), _ZGVcN8vv_hypotf) VECTOR_WRAPPER (WRAPPER_NAME (log10f), _ZGVcN8v_log10f) VECTOR_WRAPPER (WRAPPER_NAME (log1pf), _ZGVcN8v_log1pf) +VECTOR_WRAPPER (WRAPPER_NAME (log2f), _ZGVcN8v_log2f) #define VEC_INT_TYPE __m128i