; libgcc1 routines for Synopsys DesignWare ARC cpu.

/* Copyright (C) 1995-2023 Free Software Foundation, Inc.
   Contributor: Joern Rennecke <joern.rennecke@embecosm.com>
		on behalf of Synopsys Inc.

This file is part of GCC.

GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.

You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
<http://www.gnu.org/licenses/>.  */

/* As a special exception, if you link this library with other files,
   some of which are compiled with GCC, to produce an executable,
   this library does not by itself cause the resulting executable
   to be covered by the GNU General Public License.
   This exception does not however invalidate any other reasons why
   the executable file might be covered by the GNU General Public License.  */


 /* ANSI concatenation macros.  */

 #define CONCAT1(a, b) CONCAT2(a, b)
 #define CONCAT2(a, b) a ## b

 /* Use the right prefix for global labels.  */

 #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)

#ifndef WORKING_ASSEMBLER
#define abs_l abs
#define asl_l asl
#define mov_l mov
#endif

#define FUNC(X)         .type SYM(X),@function
#define HIDDEN_FUNC(X)	FUNC(X)` .hidden X
#define ENDFUNC0(X)     .Lfe_##X: .size X,.Lfe_##X-X
#define ENDFUNC(X)      ENDFUNC0(X)

#ifdef __ARC_RF16__
	/* Use object attributes to inform other tools this file is
	safe for RF16 configuration.  */
	.arc_attribute Tag_ARC_ABI_rf16, 1
#endif

#ifdef  L_mulsi3
	.section .text
	.align 4

	.global SYM(__mulsi3)
SYM(__mulsi3):

/* This the simple version.

  while (a)
    {
      if (a & 1)
	r += b;
      a >>= 1;
      b <<= 1;
    }
*/

#if defined (__ARC_MUL64__)
	FUNC(__mulsi3)
	mulu64 r0,r1
	j_s.d [blink]
	mov_s r0,mlo
	ENDFUNC(__mulsi3)
#elif defined (__ARC_MPY__)
	HIDDEN_FUNC(__mulsi3)
	mpyu	r0,r0,r1
	nop_s
	j_s	[blink]
	ENDFUNC(__mulsi3)
#elif defined (__ARC_NORM__)
	FUNC(__mulsi3)
	norm.f	r2,r0
	rsub	lp_count,r2,31
	mov.mi	lp_count,32
	mov_s	r2,r0
	mov_s	r0,0
	lpnz	@.Lend		; loop is aligned
	lsr.f	r2,r2
	add.cs	r0,r0,r1
	add_s	r1,r1,r1
.Lend:	j_s [blink]
	ENDFUNC(__mulsi3)
#elif !defined (__OPTIMIZE_SIZE__) && defined (__ARC_BARREL_SHIFTER__)
	/* Up to 3.5 times faster than the simpler code below, but larger.  */
	FUNC(__mulsi3)
	ror.f	r2,r0,4
	mov_s	r0,0
	add3.mi	r0,r0,r1
	asl.f	r2,r2,2
	add2.cs	r0,r0,r1
	jeq_s	[blink]
.Loop:
	add1.mi	r0,r0,r1
	asl.f	r2,r2,2
	add.cs	r0,r0,r1
	asl_s	r1,r1,4
	ror.f	r2,r2,8
	add3.mi	r0,r0,r1
	asl.f	r2,r2,2
	bne.d	.Loop
	add2.cs	r0,r0,r1
	j_s	[blink]
	ENDFUNC(__mulsi3)
#elif !defined (__OPTIMIZE_SIZE__) /* __ARC601__ */
	FUNC(__mulsi3)
	lsr.f r2,r0
	mov_s r0,0
	mov_s r3,0
	add.cs r0,r0,r1
.Loop:
	lsr.f r2,r2
	add1.cs r0,r0,r1
	lsr.f r2,r2
	add2.cs r0,r0,r1
	lsr.f r2,r2
	add3.cs r0,r0,r1
	bne.d .Loop
	add3 r1,r3,r1
	j_s	[blink]
	ENDFUNC(__mulsi3)
#else
/********************************************************/
	FUNC(__mulsi3)
	mov_s r2,0		; Accumulate result here.
.Lloop:
	bbit0 r0,0,@.Ly
	add_s r2,r2,r1		; r += b
.Ly:
	lsr_s r0,r0		; a >>= 1
	asl_s r1,r1		; b <<= 1
	brne_s r0,0,@.Lloop
.Ldone:
	j_s.d [blink]
	mov_s r0,r2
	ENDFUNC(__mulsi3)
/********************************************************/
#endif

#endif /* L_mulsi3 */

#ifdef  L_umulsidi3
	.section .text
	.align 4

	.global SYM(__umulsidi3)
SYM(__umulsidi3):
	HIDDEN_FUNC(__umulsidi3)
/* We need ARC700 /ARC_MUL64 definitions of __umulsidi3 / __umulsi3_highpart
   in case some code has been compiled without multiply support enabled,
   but linked with the multiply-support enabled libraries.
   For ARC601 (i.e. without a barrel shifter), we also use umuldisi3 as our
   umulsi3_highpart implementation; the use of the latter label doesn't
   actually benefit ARC601 platforms, but is useful when ARC601 code is linked
   against other libraries.  */
#if defined (__ARC_MPY__) || defined (__ARC_MUL64__) \
	|| !defined (__ARC_BARREL_SHIFTER__)
	.global SYM(__umulsi3_highpart)
SYM(__umulsi3_highpart):
	HIDDEN_FUNC(__umulsi3_highpart)
#endif

/* This the simple version.

  while (a)
    {
      if (a & 1)
	r += b;
      a >>= 1;
      b <<= 1;
    }
*/
#include "ieee-754/arc-ieee-754.h"

#ifdef __ARC_MPY__
	mov_s	r12,DBL0L
	mpyu	DBL0L,r12,DBL0H
	j_s.d	[blink]
	MPYHU	DBL0H,r12,DBL0H
#elif defined (__ARC_MUL64__)
/* Likewise for __ARC_MUL64__ */
	mulu64 r0,r1
	mov_s DBL0L,mlo
	j_s.d [blink]
	mov_s DBL0H,mhi
