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