1#include <isl_int.h>
2
3uint32_t isl_imath_hash(mp_int v, uint32_t hash)
4{
5 unsigned const char *data = (unsigned char *)v->digits;
6 unsigned const char *end = data + v->used * sizeof(v->digits[0]);
7
8 if (v->sign == 1)
9 isl_hash_byte(hash, 0xFF);
10 for (; data < end; ++data)
11 isl_hash_byte(hash, *data);
12 return hash;
13}
14
15/* Try a standard conversion that fits into a long.
16 */
17int isl_imath_fits_slong_p(mp_int op)
18{
19 long out;
20 mp_result res = mp_int_to_int(z: op, out: &out);
21 return res == MP_OK;
22}
23
24/* Try a standard conversion that fits into an unsigned long.
25 */
26int isl_imath_fits_ulong_p(mp_int op)
27{
28 unsigned long out;
29 mp_result res = mp_int_to_uint(z: op, out: &out);
30 return res == MP_OK;
31}
32
33void isl_imath_addmul_ui(mp_int rop, mp_int op1, unsigned long op2)
34{
35 mpz_t temp;
36 mp_int_init(z: &temp);
37
38 mp_int_set_uvalue(z: &temp, uvalue: op2);
39 mp_int_mul(a: op1, b: &temp, c: &temp);
40 mp_int_add(a: rop, b: &temp, c: rop);
41
42 mp_int_clear(z: &temp);
43}
44
45void isl_imath_submul_ui(mp_int rop, mp_int op1, unsigned long op2)
46{
47 mpz_t temp;
48 mp_int_init(z: &temp);
49
50 mp_int_set_uvalue(z: &temp, uvalue: op2);
51 mp_int_mul(a: op1, b: &temp, c: &temp);
52 mp_int_sub(a: rop, b: &temp, c: rop);
53
54 mp_int_clear(z: &temp);
55}
56
57/* Compute the division of lhs by a rhs of type unsigned long, rounding towards
58 * positive infinity (Ceil).
59 */
60void isl_imath_cdiv_q_ui(mp_int rop, mp_int lhs, unsigned long rhs)
61{
62 mpz_t temp;
63 mp_int_init(z: &temp);
64
65 mp_int_set_uvalue(z: &temp, uvalue: rhs);
66 impz_cdiv_q(q: rop, n: lhs, d: &temp);
67
68 mp_int_clear(z: &temp);
69}
70
71/* Compute the division of lhs by a rhs of type unsigned long, rounding towards
72 * negative infinity (Floor).
73 */
74void isl_imath_fdiv_q_ui(mp_int rop, mp_int lhs, unsigned long rhs)
75{
76 mpz_t temp;
77 mp_int_init(z: &temp);
78
79 mp_int_set_uvalue(z: &temp, uvalue: rhs);
80 impz_fdiv_q(q: rop, n: lhs, d: &temp);
81
82 mp_int_clear(z: &temp);
83}
84

source code of polly/lib/External/isl/isl_imath.c