]> git.eshelyaron.com Git - emacs.git/commitdiff
In timefns, do gcd reduction more often
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 10 Jul 2024 08:36:35 +0000 (10:36 +0200)
committerEshel Yaron <me@eshelyaron.com>
Thu, 11 Jul 2024 14:39:48 +0000 (16:39 +0200)
* src/timefns.c (ticks_hz_hz_ticks): Reduce by gcd
even if t.ticks is not a fixnum, since that’s easy.

(cherry picked from commit b6cbf0cbb66fa4c1a7f351350d5f9aed9c93cd26)

src/timefns.c

index 0df7d1f4363913b370b991eadd6560cf4a76831a..ba1ba10a8099ff2e79d87b5377d2d8d79b4357d0 100644 (file)
@@ -774,8 +774,8 @@ ticks_hz_hz_ticks (struct ticks_hz t, Lisp_Object hz)
       if (XFIXNUM (hz) <= 0)
        invalid_hz (hz);
 
-      /* For speed, use intmax_t arithmetic if it will do.  */
-      if (FASTER_TIMEFNS && FIXNUMP (t.ticks) && FIXNUMP (t.hz))
+      /* Prefer non-bignum arithmetic to speed up common cases.  */
+      if (FASTER_TIMEFNS && FIXNUMP (t.hz))
        {
          /* Reduce T.hz and HZ by their GCD, to avoid some intmax_t
             overflows that would occur in T.ticks * HZ.  */
@@ -784,9 +784,12 @@ ticks_hz_hz_ticks (struct ticks_hz t, Lisp_Object hz)
          ithz /= d;
          ihz /= d;
 
-         intmax_t ticks;
-         if (!ckd_mul (&ticks, XFIXNUM (t.ticks), ihz))
-           return make_int (ticks / ithz - (ticks % ithz < 0));
+         if (FIXNUMP (t.ticks))
+           {
+             intmax_t ticks;
+             if (!ckd_mul (&ticks, XFIXNUM (t.ticks), ihz))
+               return make_int (ticks / ithz - (ticks % ithz < 0));
+           }
 
          t.hz = make_fixnum (ithz);
          hz = make_fixnum (ihz);