Adding upstream version 3.86+dfsg.
[syslinux-debian/hramrach.git] / com32 / lib / libgcc / __udivmoddi4.c
blobdd602631e8852a6cc09879a511b3103f48ed97d1
1 #include <klibc/diverr.h>
2 #include <stdint.h>
4 uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem_p)
6 uint64_t quot = 0, qbit = 1;
8 if (den == 0) {
9 __divide_error();
10 return 0; /* If trap returns... */
13 /* Left-justify denominator and count shift */
14 while ((int64_t) den >= 0) {
15 den <<= 1;
16 qbit <<= 1;
19 while (qbit) {
20 if (den <= num) {
21 num -= den;
22 quot += qbit;
24 den >>= 1;
25 qbit >>= 1;
28 if (rem_p)
29 *rem_p = num;
31 return quot;