190075Sobrienunsigned long 290075Sobrienudivmodsi4(unsigned long num, unsigned long den, int modwanted) 390075Sobrien{ 490075Sobrien unsigned long bit = 1; 590075Sobrien unsigned long res = 0; 690075Sobrien 790075Sobrien while (den < num && bit && !(den & (1L<<31))) 890075Sobrien { 990075Sobrien den <<=1; 1090075Sobrien bit <<=1; 1190075Sobrien } 1290075Sobrien while (bit) 1390075Sobrien { 1490075Sobrien if (num >= den) 1590075Sobrien { 1690075Sobrien num -= den; 1790075Sobrien res |= bit; 1890075Sobrien } 1990075Sobrien bit >>=1; 2090075Sobrien den >>=1; 2190075Sobrien } 2290075Sobrien if (modwanted) return num; 2390075Sobrien return res; 2490075Sobrien} 25