__udivmoddi4.c
Go to the documentation of this file.00001 #include "libgcc.h"
00002
00003 __libgcc uint64_t __udivmoddi4(uint64_t num, uint64_t den, uint64_t *rem_p)
00004 {
00005 uint64_t quot = 0, qbit = 1;
00006
00007 if ( den == 0 ) {
00008 return 1/((unsigned)den);
00009
00010
00011 }
00012
00013
00014 while ( (int64_t)den >= 0 ) {
00015 den <<= 1;
00016 qbit <<= 1;
00017 }
00018
00019 while ( qbit ) {
00020 if ( den <= num ) {
00021 num -= den;
00022 quot += qbit;
00023 }
00024 den >>= 1;
00025 qbit >>= 1;
00026 }
00027
00028 if ( rem_p )
00029 *rem_p = num;
00030
00031 return quot;
00032 }