#include "libgcc.h" | |
__uint128_t __udivmodti4(__uint128_t num, __uint128_t den, __uint128_t *rem_p) | |
{ | |
__uint128_t quot = 0, qbit = 1; | |
if ( den == 0 ) { | |
__divide_error(); | |
return 0; /* If trap returns... */ | |
} | |
/* Left-justify denominator and count shift */ | |
while ( (__int128_t)den >= 0 ) { | |
den <<= 1; | |
qbit <<= 1; | |
} | |
while ( qbit ) { | |
if ( den <= num ) { | |
num -= den; | |
quot += qbit; | |
} | |
den >>= 1; | |
qbit >>= 1; | |
} | |
if ( rem_p ) | |
*rem_p = num; | |
return quot; | |
} |