Magellan Linux

Contents of /trunk/mkinitrd-magellan/klibc/usr/klibc/libgcc/__udivmoddi4.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (show annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 483 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 #include <klibc/diverr.h>
2 #include <stdint.h>
3
4 uint64_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 }