diff options
author | Andy Wingo <wingo@pobox.com> | 2022-01-07 22:15:55 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2022-01-13 09:37:17 +0100 |
commit | 548122267075817bcd894ac5e88b1fded30d58f3 (patch) | |
tree | fb3acbc56039ccc52dbfaf973d9f3a895a338407 /libguile/integers.h | |
parent | eac47c3e459ef4441097acf341b72a6fc0ecf172 (diff) | |
download | guile-548122267075817bcd894ac5e88b1fded30d58f3.tar.gz |
Re-rewrite integer-expt in C
Calling out to Scheme was a performance regression.
* libguile/integers.h:
* libguile/integers.c (scm_integer_expt_ii, scm_integer_expt_zi): New
internal functions.
* libguile/numbers.c (scm_integer_expt): Go back to C. But, include
fast cases for inums and doubles.
* module/ice-9/boot-9.scm: Revert addition of integer-expt.
Diffstat (limited to 'libguile/integers.h')
-rw-r--r-- | libguile/integers.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libguile/integers.h b/libguile/integers.h index a232eb8cc..3fc53f019 100644 --- a/libguile/integers.h +++ b/libguile/integers.h @@ -124,6 +124,9 @@ SCM_INTERNAL int scm_integer_logbit_uz (unsigned long bit, SCM_INTERNAL SCM scm_integer_lognot_i (scm_t_inum n); SCM_INTERNAL SCM scm_integer_lognot_z (struct scm_bignum *n); +SCM_INTERNAL SCM scm_integer_expt_ii (scm_t_inum n, scm_t_inum k); +SCM_INTERNAL SCM scm_integer_expt_zi (struct scm_bignum *n, scm_t_inum k); + SCM_INTERNAL SCM scm_integer_modulo_expt_nnn (SCM n, SCM k, SCM m); SCM_INTERNAL SCM scm_integer_lsh_iu (scm_t_inum n, unsigned long count); |