[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] branch main updated: Slight bignum-fixnum multiplication
From: |
Andy Wingo |
Subject: |
[Guile-commits] branch main updated: Slight bignum-fixnum multiplication optimization |
Date: |
Tue, 01 Feb 2022 14:02:01 -0500 |
This is an automated email from the git hooks/post-receive script.
wingo pushed a commit to branch main
in repository guile.
The following commit(s) were added to refs/heads/main by this push:
new 62fc44e6e Slight bignum-fixnum multiplication optimization
62fc44e6e is described below
commit 62fc44e6ee6165253fa33dc6f8897c7bde620a05
Author: Andy Wingo <wingo@pobox.com>
AuthorDate: Sun Jan 30 21:15:58 2022 +0100
Slight bignum-fixnum multiplication optimization
* libguile/integers.c (scm_integer_mul_zi): Use mpn_mul_1.
---
libguile/integers.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/libguile/integers.c b/libguile/integers.c
index adf1c401e..168593da5 100644
--- a/libguile/integers.c
+++ b/libguile/integers.c
@@ -3094,13 +3094,17 @@ scm_integer_mul_zi (struct scm_bignum *x, scm_t_inum y)
return SCM_INUM0;
struct scm_bignum *result = allocate_bignum (xn + 1);
+ mp_limb_t *rd = bignum_limbs (result);
const mp_limb_t *xd = bignum_limbs (x);
- mp_limb_t yd[1] = { long_magnitude (y) };
+ mp_limb_t yd = long_magnitude (y);
int negate = bignum_is_negative (x) != (y < 0);
- mpn_mul (bignum_limbs (result), xd, xn, yd, 1);
+ mp_limb_t hi = mpn_mul_1 (rd, xd, xn, yd);
+ if (hi)
+ rd[xn] = hi;
+ else
+ result->u.z.size--;
scm_remember_upto_here_1 (x);
- return normalize_bignum
- (bignum_negate_if (negate, (bignum_trim1 (result))));
+ return normalize_bignum (bignum_negate_if (negate, (result)));
}
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Guile-commits] branch main updated: Slight bignum-fixnum multiplication optimization,
Andy Wingo <=