summaryrefslogtreecommitdiff
path: root/libguile/integers.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2022-01-07 22:15:55 +0100
committerAndy Wingo <wingo@pobox.com>2022-01-13 09:37:17 +0100
commit548122267075817bcd894ac5e88b1fded30d58f3 (patch)
treefb3acbc56039ccc52dbfaf973d9f3a895a338407 /libguile/integers.h
parenteac47c3e459ef4441097acf341b72a6fc0ecf172 (diff)
downloadguile-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.h3
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);