Reverting merge from trunk
[official-gcc.git] / libgcc / config / arc / lib1funcs.S
blobd434ccb4edde382432c109079a5a3266c036768a
1 ; libgcc1 routines for Synopsys DesignWare ARC cpu.
3 /* Copyright (C) 1995, 1997, 2007-2013 Free Software Foundation, Inc.
4    Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
5                 on behalf of Synopsys Inc.
7 This file is part of GCC.
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.
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.
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.
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/>.  */
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.  */
36  /* ANSI concatenation macros.  */
38  #define CONCAT1(a, b) CONCAT2(a, b)
39  #define CONCAT2(a, b) a ## b
41  /* Use the right prefix for global labels.  */
43  #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
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)
56         
57         
58 #ifdef  L_mulsi3
59         .section .text
60         .align 4
62         .global SYM(__mulsi3)
63 SYM(__mulsi3):
65 /* This the simple version.
67   while (a) 
68     {
69       if (a & 1)
70         r += b;
71       a >>= 1;
72       b <<= 1;
73     }
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 */
159 #ifdef  L_umulsidi3
160         .section .text
161         .align 4
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
179 /* This the simple version.
181   while (a) 
182     {
183       if (a & 1)
184         r += b;
185       a >>= 1;
186       b <<= 1;
187     }
189 #include "ieee-754/arc-ieee-754.h"
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 */
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 */
257 #ifdef L_divmod_tools
259 ; Utilities used by all routines.
261         .section .text
264 unsigned long
265 udivmodsi4(int modwanted, unsigned long num, unsigned long den)
267   unsigned long bit = 1;
268   unsigned long res = 0;
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;
290 ; inputs: r0 = numerator, r1 = denominator
291 ; outputs: r0 = quotient, r1 = remainder, r2/r3 trashed
293         .balign 4
294         .global SYM(__udivmodsi4)
295         FUNC(__udivmodsi4)
296 SYM(__udivmodsi4):
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
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
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
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)
474 #endif
476 #ifdef  L_udivsi3
477         .section .text
478         .align 4
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
492 #endif /* L_udivsi3 */
494 #ifdef  L_divsi3
495         .section .text
496         .align 4
498         .global SYM(__divsi3)
499         FUNC(__divsi3)
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:
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
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 */
871 #endif  /* ifndef __ARC700__ */
872         ENDFUNC(__divsi3)
874         
875 #endif /* L_divsi3 */
877 #ifdef  L_umodsi3
878         .section .text
879         .align 4
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
896 #endif /* L_umodsi3 */
898 #ifdef  L_modsi3
899         .section .text
900         .align 4
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)
943 #endif /* L_modsi3 */
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
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
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
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 */
1116 #ifdef L_millicodethunk_ld
1117         .section .text
1118         .align 4
1119 ;       ================================== 
1120 ;       the loads
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)
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)
1254 #endif /* L_millicodethunk_ret */
1256 #ifdef  L_adddf3
1257 #ifdef __ARC_NORM__
1258 #include "ieee-754/adddf3.S"
1259 #endif
1260 #endif
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
1272 #ifdef  L_addsf3
1273 #ifdef __ARC_NORM__
1274 #include "ieee-754/addsf3.S"
1275 #endif
1276 #endif
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
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
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
1312 #ifdef L_extendsfdf2
1313 #ifdef __ARC_NORM__
1314 #include "ieee-754/extendsfdf2.S"
1315 #endif
1316 #endif
1318 #ifdef L_truncdfsf2
1319 #ifdef __ARC_NORM__
1320 #include "ieee-754/truncdfsf2.S"
1321 #endif
1322 #endif
1324 #ifdef L_floatsidf
1325 #ifdef __ARC_NORM__
1326 #include "ieee-754/floatsidf.S"
1327 #endif
1328 #endif
1330 #ifdef L_floatsisf
1331 #ifdef __ARC_NORM__
1332 #include "ieee-754/floatsisf.S"
1333 #endif
1334 #endif
1336 #ifdef L_floatunsidf
1337 #ifdef __ARC_NORM__
1338 #include "ieee-754/floatunsidf.S"
1339 #endif
1340 #endif
1342 #ifdef L_fixdfsi
1343 #ifdef __ARC_NORM__
1344 #include "ieee-754/fixdfsi.S"
1345 #endif
1346 #endif
1348 #ifdef L_fixsfsi
1349 #ifdef __ARC_NORM__
1350 #include "ieee-754/fixsfsi.S"
1351 #endif
1352 #endif
1354 #ifdef L_fixunsdfsi
1355 #ifdef __ARC_NORM__
1356 #include "ieee-754/fixunsdfsi.S"
1357 #endif
1358 #endif
1360 #ifdef L_eqdf2
1361 #ifdef __ARC_NORM__
1362 #include "ieee-754/eqdf2.S"
1363 #endif
1364 #endif
1366 #ifdef L_eqsf2
1367 #ifdef __ARC_NORM__
1368 #include "ieee-754/eqsf2.S"
1369 #endif
1370 #endif
1372 #ifdef L_gtdf2
1373 #ifdef __ARC_NORM__
1374 #include "ieee-754/gtdf2.S"
1375 #endif
1376 #endif
1378 #ifdef L_gtsf2
1379 #ifdef __ARC_NORM__
1380 #include "ieee-754/gtsf2.S"
1381 #endif
1382 #endif
1384 #ifdef L_gedf2
1385 #ifdef __ARC_NORM__
1386 #include "ieee-754/gedf2.S"
1387 #endif
1388 #endif
1390 #ifdef L_gesf2
1391 #ifdef __ARC_NORM__
1392 #include "ieee-754/gesf2.S"
1393 #endif
1394 #endif
1396 #ifdef L_uneqdf2
1397 #ifdef __ARC_NORM__
1398 #include "ieee-754/uneqdf2.S"
1399 #endif
1400 #endif
1402 #ifdef L_uneqsf2
1403 #ifdef __ARC_NORM__
1404 #include "ieee-754/uneqsf2.S"
1405 #endif
1406 #endif
1408 #ifdef L_orddf2
1409 #ifdef __ARC_NORM__
1410 #include "ieee-754/orddf2.S"
1411 #endif
1412 #endif
1414 #ifdef L_ordsf2
1415 #ifdef __ARC_NORM__
1416 #include "ieee-754/ordsf2.S"
1417 #endif
1418 #endif