#else /* !__ARC_MPY__ && !__ARC_MUL64__ */
/* Although it might look tempting to extend this to handle muldi3,
   using mulsi3 twice with 2.25 cycles per 32 bit add is faster
   than one loop with 3 or four cycles per 32 bit add.  */
	asl.f r12,0		; Top part of b.
	mov_s r2,0		; Accumulate result here.
	bbit1.d r0,0,@.Ladd
	mov_s r3,0
.Llooptst:
	rlc r12,r12
	breq r0,0,@.Ldone	; while (a)
.Lloop:
	asl.f r1,r1		; b <<= 1
	bbit0.d r0,1,@.Llooptst
	lsr r0,r0		; a >>= 1
	rlc r12,r12
.Ladd:
	add.f r3,r3,r1	; r += b
	brne.d r0,0,@.Lloop	; while (a);
	adc   r2,r2,r12
.Ldone:
	mov_s DBL0L,r3
	j_s.d [blink]
	mov DBL0H,r2
#endif /* !__ARC_MPY__*/
	ENDFUNC(__umulsidi3)
#if defined (__ARC_MPY__) || defined (__ARC_MUL64__) \
	|| !defined (__ARC_BARREL_SHIFTER__)
	ENDFUNC(__umulsi3_highpart)
#endif
#endif /* L_umulsidi3 */

#ifndef __ARC_RF16__
#ifdef L_muldi3
	.section .text
	.align 4
	.global SYM(__muldi3)
SYM(__muldi3):
#ifdef __LITTLE_ENDIAN__
        push_s blink
        mov_s r4,r3     ;4
        mov_s r5,r2     ;4
        mov_s r9,r0     ;4
        mov_s r8,r1     ;4
        bl.d @__umulsidi3
        mov_s r1,r2     ;4
        mov_s r6,r0     ;4
        mov_s r7,r1     ;4
        mov_s r0,r9     ;4
        bl.d @__mulsi3
        mov_s r1,r4     ;4
        mov_s r4,r0     ;4
        mov_s r1,r8     ;4
        bl.d @__mulsi3
        mov_s r0,r5     ;4
        pop_s blink
        add_s r0,r0,r4 ;2
        add r1,r0,r7
        j_s.d [blink]
        mov_s r0,r6     ;4
#else
	push_s  blink
	mov_s   r5,r3
	mov_s   r9,r2
	mov_s   r4,r1
	mov_s   r8,r0
	mov_s   r0,r1
	bl.d 	@__umulsidi3
	mov_s   r1,r3
	mov_s   r7,r0
	mov_s   r6,r1
	mov_s   r0,r4
	bl.d    @__mulsi3
	mov_s   r1,r9
	mov_s   r4,r0
	mov_s   r1,r8
	bl.d    @__mulsi3
	mov_s   r0,r5
	pop_s   blink
	add_s   r0,r0,r4
	add_s   r0,r0,r7
	j_s.d   [blink]
	mov_s   r1,r6
#endif /* __LITTLE_ENDIAN__ */
ENDFUNC(__muldi3)
#endif /* L_muldi3 */
#endif /* !__ARC_RF16__ */

#ifdef  L_umulsi3_highpart
#include "ieee-754/arc-ieee-754.h"
/* For use without a barrel shifter, and for ARC700 / ARC_MUL64, the
   mulsidi3 algorithms above look better, so for these, there is an
   extra label up there.  */
#if !defined (__ARC_MPY__) && !defined (__ARC_MUL64__) \
	&& defined (__ARC_BARREL_SHIFTER__)
	.global SYM(__umulsi3_highpart)
SYM(__umulsi3_highpart):
	HIDDEN_FUNC(__umulsi3_highpart)
	mov_s r2,0
	mov_s r3,32
.Loop:
	lsr.f r0,r0
	add.cs.f r2,r2,r1
	sub_s r3,r3,1
	brne.d r0,0,.Loop
	rrc r2,r2
	j_s.d	[blink]
/* Make the result register peephole-compatible with mulsidi3.  */
	lsr DBL0H,r2,r3
	ENDFUNC(__umulsi3_highpart)
#endif /* !__ARC_MPY__  && __ARC_BARREL_SHIFTER__ */
#endif /* L_umulsi3_highpart */

#ifdef L_divmod_tools

; Utilities used by all routines.

	.section .text

/*
unsigned long
udivmodsi4(int modwanted, unsigned long num, unsigned long den)
{
  unsigned long bit = 1;
  unsigned long res = 0;

  while (den < num && bit && !(den & (1L<<31)))
    {
      den <<=1;
      bit <<=1;
    }
  while (bit)
    {
      if (num >= den)
	{
	  num -= den;
	  res |= bit;
	}
      bit >>=1;
      den >>=1;
    }
  if (modwanted) return num;
  return res;
}
*/

; inputs: r0 = numerator, r1 = denominator
; outputs: r0 = quotient, r1 = remainder, r2/r3 trashed

	.balign 4
	.global SYM(__udivmodsi4)
	FUNC(__udivmodsi4)
SYM(__udivmodsi4):

#if defined (__ARC_EA__)
/* Normalize divisor and divident, and then use the appropriate number of
   divaw (the number of result bits, or one more) to produce the result.
   There are some special conditions that need to be tested:
   - We can only directly normalize unsigned numbers that fit in 31 bit.  For
     the divisor, we test early on that it is not 'negative'.
   - divaw can't corrrectly process a divident that is larger than the divisor.
     We handle this be checking that the divident prior to normalization is
     not larger than the normalized divisor.  As we then already know then
     that the divisor fits 31 bit, this check also makes sure that the
     divident fits.
   - ordinary normalization of the divident could make it larger than the
     normalized divisor, which again would be unsuitable for divaw.
     Thus, we want to shift left the divident by one less, except that we
     want to leave it alone if it is already 31 bit.  To this end, we
     double the input to norm with adds.
   - If the divident has less bits than the divisor, that would leave us
     with a negative number of divaw to execute.  Although we could use a
     conditional loop to avoid excess divaw, and then the quotient could
     be extracted correctly as there'd be more than enough zero bits, the
     remainder would be shifted left too far, requiring a conditional shift
     right.  The cost of that shift and the possible mispredict on the
     conditional loop cost as much as putting in an early check for a zero
     result.  */
	bmsk	r3,r0,29
	brne.d	r3,r0,.Large_dividend
	norm.f	r2,r1
	brlo	r0,r1,.Lret0
	norm	r3,r0
	asl_s	r1,r1,r2
	sub_s	r3,r3,1
	asl_l	r0,r0,r3	; not short to keep loop aligned
	sub	lp_count,r2,r3
	lp	.Ldiv_end
	divaw	r0,r0,r1
