]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/gcc/config/udivmodsi4.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / gcc / config / udivmodsi4.c
1 unsigned long
2 udivmodsi4(unsigned long num, unsigned long den, int modwanted)
3 {
4   unsigned long bit = 1;
5   unsigned long res = 0;
6
7   while (den < num && bit && !(den & (1L<<31)))
8     {
9       den <<=1;
10       bit <<=1;
11     }
12   while (bit)
13     {
14       if (num >= den)
15         {
16           num -= den;
17           res |= bit;
18         }
19       bit >>=1;
20       den >>=1;
21     }
22   if (modwanted) return num;
23   return res;
24 }