From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Floating-point constant folding in Emacs byte compiler Date: Thu, 22 Mar 2018 16:04:52 -0700 Organization: UCLA Computer Science Department Message-ID: <2ce39e5c-cd1b-65d6-b125-719caad67932@cs.ucla.edu> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------3937C53F5A938373C76CDC4D" X-Trace: blaine.gmane.org 1521759825 11878 195.159.176.226 (22 Mar 2018 23:03:45 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 22 Mar 2018 23:03:45 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 To: Emacs development discussions Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Fri Mar 23 00:03:41 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ez9FF-0002uF-Hq for ged-emacs-devel@m.gmane.org; Fri, 23 Mar 2018 00:03:41 +0100 Original-Received: from localhost ([::1]:35247 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ez9HD-00034J-J6 for ged-emacs-devel@m.gmane.org; Thu, 22 Mar 2018 19:05:43 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:37308) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ez9GV-00033m-BL for emacs-devel@gnu.org; Thu, 22 Mar 2018 19:05:01 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ez9GS-0003d3-5O for emacs-devel@gnu.org; Thu, 22 Mar 2018 19:04:59 -0400 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:34012) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ez9GR-0003b8-SB for emacs-devel@gnu.org; Thu, 22 Mar 2018 19:04:56 -0400 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id CF32E16173E for ; Thu, 22 Mar 2018 16:04:53 -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 POqrH1f49D30 for ; Thu, 22 Mar 2018 16:04:52 -0700 (PDT) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id ACA4A161729 for ; Thu, 22 Mar 2018 16:04:52 -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 KeqNvwzU-Hd9 for ; Thu, 22 Mar 2018 16:04:52 -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 9376816173E for ; Thu, 22 Mar 2018 16:04:52 -0700 (PDT) Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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:223928 Archived-At: This is a multi-part message in MIME format. --------------3937C53F5A938373C76CDC4D Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit While preparing and installing the attached patch to Emacs master, I noticed that the byte optimizer assumes that floating-point arithmetic behaves the same at compile-time that it does at runtime. For example, on my x86-64 platform the byte compiler optimizes (/ 0 0.0) to -NaN, (- 1 1.0000000000000001) to 0.0, and (< 1 1.0000000000000001) to nil, even though these expressions will evaluate to different values on (say) an IBM mainframe that uses IBM floating point, and the first expression yields +NaN on some IEEE platforms (e.g., ARM). These discrepancies mean that .elc files containing floating-point constants might not be platform-independent, in that byte-compiling a file on one machine X and running it on another machine Y can yield different results than byte-compiling and running the same file on Y. Is this sort of discrepancy intended? If so, should it be documented in the Emacs Lisp manual? On the one hand, I doubt whether this sort of optimization buys us much performance; on the other, I doubt whether many users care about the discrepancies. --------------3937C53F5A938373C76CDC4D Content-Type: text/plain; charset=UTF-8; name="0001-Fix-byte-opt-lists-of-pure-functions-etc.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Fix-byte-opt-lists-of-pure-functions-etc.txt" RnJvbSAzYjEwMjRhYzgxNjJhNjZjYzZiYWY2ZjdmMzM5ZDlmNzNiY2I2YjkwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBUaHUsIDIyIE1hciAyMDE4IDExOjI1OjQyIC0wNzAwClN1YmplY3Q6IFtQQVRD SF0gRml4IGJ5dGUtb3B0IGxpc3RzIG9mIHB1cmUgZnVuY3Rpb25zIGV0Yy4KTUlNRS1WZXJz aW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYSBi eXRlLWNvbXBpbGVyIHJ1bm5pbmcgb24gNjQtYml0IEVtYWNzCm9wdGltaXplZCAobHNoIC0x IC0xKSB0byAjeDFmZmZmZmZmZmZmZmZmZmYsIGFuIG9wdGltaXphdGlvbgp0aGF0IGlzIGlu Y29ycmVjdCBmb3IgLmVsYyBmaWxlcyBpbnRlbmRlZCBmb3IgZWl0aGVyIDMyLSBvcgo2NC1i aXQgRW1hY3MuICBXaGlsZSBJIHdhcyBpbiB0aGUgbmVpZ2hib3Job29kLCBJIG5vdGljZWQg b3RoZXIKZ2xpdGNoZXMgaW4gdGhlIGxpc3RzIG9mIHB1cmUgYW5kIHNpZGUtZWZmZWN0LWZy ZWUgZnVuY3Rpb25zLCBhbmQKZml4ZWQgdGhlIGVycm9ycyB0aGF0IEkgZm91bmQuCiogbGlz cC9lbWFjcy1saXNwL2J5dGUtb3B0LmVsIChzaWRlLWVmZmVjdC1mcmVlLWZucyk6Ck1vdmUg c29tZSBmdW5jdGlvbnMgaGVyZSBmcm9tIHNpZGUtZWZmZWN0LWFuZC1lcnJvci1mcmVlLWZu cywKc2luY2UgdGhleSBjYW4gbm93IHNpZ25hbCBlcnJvcnMuICBUaGUgYWZmZWN0ZWQgZnVu Y3Rpb25zIGFyZQpjdXJyZW50LXRpbWUtc3RyaW5nLCBjdXJyZW50LXRpbWUtem9uZSwKbGlu ZS1iZWdpbm5pbmctcG9zaXRpb24sIGxpbmUtZW5kLXBvc2l0aW9uLiAgUmVuYW1lIGxhbmdp bmZvCnRvIGxvY2FsZS1pbmZvLiAgQWRkIGxvZ2NvdW50LiAgUmVtb3ZlIHN0cmluZy10by1p bnQuCihzaWRlLWVmZmVjdC1hbmQtZXJyb3ItZnJlZS1mbnMpOiBSZW1vdmUgbWluaWJ1ZmZl ci13aW5kb3csIGEKZnVuY3Rpb24gdGhhdCBjYW4gc2lnbmFsIGVycm9ycywgYW5kIHRoYXQg aXMgYWxyZWFkeSBpbgpzaWRlLWVmZmVjdC1mcmVlLWZucy4KKHB1cmUtZm5zKTogUmVtb3Zl IGFzaCwgbHNoLCBhbmQgbG9nYiwgc2luY2UgdGhleSBhcmUKcGxhdGZvcm0tZGVwZW5kZW50 IGFuZCAuZWxjIGZpbGVzIHNob3VsZCBiZQpwbGF0Zm9ybS1pbmRlcGVuZGVudC4gIEFkZCAl LCBsb2dhbmQsIGxvZ2NvdW50LiAgU29ydC4KQ2xhcmlmeSB3aGF0IGlzIG1lYW50IGJ5IOKA nHB1cmXigJ0uCi0tLQogbGlzcC9lbWFjcy1saXNwL2J5dGUtb3B0LmVsIHwgMzcgKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIzIGlu c2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3Mt bGlzcC9ieXRlLW9wdC5lbCBiL2xpc3AvZW1hY3MtbGlzcC9ieXRlLW9wdC5lbAppbmRleCBh MzE2MzY0NzYxLi41NTM0M2UxZTNhIDEwMDY0NAotLS0gYS9saXNwL2VtYWNzLWxpc3AvYnl0 ZS1vcHQuZWwKKysrIGIvbGlzcC9lbWFjcy1saXNwL2J5dGUtb3B0LmVsCkBAIC0xMTg2LDYg KzExODYsNyBAQCBieXRlLW9wdGltaXplLXNldAogCSBjaGFyLWVxdWFsIGNoYXItdG8tc3Ry aW5nIGNoYXItd2lkdGggY29tcGFyZS1zdHJpbmdzCiAJIGNvbXBhcmUtd2luZG93LWNvbmZp Z3VyYXRpb25zIGNvbmNhdCBjb29yZGluYXRlcy1pbi13aW5kb3ctcAogCSBjb3B5LWFsaXN0 IGNvcHktc2VxdWVuY2UgY29weS1tYXJrZXIgY29zIGNvdW50LWxpbmVzCisJIGN1cnJlbnQt dGltZS1zdHJpbmcgY3VycmVudC10aW1lLXpvbmUKIAkgZGVjb2RlLWNoYXIKIAkgZGVjb2Rl LXRpbWUgZGVmYXVsdC1ib3VuZHAgZGVmYXVsdC12YWx1ZSBkb2N1bWVudGF0aW9uIGRvd25j YXNlCiAJIGVsdCBlbmNvZGUtY2hhciBleHAgZXhwdCBlbmNvZGUtdGltZSBlcnJvci1tZXNz YWdlLXN0cmluZwpAQCAtMTE5OSw4ICsxMjAwLDkgQEAgYnl0ZS1vcHRpbWl6ZS1zZXQKIAkg aGFzaC10YWJsZS1jb3VudAogCSBpbnQtdG8tc3RyaW5nIGludGVybi1zb2Z0CiAJIGtleW1h cC1wYXJlbnQKLQkgbGVuZ3RoIGxvY2FsLXZhcmlhYmxlLWlmLXNldC1wIGxvY2FsLXZhcmlh YmxlLXAgbG9nIGxvZzEwIGxvZ2FuZAotCSBsb2diIGxvZ2lvciBsb2dub3QgbG9neG9yIGxz aCBsYW5naW5mbworCSBsZW5ndGggbGluZS1iZWdpbm5pbmctcG9zaXRpb24gbGluZS1lbmQt cG9zaXRpb24KKwkgbG9jYWwtdmFyaWFibGUtaWYtc2V0LXAgbG9jYWwtdmFyaWFibGUtcCBs b2NhbGUtaW5mbworCSBsb2cgbG9nMTAgbG9nYW5kIGxvZ2IgbG9nY291bnQgbG9naW9yIGxv Z25vdCBsb2d4b3IgbHNoCiAJIG1ha2UtbGlzdCBtYWtlLXN0cmluZyBtYWtlLXN5bWJvbCBt YXJrZXItYnVmZmVyIG1heCBtZW1iZXIgbWVtcSBtaW4KIAkgbWluaWJ1ZmZlci1zZWxlY3Rl ZC13aW5kb3cgbWluaWJ1ZmZlci13aW5kb3cKIAkgbW9kIG11bHRpYnl0ZS1jaGFyLXRvLXVu aWJ5dGUgbmV4dC13aW5kb3cgbnRoIG50aGNkciBudW1iZXItdG8tc3RyaW5nCkBAIC0xMjEw LDcgKzEyMTIsNyBAQCBieXRlLW9wdGltaXplLXNldAogCSByYWRpYW5zLXRvLWRlZ3JlZXMg cmFzc3EgcmFzc29jIHJlYWQtZnJvbS1zdHJpbmcgcmVnZXhwLXF1b3RlCiAJIHJlZ2lvbi1i ZWdpbm5pbmcgcmVnaW9uLWVuZCByZXZlcnNlIHJvdW5kCiAJIHNpbiBzcXJ0IHN0cmluZyBz dHJpbmc8IHN0cmluZz0gc3RyaW5nLWVxdWFsIHN0cmluZy1sZXNzcCBzdHJpbmctdG8tY2hh cgotCSBzdHJpbmctdG8taW50IHN0cmluZy10by1udW1iZXIgc3Vic3RyaW5nCisJIHN0cmlu Zy10by1udW1iZXIgc3Vic3RyaW5nCiAJIHN4aGFzaCBzeGhhc2gtZXF1YWwgc3hoYXNoLWVx IHN4aGFzaC1lcWwKIAkgc3ltYm9sLWZ1bmN0aW9uIHN5bWJvbC1uYW1lIHN5bWJvbC1wbGlz dCBzeW1ib2wtdmFsdWUgc3RyaW5nLW1ha2UtdW5pYnl0ZQogCSBzdHJpbmctbWFrZS1tdWx0 aWJ5dGUgc3RyaW5nLWFzLW11bHRpYnl0ZSBzdHJpbmctYXMtdW5pYnl0ZQpAQCAtMTI0MCw3 ICsxMjQyLDYgQEAgYnl0ZS1vcHRpbWl6ZS1zZXQKIAkgY2hhcnNldHAgY29tbWFuZHAgY29u cyBjb25zcAogCSBjdXJyZW50LWJ1ZmZlciBjdXJyZW50LWdsb2JhbC1tYXAgY3VycmVudC1p bmRlbnRhdGlvbgogCSBjdXJyZW50LWxvY2FsLW1hcCBjdXJyZW50LW1pbm9yLW1vZGUtbWFw cyBjdXJyZW50LXRpbWUKLQkgY3VycmVudC10aW1lLXN0cmluZyBjdXJyZW50LXRpbWUtem9u ZQogCSBlb2JwIGVvbHAgZXEgZXF1YWwgZXZlbnRwCiAJIGZsb2F0cCBmb2xsb3dpbmctY2hh ciBmcmFtZXAKIAkgZ2V0LWxhcmdlc3Qtd2luZG93IGdldC1scnUtd2luZG93CkBAIC0xMjQ4 LDkgKzEyNDksOSBAQCBieXRlLW9wdGltaXplLXNldAogCSBpZGVudGl0eSBpZ25vcmUgaW50 ZWdlcnAgaW50ZWdlci1vci1tYXJrZXItcCBpbnRlcmFjdGl2ZS1wCiAJIGludm9jYXRpb24t ZGlyZWN0b3J5IGludm9jYXRpb24tbmFtZQogCSBrZXltYXBwIGtleXdvcmRwCi0JIGxpbmUt YmVnaW5uaW5nLXBvc2l0aW9uIGxpbmUtZW5kLXBvc2l0aW9uIGxpc3QgbGlzdHAKKwkgbGlz dCBsaXN0cAogCSBtYWtlLW1hcmtlciBtYXJrIG1hcmstbWFya2VyIG1hcmtlcnAgbWF4LWNo YXIKLQkgbWVtb3J5LWxpbWl0IG1pbmlidWZmZXItd2luZG93CisJIG1lbW9yeS1saW1pdAog CSBtb3VzZS1tb3ZlbWVudC1wCiAJIG5hdG51bXAgbmxpc3RwIG5vdCBudWxsIG51bWJlci1v ci1tYXJrZXItcCBudW1iZXJwCiAJIG9uZS13aW5kb3ctcCBvdmVybGF5cApAQCAtMTI3NSwx NiArMTI3NiwyNCBAQCBieXRlLW9wdGltaXplLXNldAogICBuaWwpCiAKIAwKLTs7IHB1cmUg ZnVuY3Rpb25zIGFyZSBzaWRlLWVmZmVjdCBmcmVlIGZ1bmN0aW9ucyB3aG9zZSB2YWx1ZXMg ZGVwZW5kCi07OyBvbmx5IG9uIHRoZWlyIGFyZ3VtZW50cy4gRm9yIHRoZXNlIGZ1bmN0aW9u cywgY2FsbHMgd2l0aCBjb25zdGFudAotOzsgYXJndW1lbnRzIGNhbiBiZSBldmFsdWF0ZWQg YXQgY29tcGlsZSB0aW1lLiBUaGlzIG1heSBzaGlmdCBydW4gdGltZQotOzsgZXJyb3JzIHRv IGNvbXBpbGUgdGltZS4KKzs7IFB1cmUgZnVuY3Rpb25zIGFyZSBzaWRlLWVmZmVjdCBmcmVl IGZ1bmN0aW9ucyB3aG9zZSB2YWx1ZXMgZGVwZW5kCis7OyBvbmx5IG9uIHRoZWlyIGFyZ3Vt ZW50cywgbm90IG9uIHRoZSBwbGF0Zm9ybS4gIEZvciB0aGVzZSBmdW5jdGlvbnMsCis7OyBj YWxscyB3aXRoIGNvbnN0YW50IGFyZ3VtZW50cyBjYW4gYmUgZXZhbHVhdGVkIGF0IGNvbXBp bGUgdGltZS4KKzs7IFRoaXMgbWF5IHNoaWZ0IHJ1bnRpbWUgZXJyb3JzIHRvIGNvbXBpbGUg dGltZS4gIEZvciBleGFtcGxlLCBsb2dhbmQKKzs7IGlzIHB1cmUgc2luY2UgaXRzIHJlc3Vs dHMgYXJlIG1hY2hpbmUtaW5kZXBlbmRlbnQsIHdoZXJlYXMgYXNoIGlzCis7OyBub3QgcHVy ZSBiZWNhdXNlIChhc2ggMSAyOSkncyB2YWx1ZSBkZXBlbmRzIG9uIG1hY2hpbmUgd29yZCBz aXplLgorOzsKKzs7IFdoZW4gZGVjaWRpbmcgd2hldGhlciBhIGZ1bmN0aW9uIGlzIHB1cmUs IGRvIG5vdCB3b3JyeSBhYm91dAorOzsgbXV0YWJsZSBzdHJpbmdzIG9yIG1hcmtlcnMsIGFz IHRoZXkgYXJlIHNvIHVubGlrZWx5IGluIHJlYWwgY29kZQorOzsgdGhhdCB0aGV5IGFyZSBu b3Qgd29ydGggd29ycnlpbmcgYWJvdXQuICBUaHVzIHN0cmluZy10by1jaGFyIGlzCis7OyBw dXJlIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IHJldHVybiBkaWZmZXJlbnQgdmFsdWVzIGlmIGEg c3RyaW5nIGlzCis7OyBjaGFuZ2VkLCBhbmQgbG9nYW5kIGlzIHB1cmUgZXZlbiB0aG91Z2gg aXQgbWlnaHQgcmV0dXJuIGRpZmZlcmVudAorOzsgdmFsdWVzIGlmIGEgbWFya2VyIGlzIG1v dmVkLgogCiAobGV0ICgocHVyZS1mbnMKLSAgICAgICAnKGNvbmNhdCBzeW1ib2wtbmFtZSBy ZWdleHAtb3B0IHJlZ2V4cC1xdW90ZSBzdHJpbmctdG8tc3ludGF4Ci0gICAgICAgICBzdHJp bmctdG8tY2hhcgotICAgICAgICAgYXNoIGxzaCBsb2diIGxvZ25vdCBsb2dpb3IgbG9neG9y Ci0gICAgICAgICBjZWlsaW5nIGZsb29yKSkpCisgICAgICAgJyglIGNvbmNhdCBsb2dhbmQg bG9nY291bnQgbG9naW9yIGxvZ25vdCBsb2d4b3IKKwkgcmVnZXhwLW9wdCByZWdleHAtcXVv dGUKKwkgc3RyaW5nLXRvLWNoYXIgc3RyaW5nLXRvLXN5bnRheCBzeW1ib2wtbmFtZSkpKQog ICAod2hpbGUgcHVyZS1mbnMKICAgICAocHV0IChjYXIgcHVyZS1mbnMpICdwdXJlIHQpCiAg ICAgKHNldHEgcHVyZS1mbnMgKGNkciBwdXJlLWZucykpKQotLSAKMi4xNC4zCgo= --------------3937C53F5A938373C76CDC4D--