.Ldiv_end:sub_s	r3,r2,1
	lsr	r1,r0,r2
	j_s.d	[blink]
	bmsk	r0,r0,r3

	.balign 4
.Large_dividend:
	bmi	.Ltrivial
	asl_s	r1,r1,r2
	mov_s	r3,0
	sub1.f	r4,r0,r1
	mov.lo	r4,r0
	mov.hs	r3,2
	cmp	r4,r1
	sub.hs	r4,r4,r1
	add.hs	r3,r3,1
	mov.f	lp_count,r2
	lpne	.Ldiv_end2
	divaw	r4,r4,r1
.Ldiv_end2:asl	r0,r3,r2
	lsr	r1,r4,r2
	sub_s	r2,r2,1
	bmsk	r4,r4,r2
	j_s.d	[blink]
	or.ne	r0,r0,r4

.Lret0:
	mov_s	r1,r0
	j_s.d	[blink]
	mov_l	r0,0
	.balign	4
.Ltrivial:
	sub.f	r1,r0,r1
	mov.c	r1,r0
	mov_s	r0,1
	j_s.d	[blink]
	mov.c	r0,0
#elif !defined (__OPTIMIZE_SIZE__) && !defined (__ARC_RF16__)
#if defined (__ARC_NORM__) && defined (__ARC_BARREL_SHIFTER__)
	lsr_s r2,r0
	brhs.d r1,r2,.Lret0_3
	norm r2,r2
	norm r3,r1
	sub_s r3,r3,r2
	asl_s r1,r1,r3
	sub1.f 0,r0,r1
	lsr.cs r1,r1,1
	sbc r2,r3,0
	sub1 r0,r0,r1
	cmp_s r0,r1
	mov.f lp_count,r2
#else /* ! __ARC_NORM__ */
	lsr_s r2,r0
	brhs.d r1,r2,.Lret0_3
	mov lp_count,32
.Lloop1:
	asl_s r1,r1		; den <<= 1
	brls.d r1,r2,@.Lloop1
	sub lp_count,lp_count,1
	sub_s r0,r0,r1
	lsr_s r1,r1
	cmp_s r0,r1
	xor.f r2,lp_count,31
#if !defined (__ARCEM__) && !defined (__ARCHS__)
	mov_s lp_count,r2
#else
	mov lp_count,r2
	nop_s
#endif /* !__ARCEM__ && !__ARCHS__ */
#endif /* !__ARC_NORM__ */
	sub.cc r0,r0,r1
	mov_s r3,3
	sbc r3,r3,0
#if defined (__ARC_BARREL_SHIFTER__)
	asl_s r3,r3,r2
	rsub r1,r1,1
	lpne @.Lloop2_end
	add1.f r0,r1,r0
	sub.cc r0,r0,r1
.Lloop2_end:
	lsr r1,r0,r2
#else
	rsub r1,r1,1
	lpne @.Lloop2_end
	asl_s r3,r3
	add1.f r0,r1,r0
	sub.cc r0,r0,r1
.Lloop2_end:
	lsr_s r1,r0
	lsr.f lp_count,r2
	mov.cc r1,r0
	lpnz 1f
	lsr_s r1,r1
	lsr_s r1,r1
1:
#endif
	bmsk r0,r0,r2
	bclr r0,r0,r2
	j_s.d [blink]
	or_s r0,r0,r3
.Lret0_3:
#if 0 /* Slightly shorter, but slower.  */
	lp .Loop3_end
	brhi.d r1,r0,.Loop3_end
	sub_s r0,r0,r1
.Loop3_end
	add_s r1,r1,r0
	j_s.d [blink]
	rsub r0,lp_count,32-1
#else
	mov_s r4,r1
	sub.f r1,r0,r1
	sbc r0,r0,r0
	sub.cc.f r1,r1,r4
	sbc r0,r0,0
	sub.cc.f r1,r1,r4
	sbc r0,r0,-3
	j_s.d [blink]
	add.cs r1,r1,r4
#endif
#else /* Arctangent-A5 */
	breq_s r1,0,@.Ldivmodend
	mov_s r2,1		; bit = 1
	mov_s r3,0		; res = 0
.Lloop1:
	brhs r1,r0,@.Lloop2
	bbit1 r1,31,@.Lloop2
	asl_s r1,r1		; den <<= 1
	b.d @.Lloop1
	asl_s r2,r2		; bit <<= 1
.Lloop2:
	brlo r0,r1,@.Lshiftdown
	sub_s r0,r0,r1		; num -= den
	or_s r3,r3,r2		; res |= bit
.Lshiftdown:
	lsr_s r2,r2		; bit >>= 1
	lsr_s r1,r1		; den >>= 1
	brne_s r2,0,@.Lloop2
.Ldivmodend:
	mov_s r1,r0		; r1 = mod
	j.d [blink]
	mov_s r0,r3		; r0 = res
/******************************************************/
#endif
	ENDFUNC(__udivmodsi4)

#endif

#ifdef  L_udivsi3
	.section .text
	.align 4

	.global SYM(__udivsi3)
	FUNC(__udivsi3)
SYM(__udivsi3):
	b @SYM(__udivmodsi4)
	ENDFUNC(__udivsi3)

#endif /* L_udivsi3 */

#ifdef  L_divsi3
	.section .text
	.align 4

	.global SYM(__divsi3)
	FUNC(__divsi3)

#ifndef __ARC_EA__
SYM(__divsi3):
	/* A5 / ARC60? */
	mov r12,blink
	xor r11,r0,r1
	abs_s r0,r0
	bl.d @SYM(__udivmodsi4)
	abs_s r1,r1
	tst r11,r11
	j.d [r12]
	neg.mi r0,r0
