|
|
1.1 ! root 1: #include "libgcc.h" ! 2: ! 3: 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: __divide_error(); ! 9: return 0; /* If trap returns... */ ! 10: } ! 11: ! 12: /* Left-justify denominator and count shift */ ! 13: while ( (int64_t)den >= 0 ) { ! 14: den <<= 1; ! 15: qbit <<= 1; ! 16: } ! 17: ! 18: while ( qbit ) { ! 19: if ( den <= num ) { ! 20: num -= den; ! 21: quot += qbit; ! 22: } ! 23: den >>= 1; ! 24: qbit >>= 1; ! 25: } ! 26: ! 27: if ( rem_p ) ! 28: *rem_p = num; ! 29: ! 30: return quot; ! 31: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.