Report S2EVENT_CONNECT when a new SSID is selected.
[AROS.git] / arch / arm-all / arm-aeabi / ldiv.c
blobc3acf682a8ed15f56501c4ed0381b594c142e4c4
1 /*
2 * ldiv.c
4 * Created on: Aug 12, 2009
5 * Author: misc
6 */
9 #include <inttypes.h>
11 void __attribute__((noreturn)) __aeabi_ldiv0(uint64_t);
13 int64_t __ldiv(int64_t a, int64_t b)
15 int32_t sign = ((int32_t)(a >> 32))^((int32_t)(b >> 32));
16 int64_t ret = 0;
18 if (a < 0)
19 a = -a;
20 if (b < 0)
21 b = -b;
23 if (b == 0)
25 __aeabi_ldiv0(a);
27 else if (b > a)
29 return 0;
31 else
33 int first_bit_a = __builtin_clz(a >> 32);
34 int first_bit_b = __builtin_clz(b >> 32);
36 if (first_bit_a == 32)
37 first_bit_a += __builtin_clz(a & 0xffffffff);
38 if (first_bit_b == 32)
39 first_bit_b += __builtin_clz(b & 0xffffffff);
41 uint64_t mask = 0x00000001ULL << (first_bit_b-first_bit_a);
42 b <<= (first_bit_b - first_bit_a);
46 if (a >= b)
48 ret |= mask;
49 a -= b;
52 mask >>=1;
53 b >>=1;
54 } while(mask);
57 if (sign < 0)
58 ret = -ret;
60 return ret;
63 int64_t __ldivmod_helper(int64_t a, int64_t b, int64_t *remainder)
65 int64_t quotient;
67 quotient = __ldiv(a, b);
69 *remainder = a - b * quotient;
71 return quotient;