#else 	/* !ifndef __ARC_EA__ */
	;; We can use the abs, norm, divaw and mpy instructions for ARC700
#define MULDIV
#ifdef MULDIV
/* This table has been generated by divtab-arc700.c.  */
/* 1/512 .. 1/256, normalized.  There is a leading 1 in bit 31.
   For powers of two, we list unnormalized numbers instead.  The values
   for powers of 2 are loaded, but not used.  The value for 1 is actually
   the first instruction after .Lmuldiv.  */
	.balign 4
.Ldivtab:

	.long	0x1000000
	.long	0x80808081
	.long	0x81020409
	.long	0x81848DA9
	.long	0x82082083
	.long	0x828CBFBF
	.long	0x83126E98
	.long	0x83993053
	.long	0x84210843
	.long	0x84A9F9C9
	.long	0x85340854
	.long	0x85BF3762
	.long	0x864B8A7E
	.long	0x86D90545
	.long	0x8767AB60
	.long	0x87F78088
	.long	0x88888889
	.long	0x891AC73B
	.long	0x89AE408A
	.long	0x8A42F871
	.long	0x8AD8F2FC
	.long	0x8B70344B
	.long	0x8C08C08D
	.long	0x8CA29C05
	.long	0x8D3DCB09
	.long	0x8DDA5203
	.long	0x8E78356E
	.long	0x8F1779DA
	.long	0x8FB823EF
	.long	0x905A3864
	.long	0x90FDBC0A
	.long	0x91A2B3C5
	.long	0x92492493
	.long	0x92F11385
	.long	0x939A85C5
	.long	0x94458095
	.long	0x94F20950
	.long	0x95A02569
	.long	0x964FDA6D
	.long	0x97012E03
	.long	0x97B425EE
	.long	0x9868C80A
	.long	0x991F1A52
	.long	0x99D722DB
	.long	0x9A90E7DA
	.long	0x9B4C6F9F
	.long	0x9C09C09D
	.long	0x9CC8E161
	.long	0x9D89D89E
	.long	0x9E4CAD24
	.long	0x9F1165E8
	.long	0x9FD809FE
	.long	0xA0A0A0A1
	.long	0xA16B312F
	.long	0xA237C32C
	.long	0xA3065E40
	.long	0xA3D70A3E
	.long	0xA4A9CF1E
	.long	0xA57EB503
	.long	0xA655C43A
	.long	0xA72F053A
	.long	0xA80A80A9
	.long	0xA8E83F58
	.long	0xA9C84A48
	.long	0xAAAAAAAB
	.long	0xAB8F69E3
	.long	0xAC769185
	.long	0xAD602B59
	.long	0xAE4C415D
	.long	0xAF3ADDC7
	.long	0xB02C0B03
	.long	0xB11FD3B9
	.long	0xB21642C9
	.long	0xB30F6353
	.long	0xB40B40B5
	.long	0xB509E68B
	.long	0xB60B60B7
	.long	0xB70FBB5B
	.long	0xB81702E1
	.long	0xB92143FB
	.long	0xBA2E8BA3
	.long	0xBB3EE722
	.long	0xBC52640C
	.long	0xBD691048
	.long	0xBE82FA0C
	.long	0xBFA02FE9
	.long	0xC0C0C0C1
	.long	0xC1E4BBD6
	.long	0xC30C30C4
	.long	0xC4372F86
	.long	0xC565C87C
	.long	0xC6980C6A
	.long	0xC7CE0C7D
	.long	0xC907DA4F
	.long	0xCA4587E7
	.long	0xCB8727C1
	.long	0xCCCCCCCD
	.long	0xCE168A78
	.long	0xCF6474A9
	.long	0xD0B69FCC
	.long	0xD20D20D3
	.long	0xD3680D37
	.long	0xD4C77B04
	.long	0xD62B80D7
	.long	0xD79435E6
	.long	0xD901B204
	.long	0xDA740DA8
	.long	0xDBEB61EF
	.long	0xDD67C8A7
	.long	0xDEE95C4D
	.long	0xE070381D
	.long	0xE1FC780F
	.long	0xE38E38E4
	.long	0xE525982B
	.long	0xE6C2B449
	.long	0xE865AC7C
	.long	0xEA0EA0EB
	.long	0xEBBDB2A6
	.long	0xED7303B6
	.long	0xEF2EB720
	.long	0xF0F0F0F1
	.long	0xF2B9D649
	.long	0xF4898D60
	.long	0xF6603D99
	.long	0xF83E0F84
	.long	0xFA232CF3
	.long	0xFC0FC0FD
	.long	0xFE03F810
	.long	0x2000000
	.long	0x81020409
	.long	0x82082083
	.long	0x83126E98
	.long	0x84210843
	.long	0x85340854
	.long	0x864B8A7E
	.long	0x8767AB60
	.long	0x88888889
	.long	0x89AE408A
	.long	0x8AD8F2FC
	.long	0x8C08C08D
	.long	0x8D3DCB09
	.long	0x8E78356E
	.long	0x8FB823EF
	.long	0x90FDBC0A
	.long	0x92492493
	.long	0x939A85C5
	.long	0x94F20950
	.long	0x964FDA6D
	.long	0x97B425EE
	.long	0x991F1A52
	.long	0x9A90E7DA
	.long	0x9C09C09D
	.long	0x9D89D89E
	.long	0x9F1165E8
	.long	0xA0A0A0A1
	.long	0xA237C32C
	.long	0xA3D70A3E
	.long	0xA57EB503
	.long	0xA72F053A
	.long	0xA8E83F58
	.long	0xAAAAAAAB
	.long	0xAC769185
	.long	0xAE4C415D
	.long	0xB02C0B03
	.long	0xB21642C9
	.long	0xB40B40B5
	.long	0xB60B60B7
	.long	0xB81702E1
	.long	0xBA2E8BA3
	.long	0xBC52640C
	.long	0xBE82FA0C
	.long	0xC0C0C0C1
	.long	0xC30C30C4
	.long	0xC565C87C
	.long	0xC7CE0C7D
	.long	0xCA4587E7
	.long	0xCCCCCCCD
	.long	0xCF6474A9
	.long	0xD20D20D3
	.long	0xD4C77B04
	.long	0xD79435E6
	.long	0xDA740DA8
	.long	0xDD67C8A7
	.long	0xE070381D
	.long	0xE38E38E4
	.long	0xE6C2B449
	.long	0xEA0EA0EB
	.long	0xED7303B6
	.long	0xF0F0F0F1
	.long	0xF4898D60
	.long	0xF83E0F84
	.long	0xFC0FC0FD
	.long	0x4000000
	.long	0x82082083
	.long	0x84210843
	.long	0x864B8A7E
	.long	0x88888889
	.long	0x8AD8F2FC
	.long	0x8D3DCB09
	.long	0x8FB823EF
	.long	0x92492493
	.long	0x94F20950
	.long	0x97B425EE
	.long	0x9A90E7DA
	.long	0x9D89D89E
	.long	0xA0A0A0A1
	.long	0xA3D70A3E
	.long	0xA72F053A
	.long	0xAAAAAAAB
	.long	0xAE4C415D
	.long	0xB21642C9
	.long	0xB60B60B7
	.long	0xBA2E8BA3
	.long	0xBE82FA0C
	.long	0xC30C30C4
	.long	0xC7CE0C7D
	.long	0xCCCCCCCD
	.long	0xD20D20D3
	.long	0xD79435E6
	.long	0xDD67C8A7
	.long	0xE38E38E4
	.long	0xEA0EA0EB
	.long	0xF0F0F0F1
	.long	0xF83E0F84
	.long	0x8000000
	.long	0x84210843
	.long	0x88888889
	.long	0x8D3DCB09
	.long	0x92492493
	.long	0x97B425EE
	.long	0x9D89D89E
	.long	0xA3D70A3E
	.long	0xAAAAAAAB
	.long	0xB21642C9
	.long	0xBA2E8BA3
	.long	0xC30C30C4
	.long	0xCCCCCCCD
	.long	0xD79435E6
	.long	0xE38E38E4
	.long	0xF0F0F0F1
	.long	0x10000000
	.long	0x88888889
	.long	0x92492493
	.long	0x9D89D89E
	.long	0xAAAAAAAB
	.long	0xBA2E8BA3
	.long	0xCCCCCCCD
	.long	0xE38E38E4
	.long	0x20000000
	.long	0x92492493
	.long	0xAAAAAAAB
	.long	0xCCCCCCCD
	.long	0x40000000
	.long	0xAAAAAAAB
	.long	0x80000000
