1; libgcc1 routines for Synopsys DesignWare ARC cpu. 2 3/* Copyright (C) 1995-2021 Free Software Foundation, Inc. 4 Contributor: Joern Rennecke <joern.rennecke@embecosm.com> 5 on behalf of Synopsys Inc. 6 7This file is part of GCC. 8 9GCC is free software; you can redistribute it and/or modify it under 10the terms of the GNU General Public License as published by the Free 11Software Foundation; either version 3, or (at your option) any later 12version. 13 14GCC is distributed in the hope that it will be useful, but WITHOUT ANY 15WARRANTY; without even the implied warranty of MERCHANTABILITY or 16FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17for more details. 18 19Under Section 7 of GPL version 3, you are granted additional 20permissions described in the GCC Runtime Library Exception, version 213.1, as published by the Free Software Foundation. 22 23You should have received a copy of the GNU General Public License and 24a copy of the GCC Runtime Library Exception along with this program; 25see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 26<http://www.gnu.org/licenses/>. */ 27 28/* As a special exception, if you link this library with other files, 29 some of which are compiled with GCC, to produce an executable, 30 this library does not by itself cause the resulting executable 31 to be covered by the GNU General Public License. 32 This exception does not however invalidate any other reasons why 33 the executable file might be covered by the GNU General Public License. */ 34 35 36 /* ANSI concatenation macros. */ 37 38 #define CONCAT1(a, b) CONCAT2(a, b) 39 #define CONCAT2(a, b) a ## b 40 41 /* Use the right prefix for global labels. */ 42 43 #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x) 44 45#ifndef WORKING_ASSEMBLER 46#define abs_l abs 47#define asl_l asl 48#define mov_l mov 49#endif 50 51#define FUNC(X) .type SYM(X),@function 52#define HIDDEN_FUNC(X) FUNC(X)` .hidden X 53#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X 54#define ENDFUNC(X) ENDFUNC0(X) 55 56#ifdef __ARC_RF16__ 57 /* Use object attributes to inform other tools this file is 58 safe for RF16 configuration. */ 59 .arc_attribute Tag_ARC_ABI_rf16, 1 60#endif 61 62#ifdef L_mulsi3 63 .section .text 64 .align 4 65 66 .global SYM(__mulsi3) 67SYM(__mulsi3): 68 69/* This the simple version. 70 71 while (a) 72 { 73 if (a & 1) 74 r += b; 75 a >>= 1; 76 b <<= 1; 77 } 78*/ 79 80#if defined (__ARC_MUL64__) 81 FUNC(__mulsi3) 82 mulu64 r0,r1 83 j_s.d [blink] 84 mov_s r0,mlo 85 ENDFUNC(__mulsi3) 86#elif defined (__ARC_MPY__) 87 HIDDEN_FUNC(__mulsi3) 88 mpyu r0,r0,r1 89 nop_s 90 j_s [blink] 91 ENDFUNC(__mulsi3) 92#elif defined (__ARC_NORM__) 93 FUNC(__mulsi3) 94 norm.f r2,r0 95 rsub lp_count,r2,31 96 mov.mi lp_count,32 97 mov_s r2,r0 98 mov_s r0,0 99 lpnz @.Lend ; loop is aligned 100 lsr.f r2,r2 101 add.cs r0,r0,r1 102 add_s r1,r1,r1 103.Lend: j_s [blink] 104 ENDFUNC(__mulsi3) 105#elif !defined (__OPTIMIZE_SIZE__) && defined (__ARC_BARREL_SHIFTER__) 106 /* Up to 3.5 times faster than the simpler code below, but larger. */ 107 FUNC(__mulsi3) 108 ror.f r2,r0,4 109 mov_s r0,0 110 add3.mi r0,r0,r1 111 asl.f r2,r2,2 112 add2.cs r0,r0,r1 113 jeq_s [blink] 114.Loop: 115 add1.mi r0,r0,r1 116 asl.f r2,r2,2 117 add.cs r0,r0,r1 118 asl_s r1,r1,4 119 ror.f r2,r2,8 120 add3.mi r0,r0,r1 121 asl.f r2,r2,2 122 bne.d .Loop 123 add2.cs r0,r0,r1 124 j_s [blink] 125 ENDFUNC(__mulsi3) 126#elif !defined (__OPTIMIZE_SIZE__) /* __ARC601__ */ 127 FUNC(__mulsi3) 128 lsr.f r2,r0 129 mov_s r0,0 130 mov_s r3,0 131 add.cs r0,r0,r1 132.Loop: 133 lsr.f r2,r2 134 add1.cs r0,r0,r1 135 lsr.f r2,r2 136 add2.cs r0,r0,r1 137 lsr.f r2,r2 138 add3.cs r0,r0,r1 139 bne.d .Loop 140 add3 r1,r3,r1 141 j_s [blink] 142 ENDFUNC(__mulsi3) 143#else 144/********************************************************/ 145 FUNC(__mulsi3) 146 mov_s r2,0 ; Accumulate result here. 147.Lloop: 148 bbit0 r0,0,@.Ly 149 add_s r2,r2,r1 ; r += b 150.Ly: 151 lsr_s r0,r0 ; a >>= 1 152 asl_s r1,r1 ; b <<= 1 153 brne_s r0,0,@.Lloop 154.Ldone: 155 j_s.d [blink] 156 mov_s r0,r2 157 ENDFUNC(__mulsi3) 158/********************************************************/ 159#endif 160 161#endif /* L_mulsi3 */ 162 163#ifdef L_umulsidi3 164 .section .text 165 .align 4 166 167 .global SYM(__umulsidi3) 168SYM(__umulsidi3): 169 HIDDEN_FUNC(__umulsidi3) 170/* We need ARC700 /ARC_MUL64 definitions of __umulsidi3 / __umulsi3_highpart 171 in case some code has been compiled without multiply support enabled, 172 but linked with the multiply-support enabled libraries. 173 For ARC601 (i.e. without a barrel shifter), we also use umuldisi3 as our 174 umulsi3_highpart implementation; the use of the latter label doesn't 175 actually benefit ARC601 platforms, but is useful when ARC601 code is linked 176 against other libraries. */ 177#if defined (__ARC_MPY__) || defined (__ARC_MUL64__) \ 178 || !defined (__ARC_BARREL_SHIFTER__) 179 .global SYM(__umulsi3_highpart) 180SYM(__umulsi3_highpart): 181 HIDDEN_FUNC(__umulsi3_highpart) 182#endif 183 184/* This the simple version. 185 186 while (a) 187 { 188 if (a & 1) 189 r += b; 190 a >>= 1; 191 b <<= 1; 192 } 193*/ 194#include "ieee-754/arc-ieee-754.h" 195 196#ifdef __ARC_MPY__ 197 mov_s r12,DBL0L 198 mpyu DBL0L,r12,DBL0H 199 j_s.d [blink] 200 MPYHU DBL0H,r12,DBL0H 201#elif defined (__ARC_MUL64__) 202/* Likewise for __ARC_MUL64__ */ 203 mulu64 r0,r1 204 mov_s DBL0L,mlo 205 j_s.d [blink] 206 mov_s DBL0H,mhi 207#else /* !__ARC_MPY__ && !__ARC_MUL64__ */ 208/* Although it might look tempting to extend this to handle muldi3, 209 using mulsi3 twice with 2.25 cycles per 32 bit add is faster 210 than one loop with 3 or four cycles per 32 bit add. */ 211 asl.f r12,0 ; Top part of b. 212 mov_s r2,0 ; Accumulate result here. 213 bbit1.d r0,0,@.Ladd 214 mov_s r3,0 215.Llooptst: 216 rlc r12,r12 217 breq r0,0,@.Ldone ; while (a) 218.Lloop: 219 asl.f r1,r1 ; b <<= 1 220 bbit0.d r0,1,@.Llooptst 221 lsr r0,r0 ; a >>= 1 222 rlc r12,r12 223.Ladd: 224 add.f r3,r3,r1 ; r += b 225 brne.d r0,0,@.Lloop ; while (a); 226 adc r2,r2,r12 227.Ldone: 228 mov_s DBL0L,r3 229 j_s.d [blink] 230 mov DBL0H,r2 231#endif /* !__ARC_MPY__*/ 232 ENDFUNC(__umulsidi3) 233#if defined (__ARC_MPY__) || defined (__ARC_MUL64__) \ 234 || !defined (__ARC_BARREL_SHIFTER__) 235 ENDFUNC(__umulsi3_highpart) 236#endif 237#endif /* L_umulsidi3 */ 238 239#ifndef __ARC_RF16__ 240#ifdef L_muldi3 241 .section .text 242 .align 4 243 .global SYM(__muldi3) 244SYM(__muldi3): 245#ifdef __LITTLE_ENDIAN__ 246 push_s blink 247 mov_s r4,r3 ;4 248 mov_s r5,r2 ;4 249 mov_s r9,r0 ;4 250 mov_s r8,r1 ;4 251 bl.d @__umulsidi3 252 mov_s r1,r2 ;4 253 mov_s r6,r0 ;4 254 mov_s r7,r1 ;4 255 mov_s r0,r9 ;4 256 bl.d @__mulsi3 257 mov_s r1,r4 ;4 258 mov_s r4,r0 ;4 259 mov_s r1,r8 ;4 260 bl.d @__mulsi3 261 mov_s r0,r5 ;4 262 pop_s blink 263 add_s r0,r0,r4 ;2 264 add r1,r0,r7 265 j_s.d [blink] 266 mov_s r0,r6 ;4 267#else 268 push_s blink 269 mov_s r5,r3 270 mov_s r9,r2 271 mov_s r4,r1 272 mov_s r8,r0 273 mov_s r0,r1 274 bl.d @__umulsidi3 275 mov_s r1,r3 276 mov_s r7,r0 277 mov_s r6,r1 278 mov_s r0,r4 279 bl.d @__mulsi3 280 mov_s r1,r9 281 mov_s r4,r0 282 mov_s r1,r8 283 bl.d @__mulsi3 284 mov_s r0,r5 285 pop_s blink 286 add_s r0,r0,r4 287 add_s r0,r0,r7 288 j_s.d [blink] 289 mov_s r1,r6 290#endif /* __LITTLE_ENDIAN__ */ 291ENDFUNC(__muldi3) 292#endif /* L_muldi3 */ 293#endif /* !__ARC_RF16__ */ 294 295#ifdef L_umulsi3_highpart 296#include "ieee-754/arc-ieee-754.h" 297/* For use without a barrel shifter, and for ARC700 / ARC_MUL64, the 298 mulsidi3 algorithms above look better, so for these, there is an 299 extra label up there. */ 300#if !defined (__ARC_MPY__) && !defined (__ARC_MUL64__) \ 301 && defined (__ARC_BARREL_SHIFTER__) 302 .global SYM(__umulsi3_highpart) 303SYM(__umulsi3_highpart): 304 HIDDEN_FUNC(__umulsi3_highpart) 305 mov_s r2,0 306 mov_s r3,32 307.Loop: 308 lsr.f r0,r0 309 add.cs.f r2,r2,r1 310 sub_s r3,r3,1 311 brne.d r0,0,.Loop 312 rrc r2,r2 313 j_s.d [blink] 314/* Make the result register peephole-compatible with mulsidi3. */ 315 lsr DBL0H,r2,r3 316 ENDFUNC(__umulsi3_highpart) 317#endif /* !__ARC_MPY__ && __ARC_BARREL_SHIFTER__ */ 318#endif /* L_umulsi3_highpart */ 319 320#ifdef L_divmod_tools 321 322; Utilities used by all routines. 323 324 .section .text 325 326/* 327unsigned long 328udivmodsi4(int modwanted, unsigned long num, unsigned long den) 329{ 330 unsigned long bit = 1; 331 unsigned long res = 0; 332 333 while (den < num && bit && !(den & (1L<<31))) 334 { 335 den <<=1; 336 bit <<=1; 337 } 338 while (bit) 339 { 340 if (num >= den) 341 { 342 num -= den; 343 res |= bit; 344 } 345 bit >>=1; 346 den >>=1; 347 } 348 if (modwanted) return num; 349 return res; 350} 351*/ 352 353; inputs: r0 = numerator, r1 = denominator 354; outputs: r0 = quotient, r1 = remainder, r2/r3 trashed 355 356 .balign 4 357 .global SYM(__udivmodsi4) 358 FUNC(__udivmodsi4) 359SYM(__udivmodsi4): 360 361#if defined (__ARC_EA__) 362/* Normalize divisor and divident, and then use the appropriate number of 363 divaw (the number of result bits, or one more) to produce the result. 364 There are some special conditions that need to be tested: 365 - We can only directly normalize unsigned numbers that fit in 31 bit. For 366 the divisor, we test early on that it is not 'negative'. 367 - divaw can't corrrectly process a divident that is larger than the divisor. 368 We handle this be checking that the divident prior to normalization is 369 not larger than the normalized divisor. As we then already know then 370 that the divisor fits 31 bit, this check also makes sure that the 371 divident fits. 372 - ordinary normalization of the divident could make it larger than the 373 normalized divisor, which again would be unsuitable for divaw. 374 Thus, we want to shift left the divident by one less, except that we 375 want to leave it alone if it is already 31 bit. To this end, we 376 double the input to norm with adds. 377 - If the divident has less bits than the divisor, that would leave us 378 with a negative number of divaw to execute. Although we could use a 379 conditional loop to avoid excess divaw, and then the quotient could 380 be extracted correctly as there'd be more than enough zero bits, the 381 remainder would be shifted left too far, requiring a conditional shift 382 right. The cost of that shift and the possible mispredict on the 383 conditional loop cost as much as putting in an early check for a zero 384 result. */ 385 bmsk r3,r0,29 386 brne.d r3,r0,.Large_dividend 387 norm.f r2,r1 388 brlo r0,r1,.Lret0 389 norm r3,r0 390 asl_s r1,r1,r2 391 sub_s r3,r3,1 392 asl_l r0,r0,r3 ; not short to keep loop aligned 393 sub lp_count,r2,r3 394 lp .Ldiv_end 395 divaw r0,r0,r1 396.Ldiv_end:sub_s r3,r2,1 397 lsr r1,r0,r2 398 j_s.d [blink] 399 bmsk r0,r0,r3 400 401 .balign 4 402.Large_dividend: 403 bmi .Ltrivial 404 asl_s r1,r1,r2 405 mov_s r3,0 406 sub1.f r4,r0,r1 407 mov.lo r4,r0 408 mov.hs r3,2 409 cmp r4,r1 410 sub.hs r4,r4,r1 411 add.hs r3,r3,1 412 mov.f lp_count,r2 413 lpne .Ldiv_end2 414 divaw r4,r4,r1 415.Ldiv_end2:asl r0,r3,r2 416 lsr r1,r4,r2 417 sub_s r2,r2,1 418 bmsk r4,r4,r2 419 j_s.d [blink] 420 or.ne r0,r0,r4 421 422.Lret0: 423 mov_s r1,r0 424 j_s.d [blink] 425 mov_l r0,0 426 .balign 4 427.Ltrivial: 428 sub.f r1,r0,r1 429 mov.c r1,r0 430 mov_s r0,1 431 j_s.d [blink] 432 mov.c r0,0 433#elif !defined (__OPTIMIZE_SIZE__) && !defined (__ARC_RF16__) 434#if defined (__ARC_NORM__) && defined (__ARC_BARREL_SHIFTER__) 435 lsr_s r2,r0 436 brhs.d r1,r2,.Lret0_3 437 norm r2,r2 438 norm r3,r1 439 sub_s r3,r3,r2 440 asl_s r1,r1,r3 441 sub1.f 0,r0,r1 442 lsr.cs r1,r1,1 443 sbc r2,r3,0 444 sub1 r0,r0,r1 445 cmp_s r0,r1 446 mov.f lp_count,r2 447#else /* ! __ARC_NORM__ */ 448 lsr_s r2,r0 449 brhs.d r1,r2,.Lret0_3 450 mov lp_count,32 451.Lloop1: 452 asl_s r1,r1 ; den <<= 1 453 brls.d r1,r2,@.Lloop1 454 sub lp_count,lp_count,1 455 sub_s r0,r0,r1 456 lsr_s r1,r1 457 cmp_s r0,r1 458 xor.f r2,lp_count,31 459#if !defined (__ARCEM__) && !defined (__ARCHS__) 460 mov_s lp_count,r2 461#else 462 mov lp_count,r2 463 nop_s 464#endif /* !__ARCEM__ && !__ARCHS__ */ 465#endif /* !__ARC_NORM__ */ 466 sub.cc r0,r0,r1 467 mov_s r3,3 468 sbc r3,r3,0 469#if defined (__ARC_BARREL_SHIFTER__) 470 asl_s r3,r3,r2 471 rsub r1,r1,1 472 lpne @.Lloop2_end 473 add1.f r0,r1,r0 474 sub.cc r0,r0,r1 475.Lloop2_end: 476 lsr r1,r0,r2 477#else 478 rsub r1,r1,1 479 lpne @.Lloop2_end 480 asl_s r3,r3 481 add1.f r0,r1,r0 482 sub.cc r0,r0,r1 483.Lloop2_end: 484 lsr_s r1,r0 485 lsr.f lp_count,r2 486 mov.cc r1,r0 487 lpnz 1f 488 lsr_s r1,r1 489 lsr_s r1,r1 4901: 491#endif 492 bmsk r0,r0,r2 493 bclr r0,r0,r2 494 j_s.d [blink] 495 or_s r0,r0,r3 496.Lret0_3: 497#if 0 /* Slightly shorter, but slower. */ 498 lp .Loop3_end 499 brhi.d r1,r0,.Loop3_end 500 sub_s r0,r0,r1 501.Loop3_end 502 add_s r1,r1,r0 503 j_s.d [blink] 504 rsub r0,lp_count,32-1 505#else 506 mov_s r4,r1 507 sub.f r1,r0,r1 508 sbc r0,r0,r0 509 sub.cc.f r1,r1,r4 510 sbc r0,r0,0 511 sub.cc.f r1,r1,r4 512 sbc r0,r0,-3 513 j_s.d [blink] 514 add.cs r1,r1,r4 515#endif 516#else /* Arctangent-A5 */ 517 breq_s r1,0,@.Ldivmodend 518 mov_s r2,1 ; bit = 1 519 mov_s r3,0 ; res = 0 520.Lloop1: 521 brhs r1,r0,@.Lloop2 522 bbit1 r1,31,@.Lloop2 523 asl_s r1,r1 ; den <<= 1 524 b.d @.Lloop1 525 asl_s r2,r2 ; bit <<= 1 526.Lloop2: 527 brlo r0,r1,@.Lshiftdown 528 sub_s r0,r0,r1 ; num -= den 529 or_s r3,r3,r2 ; res |= bit 530.Lshiftdown: 531 lsr_s r2,r2 ; bit >>= 1 532 lsr_s r1,r1 ; den >>= 1 533 brne_s r2,0,@.Lloop2 534.Ldivmodend: 535 mov_s r1,r0 ; r1 = mod 536 j.d [blink] 537 mov_s r0,r3 ; r0 = res 538/******************************************************/ 539#endif 540 ENDFUNC(__udivmodsi4) 541 542#endif 543 544#ifdef L_udivsi3 545 .section .text 546 .align 4 547 548 .global SYM(__udivsi3) 549 FUNC(__udivsi3) 550SYM(__udivsi3): 551 b @SYM(__udivmodsi4) 552 ENDFUNC(__udivsi3) 553 554#endif /* L_udivsi3 */ 555 556#ifdef L_divsi3 557 .section .text 558 .align 4 559 560 .global SYM(__divsi3) 561 FUNC(__divsi3) 562 563#ifndef __ARC_EA__ 564SYM(__divsi3): 565 /* A5 / ARC60? */ 566 mov r12,blink 567 xor r11,r0,r1 568 abs_s r0,r0 569 bl.d @SYM(__udivmodsi4) 570 abs_s r1,r1 571 tst r11,r11 572 j.d [r12] 573 neg.mi r0,r0 574#else /* !ifndef __ARC_EA__ */ 575 ;; We can use the abs, norm, divaw and mpy instructions for ARC700 576#define MULDIV 577#ifdef MULDIV 578/* This table has been generated by divtab-arc700.c. */ 579/* 1/512 .. 1/256, normalized. There is a leading 1 in bit 31. 580 For powers of two, we list unnormalized numbers instead. The values 581 for powers of 2 are loaded, but not used. The value for 1 is actually 582 the first instruction after .Lmuldiv. */ 583 .balign 4 584.Ldivtab: 585 586 .long 0x1000000 587 .long 0x80808081 588 .long 0x81020409 589 .long 0x81848DA9 590 .long 0x82082083 591 .long 0x828CBFBF 592 .long 0x83126E98 593 .long 0x83993053 594 .long 0x84210843 595 .long 0x84A9F9C9 596 .long 0x85340854 597 .long 0x85BF3762 598 .long 0x864B8A7E 599 .long 0x86D90545 600 .long 0x8767AB60 601 .long 0x87F78088 602 .long 0x88888889 603 .long 0x891AC73B 604 .long 0x89AE408A 605 .long 0x8A42F871 606 .long 0x8AD8F2FC 607 .long 0x8B70344B 608 .long 0x8C08C08D 609 .long 0x8CA29C05 610 .long 0x8D3DCB09 611 .long 0x8DDA5203 612 .long 0x8E78356E 613 .long 0x8F1779DA 614 .long 0x8FB823EF 615 .long 0x905A3864 616 .long 0x90FDBC0A 617 .long 0x91A2B3C5 618 .long 0x92492493 619 .long 0x92F11385 620 .long 0x939A85C5 621 .long 0x94458095 622 .long 0x94F20950 623 .long 0x95A02569 624 .long 0x964FDA6D 625 .long 0x97012E03 626 .long 0x97B425EE 627 .long 0x9868C80A 628 .long 0x991F1A52 629 .long 0x99D722DB 630 .long 0x9A90E7DA 631 .long 0x9B4C6F9F 632 .long 0x9C09C09D 633 .long 0x9CC8E161 634 .long 0x9D89D89E 635 .long 0x9E4CAD24 636 .long 0x9F1165E8 637 .long 0x9FD809FE 638 .long 0xA0A0A0A1 639 .long 0xA16B312F 640 .long 0xA237C32C 641 .long 0xA3065E40 642 .long 0xA3D70A3E 643 .long 0xA4A9CF1E 644 .long 0xA57EB503 645 .long 0xA655C43A 646 .long 0xA72F053A 647 .long 0xA80A80A9 648 .long 0xA8E83F58 649 .long 0xA9C84A48 650 .long 0xAAAAAAAB 651 .long 0xAB8F69E3 652 .long 0xAC769185 653 .long 0xAD602B59 654 .long 0xAE4C415D 655 .long 0xAF3ADDC7 656 .long 0xB02C0B03 657 .long 0xB11FD3B9 658 .long 0xB21642C9 659 .long 0xB30F6353 660 .long 0xB40B40B5 661 .long 0xB509E68B 662 .long 0xB60B60B7 663 .long 0xB70FBB5B 664 .long 0xB81702E1 665 .long 0xB92143FB 666 .long 0xBA2E8BA3 667 .long 0xBB3EE722 668 .long 0xBC52640C 669 .long 0xBD691048 670 .long 0xBE82FA0C 671 .long 0xBFA02FE9 672 .long 0xC0C0C0C1 673 .long 0xC1E4BBD6 674 .long 0xC30C30C4 675 .long 0xC4372F86 676 .long 0xC565C87C 677 .long 0xC6980C6A 678 .long 0xC7CE0C7D 679 .long 0xC907DA4F 680 .long 0xCA4587E7 681 .long 0xCB8727C1 682 .long 0xCCCCCCCD 683 .long 0xCE168A78 684 .long 0xCF6474A9 685 .long 0xD0B69FCC 686 .long 0xD20D20D3 687 .long 0xD3680D37 688 .long 0xD4C77B04 689 .long 0xD62B80D7 690 .long 0xD79435E6 691 .long 0xD901B204 692 .long 0xDA740DA8 693 .long 0xDBEB61EF 694 .long 0xDD67C8A7 695 .long 0xDEE95C4D 696 .long 0xE070381D 697 .long 0xE1FC780F 698 .long 0xE38E38E4 699 .long 0xE525982B 700 .long 0xE6C2B449 701 .long 0xE865AC7C 702 .long 0xEA0EA0EB 703 .long 0xEBBDB2A6 704 .long 0xED7303B6 705 .long 0xEF2EB720 706 .long 0xF0F0F0F1 707 .long 0xF2B9D649 708 .long 0xF4898D60 709 .long 0xF6603D99 710 .long 0xF83E0F84 711 .long 0xFA232CF3 712 .long 0xFC0FC0FD 713 .long 0xFE03F810 714 .long 0x2000000 715 .long 0x81020409 716 .long 0x82082083 717 .long 0x83126E98 718 .long 0x84210843 719 .long 0x85340854 720 .long 0x864B8A7E 721 .long 0x8767AB60 722 .long 0x88888889 723 .long 0x89AE408A 724 .long 0x8AD8F2FC 725 .long 0x8C08C08D 726 .long 0x8D3DCB09 727 .long 0x8E78356E 728 .long 0x8FB823EF 729 .long 0x90FDBC0A 730 .long 0x92492493 731 .long 0x939A85C5 732 .long 0x94F20950 733 .long 0x964FDA6D 734 .long 0x97B425EE 735 .long 0x991F1A52 736 .long 0x9A90E7DA 737 .long 0x9C09C09D 738 .long 0x9D89D89E 739 .long 0x9F1165E8 740 .long 0xA0A0A0A1 741 .long 0xA237C32C 742 .long 0xA3D70A3E 743 .long 0xA57EB503 744 .long 0xA72F053A 745 .long 0xA8E83F58 746 .long 0xAAAAAAAB 747 .long 0xAC769185 748 .long 0xAE4C415D 749 .long 0xB02C0B03 750 .long 0xB21642C9 751 .long 0xB40B40B5 752 .long 0xB60B60B7 753 .long 0xB81702E1 754 .long 0xBA2E8BA3 755 .long 0xBC52640C 756 .long 0xBE82FA0C 757 .long 0xC0C0C0C1 758 .long 0xC30C30C4 759 .long 0xC565C87C 760 .long 0xC7CE0C7D 761 .long 0xCA4587E7 762 .long 0xCCCCCCCD 763 .long 0xCF6474A9 764 .long 0xD20D20D3 765 .long 0xD4C77B04 766 .long 0xD79435E6 767 .long 0xDA740DA8 768 .long 0xDD67C8A7 769 .long 0xE070381D 770 .long 0xE38E38E4 771 .long 0xE6C2B449 772 .long 0xEA0EA0EB 773 .long 0xED7303B6 774 .long 0xF0F0F0F1 775 .long 0xF4898D60 776 .long 0xF83E0F84 777 .long 0xFC0FC0FD 778 .long 0x4000000 779 .long 0x82082083 780 .long 0x84210843 781 .long 0x864B8A7E 782 .long 0x88888889 783 .long 0x8AD8F2FC 784 .long 0x8D3DCB09 785 .long 0x8FB823EF 786 .long 0x92492493 787 .long 0x94F20950 788 .long 0x97B425EE 789 .long 0x9A90E7DA 790 .long 0x9D89D89E 791 .long 0xA0A0A0A1 792 .long 0xA3D70A3E 793 .long 0xA72F053A 794 .long 0xAAAAAAAB 795 .long 0xAE4C415D 796 .long 0xB21642C9 797 .long 0xB60B60B7 798 .long 0xBA2E8BA3 799 .long 0xBE82FA0C 800 .long 0xC30C30C4 801 .long 0xC7CE0C7D 802 .long 0xCCCCCCCD 803 .long 0xD20D20D3 804 .long 0xD79435E6 805 .long 0xDD67C8A7 806 .long 0xE38E38E4 807 .long 0xEA0EA0EB 808 .long 0xF0F0F0F1 809 .long 0xF83E0F84 810 .long 0x8000000 811 .long 0x84210843 812 .long 0x88888889 813 .long 0x8D3DCB09 814 .long 0x92492493 815 .long 0x97B425EE 816 .long 0x9D89D89E 817 .long 0xA3D70A3E 818 .long 0xAAAAAAAB 819 .long 0xB21642C9 820 .long 0xBA2E8BA3 821 .long 0xC30C30C4 822 .long 0xCCCCCCCD 823 .long 0xD79435E6 824 .long 0xE38E38E4 825 .long 0xF0F0F0F1 826 .long 0x10000000 827 .long 0x88888889 828 .long 0x92492493 829 .long 0x9D89D89E 830 .long 0xAAAAAAAB 831 .long 0xBA2E8BA3 832 .long 0xCCCCCCCD 833 .long 0xE38E38E4 834 .long 0x20000000 835 .long 0x92492493 836 .long 0xAAAAAAAB 837 .long 0xCCCCCCCD 838 .long 0x40000000 839 .long 0xAAAAAAAB 840 .long 0x80000000 841__muldiv: 842 neg r4,r2 843 ld.as r5,[pcl,r4] 844 abs_s r12,r0 845 bic.f 0,r2,r4 846 mpyhu.ne r12,r12,r5 847 norm r3,r2 848 xor.f 0,r0,r1 849 ; write port allocation stall 850 rsub r3,r3,30 851 lsr r0,r12,r3 852 j_s.d [blink] 853 neg.mi r0,r0 854 855 .balign 4 856SYM(__divsi3): 857 norm r3,r1 858 abs_s r2,r1 859 brhs r3,23,__muldiv 860 norm r4,r0 861 abs_l r12,r0 862 brhs r4,r3,.Lonebit 863 asl_s r2,r2,r3 864 asl r12,r12,r4 865 sub lp_count,r3,r4 866 sub.f r12,r12,r2 867 brge.d r12,r2,.Lsbit 868 sub r4,r3,r4 869 add.lo r12,r12,r2 870 lp .Ldivend 871.Ldivstart:divaw r12,r12,r2 872.Ldivend:xor_s r1,r1,r0 873 sub r0,r4,1 874 bmsk r0,r12,r0 875 bset.hs r0,r0,r4 876 tst_s r1,r1 877 j_s.d [blink] 878 neg.mi r0,r0 879.Lonebit: 880 xor_s r1,r1,r0 881 asr_s r1,r1,31 882 sub1.f 0,r12,r2 ; special case: -2**(n+1) / 2**n 883 or r0,r1,1 884 add.eq r0,r0,r0 885 cmp_s r12,r2 886 j_s.d [blink] 887 mov.lo r0,0 888.Lsbit: 889 ; Need to handle special cases involving negative powers of two: 890 ; r12,r2 are normalized dividend / divisor; 891 ; divide anything by 0x80000000, or divide 0x80000000 by 0x40000000 892 add_s r12,r12,r2 893 xor_s r1,r1,r0 894 rsub r4,r4,-1 895 ror r0,r12,r4 896 tst_s r2,r2 897 bmsk r0,r0,r3 898 add.pl r0,r0,r0 899 tst_s r1,r1 900 j_s.d [blink] 901 neg.mi r0,r0 902#else /* !MULDIV */ 903/* This version requires that divaw works with a divisor of 0x80000000U */ 904 abs_s r2,r1 905 norm r4,r0 906 neg_s r3,r2 907 norm r3,r3 908 abs_s r12,r0 909 brhs r4,r3,.Lonebit 910 asl_s r2,r2,r3 911 asl r12,r12,r4 912 sub lp_count,r3,r4 913 cmp_s r12,r2 914 sub.hs r12,r12,r2 915 lp .Ldivend 916.Ldivstart:divaw r12,r12,r2 917.Ldivend:xor_s r1,r1,r0 918 sub_s r0,r3,1 919 bmsk r0,r12,r0 920 bset.hs r0,r0,r3 921 tst_s r1,r1 922 j_s.d [blink] 923 negmi r0,r0 924.Lonebit: 925 xor_s r1,r1,r0 926 asr_s r1,r1,31 927 cmp_s r12,r2 928 mov_s r0,0 929 j_s.d [blink] 930 orhs r0,r1,1 931#endif /* MULDIV */ 932 933#endif /* ifndef __ARC700__ */ 934 ENDFUNC(__divsi3) 935 936 937#endif /* L_divsi3 */ 938 939#ifdef L_umodsi3 940 .section .text 941 .align 4 942 943 .global SYM(__umodsi3) 944 FUNC(__umodsi3) 945SYM(__umodsi3): 946 mov r7,blink 947 bl.nd @SYM(__udivmodsi4) 948 j.d [r7] 949 mov r0,r1 950 ENDFUNC(__umodsi3) 951 952#endif /* L_umodsi3 */ 953 954#ifdef L_modsi3 955 .section .text 956 .align 4 957 958 .global SYM (__modsi3) 959 FUNC(__modsi3) 960SYM(__modsi3): 961#ifndef __ARC_EA__ 962 /* A5 / ARC60? */ 963 mov_s r12,blink 964 mov_s r11,r0 965 abs_s r0,r0 966 bl.d @SYM(__udivmodsi4) 967 abs_s r1,r1 968 tst r11,r11 969 neg_s r0,r1 970 j_s.d [r12] 971 mov.pl r0,r1 972#else /* __ARC_EA__ */ 973 abs_s r2,r1 974 norm.f r4,r0 975 neg r5,r2 976 norm r3,r5 977 abs_l r12,r0 978 brhs r4,r3,.Lonebit 979 asl_s r2,r2,r3 980 asl r12,r12,r4 981 sub lp_count,r3,r4 982 cmp_s r12,r2 983 sub.hs r12,r12,r2 984 tst_s r0,r0 985 lp .Ldivend 986.Ldivstart:divaw r12,r12,r2 987.Ldivend: 988 lsr r0,r12,r3 989 j_s.d [blink] 990 neg.mi r0,r0 991 .balign 4 992.Lonebit:neg.pl r5,r5 993 cmp_s r12,r2 994 j_s.d [blink] 995 sub.hs r0,r0,r5 996#endif /* !__ARC_EA__ */ 997 ENDFUNC(__modsi3) 998 999#endif /* L_modsi3 */ 1000 1001#ifdef L_clzsi2 1002 .section .text 1003 .align 4 1004 .global SYM (__clzsi2) 1005SYM(__clzsi2): 1006#ifdef __ARC_NORM__ 1007 HIDDEN_FUNC(__clzsi2) 1008 norm.f r0,r0 1009 mov.n r0,0 1010 j_s.d [blink] 1011 add.pl r0,r0,1 1012 ENDFUNC(__clzsi2) 1013#elif !defined (__ARC_BARREL_SHIFTER__) 1014 FUNC(__clzsi2) 1015 mov lp_count,10 1016 mov_l r1,0 1017 bset r2,r1,29 1018 lp .Loop_end 1019 brhs r0,r2,.Loop_end 1020 add3 r0,r1,r0 1021.Loop_end: 1022 asl.f 0,r0 1023 sub2 r0,lp_count,lp_count 1024 sub.cs.f r0,r0,1 1025 add r0,r0,31 1026 j_s.d [blink] 1027 add.pl r0,r0,1 1028 ENDFUNC(__clzsi2) 1029#else 1030 FUNC(__clzsi2) 1031 asl.f 0,r0,2 1032 mov r1,-1 1033.Lcheck: 1034 bbit1.d r0,31,.Ldone 1035 asl.pl r0,r0,3 1036 bcs.d .Ldone_1 1037 add_s r1,r1,3 1038 bpnz.d .Lcheck 1039 asl.f 0,r0,2 1040 mov_s r0,32 1041 j_s.d [blink] 1042 mov.ne r0,r1 1043.Ldone: 1044 j_s.d [blink] 1045 add_s r0,r1,1 1046.Ldone_1: 1047 j_s.d [blink] 1048 sub_s r0,r1,1 1049 ENDFUNC(__clzsi2) 1050#endif 1051#endif /* L_clzsi2 */ 1052 .section .text 1053 1054 1055;;; MILLICODE THUNK LIB ;*************** 1056 1057;;; .macro push_regs from, to, offset 1058;;; st_s "\from", [sp, \offset] 1059;;; .if \to-\from 1060;;; push_regs "(\from+1)", \to, "(\offset+4)" 1061;;; .endif 1062;;; .endm 1063;;; push_regs 13, 18, 0 1064;;; 1065 1066;;;; .macro sum from, to, three 1067;;;; .long \from 1068;;;; .long \three 1069;;;; .local regno 1070;;;; .set regno, \from+1 1071;;;; .set shift, 32 1072;;;; .set shift, shift - 1 1073;;;; # st_s %shift @3 lsl #shift 1074;;;; .if \to-\from 1075;;;; sum "(\from+1)", \to, "(\three)" 1076;;;; .endif 1077;;;; .endm 1078;;;; 1079;;;; SUM 0,5, 9 1080;;;; 1081; .altmacro 1082;; .macro push_regs from=0, to=3, offset 1083;; st_s r\from, [sp, \offset] 1084;; .if \to-\from 1085;; push_regs "\from+1 ",\to,"(\offset+4)" 1086;; .endif 1087;; .endm 1088;; 1089;; .macro expand_to_push from=13, to 1090;; ; .section .text 1091;; ; .align 4 1092;; ; .global st_ 1093;; ; .type foo, 1094;; st_13_to_25: 1095;; ; push_regs \from, \to, 0 1096;; push_regs 0,3 ; 1097;; .endm 1098;; 1099;; expand_to_push 13,18 1100;; 1101;#endif 1102 1103#ifndef __ARC_RF16__ 1104#ifdef L_millicodethunk_st 1105 .section .text 1106 .align 4 1107 .global SYM(__st_r13_to_r15) 1108 .global SYM(__st_r13_to_r16) 1109 .global SYM(__st_r13_to_r17) 1110 .global SYM(__st_r13_to_r18) 1111 .global SYM(__st_r13_to_r19) 1112 .global SYM(__st_r13_to_r20) 1113 .global SYM(__st_r13_to_r21) 1114 .global SYM(__st_r13_to_r22) 1115 .global SYM(__st_r13_to_r23) 1116 .global SYM(__st_r13_to_r24) 1117 .global SYM(__st_r13_to_r25) 1118 HIDDEN_FUNC(__st_r13_to_r15) 1119 HIDDEN_FUNC(__st_r13_to_r16) 1120 HIDDEN_FUNC(__st_r13_to_r17) 1121 HIDDEN_FUNC(__st_r13_to_r18) 1122 HIDDEN_FUNC(__st_r13_to_r19) 1123 HIDDEN_FUNC(__st_r13_to_r20) 1124 HIDDEN_FUNC(__st_r13_to_r21) 1125 HIDDEN_FUNC(__st_r13_to_r22) 1126 HIDDEN_FUNC(__st_r13_to_r23) 1127 HIDDEN_FUNC(__st_r13_to_r24) 1128 HIDDEN_FUNC(__st_r13_to_r25) 1129 .align 4 1130SYM(__st_r13_to_r25): 1131 st r25, [sp,48] 1132SYM(__st_r13_to_r24): 1133 st r24, [sp,44] 1134SYM(__st_r13_to_r23): 1135 st r23, [sp,40] 1136SYM(__st_r13_to_r22): 1137 st r22, [sp,36] 1138SYM(__st_r13_to_r21): 1139 st r21, [sp,32] 1140SYM(__st_r13_to_r20): 1141 st r20, [sp,28] 1142SYM(__st_r13_to_r19): 1143 st r19, [sp,24] 1144SYM(__st_r13_to_r18): 1145 st r18, [sp,20] 1146SYM(__st_r13_to_r17): 1147 st r17, [sp,16] 1148SYM(__st_r13_to_r16): 1149 st r16, [sp,12] 1150SYM(__st_r13_to_r15): 1151#ifdef __ARC700__ 1152 st r15, [sp,8] ; minimum function size to avoid stall: 6 bytes. 1153#else 1154 st_s r15, [sp,8] 1155#endif 1156 st_s r14, [sp,4] 1157 j_s.d [%blink] 1158 st_s r13, [sp,0] 1159 ENDFUNC(__st_r13_to_r15) 1160 ENDFUNC(__st_r13_to_r16) 1161 ENDFUNC(__st_r13_to_r17) 1162 ENDFUNC(__st_r13_to_r18) 1163 ENDFUNC(__st_r13_to_r19) 1164 ENDFUNC(__st_r13_to_r20) 1165 ENDFUNC(__st_r13_to_r21) 1166 ENDFUNC(__st_r13_to_r22) 1167 ENDFUNC(__st_r13_to_r23) 1168 ENDFUNC(__st_r13_to_r24) 1169 ENDFUNC(__st_r13_to_r25) 1170#endif /* L_millicodethunk_st */ 1171 1172 1173#ifdef L_millicodethunk_ld 1174 .section .text 1175 .align 4 1176; ================================== 1177; the loads 1178 1179 .global SYM(__ld_r13_to_r15) 1180 .global SYM(__ld_r13_to_r16) 1181 .global SYM(__ld_r13_to_r17) 1182 .global SYM(__ld_r13_to_r18) 1183 .global SYM(__ld_r13_to_r19) 1184 .global SYM(__ld_r13_to_r20) 1185 .global SYM(__ld_r13_to_r21) 1186 .global SYM(__ld_r13_to_r22) 1187 .global SYM(__ld_r13_to_r23) 1188 .global SYM(__ld_r13_to_r24) 1189 .global SYM(__ld_r13_to_r25) 1190 HIDDEN_FUNC(__ld_r13_to_r15) 1191 HIDDEN_FUNC(__ld_r13_to_r16) 1192 HIDDEN_FUNC(__ld_r13_to_r17) 1193 HIDDEN_FUNC(__ld_r13_to_r18) 1194 HIDDEN_FUNC(__ld_r13_to_r19) 1195 HIDDEN_FUNC(__ld_r13_to_r20) 1196 HIDDEN_FUNC(__ld_r13_to_r21) 1197 HIDDEN_FUNC(__ld_r13_to_r22) 1198 HIDDEN_FUNC(__ld_r13_to_r23) 1199 HIDDEN_FUNC(__ld_r13_to_r24) 1200 HIDDEN_FUNC(__ld_r13_to_r25) 1201SYM(__ld_r13_to_r25): 1202 ld r25, [sp,48] 1203SYM(__ld_r13_to_r24): 1204 ld r24, [sp,44] 1205SYM(__ld_r13_to_r23): 1206 ld r23, [sp,40] 1207SYM(__ld_r13_to_r22): 1208 ld r22, [sp,36] 1209SYM(__ld_r13_to_r21): 1210 ld r21, [sp,32] 1211SYM(__ld_r13_to_r20): 1212 ld r20, [sp,28] 1213SYM(__ld_r13_to_r19): 1214 ld r19, [sp,24] 1215SYM(__ld_r13_to_r18): 1216 ld r18, [sp,20] 1217SYM(__ld_r13_to_r17): 1218 ld r17, [sp,16] 1219SYM(__ld_r13_to_r16): 1220 ld r16, [sp,12] 1221SYM(__ld_r13_to_r15): 1222#ifdef __ARC700__ 1223 ld r15, [sp,8] ; minimum function size to avoid stall: 6 bytes. 1224#else 1225 ld_s r15, [sp,8] 1226#endif 1227 ld_s r14, [sp,4] 1228 j_s.d [%blink] 1229 ld_s r13, [sp,0] 1230 ENDFUNC(__ld_r13_to_r15) 1231 ENDFUNC(__ld_r13_to_r16) 1232 ENDFUNC(__ld_r13_to_r17) 1233 ENDFUNC(__ld_r13_to_r18) 1234 ENDFUNC(__ld_r13_to_r19) 1235 ENDFUNC(__ld_r13_to_r20) 1236 ENDFUNC(__ld_r13_to_r21) 1237 ENDFUNC(__ld_r13_to_r22) 1238 ENDFUNC(__ld_r13_to_r23) 1239 ENDFUNC(__ld_r13_to_r24) 1240 ENDFUNC(__ld_r13_to_r25) 1241 1242#endif /* L_millicodethunk_ld */ 1243#ifdef L_millicodethunk_ret 1244 .global SYM(__ld_r13_to_r14_ret) 1245 .global SYM(__ld_r13_to_r15_ret) 1246 .global SYM(__ld_r13_to_r16_ret) 1247 .global SYM(__ld_r13_to_r17_ret) 1248 .global SYM(__ld_r13_to_r18_ret) 1249 .global SYM(__ld_r13_to_r19_ret) 1250 .global SYM(__ld_r13_to_r20_ret) 1251 .global SYM(__ld_r13_to_r21_ret) 1252 .global SYM(__ld_r13_to_r22_ret) 1253 .global SYM(__ld_r13_to_r23_ret) 1254 .global SYM(__ld_r13_to_r24_ret) 1255 .global SYM(__ld_r13_to_r25_ret) 1256 HIDDEN_FUNC(__ld_r13_to_r14_ret) 1257 HIDDEN_FUNC(__ld_r13_to_r15_ret) 1258 HIDDEN_FUNC(__ld_r13_to_r16_ret) 1259 HIDDEN_FUNC(__ld_r13_to_r17_ret) 1260 HIDDEN_FUNC(__ld_r13_to_r18_ret) 1261 HIDDEN_FUNC(__ld_r13_to_r19_ret) 1262 HIDDEN_FUNC(__ld_r13_to_r20_ret) 1263 HIDDEN_FUNC(__ld_r13_to_r21_ret) 1264 HIDDEN_FUNC(__ld_r13_to_r22_ret) 1265 HIDDEN_FUNC(__ld_r13_to_r23_ret) 1266 HIDDEN_FUNC(__ld_r13_to_r24_ret) 1267 HIDDEN_FUNC(__ld_r13_to_r25_ret) 1268 .section .text 1269 .align 4 1270SYM(__ld_r13_to_r25_ret): 1271 ld r25, [sp,48] 1272SYM(__ld_r13_to_r24_ret): 1273 ld r24, [sp,44] 1274SYM(__ld_r13_to_r23_ret): 1275 ld r23, [sp,40] 1276SYM(__ld_r13_to_r22_ret): 1277 ld r22, [sp,36] 1278SYM(__ld_r13_to_r21_ret): 1279 ld r21, [sp,32] 1280SYM(__ld_r13_to_r20_ret): 1281 ld r20, [sp,28] 1282SYM(__ld_r13_to_r19_ret): 1283 ld r19, [sp,24] 1284SYM(__ld_r13_to_r18_ret): 1285 ld r18, [sp,20] 1286SYM(__ld_r13_to_r17_ret): 1287 ld r17, [sp,16] 1288SYM(__ld_r13_to_r16_ret): 1289 ld r16, [sp,12] 1290SYM(__ld_r13_to_r15_ret): 1291 ld r15, [sp,8] 1292SYM(__ld_r13_to_r14_ret): 1293 ld blink,[sp,r12] 1294 ld_s r14, [sp,4] 1295 ld.ab r13, [sp,r12] 1296 j_s.d [%blink] 1297 add_s sp,sp,4 1298 ENDFUNC(__ld_r13_to_r14_ret) 1299 ENDFUNC(__ld_r13_to_r15_ret) 1300 ENDFUNC(__ld_r13_to_r16_ret) 1301 ENDFUNC(__ld_r13_to_r17_ret) 1302 ENDFUNC(__ld_r13_to_r18_ret) 1303 ENDFUNC(__ld_r13_to_r19_ret) 1304 ENDFUNC(__ld_r13_to_r20_ret) 1305 ENDFUNC(__ld_r13_to_r21_ret) 1306 ENDFUNC(__ld_r13_to_r22_ret) 1307 ENDFUNC(__ld_r13_to_r23_ret) 1308 ENDFUNC(__ld_r13_to_r24_ret) 1309 ENDFUNC(__ld_r13_to_r25_ret) 1310 1311#endif /* L_millicodethunk_ret */ 1312 1313#if defined (__ARC700__) || defined (__ARC_FPX_QUARK__) 1314#ifdef L_adddf3 1315#ifdef __ARC_NORM__ 1316#include "ieee-754/adddf3.S" 1317#endif 1318#endif 1319 1320#ifdef L_muldf3 1321#ifdef __ARC_MPY__ 1322#include "ieee-754/muldf3.S" 1323#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__) 1324#include "ieee-754/arc600-mul64/muldf3.S" 1325#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__) 1326#include "ieee-754/arc600-dsp/muldf3.S" 1327#endif 1328#endif 1329 1330#ifdef L_addsf3 1331#ifdef __ARC_NORM__ 1332#include "ieee-754/addsf3.S" 1333#endif 1334#endif 1335 1336#ifdef L_mulsf3 1337#ifdef __ARC_MPY__ 1338#include "ieee-754/mulsf3.S" 1339#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__) 1340#include "ieee-754/arc600-mul64/mulsf3.S" 1341#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__) 1342#include "ieee-754/arc600-dsp/mulsf3.S" 1343#elif defined (__ARC_NORM__) 1344#include "ieee-754/arc600/mulsf3.S" 1345#endif 1346#endif 1347 1348#ifdef L_divdf3 1349#ifdef __ARC_MPY__ 1350#include "ieee-754/divdf3.S" 1351#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__) 1352#include "ieee-754/arc600-mul64/divdf3.S" 1353#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__) 1354#include "ieee-754/arc600-dsp/divdf3.S" 1355#endif 1356#endif 1357 1358#ifdef L_divsf3 1359#ifdef __ARC_MPY__ 1360#include "ieee-754/divsf3-stdmul.S" 1361#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__) 1362#include "ieee-754/arc600-mul64/divsf3.S" 1363#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__) 1364#include "ieee-754/arc600-dsp/divsf3.S" 1365#elif defined (__ARC_NORM__) 1366#include "ieee-754/arc600/divsf3.S" 1367#endif 1368#endif 1369 1370#ifdef L_extendsfdf2 1371#ifdef __ARC_NORM__ 1372#include "ieee-754/extendsfdf2.S" 1373#endif 1374#endif 1375 1376#ifdef L_truncdfsf2 1377#ifdef __ARC_NORM__ 1378#include "ieee-754/truncdfsf2.S" 1379#endif 1380#endif 1381 1382#ifdef L_floatsidf 1383#ifdef __ARC_NORM__ 1384#include "ieee-754/floatsidf.S" 1385#endif 1386#endif 1387 1388#ifdef L_floatsisf 1389#ifdef __ARC_NORM__ 1390#include "ieee-754/floatsisf.S" 1391#endif 1392#endif 1393 1394#ifdef L_floatunsidf 1395#ifdef __ARC_NORM__ 1396#include "ieee-754/floatunsidf.S" 1397#endif 1398#endif 1399 1400#ifdef L_fixdfsi 1401#ifdef __ARC_NORM__ 1402#include "ieee-754/fixdfsi.S" 1403#endif 1404#endif 1405 1406#ifdef L_fixsfsi 1407#ifdef __ARC_NORM__ 1408#include "ieee-754/fixsfsi.S" 1409#endif 1410#endif 1411 1412#ifdef L_fixunsdfsi 1413#ifdef __ARC_NORM__ 1414#include "ieee-754/fixunsdfsi.S" 1415#endif 1416#endif 1417 1418#ifdef L_eqdf2 1419#ifdef __ARC_NORM__ 1420#include "ieee-754/eqdf2.S" 1421#endif 1422#endif 1423 1424#ifdef L_eqsf2 1425#ifdef __ARC_NORM__ 1426#include "ieee-754/eqsf2.S" 1427#endif 1428#endif 1429 1430#ifdef L_gtdf2 1431#ifdef __ARC_NORM__ 1432#include "ieee-754/gtdf2.S" 1433#endif 1434#endif 1435 1436#ifdef L_gtsf2 1437#ifdef __ARC_NORM__ 1438#include "ieee-754/gtsf2.S" 1439#endif 1440#endif 1441 1442#ifdef L_gedf2 1443#ifdef __ARC_NORM__ 1444#include "ieee-754/gedf2.S" 1445#endif 1446#endif 1447 1448#ifdef L_gesf2 1449#ifdef __ARC_NORM__ 1450#include "ieee-754/gesf2.S" 1451#endif 1452#endif 1453 1454#ifdef L_uneqdf2 1455#ifdef __ARC_NORM__ 1456#include "ieee-754/uneqdf2.S" 1457#endif 1458#endif 1459 1460#ifdef L_uneqsf2 1461#ifdef __ARC_NORM__ 1462#include "ieee-754/uneqsf2.S" 1463#endif 1464#endif 1465 1466#ifdef L_orddf2 1467#ifdef __ARC_NORM__ 1468#include "ieee-754/orddf2.S" 1469#endif 1470#endif 1471 1472#ifdef L_ordsf2 1473#ifdef __ARC_NORM__ 1474#include "ieee-754/ordsf2.S" 1475#endif 1476#endif 1477#endif /* ARC_OPTFPE */ 1478 1479#endif /* !__ARC_RF16__ */ 1480