• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <stdint.h>
2 
__udivmoddi4(uint64_t num,uint64_t den,uint64_t * rem_p)3 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 	asm volatile ("int $0");
9 	return 0;		/* If trap returns... */
10     }
11 
12     /* Left-justify denominator and count shift */
13     while ((int64_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 }
32