4 * Created on: Aug 12, 2009
10 void __attribute__((noreturn
)) __aeabi_ldiv0(uint64_t);
12 uint64_t __uldiv(uint64_t a
, uint64_t b
)
25 int first_bit_a
= __builtin_clz(a
>> 32);
26 int first_bit_b
= __builtin_clz(b
>> 32);
28 if (first_bit_a
== 32)
29 first_bit_a
+= __builtin_clz(a
& 0xffffffff);
30 if (first_bit_b
== 32)
31 first_bit_b
+= __builtin_clz(b
& 0xffffffff);
33 uint64_t mask
= 0x00000001ULL
<< (first_bit_b
-first_bit_a
);
34 b
<<= (first_bit_b
- first_bit_a
);
51 uint64_t __uldivmod_helper(uint64_t a
, uint64_t b
, uint64_t *remainder
)
55 quotient
= __uldiv(a
, b
);
57 *remainder
= a
- b
* quotient
;