#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__ */