Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / libgcc / __udivmodti4.c
1 #include "libgcc.h"
2
3 __uint128_t __udivmodti4(__uint128_t num, __uint128_t den, __uint128_t *rem_p)
4 {
5   __uint128_t quot = 0, qbit = 1;
6
7   if ( den == 0 ) {
8     __divide_error();
9     return 0;                   /* If trap returns... */
10   }
11
12   /* Left-justify denominator and count shift */
13   while ( (__int128_t)den >= 0 ) {
14     den <<= 1;
15     qbit <<= 1;
16   }
17
18   while ( qbit ) {
19     if ( den <= num ) {
20       num -= den;
21       quot += qbit;
22     }
23     den >>= 1;
24     qbit >>= 1;
25   }
26
27   if ( rem_p )
28     *rem_p = num;
29
30   return quot;
31 }