diff options
author | Lukas Larsson <[email protected]> | 2011-07-27 16:41:13 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2011-10-11 17:11:16 +0200 |
commit | b47a8245774ee1d57872d99015081e6307e037f1 (patch) | |
tree | 1eb6e28a8746a25dcc40f0baeea4dfb84dd07744 /erts/emulator/beam | |
parent | 5d4e1831fafb5c2cb119d4b2cc5a704f3b9c1c55 (diff) | |
download | otp-b47a8245774ee1d57872d99015081e6307e037f1.tar.gz otp-b47a8245774ee1d57872d99015081e6307e037f1.tar.bz2 otp-b47a8245774ee1d57872d99015081e6307e037f1.zip |
Optimise bugnum and small comparison
As it is possible to assume that bignums are bigger than smalls,
we can just check the sign of the bignum.
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/utils.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c index e67a793b9a..5e22aa42c8 100644 --- a/erts/emulator/beam/utils.c +++ b/erts/emulator/beam/utils.c @@ -2657,8 +2657,10 @@ tailrecur_ne: switch(_NUMBER_CODE(a_tag, b_tag)) { case SMALL_BIG: - big = small_to_big(signed_val(a), big_buf); - j = big_comp(big, bw); + j = big_sign(bw) ? 1 : -1; + break; + case BIG_SMALL: + j = big_sign(aw) ? -1 : 1; break; case SMALL_FLOAT: GET_DOUBLE(bw, f2); @@ -2674,10 +2676,6 @@ tailrecur_ne: j = signed_val(a) - (Sint) f2.fd; } break; - case BIG_SMALL: - big = small_to_big(signed_val(b), big_buf); - j = big_comp(aw, big); - break; case BIG_FLOAT: GET_DOUBLE(bw, f2); if ((f2.fd < 9007199254740990.0 && f2.fd > -9007199254740990.0)) { |