|
|
1.1 ! root 1: #include "libgcc.h" ! 2: ! 3: __libgcc uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem_p) ! 4: { ! 5: uint64_t quot = 0, qbit = 1; ! 6: ! 7: if ( den == 0 ) { ! 8: return 1/((unsigned)den); /* Intentional divide by zero, without ! 9: triggering a compiler warning which ! 10: would abort the build */ ! 11: } ! 12: ! 13: /* Left-justify denominator and count shift */ ! 14: while ( (int64_t)den >= 0 ) { ! 15: den <<= 1; ! 16: qbit <<= 1; ! 17: } ! 18: ! 19: while ( qbit ) { ! 20: if ( den <= num ) { ! 21: num -= den; ! 22: quot += qbit; ! 23: } ! 24: den >>= 1; ! 25: qbit >>= 1; ! 26: } ! 27: ! 28: if ( rem_p ) ! 29: *rem_p = num; ! 30: ! 31: return quot; ! 32: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.