POK
__udivdi3.c
1 /*
2  * POK header
3  *
4  * The following file is a part of the POK project. Any modification should
5  * made according to the POK licence. You CANNOT use this file or a part of
6  * this file is this part of a file for your own project
7  *
8  * For more information on the POK licence, please see our LICENCE FILE
9  *
10  * Please follow the coding guidelines described in doc/CODING_GUIDELINES
11  *
12  * Copyright (c) 2007-2009 POK team
13  *
14  * Created by julien on Thu Jan 15 23:34:13 2009
15  */
16 
17 #include <core/dependencies.h>
18 
19 #ifdef POK_CONFIG_NEEDS_FUNC_UDIVDI3
20 
21 unsigned long long __udivdi3(unsigned long long num,
22  unsigned long long den)
23 {
24  unsigned long long quot = 0, qbit = 1;
25 
26  if (den == 0)
27  return 0;
28 
29  while ((long long) den >= 0)
30  {
31  den <<= 1;
32  qbit <<= 1;
33  }
34 
35  while (qbit)
36  {
37  if (den <= num)
38  {
39  num -= den;
40  quot += qbit;
41  }
42  den >>= 1;
43  qbit >>= 1;
44  }
45 
46  return quot;
47 }
48 #endif
49