#ifndef __UREM__
#define __UREM__

#ifdef CDINIT_ARCH_SPARC32

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

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

unsigned int
urem (
    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;
    }

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

    return dividend;
}

#endif /* CDINIT_ARCH_SPARC32 */

#endif /* __UREM__ */

