[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 81/85: Optimize logand against a positive inum
From: |
Andy Wingo |
Subject: |
[Guile-commits] 81/85: Optimize logand against a positive inum |
Date: |
Thu, 13 Jan 2022 03:40:26 -0500 (EST) |
wingo pushed a commit to branch main
in repository guile.
commit 9e5aa173c79b2f14c8a1ffe758a91a63f52cc3b7
Author: Andy Wingo <wingo@pobox.com>
AuthorDate: Mon Jan 10 11:56:13 2022 +0100
Optimize logand against a positive inum
* libguile/integers.c (scm_integer_logand_zi): Optimize.
---
libguile/integers.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libguile/integers.c b/libguile/integers.c
index a173d01f2..a1231a10d 100644
--- a/libguile/integers.c
+++ b/libguile/integers.c
@@ -2119,6 +2119,18 @@ scm_integer_logand_zi (struct scm_bignum *x, scm_t_inum
y)
if (y == 0)
return SCM_INUM0;
+ if (y > 0)
+ {
+ mp_limb_t rd = bignum_limbs (x)[0];
+ mp_limb_t yd = y;
+ if (bignum_is_negative (x))
+ rd = ~rd + 1;
+ scm_remember_upto_here_1 (x);
+ rd &= yd;
+ // Result must be a positive inum.
+ return SCM_I_MAKINUM (rd);
+ }
+
mpz_t result, zx, zy;
mpz_init (result);
alias_bignum_to_mpz (x, zx);
- [Guile-commits] 51/85: Reimplement scm_{to,from}_{int64,uint64}, (continued)
- [Guile-commits] 51/85: Reimplement scm_{to,from}_{int64,uint64}, Andy Wingo, 2022/01/13
- [Guile-commits] 52/85: Implement scm_{to,from}_wchar inline, Andy Wingo, 2022/01/13
- [Guile-commits] 58/85: Remove dead bignum frexp code from numbers.c, Andy Wingo, 2022/01/13
- [Guile-commits] 53/85: Remove unused conv-{u,}integer.i.c, Andy Wingo, 2022/01/13
- [Guile-commits] 63/85: Use scm_integer_to_double_z in numbers.c instead of big2dbl, Andy Wingo, 2022/01/13
- [Guile-commits] 66/85: Finish srfi-60 port off old scm mpz API, Andy Wingo, 2022/01/13
- [Guile-commits] 74/85: Less pessimal scm_integer_sub_zi, Andy Wingo, 2022/01/13
- [Guile-commits] 76/85: Avoid bignum clone in scm_integer_sub_zz, Andy Wingo, 2022/01/13
- [Guile-commits] 79/85: Optimize scm_integer_mul_ii, Andy Wingo, 2022/01/13
- [Guile-commits] 80/85: Optimize integer-expt for fixnums, Andy Wingo, 2022/01/13
- [Guile-commits] 81/85: Optimize logand against a positive inum,
Andy Wingo <=
- [Guile-commits] 82/85: Simplify scm_abs for the real case, Andy Wingo, 2022/01/13
- [Guile-commits] 09/85: Implement ceiling-divide with new integer lib, Andy Wingo, 2022/01/13
- [Guile-commits] 08/85: Implement ceiling-remainder with new integer lib, Andy Wingo, 2022/01/13
- [Guile-commits] 11/85: Implement truncate-remainder with new integer lib, Andy Wingo, 2022/01/13
- [Guile-commits] 49/85: Reimplement scm_from_int8 etc, Andy Wingo, 2022/01/13
- [Guile-commits] 55/85: Reimplement exact-integer-sqrt with integers.[ch], Andy Wingo, 2022/01/13
- [Guile-commits] 56/85: Refactor scm_sqrt in terms of integers.[ch], Andy Wingo, 2022/01/13
- [Guile-commits] 62/85: Simplify magnitude, angle, Andy Wingo, 2022/01/13
- [Guile-commits] 65/85: Start porting srfi-60 off the bad bignum interfaces, Andy Wingo, 2022/01/13
- [Guile-commits] 72/85: Optimize scm_integer_mul_zi, Andy Wingo, 2022/01/13