#ifndef __DIV__
#define __DIV__

#ifdef CDINIT_ARCH_SPARC32

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

extern signed int div() __asm__( ".div" );

signed int
div (
    signed int	dividend
    ,
    signed int	divisor
    )
{
    unsigned int	scale	;
    unsigned int	tmp	;
    unsigned int	sign	;

    if ( divisor == 0 ) return 0;

    sign = 0;
    if ( dividend < 0 ) ++ sign;
    if ( divisor < 0 ) ++ sign;

    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 ( sign & 1 ) ? 0 - (signed int) tmp : (signed int) tmp;
}

#endif /* CDINIT_ARCH_SPARC32 */

#endif /* __DIV__ */

