py: Fix mpn_sub, was increasing wrong source pointer.

Also change int -> machine_int_t where appropriate.
This commit is contained in:
Damien George 2014-02-24 21:32:52 +00:00
parent 2ee55c312d
commit aca141269e
2 changed files with 10 additions and 10 deletions

View File

@ -113,7 +113,7 @@ uint mpn_sub(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t
borrow >>= DIG_SIZE; borrow >>= DIG_SIZE;
} }
for (; jlen > 0; --jlen, ++idig, ++kdig) { for (; jlen > 0; --jlen, ++idig, ++jdig) {
borrow += *jdig; borrow += *jdig;
*idig = borrow & DIG_MASK; *idig = borrow & DIG_MASK;
borrow >>= DIG_SIZE; borrow >>= DIG_SIZE;
@ -315,7 +315,7 @@ void mpn_div(mpz_dig_t *num_dig, machine_uint_t *num_len, mpz_dig_t *den_dig, ma
#define MIN_ALLOC (4) #define MIN_ALLOC (4)
#define ALIGN_ALLOC (2) #define ALIGN_ALLOC (2)
#define NUM_DIG_FOR_INT (sizeof(int) * 8 / DIG_SIZE + 1) #define NUM_DIG_FOR_INT (sizeof(machine_int_t) * 8 / DIG_SIZE + 1)
static const uint log_base2_floor[] = { static const uint log_base2_floor[] = {
0, 0,
@ -329,7 +329,7 @@ static const uint log_base2_floor[] = {
4, 4, 4, 5 4, 4, 4, 5
}; };
bool mpz_int_is_sml_int(int i) { bool mpz_int_is_sml_int(machine_int_t i) {
return -(1 << DIG_SIZE) < i && i < (1 << DIG_SIZE); return -(1 << DIG_SIZE) < i && i < (1 << DIG_SIZE);
} }
@ -497,7 +497,7 @@ int mpz_cmp(const mpz_t *z1, const mpz_t *z2) {
return cmp; return cmp;
} }
int mpz_cmp_sml_int(const mpz_t *z, int sml_int) { int mpz_cmp_sml_int(const mpz_t *z, machine_int_t sml_int) {
int cmp; int cmp;
if (z->neg == 0) { if (z->neg == 0) {
if (sml_int < 0) return 1; if (sml_int < 0) return 1;
@ -885,13 +885,13 @@ mpz_t *mpz_mod(const mpz_t *lhs, const mpz_t *rhs) {
} }
#endif #endif
int mpz_as_int(const mpz_t *i) { machine_int_t mpz_as_int(const mpz_t *i) {
int val = 0; machine_int_t val = 0;
mpz_dig_t *d = i->dig + i->len; mpz_dig_t *d = i->dig + i->len;
while (--d >= i->dig) while (--d >= i->dig)
{ {
int oldval = val; machine_int_t oldval = val;
val = (val << DIG_SIZE) | *d; val = (val << DIG_SIZE) | *d;
if (val < oldval) if (val < oldval)
{ {

View File

@ -11,7 +11,7 @@ typedef struct _mpz_t {
mpz_dig_t *dig; mpz_dig_t *dig;
} mpz_t; } mpz_t;
bool mpz_int_is_sml_int(int i); bool mpz_int_is_sml_int(machine_int_t i);
void mpz_init_zero(mpz_t *z); void mpz_init_zero(mpz_t *z);
void mpz_init_from_int(mpz_t *z, machine_int_t val); void mpz_init_from_int(mpz_t *z, machine_int_t val);
@ -35,7 +35,7 @@ bool mpz_is_odd(const mpz_t *z);
bool mpz_is_even(const mpz_t *z); bool mpz_is_even(const mpz_t *z);
int mpz_cmp(const mpz_t *lhs, const mpz_t *rhs); int mpz_cmp(const mpz_t *lhs, const mpz_t *rhs);
int mpz_cmp_sml_int(const mpz_t *lhs, int sml_int); int mpz_cmp_sml_int(const mpz_t *lhs, machine_int_t sml_int);
mpz_t *mpz_abs(const mpz_t *z); mpz_t *mpz_abs(const mpz_t *z);
mpz_t *mpz_neg(const mpz_t *z); mpz_t *mpz_neg(const mpz_t *z);
@ -58,7 +58,7 @@ void mpz_divmod_inpl(mpz_t *dest_quo, mpz_t *dest_rem, const mpz_t *lhs, const m
mpz_t *mpz_div(const mpz_t *lhs, const mpz_t *rhs); mpz_t *mpz_div(const mpz_t *lhs, const mpz_t *rhs);
mpz_t *mpz_mod(const mpz_t *lhs, const mpz_t *rhs); mpz_t *mpz_mod(const mpz_t *lhs, const mpz_t *rhs);
int mpz_as_int(const mpz_t *z); machine_int_t mpz_as_int(const mpz_t *z);
machine_float_t mpz_as_float(const mpz_t *z); machine_float_t mpz_as_float(const mpz_t *z);
uint mpz_as_str_size(const mpz_t *z, uint base); uint mpz_as_str_size(const mpz_t *z, uint base);
char *mpz_as_str(const mpz_t *z, uint base); char *mpz_as_str(const mpz_t *z, uint base);