__muldiv:
	neg	r4,r2
	ld.as	r5,[pcl,r4]
	abs_s	r12,r0
	bic.f	0,r2,r4
	mpyhu.ne r12,r12,r5
	norm	r3,r2
	xor.f	0,r0,r1
	; write port allocation stall
	rsub	r3,r3,30
	lsr	r0,r12,r3
	j_s.d	[blink]
	neg.mi	r0,r0

	.balign	4
SYM(__divsi3):
	norm	r3,r1
	abs_s	r2,r1
	brhs	r3,23,__muldiv
	norm	r4,r0
	abs_l	r12,r0
	brhs	r4,r3,.Lonebit
	asl_s	r2,r2,r3
	asl	r12,r12,r4
	sub	lp_count,r3,r4
	sub.f	r12,r12,r2
	brge.d	r12,r2,.Lsbit
	sub	r4,r3,r4
	add.lo	r12,r12,r2
	lp	.Ldivend
.Ldivstart:divaw r12,r12,r2
.Ldivend:xor_s	r1,r1,r0
	sub	r0,r4,1
	bmsk	r0,r12,r0
	bset.hs	r0,r0,r4
	tst_s	r1,r1
	j_s.d	[blink]
	neg.mi	r0,r0
.Lonebit:
	xor_s	r1,r1,r0
	asr_s	r1,r1,31
	sub1.f	0,r12,r2	; special case:	-2**(n+1) / 2**n
	or	r0,r1,1
	add.eq	r0,r0,r0
	cmp_s	r12,r2
	j_s.d	[blink]
	mov.lo	r0,0
.Lsbit:
	; Need to handle special cases involving negative powers of two:
	; r12,r2 are normalized dividend / divisor;
	; divide anything by 0x80000000, or divide 0x80000000 by 0x40000000
	add_s	r12,r12,r2
	xor_s	r1,r1,r0
	rsub	r4,r4,-1
	ror	r0,r12,r4
	tst_s	r2,r2
	bmsk	r0,r0,r3
	add.pl	r0,r0,r0
	tst_s	r1,r1
	j_s.d	[blink]
	neg.mi	r0,r0
#else /* !MULDIV */
/* This version requires that divaw works with a divisor of 0x80000000U  */
	abs_s	r2,r1
	norm	r4,r0
	neg_s	r3,r2
	norm	r3,r3
	abs_s	r12,r0
	brhs	r4,r3,.Lonebit
	asl_s	r2,r2,r3
	asl	r12,r12,r4
	sub	lp_count,r3,r4
	cmp_s	r12,r2
	sub.hs	r12,r12,r2
	lp	.Ldivend
.Ldivstart:divaw r12,r12,r2
.Ldivend:xor_s	r1,r1,r0
	sub_s	r0,r3,1
	bmsk	r0,r12,r0
	bset.hs	r0,r0,r3
	tst_s	r1,r1
	j_s.d	[blink]
	negmi	r0,r0
.Lonebit:
	xor_s	r1,r1,r0
	asr_s	r1,r1,31
	cmp_s	r12,r2
	mov_s	r0,0
	j_s.d	[blink]
	orhs	r0,r1,1
#endif /* MULDIV */

#endif	/* ifndef __ARC700__ */
	ENDFUNC(__divsi3)


#endif /* L_divsi3 */

#ifndef __ARC_RF16__
#ifdef  L_umodsi3
	.section .text
	.align 4

	.global SYM(__umodsi3)
	FUNC(__umodsi3)
