aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2018-08-16 19:53:21 -0700
committerPaul Eggert2018-08-16 19:54:30 -0700
commitbb7e0338919d1c7068a64b3855e50fac345e4e05 (patch)
treec1ba8715847d5178de7fd07edde184cc0a2051a0 /src
parent44ad4a15a0099285a16018ad790419cb60df5815 (diff)
downloademacs-bb7e0338919d1c7068a64b3855e50fac345e4e05.tar.gz
emacs-bb7e0338919d1c7068a64b3855e50fac345e4e05.zip
Speed up logcount on bignums
* src/data.c (Flogcount): Speed up by using the mpz equivalent of ~X instead of -X-1.
Diffstat (limited to 'src')
-rw-r--r--src/data.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/data.c b/src/data.c
index a1215b9d6bf..66f508c8f43 100644
--- a/src/data.c
+++ b/src/data.c
@@ -3350,8 +3350,7 @@ representation. */)
3350 return make_fixnum (mpz_popcount (XBIGNUM (value)->value)); 3350 return make_fixnum (mpz_popcount (XBIGNUM (value)->value));
3351 mpz_t tem; 3351 mpz_t tem;
3352 mpz_init (tem); 3352 mpz_init (tem);
3353 mpz_neg (tem, XBIGNUM (value)->value); 3353 mpz_com (tem, XBIGNUM (value)->value);
3354 mpz_sub_ui (tem, tem, 1);
3355 Lisp_Object result = make_fixnum (mpz_popcount (tem)); 3354 Lisp_Object result = make_fixnum (mpz_popcount (tem));
3356 mpz_clear (tem); 3355 mpz_clear (tem);
3357 return result; 3356 return result;