blob: b5df1eaa3d019c250f4fcfe41ae455bdcc1ab843 [file] [log] [blame]
Jingwei Zhang5d4f0e62014-10-31 18:29:18 +08001/*
2Copyright (c) 2014, Intel Corporation
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, 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
19THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26ANY 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
28SOFTWARE, 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
61static_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
73ENTRY(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:
230END(log)
231# -- End log
232
233# Start file scope ASM
234.weak logl
235.equ logl, log
236# End file scope ASM
237 .section .rodata, "a"
238 .align 16
239 .align 16
240static_const_table:
241 .long 4277811200
242 .long 1072049730
243 .long 2479318832
244 .long 1026487127
245 .long 2854492160
246 .long 1072033410
247 .long 215631550
248 .long 1025638968
249 .long 1547061248
250 .long 1072017216
251 .long 2886781435
252 .long 1026423395
253 .long 649825280
254 .long 1072001146
255 .long 4281533405
256 .long 1024038923
257 .long 646346752
258 .long 1071985198
259 .long 1562735921
260 .long 1023790276
261 .long 2203734016
262 .long 1071969370
263 .long 1838397691
264 .long 3173936209
265 .long 1872169984
266 .long 1071953661
267 .long 3981202460
268 .long 1022325013
269 .long 669557760
270 .long 1071938069
271 .long 4182597802
272 .long 3173174122
273 .long 4076413952
274 .long 1071922591
275 .long 1209029111
276 .long 3170736207
277 .long 556125184
278 .long 1071907228
279 .long 821086028
280 .long 3173437049
281 .long 204914688
282 .long 1071891976
283 .long 2097025986
284 .long 3171071798
285 .long 387545088
286 .long 1071876834
287 .long 3142936996
288 .long 3173092218
289 .long 2912783360
290 .long 1071861800
291 .long 2502420140
292 .long 1024505919
293 .long 1144260608
294 .long 1071846874
295 .long 3315658140
296 .long 3173469843
297 .long 1471209472
298 .long 1071832053
299 .long 129621009
300 .long 3172443877
301 .long 1829683200
302 .long 1071817336
303 .long 3885467693
304 .long 1025535275
305 .long 288676864
306 .long 1071802722
307 .long 86139472
308 .long 3171639793
309 .long 3636378624
310 .long 1071788208
311 .long 1850238587
312 .long 1024654342
313 .long 1606817792
314 .long 1071773795
315 .long 3388899795
316 .long 3173675586
317 .long 1236164608
318 .long 1071759480
319 .long 3983599207
320 .long 1020046558
321 .long 1089616896
322 .long 1071745262
323 .long 4171974224
324 .long 1024773198
325 .long 4143093760
326 .long 1071731139
327 .long 2727587401
328 .long 3173965207
329 .long 600267776
330 .long 1071717112
331 .long 3147685042
332 .long 3173353031
333 .long 2249313280
334 .long 1071703177
335 .long 125835074
336 .long 1025255832
337 .long 3805303808
338 .long 1071689334
339 .long 2289991207
340 .long 1025460331
341 .long 87278592
342 .long 1071675583
343 .long 1106114045
344 .long 1025933602
345 .long 3195405312
346 .long 1071661920
347 .long 3885316576
348 .long 3171206239
349 .long 3853649920
350 .long 1071648346
351 .long 2977069852
352 .long 3171236771
353 .long 2944026624
354 .long 1071625048
355 .long 1008093493
356 .long 1023444474
357 .long 3993180160
358 .long 1071598247
359 .long 1862355595
360 .long 1024642533
361 .long 1454641152
362 .long 1071571617
363 .long 1514603089
364 .long 1026500596
365 .long 3286085632
366 .long 1071545154
367 .long 1400028424
368 .long 3173279056
369 .long 438773760
370 .long 1071518858
371 .long 120727864
372 .long 3172148914
373 .long 1212979200
374 .long 1071492725
375 .long 1625055594
376 .long 3172901933
377 .long 1189017600
378 .long 1071466754
379 .long 3920062376
380 .long 1025727407
381 .long 403064832
382 .long 1071440943
383 .long 1053271728
384 .long 3171391427
385 .long 3343210496
386 .long 1071415289
387 .long 3243395502
388 .long 3173627613
389 .long 1765777408
390 .long 1071389792
391 .long 2145968512
392 .long 1026354304
393 .long 461430784
394 .long 1071364449
395 .long 4094322285
396 .long 1026021467
397 .long 71706624
398 .long 1071339258
399 .long 763632021
400 .long 1024496933
401 .long 1380503552
402 .long 1071314217
403 .long 1383547992
404 .long 3173088453
405 .long 1015732224
406 .long 1071289325
407 .long 3198646877
408 .long 1025390322
409 .long 35977216
410 .long 1071264580
411 .long 2141026805
412 .long 1025754693
413 .long 3927306240
414 .long 1071239979
415 .long 282116272
416 .long 3173394334
417 .long 1125341184
418 .long 1071215523
419 .long 2768427504
420 .long 3172279059
421 .long 1666971648
422 .long 1071191208
423 .long 786837629
424 .long 3172427445
425 .long 2827694080
426 .long 1071167033
427 .long 3857122416
428 .long 3173014241
429 .long 2003683328
430 .long 1071142997
431 .long 859010954
432 .long 1026545007
433 .long 1004017664
434 .long 1071119098
435 .long 3356644970
436 .long 3173458064
437 .long 1753020416
438 .long 1071095334
439 .long 788338552
440 .long 1026157693
441 .long 1992718336
442 .long 1071071704
443 .long 1239179443
444 .long 1026394889
445 .long 3870234624
446 .long 1071048206
447 .long 2082614663
448 .long 1024926053
449 .long 1050437632
450 .long 1071024840
451 .long 660007840
452 .long 1025548499
453 .long 188395520
454 .long 1071001603
455 .long 3878792704
456 .long 3173889571
457 .long 3747176448
458 .long 1070978493
459 .long 144991708
460 .long 3171552042
461 .long 1405669376
462 .long 1070955511
463 .long 3999088879
464 .long 1025486317
465 .long 121151488
466 .long 1070932654
467 .long 2170865497
468 .long 1026473584
469 .long 2652319744
470 .long 1070909920
471 .long 453695652
472 .long 3173916809
473 .long 3262236672
474 .long 1070887309
475 .long 157800053
476 .long 3173984206
477 .long 601221120
478 .long 1070864820
479 .long 3968917661
480 .long 1023992886
481 .long 1999843328
482 .long 1070842450
483 .long 3053895004
484 .long 1024998228
485 .long 1992167424
486 .long 1070820199
487 .long 2968614856
488 .long 1024552653
489 .long 3788726272
490 .long 1070798065
491 .long 3542170808
492 .long 3173573242
493 .long 2094829568
494 .long 1070776048
495 .long 1246758132
496 .long 1026202874
497 .long 288675840
498 .long 1070754146
499 .long 3747328950
500 .long 1026331585
501 .long 1829681152
502 .long 1070732357
503 .long 3125197546
504 .long 1024100318
505 .long 1666869248
506 .long 1070710681
507 .long 1363656119
508 .long 1026336493
509 .long 3417110528
510 .long 1070689116
511 .long 4154791553
512 .long 1026267853
513 .long 2183653376
514 .long 1070667662
515 .long 1671819292
516 .long 3173785870
517 .long 1734434816
518 .long 1070646317
519 .long 373091049
520 .long 1025972363
521 .long 1615681536
522 .long 1070625080
523 .long 384650897
524 .long 1022926043
525 .long 1445382144
526 .long 1070603950
527 .long 344320330
528 .long 3172397196
529 .long 1823715328
530 .long 1070569756
531 .long 3389841200
532 .long 1025231852
533 .long 3839688704
534 .long 1070527917
535 .long 1706790417
536 .long 3167363349
537 .long 4293332992
538 .long 1070486286
539 .long 1614935088
540 .long 1019351591
541 .long 2966720512
542 .long 1070444861
543 .long 4145393717
544 .long 3173711658
545 .long 4066729984
546 .long 1070403639
547 .long 1974925028
548 .long 3171437182
549 .long 3337621504
550 .long 1070362619
551 .long 3314953170
552 .long 3169971314
553 .long 943448064
554 .long 1070321799
555 .long 1498682038
556 .long 3173862340
557 .long 1465634816
558 .long 1070281176
559 .long 1319952810
560 .long 3171693965
561 .long 1015734272
562 .long 1070240749
563 .long 1347821929
564 .long 3173544515
565 .long 118001664
566 .long 1070200516
567 .long 1751482746
568 .long 1026134093
569 .long 3707174912
570 .long 1070160474
571 .long 1486946159
572 .long 1023930920
573 .long 3946381312
574 .long 1070120623
575 .long 2867408081
576 .long 3171368276
577 .long 1699848192
578 .long 1070080961
579 .long 2590187139
580 .long 1025379803
581 .long 2235846656
582 .long 1070041485
583 .long 1888568069
584 .long 3172754960
585 .long 2339729408
586 .long 1070002194
587 .long 3852214753
588 .long 3173323149
589 .long 3196850176
590 .long 1069963086
591 .long 742141560
592 .long 1025101707
593 .long 1800683520
594 .long 1069924160
595 .long 3949500444
596 .long 3172102179
597 .long 3835801600
598 .long 1069885413
599 .long 3848895943
600 .long 1025913832
601 .long 2201202688
602 .long 1069846845
603 .long 1425913464
604 .long 1025868665
605 .long 2778279936
606 .long 1069808453
607 .long 2120889677
608 .long 3173831128
609 .long 2954203136
610 .long 1069770236
611 .long 592147081
612 .long 1019621288
613 .long 210141184
614 .long 1069732193
615 .long 3414275233
616 .long 1023647084
617 .long 709476352
618 .long 1069694321
619 .long 2413027164
620 .long 1024462115
621 .long 2116284416
622 .long 1069656619
623 .long 1144559924
624 .long 1026336654
625 .long 2183651328
626 .long 1069619086
627 .long 3459057650
628 .long 1025634168
629 .long 3047047168
630 .long 1069581720
631 .long 1879674924
632 .long 3173508573
633 .long 970711040
634 .long 1069541521
635 .long 1335954173
636 .long 3173332182
637 .long 2198478848
638 .long 1069467449
639 .long 2951103968
640 .long 3173892200
641 .long 1669611520
642 .long 1069393703
643 .long 531044147
644 .long 1025149248
645 .long 29114368
646 .long 1069320280
647 .long 3327831251
648 .long 1025918673
649 .long 2376949760
650 .long 1069247176
651 .long 737634533
652 .long 3172176000
653 .long 1085390848
654 .long 1069174390
655 .long 3108243400
656 .long 3171828406
657 .long 1566130176
658 .long 1069101918
659 .long 985483226
660 .long 1025708380
661 .long 792780800
662 .long 1069029758
663 .long 4184866295
664 .long 1024426204
665 .long 183156736
666 .long 1068957907
667 .long 2845699378
668 .long 1022107277
669 .long 1301782528
670 .long 1068886362
671 .long 1012735262
672 .long 3173804294
673 .long 1562411008
674 .long 1068815121
675 .long 2197086703
676 .long 3170187813
677 .long 2815549440
678 .long 1068744181
679 .long 2782613207
680 .long 1026345054
681 .long 2756124672
682 .long 1068673540
683 .long 2929486205
684 .long 3173037800
685 .long 3511050240
686 .long 1068603195
687 .long 1443733147
688 .long 3173331549
689 .long 3047047168
690 .long 1068533144
691 .long 1879674924
692 .long 3172459997
693 .long 3221667840
694 .long 1068427825
695 .long 1338588027
696 .long 3171815742
697 .long 3453861888
698 .long 1068288883
699 .long 1205348359
700 .long 3172624626
701 .long 3506110464
702 .long 1068150514
703 .long 893105198
704 .long 1025571866
705 .long 346013696
706 .long 1068012714
707 .long 3495569021
708 .long 3172563349
709 .long 4074029056
710 .long 1067875476
711 .long 3961106338
712 .long 3171065595
713 .long 3559784448
714 .long 1067738798
715 .long 1975385384
716 .long 3173783155
717 .long 797769728
718 .long 1067602675
719 .long 3760305787
720 .long 1026047642
721 .long 2313633792
722 .long 1067467101
723 .long 1559353171
724 .long 1023480256
725 .long 3960766464
726 .long 1067213778
727 .long 1067365107
728 .long 1025865926
729 .long 684261376
730 .long 1066944805
731 .long 844762164
732 .long 3173687482
733 .long 630718464
734 .long 1066676905
735 .long 2458269694
736 .long 1024033081
737 .long 1486061568
738 .long 1066410070
739 .long 115537874
740 .long 3173243995
741 .long 2743664640
742 .long 1065886792
743 .long 3665098304
744 .long 3173471607
745 .long 1971912704
746 .long 1065357333
747 .long 2577214440
748 .long 3171993451
749 .long 1498939392
750 .long 1064306693
751 .long 3409036923
752 .long 1025599151
753 .long 0
754 .long 0
755 .long 0
756 .long 2147483648
757 .long 4277811200
758 .long 1067855426
759 .long 2479318832
760 .long 1022292823
761 .long 2454267026
762 .long 1069697316
763 .long 0
764 .long 3218079744
765 .long 1030730101
766 .long 3217380702
767 .long 1431655765
768 .long 1070945621
769 .long 2576980378
770 .long 1070176665
771 .long 0
772 .long 3219128320
773 .long 0
774 .long 4294959104
775 .long 0
776 .long 4294959104
777 .type static_const_table,@object
778 .size static_const_table,2144
779 .data
780 .section .note.GNU-stack, ""
781# End