SYM(__umodsi3):
	mov r7,blink
	bl.nd @SYM(__udivmodsi4)
	j.d [r7]
	mov r0,r1
	ENDFUNC(__umodsi3)

#endif /* L_umodsi3 */
#endif /* !__ARC_RF16__ */

#ifdef  L_modsi3
	.section .text
	.align 4

	.global SYM (__modsi3)
	FUNC(__modsi3)
SYM(__modsi3):
#ifndef __ARC_EA__
	/* A5 / ARC60? */
	mov_s r12,blink
	mov_s r11,r0
	abs_s r0,r0
	bl.d @SYM(__udivmodsi4)
	abs_s r1,r1
	tst r11,r11
	neg_s r0,r1
	j_s.d [r12]
	mov.pl r0,r1
#else /* __ARC_EA__ */
	abs_s	r2,r1
	norm.f	r4,r0
	neg	r5,r2
	norm	r3,r5
	abs_l	r12,r0
	brhs	r4,r3,.Lonebit
	asl_s	r2,r2,r3
	asl	r12,r12,r4
	sub	lp_count,r3,r4
	cmp_s	r12,r2
	sub.hs	r12,r12,r2
	tst_s	r0,r0
	lp	.Ldivend
.Ldivstart:divaw r12,r12,r2
.Ldivend:
	lsr	r0,r12,r3
	j_s.d	[blink]
	neg.mi	r0,r0
	.balign	4
.Lonebit:neg.pl	r5,r5
	cmp_s	r12,r2
	j_s.d	[blink]
	sub.hs	r0,r0,r5
#endif /* !__ARC_EA__ */
	ENDFUNC(__modsi3)

#endif /* L_modsi3 */

#ifdef L_clzsi2
       .section .text
       .align 4
       .global SYM (__clzsi2)
SYM(__clzsi2):
#ifdef __ARC_NORM__
	HIDDEN_FUNC(__clzsi2)
	norm.f	r0,r0
	mov.n	r0,0
	j_s.d	[blink]
	add.pl	r0,r0,1
	ENDFUNC(__clzsi2)
#elif !defined (__ARC_BARREL_SHIFTER__)
	FUNC(__clzsi2)
	mov lp_count,10
	mov_l r1,0
	bset r2,r1,29
	lp .Loop_end
	brhs r0,r2,.Loop_end
	add3 r0,r1,r0
.Loop_end:
	asl.f 0,r0
	sub2 r0,lp_count,lp_count
	sub.cs.f r0,r0,1
	add r0,r0,31
	j_s.d [blink]
	add.pl r0,r0,1
	ENDFUNC(__clzsi2)
#else
	FUNC(__clzsi2)
	asl.f 0,r0,2
	mov r1,-1
.Lcheck:
	bbit1.d r0,31,.Ldone
	asl.pl r0,r0,3
	bcs.d .Ldone_1
	add_s r1,r1,3
	bpnz.d .Lcheck
	asl.f 0,r0,2
	mov_s r0,32
	j_s.d [blink]
	mov.ne r0,r1
.Ldone:
	j_s.d [blink]
	add_s r0,r1,1
.Ldone_1:
	j_s.d [blink]
	sub_s r0,r1,1
	ENDFUNC(__clzsi2)
#endif
#endif /* L_clzsi2 */
       .section .text


;;; MILLICODE THUNK LIB ;***************

;;; 	.macro push_regs from, to, offset
;;; 		st_s "\from", [sp, \offset]
;;; 		.if \to-\from
;;; 			push_regs "(\from+1)", \to, "(\offset+4)"
;;; 		.endif
;;; 	.endm
;;; 	push_regs 13, 18, 0
;;;

;;;;   	.macro sum from, to, three
;;;;   		.long \from
;;;;   		.long \three
;;;;   		.local regno
;;;;   		.set regno, \from+1
;;;;   		.set shift, 32
;;;;   		.set shift, shift - 1
;;;;   #		st_s %shift @3 lsl #shift
;;;;   		.if \to-\from
;;;;   		sum "(\from+1)", \to, "(\three)"
;;;;   		.endif
;;;;   	.endm
;;;;
;;;;   	SUM 0,5, 9
;;;;
;	.altmacro
;;  	.macro push_regs from=0, to=3, offset
;;  		st_s r\from, [sp, \offset]
;;  		.if \to-\from
;;  			push_regs "\from+1 ",\to,"(\offset+4)"
;;  		.endif
;;  	.endm
;;
;;  	.macro expand_to_push from=13, to
;;  ;		.section .text
;;  ;		.align 4
;;  ;		.global st_
;;  ;		.type foo,
;;  	st_13_to_25:
;;  ;		push_regs \from, \to, 0
;;  	push_regs 0,3		;
;;  	.endm
;;
;;  	expand_to_push 13,18
;;
;#endif

#ifndef __ARC_RF16__
#ifdef L_millicodethunk_st
	.section .text
	.align 4
	.global SYM(__st_r13_to_r15)
	.global SYM(__st_r13_to_r16)
	.global SYM(__st_r13_to_r17)
	.global SYM(__st_r13_to_r18)
	.global SYM(__st_r13_to_r19)
	.global SYM(__st_r13_to_r20)
	.global SYM(__st_r13_to_r21)
	.global SYM(__st_r13_to_r22)
	.global SYM(__st_r13_to_r23)
	.global SYM(__st_r13_to_r24)
	.global SYM(__st_r13_to_r25)
	HIDDEN_FUNC(__st_r13_to_r15)
	HIDDEN_FUNC(__st_r13_to_r16)
	HIDDEN_FUNC(__st_r13_to_r17)
	HIDDEN_FUNC(__st_r13_to_r18)
	HIDDEN_FUNC(__st_r13_to_r19)
	HIDDEN_FUNC(__st_r13_to_r20)
	HIDDEN_FUNC(__st_r13_to_r21)
	HIDDEN_FUNC(__st_r13_to_r22)
	HIDDEN_FUNC(__st_r13_to_r23)
	HIDDEN_FUNC(__st_r13_to_r24)
	HIDDEN_FUNC(__st_r13_to_r25)
	.align 4
SYM(__st_r13_to_r25):
	st r25, [sp,48]
SYM(__st_r13_to_r24):
	st r24, [sp,44]
