~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/ipxe/src/libgcc/__udivmoddi4.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}