1; libgcc1 routines for Synopsys DesignWare ARC cpu.
2
3/* Copyright (C) 1995-2014 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__)
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	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
4221:
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)
482SYM(__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__
502SYM(__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
794SYM(__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)
883SYM(__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)
904SYM(__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)
949SYM(__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
1073SYM(__st_r13_to_r25):
1074	st r25, [sp,48]
1075SYM(__st_r13_to_r24):
1076	st r24, [sp,44]
1077SYM(__st_r13_to_r23):
1078	st r23, [sp,40]
1079SYM(__st_r13_to_r22):
1080	st r22, [sp,36]
1081SYM(__st_r13_to_r21):
1082	st r21, [sp,32]
1083SYM(__st_r13_to_r20):
1084	st r20, [sp,28]
1085SYM(__st_r13_to_r19):
1086	st r19, [sp,24]
1087SYM(__st_r13_to_r18):
1088	st r18, [sp,20]
1089SYM(__st_r13_to_r17):
1090	st r17, [sp,16]
1091SYM(__st_r13_to_r16):
1092	st r16, [sp,12]
1093SYM(__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)
1144SYM(__ld_r13_to_r25):
1145	ld r25, [sp,48]
1146SYM(__ld_r13_to_r24):
1147	ld r24, [sp,44]
1148SYM(__ld_r13_to_r23):
1149	ld r23, [sp,40]
1150SYM(__ld_r13_to_r22):
1151	ld r22, [sp,36]
1152SYM(__ld_r13_to_r21):
1153	ld r21, [sp,32]
1154SYM(__ld_r13_to_r20):
1155	ld r20, [sp,28]
1156SYM(__ld_r13_to_r19):
1157	ld r19, [sp,24]
1158SYM(__ld_r13_to_r18):
1159	ld r18, [sp,20]
1160SYM(__ld_r13_to_r17):
1161	ld r17, [sp,16]
1162SYM(__ld_r13_to_r16):
1163	ld r16, [sp,12]
1164SYM(__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
1213SYM(__ld_r13_to_r25_ret):
1214	ld r25, [sp,48]
1215SYM(__ld_r13_to_r24_ret):
1216	ld r24, [sp,44]
1217SYM(__ld_r13_to_r23_ret):
1218	ld r23, [sp,40]
1219SYM(__ld_r13_to_r22_ret):
1220	ld r22, [sp,36]
1221SYM(__ld_r13_to_r21_ret):
1222	ld r21, [sp,32]
1223SYM(__ld_r13_to_r20_ret):
1224	ld r20, [sp,28]
1225SYM(__ld_r13_to_r19_ret):
1226	ld r19, [sp,24]
1227SYM(__ld_r13_to_r18_ret):
1228	ld r18, [sp,20]
1229SYM(__ld_r13_to_r17_ret):
1230	ld r17, [sp,16]
1231SYM(__ld_r13_to_r16_ret):
1232	ld r16, [sp,12]
1233SYM(__ld_r13_to_r15_ret):
1234	ld r15, [sp,8]
1235SYM(__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