Home | History | Annotate | Download | only in dos
      1 #include <stdint.h>
      2 
      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