#ifndef __UDIV__
#define __UDIV__

#ifdef CDINIT_ARCH_SPARC32

//-----------------------------------------------------------------------------
// function	udiv (linked as ".udiv")
//
// purpose	Do unsigned integer division for sparc, returning quotient.
//		This function is called for compiled divide operations.
//
// arguments	1 (unsigned int) dividend
//		2 (unsigned int) divisor
//
// returns	(unsigned int) quotient
//-----------------------------------------------------------------------------

extern unsigned int udiv() __asm__( ".udiv" );

unsigned int
udiv (
    unsigned int	dividend
    ,
    unsigned int	divisor
    )
{
    unsigned int	scale	;
    unsigned int	tmp	;

    if ( divisor == 0 ) return 0;

    scale = 1;
    tmp = dividend >> 1;
    while ( divisor <= tmp ) {
	divisor <<= 1;
	scale <<= 1;
    }

    tmp = 0;
    while ( scale ) {
	if ( dividend >= divisor ) {
	    dividend -= divisor;
	    tmp += scale;
	}
	divisor >>= 1;
	scale >>= 1;
    }

    return tmp;
}

#endif /* CDINIT_ARCH_SPARC32 */

#endif /* __UDIV__ */

