Report S2EVENT_CONNECT when a new SSID is selected.
[AROS.git] / arch / arm-all / arm-aeabi / uldiv.c
blob04e145bdea25277088c4864684a32eb6cffc4866
1 /*
2 * uldiv.c
4 * Created on: Aug 12, 2009
5 * Author: misc
6 */
8 #include <inttypes.h>
10 void __attribute__((noreturn)) __aeabi_ldiv0(uint64_t);
12 uint64_t __uldiv(uint64_t a, uint64_t b)
14 uint64_t ret = 0;
15 if (b == 0)
17 __aeabi_ldiv0(a);
19 else if (b > a)
21 return 0;
23 else
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);
38 if (a >= b)
40 ret |= mask;
41 a -= b;
44 mask >>=1;
45 b >>=1;
46 } while(mask);
48 return ret;
51 uint64_t __uldivmod_helper(uint64_t a, uint64_t b, uint64_t *remainder)
53 uint64_t quotient;
55 quotient = __uldiv(a, b);
57 *remainder = a - b * quotient;
59 return quotient;