From 9c025abc671c2c9a197e6a53134300aebff8dd6f Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 22 Mar 2013 08:00:13 -0700 Subject: [PATCH] vm: use ctx->replace() with bignum and float operations. --- vm/math.cpp | 56 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/vm/math.cpp b/vm/math.cpp index e323e088cf..7cb4189beb 100755 --- a/vm/math.cpp +++ b/vm/math.cpp @@ -106,36 +106,36 @@ void factor_vm::primitive_float_to_bignum() #define POP_BIGNUMS(x,y) \ bignum * y = untag(ctx->pop()); \ - bignum * x = untag(ctx->pop()); + bignum * x = untag(ctx->peek()); void factor_vm::primitive_bignum_eq() { POP_BIGNUMS(x,y); - ctx->push(tag_boolean(bignum_equal_p(x,y))); + ctx->replace(tag_boolean(bignum_equal_p(x,y))); } void factor_vm::primitive_bignum_add() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_add(x,y))); + ctx->replace(tag(bignum_add(x,y))); } void factor_vm::primitive_bignum_subtract() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_subtract(x,y))); + ctx->replace(tag(bignum_subtract(x,y))); } void factor_vm::primitive_bignum_multiply() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_multiply(x,y))); + ctx->replace(tag(bignum_multiply(x,y))); } void factor_vm::primitive_bignum_divint() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_quotient(x,y))); + ctx->replace(tag(bignum_quotient(x,y))); } void factor_vm::primitive_bignum_divmod() @@ -143,69 +143,69 @@ void factor_vm::primitive_bignum_divmod() bignum *q, *r; POP_BIGNUMS(x,y); bignum_divide(x,y,&q,&r); - ctx->push(tag(q)); + ctx->replace(tag(q)); ctx->push(tag(r)); } void factor_vm::primitive_bignum_mod() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_remainder(x,y))); + ctx->replace(tag(bignum_remainder(x,y))); } void factor_vm::primitive_bignum_gcd() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_gcd(x,y))); + ctx->replace(tag(bignum_gcd(x,y))); } void factor_vm::primitive_bignum_and() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_bitwise_and(x,y))); + ctx->replace(tag(bignum_bitwise_and(x,y))); } void factor_vm::primitive_bignum_or() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_bitwise_ior(x,y))); + ctx->replace(tag(bignum_bitwise_ior(x,y))); } void factor_vm::primitive_bignum_xor() { POP_BIGNUMS(x,y); - ctx->push(tag(bignum_bitwise_xor(x,y))); + ctx->replace(tag(bignum_bitwise_xor(x,y))); } void factor_vm::primitive_bignum_shift() { fixnum y = untag_fixnum(ctx->pop()); - bignum* x = untag(ctx->pop()); - ctx->push(tag(bignum_arithmetic_shift(x,y))); + bignum* x = untag(ctx->peek()); + ctx->replace(tag(bignum_arithmetic_shift(x,y))); } void factor_vm::primitive_bignum_less() { POP_BIGNUMS(x,y); - ctx->push(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->push(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->push(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->push(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() @@ -262,60 +262,60 @@ void factor_vm::primitive_format_float() #define POP_FLOATS(x,y) \ double y = untag_float(ctx->pop()); \ - double x = untag_float(ctx->pop()); + double x = untag_float(ctx->peek()); void factor_vm::primitive_float_eq() { POP_FLOATS(x,y); - ctx->push(tag_boolean(x == y)); + ctx->replace(tag_boolean(x == y)); } void factor_vm::primitive_float_add() { POP_FLOATS(x,y); - ctx->push(allot_float(x + y)); + ctx->replace(allot_float(x + y)); } void factor_vm::primitive_float_subtract() { POP_FLOATS(x,y); - ctx->push(allot_float(x - y)); + ctx->replace(allot_float(x - y)); } void factor_vm::primitive_float_multiply() { POP_FLOATS(x,y); - ctx->push(allot_float(x * y)); + ctx->replace(allot_float(x * y)); } void factor_vm::primitive_float_divfloat() { POP_FLOATS(x,y); - ctx->push(allot_float(x / y)); + ctx->replace(allot_float(x / y)); } void factor_vm::primitive_float_less() { POP_FLOATS(x,y); - ctx->push(tag_boolean(x < y)); + ctx->replace(tag_boolean(x < y)); } void factor_vm::primitive_float_lesseq() { POP_FLOATS(x,y); - ctx->push(tag_boolean(x <= y)); + ctx->replace(tag_boolean(x <= y)); } void factor_vm::primitive_float_greater() { POP_FLOATS(x,y); - ctx->push(tag_boolean(x > y)); + ctx->replace(tag_boolean(x > y)); } void factor_vm::primitive_float_greatereq() { POP_FLOATS(x,y); - ctx->push(tag_boolean(x >= y)); + ctx->replace(tag_boolean(x >= y)); } /* Allocates memory */