[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 05/06: Avoid bignum clone in scm_integer_sub_zz
From: |
Andy Wingo |
Subject: |
[Guile-commits] 05/06: Avoid bignum clone in scm_integer_sub_zz |
Date: |
Sun, 9 Jan 2022 16:44:49 -0500 (EST) |
wingo pushed a commit to branch wip-inline-digits
in repository guile.
commit 0ba64e1ed1622d79e44e36086765ec03e570f8d2
Author: Andy Wingo <wingo@pobox.com>
AuthorDate: Sun Jan 9 21:12:42 2022 +0100
Avoid bignum clone in scm_integer_sub_zz
* libguile/integers.c (scm_integer_abs_z): Just call
scm_integer_negate_z if negation is needed.
(scm_integer_sub_zz): Use mpz_sub instead of cloning bignum.
---
libguile/integers.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/libguile/integers.c b/libguile/integers.c
index 64fed6362..62b108cd7 100644
--- a/libguile/integers.c
+++ b/libguile/integers.c
@@ -518,7 +518,7 @@ scm_integer_abs_z (struct scm_bignum *z)
if (!bignum_is_negative (z))
return scm_from_bignum (z);
- return scm_from_bignum (negate_bignum (clone_bignum (z)));
+ return scm_integer_negate_z (z);
}
SCM
@@ -2908,7 +2908,15 @@ scm_integer_sub_zi (struct scm_bignum *x, scm_t_inum y)
SCM
scm_integer_sub_zz (struct scm_bignum *x, struct scm_bignum *y)
{
- return scm_integer_add_zz (x, negate_bignum (clone_bignum (y)));
+ mpz_t result, zx, zy;
+ mpz_init (result);
+ alias_bignum_to_mpz (x, zx);
+ alias_bignum_to_mpz (y, zy);
+ mpz_sub (result, zx, zy);
+ scm_remember_upto_here_2 (x, y);
+ // FIXME: We know that if X and Y have opposite signs, no need to
+ // check if result is fixable.
+ return take_mpz (result);
}
SCM
- [Guile-commits] branch wip-inline-digits updated (6c13cd098 -> 4cc1f01ff), Andy Wingo, 2022/01/09
- [Guile-commits] 01/06: Optimize scm_integer_mul_zi, Andy Wingo, 2022/01/09
- [Guile-commits] 02/06: Optimize scm_integer_mul_zz., Andy Wingo, 2022/01/09
- [Guile-commits] 04/06: Start to optimize scm_integer_sub_iz, Andy Wingo, 2022/01/09
- [Guile-commits] 03/06: Less pessimal scm_integer_sub_zi, Andy Wingo, 2022/01/09
- [Guile-commits] 05/06: Avoid bignum clone in scm_integer_sub_zz,
Andy Wingo <=
- [Guile-commits] 06/06: Optimize bignum add to avoid temporary allocations, Andy Wingo, 2022/01/09