lib1funcs.S revision 1.1 1 ; libgcc1 routines for Synopsys DesignWare ARC cpu.
2
3 /* Copyright (C) 1995-2015 Free Software Foundation, Inc.
4 Contributor: Joern Rennecke <joern.rennecke (at) embecosm.com>
5 on behalf of Synopsys Inc.
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify it under
10 the terms of the GNU General Public License as published by the Free
11 Software Foundation; either version 3, or (at your option) any later
12 version.
13
14 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15 WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 for more details.
18
19 Under Section 7 of GPL version 3, you are granted additional
20 permissions described in the GCC Runtime Library Exception, version
21 3.1, as published by the Free Software Foundation.
22
23 You should have received a copy of the GNU General Public License and
24 a copy of the GCC Runtime Library Exception along with this program;
25 see 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)
63 SYM(__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__)
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)
164 SYM(__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)
175 SYM(__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)
240 SYM(__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 /*
264 unsigned long
265 udivmodsi4(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)
296 SYM(__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 mov_s lp_count,r2
397 #endif /* !__ARC_NORM__ */
398 sub.cc r0,r0,r1
399 mov_s r3,3
400 sbc r3,r3,0
401 #ifndef __ARC601__
402 asl_s r3,r3,r2
403 rsub r1,r1,1
404 lpne @.Lloop2_end
405 add1.f r0,r1,r0
406 sub.cc r0,r0,r1
407 .Lloop2_end:
408 lsr r1,r0,r2
409 #else
410 rsub r1,r1,1
411 lpne @.Lloop2_end
412 asl_s r3,r3
413 add1.f r0,r1,r0
414 sub.cc r0,r0,r1
415 .Lloop2_end:
416 lsr_s r1,r0
417 lsr.f lp_count,r2
418 mov.cc r1,r0
419 lpnz 1f
420 lsr_s r1,r1
421 lsr_s r1,r1
422 1:
423 #endif
424 bmsk r0,r0,r2
425 bclr r0,r0,r2
426 j_s.d [blink]
427 or_s r0,r0,r3
428 .Lret0_3:
429 #if 0 /* Slightly shorter, but slower. */
430 lp .Loop3_end
431 brhi.d r1,r0,.Loop3_end
432 sub_s r0,r0,r1
433 .Loop3_end
434 add_s r1,r1,r0
435 j_s.d [blink]
436 rsub r0,lp_count,32-1
437 #else
438 mov_s r4,r1
439 sub.f r1,r0,r1
440 sbc r0,r0,r0
441 sub.cc.f r1,r1,r4
442 sbc r0,r0,0
443 sub.cc.f r1,r1,r4
444 sbc r0,r0,-3
445 j_s.d [blink]
446 add.cs r1,r1,r4
447 #endif
448 #else /* Arctangent-A5 */
449 breq_s r1,0,@.Ldivmodend
450 mov_s r2,1 ; bit = 1
451 mov_s r3,0 ; res = 0
452 .Lloop1:
453 brhs r1,r0,@.Lloop2
454 bbit1 r1,31,@.Lloop2
455 asl_s r1,r1 ; den <<= 1
456 b.d @.Lloop1
457 asl_s r2,r2 ; bit <<= 1
458 .Lloop2:
459 brlo r0,r1,@.Lshiftdown
460 sub_s r0,r0,r1 ; num -= den
461 or_s r3,r3,r2 ; res |= bit
462 .Lshiftdown:
463 lsr_s r2,r2 ; bit >>= 1
464 lsr_s r1,r1 ; den >>= 1
465 brne_s r2,0,@.Lloop2
466 .Ldivmodend:
467 mov_s r1,r0 ; r1 = mod
468 j.d [blink]
469 mov_s r0,r3 ; r0 = res
470 /******************************************************/
471 #endif
472 ENDFUNC(__udivmodsi4)
473
474 #endif
475
476 #ifdef L_udivsi3
477 .section .text
478 .align 4
479
480 .global SYM(__udivsi3)
481 FUNC(__udivsi3)
482 SYM(__udivsi3):
483 b @SYM(__udivmodsi4)
484 ENDFUNC(__udivsi3)
485 #if 0 /* interferes with linux loader */
486 .section .__arc_profile_forward, "a"
487 .long SYM(__udivsi3)
488 .long SYM(__udivmodsi4)
489 .long 65536
490 #endif
491
492 #endif /* L_udivsi3 */
493
494 #ifdef L_divsi3
495 .section .text
496 .align 4
497
498 .global SYM(__divsi3)
499 FUNC(__divsi3)
500
501 #ifndef __ARC700__
502 SYM(__divsi3):
503 /* A5 / ARC60? */
504 mov r7,blink
505 xor r6,r0,r1
506 abs_s r0,r0
507 bl.d @SYM(__udivmodsi4)
508 abs_s r1,r1
509 tst r6,r6
510 j.d [r7]
511 neg.mi r0,r0
512 #else /* !ifndef __ARC700__ */
513 ;; We can use the abs, norm, divaw and mpy instructions for ARC700
514 #define MULDIV
515 #ifdef MULDIV
516 /* This table has been generated by divtab-arc700.c. */
517 /* 1/512 .. 1/256, normalized. There is a leading 1 in bit 31.
518 For powers of two, we list unnormalized numbers instead. The values
519 for powers of 2 are loaded, but not used. The value for 1 is actually
520 the first instruction after .Lmuldiv. */
521 .balign 4
522 .Ldivtab:
523
524 .long 0x1000000
525 .long 0x80808081
526 .long 0x81020409
527 .long 0x81848DA9
528 .long 0x82082083
529 .long 0x828CBFBF
530 .long 0x83126E98
531 .long 0x83993053
532 .long 0x84210843
533 .long 0x84A9F9C9
534 .long 0x85340854
535 .long 0x85BF3762
536 .long 0x864B8A7E
537 .long 0x86D90545
538 .long 0x8767AB60
539 .long 0x87F78088
540 .long 0x88888889
541 .long 0x891AC73B
542 .long 0x89AE408A
543 .long 0x8A42F871
544 .long 0x8AD8F2FC
545 .long 0x8B70344B
546 .long 0x8C08C08D
547 .long 0x8CA29C05
548 .long 0x8D3DCB09
549 .long 0x8DDA5203
550 .long 0x8E78356E
551 .long 0x8F1779DA
552 .long 0x8FB823EF
553 .long 0x905A3864
554 .long 0x90FDBC0A
555 .long 0x91A2B3C5
556 .long 0x92492493
557 .long 0x92F11385
558 .long 0x939A85C5
559 .long 0x94458095
560 .long 0x94F20950
561 .long 0x95A02569
562 .long 0x964FDA6D
563 .long 0x97012E03
564 .long 0x97B425EE
565 .long 0x9868C80A
566 .long 0x991F1A52
567 .long 0x99D722DB
568 .long 0x9A90E7DA
569 .long 0x9B4C6F9F
570 .long 0x9C09C09D
571 .long 0x9CC8E161
572 .long 0x9D89D89E
573 .long 0x9E4CAD24
574 .long 0x9F1165E8
575 .long 0x9FD809FE
576 .long 0xA0A0A0A1
577 .long 0xA16B312F
578 .long 0xA237C32C
579 .long 0xA3065E40
580 .long 0xA3D70A3E
581 .long 0xA4A9CF1E
582 .long 0xA57EB503
583 .long 0xA655C43A
584 .long 0xA72F053A
585 .long 0xA80A80A9
586 .long 0xA8E83F58
587 .long 0xA9C84A48
588 .long 0xAAAAAAAB
589 .long 0xAB8F69E3
590 .long 0xAC769185
591 .long 0xAD602B59
592 .long 0xAE4C415D
593 .long 0xAF3ADDC7
594 .long 0xB02C0B03
595 .long 0xB11FD3B9
596 .long 0xB21642C9
597 .long 0xB30F6353
598 .long 0xB40B40B5
599 .long 0xB509E68B
600 .long 0xB60B60B7
601 .long 0xB70FBB5B
602 .long 0xB81702E1
603 .long 0xB92143FB
604 .long 0xBA2E8BA3
605 .long 0xBB3EE722
606 .long 0xBC52640C
607 .long 0xBD691048
608 .long 0xBE82FA0C
609 .long 0xBFA02FE9
610 .long 0xC0C0C0C1
611 .long 0xC1E4BBD6
612 .long 0xC30C30C4
613 .long 0xC4372F86
614 .long 0xC565C87C
615 .long 0xC6980C6A
616 .long 0xC7CE0C7D
617 .long 0xC907DA4F
618 .long 0xCA4587E7
619 .long 0xCB8727C1
620 .long 0xCCCCCCCD
621 .long 0xCE168A78
622 .long 0xCF6474A9
623 .long 0xD0B69FCC
624 .long 0xD20D20D3
625 .long 0xD3680D37
626 .long 0xD4C77B04
627 .long 0xD62B80D7
628 .long 0xD79435E6
629 .long 0xD901B204
630 .long 0xDA740DA8
631 .long 0xDBEB61EF
632 .long 0xDD67C8A7
633 .long 0xDEE95C4D
634 .long 0xE070381D
635 .long 0xE1FC780F
636 .long 0xE38E38E4
637 .long 0xE525982B
638 .long 0xE6C2B449
639 .long 0xE865AC7C
640 .long 0xEA0EA0EB
641 .long 0xEBBDB2A6
642 .long 0xED7303B6
643 .long 0xEF2EB720
644 .long 0xF0F0F0F1
645 .long 0xF2B9D649
646 .long 0xF4898D60
647 .long 0xF6603D99
648 .long 0xF83E0F84
649 .long 0xFA232CF3
650 .long 0xFC0FC0FD
651 .long 0xFE03F810
652 .long 0x2000000
653 .long 0x81020409
654 .long 0x82082083
655 .long 0x83126E98
656 .long 0x84210843
657 .long 0x85340854
658 .long 0x864B8A7E
659 .long 0x8767AB60
660 .long 0x88888889
661 .long 0x89AE408A
662 .long 0x8AD8F2FC
663 .long 0x8C08C08D
664 .long 0x8D3DCB09
665 .long 0x8E78356E
666 .long 0x8FB823EF
667 .long 0x90FDBC0A
668 .long 0x92492493
669 .long 0x939A85C5
670 .long 0x94F20950
671 .long 0x964FDA6D
672 .long 0x97B425EE
673 .long 0x991F1A52
674 .long 0x9A90E7DA
675 .long 0x9C09C09D
676 .long 0x9D89D89E
677 .long 0x9F1165E8
678 .long 0xA0A0A0A1
679 .long 0xA237C32C
680 .long 0xA3D70A3E
681 .long 0xA57EB503
682 .long 0xA72F053A
683 .long 0xA8E83F58
684 .long 0xAAAAAAAB
685 .long 0xAC769185
686 .long 0xAE4C415D
687 .long 0xB02C0B03
688 .long 0xB21642C9
689 .long 0xB40B40B5
690 .long 0xB60B60B7
691 .long 0xB81702E1
692 .long 0xBA2E8BA3
693 .long 0xBC52640C
694 .long 0xBE82FA0C
695 .long 0xC0C0C0C1
696 .long 0xC30C30C4
697 .long 0xC565C87C
698 .long 0xC7CE0C7D
699 .long 0xCA4587E7
700 .long 0xCCCCCCCD
701 .long 0xCF6474A9
702 .long 0xD20D20D3
703 .long 0xD4C77B04
704 .long 0xD79435E6
705 .long 0xDA740DA8
706 .long 0xDD67C8A7
707 .long 0xE070381D
708 .long 0xE38E38E4
709 .long 0xE6C2B449
710 .long 0xEA0EA0EB
711 .long 0xED7303B6
712 .long 0xF0F0F0F1
713 .long 0xF4898D60
714 .long 0xF83E0F84
715 .long 0xFC0FC0FD
716 .long 0x4000000
717 .long 0x82082083
718 .long 0x84210843
719 .long 0x864B8A7E
720 .long 0x88888889
721 .long 0x8AD8F2FC
722 .long 0x8D3DCB09
723 .long 0x8FB823EF
724 .long 0x92492493
725 .long 0x94F20950
726 .long 0x97B425EE
727 .long 0x9A90E7DA
728 .long 0x9D89D89E
729 .long 0xA0A0A0A1
730 .long 0xA3D70A3E
731 .long 0xA72F053A
732 .long 0xAAAAAAAB
733 .long 0xAE4C415D
734 .long 0xB21642C9
735 .long 0xB60B60B7
736 .long 0xBA2E8BA3
737 .long 0xBE82FA0C
738 .long 0xC30C30C4
739 .long 0xC7CE0C7D
740 .long 0xCCCCCCCD
741 .long 0xD20D20D3
742 .long 0xD79435E6
743 .long 0xDD67C8A7
744 .long 0xE38E38E4
745 .long 0xEA0EA0EB
746 .long 0xF0F0F0F1
747 .long 0xF83E0F84
748 .long 0x8000000
749 .long 0x84210843
750 .long 0x88888889
751 .long 0x8D3DCB09
752 .long 0x92492493
753 .long 0x97B425EE
754 .long 0x9D89D89E
755 .long 0xA3D70A3E
756 .long 0xAAAAAAAB
757 .long 0xB21642C9
758 .long 0xBA2E8BA3
759 .long 0xC30C30C4
760 .long 0xCCCCCCCD
761 .long 0xD79435E6
762 .long 0xE38E38E4
763 .long 0xF0F0F0F1
764 .long 0x10000000
765 .long 0x88888889
766 .long 0x92492493
767 .long 0x9D89D89E
768 .long 0xAAAAAAAB
769 .long 0xBA2E8BA3
770 .long 0xCCCCCCCD
771 .long 0xE38E38E4
772 .long 0x20000000
773 .long 0x92492493
774 .long 0xAAAAAAAB
775 .long 0xCCCCCCCD
776 .long 0x40000000
777 .long 0xAAAAAAAB
778 .long 0x80000000
779 __muldiv:
780 neg r4,r2
781 ld.as r5,[pcl,r4]
782 abs_s r12,r0
783 bic.f 0,r2,r4
784 mpyhu.ne r12,r12,r5
785 norm r3,r2
786 xor.f 0,r0,r1
787 ; write port allocation stall
788 rsub r3,r3,30
789 lsr r0,r12,r3
790 j_s.d [blink]
791 neg.mi r0,r0
792
793 .balign 4
794 SYM(__divsi3):
795 norm r3,r1
796 abs_s r2,r1
797 brhs r3,23,__muldiv
798 norm r4,r0
799 abs_l r12,r0
800 brhs r4,r3,.Lonebit
801 asl_s r2,r2,r3
802 asl r12,r12,r4
803 sub lp_count,r3,r4
804 sub.f r12,r12,r2
805 brge.d r12,r2,.Lsbit
806 sub r4,r3,r4
807 add.lo r12,r12,r2
808 lp .Ldivend
809 .Ldivstart:divaw r12,r12,r2
810 .Ldivend:xor_s r1,r1,r0
811 sub r0,r4,1
812 bmsk r0,r12,r0
813 bset.hs r0,r0,r4
814 tst_s r1,r1
815 j_s.d [blink]
816 neg.mi r0,r0
817 .Lonebit:
818 xor_s r1,r1,r0
819 asr_s r1,r1,31
820 sub1.f 0,r12,r2 ; special case: -2**(n+1) / 2**n
821 or r0,r1,1
822 add.eq r0,r0,r0
823 cmp_s r12,r2
824 j_s.d [blink]
825 mov.lo r0,0
826 .Lsbit:
827 ; Need to handle special cases involving negative powers of two:
828 ; r12,r2 are normalized dividend / divisor;
829 ; divide anything by 0x80000000, or divide 0x80000000 by 0x40000000
830 add_s r12,r12,r2
831 xor_s r1,r1,r0
832 rsub r4,r4,-1
833 ror r0,r12,r4
834 tst_s r2,r2
835 bmsk r0,r0,r3
836 add.pl r0,r0,r0
837 tst_s r1,r1
838 j_s.d [blink]
839 neg.mi r0,r0
840 #else /* !MULDIV */
841 /* This version requires that divaw works with a divisor of 0x80000000U */
842 abs_s r2,r1
843 norm r4,r0
844 neg_s r3,r2
845 norm r3,r3
846 abs_s r12,r0
847 brhs r4,r3,.Lonebit
848 asl_s r2,r2,r3
849 asl r12,r12,r4
850 sub lp_count,r3,r4
851 cmp_s r12,r2
852 sub.hs r12,r12,r2
853 lp .Ldivend
854 .Ldivstart:divaw r12,r12,r2
855 .Ldivend:xor_s r1,r1,r0
856 sub_s r0,r3,1
857 bmsk r0,r12,r0
858 bset.hs r0,r0,r3
859 tst_s r1,r1
860 j_s.d [blink]
861 negmi r0,r0
862 .Lonebit:
863 xor_s r1,r1,r0
864 asr_s r1,r1,31
865 cmp_s r12,r2
866 mov_s r0,0
867 j_s.d [blink]
868 orhs r0,r1,1
869 #endif /* MULDIV */
870
871 #endif /* ifndef __ARC700__ */
872 ENDFUNC(__divsi3)
873
874
875 #endif /* L_divsi3 */
876
877 #ifdef L_umodsi3
878 .section .text
879 .align 4
880
881 .global SYM(__umodsi3)
882 FUNC(__umodsi3)
883 SYM(__umodsi3):
884 mov r7,blink
885 bl.nd @SYM(__udivmodsi4)
886 j.d [r7]
887 mov r0,r1
888 ENDFUNC(__umodsi3)
889 #if 0 /* interferes with linux loader */
890 .section .__arc_profile_forward, "a"
891 .long SYM(__umodsi3)
892 .long SYM(__udivmodsi4)
893 .long 65536
894 #endif
895
896 #endif /* L_umodsi3 */
897
898 #ifdef L_modsi3
899 .section .text
900 .align 4
901
902 .global SYM (__modsi3)
903 FUNC(__modsi3)
904 SYM(__modsi3):
905 #ifndef __ARC700__
906 /* A5 / ARC60? */
907 mov_s r12,blink
908 mov_s r6,r0
909 abs_s r0,r0
910 bl.d @SYM(__udivmodsi4)
911 abs_s r1,r1
912 tst r6,r6
913 neg_s r0,r1
914 j_s.d [r12]
915 mov.pl r0,r1
916 #else /* __ARC700__ */
917 abs_s r2,r1
918 norm.f r4,r0
919 neg r5,r2
920 norm r3,r5
921 abs_l r12,r0
922 brhs r4,r3,.Lonebit
923 asl_s r2,r2,r3
924 asl r12,r12,r4
925 sub lp_count,r3,r4
926 cmp_s r12,r2
927 sub.hs r12,r12,r2
928 tst_s r0,r0
929 lp .Ldivend
930 .Ldivstart:divaw r12,r12,r2
931 .Ldivend:
932 lsr r0,r12,r3
933 j_s.d [blink]
934 neg.mi r0,r0
935 .balign 4
936 .Lonebit:neg.pl r5,r5
937 cmp_s r12,r2
938 j_s.d [blink]
939 sub.hs r0,r0,r5
940 #endif /* __ARC700__ */
941 ENDFUNC(__modsi3)
942
943 #endif /* L_modsi3 */
944
945 #ifdef L_clzsi2
946 .section .text
947 .align 4
948 .global SYM (__clzsi2)
949 SYM(__clzsi2):
950 #ifdef __ARC_NORM__
951 HIDDEN_FUNC(__clzsi2)
952 norm.f r0,r0
953 mov.n r0,0
954 j_s.d [blink]
955 add.pl r0,r0,1
956 ENDFUNC(__clzsi2)
957 #elif defined (__ARC601__)
958 FUNC(__clzsi2)
959 mov lp_count,10
960 mov_l r1,0
961 bset r2,r1,29
962 lp .Loop_end
963 brhs r0,r2,.Loop_end
964 add3 r0,r1,r0
965 .Loop_end:
966 asl.f 0,r0
967 sub2 r0,lp_count,lp_count
968 sub.cs.f r0,r0,1
969 add r0,r0,31
970 j_s.d [blink]
971 add.pl r0,r0,1
972 ENDFUNC(__clzsi2)
973 #else
974 FUNC(__clzsi2)
975 asl.f 0,r0,2
976 mov r1,-1
977 .Lcheck:
978 bbit1.d r0,31,.Ldone
979 asl.pl r0,r0,3
980 bcs.d .Ldone_1
981 add_s r1,r1,3
982 bpnz.d .Lcheck
983 asl.f 0,r0,2
984 mov_s r0,32
985 j_s.d [blink]
986 mov.ne r0,r1
987 .Ldone:
988 j_s.d [blink]
989 add_s r0,r1,1
990 .Ldone_1:
991 j_s.d [blink]
992 sub_s r0,r1,1
993 ENDFUNC(__clzsi2)
994 #endif
995 #endif /* L_clzsi2 */
996 .section .text
997
998
999 ;;; MILLICODE THUNK LIB ;***************
1000
1001 ;;; .macro push_regs from, to, offset
1002 ;;; st_s "\from", [sp, \offset]
1003 ;;; .if \to-\from
1004 ;;; push_regs "(\from+1)", \to, "(\offset+4)"
1005 ;;; .endif
1006 ;;; .endm
1007 ;;; push_regs 13, 18, 0
1008 ;;;
1009
1010 ;;;; .macro sum from, to, three
1011 ;;;; .long \from
1012 ;;;; .long \three
1013 ;;;; .local regno
1014 ;;;; .set regno, \from+1
1015 ;;;; .set shift, 32
1016 ;;;; .set shift, shift - 1
1017 ;;;; # st_s %shift @3 lsl #shift
1018 ;;;; .if \to-\from
1019 ;;;; sum "(\from+1)", \to, "(\three)"
1020 ;;;; .endif
1021 ;;;; .endm
1022 ;;;;
1023 ;;;; SUM 0,5, 9
1024 ;;;;
1025 ; .altmacro
1026 ;; .macro push_regs from=0, to=3, offset
1027 ;; st_s r\from, [sp, \offset]
1028 ;; .if \to-\from
1029 ;; push_regs "\from+1 ",\to,"(\offset+4)"
1030 ;; .endif
1031 ;; .endm
1032 ;;
1033 ;; .macro expand_to_push from=13, to
1034 ;; ; .section .text
1035 ;; ; .align 4
1036 ;; ; .global st_
1037 ;; ; .type foo,
1038 ;; st_13_to_25:
1039 ;; ; push_regs \from, \to, 0
1040 ;; push_regs 0,3 ;
1041 ;; .endm
1042 ;;
1043 ;; expand_to_push 13,18
1044 ;;
1045 ;#endif
1046
1047 #ifdef L_millicodethunk_st
1048 .section .text
1049 .align 4
1050 .global SYM(__st_r13_to_r15)
1051 .global SYM(__st_r13_to_r16)
1052 .global SYM(__st_r13_to_r17)
1053 .global SYM(__st_r13_to_r18)
1054 .global SYM(__st_r13_to_r19)
1055 .global SYM(__st_r13_to_r20)
1056 .global SYM(__st_r13_to_r21)
1057 .global SYM(__st_r13_to_r22)
1058 .global SYM(__st_r13_to_r23)
1059 .global SYM(__st_r13_to_r24)
1060 .global SYM(__st_r13_to_r25)
1061 HIDDEN_FUNC(__st_r13_to_r15)
1062 HIDDEN_FUNC(__st_r13_to_r16)
1063 HIDDEN_FUNC(__st_r13_to_r17)
1064 HIDDEN_FUNC(__st_r13_to_r18)
1065 HIDDEN_FUNC(__st_r13_to_r19)
1066 HIDDEN_FUNC(__st_r13_to_r20)
1067 HIDDEN_FUNC(__st_r13_to_r21)
1068 HIDDEN_FUNC(__st_r13_to_r22)
1069 HIDDEN_FUNC(__st_r13_to_r23)
1070 HIDDEN_FUNC(__st_r13_to_r24)
1071 HIDDEN_FUNC(__st_r13_to_r25)
1072 .align 4
1073 SYM(__st_r13_to_r25):
1074 st r25, [sp,48]
1075 SYM(__st_r13_to_r24):
1076 st r24, [sp,44]
1077 SYM(__st_r13_to_r23):
1078 st r23, [sp,40]
1079 SYM(__st_r13_to_r22):
1080 st r22, [sp,36]
1081 SYM(__st_r13_to_r21):
1082 st r21, [sp,32]
1083 SYM(__st_r13_to_r20):
1084 st r20, [sp,28]
1085 SYM(__st_r13_to_r19):
1086 st r19, [sp,24]
1087 SYM(__st_r13_to_r18):
1088 st r18, [sp,20]
1089 SYM(__st_r13_to_r17):
1090 st r17, [sp,16]
1091 SYM(__st_r13_to_r16):
1092 st r16, [sp,12]
1093 SYM(__st_r13_to_r15):
1094 #ifdef __ARC700__
1095 st r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
1096 #else
1097 st_s r15, [sp,8]
1098 #endif
1099 st_s r14, [sp,4]
1100 j_s.d [%blink]
1101 st_s r13, [sp,0]
1102 ENDFUNC(__st_r13_to_r15)
1103 ENDFUNC(__st_r13_to_r16)
1104 ENDFUNC(__st_r13_to_r17)
1105 ENDFUNC(__st_r13_to_r18)
1106 ENDFUNC(__st_r13_to_r19)
1107 ENDFUNC(__st_r13_to_r20)
1108 ENDFUNC(__st_r13_to_r21)
1109 ENDFUNC(__st_r13_to_r22)
1110 ENDFUNC(__st_r13_to_r23)
1111 ENDFUNC(__st_r13_to_r24)
1112 ENDFUNC(__st_r13_to_r25)
1113 #endif /* L_millicodethunk_st */
1114
1115
1116 #ifdef L_millicodethunk_ld
1117 .section .text
1118 .align 4
1119 ; ==================================
1120 ; the loads
1121
1122 .global SYM(__ld_r13_to_r15)
1123 .global SYM(__ld_r13_to_r16)
1124 .global SYM(__ld_r13_to_r17)
1125 .global SYM(__ld_r13_to_r18)
1126 .global SYM(__ld_r13_to_r19)
1127 .global SYM(__ld_r13_to_r20)
1128 .global SYM(__ld_r13_to_r21)
1129 .global SYM(__ld_r13_to_r22)
1130 .global SYM(__ld_r13_to_r23)
1131 .global SYM(__ld_r13_to_r24)
1132 .global SYM(__ld_r13_to_r25)
1133 HIDDEN_FUNC(__ld_r13_to_r15)
1134 HIDDEN_FUNC(__ld_r13_to_r16)
1135 HIDDEN_FUNC(__ld_r13_to_r17)
1136 HIDDEN_FUNC(__ld_r13_to_r18)
1137 HIDDEN_FUNC(__ld_r13_to_r19)
1138 HIDDEN_FUNC(__ld_r13_to_r20)
1139 HIDDEN_FUNC(__ld_r13_to_r21)
1140 HIDDEN_FUNC(__ld_r13_to_r22)
1141 HIDDEN_FUNC(__ld_r13_to_r23)
1142 HIDDEN_FUNC(__ld_r13_to_r24)
1143 HIDDEN_FUNC(__ld_r13_to_r25)
1144 SYM(__ld_r13_to_r25):
1145 ld r25, [sp,48]
1146 SYM(__ld_r13_to_r24):
1147 ld r24, [sp,44]
1148 SYM(__ld_r13_to_r23):
1149 ld r23, [sp,40]
1150 SYM(__ld_r13_to_r22):
1151 ld r22, [sp,36]
1152 SYM(__ld_r13_to_r21):
1153 ld r21, [sp,32]
1154 SYM(__ld_r13_to_r20):
1155 ld r20, [sp,28]
1156 SYM(__ld_r13_to_r19):
1157 ld r19, [sp,24]
1158 SYM(__ld_r13_to_r18):
1159 ld r18, [sp,20]
1160 SYM(__ld_r13_to_r17):
1161 ld r17, [sp,16]
1162 SYM(__ld_r13_to_r16):
1163 ld r16, [sp,12]
1164 SYM(__ld_r13_to_r15):
1165 #ifdef __ARC700__
1166 ld r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
1167 #else
1168 ld_s r15, [sp,8]
1169 #endif
1170 ld_s r14, [sp,4]
1171 j_s.d [%blink]
1172 ld_s r13, [sp,0]
1173 ENDFUNC(__ld_r13_to_r15)
1174 ENDFUNC(__ld_r13_to_r16)
1175 ENDFUNC(__ld_r13_to_r17)
1176 ENDFUNC(__ld_r13_to_r18)
1177 ENDFUNC(__ld_r13_to_r19)
1178 ENDFUNC(__ld_r13_to_r20)
1179 ENDFUNC(__ld_r13_to_r21)
1180 ENDFUNC(__ld_r13_to_r22)
1181 ENDFUNC(__ld_r13_to_r23)
1182 ENDFUNC(__ld_r13_to_r24)
1183 ENDFUNC(__ld_r13_to_r25)
1184
1185 #endif /* L_millicodethunk_ld */
1186 #ifdef L_millicodethunk_ret
1187 .global SYM(__ld_r13_to_r14_ret)
1188 .global SYM(__ld_r13_to_r15_ret)
1189 .global SYM(__ld_r13_to_r16_ret)
1190 .global SYM(__ld_r13_to_r17_ret)
1191 .global SYM(__ld_r13_to_r18_ret)
1192 .global SYM(__ld_r13_to_r19_ret)
1193 .global SYM(__ld_r13_to_r20_ret)
1194 .global SYM(__ld_r13_to_r21_ret)
1195 .global SYM(__ld_r13_to_r22_ret)
1196 .global SYM(__ld_r13_to_r23_ret)
1197 .global SYM(__ld_r13_to_r24_ret)
1198 .global SYM(__ld_r13_to_r25_ret)
1199 HIDDEN_FUNC(__ld_r13_to_r14_ret)
1200 HIDDEN_FUNC(__ld_r13_to_r15_ret)
1201 HIDDEN_FUNC(__ld_r13_to_r16_ret)
1202 HIDDEN_FUNC(__ld_r13_to_r17_ret)
1203 HIDDEN_FUNC(__ld_r13_to_r18_ret)
1204 HIDDEN_FUNC(__ld_r13_to_r19_ret)
1205 HIDDEN_FUNC(__ld_r13_to_r20_ret)
1206 HIDDEN_FUNC(__ld_r13_to_r21_ret)
1207 HIDDEN_FUNC(__ld_r13_to_r22_ret)
1208 HIDDEN_FUNC(__ld_r13_to_r23_ret)
1209 HIDDEN_FUNC(__ld_r13_to_r24_ret)
1210 HIDDEN_FUNC(__ld_r13_to_r25_ret)
1211 .section .text
1212 .align 4
1213 SYM(__ld_r13_to_r25_ret):
1214 ld r25, [sp,48]
1215 SYM(__ld_r13_to_r24_ret):
1216 ld r24, [sp,44]
1217 SYM(__ld_r13_to_r23_ret):
1218 ld r23, [sp,40]
1219 SYM(__ld_r13_to_r22_ret):
1220 ld r22, [sp,36]
1221 SYM(__ld_r13_to_r21_ret):
1222 ld r21, [sp,32]
1223 SYM(__ld_r13_to_r20_ret):
1224 ld r20, [sp,28]
1225 SYM(__ld_r13_to_r19_ret):
1226 ld r19, [sp,24]
1227 SYM(__ld_r13_to_r18_ret):
1228 ld r18, [sp,20]
1229 SYM(__ld_r13_to_r17_ret):
1230 ld r17, [sp,16]
1231 SYM(__ld_r13_to_r16_ret):
1232 ld r16, [sp,12]
1233 SYM(__ld_r13_to_r15_ret):
1234 ld r15, [sp,8]
1235 SYM(__ld_r13_to_r14_ret):
1236 ld blink,[sp,r12]
1237 ld_s r14, [sp,4]
1238 ld.ab r13, [sp,r12]
1239 j_s.d [%blink]
1240 add_s sp,sp,4
1241 ENDFUNC(__ld_r13_to_r14_ret)
1242 ENDFUNC(__ld_r13_to_r15_ret)
1243 ENDFUNC(__ld_r13_to_r16_ret)
1244 ENDFUNC(__ld_r13_to_r17_ret)
1245 ENDFUNC(__ld_r13_to_r18_ret)
1246 ENDFUNC(__ld_r13_to_r19_ret)
1247 ENDFUNC(__ld_r13_to_r20_ret)
1248 ENDFUNC(__ld_r13_to_r21_ret)
1249 ENDFUNC(__ld_r13_to_r22_ret)
1250 ENDFUNC(__ld_r13_to_r23_ret)
1251 ENDFUNC(__ld_r13_to_r24_ret)
1252 ENDFUNC(__ld_r13_to_r25_ret)
1253
1254 #endif /* L_millicodethunk_ret */
1255
1256 #ifdef L_adddf3
1257 #ifdef __ARC_NORM__
1258 #include "ieee-754/adddf3.S"
1259 #endif
1260 #endif
1261
1262 #ifdef L_muldf3
1263 #ifdef __ARC700__
1264 #include "ieee-754/muldf3.S"
1265 #elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
1266 #include "ieee-754/arc600-mul64/muldf3.S"
1267 #elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
1268 #include "ieee-754/arc600-dsp/muldf3.S"
1269 #endif
1270 #endif
1271
1272 #ifdef L_addsf3
1273 #ifdef __ARC_NORM__
1274 #include "ieee-754/addsf3.S"
1275 #endif
1276 #endif
1277
1278 #ifdef L_mulsf3
1279 #ifdef __ARC700__
1280 #include "ieee-754/mulsf3.S"
1281 #elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
1282 #include "ieee-754/arc600-mul64/mulsf3.S"
1283 #elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
1284 #include "ieee-754/arc600-dsp/mulsf3.S"
1285 #elif defined (__ARC_NORM__)
1286 #include "ieee-754/arc600/mulsf3.S"
1287 #endif
1288 #endif
1289
1290 #ifdef L_divdf3
1291 #ifdef __ARC700__
1292 #include "ieee-754/divdf3.S"
1293 #elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
1294 #include "ieee-754/arc600-mul64/divdf3.S"
1295 #elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
1296 #include "ieee-754/arc600-dsp/divdf3.S"
1297 #endif
1298 #endif
1299
1300 #ifdef L_divsf3
1301 #ifdef __ARC700__
1302 #include "ieee-754/divsf3-stdmul.S"
1303 #elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
1304 #include "ieee-754/arc600-mul64/divsf3.S"
1305 #elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
1306 #include "ieee-754/arc600-dsp/divsf3.S"
1307 #elif defined (__ARC_NORM__)
1308 #include "ieee-754/arc600/divsf3.S"
1309 #endif
1310 #endif
1311
1312 #ifdef L_extendsfdf2
1313 #ifdef __ARC_NORM__
1314 #include "ieee-754/extendsfdf2.S"
1315 #endif
1316 #endif
1317
1318 #ifdef L_truncdfsf2
1319 #ifdef __ARC_NORM__
1320 #include "ieee-754/truncdfsf2.S"
1321 #endif
1322 #endif
1323
1324 #ifdef L_floatsidf
1325 #ifdef __ARC_NORM__
1326 #include "ieee-754/floatsidf.S"
1327 #endif
1328 #endif
1329
1330 #ifdef L_floatsisf
1331 #ifdef __ARC_NORM__
1332 #include "ieee-754/floatsisf.S"
1333 #endif
1334 #endif
1335
1336 #ifdef L_floatunsidf
1337 #ifdef __ARC_NORM__
1338 #include "ieee-754/floatunsidf.S"
1339 #endif
1340 #endif
1341
1342 #ifdef L_fixdfsi
1343 #ifdef __ARC_NORM__
1344 #include "ieee-754/fixdfsi.S"
1345 #endif
1346 #endif
1347
1348 #ifdef L_fixsfsi
1349 #ifdef __ARC_NORM__
1350 #include "ieee-754/fixsfsi.S"
1351 #endif
1352 #endif
1353
1354 #ifdef L_fixunsdfsi
1355 #ifdef __ARC_NORM__
1356 #include "ieee-754/fixunsdfsi.S"
1357 #endif
1358 #endif
1359
1360 #ifdef L_eqdf2
1361 #ifdef __ARC_NORM__
1362 #include "ieee-754/eqdf2.S"
1363 #endif
1364 #endif
1365
1366 #ifdef L_eqsf2
1367 #ifdef __ARC_NORM__
1368 #include "ieee-754/eqsf2.S"
1369 #endif
1370 #endif
1371
1372 #ifdef L_gtdf2
1373 #ifdef __ARC_NORM__
1374 #include "ieee-754/gtdf2.S"
1375 #endif
1376 #endif
1377
1378 #ifdef L_gtsf2
1379 #ifdef __ARC_NORM__
1380 #include "ieee-754/gtsf2.S"
1381 #endif
1382 #endif
1383
1384 #ifdef L_gedf2
1385 #ifdef __ARC_NORM__
1386 #include "ieee-754/gedf2.S"
1387 #endif
1388 #endif
1389
1390 #ifdef L_gesf2
1391 #ifdef __ARC_NORM__
1392 #include "ieee-754/gesf2.S"
1393 #endif
1394 #endif
1395
1396 #ifdef L_uneqdf2
1397 #ifdef __ARC_NORM__
1398 #include "ieee-754/uneqdf2.S"
1399 #endif
1400 #endif
1401
1402 #ifdef L_uneqsf2
1403 #ifdef __ARC_NORM__
1404 #include "ieee-754/uneqsf2.S"
1405 #endif
1406 #endif
1407
1408 #ifdef L_orddf2
1409 #ifdef __ARC_NORM__
1410 #include "ieee-754/orddf2.S"
1411 #endif
1412 #endif
1413
1414 #ifdef L_ordsf2
1415 #ifdef __ARC_NORM__
1416 #include "ieee-754/ordsf2.S"
1417 #endif
1418 #endif
1419