/* Allocates memory */
void factor_vm::bignum_divide_unsigned_medium_denominator(
- bignum* numerator, bignum_digit_type denominator, bignum** quotient,
+ bignum* numerator_, bignum_digit_type denominator, bignum** quotient,
bignum** remainder, int q_negative_p, int r_negative_p) {
- GC_BIGNUM(numerator);
+
+ data_root<bignum> numerator(numerator_, this);
bignum_length_type length_n = (BIGNUM_LENGTH(numerator));
}
bignum_length_type length_q = (shift == 0) ? length_n : length_n + 1;
- bignum* q = (allot_bignum(length_q, q_negative_p));
- GC_BIGNUM(q);
+ data_root<bignum> q(allot_bignum(length_q, q_negative_p), this);
if (shift == 0) {
- bignum_destructive_copy(numerator, q);
+ bignum_destructive_copy(numerator.untagged(), q.untagged());
} else {
- bignum_destructive_normalization(numerator, q, shift);
+ bignum_destructive_normalization(numerator.untagged(), q.untagged(), shift);
}
{
bignum_digit_type r = 0;
(*scan) = qj;
}
- q = bignum_trim(q);
+ q = bignum_trim(q.untagged());
if (remainder != ((bignum**)0)) {
if (shift != 0)
}
if (quotient != ((bignum**)0))
- (*quotient) = q;
+ (*quotient) = q.untagged();
}
return;
}
/* Allocates memory */
void factor_vm::bignum_divide_unsigned_small_denominator(
- bignum* numerator, bignum_digit_type denominator, bignum** quotient,
+ bignum* numerator_, bignum_digit_type denominator, bignum** quotient,
bignum** remainder, int q_negative_p, int r_negative_p) {
- GC_BIGNUM(numerator);
+ data_root<bignum> numerator(numerator_, this);
- bignum* q = (bignum_new_sign(numerator, q_negative_p));
- GC_BIGNUM(q);
+ bignum* q_ = bignum_new_sign(numerator.untagged(), q_negative_p);
+ data_root<bignum> q(q_, this);
- bignum_digit_type r = (bignum_destructive_scale_down(q, denominator));
+ bignum_digit_type r = bignum_destructive_scale_down(q.untagged(), denominator);
- q = (bignum_trim(q));
+ q = bignum_trim(q.untagged());
if (remainder != ((bignum**)0))
- (*remainder) = (bignum_digit_to_bignum(r, r_negative_p));
+ (*remainder) = bignum_digit_to_bignum(r, r_negative_p);
- (*quotient) = q;
+ (*quotient) = q.untagged();
return;
}
}
/* Allocates memory */
-bignum* factor_vm::bignum_pospos_bitwise_op(int op, bignum* arg1,
- bignum* arg2) {
- GC_BIGNUM(arg1);
- GC_BIGNUM(arg2);
+bignum* factor_vm::bignum_pospos_bitwise_op(int op, bignum* arg1_,
+ bignum* arg2_) {
+ data_root<bignum> arg1(arg1_, this);
+ data_root<bignum> arg2(arg2_, this);
- bignum* result;
bignum_length_type max_length;
bignum_digit_type* scan1, *end1, digit1;
(BIGNUM_LENGTH(arg1) > BIGNUM_LENGTH(arg2)) ? BIGNUM_LENGTH(arg1)
: BIGNUM_LENGTH(arg2);
- result = allot_bignum(max_length, 0);
+ bignum* result = allot_bignum(max_length, 0);
scanr = BIGNUM_START_PTR(result);
scan1 = BIGNUM_START_PTR(arg1);
}
/* Allocates memory */
-bignum* factor_vm::bignum_posneg_bitwise_op(int op, bignum* arg1,
- bignum* arg2) {
- GC_BIGNUM(arg1);
- GC_BIGNUM(arg2);
+bignum* factor_vm::bignum_posneg_bitwise_op(int op, bignum* arg1_,
+ bignum* arg2_) {
+ data_root<bignum> arg1(arg1_, this);
+ data_root<bignum> arg2(arg2_, this);
- bignum* result;
bignum_length_type max_length;
bignum_digit_type* scan1, *end1, digit1;
(BIGNUM_LENGTH(arg1) > BIGNUM_LENGTH(arg2) + 1) ? BIGNUM_LENGTH(arg1)
: BIGNUM_LENGTH(arg2) + 1;
- result = allot_bignum(max_length, neg_p);
+ bignum* result = allot_bignum(max_length, neg_p);
scanr = BIGNUM_START_PTR(result);
scan1 = BIGNUM_START_PTR(arg1);
}
/* Allocates memory */
-bignum* factor_vm::bignum_negneg_bitwise_op(int op, bignum* arg1,
- bignum* arg2) {
- GC_BIGNUM(arg1);
- GC_BIGNUM(arg2);
+bignum* factor_vm::bignum_negneg_bitwise_op(int op, bignum* arg1_,
+ bignum* arg2_) {
+ data_root<bignum> arg1(arg1_, this);
+ data_root<bignum> arg2(arg2_, this);
- bignum* result;
bignum_length_type max_length;
bignum_digit_type* scan1, *end1, digit1, carry1;
(BIGNUM_LENGTH(arg1) > BIGNUM_LENGTH(arg2)) ? BIGNUM_LENGTH(arg1) + 1
: BIGNUM_LENGTH(arg2) + 1;
- result = allot_bignum(max_length, neg_p);
+ bignum* result = allot_bignum(max_length, neg_p);
scanr = BIGNUM_START_PTR(result);
scan1 = BIGNUM_START_PTR(arg1);
}
/* Allocates memory */
-bignum* factor_vm::bignum_integer_length(bignum* x) {
- GC_BIGNUM(x);
-
+bignum* factor_vm::bignum_integer_length(bignum* x_) {
+ data_root<bignum> x(x_, this);
bignum_length_type index = ((BIGNUM_LENGTH(x)) - 1);
bignum_digit_type digit = (BIGNUM_REF(x, index));
bignum_digit_type carry = 0;
bignum_digit_type guess,
bignum_digit_type* u_start);
void bignum_divide_unsigned_medium_denominator(
- bignum* numerator, bignum_digit_type denominator, bignum** quotient,
+ bignum* numerator_, bignum_digit_type denominator, bignum** quotient,
bignum** remainder, int q_negative_p, int r_negative_p);
void bignum_destructive_normalization(bignum* source, bignum* target,
int shift_left);
bignum_digit_type guess,
bignum_digit_type* u);
void bignum_divide_unsigned_small_denominator(
- bignum* numerator, bignum_digit_type denominator, bignum** quotient,
+ bignum* numerator_, bignum_digit_type denominator, bignum** quotient,
bignum** remainder, int q_negative_p, int r_negative_p);
bignum_digit_type bignum_destructive_scale_down(
bignum* bn, bignum_digit_type denominator);
bignum* bignum_bitwise_ior(bignum* arg1, bignum* arg2);
bignum* bignum_bitwise_xor(bignum* arg1, bignum* arg2);
bignum* bignum_magnitude_ash(bignum* arg1_, fixnum n);
- bignum* bignum_pospos_bitwise_op(int op, bignum* arg1, bignum* arg2);
- bignum* bignum_posneg_bitwise_op(int op, bignum* arg1, bignum* arg2);
- bignum* bignum_negneg_bitwise_op(int op, bignum* arg1, bignum* arg2);
+ bignum* bignum_pospos_bitwise_op(int op, bignum* arg1_, bignum* arg2_);
+ bignum* bignum_posneg_bitwise_op(int op, bignum* arg1_, bignum* arg2_);
+ bignum* bignum_negneg_bitwise_op(int op, bignum* arg1_, bignum* arg2_);
void bignum_negate_magnitude(bignum* arg);
- bignum* bignum_integer_length(bignum* x);
+ bignum* bignum_integer_length(bignum* x_);
int bignum_logbitp(int shift, bignum* arg);
int bignum_unsigned_logbitp(int shift, bignum* bn);
bignum* bignum_gcd(bignum* a, bignum* b);