SYM(__st_r13_to_r23):
	st r23, [sp,40]
SYM(__st_r13_to_r22):
	st r22, [sp,36]
SYM(__st_r13_to_r21):
	st r21, [sp,32]
SYM(__st_r13_to_r20):
	st r20, [sp,28]
SYM(__st_r13_to_r19):
	st r19, [sp,24]
SYM(__st_r13_to_r18):
	st r18, [sp,20]
SYM(__st_r13_to_r17):
	st r17, [sp,16]
SYM(__st_r13_to_r16):
	st r16, [sp,12]
SYM(__st_r13_to_r15):
#ifdef __ARC700__
	st r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
#else
	st_s r15, [sp,8]
#endif
	st_s r14, [sp,4]
	j_s.d [%blink]
	st_s r13, [sp,0]
	ENDFUNC(__st_r13_to_r15)
	ENDFUNC(__st_r13_to_r16)
	ENDFUNC(__st_r13_to_r17)
	ENDFUNC(__st_r13_to_r18)
	ENDFUNC(__st_r13_to_r19)
	ENDFUNC(__st_r13_to_r20)
	ENDFUNC(__st_r13_to_r21)
	ENDFUNC(__st_r13_to_r22)
	ENDFUNC(__st_r13_to_r23)
	ENDFUNC(__st_r13_to_r24)
	ENDFUNC(__st_r13_to_r25)
#endif  /* L_millicodethunk_st */


#ifdef L_millicodethunk_ld
	.section .text
	.align 4
;	==================================
;	the loads

	.global SYM(__ld_r13_to_r15)
	.global SYM(__ld_r13_to_r16)
	.global SYM(__ld_r13_to_r17)
	.global SYM(__ld_r13_to_r18)
	.global SYM(__ld_r13_to_r19)
	.global SYM(__ld_r13_to_r20)
	.global SYM(__ld_r13_to_r21)
	.global SYM(__ld_r13_to_r22)
	.global SYM(__ld_r13_to_r23)
	.global SYM(__ld_r13_to_r24)
	.global SYM(__ld_r13_to_r25)
	HIDDEN_FUNC(__ld_r13_to_r15)
	HIDDEN_FUNC(__ld_r13_to_r16)
	HIDDEN_FUNC(__ld_r13_to_r17)
	HIDDEN_FUNC(__ld_r13_to_r18)
	HIDDEN_FUNC(__ld_r13_to_r19)
	HIDDEN_FUNC(__ld_r13_to_r20)
	HIDDEN_FUNC(__ld_r13_to_r21)
	HIDDEN_FUNC(__ld_r13_to_r22)
	HIDDEN_FUNC(__ld_r13_to_r23)
	HIDDEN_FUNC(__ld_r13_to_r24)
	HIDDEN_FUNC(__ld_r13_to_r25)
SYM(__ld_r13_to_r25):
	ld r25, [sp,48]
SYM(__ld_r13_to_r24):
	ld r24, [sp,44]
SYM(__ld_r13_to_r23):
	ld r23, [sp,40]
SYM(__ld_r13_to_r22):
	ld r22, [sp,36]
SYM(__ld_r13_to_r21):
	ld r21, [sp,32]
SYM(__ld_r13_to_r20):
	ld r20, [sp,28]
SYM(__ld_r13_to_r19):
	ld r19, [sp,24]
SYM(__ld_r13_to_r18):
	ld r18, [sp,20]
SYM(__ld_r13_to_r17):
	ld r17, [sp,16]
SYM(__ld_r13_to_r16):
	ld r16, [sp,12]
SYM(__ld_r13_to_r15):
#ifdef __ARC700__
	ld r15, [sp,8] ; minimum function size to avoid stall: 6 bytes.
#else
	ld_s r15, [sp,8]
#endif
	ld_s r14, [sp,4]
	j_s.d [%blink]
	ld_s r13, [sp,0]
	ENDFUNC(__ld_r13_to_r15)
	ENDFUNC(__ld_r13_to_r16)
	ENDFUNC(__ld_r13_to_r17)
	ENDFUNC(__ld_r13_to_r18)
	ENDFUNC(__ld_r13_to_r19)
	ENDFUNC(__ld_r13_to_r20)
	ENDFUNC(__ld_r13_to_r21)
	ENDFUNC(__ld_r13_to_r22)
	ENDFUNC(__ld_r13_to_r23)
	ENDFUNC(__ld_r13_to_r24)
	ENDFUNC(__ld_r13_to_r25)

#endif /* L_millicodethunk_ld */
#ifdef L_millicodethunk_ret
	.global SYM(__ld_r13_to_r14_ret)
	.global SYM(__ld_r13_to_r15_ret)
	.global SYM(__ld_r13_to_r16_ret)
	.global SYM(__ld_r13_to_r17_ret)
	.global SYM(__ld_r13_to_r18_ret)
	.global SYM(__ld_r13_to_r19_ret)
	.global SYM(__ld_r13_to_r20_ret)
	.global SYM(__ld_r13_to_r21_ret)
	.global SYM(__ld_r13_to_r22_ret)
	.global SYM(__ld_r13_to_r23_ret)
	.global SYM(__ld_r13_to_r24_ret)
	.global SYM(__ld_r13_to_r25_ret)
	HIDDEN_FUNC(__ld_r13_to_r14_ret)
	HIDDEN_FUNC(__ld_r13_to_r15_ret)
	HIDDEN_FUNC(__ld_r13_to_r16_ret)
	HIDDEN_FUNC(__ld_r13_to_r17_ret)
	HIDDEN_FUNC(__ld_r13_to_r18_ret)
	HIDDEN_FUNC(__ld_r13_to_r19_ret)
	HIDDEN_FUNC(__ld_r13_to_r20_ret)
	HIDDEN_FUNC(__ld_r13_to_r21_ret)
	HIDDEN_FUNC(__ld_r13_to_r22_ret)
	HIDDEN_FUNC(__ld_r13_to_r23_ret)
	HIDDEN_FUNC(__ld_r13_to_r24_ret)
	HIDDEN_FUNC(__ld_r13_to_r25_ret)
	.section .text
	.align 4
