From 49079911ba45098a7d3f910bb4bf0e0bcc9dad49 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 15 Feb 2016 05:15:33 +0000 Subject: [PATCH] bignum.c: micro optimization * bignum.c (rb_big_uminus, bigsub_int): use BIGNUM_NEGATE. * internal.h (BIGNUM_NEGATE): simplify negation. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- bignum.c | 6 +++--- internal.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bignum.c b/bignum.c index 8f79713682..1f9dfb56aa 100644 --- a/bignum.c +++ b/bignum.c @@ -5526,7 +5526,7 @@ rb_big_uminus(VALUE x) { VALUE z = rb_big_clone(x); - BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x)); + BIGNUM_NEGATE(z); return bignorm(z); } @@ -5624,7 +5624,7 @@ bigsub_int(VALUE x, long y0) assert(xn == zn); num = (BDIGIT_DBL_SIGNED)xds[0] - y; if (xn == 1 && num < 0) { - BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x)); + BIGNUM_NEGATE(z); zds[0] = (BDIGIT)-num; RB_GC_GUARD(x); return bignorm(z); @@ -5687,7 +5687,7 @@ bigsub_int(VALUE x, long y0) assert(num == 0 || num == -1); if (num < 0) { get2comp(z); - BIGNUM_SET_SIGN(z, !BIGNUM_SIGN(x)); + BIGNUM_NEGATE(z); } RB_GC_GUARD(x); return bignorm(z); diff --git a/internal.h b/internal.h index 637ef1619b..949c6f8a42 100644 --- a/internal.h +++ b/internal.h @@ -364,6 +364,7 @@ struct RBignum { : (RBASIC(b)->flags &= ~BIGNUM_SIGN_BIT)) #define BIGNUM_POSITIVE_P(b) BIGNUM_SIGN(b) #define BIGNUM_NEGATIVE_P(b) (!BIGNUM_SIGN(b)) +#define BIGNUM_NEGATE(b) (RBASIC(b)->flags ^= BIGNUM_SIGN_BIT) #define BIGNUM_EMBED_FLAG FL_USER2 #define BIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)