OSDN Git Service

loader: fix dlopen performance regression caused by fix for CVE-2017-0670 am: d6b2586...
[android-x86/bionic.git] / libm / x86 / e_log.S
1 /*
2 Copyright (c) 2014, Intel Corporation
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions are met:
7
8     * Redistributions of source code must retain the above copyright notice,
9     * this list of conditions and the following disclaimer.
10
11     * Redistributions in binary form must reproduce the above copyright notice,
12     * this list of conditions and the following disclaimer in the documentation
13     * and/or other materials provided with the distribution.
14
15     * Neither the name of Intel Corporation nor the names of its contributors
16     * may be used to endorse or promote products derived from this software
17     * without specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26 ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31 /******************************************************************************/
32 //                     ALGORITHM DESCRIPTION
33 //                     ---------------------
34 //
35 //    x=2^k * mx, mx in [1,2)
36 //
37 //    Get B~1/mx based on the output of rcpss instruction (B0)
38 //    B = int((B0*2^7+0.5))/2^7
39 //
40 //    Reduced argument: r=B*mx-1.0 (computed accurately in high and low parts)
41 //
42 //    Result:  k*log(2) - log(B) + p(r) if |x-1| >= small value (2^-6)  and
43 //             p(r) is a degree 7 polynomial
44 //             -log(B) read from data table (high, low parts)
45 //             Result is formed from high and low parts
46 //
47 // Special cases:
48 //  log(NaN) = quiet NaN, and raise invalid exception
49 //  log(+INF) = that INF
50 //  log(0) = -INF with divide-by-zero exception raised
51 //  log(1) = +0
52 //  log(x) = NaN with invalid exception raised if x < -0, including -INF
53 //
54 /******************************************************************************/
55
56 #include <private/bionic_asm.h>
57 # -- Begin  static_func
58         .text
59         .align __bionic_asm_align
60         .type static_func, @function
61 static_func:
62 ..B1.1:
63         call      ..L2
64 ..L2:
65         popl      %eax
66         lea       _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax
67         lea       static_const_table@GOTOFF(%eax), %eax
68         ret
69         .size   static_func,.-static_func
70 # -- End  static_func
71
72 # -- Begin  log
73 ENTRY(log)
74 # parameter 1: 8 + %ebp
75 ..B2.1:
76 ..B2.2:
77         pushl     %ebp
78         movl      %esp, %ebp
79         subl      $104, %esp
80         movl      %ebx, 40(%esp)
81         call      static_func
82         movl      %eax, %ebx
83         xorpd     %xmm2, %xmm2
84         movl      $16368, %eax
85         pinsrw    $3, %eax, %xmm2
86         xorpd     %xmm3, %xmm3
87         movl      $30704, %edx
88         pinsrw    $3, %edx, %xmm3
89         movsd     112(%esp), %xmm0
90         movapd    %xmm0, %xmm1
91         movl      $32768, %ecx
92         movd      %ecx, %xmm4
93         movsd     2128(%ebx), %xmm5
94         pextrw    $3, %xmm0, %eax
95         orpd      %xmm2, %xmm0
96         psllq     $5, %xmm0
97         movl      $16352, %ecx
98         psrlq     $34, %xmm0
99         rcpss     %xmm0, %xmm0
100         psllq     $12, %xmm1
101         pshufd    $228, %xmm5, %xmm6
102         psrlq     $12, %xmm1
103         subl      $16, %eax
104         cmpl      $32736, %eax
105         jae       .L_2TAG_PACKET_0.0.2
106 .L_2TAG_PACKET_1.0.2:
107         paddd     %xmm4, %xmm0
108         orpd      %xmm3, %xmm1
109         movd      %xmm0, %edx
110         psllq     $29, %xmm0
111         andpd     %xmm1, %xmm5
112         andpd     %xmm6, %xmm0
113         subsd     %xmm5, %xmm1
114         mulpd     %xmm0, %xmm5
115         andl      $32752, %eax
116         subl      %ecx, %eax
117         cvtsi2sdl %eax, %xmm7
118         mulsd     %xmm0, %xmm1
119         movsd     2064(%ebx), %xmm6
120         movapd    2080(%ebx), %xmm3
121         subsd     %xmm2, %xmm5
122         andl      $16711680, %edx
123         shrl      $12, %edx
124         movapd    (%ebx,%edx), %xmm0
125         movapd    2096(%ebx), %xmm4
126         addsd     %xmm5, %xmm1
127         movapd    2112(%ebx), %xmm2
128         mulsd     %xmm7, %xmm6
129         pshufd    $68, %xmm1, %xmm5
130         mulsd     2072(%ebx), %xmm7
131         mulsd     %xmm1, %xmm3
132         addsd     %xmm6, %xmm0
133         mulpd     %xmm5, %xmm4
134         mulpd     %xmm5, %xmm5
135         pshufd    $228, %xmm0, %xmm6
136         addsd     %xmm1, %xmm0
137         addpd     %xmm2, %xmm4
138         mulpd     %xmm5, %xmm3
139         subsd     %xmm0, %xmm6
140         mulsd     %xmm1, %xmm4
141         pshufd    $238, %xmm0, %xmm2
142         addsd     %xmm6, %xmm1
143         mulsd     %xmm5, %xmm5
144         addsd     %xmm2, %xmm7
145         addpd     %xmm3, %xmm4
146         addsd     %xmm7, %xmm1
147         mulpd     %xmm5, %xmm4
148         addsd     %xmm4, %xmm1
149         pshufd    $238, %xmm4, %xmm5
150         addsd     %xmm5, %xmm1
151         addsd     %xmm1, %xmm0
152         jmp       .L_2TAG_PACKET_2.0.2
153 .L_2TAG_PACKET_0.0.2:
154         movsd     112(%esp), %xmm0
155         movapd    %xmm0, %xmm1
156         addl      $16, %eax
157         cmpl      $32768, %eax
158         jae       .L_2TAG_PACKET_3.0.2
159         cmpl      $16, %eax
160         jb        .L_2TAG_PACKET_4.0.2
161 .L_2TAG_PACKET_5.0.2:
162         addsd     %xmm0, %xmm0
163         jmp       .L_2TAG_PACKET_2.0.2
164 .L_2TAG_PACKET_6.0.2:
165         ja        .L_2TAG_PACKET_5.0.2
166         cmpl      $0, %edx
167         ja        .L_2TAG_PACKET_5.0.2
168         jmp       .L_2TAG_PACKET_7.0.2
169 .L_2TAG_PACKET_3.0.2:
170         movd      %xmm1, %edx
171         psrlq     $32, %xmm1
172         movd      %xmm1, %ecx
173         addl      %ecx, %ecx
174         cmpl      $-2097152, %ecx
175         jae       .L_2TAG_PACKET_6.0.2
176         orl       %ecx, %edx
177         cmpl      $0, %edx
178         je        .L_2TAG_PACKET_8.0.2
179 .L_2TAG_PACKET_7.0.2:
180         xorpd     %xmm1, %xmm1
181         xorpd     %xmm0, %xmm0
182         movl      $32752, %eax
183         pinsrw    $3, %eax, %xmm1
184         movl      $3, %edx
185         mulsd     %xmm1, %xmm0
186 .L_2TAG_PACKET_9.0.2:
187         movsd     %xmm0, (%esp)
188         movsd     112(%esp), %xmm0
189         fldl      (%esp)
190         jmp       .L_2TAG_PACKET_10.0.2
191 .L_2TAG_PACKET_8.0.2:
192         xorpd     %xmm1, %xmm1
193         xorpd     %xmm0, %xmm0
194         movl      $49136, %eax
195         pinsrw    $3, %eax, %xmm0
196         divsd     %xmm1, %xmm0
197         movl      $2, %edx
198         jmp       .L_2TAG_PACKET_9.0.2
199 .L_2TAG_PACKET_4.0.2:
200         movd      %xmm1, %edx
201         psrlq     $32, %xmm1
202         movd      %xmm1, %ecx
203         orl       %ecx, %edx
204         cmpl      $0, %edx
205         je        .L_2TAG_PACKET_8.0.2
206         xorpd     %xmm1, %xmm1
207         movl      $18416, %eax
208         pinsrw    $3, %eax, %xmm1
209         mulsd     %xmm1, %xmm0
210         movapd    %xmm0, %xmm1
211         pextrw    $3, %xmm0, %eax
212         orpd      %xmm2, %xmm0
213         psllq     $5, %xmm0
214         movl      $18416, %ecx
215         psrlq     $34, %xmm0
216         rcpss     %xmm0, %xmm0
217         psllq     $12, %xmm1
218         pshufd    $228, %xmm5, %xmm6
219         psrlq     $12, %xmm1
220         jmp       .L_2TAG_PACKET_1.0.2
221 .L_2TAG_PACKET_2.0.2:
222         movsd     %xmm0, 24(%esp)
223         fldl      24(%esp)
224 .L_2TAG_PACKET_10.0.2:
225         movl      40(%esp), %ebx
226         movl      %ebp, %esp
227         popl      %ebp
228         ret       
229 ..B2.3:
230 END(log)
231 # -- End  log
232
233 # Start file scope ASM
234 ALIAS_SYMBOL(logl, log);
235 # End file scope ASM
236         .section .rodata, "a"
237         .align 16
238         .align 16
239 static_const_table:
240         .long   4277811200
241         .long   1072049730
242         .long   2479318832
243         .long   1026487127
244         .long   2854492160
245         .long   1072033410
246         .long   215631550
247         .long   1025638968
248         .long   1547061248
249         .long   1072017216
250         .long   2886781435
251         .long   1026423395
252         .long   649825280
253         .long   1072001146
254         .long   4281533405
255         .long   1024038923
256         .long   646346752
257         .long   1071985198
258         .long   1562735921
259         .long   1023790276
260         .long   2203734016
261         .long   1071969370
262         .long   1838397691
263         .long   3173936209
264         .long   1872169984
265         .long   1071953661
266         .long   3981202460
267         .long   1022325013
268         .long   669557760
269         .long   1071938069
270         .long   4182597802
271         .long   3173174122
272         .long   4076413952
273         .long   1071922591
274         .long   1209029111
275         .long   3170736207
276         .long   556125184
277         .long   1071907228
278         .long   821086028
279         .long   3173437049
280         .long   204914688
281         .long   1071891976
282         .long   2097025986
283         .long   3171071798
284         .long   387545088
285         .long   1071876834
286         .long   3142936996
287         .long   3173092218
288         .long   2912783360
289         .long   1071861800
290         .long   2502420140
291         .long   1024505919
292         .long   1144260608
293         .long   1071846874
294         .long   3315658140
295         .long   3173469843
296         .long   1471209472
297         .long   1071832053
298         .long   129621009
299         .long   3172443877
300         .long   1829683200
301         .long   1071817336
302         .long   3885467693
303         .long   1025535275
304         .long   288676864
305         .long   1071802722
306         .long   86139472
307         .long   3171639793
308         .long   3636378624
309         .long   1071788208
310         .long   1850238587
311         .long   1024654342
312         .long   1606817792
313         .long   1071773795
314         .long   3388899795
315         .long   3173675586
316         .long   1236164608
317         .long   1071759480
318         .long   3983599207
319         .long   1020046558
320         .long   1089616896
321         .long   1071745262
322         .long   4171974224
323         .long   1024773198
324         .long   4143093760
325         .long   1071731139
326         .long   2727587401
327         .long   3173965207
328         .long   600267776
329         .long   1071717112
330         .long   3147685042
331         .long   3173353031
332         .long   2249313280
333         .long   1071703177
334         .long   125835074
335         .long   1025255832
336         .long   3805303808
337         .long   1071689334
338         .long   2289991207
339         .long   1025460331
340         .long   87278592
341         .long   1071675583
342         .long   1106114045
343         .long   1025933602
344         .long   3195405312
345         .long   1071661920
346         .long   3885316576
347         .long   3171206239
348         .long   3853649920
349         .long   1071648346
350         .long   2977069852
351         .long   3171236771
352         .long   2944026624
353         .long   1071625048
354         .long   1008093493
355         .long   1023444474
356         .long   3993180160
357         .long   1071598247
358         .long   1862355595
359         .long   1024642533
360         .long   1454641152
361         .long   1071571617
362         .long   1514603089
363         .long   1026500596
364         .long   3286085632
365         .long   1071545154
366         .long   1400028424
367         .long   3173279056
368         .long   438773760
369         .long   1071518858
370         .long   120727864
371         .long   3172148914
372         .long   1212979200
373         .long   1071492725
374         .long   1625055594
375         .long   3172901933
376         .long   1189017600
377         .long   1071466754
378         .long   3920062376
379         .long   1025727407
380         .long   403064832
381         .long   1071440943
382         .long   1053271728
383         .long   3171391427
384         .long   3343210496
385         .long   1071415289
386         .long   3243395502
387         .long   3173627613
388         .long   1765777408
389         .long   1071389792
390         .long   2145968512
391         .long   1026354304
392         .long   461430784
393         .long   1071364449
394         .long   4094322285
395         .long   1026021467
396         .long   71706624
397         .long   1071339258
398         .long   763632021
399         .long   1024496933
400         .long   1380503552
401         .long   1071314217
402         .long   1383547992
403         .long   3173088453
404         .long   1015732224
405         .long   1071289325
406         .long   3198646877
407         .long   1025390322
408         .long   35977216
409         .long   1071264580
410         .long   2141026805
411         .long   1025754693
412         .long   3927306240
413         .long   1071239979
414         .long   282116272
415         .long   3173394334
416         .long   1125341184
417         .long   1071215523
418         .long   2768427504
419         .long   3172279059
420         .long   1666971648
421         .long   1071191208
422         .long   786837629
423         .long   3172427445
424         .long   2827694080
425         .long   1071167033
426         .long   3857122416
427         .long   3173014241
428         .long   2003683328
429         .long   1071142997
430         .long   859010954
431         .long   1026545007
432         .long   1004017664
433         .long   1071119098
434         .long   3356644970
435         .long   3173458064
436         .long   1753020416
437         .long   1071095334
438         .long   788338552
439         .long   1026157693
440         .long   1992718336
441         .long   1071071704
442         .long   1239179443
443         .long   1026394889
444         .long   3870234624
445         .long   1071048206
446         .long   2082614663
447         .long   1024926053
448         .long   1050437632
449         .long   1071024840
450         .long   660007840
451         .long   1025548499
452         .long   188395520
453         .long   1071001603
454         .long   3878792704
455         .long   3173889571
456         .long   3747176448
457         .long   1070978493
458         .long   144991708
459         .long   3171552042
460         .long   1405669376
461         .long   1070955511
462         .long   3999088879
463         .long   1025486317
464         .long   121151488
465         .long   1070932654
466         .long   2170865497
467         .long   1026473584
468         .long   2652319744
469         .long   1070909920
470         .long   453695652
471         .long   3173916809
472         .long   3262236672
473         .long   1070887309
474         .long   157800053
475         .long   3173984206
476         .long   601221120
477         .long   1070864820
478         .long   3968917661
479         .long   1023992886
480         .long   1999843328
481         .long   1070842450
482         .long   3053895004
483         .long   1024998228
484         .long   1992167424
485         .long   1070820199
486         .long   2968614856
487         .long   1024552653
488         .long   3788726272
489         .long   1070798065
490         .long   3542170808
491         .long   3173573242
492         .long   2094829568
493         .long   1070776048
494         .long   1246758132
495         .long   1026202874
496         .long   288675840
497         .long   1070754146
498         .long   3747328950
499         .long   1026331585
500         .long   1829681152
501         .long   1070732357
502         .long   3125197546
503         .long   1024100318
504         .long   1666869248
505         .long   1070710681
506         .long   1363656119
507         .long   1026336493
508         .long   3417110528
509         .long   1070689116
510         .long   4154791553
511         .long   1026267853
512         .long   2183653376
513         .long   1070667662
514         .long   1671819292
515         .long   3173785870
516         .long   1734434816
517         .long   1070646317
518         .long   373091049
519         .long   1025972363
520         .long   1615681536
521         .long   1070625080
522         .long   384650897
523         .long   1022926043
524         .long   1445382144
525         .long   1070603950
526         .long   344320330
527         .long   3172397196
528         .long   1823715328
529         .long   1070569756
530         .long   3389841200
531         .long   1025231852
532         .long   3839688704
533         .long   1070527917
534         .long   1706790417
535         .long   3167363349
536         .long   4293332992
537         .long   1070486286
538         .long   1614935088
539         .long   1019351591
540         .long   2966720512
541         .long   1070444861
542         .long   4145393717
543         .long   3173711658
544         .long   4066729984
545         .long   1070403639
546         .long   1974925028
547         .long   3171437182
548         .long   3337621504
549         .long   1070362619
550         .long   3314953170
551         .long   3169971314
552         .long   943448064
553         .long   1070321799
554         .long   1498682038
555         .long   3173862340
556         .long   1465634816
557         .long   1070281176
558         .long   1319952810
559         .long   3171693965
560         .long   1015734272
561         .long   1070240749
562         .long   1347821929
563         .long   3173544515
564         .long   118001664
565         .long   1070200516
566         .long   1751482746
567         .long   1026134093
568         .long   3707174912
569         .long   1070160474
570         .long   1486946159
571         .long   1023930920
572         .long   3946381312
573         .long   1070120623
574         .long   2867408081
575         .long   3171368276
576         .long   1699848192
577         .long   1070080961
578         .long   2590187139
579         .long   1025379803
580         .long   2235846656
581         .long   1070041485
582         .long   1888568069
583         .long   3172754960
584         .long   2339729408
585         .long   1070002194
586         .long   3852214753
587         .long   3173323149
588         .long   3196850176
589         .long   1069963086
590         .long   742141560
591         .long   1025101707
592         .long   1800683520
593         .long   1069924160
594         .long   3949500444
595         .long   3172102179
596         .long   3835801600
597         .long   1069885413
598         .long   3848895943
599         .long   1025913832
600         .long   2201202688
601         .long   1069846845
602         .long   1425913464
603         .long   1025868665
604         .long   2778279936
605         .long   1069808453
606         .long   2120889677
607         .long   3173831128
608         .long   2954203136
609         .long   1069770236
610         .long   592147081
611         .long   1019621288
612         .long   210141184
613         .long   1069732193
614         .long   3414275233
615         .long   1023647084
616         .long   709476352
617         .long   1069694321
618         .long   2413027164
619         .long   1024462115
620         .long   2116284416
621         .long   1069656619
622         .long   1144559924
623         .long   1026336654
624         .long   2183651328
625         .long   1069619086
626         .long   3459057650
627         .long   1025634168
628         .long   3047047168
629         .long   1069581720
630         .long   1879674924
631         .long   3173508573
632         .long   970711040
633         .long   1069541521
634         .long   1335954173
635         .long   3173332182
636         .long   2198478848
637         .long   1069467449
638         .long   2951103968
639         .long   3173892200
640         .long   1669611520
641         .long   1069393703
642         .long   531044147
643         .long   1025149248
644         .long   29114368
645         .long   1069320280
646         .long   3327831251
647         .long   1025918673
648         .long   2376949760
649         .long   1069247176
650         .long   737634533
651         .long   3172176000
652         .long   1085390848
653         .long   1069174390
654         .long   3108243400
655         .long   3171828406
656         .long   1566130176
657         .long   1069101918
658         .long   985483226
659         .long   1025708380
660         .long   792780800
661         .long   1069029758
662         .long   4184866295
663         .long   1024426204
664         .long   183156736
665         .long   1068957907
666         .long   2845699378
667         .long   1022107277
668         .long   1301782528
669         .long   1068886362
670         .long   1012735262
671         .long   3173804294
672         .long   1562411008
673         .long   1068815121
674         .long   2197086703
675         .long   3170187813
676         .long   2815549440
677         .long   1068744181
678         .long   2782613207
679         .long   1026345054
680         .long   2756124672
681         .long   1068673540
682         .long   2929486205
683         .long   3173037800
684         .long   3511050240
685         .long   1068603195
686         .long   1443733147
687         .long   3173331549
688         .long   3047047168
689         .long   1068533144
690         .long   1879674924
691         .long   3172459997
692         .long   3221667840
693         .long   1068427825
694         .long   1338588027
695         .long   3171815742
696         .long   3453861888
697         .long   1068288883
698         .long   1205348359
699         .long   3172624626
700         .long   3506110464
701         .long   1068150514
702         .long   893105198
703         .long   1025571866
704         .long   346013696
705         .long   1068012714
706         .long   3495569021
707         .long   3172563349
708         .long   4074029056
709         .long   1067875476
710         .long   3961106338
711         .long   3171065595
712         .long   3559784448
713         .long   1067738798
714         .long   1975385384
715         .long   3173783155
716         .long   797769728
717         .long   1067602675
718         .long   3760305787
719         .long   1026047642
720         .long   2313633792
721         .long   1067467101
722         .long   1559353171
723         .long   1023480256
724         .long   3960766464
725         .long   1067213778
726         .long   1067365107
727         .long   1025865926
728         .long   684261376
729         .long   1066944805
730         .long   844762164
731         .long   3173687482
732         .long   630718464
733         .long   1066676905
734         .long   2458269694
735         .long   1024033081
736         .long   1486061568
737         .long   1066410070
738         .long   115537874
739         .long   3173243995
740         .long   2743664640
741         .long   1065886792
742         .long   3665098304
743         .long   3173471607
744         .long   1971912704
745         .long   1065357333
746         .long   2577214440
747         .long   3171993451
748         .long   1498939392
749         .long   1064306693
750         .long   3409036923
751         .long   1025599151
752         .long   0
753         .long   0
754         .long   0
755         .long   2147483648
756         .long   4277811200
757         .long   1067855426
758         .long   2479318832
759         .long   1022292823
760         .long   2454267026
761         .long   1069697316
762         .long   0
763         .long   3218079744
764         .long   1030730101
765         .long   3217380702
766         .long   1431655765
767         .long   1070945621
768         .long   2576980378
769         .long   1070176665
770         .long   0
771         .long   3219128320
772         .long   0
773         .long   4294959104
774         .long   0
775         .long   4294959104
776         .type   static_const_table,@object
777         .size   static_const_table,2144
778         .data
779         .section .note.GNU-stack, ""
780 # End