@----------------------------------------------------------------------------
@
@\Source: /usr/local/cvsroot/gccsdk/unixlib/source/sys/_sdiv.s,v $
@\Date: 2002/09/24 2102:38 $
@\Revision: 1.4 $
@\State: Exp $
@\Author: admin $
@
@----------------------------------------------------------------------------

	.include	"clib/unixlib/asm_dec.s"



	.global	_kernel_sdiv
	.global	x$divide
	.global	__rt_sdiv
	NAME	__rt_sdiv
_kernel_sdiv:
x$divide:
__rt_sdiv:
	@ Just return for divide by zero
	MOVS	a4, r0
	return	EQ, pc, lr
	AND	a3, r1, #0x80000000
	EOR	ip, a4, r0
	ORR	a3, a3, ip, LSR #1
	RSBMI	a4, a4, #0
	MOVS	a2, r1
	RSBMI	a2, a2, #0
	MOV	ip, a4

	CMP	ip, a2, LSR #16
	MOVLS	ip, ip, LSL #16
	CMP	ip, a2, LSR #8
	MOVLS	ip, ip, LSL #8
	CMP	ip, a2, LSR #4
	MOVLS	ip, ip, LSL #4
	CMP	ip, a2, LSR #2
	MOVLS	ip, ip, LSL #2
	CMP	ip, a2, LSR #1
	MOVLS	ip, ip, LSL #1

	MOV	a1, #0
divloop:
	CMP	a2, ip
	SUBCS	a2, a2, ip
	ADC	a1, a1, a1
	MOV	ip, ip, LSR #1
	CMP	ip, a4
	BCS	divloop
	TST	a3,  #0x40000000
	RSBNE	a1, a1, #0
	TST	a3,  #0x80000000
	RSBNE	a2, a2, #0
	return	AL, pc, lr

