aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert2018-08-18 23:06:41 -0700
committerPaul Eggert2018-08-18 23:07:00 -0700
commit7ea369e5f22d6e3bcf1e55225c0ff356d9cabb2e (patch)
treebe44953a6dbb9607b1ec9a64ea80935295941127 /src/data.c
parenta1b79567a8253a8e8a1ceed02145a64b87a4768d (diff)
downloademacs-7ea369e5f22d6e3bcf1e55225c0ff356d9cabb2e.tar.gz
emacs-7ea369e5f22d6e3bcf1e55225c0ff356d9cabb2e.zip
Tweak integer division
* src/data.c (arith_driver): Reorder to remove unnecessary FIXNUMP. Tighten test for whether to convert the divisor from fixnum to mpz_t. Simplify.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/data.c b/src/data.c
index 5ef0ef85571..8a6975da3ab 100644
--- a/src/data.c
+++ b/src/data.c
@@ -2896,11 +2896,11 @@ arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args)
2896 { 2896 {
2897 /* Note that a bignum can never be 0, so we don't need 2897 /* Note that a bignum can never be 0, so we don't need
2898 to check that case. */ 2898 to check that case. */
2899 if (FIXNUMP (val) && XFIXNUM (val) == 0)
2900 xsignal0 (Qarith_error);
2901 if (BIGNUMP (val)) 2899 if (BIGNUMP (val))
2902 mpz_tdiv_q (accum, accum, XBIGNUM (val)->value); 2900 mpz_tdiv_q (accum, accum, XBIGNUM (val)->value);
2903 else if (sizeof (EMACS_INT) > sizeof (long)) 2901 else if (XFIXNUM (val) == 0)
2902 xsignal0 (Qarith_error);
2903 else if (ULONG_MAX < -MOST_NEGATIVE_FIXNUM)
2904 { 2904 {
2905 mpz_t tem; 2905 mpz_t tem;
2906 mpz_init (tem); 2906 mpz_init (tem);
@@ -2911,11 +2911,8 @@ arith_driver (enum arithop code, ptrdiff_t nargs, Lisp_Object *args)
2911 else 2911 else
2912 { 2912 {
2913 EMACS_INT value = XFIXNUM (val); 2913 EMACS_INT value = XFIXNUM (val);
2914 bool negate = value < 0; 2914 mpz_tdiv_q_ui (accum, accum, eabs (value));
2915 if (negate) 2915 if (value < 0)
2916 value = -value;
2917 mpz_tdiv_q_ui (accum, accum, value);
2918 if (negate)
2919 mpz_neg (accum, accum); 2916 mpz_neg (accum, accum);
2920 } 2917 }
2921 } 2918 }