xref: /openbsd/gnu/usr.bin/gcc/gcc/config/udivmodsi4.c (revision c87b03e5)
1 unsigned long
udivmodsi4(unsigned long num,unsigned long den,int modwanted)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 }
25