35typedef SSIZE_T ssize_t;
41#define CHECK(res) (res)
43#define CHECK(res) assert(((res) == MP_OK) && "expected MP_OK")
50#define HOST_ENDIAN (*(signed char *)&endian_test)
182 if (d_is_zero)
return n_is_zero;
280 if (op1_is_zero && op2_is_zero) {
306 for (i = 0; i < len - 1; i++) {
338 for (i = 0; i < len; i++) {
364 str = malloc(strlen(s) + 1);
368 slash = strchr(
str,
'/');
369 if (slash) *slash =
'\0';
407 unsigned long out = 0;
409 for (
int i = digits_to_copy - 1; i >= 0; i--) {
453 long_msb = (
sizeof(
unsigned long) * 8) - 1;
454 uout &= (~(1UL << long_msb));
470 if (op1_is_zero || op2_is_zero) {
534 int qsign, rsign, nsign, dsign;
551 }
else if (qsign == 0) {
553 if ((nsign > 0 && dsign > 0) || (nsign < 0 && dsign < 0)) {
565 int qsign, rsign, nsign, dsign;
582 }
else if (qsign == 0) {
584 if ((nsign < 0 && dsign > 0) || (nsign > 0 && dsign < 0)) {
656 int endian,
size_t nails,
mp_int op) {
658 size_t num_used_bytes;
659 size_t num_words, num_missing_bytes;
668 assert(nails == 0 &&
"Do not support non-full words");
669 assert(endian == 1 || endian == 0 || endian == -1);
670 assert(order == 1 || order == -1);
674 if (countp) *countp = 0;
680 num_words = (num_used_bytes + (
size - 1)) /
size;
681 assert(num_used_bytes > 0);
692 num_missing_bytes = (
size * num_words) - num_used_bytes;
697 rop = malloc(num_words *
size);
705 dst = (
unsigned char *)rop + (order >= 0 ? (num_words - 1) *
size : 0) +
706 (endian >= 0 ?
size - 1 : 0);
712 for (i = 0; i < num_words; i++) {
713 for (j = 0; j <
size && i *
size + j < num_used_bytes; j++) {
722 for (; j <
size; j++) {
729 if (countp) *countp = num_words;
735 int endian,
size_t nails,
const void *
op) {
741 const unsigned char *src;
745 if (
count == 0 ||
op == NULL)
return;
749 assert(nails == 0 &&
"Do not support non-full words");
750 assert(endian == 1 || endian == 0 || endian == -1);
751 assert(order == 1 || order == -1);
763 for (i = 0; i < num_digits; i++) tmp->
digits[i] = 0;
766 src = (
const unsigned char *)
op + (order >= 0 ? (
count - 1) *
size : 0) +
767 (endian >= 0 ?
size - 1 : 0);
773 for (i = 0; i <
count; i++) {
774 for (j = 0; j <
size; j++) {
779 *dst |= ((
mp_digit)*src) << dst_bits;
786 tmp->
used = num_digits;
792 while (uz_ > 1 && (*dz_-- == 0)) --uz_;
void GMPZAPI() fdiv_q(mp_int q, mp_int n, mp_int d)
void GMPZAPI() addmul(mp_int rop, mp_int op1, mp_int op2)
void GMPQAPI() clear(mp_rat x)
int GMPZAPI() cmp_si(mp_int op1, long op2)
int GMPZAPI() cmpabs(mp_int op1, mp_int op2)
void *GMPZAPI() export(void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, mp_int op)
void GMPZAPI() neg(mp_int rop, mp_int op)
void GMPQAPI() mul(mp_rat product, mp_rat multiplier, mp_rat multiplicand)
void GMPZAPI() gcd(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI() sub(mp_int rop, mp_int op1, mp_int op2)
static const uint16_t endian_test
unsigned long GMPZAPI() fdiv_q_ui(mp_int q, mp_int n, unsigned long d)
char *GMPZAPI() get_str(char *str, int radix, mp_int op)
void GMPZAPI() mul_ui(mp_int rop, mp_int op1, unsigned long op2)
int GMPQAPI() cmp(mp_rat op1, mp_rat op2)
mp_int GMPQAPI() denref(mp_rat op)
int GMPQAPI() sgn(mp_rat op)
size_t GMPZAPI() sizeinbase(mp_int op, int base)
int GMPZAPI() set_str(mp_int rop, char *str, int base)
void GMPZAPI() divexact_ui(mp_int q, mp_int n, unsigned long d)
void GMPZAPI() lcm(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI() tdiv_q(mp_int q, mp_int n, mp_int d)
void GMPZAPI() fdiv_r(mp_int r, mp_int n, mp_int d)
long GMPZAPI() get_si(mp_int op)
void GMPZAPI() sub_ui(mp_int rop, mp_int op1, unsigned long op2)
void GMPQAPI() init(mp_rat x)
mp_int GMPQAPI() numref(mp_rat op)
void GMPZAPI() add_ui(mp_int rop, mp_int op1, unsigned long op2)
void GMPZAPI() abs(mp_int rop, mp_int op)
static unsigned long get_long_bits(mp_int op)
void GMPZAPI() set_si(mp_int rop, long op)
void GMPZAPI() submul(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI() mul_2exp(mp_int rop, mp_int op1, unsigned long op2)
void GMPZAPI() cdiv_q(mp_int q, mp_int n, mp_int d)
unsigned long GMPZAPI() get_ui(mp_int op)
void GMPZAPI() swap(mp_int rop1, mp_int rop2)
void GMPZAPI() pow_ui(mp_int rop, mp_int base, unsigned long exp)
int GMPZAPI() divisible_p(mp_int n, mp_int d)
void GMPZAPI() add(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI() divexact(mp_int q, mp_int n, mp_int d)
void GMPQAPI() set_ui(mp_rat rop, unsigned long op1, unsigned long op2)
static mp_digit * MP_DIGITS(mp_int Z)
static mp_size MP_USED(mp_int Z)
static mp_sign MP_SIGN(mp_int Z)
static int count(int *con, unsigned len, int status)
__isl_give isl_val *(* op)(__isl_take isl_val *v)
#define mp_rat_string_len
#define mp_rat_compare_zero
#define mp_int_compare_zero
#define mp_rat_set_uvalue
#define mp_int_string_len
#define mp_int_compare_unsigned
#define mp_int_unsigned_len
#define mp_int_read_string
#define mp_int_set_uvalue
#define mp_int_compare_value
#define mp_int_init_uvalue