__udivmodsi4.c 409 B

12345678910111213141516171819202122232425262728293031
  1. #include "libgcc.h"
  2. u32 __udivmodsi4(u32 num, u32 den, u32 * rem_p)
  3. {
  4. u32 quot = 0, qbit = 1;
  5. if (den == 0) {
  6. BUG();
  7. }
  8. /* Left-justify denominator and count shift */
  9. while ((s32) den >= 0) {
  10. den <<= 1;
  11. qbit <<= 1;
  12. }
  13. while (qbit) {
  14. if (den <= num) {
  15. num -= den;
  16. quot += qbit;
  17. }
  18. den >>= 1;
  19. qbit >>= 1;
  20. }
  21. if (rem_p)
  22. *rem_p = num;
  23. return quot;
  24. }
  25. EXPORT_SYMBOL(__udivmodsi4);