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