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