summaryrefslogtreecommitdiffstats
path: root/libm/x86_64/e_log10.S
diff options
context:
space:
mode:
Diffstat (limited to 'libm/x86_64/e_log10.S')
-rw-r--r--libm/x86_64/e_log10.S807
1 files changed, 807 insertions, 0 deletions
diff --git a/libm/x86_64/e_log10.S b/libm/x86_64/e_log10.S
new file mode 100644
index 0000000..4f43a36
--- /dev/null
+++ b/libm/x86_64/e_log10.S
@@ -0,0 +1,807 @@
+/*
+Copyright (c) 2014, Intel Corporation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+
+ * Neither the name of Intel Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/******************************************************************************/
+// ALGORITHM DESCRIPTION
+// ---------------------
+//
+// Let x=2^k * mx, mx in [1,2)
+//
+// Get B~1/mx based on the output of rcpss instruction (B0)
+// B = int((B0*LH*2^7+0.5))/2^7
+// LH is a short approximation for log10(e)
+//
+// Reduced argument: r=B*mx-LH (computed accurately in high and low parts)
+//
+// Result: k*log10(2) - log(B) + p(r)
+// p(r) is a degree 7 polynomial
+// -log(B) read from data table (high, low parts)
+// Result is formed from high and low parts
+//
+// Special cases:
+// log10(0) = -INF with divide-by-zero exception raised
+// log10(1) = +0
+// log10(x) = NaN with invalid exception raised if x < -0, including -INF
+// log10(+INF) = +INF
+//
+/******************************************************************************/
+
+#include <private/bionic_asm.h>
+# -- Begin log10
+ENTRY(log10)
+# parameter 1: %xmm0
+..B1.1:
+..___tag_value_log10.1:
+ subq $24, %rsp
+..___tag_value_log10.3:
+ movsd %xmm0, (%rsp)
+..B1.2:
+ xorpd %xmm2, %xmm2
+ movl $16368, %eax
+ pinsrw $3, %eax, %xmm2
+ movl $1054736384, %ecx
+ movd %ecx, %xmm7
+ xorpd %xmm3, %xmm3
+ movl $30704, %edx
+ pinsrw $3, %edx, %xmm3
+ movq %xmm0, %xmm1
+ movl $32768, %edx
+ movd %edx, %xmm4
+ movapd HIGHSIGMASK(%rip), %xmm5
+ pextrw $3, %xmm0, %eax
+ orpd %xmm2, %xmm0
+ movl $16352, %ecx
+ psrlq $27, %xmm0
+ movq LOG10_E(%rip), %xmm2
+ psrld $2, %xmm0
+ rcpps %xmm0, %xmm0
+ psllq $12, %xmm1
+ pshufd $78, %xmm5, %xmm6
+ psrlq $12, %xmm1
+ subl $16, %eax
+ cmpl $32736, %eax
+ jae .L_2TAG_PACKET_0.0.2
+.L_2TAG_PACKET_1.0.2:
+ mulss %xmm7, %xmm0
+ orpd %xmm3, %xmm1
+ lea L_tbl(%rip), %r11
+ andpd %xmm1, %xmm5
+ paddd %xmm4, %xmm0
+ subsd %xmm5, %xmm1
+ movd %xmm0, %edx
+ psllq $29, %xmm0
+ andpd %xmm6, %xmm0
+ andl $32752, %eax
+ subl %ecx, %eax
+ cvtsi2sd %eax, %xmm7
+ mulpd %xmm0, %xmm5
+ mulsd %xmm0, %xmm1
+ movq log2(%rip), %xmm6
+ movapd coeff(%rip), %xmm3
+ subsd %xmm2, %xmm5
+ andl $16711680, %edx
+ shrl $12, %edx
+ movapd -1504(%r11,%rdx), %xmm0
+ movapd 16+coeff(%rip), %xmm4
+ addsd %xmm5, %xmm1
+ movapd 32+coeff(%rip), %xmm2
+ mulsd %xmm7, %xmm6
+ pshufd $68, %xmm1, %xmm5
+ mulsd 8+log2(%rip), %xmm7
+ mulsd %xmm1, %xmm3
+ addsd %xmm6, %xmm0
+ mulpd %xmm5, %xmm4
+ movq 8+LOG10_E(%rip), %xmm6
+ mulpd %xmm5, %xmm5
+ addpd %xmm2, %xmm4
+ mulpd %xmm5, %xmm3
+ pshufd $228, %xmm0, %xmm2
+ addsd %xmm1, %xmm0
+ mulsd %xmm1, %xmm4
+ subsd %xmm0, %xmm2
+ mulsd %xmm1, %xmm6
+ addsd %xmm2, %xmm1
+ pshufd $238, %xmm0, %xmm2
+ mulsd %xmm5, %xmm5
+ addsd %xmm2, %xmm7
+ addsd %xmm6, %xmm1
+ addpd %xmm3, %xmm4
+ addsd %xmm7, %xmm1
+ mulpd %xmm5, %xmm4
+ addsd %xmm4, %xmm1
+ pshufd $238, %xmm4, %xmm5
+ addsd %xmm5, %xmm1
+ addsd %xmm1, %xmm0
+ jmp ..B1.5
+.L_2TAG_PACKET_0.0.2:
+ movq (%rsp), %xmm0
+ movq (%rsp), %xmm1
+ addl $16, %eax
+ cmpl $32768, %eax
+ jae .L_2TAG_PACKET_2.0.2
+ cmpl $16, %eax
+ jb .L_2TAG_PACKET_3.0.2
+.L_2TAG_PACKET_4.0.2:
+ addsd %xmm0, %xmm0
+ jmp ..B1.5
+.L_2TAG_PACKET_5.0.2:
+ ja .L_2TAG_PACKET_4.0.2
+ cmpl $0, %edx
+ ja .L_2TAG_PACKET_4.0.2
+ jmp .L_2TAG_PACKET_6.0.2
+.L_2TAG_PACKET_3.0.2:
+ xorpd %xmm1, %xmm1
+ addsd %xmm0, %xmm1
+ movd %xmm1, %edx
+ psrlq $32, %xmm1
+ movd %xmm1, %ecx
+ orl %ecx, %edx
+ cmpl $0, %edx
+ je .L_2TAG_PACKET_7.0.2
+ xorpd %xmm1, %xmm1
+ movl $18416, %eax
+ pinsrw $3, %eax, %xmm1
+ mulsd %xmm1, %xmm0
+ xorpd %xmm2, %xmm2
+ movl $16368, %eax
+ pinsrw $3, %eax, %xmm2
+ movq %xmm0, %xmm1
+ pextrw $3, %xmm0, %eax
+ orpd %xmm2, %xmm0
+ movl $18416, %ecx
+ psrlq $27, %xmm0
+ movq LOG10_E(%rip), %xmm2
+ psrld $2, %xmm0
+ rcpps %xmm0, %xmm0
+ psllq $12, %xmm1
+ pshufd $78, %xmm5, %xmm6
+ psrlq $12, %xmm1
+ jmp .L_2TAG_PACKET_1.0.2
+.L_2TAG_PACKET_2.0.2:
+ movd %xmm1, %edx
+ psrlq $32, %xmm1
+ movd %xmm1, %ecx
+ addl %ecx, %ecx
+ cmpl $-2097152, %ecx
+ jae .L_2TAG_PACKET_5.0.2
+ orl %ecx, %edx
+ cmpl $0, %edx
+ je .L_2TAG_PACKET_7.0.2
+.L_2TAG_PACKET_6.0.2:
+ xorpd %xmm1, %xmm1
+ xorpd %xmm0, %xmm0
+ movl $32752, %eax
+ pinsrw $3, %eax, %xmm1
+ mulsd %xmm1, %xmm0
+ movl $9, 16(%rsp)
+ jmp .L_2TAG_PACKET_8.0.2
+.L_2TAG_PACKET_7.0.2:
+ xorpd %xmm1, %xmm1
+ xorpd %xmm0, %xmm0
+ movl $49136, %eax
+ pinsrw $3, %eax, %xmm0
+ divsd %xmm1, %xmm0
+ movl $8, 16(%rsp)
+.L_2TAG_PACKET_8.0.2:
+ movq %xmm0, 8(%rsp)
+..B1.3:
+ movq 8(%rsp), %xmm0
+.L_2TAG_PACKET_9.0.2:
+..B1.5:
+ addq $24, %rsp
+..___tag_value_log10.4:
+ ret
+..___tag_value_log10.5:
+END(log10)
+# -- End log10
+ .section .rodata, "a"
+ .align 16
+ .align 16
+HIGHSIGMASK:
+ .long 4160749568
+ .long 4294967295
+ .long 0
+ .long 4294959104
+ .type HIGHSIGMASK,@object
+ .size HIGHSIGMASK,16
+ .align 16
+LOG10_E:
+ .long 0
+ .long 1071366144
+ .long 3207479560
+ .long 1062894188
+ .type LOG10_E,@object
+ .size LOG10_E,16
+ .align 16
+L_tbl:
+ .long 1352628224
+ .long 1070810131
+ .long 521319256
+ .long 1025503025
+ .long 2150839296
+ .long 1070801944
+ .long 3329350096
+ .long 3170190015
+ .long 1360613376
+ .long 1070793794
+ .long 2024059075
+ .long 1024991594
+ .long 1875350528
+ .long 1070785680
+ .long 2163882141
+ .long 3163564137
+ .long 2312126464
+ .long 1070777602
+ .long 1975711076
+ .long 1023674196
+ .long 1306336256
+ .long 1070769560
+ .long 3524899523
+ .long 3170508164
+ .long 1806334976
+ .long 1070761553
+ .long 4254777025
+ .long 1025238739
+ .long 2483193856
+ .long 1070753581
+ .long 3800671317
+ .long 3172916830
+ .long 2025350144
+ .long 1070745644
+ .long 1731514745
+ .long 1025501083
+ .long 3433285632
+ .long 1070737741
+ .long 2551857336
+ .long 3169662186
+ .long 1134317568
+ .long 1070729873
+ .long 3426297655
+ .long 3172637891
+ .long 2457152512
+ .long 1070722038
+ .long 63549415
+ .long 1025415416
+ .long 1861803008
+ .long 1070714237
+ .long 1910171636
+ .long 1023977580
+ .long 2414140416
+ .long 1070706469
+ .long 4002514337
+ .long 3170841618
+ .long 2900726784
+ .long 1070698734
+ .long 3268064083
+ .long 1022459609
+ .long 2123517952
+ .long 1070691032
+ .long 1767031218
+ .long 1022448156
+ .long 3194569728
+ .long 1070683362
+ .long 3402332618
+ .long 3171671160
+ .long 650882048
+ .long 1070675725
+ .long 4146023905
+ .long 3171023038
+ .long 1928988672
+ .long 1070668119
+ .long 1438617867
+ .long 1016360491
+ .long 1594908672
+ .long 1070660545
+ .long 971389377
+ .long 1024763979
+ .long 2818746368
+ .long 1070653002
+ .long 3555925341
+ .long 3172434821
+ .long 194584576
+ .long 1070645491
+ .long 943919215
+ .long 3172950063
+ .long 1215096832
+ .long 1070638010
+ .long 2283358588
+ .long 1022335098
+ .long 501519360
+ .long 1070630560
+ .long 480904295
+ .long 1024437959
+ .long 1278266368
+ .long 1070623140
+ .long 2755806066
+ .long 3172342012
+ .long 2487812096
+ .long 1070615750
+ .long 2489653202
+ .long 3172481099
+ .long 3085451264
+ .long 1070608390
+ .long 3759184951
+ .long 3172574892
+ .long 2039090176
+ .long 1070601060
+ .long 1361176676
+ .long 3172355319
+ .long 953057280
+ .long 1070591423
+ .long 1176587546
+ .long 3166422018
+ .long 3370524672
+ .long 1070576879
+ .long 3669570051
+ .long 1025376630
+ .long 749742080
+ .long 1070562394
+ .long 707700964
+ .long 3170814058
+ .long 4008353792
+ .long 1070547965
+ .long 3247327652
+ .long 1022431400
+ .long 2612455424
+ .long 1070533594
+ .long 2453457344
+ .long 3172322969
+ .long 3230920704
+ .long 1070519279
+ .long 1296781801
+ .long 1025115335
+ .long 3965253632
+ .long 1070505020
+ .long 373075289
+ .long 1017938528
+ .long 2593157120
+ .long 1070476669
+ .long 1068054086
+ .long 1021616576
+ .long 925962240
+ .long 1070448537
+ .long 850121213
+ .long 1023928989
+ .long 1732556800
+ .long 1070420620
+ .long 1305206740
+ .long 3172665570
+ .long 3815630848
+ .long 1070392915
+ .long 192642943
+ .long 3172699907
+ .long 2001758208
+ .long 1070365420
+ .long 2820786683
+ .long 1024704867
+ .long 16746496
+ .long 1070338131
+ .long 1399573110
+ .long 3171372773
+ .long 1886492672
+ .long 1070311044
+ .long 3621428075
+ .long 3172974358
+ .long 3338196992
+ .long 1070284157
+ .long 3793882035
+ .long 1025124701
+ .long 381769728
+ .long 1070257468
+ .long 3877933342
+ .long 3170195490
+ .long 2186491904
+ .long 1070230972
+ .long 1838687089
+ .long 1017927292
+ .long 1008330752
+ .long 1070204668
+ .long 2228321664
+ .long 1025352196
+ .long 2247065600
+ .long 1070178552
+ .long 1413900906
+ .long 3170902532
+ .long 2964070400
+ .long 1070152622
+ .long 3590454629
+ .long 1025016844
+ .long 465154048
+ .long 1070126876
+ .long 2079688550
+ .long 3172268183
+ .long 883615744
+ .long 1070101310
+ .long 989244452
+ .long 3171900485
+ .long 1993768960
+ .long 1070075922
+ .long 1124327841
+ .long 3172964992
+ .long 1794471936
+ .long 1070050710
+ .long 1140575046
+ .long 1022673726
+ .long 2797932544
+ .long 1070025671
+ .long 1894836933
+ .long 3172544059
+ .long 3433797632
+ .long 1070000803
+ .long 3221831166
+ .long 3171921685
+ .long 2338371584
+ .long 1069976104
+ .long 3732461053
+ .long 3164513518
+ .long 2644013056
+ .long 1069951571
+ .long 2519460462
+ .long 3172548740
+ .long 3383814144
+ .long 1069927202
+ .long 2290997657
+ .long 1025499649
+ .long 3781380096
+ .long 1069902995
+ .long 380479405
+ .long 1025184136
+ .long 3245785088
+ .long 1069878948
+ .long 1096398261
+ .long 3169885192
+ .long 1366712320
+ .long 1069855059
+ .long 2218343715
+ .long 3170281628
+ .long 2204717056
+ .long 1069831325
+ .long 2668334011
+ .long 1025264524
+ .long 1401772032
+ .long 1069807745
+ .long 4103993159
+ .long 1022925721
+ .long 3356721152
+ .long 1069784316
+ .long 3573790772
+ .long 3172186527
+ .long 4041148416
+ .long 1069761037
+ .long 4027691910
+ .long 3171276990
+ .long 3880151040
+ .long 1069737906
+ .long 4087118786
+ .long 3172710734
+ .long 3453364224
+ .long 1069714921
+ .long 99014299
+ .long 3172003077
+ .long 3491092480
+ .long 1069692080
+ .long 3801836701
+ .long 3172989287
+ .long 575580160
+ .long 1069669382
+ .long 1920406012
+ .long 3170874125
+ .long 22282240
+ .long 1069646824
+ .long 964193370
+ .long 1019363159
+ .long 2991429632
+ .long 1069624404
+ .long 3372589890
+ .long 1023425053
+ .long 2189645824
+ .long 1069602122
+ .long 2610503872
+ .long 1023652442
+ .long 3341467648
+ .long 1069579975
+ .long 1190292004
+ .long 1022425665
+ .long 3711293440
+ .long 1069557962
+ .long 1104795356
+ .long 1023625829
+ .long 1380401152
+ .long 1069524644
+ .long 1156998217
+ .long 1025100499
+ .long 765710336
+ .long 1069481144
+ .long 1736649113
+ .long 1024999439
+ .long 849412096
+ .long 1069437902
+ .long 2618178330
+ .long 3170853629
+ .long 1433104384
+ .long 1069394915
+ .long 43477267
+ .long 3170378811
+ .long 2548596736
+ .long 1069352180
+ .long 3967367063
+ .long 1025246584
+ .long 157577216
+ .long 1069309695
+ .long 100402533
+ .long 3172825502
+ .long 3326238720
+ .long 1069267455
+ .long 1176892909
+ .long 1025464099
+ .long 4155494400
+ .long 1069225459
+ .long 3713707617
+ .long 3172630046
+ .long 3545804800
+ .long 1069183704
+ .long 857007315
+ .long 1024965777
+ .long 2602520576
+ .long 1069142187
+ .long 2588758347
+ .long 1022463131
+ .long 2631196672
+ .long 1069100905
+ .long 2118424235
+ .long 1022490989
+ .long 838135808
+ .long 1069059856
+ .long 4117002727
+ .long 1024874520
+ .long 3210903552
+ .long 1069019036
+ .long 650070125
+ .long 3172012966
+ .long 3039211520
+ .long 1068978444
+ .long 438055812
+ .long 1017743757
+ .long 2385633280
+ .long 1068938077
+ .long 3011990369
+ .long 3171312044
+ .long 3491618816
+ .long 1068897932
+ .long 712813818
+ .long 3172720400
+ .long 183644160
+ .long 1068858008
+ .long 4287006742
+ .long 1022379728
+ .long 3639214080
+ .long 1068818300
+ .long 353762279
+ .long 3172980009
+ .long 3728416768
+ .long 1068778808
+ .long 1851367730
+ .long 1025486574
+ .long 3370094592
+ .long 1068739529
+ .long 4046594913
+ .long 3172567047
+ .long 1348407296
+ .long 1068700461
+ .long 143189675
+ .long 1025397632
+ .long 899403776
+ .long 1068661601
+ .long 3753687842
+ .long 3170772772
+ .long 1117708288
+ .long 1068622947
+ .long 1857340812
+ .long 3170782678
+ .long 1248276480
+ .long 1068584497
+ .long 1289858203
+ .long 1025222289
+ .long 683237376
+ .long 1068546249
+ .long 2356679608
+ .long 3171629170
+ .long 3253764096
+ .long 1068508200
+ .long 3267136556
+ .long 1018554987
+ .long 94478336
+ .long 1068441756
+ .long 1927868814
+ .long 3169378180
+ .long 3233144832
+ .long 1068366445
+ .long 2682188854
+ .long 1023964004
+ .long 2940297216
+ .long 1068291522
+ .long 275301289
+ .long 1023944679
+ .long 3677708288
+ .long 1068216982
+ .long 302658771
+ .long 1024465567
+ .long 1576968192
+ .long 1068142822
+ .long 3672035940
+ .long 3172254610
+ .long 1614069760
+ .long 1068069037
+ .long 480052905
+ .long 3172692062
+ .long 424435712
+ .long 1067995624
+ .long 2207869657
+ .long 3170965436
+ .long 3477782528
+ .long 1067922578
+ .long 2980661858
+ .long 3164990018
+ .long 3598401536
+ .long 1067849897
+ .long 1974393034
+ .long 3171357083
+ .long 2435235840
+ .long 1067777577
+ .long 1385289011
+ .long 1024615823
+ .long 1867333632
+ .long 1067705614
+ .long 3442236633
+ .long 1025334384
+ .long 3999301632
+ .long 1067634004
+ .long 3506472073
+ .long 1025132546
+ .long 2566971392
+ .long 1067562745
+ .long 1425757592
+ .long 3172358463
+ .long 112943104
+ .long 1067491833
+ .long 1693407156
+ .long 3172426603
+ .long 3079929856
+ .long 1067392159
+ .long 3999942455
+ .long 1018549369
+ .long 2443837440
+ .long 1067251701
+ .long 974534460
+ .long 1023963412
+ .long 359366656
+ .long 1067111917
+ .long 2204915018
+ .long 1013514416
+ .long 3564519424
+ .long 1066972799
+ .long 3977441659
+ .long 3170879860
+ .long 2011086848
+ .long 1066834343
+ .long 590145514
+ .long 1025390011
+ .long 3216982016
+ .long 1066696541
+ .long 3629120110
+ .long 1024330313
+ .long 2194128896
+ .long 1066559388
+ .long 2367098512
+ .long 3172260338
+ .long 2916220928
+ .long 1066422877
+ .long 2262431886
+ .long 1021229446
+ .long 2263941120
+ .long 1066172214
+ .long 3118507287
+ .long 1021484970
+ .long 3076292608
+ .long 1065901726
+ .long 1411737803
+ .long 3172957147
+ .long 1186136064
+ .long 1065632488
+ .long 3109349337
+ .long 1025397383
+ .long 3085303808
+ .long 1065364487
+ .long 584715031
+ .long 3172596519
+ .long 1821048832
+ .long 1064842211
+ .long 2182246895
+ .long 3172536214
+ .long 697368576
+ .long 1064311094
+ .long 3157561765
+ .long 3172716357
+ .long 894042112
+ .long 1063260131
+ .long 3237958154
+ .long 3172587292
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .type L_tbl,@object
+ .size L_tbl,2064
+ .align 16
+log2:
+ .long 1352628224
+ .long 1066615827
+ .long 521319256
+ .long 1021308721
+ .type log2,@object
+ .size log2,16
+ .align 16
+coeff:
+ .long 3248877870
+ .long 1077250164
+ .long 1691676429
+ .long 3221787401
+ .long 945132465
+ .long 3223701783
+ .long 3700831335
+ .long 1073506818
+ .long 2141010593
+ .long 1075227551
+ .long 3698831637
+ .long 3220339442
+ .type coeff,@object
+ .size coeff,48
+ .data
+ .section .note.GNU-stack, ""
+// -- Begin DWARF2 SEGMENT .eh_frame
+ .section .eh_frame,"a",@progbits
+.eh_frame_seg:
+ .align 1
+ .4byte 0x00000014
+ .8byte 0x00527a0100000000
+ .8byte 0x08070c1b01107801
+ .4byte 0x00000190
+ .4byte 0x0000001c
+ .4byte 0x0000001c
+ .4byte ..___tag_value_log10.1-.
+ .4byte ..___tag_value_log10.5-..___tag_value_log10.1
+ .2byte 0x0400
+ .4byte ..___tag_value_log10.3-..___tag_value_log10.1
+ .2byte 0x200e
+ .byte 0x04
+ .4byte ..___tag_value_log10.4-..___tag_value_log10.3
+ .2byte 0x080e
+ .byte 0x00
+# End