18 #define COMPILER_RT_ABI
19 #define di_int int64_t
20 #define di_uint uint64_t
23 di_int __mulodi4(di_int a, di_int b,
int* overflow);
30 COMPILER_RT_ABI di_int
31 __mulodi4(di_int a, di_int b,
int* overflow)
33 const int N = (int)(
sizeof(di_int) * CHAR_BIT);
34 const di_int MIN = (di_int) ((di_uint)1 << (N-1));
35 const di_int
MAX = ~MIN;
37 di_int result = a * b;
50 di_int sa = a >> (N - 1);
51 di_int abs_a = (a ^ sa) - sa;
52 di_int sb = b >> (N - 1);
53 di_int abs_b = (b ^ sb) - sb;
54 if (abs_a < 2 || abs_b < 2)
58 if (abs_a >
MAX / abs_b)
63 if (abs_a > MIN / -abs_b)
Integer definitions used throughout Tor.