Contents of /trunk/mkinitrd-magellan/klibc/usr/klibc/libgcc/__udivmoddi4.c
Parent Directory | 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)
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 | } |