source: bootcd/isolinux/syslinux-6.03/gpxe/src/libgcc/__udivmoddi4.c @ dd1be7c

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

bootstuff

  • Property mode set to 100644
File size: 587 bytes
Line 
1#include "libgcc.h"
2
3__libgcc 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    return 1/((unsigned)den); /* Intentional divide by zero, without
9                                 triggering a compiler warning which
10                                 would abort the build */
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.