}
enum bignum_comparison factor_vm::bignum_compare(bignum* x, bignum* y) {
- return ((BIGNUM_ZERO_P(x)) ? ((BIGNUM_ZERO_P(y)) ? bignum_comparison_equal
+ return ((BIGNUM_ZERO_P(x)) ? ((BIGNUM_ZERO_P(y)) ? BIGNUM_COMPARISON_EQUAL
: (BIGNUM_NEGATIVE_P(y))
- ? bignum_comparison_greater
- : bignum_comparison_less)
+ ? BIGNUM_COMPARISON_GREATER
+ : BIGNUM_COMPARISON_LESS)
: (BIGNUM_ZERO_P(y))
- ? ((BIGNUM_NEGATIVE_P(x)) ? bignum_comparison_less
- : bignum_comparison_greater)
+ ? ((BIGNUM_NEGATIVE_P(x)) ? BIGNUM_COMPARISON_LESS
+ : BIGNUM_COMPARISON_GREATER)
: (BIGNUM_NEGATIVE_P(x))
? ((BIGNUM_NEGATIVE_P(y)) ? (bignum_compare_unsigned(y, x))
- : (bignum_comparison_less))
- : ((BIGNUM_NEGATIVE_P(y)) ? (bignum_comparison_greater)
+ : (BIGNUM_COMPARISON_LESS))
+ : ((BIGNUM_NEGATIVE_P(y)) ? (BIGNUM_COMPARISON_GREATER)
: (bignum_compare_unsigned(x, y))));
}
int q_negative_p =
((BIGNUM_NEGATIVE_P(denominator)) ? (!r_negative_p) : r_negative_p);
switch (bignum_compare_unsigned(numerator, denominator)) {
- case bignum_comparison_equal: {
+ case BIGNUM_COMPARISON_EQUAL: {
(*quotient) = (BIGNUM_ONE(q_negative_p));
(*remainder) = (BIGNUM_ZERO());
break;
}
- case bignum_comparison_less: {
+ case BIGNUM_COMPARISON_LESS: {
(*quotient) = (BIGNUM_ZERO());
(*remainder) = numerator;
break;
}
- case bignum_comparison_greater: {
+ case BIGNUM_COMPARISON_GREATER: {
if ((BIGNUM_LENGTH(denominator)) == 1) {
bignum_digit_type digit = (BIGNUM_REF(denominator, 0));
if (digit == 1) {
((BIGNUM_NEGATIVE_P(denominator)) ? (!(BIGNUM_NEGATIVE_P(numerator)))
: (BIGNUM_NEGATIVE_P(numerator)));
switch (bignum_compare_unsigned(numerator, denominator)) {
- case bignum_comparison_equal:
+ case BIGNUM_COMPARISON_EQUAL:
return (BIGNUM_ONE(q_negative_p));
- case bignum_comparison_less:
+ case BIGNUM_COMPARISON_LESS:
return (BIGNUM_ZERO());
- case bignum_comparison_greater:
+ case BIGNUM_COMPARISON_GREATER:
default: // to appease gcc -Wall
{
bignum* quotient;
if (BIGNUM_ZERO_P(numerator))
return numerator;
switch (bignum_compare_unsigned(numerator, denominator)) {
- case bignum_comparison_equal:
+ case BIGNUM_COMPARISON_EQUAL:
return (BIGNUM_ZERO());
- case bignum_comparison_less:
+ case BIGNUM_COMPARISON_LESS:
return numerator;
- case bignum_comparison_greater:
+ case BIGNUM_COMPARISON_GREATER:
default: // to appease gcc -Wall
{
bignum* remainder;
bignum_length_type x_length = (BIGNUM_LENGTH(x));
bignum_length_type y_length = (BIGNUM_LENGTH(y));
if (x_length < y_length)
- return (bignum_comparison_less);
+ return BIGNUM_COMPARISON_LESS;
if (x_length > y_length)
- return (bignum_comparison_greater);
+ return BIGNUM_COMPARISON_GREATER;
{
bignum_digit_type* start_x = (BIGNUM_START_PTR(x));
bignum_digit_type* scan_x = (start_x + x_length);
bignum_digit_type digit_x = (*--scan_x);
bignum_digit_type digit_y = (*--scan_y);
if (digit_x < digit_y)
- return (bignum_comparison_less);
+ return BIGNUM_COMPARISON_LESS;
if (digit_x > digit_y)
- return (bignum_comparison_greater);
+ return BIGNUM_COMPARISON_GREATER;
}
}
- return (bignum_comparison_equal);
+ return BIGNUM_COMPARISON_EQUAL;
}
// Addition
int negative_p = 0;
switch (bignum_compare_unsigned(x.untagged(), y.untagged())) {
- case bignum_comparison_equal:
+ case BIGNUM_COMPARISON_EQUAL:
return (BIGNUM_ZERO());
- case bignum_comparison_less:
+ case BIGNUM_COMPARISON_LESS:
swap(x, y);
negative_p = 1;
break;
- case bignum_comparison_greater:
+ case BIGNUM_COMPARISON_GREATER:
negative_p = 0;
break;
}
b = d;
// Initial reduction: make sure that 0 <= b <= a.
- if (bignum_compare(a.untagged(), b.untagged()) == bignum_comparison_less) {
+ if (bignum_compare(a.untagged(), b.untagged()) == BIGNUM_COMPARISON_LESS) {
swap(a, b);
std::swap(size_a, size_b);
}
namespace factor {
enum generation {
- nursery_generation,
- aging_generation,
- tenured_generation
+ NURSERY_GENERATION,
+ AGING_GENERATION,
+ TENURED_GENERATION
};
inline generation generation_of(factor_vm* parent, object* obj) {
if (parent->data->nursery->contains_p(obj))
- return nursery_generation;
+ return NURSERY_GENERATION;
else if (parent->data->aging->contains_p(obj))
- return aging_generation;
+ return AGING_GENERATION;
else if (parent->data->tenured->contains_p(obj))
- return tenured_generation;
+ return TENURED_GENERATION;
else {
critical_error("Bad object", (cell)obj);
return (generation)-1;
return;
generation target = generation_of(parent, untag<object>(*slot_ptr));
- if (gen == aging_generation && target == nursery_generation) {
+ if (gen == AGING_GENERATION && target == NURSERY_GENERATION) {
check_write_barrier(slot_ptr, target, card_points_to_nursery);
- } else if (gen == tenured_generation) {
- if (target == nursery_generation) {
+ } else if (gen == TENURED_GENERATION) {
+ if (target == NURSERY_GENERATION) {
check_write_barrier(slot_ptr, target, card_points_to_nursery);
- } else if (target == aging_generation) {
+ } else if (target == AGING_GENERATION) {
check_write_barrier(slot_ptr, target, card_points_to_aging);
}
}
void factor_vm::primitive_bignum_less() {
POP_BIGNUMS(x, y);
- ctx->replace(tag_boolean(bignum_compare(x, y) == bignum_comparison_less));
+ ctx->replace(tag_boolean(bignum_compare(x, y) == BIGNUM_COMPARISON_LESS));
}
void factor_vm::primitive_bignum_lesseq() {
POP_BIGNUMS(x, y);
- ctx->replace(tag_boolean(bignum_compare(x, y) != bignum_comparison_greater));
+ ctx->replace(tag_boolean(bignum_compare(x, y) != BIGNUM_COMPARISON_GREATER));
}
void factor_vm::primitive_bignum_greater() {
POP_BIGNUMS(x, y);
- ctx->replace(tag_boolean(bignum_compare(x, y) == bignum_comparison_greater));
+ ctx->replace(tag_boolean(bignum_compare(x, y) == BIGNUM_COMPARISON_GREATER));
}
void factor_vm::primitive_bignum_greatereq() {
POP_BIGNUMS(x, y);
- ctx->replace(tag_boolean(bignum_compare(x, y) != bignum_comparison_less));
+ ctx->replace(tag_boolean(bignum_compare(x, y) != BIGNUM_COMPARISON_LESS));
}
void factor_vm::primitive_bignum_not() {