diff options
| author | Paul Eggert | 2018-08-16 19:53:21 -0700 |
|---|---|---|
| committer | Paul Eggert | 2018-08-16 19:54:30 -0700 |
| commit | bb7e0338919d1c7068a64b3855e50fac345e4e05 (patch) | |
| tree | c1ba8715847d5178de7fd07edde184cc0a2051a0 /src/data.c | |
| parent | 44ad4a15a0099285a16018ad790419cb60df5815 (diff) | |
| download | emacs-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/data.c')
| -rw-r--r-- | src/data.c | 3 |
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; |