emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] feature/bignum d3549c1 2/4: Use mpz_import in mpz_set_uint


From: Tom Tromey
Subject: [Emacs-diffs] feature/bignum d3549c1 2/4: Use mpz_import in mpz_set_uintmax_slow
Date: Wed, 8 Aug 2018 19:34:57 -0400 (EDT)

branch: feature/bignum
commit d3549c190152921dd05e694d41e02a002789d191
Author: Tom Tromey <address@hidden>
Commit: Tom Tromey <address@hidden>

    Use mpz_import in mpz_set_uintmax_slow
    
    * src/alloc.c (mpz_set_uintmax_slow): Use mpz_import.
---
 src/alloc.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/alloc.c b/src/alloc.c
index edfb87e..1504d79 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3874,12 +3874,12 @@ mpz_set_uintmax_slow (mpz_t result, uintmax_t v)
 {
   /* If long is larger then a faster path is taken.  */
   eassert (sizeof (uintmax_t) > sizeof (unsigned long));
-  /* This restriction could be lifted if needed.  */
-  eassert (sizeof (uintmax_t) <= 2 * sizeof (unsigned long));
 
-  mpz_set_ui (result, v >> (CHAR_BIT * sizeof (unsigned long)));
-  mpz_mul_2exp (result, result, CHAR_BIT * sizeof (unsigned long));
-  mpz_add_ui (result, result, v & -1ul);
+  /* COUNT = 1 means just a single word of the given size.  ORDER = -1
+     is arbitrary since there's only a single word.  ENDIAN = 0 means
+     use the native endian-ness.  NAILS = 0 means use the whole
+     word.  */
+  mpz_import (result, 1, -1, sizeof (uintmax_t), 0, 0, &v);
 }
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]