From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Crashes in "C-h h" Date: Wed, 3 Jul 2019 14:05:32 -0700 Organization: UCLA Computer Science Department Message-ID: <9b78b85d-a3c8-761f-e500-d51d4a985fa8@cs.ucla.edu> References: <83y31hes6r.fsf@gnu.org> <83r279epwe.fsf@gnu.org> <09f72051-d740-9115-c6fd-c4344c749568@cs.ucla.edu> <83muhvd9nm.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------8D0E0B0448F40B85D12C4626" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="245449"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 Cc: pipcet@gmail.com, emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jul 03 23:06:03 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1himS3-0011hL-0Q for ged-emacs-devel@m.gmane.org; Wed, 03 Jul 2019 23:06:03 +0200 Original-Received: from localhost ([::1]:40648 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1himS1-0003C9-VE for ged-emacs-devel@m.gmane.org; Wed, 03 Jul 2019 17:06:01 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:37338) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1himRv-0003Bn-SE for emacs-devel@gnu.org; Wed, 03 Jul 2019 17:05:56 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1himRt-0004zc-S0 for emacs-devel@gnu.org; Wed, 03 Jul 2019 17:05:55 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:43120) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1himRb-0004nB-Sz; Wed, 03 Jul 2019 17:05:37 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id CADC916176B; Wed, 3 Jul 2019 14:05:33 -0700 (PDT) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id gj9P5jWzVRA5; Wed, 3 Jul 2019 14:05:33 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 06122161906; Wed, 3 Jul 2019 14:05:33 -0700 (PDT) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id vdIFnsgY-DRr; Wed, 3 Jul 2019 14:05:32 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id DBCCD16176B; Wed, 3 Jul 2019 14:05:32 -0700 (PDT) Openpgp: preference=signencrypt Autocrypt: addr=eggert@cs.ucla.edu; prefer-encrypt=mutual; keydata= xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9 Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2 Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBfgQTAQIAKAUCTIByZAIbAwUJEswDAAYLCQgHAwIG FQgCCQoLBBYCAwECH In-Reply-To: <83muhvd9nm.fsf@gnu.org> Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:238340 Archived-At: This is a multi-part message in MIME format. --------------8D0E0B0448F40B85D12C4626 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit >> As Eli's revised code suggests, if n is in fixnum range, then instead of >> (FIXNUMP (x) && XFIXNUM (x) == n) it's typically a bit cleaner (and faster) to >> write EQ (x, make_fixnum (n)). > It normally shouldn't matter either way, but in that case the > comparison is done in a loop, so the make_fixnum call can be done just > once, outside the loop, which AFAIU makes the loop a tad faster. Although it indeed doesn't matter normally, the EQ+make_fixnum version should be smaller and faster in typical use, even without hoisting the make_fixnum out of a loop. I just now ran the attached microbenchmark on a Xeon E5-2640 v2 with code compiled by GCC 9.1 x86-64, and got these results: 1031-lnxsrv09 $ time ./a.out 0 0 # no operation real 0m28.150s user 0m28.148s sys 0m0.001s 1032-lnxsrv09 $ time ./a.out 0 0 0 # FIXNUMP+XFIXNUM real 0m34.229s user 0m34.227s sys 0m0.001s 1033-lnxsrv09 $ time ./a.out 0 0 0 0 # EQ+make_fixnum real 0m32.213s user 0m32.211s sys 0m0.001s which indicates that the EQ+make_fixnum version was about 50% faster than the FIXNUMP+XFIXNUM version, once you subtract the overhead of the no-op benchmark control. --------------8D0E0B0448F40B85D12C4626 Content-Type: text/x-csrc; name="t.c" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="t.c" #include #include int noop (Lisp_Object x, ptrdiff_t n) { return 0; } int f (Lisp_Object x, ptrdiff_t n) { return FIXNUMP (x) && XFIXNUM (x) == n; } int g (Lisp_Object x, ptrdiff_t n) { return EQ (x, make_fixnum (n)); } int main (int argc, char **argv) { int sum = 0; int (*p) (Lisp_Object, ptrdiff_t) = argc % 3 == 0 ? noop : argc % 3 == 1 ? f : g; for (long i = 0; i < 10000000000; i++) sum += p (i & 1 ? Qnil : make_fixnum (i), i); return sum & 1; } --------------8D0E0B0448F40B85D12C4626--