SYM(__ld_r13_to_r25_ret):
	ld r25, [sp,48]
SYM(__ld_r13_to_r24_ret):
	ld r24, [sp,44]
SYM(__ld_r13_to_r23_ret):
	ld r23, [sp,40]
SYM(__ld_r13_to_r22_ret):
	ld r22, [sp,36]
SYM(__ld_r13_to_r21_ret):
	ld r21, [sp,32]
SYM(__ld_r13_to_r20_ret):
	ld r20, [sp,28]
SYM(__ld_r13_to_r19_ret):
	ld r19, [sp,24]
SYM(__ld_r13_to_r18_ret):
	ld r18, [sp,20]
SYM(__ld_r13_to_r17_ret):
	ld r17, [sp,16]
SYM(__ld_r13_to_r16_ret):
	ld r16, [sp,12]
SYM(__ld_r13_to_r15_ret):
	ld r15, [sp,8]
SYM(__ld_r13_to_r14_ret):
	ld blink,[sp,r12]
	ld_s r14, [sp,4]
	ld.ab r13, [sp,r12]
	j_s.d [%blink]
	add_s sp,sp,4
	ENDFUNC(__ld_r13_to_r14_ret)
	ENDFUNC(__ld_r13_to_r15_ret)
	ENDFUNC(__ld_r13_to_r16_ret)
	ENDFUNC(__ld_r13_to_r17_ret)
	ENDFUNC(__ld_r13_to_r18_ret)
	ENDFUNC(__ld_r13_to_r19_ret)
	ENDFUNC(__ld_r13_to_r20_ret)
	ENDFUNC(__ld_r13_to_r21_ret)
	ENDFUNC(__ld_r13_to_r22_ret)
	ENDFUNC(__ld_r13_to_r23_ret)
	ENDFUNC(__ld_r13_to_r24_ret)
	ENDFUNC(__ld_r13_to_r25_ret)

#endif /* L_millicodethunk_ret */

#if defined (__ARC700__) || defined (__ARC_FPX_QUARK__)
#ifdef  L_adddf3
#ifdef __ARC_NORM__
#include "ieee-754/adddf3.S"
#endif
#endif

#ifdef  L_muldf3
#ifdef __ARC_MPY__
#include "ieee-754/muldf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
#include "ieee-754/arc600-mul64/muldf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
#include "ieee-754/arc600-dsp/muldf3.S"
#endif
#endif

#ifdef  L_addsf3
#ifdef __ARC_NORM__
#include "ieee-754/addsf3.S"
#endif
#endif

#ifdef  L_mulsf3
#ifdef  __ARC_MPY__
#include "ieee-754/mulsf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
#include "ieee-754/arc600-mul64/mulsf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
#include "ieee-754/arc600-dsp/mulsf3.S"
#elif defined (__ARC_NORM__)
#include "ieee-754/arc600/mulsf3.S"
#endif
#endif

#ifdef  L_divdf3
#ifdef  __ARC_MPY__
#include "ieee-754/divdf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
#include "ieee-754/arc600-mul64/divdf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
#include "ieee-754/arc600-dsp/divdf3.S"
#endif
#endif

#ifdef  L_divsf3
#ifdef  __ARC_MPY__
#include "ieee-754/divsf3-stdmul.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL64__)
#include "ieee-754/arc600-mul64/divsf3.S"
#elif defined (__ARC_NORM__) && defined(__ARC_MUL32BY16__)
#include "ieee-754/arc600-dsp/divsf3.S"
#elif defined (__ARC_NORM__)
#include "ieee-754/arc600/divsf3.S"
#endif
#endif

#ifdef L_extendsfdf2
#ifdef __ARC_NORM__
#include "ieee-754/extendsfdf2.S"
#endif
#endif

#ifdef L_truncdfsf2
#ifdef __ARC_NORM__
#include "ieee-754/truncdfsf2.S"
#endif
#endif

#ifdef L_floatsidf
#ifdef __ARC_NORM__
#include "ieee-754/floatsidf.S"
#endif
#endif

#ifdef L_floatsisf
#ifdef __ARC_NORM__
#include "ieee-754/floatsisf.S"
#endif
#endif

#ifdef L_floatunsidf
#ifdef __ARC_NORM__
#include "ieee-754/floatunsidf.S"
#endif
#endif

#ifdef L_fixdfsi
#ifdef __ARC_NORM__
#include "ieee-754/fixdfsi.S"
#endif
#endif

#ifdef L_fixsfsi
#ifdef __ARC_NORM__
#include "ieee-754/fixsfsi.S"
#endif
#endif

#ifdef L_fixunsdfsi
#ifdef __ARC_NORM__
#include "ieee-754/fixunsdfsi.S"
#endif
#endif

#ifdef L_eqdf2
#ifdef __ARC_NORM__
#include "ieee-754/eqdf2.S"
#endif
#endif

#ifdef L_eqsf2
#ifdef __ARC_NORM__
#include "ieee-754/eqsf2.S"
#endif
#endif

#ifdef L_gtdf2
#ifdef __ARC_NORM__
#include "ieee-754/gtdf2.S"
#endif
#endif

#ifdef L_gtsf2
#ifdef __ARC_NORM__
#include "ieee-754/gtsf2.S"
#endif
#endif

#ifdef L_gedf2
#ifdef __ARC_NORM__
#include "ieee-754/gedf2.S"
#endif
#endif

#ifdef L_gesf2
#ifdef __ARC_NORM__
#include "ieee-754/gesf2.S"
#endif
#endif

#ifdef L_uneqdf2
#ifdef __ARC_NORM__
#include "ieee-754/uneqdf2.S"
#endif
#endif

#ifdef L_uneqsf2
#ifdef __ARC_NORM__
#include "ieee-754/uneqsf2.S"
#endif
#endif

#ifdef L_orddf2
#ifdef __ARC_NORM__
#include "ieee-754/orddf2.S"
#endif
#endif

#ifdef L_ordsf2
#ifdef __ARC_NORM__
#include "ieee-754/ordsf2.S"
#endif
#endif
#endif /* ARC_OPTFPE */

#endif /* !__ARC_RF16__ */
