blob: 21bdd0bfac52f08d6cab47eb67c7e1b36b207360 [file] [log] [blame]
#
# (C) 2008-2009 Advanced Micro Devices, Inc. All Rights Reserved.
#
# This file is part of libacml_mv.
#
# libacml_mv 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.
#
# libacml_mv 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 libacml_mv. If not, see
# <http://www.gnu.org/licenses/>.
#
#
# cbrtf.S
#
# An implementation of the cbrtf libm function.
#
# Prototype:
#
# float cbrtf(float x);
#
#
# Algorithm:
#
#include "fn_macros.h"
#define fname FN_PROTOTYPE(cbrtf)
#define fname_special _cbrtf_special
# local variable storage offsets
.equ store_input, 0x0
.equ stack_size, 0x20
#ifdef __ELF__
.section .note.GNU-stack,"",@progbits
#endif
.text
.align 32
.p2align 4,,15
.globl fname
.type fname,@function
fname:
xor %rcx,%rcx
sub $stack_size, %rsp
movss %xmm0, store_input(%rsp)
movss %xmm0,%xmm1
mov store_input(%rsp),%r8
mov $0x7F800000,%r10
mov $0x007FFFFF,%r11
mov %r8,%r9
and %r10,%r8 # r8 = stores the exponent
and %r11,%r9 # r9 = stores the mantissa
cmp $0X7F800000,%r8
jz .L__cbrtf_is_nan_infinite
cmp $0X0,%r8
jz .L__cbrtf_is_denormal
.align 32
.L__cbrtf_is_normal:
cvtps2pd %xmm1,%xmm1
shr $23,%r8 # exp value
mov $3,%rdx # check whether always dx is set to 3
mov %r8,%rax
movsd %xmm1,%xmm6
shr $15,%r9 # index for the reciprocal
sub $0x7F,%ax
idiv %dl # Accumulator is divided by dl=3
mov %ax,%dx
shr $8,%dx #dx = Contains the remainder
add $2,%dl
#ax = Contains the quotient, Scale factor
cbw # sign extend al to ax
add $0x3FF,%ax
shl $52,%rax
pand .L__mantissa_mask_64(%rip),%xmm1
mov %rax,store_input(%rsp)
movsd store_input(%rsp),%xmm7
movsd .L__sign_mask_64(%rip),%xmm2
por .L__one_mask_64(%rip),%xmm1
movapd .L__coefficients(%rip),%xmm0
pandn %xmm1,%xmm2
pand .L__sign_mask_64(%rip),%xmm6 # has the sign
lea .L__DoubleReciprocalTable_256(%rip),%r8
lea .L__CubeRootTable_256(%rip),%rax
movsd (%r8,%r9,8),%xmm3#reciprocal, Size of double is 8
movsd (%rax,%r9,8),%xmm4#cuberoot
mulsd %xmm2,%xmm3
subsd .L__one_mask_64(%rip),%xmm3
# movddup %xmm3,%xmm3
shufpd $0,%xmm3,%xmm3 # replacing movddup
mulsd %xmm3,%xmm3
mulpd %xmm3,%xmm0
#######################################################################
#haddpd is an SSE3 instruction On using this instruction it gives a better performance
#haddpd %xmm0,%xmm0
#Following has to be commented and the above haddpd has to be uncommented if we can
#use the SSE3 instructions
movapd %xmm0,%xmm3
unpckhpd %xmm3,%xmm3
addsd %xmm3,%xmm0
#######################################################################
addsd .L__one_mask_64(%rip),%xmm0
mulsd %xmm7,%xmm0
lea .L__defined_cuberoot(%rip),%rax
mulsd (%rax,%rdx,8),%xmm0
mulsd %xmm4,%xmm0
cmp $1,%cx
jnz .L__final_result
mulsd .L__denormal_factor(%rip),%xmm0
.align 32
.L__final_result:
por %xmm6, %xmm0
cvtsd2ss %xmm0,%xmm0
add $stack_size, %rsp
ret
.align 32
.L__cbrtf_is_denormal:
cmp $0,%r9
jz .L__cbrtf_is_zero
mulss .L__2_pow_23(%rip),%xmm1
movss %xmm1, store_input(%rsp)
mov $1,%cx
mov store_input(%rsp),%r8
mov %r8,%r9
and %r10,%r8 # r8 = stores the exponent
and %r11,%r9 # r9 = stores the mantissa
jmp .L__cbrtf_is_normal
.align 32
.L__cbrtf_is_nan_infinite:
cmp $0,%r9
jz .L__cbrtf_is_infinite
mulss %xmm0,%xmm0 #this multiplication will raise an invalid exception
por .L__qnan_mask_32(%rip),%xmm0
.L__cbrtf_is_infinite:
.L__cbrtf_is_one:
.L__cbrtf_is_zero:
add $stack_size, %rsp
ret
.align 32
.L__mantissa_mask_32: .long 0x007FFFFF
.long 0 #this zero is necessary
.align 16
.L__qnan_mask_32: .long 0x00400000
.long 0
.L__exp_mask_32: .long 0x7F800000
.long 0
.L__zero: .long 0x00000000
.long 0
.align 16
.L__mantissa_mask_64: .quad 0x000FFFFFFFFFFFFF
.L__2_pow_23: .long 0x4B000000
.align 16
.L__sign_mask_64: .quad 0x8000000000000000
.quad 0
.L__one_mask_64: .quad 0x3FF0000000000000
.quad 0
.align 16
.L__denormal_factor: .quad 0x3F7428A2F98D728B
.quad 0
.align 16
.L__coefficients:
.quad 0xbFBC71C71C71C71C
.quad 0x3fd5555555555555
.align 16
.L__defined_cuberoot: .quad 0x3FE428A2F98D728B
.quad 0x3FE965FEA53D6E3D
.quad 0x3FF0000000000000
.quad 0x3FF428A2F98D728B
.quad 0x3FF965FEA53D6E3D
.align 32
.L__DoubleReciprocalTable_256: .quad 0X3ff0000000000000
.quad 0X3fefe00000000000
.quad 0X3fefc00000000000
.quad 0X3fefa00000000000
.quad 0X3fef800000000000
.quad 0X3fef600000000000
.quad 0X3fef400000000000
.quad 0X3fef200000000000
.quad 0X3fef000000000000
.quad 0X3feee00000000000
.quad 0X3feec00000000000
.quad 0X3feea00000000000
.quad 0X3fee900000000000
.quad 0X3fee700000000000
.quad 0X3fee500000000000
.quad 0X3fee300000000000
.quad 0X3fee100000000000
.quad 0X3fee000000000000
.quad 0X3fede00000000000
.quad 0X3fedc00000000000
.quad 0X3feda00000000000
.quad 0X3fed900000000000
.quad 0X3fed700000000000
.quad 0X3fed500000000000
.quad 0X3fed400000000000
.quad 0X3fed200000000000
.quad 0X3fed000000000000
.quad 0X3fecf00000000000
.quad 0X3fecd00000000000
.quad 0X3fecb00000000000
.quad 0X3feca00000000000
.quad 0X3fec800000000000
.quad 0X3fec700000000000
.quad 0X3fec500000000000
.quad 0X3fec300000000000
.quad 0X3fec200000000000
.quad 0X3fec000000000000
.quad 0X3febf00000000000
.quad 0X3febd00000000000
.quad 0X3febc00000000000
.quad 0X3feba00000000000
.quad 0X3feb900000000000
.quad 0X3feb700000000000
.quad 0X3feb600000000000
.quad 0X3feb400000000000
.quad 0X3feb300000000000
.quad 0X3feb200000000000
.quad 0X3feb000000000000
.quad 0X3feaf00000000000
.quad 0X3fead00000000000
.quad 0X3feac00000000000
.quad 0X3feaa00000000000
.quad 0X3fea900000000000
.quad 0X3fea800000000000
.quad 0X3fea600000000000
.quad 0X3fea500000000000
.quad 0X3fea400000000000
.quad 0X3fea200000000000
.quad 0X3fea100000000000
.quad 0X3fea000000000000
.quad 0X3fe9e00000000000
.quad 0X3fe9d00000000000
.quad 0X3fe9c00000000000
.quad 0X3fe9a00000000000
.quad 0X3fe9900000000000
.quad 0X3fe9800000000000
.quad 0X3fe9700000000000
.quad 0X3fe9500000000000
.quad 0X3fe9400000000000
.quad 0X3fe9300000000000
.quad 0X3fe9200000000000
.quad 0X3fe9000000000000
.quad 0X3fe8f00000000000
.quad 0X3fe8e00000000000
.quad 0X3fe8d00000000000
.quad 0X3fe8b00000000000
.quad 0X3fe8a00000000000
.quad 0X3fe8900000000000
.quad 0X3fe8800000000000
.quad 0X3fe8700000000000
.quad 0X3fe8600000000000
.quad 0X3fe8400000000000
.quad 0X3fe8300000000000
.quad 0X3fe8200000000000
.quad 0X3fe8100000000000
.quad 0X3fe8000000000000
.quad 0X3fe7f00000000000
.quad 0X3fe7e00000000000
.quad 0X3fe7d00000000000
.quad 0X3fe7b00000000000
.quad 0X3fe7a00000000000
.quad 0X3fe7900000000000
.quad 0X3fe7800000000000
.quad 0X3fe7700000000000
.quad 0X3fe7600000000000
.quad 0X3fe7500000000000
.quad 0X3fe7400000000000
.quad 0X3fe7300000000000
.quad 0X3fe7200000000000
.quad 0X3fe7100000000000
.quad 0X3fe7000000000000
.quad 0X3fe6f00000000000
.quad 0X3fe6e00000000000
.quad 0X3fe6d00000000000
.quad 0X3fe6c00000000000
.quad 0X3fe6b00000000000
.quad 0X3fe6a00000000000
.quad 0X3fe6900000000000
.quad 0X3fe6800000000000
.quad 0X3fe6700000000000
.quad 0X3fe6600000000000
.quad 0X3fe6500000000000
.quad 0X3fe6400000000000
.quad 0X3fe6300000000000
.quad 0X3fe6200000000000
.quad 0X3fe6100000000000
.quad 0X3fe6000000000000
.quad 0X3fe5f00000000000
.quad 0X3fe5e00000000000
.quad 0X3fe5d00000000000
.quad 0X3fe5c00000000000
.quad 0X3fe5b00000000000
.quad 0X3fe5a00000000000
.quad 0X3fe5900000000000
.quad 0X3fe5800000000000
.quad 0X3fe5800000000000
.quad 0X3fe5700000000000
.quad 0X3fe5600000000000
.quad 0X3fe5500000000000
.quad 0X3fe5400000000000
.quad 0X3fe5300000000000
.quad 0X3fe5200000000000
.quad 0X3fe5100000000000
.quad 0X3fe5000000000000
.quad 0X3fe5000000000000
.quad 0X3fe4f00000000000
.quad 0X3fe4e00000000000
.quad 0X3fe4d00000000000
.quad 0X3fe4c00000000000
.quad 0X3fe4b00000000000
.quad 0X3fe4a00000000000
.quad 0X3fe4a00000000000
.quad 0X3fe4900000000000
.quad 0X3fe4800000000000
.quad 0X3fe4700000000000
.quad 0X3fe4600000000000
.quad 0X3fe4600000000000
.quad 0X3fe4500000000000
.quad 0X3fe4400000000000
.quad 0X3fe4300000000000
.quad 0X3fe4200000000000
.quad 0X3fe4200000000000
.quad 0X3fe4100000000000
.quad 0X3fe4000000000000
.quad 0X3fe3f00000000000
.quad 0X3fe3e00000000000
.quad 0X3fe3e00000000000
.quad 0X3fe3d00000000000
.quad 0X3fe3c00000000000
.quad 0X3fe3b00000000000
.quad 0X3fe3b00000000000
.quad 0X3fe3a00000000000
.quad 0X3fe3900000000000
.quad 0X3fe3800000000000
.quad 0X3fe3800000000000
.quad 0X3fe3700000000000
.quad 0X3fe3600000000000
.quad 0X3fe3500000000000
.quad 0X3fe3500000000000
.quad 0X3fe3400000000000
.quad 0X3fe3300000000000
.quad 0X3fe3200000000000
.quad 0X3fe3200000000000
.quad 0X3fe3100000000000
.quad 0X3fe3000000000000
.quad 0X3fe3000000000000
.quad 0X3fe2f00000000000
.quad 0X3fe2e00000000000
.quad 0X3fe2e00000000000
.quad 0X3fe2d00000000000
.quad 0X3fe2c00000000000
.quad 0X3fe2b00000000000
.quad 0X3fe2b00000000000
.quad 0X3fe2a00000000000
.quad 0X3fe2900000000000
.quad 0X3fe2900000000000
.quad 0X3fe2800000000000
.quad 0X3fe2700000000000
.quad 0X3fe2700000000000
.quad 0X3fe2600000000000
.quad 0X3fe2500000000000
.quad 0X3fe2500000000000
.quad 0X3fe2400000000000
.quad 0X3fe2300000000000
.quad 0X3fe2300000000000
.quad 0X3fe2200000000000
.quad 0X3fe2100000000000
.quad 0X3fe2100000000000
.quad 0X3fe2000000000000
.quad 0X3fe2000000000000
.quad 0X3fe1f00000000000
.quad 0X3fe1e00000000000
.quad 0X3fe1e00000000000
.quad 0X3fe1d00000000000
.quad 0X3fe1c00000000000
.quad 0X3fe1c00000000000
.quad 0X3fe1b00000000000
.quad 0X3fe1b00000000000
.quad 0X3fe1a00000000000
.quad 0X3fe1900000000000
.quad 0X3fe1900000000000
.quad 0X3fe1800000000000
.quad 0X3fe1800000000000
.quad 0X3fe1700000000000
.quad 0X3fe1600000000000
.quad 0X3fe1600000000000
.quad 0X3fe1500000000000
.quad 0X3fe1500000000000
.quad 0X3fe1400000000000
.quad 0X3fe1300000000000
.quad 0X3fe1300000000000
.quad 0X3fe1200000000000
.quad 0X3fe1200000000000
.quad 0X3fe1100000000000
.quad 0X3fe1100000000000
.quad 0X3fe1000000000000
.quad 0X3fe0f00000000000
.quad 0X3fe0f00000000000
.quad 0X3fe0e00000000000
.quad 0X3fe0e00000000000
.quad 0X3fe0d00000000000
.quad 0X3fe0d00000000000
.quad 0X3fe0c00000000000
.quad 0X3fe0c00000000000
.quad 0X3fe0b00000000000
.quad 0X3fe0a00000000000
.quad 0X3fe0a00000000000
.quad 0X3fe0900000000000
.quad 0X3fe0900000000000
.quad 0X3fe0800000000000
.quad 0X3fe0800000000000
.quad 0X3fe0700000000000
.quad 0X3fe0700000000000
.quad 0X3fe0600000000000
.quad 0X3fe0600000000000
.quad 0X3fe0500000000000
.quad 0X3fe0500000000000
.quad 0X3fe0400000000000
.quad 0X3fe0400000000000
.quad 0X3fe0300000000000
.quad 0X3fe0300000000000
.quad 0X3fe0200000000000
.quad 0X3fe0200000000000
.quad 0X3fe0100000000000
.quad 0X3fe0100000000000
.quad 0X3fe0000000000000
.align 32
.L__CubeRootTable_256: .quad 0X3ff0000000000000
.quad 0X3ff00558e6547c36
.quad 0X3ff00ab8f9d2f374
.quad 0X3ff010204b673fc7
.quad 0X3ff0158eec36749b
.quad 0X3ff01b04ed9fdb53
.quad 0X3ff02082613df53c
.quad 0X3ff0260758e78308
.quad 0X3ff02b93e6b091f0
.quad 0X3ff031281ceb8ea2
.quad 0X3ff036c40e2a5e2a
.quad 0X3ff03c67cd3f7cea
.quad 0X3ff03f3c9fee224c
.quad 0X3ff044ec379f7f79
.quad 0X3ff04aa3cd578d67
.quad 0X3ff0506374d40a3d
.quad 0X3ff0562b4218a6e3
.quad 0X3ff059123d3a9848
.quad 0X3ff05ee6694e7166
.quad 0X3ff064c2ee6e07c6
.quad 0X3ff06aa7e19c01c5
.quad 0X3ff06d9d8b1decca
.quad 0X3ff0738f4b6cc8e2
.quad 0X3ff07989af9f9f59
.quad 0X3ff07c8a2611201c
.quad 0X3ff08291a9958f03
.quad 0X3ff088a208c3fe28
.quad 0X3ff08bad91dd7d8b
.quad 0X3ff091cb6588465e
.quad 0X3ff097f24eab04a1
.quad 0X3ff09b0932aee3f2
.quad 0X3ff0a13de8970de4
.quad 0X3ff0a45bc08a5ac7
.quad 0X3ff0aa9e79bfa986
.quad 0X3ff0b0eaa961ca5b
.quad 0X3ff0b4145573271c
.quad 0X3ff0ba6ee5f9aad4
.quad 0X3ff0bd9fd0dbe02d
.quad 0X3ff0c408fc1cfd4b
.quad 0X3ff0c741430e2059
.quad 0X3ff0cdb9442ea813
.quad 0X3ff0d0f905168e6c
.quad 0X3ff0d7801893d261
.quad 0X3ff0dac772091bde
.quad 0X3ff0e15dd5c330ab
.quad 0X3ff0e4ace71080a4
.quad 0X3ff0e7fe920f3037
.quad 0X3ff0eea9c37e497e
.quad 0X3ff0f203512f4314
.quad 0X3ff0f8be68db7f32
.quad 0X3ff0fc1ffa42d902
.quad 0X3ff102eb3af9ed89
.quad 0X3ff10654f1e29cfb
.quad 0X3ff109c1679c189f
.quad 0X3ff110a29f080b3d
.quad 0X3ff114176891738a
.quad 0X3ff1178f0099b429
.quad 0X3ff11e86ac2cd7ab
.quad 0X3ff12206c7cf4046
.quad 0X3ff12589c21fb842
.quad 0X3ff12c986355d0d2
.quad 0X3ff13024129645cf
.quad 0X3ff133b2b13aa0eb
.quad 0X3ff13ad8cdc48ba3
.quad 0X3ff13e70544b1d4f
.quad 0X3ff1420adb77c99a
.quad 0X3ff145a867b1bfea
.quad 0X3ff14ceca1189d6d
.quad 0X3ff15093574284e9
.quad 0X3ff1543d2473ea9b
.quad 0X3ff157ea0d433a46
.quad 0X3ff15f4d44462724
.quad 0X3ff163039bd7cde6
.quad 0X3ff166bd21c3a8e2
.quad 0X3ff16a79dad1fb59
.quad 0X3ff171fcf9aaac3d
.quad 0X3ff175c3693980c3
.quad 0X3ff1798d1f73f3ef
.quad 0X3ff17d5a2156e97f
.quad 0X3ff1812a73ea2593
.quad 0X3ff184fe1c406b8f
.quad 0X3ff18caf82b8dba4
.quad 0X3ff1908d4b38a510
.quad 0X3ff1946e7e36f7e5
.quad 0X3ff1985320ff72a2
.quad 0X3ff19c3b38e975a8
.quad 0X3ff1a026cb58453d
.quad 0X3ff1a415ddbb2c10
.quad 0X3ff1a808758d9e32
.quad 0X3ff1aff84bac98ea
.quad 0X3ff1b3f5952e1a50
.quad 0X3ff1b7f67a896220
.quad 0X3ff1bbfb0178d186
.quad 0X3ff1c0032fc3cf91
.quad 0X3ff1c40f0b3eefc4
.quad 0X3ff1c81e99cc193f
.quad 0X3ff1cc31e15aae72
.quad 0X3ff1d048e7e7b565
.quad 0X3ff1d463b37e0090
.quad 0X3ff1d8824a365852
.quad 0X3ff1dca4b237a4f7
.quad 0X3ff1e0caf1b71965
.quad 0X3ff1e4f50ef85e61
.quad 0X3ff1e923104dbe76
.quad 0X3ff1ed54fc185286
.quad 0X3ff1f18ad8c82efc
.quad 0X3ff1f5c4acdc91aa
.quad 0X3ff1fa027ee4105b
.quad 0X3ff1fe44557cc808
.quad 0X3ff2028a37548ccf
.quad 0X3ff206d42b291a95
.quad 0X3ff20b2237c8466a
.quad 0X3ff20f74641030a6
.quad 0X3ff213cab6ef77c7
.quad 0X3ff2182537656c13
.quad 0X3ff21c83ec824406
.quad 0X3ff220e6dd675180
.quad 0X3ff2254e114737d2
.quad 0X3ff229b98f66228c
.quad 0X3ff22e295f19fd31
.quad 0X3ff2329d87caabb6
.quad 0X3ff2371610f243f2
.quad 0X3ff23b93021d47da
.quad 0X3ff2401462eae0b8
.quad 0X3ff2449a3b0d1b3f
.quad 0X3ff2449a3b0d1b3f
.quad 0X3ff2492492492492
.quad 0X3ff24db370778844
.quad 0X3ff25246dd846f45
.quad 0X3ff256dee16fdfd4
.quad 0X3ff25b7b844dfe71
.quad 0X3ff2601cce474fd2
.quad 0X3ff264c2c798fbe5
.quad 0X3ff2696d789511e2
.quad 0X3ff2696d789511e2
.quad 0X3ff26e1ce9a2cd73
.quad 0X3ff272d1233edcf3
.quad 0X3ff2778a2dfba8d0
.quad 0X3ff27c4812819c13
.quad 0X3ff2810ad98f6e10
.quad 0X3ff285d28bfa6d45
.quad 0X3ff285d28bfa6d45
.quad 0X3ff28a9f32aecb79
.quad 0X3ff28f70d6afeb08
.quad 0X3ff294478118ad83
.quad 0X3ff299233b1bc38a
.quad 0X3ff299233b1bc38a
.quad 0X3ff29e040e03fdfb
.quad 0X3ff2a2ea0334a07b
.quad 0X3ff2a7d52429b556
.quad 0X3ff2acc57a7862c2
.quad 0X3ff2acc57a7862c2
.quad 0X3ff2b1bb0fcf4190
.quad 0X3ff2b6b5edf6b54a
.quad 0X3ff2bbb61ed145cf
.quad 0X3ff2c0bbac5bfa6e
.quad 0X3ff2c0bbac5bfa6e
.quad 0X3ff2c5c6a0aeb681
.quad 0X3ff2cad705fc97a6
.quad 0X3ff2cfece6945583
.quad 0X3ff2cfece6945583
.quad 0X3ff2d5084ce0a331
.quad 0X3ff2da294368924f
.quad 0X3ff2df4fd4cff7c3
.quad 0X3ff2df4fd4cff7c3
.quad 0X3ff2e47c0bd7d237
.quad 0X3ff2e9adf35eb25a
.quad 0X3ff2eee5966124e8
.quad 0X3ff2eee5966124e8
.quad 0X3ff2f422fffa1e92
.quad 0X3ff2f9663b6369b6
.quad 0X3ff2feaf53f61612
.quad 0X3ff2feaf53f61612
.quad 0X3ff303fe552aea57
.quad 0X3ff309534a9ad7ce
.quad 0X3ff309534a9ad7ce
.quad 0X3ff30eae3fff6ff3
.quad 0X3ff3140f41335c2f
.quad 0X3ff3140f41335c2f
.quad 0X3ff319765a32d7ae
.quad 0X3ff31ee3971c2b5b
.quad 0X3ff3245704302c13
.quad 0X3ff3245704302c13
.quad 0X3ff329d0add2bb20
.quad 0X3ff32f50a08b48f9
.quad 0X3ff32f50a08b48f9
.quad 0X3ff334d6e9055a5f
.quad 0X3ff33a6394110fe6
.quad 0X3ff33a6394110fe6
.quad 0X3ff33ff6aea3afed
.quad 0X3ff3459045d8331b
.quad 0X3ff3459045d8331b
.quad 0X3ff34b3066efd36b
.quad 0X3ff350d71f529dd8
.quad 0X3ff350d71f529dd8
.quad 0X3ff356847c9006b4
.quad 0X3ff35c388c5f80bf
.quad 0X3ff35c388c5f80bf
.quad 0X3ff361f35ca116ff
.quad 0X3ff361f35ca116ff
.quad 0X3ff367b4fb5e0985
.quad 0X3ff36d7d76c96d0a
.quad 0X3ff36d7d76c96d0a
.quad 0X3ff3734cdd40cd95
.quad 0X3ff379233d4cd42a
.quad 0X3ff379233d4cd42a
.quad 0X3ff37f00a5a1ef96
.quad 0X3ff37f00a5a1ef96
.quad 0X3ff384e52521006c
.quad 0X3ff38ad0cad80848
.quad 0X3ff38ad0cad80848
.quad 0X3ff390c3a602dc60
.quad 0X3ff390c3a602dc60
.quad 0X3ff396bdc60bdb88
.quad 0X3ff39cbf3a8ca7a9
.quad 0X3ff39cbf3a8ca7a9
.quad 0X3ff3a2c8134ee2d1
.quad 0X3ff3a2c8134ee2d1
.quad 0X3ff3a8d8604cefe3
.quad 0X3ff3aef031b2b706
.quad 0X3ff3aef031b2b706
.quad 0X3ff3b50f97de6de5
.quad 0X3ff3b50f97de6de5
.quad 0X3ff3bb36a36163d8
.quad 0X3ff3bb36a36163d8
.quad 0X3ff3c1656500d20a
.quad 0X3ff3c79bedb6afb8
.quad 0X3ff3c79bedb6afb8
.quad 0X3ff3cdda4eb28aa2
.quad 0X3ff3cdda4eb28aa2
.quad 0X3ff3d420995a63c0
.quad 0X3ff3d420995a63c0
.quad 0X3ff3da6edf4b9061
.quad 0X3ff3da6edf4b9061
.quad 0X3ff3e0c5325b9fc2
.quad 0X3ff3e723a499453f
.quad 0X3ff3e723a499453f
.quad 0X3ff3ed8a484d473a
.quad 0X3ff3ed8a484d473a
.quad 0X3ff3f3f92ffb72d8
.quad 0X3ff3f3f92ffb72d8
.quad 0X3ff3fa706e6394a4
.quad 0X3ff3fa706e6394a4
.quad 0X3ff400f01682764a
.quad 0X3ff400f01682764a
.quad 0X3ff407783b92e17a
.quad 0X3ff407783b92e17a
.quad 0X3ff40e08f10ea81a
.quad 0X3ff40e08f10ea81a
.quad 0X3ff414a24aafb1e6
.quad 0X3ff414a24aafb1e6
.quad 0X3ff41b445c710fa7
.quad 0X3ff41b445c710fa7
.quad 0X3ff421ef3a901411
.quad 0X3ff421ef3a901411
.quad 0X3ff428a2f98d728b