blob: d065de285acf8167cb68031ba86db216f2e07a83 [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// Assume x=2^{3*k+j} * 1.b1 b2 ... b5 b6 ... b52, where j = 0,1,2.
36// Let r=(x*2^{-3k-j} - 1.b1 b2 ... b5 1)* rcp[b1 b2 ..b5],
37// where rcp[b1 b2 .. b5]=1/(1.b1 b2 b3 b4 b5 1) in double precision
38// cbrt(2^j * 1. b1 b2 .. b5 1) is approximated as T[j][b1..b5]+D[j][b1..b5]
39// (T stores the high 53 bits, D stores the low order bits)
40// Result=2^k*T+(2^k*T*r)*P+2^k*D
41// where P=p1+p2*r+..+p8*r^7
42//
43// Special cases:
44// cbrt(NaN) = quiet NaN, and raise invalid exception
45// cbrt(INF) = that INF
46// cbrt(+/-0) = +/-0
47//
48/******************************************************************************/
49
50#include <private/bionic_asm.h>
51# -- Begin static_func
52 .text
53 .align __bionic_asm_align
54 .type static_func, @function
55static_func:
56..B1.1:
57 call ..L2
58..L2:
59 popl %eax
60 lea _GLOBAL_OFFSET_TABLE_+[. - ..L2](%eax), %eax
61 lea static_const_table@GOTOFF(%eax), %eax
62 ret
63 .size static_func,.-static_func
64# -- End static_func
65
66# -- Begin cbrt
67ENTRY(cbrt)
68# parameter 1: 8 + %ebp
69..B2.1:
70..B2.2:
71 pushl %ebp
72 movl %esp, %ebp
73 subl $120, %esp
74 movl %esi, 52(%esp)
75 call static_func
76 movl %eax, %esi
77 movsd 128(%esp), %xmm0
78 movapd %xmm0, %xmm7
79 movsd %xmm0, 8(%esp)
80 movl $524032, %edx
81 movsd 64(%esi), %xmm5
82 movsd 80(%esi), %xmm3
83 psrlq $44, %xmm7
84 pextrw $0, %xmm7, %ecx
85 movd %xmm7, %eax
86 movsd 96(%esi), %xmm1
87 movsd 112(%esi), %xmm2
88 movl %ebx, 16(%esp)
89 andl $248, %ecx
90 movsd 128(%ecx,%esi), %xmm4
91 movl %eax, %ebx
92 andl %eax, %edx
93 cmpl $0, %edx
94 je .L_2TAG_PACKET_0.0.2
95 cmpl $524032, %edx
96 je .L_2TAG_PACKET_1.0.2
97 shrl $8, %edx
98 shrl $8, %ebx
99 andpd %xmm0, %xmm2
100 andpd %xmm5, %xmm0
101 orpd %xmm2, %xmm3
102 orpd %xmm0, %xmm1
103 movapd (%esi), %xmm5
104 movl $5462, %eax
105 movapd 16(%esi), %xmm6
106 mull %edx
107 movl %ebx, %edx
108 andl $2047, %ebx
109 shrl $14, %eax
110 andl $2048, %edx
111 subl %eax, %ebx
112 subl %eax, %ebx
113 subl %eax, %ebx
114 shll $8, %ebx
115 addl $682, %eax
116 orl %edx, %eax
117 movd %eax, %xmm7
118 addl %ebx, %ecx
119 psllq $52, %xmm7
120.L_2TAG_PACKET_2.0.2:
121 movapd 32(%esi), %xmm2
122 movapd 48(%esi), %xmm0
123 subsd %xmm3, %xmm1
124 movq %xmm7, %xmm3
125 mulsd 384(%ecx,%esi), %xmm7
126 mulsd %xmm4, %xmm1
127 mulsd 1152(%ecx,%esi), %xmm3
128 movapd %xmm1, %xmm4
129 unpcklpd %xmm1, %xmm1
130 mulpd %xmm1, %xmm5
131 mulpd %xmm1, %xmm6
132 mulpd %xmm1, %xmm1
133 addpd %xmm5, %xmm2
134 addpd %xmm6, %xmm0
135 mulpd %xmm1, %xmm2
136 mulpd %xmm1, %xmm1
137 mulsd %xmm7, %xmm4
138 addpd %xmm2, %xmm0
139 movl 16(%esp), %ebx
140 mulsd %xmm0, %xmm1
141 unpckhpd %xmm0, %xmm0
142 addsd %xmm1, %xmm0
143 mulsd %xmm4, %xmm0
144 addsd %xmm3, %xmm0
145 addsd %xmm7, %xmm0
146 movsd %xmm0, (%esp)
147 fldl (%esp)
148 jmp .L_2TAG_PACKET_3.0.2
149.L_2TAG_PACKET_0.0.2:
150 mulsd 1984(%esi), %xmm0
151 movq %xmm0, %xmm7
152 movl $524032, %edx
153 psrlq $44, %xmm7
154 pextrw $0, %xmm7, %ecx
155 movd %xmm7, %eax
156 andl $248, %ecx
157 movsd 128(%ecx,%esi), %xmm4
158 movl %eax, %ebx
159 andl %eax, %edx
160 shrl $8, %edx
161 shrl $8, %ebx
162 cmpl $0, %edx
163 je .L_2TAG_PACKET_4.0.2
164 andpd %xmm0, %xmm2
165 andpd %xmm5, %xmm0
166 orpd %xmm2, %xmm3
167 orpd %xmm0, %xmm1
168 movapd (%esi), %xmm5
169 movl $5462, %eax
170 movapd 16(%esi), %xmm6
171 mull %edx
172 movl %ebx, %edx
173 andl $2047, %ebx
174 shrl $14, %eax
175 andl $2048, %edx
176 subl %eax, %ebx
177 subl %eax, %ebx
178 subl %eax, %ebx
179 shll $8, %ebx
180 addl $661, %eax
181 orl %edx, %eax
182 movd %eax, %xmm7
183 addl %ebx, %ecx
184 psllq $52, %xmm7
185 jmp .L_2TAG_PACKET_2.0.2
186.L_2TAG_PACKET_4.0.2:
187 cmpl $0, %ebx
188 jne .L_2TAG_PACKET_5.0.2
189 movl 16(%esp), %ebx
190 fldl 1952(%esi)
191 jmp .L_2TAG_PACKET_3.0.2
192.L_2TAG_PACKET_5.0.2:
193 movl 16(%esp), %ebx
194 fldl 1968(%esi)
195 jmp .L_2TAG_PACKET_3.0.2
196.L_2TAG_PACKET_1.0.2:
197 movl 16(%esp), %ebx
198 movl 132(%esp), %eax
199 movl 128(%esp), %edx
200 movl %eax, %ecx
201 andl $2147483647, %ecx
202 cmpl $2146435072, %ecx
203 ja .L_2TAG_PACKET_6.0.2
204 cmpl $0, %edx
205 jne .L_2TAG_PACKET_6.0.2
206 cmpl $2146435072, %eax
207 jne .L_2TAG_PACKET_7.0.2
208 fldl 1920(%esi)
209 jmp .L_2TAG_PACKET_3.0.2
210.L_2TAG_PACKET_7.0.2:
211 fldl 1936(%esi)
212 jmp .L_2TAG_PACKET_3.0.2
213.L_2TAG_PACKET_6.0.2:
214 movsd 8(%esp), %xmm0
215 addsd %xmm0, %xmm0
216 movsd %xmm0, (%esp)
217 fldl (%esp)
218.L_2TAG_PACKET_3.0.2:
219 movl 52(%esp), %esi
220 movl %ebp, %esp
221 popl %ebp
222 ret
223..B2.3:
224END(cbrt)
225# -- End cbrt
226
227# Start file scope ASM
228.weak cbrtl
229.equ cbrtl, cbrt
230# End file scope ASM
231 .section .rodata, "a"
232 .align 16
233 .align 16
234static_const_table:
235 .long 1553778919
236 .long 3213899486
237 .long 3534952507
238 .long 3215266280
239 .long 1646371399
240 .long 3214412045
241 .long 477218588
242 .long 3216798151
243 .long 3582521621
244 .long 1066628362
245 .long 1007461464
246 .long 1068473053
247 .long 889629714
248 .long 1067378449
249 .long 1431655765
250 .long 1070945621
251 .long 4294967295
252 .long 1048575
253 .long 0
254 .long 0
255 .long 0
256 .long 3220193280
257 .long 0
258 .long 0
259 .long 0
260 .long 3220176896
261 .long 0
262 .long 0
263 .long 0
264 .long 1032192
265 .long 0
266 .long 0
267 .long 528611360
268 .long 3220144632
269 .long 2884679527
270 .long 3220082993
271 .long 1991868891
272 .long 3220024928
273 .long 2298714891
274 .long 3219970134
275 .long 58835168
276 .long 3219918343
277 .long 3035110223
278 .long 3219869313
279 .long 1617585086
280 .long 3219822831
281 .long 2500867033
282 .long 3219778702
283 .long 4241943008
284 .long 3219736752
285 .long 258732970
286 .long 3219696825
287 .long 404232216
288 .long 3219658776
289 .long 2172167368
290 .long 3219622476
291 .long 1544257904
292 .long 3219587808
293 .long 377579543
294 .long 3219554664
295 .long 1616385542
296 .long 3219522945
297 .long 813783277
298 .long 3219492562
299 .long 3940743189
300 .long 3219463431
301 .long 2689777499
302 .long 3219435478
303 .long 1700977147
304 .long 3219408632
305 .long 3169102082
306 .long 3219382828
307 .long 327235604
308 .long 3219358008
309 .long 1244336319
310 .long 3219334115
311 .long 1300311200
312 .long 3219311099
313 .long 3095471925
314 .long 3219288912
315 .long 2166487928
316 .long 3219267511
317 .long 2913108253
318 .long 3219246854
319 .long 293672978
320 .long 3219226904
321 .long 288737297
322 .long 3219207624
323 .long 1810275472
324 .long 3219188981
325 .long 174592167
326 .long 3219170945
327 .long 3539053052
328 .long 3219153485
329 .long 2164392968
330 .long 3219136576
331 .long 572345495
332 .long 1072698681
333 .long 1998204467
334 .long 1072709382
335 .long 3861501553
336 .long 1072719872
337 .long 2268192434
338 .long 1072730162
339 .long 2981979308
340 .long 1072740260
341 .long 270859143
342 .long 1072750176
343 .long 2958651392
344 .long 1072759916
345 .long 313113243
346 .long 1072769490
347 .long 919449400
348 .long 1072778903
349 .long 2809328903
350 .long 1072788162
351 .long 2222981587
352 .long 1072797274
353 .long 2352530781
354 .long 1072806244
355 .long 594152517
356 .long 1072815078
357 .long 1555767199
358 .long 1072823780
359 .long 4282421314
360 .long 1072832355
361 .long 2355578597
362 .long 1072840809
363 .long 1162590619
364 .long 1072849145
365 .long 797864051
366 .long 1072857367
367 .long 431273680
368 .long 1072865479
369 .long 2669831148
370 .long 1072873484
371 .long 733477752
372 .long 1072881387
373 .long 4280220604
374 .long 1072889189
375 .long 801961634
376 .long 1072896896
377 .long 2915370760
378 .long 1072904508
379 .long 1159613482
380 .long 1072912030
381 .long 2689944798
382 .long 1072919463
383 .long 1248687822
384 .long 1072926811
385 .long 2967951030
386 .long 1072934075
387 .long 630170432
388 .long 1072941259
389 .long 3760898254
390 .long 1072948363
391 .long 0
392 .long 1072955392
393 .long 2370273294
394 .long 1072962345
395 .long 1261754802
396 .long 1072972640
397 .long 546334065
398 .long 1072986123
399 .long 1054893830
400 .long 1072999340
401 .long 1571187597
402 .long 1073012304
403 .long 1107975175
404 .long 1073025027
405 .long 3606909377
406 .long 1073037519
407 .long 1113616747
408 .long 1073049792
409 .long 4154744632
410 .long 1073061853
411 .long 3358931423
412 .long 1073073713
413 .long 4060702372
414 .long 1073085379
415 .long 747576176
416 .long 1073096860
417 .long 3023138255
418 .long 1073108161
419 .long 1419988548
420 .long 1073119291
421 .long 1914185305
422 .long 1073130255
423 .long 294389948
424 .long 1073141060
425 .long 3761802570
426 .long 1073151710
427 .long 978281566
428 .long 1073162213
429 .long 823148820
430 .long 1073172572
431 .long 2420954441
432 .long 1073182792
433 .long 3815449908
434 .long 1073192878
435 .long 2046058587
436 .long 1073202835
437 .long 1807524753
438 .long 1073212666
439 .long 2628681401
440 .long 1073222375
441 .long 3225667357
442 .long 1073231966
443 .long 1555307421
444 .long 1073241443
445 .long 3454043099
446 .long 1073250808
447 .long 1208137896
448 .long 1073260066
449 .long 3659916772
450 .long 1073269218
451 .long 1886261264
452 .long 1073278269
453 .long 3593647839
454 .long 1073287220
455 .long 3086012205
456 .long 1073296075
457 .long 2769796922
458 .long 1073304836
459 .long 888716057
460 .long 1073317807
461 .long 2201465623
462 .long 1073334794
463 .long 164369365
464 .long 1073351447
465 .long 3462666733
466 .long 1073367780
467 .long 2773905457
468 .long 1073383810
469 .long 1342879088
470 .long 1073399550
471 .long 2543933975
472 .long 1073415012
473 .long 1684477781
474 .long 1073430209
475 .long 3532178543
476 .long 1073445151
477 .long 1147747300
478 .long 1073459850
479 .long 1928031793
480 .long 1073474314
481 .long 2079717015
482 .long 1073488553
483 .long 4016765315
484 .long 1073502575
485 .long 3670431139
486 .long 1073516389
487 .long 3549227225
488 .long 1073530002
489 .long 11637607
490 .long 1073543422
491 .long 588220169
492 .long 1073556654
493 .long 2635407503
494 .long 1073569705
495 .long 2042029317
496 .long 1073582582
497 .long 1925128962
498 .long 1073595290
499 .long 4136375664
500 .long 1073607834
501 .long 759964600
502 .long 1073620221
503 .long 4257606771
504 .long 1073632453
505 .long 297278907
506 .long 1073644538
507 .long 3655053093
508 .long 1073656477
509 .long 2442253172
510 .long 1073668277
511 .long 1111876799
512 .long 1073679941
513 .long 3330973139
514 .long 1073691472
515 .long 3438879452
516 .long 1073702875
517 .long 3671565478
518 .long 1073714153
519 .long 1317849547
520 .long 1073725310
521 .long 1642364115
522 .long 1073736348
523 .long 4050900474
524 .long 1014427190
525 .long 1157977860
526 .long 1016444461
527 .long 1374568199
528 .long 1017271387
529 .long 2809163288
530 .long 1016882676
531 .long 3742377377
532 .long 1013168191
533 .long 3101606597
534 .long 1017541672
535 .long 65224358
536 .long 1017217597
537 .long 2691591250
538 .long 1017266643
539 .long 4020758549
540 .long 1017689313
541 .long 1316310992
542 .long 1018030788
543 .long 1031537856
544 .long 1014090882
545 .long 3261395239
546 .long 1016413641
547 .long 886424999
548 .long 1016313335
549 .long 3114776834
550 .long 1014195875
551 .long 1681120620
552 .long 1017825416
553 .long 1329600273
554 .long 1016625740
555 .long 465474623
556 .long 1017097119
557 .long 4251633980
558 .long 1017169077
559 .long 1986990133
560 .long 1017710645
561 .long 752958613
562 .long 1017159641
563 .long 2216216792
564 .long 1018020163
565 .long 4282860129
566 .long 1015924861
567 .long 1557627859
568 .long 1016039538
569 .long 3889219754
570 .long 1018086237
571 .long 3684996408
572 .long 1017353275
573 .long 723532103
574 .long 1017717141
575 .long 2951149676
576 .long 1012528470
577 .long 831890937
578 .long 1017830553
579 .long 1031212645
580 .long 1017387331
581 .long 2741737450
582 .long 1017604974
583 .long 2863311531
584 .long 1003776682
585 .long 4276736099
586 .long 1013153088
587 .long 4111778382
588 .long 1015673686
589 .long 1728065769
590 .long 1016413986
591 .long 2708718031
592 .long 1018078833
593 .long 1069335005
594 .long 1015291224
595 .long 700037144
596 .long 1016482032
597 .long 2904566452
598 .long 1017226861
599 .long 4074156649
600 .long 1017622651
601 .long 25019565
602 .long 1015245366
603 .long 3601952608
604 .long 1015771755
605 .long 3267129373
606 .long 1017904664
607 .long 503203103
608 .long 1014921629
609 .long 2122011730
610 .long 1018027866
611 .long 3927295461
612 .long 1014189456
613 .long 2790625147
614 .long 1016024251
615 .long 1330460186
616 .long 1016940346
617 .long 4033568463
618 .long 1015538390
619 .long 3695818227
620 .long 1017509621
621 .long 257573361
622 .long 1017208868
623 .long 3227697852
624 .long 1017337964
625 .long 234118548
626 .long 1017169577
627 .long 4009025803
628 .long 1017278524
629 .long 1948343394
630 .long 1017749310
631 .long 678398162
632 .long 1018144239
633 .long 3083864863
634 .long 1016669086
635 .long 2415453452
636 .long 1017890370
637 .long 175467344
638 .long 1017330033
639 .long 3197359580
640 .long 1010339928
641 .long 2071276951
642 .long 1015941358
643 .long 268372543
644 .long 1016737773
645 .long 938132959
646 .long 1017389108
647 .long 1816750559
648 .long 1017337448
649 .long 4119203749
650 .long 1017152174
651 .long 2578653878
652 .long 1013108497
653 .long 2470331096
654 .long 1014678606
655 .long 123855735
656 .long 1016553320
657 .long 1265650889
658 .long 1014782687
659 .long 3414398172
660 .long 1017182638
661 .long 1040773369
662 .long 1016158401
663 .long 3483628886
664 .long 1016886550
665 .long 4140499405
666 .long 1016191425
667 .long 3893477850
668 .long 1016964495
669 .long 3935319771
670 .long 1009634717
671 .long 2978982660
672 .long 1015027112
673 .long 2452709923
674 .long 1017990229
675 .long 3190365712
676 .long 1015835149
677 .long 4237588139
678 .long 1015832925
679 .long 2610678389
680 .long 1017962711
681 .long 2127316774
682 .long 1017405770
683 .long 824267502
684 .long 1017959463
685 .long 2165924042
686 .long 1017912225
687 .long 2774007076
688 .long 1013257418
689 .long 4123916326
690 .long 1017582284
691 .long 1976417958
692 .long 1016959909
693 .long 4092806412
694 .long 1017711279
695 .long 119251817
696 .long 1015363631
697 .long 3475418768
698 .long 1017675415
699 .long 1972580503
700 .long 1015470684
701 .long 815541017
702 .long 1017517969
703 .long 2429917451
704 .long 1017397776
705 .long 4062888482
706 .long 1016749897
707 .long 68284153
708 .long 1017925678
709 .long 2207779246
710 .long 1016320298
711 .long 1183466520
712 .long 1017408657
713 .long 143326427
714 .long 1017060403
715 .long 0
716 .long 2146435072
717 .long 0
718 .long 0
719 .long 0
720 .long 4293918720
721 .long 0
722 .long 0
723 .long 0
724 .long 0
725 .long 0
726 .long 0
727 .long 0
728 .long 2147483648
729 .long 0
730 .long 0
731 .long 0
732 .long 1138753536
733 .long 0
734 .long 0
735 .type static_const_table,@object
736 .size static_const_table,2000
737 .data
738 .section .note.GNU-stack, ""
739# End