source: bootcd/isolinux/syslinux-6.03/com32/lib/libgcc/__udivmoddi4.c

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 509 bytes
Line 
1#include <klibc/diverr.h>
2#include <stdint.h>
3
4uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t * rem_p)
5{
6    uint64_t quot = 0, qbit = 1;
7
8    if (den == 0) {
9        __divide_error();
10        return 0;               /* If trap returns... */
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}
Note: See TracBrowser for help on using the repository browser.