From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/13891 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Alexander Monakov Newsgroups: gmane.linux.lib.musl.general Subject: Re: FE Exception triggered by comparison Date: Wed, 27 Feb 2019 20:14:07 +0300 (MSK) Message-ID: References: <20190224192511.GZ21289@port70.net> <20190224210438.6980bd87@inria.fr> <20190225155109.GB28106@voyager> <20190227164225.GV23599@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="211750"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Alpine 2.20.13 (LNX 116 2015-12-14) To: musl@lists.openwall.com Original-X-From: musl-return-13907-gllmg-musl=m.gmane.org@lists.openwall.com Wed Feb 27 18:14:21 2019 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.89) (envelope-from ) id 1gz2mj-000t02-23 for gllmg-musl@m.gmane.org; Wed, 27 Feb 2019 18:14:21 +0100 Original-Received: (qmail 19570 invoked by uid 550); 27 Feb 2019 17:14:19 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 19552 invoked from network); 27 Feb 2019 17:14:18 -0000 In-Reply-To: <20190227164225.GV23599@brightrain.aerifal.cx> Xref: news.gmane.org gmane.linux.lib.musl.general:13891 Archived-At: On Wed, 27 Feb 2019, Rich Felker wrote: > Are there reasons we should perhaps use the __builtin versions of > these when __GNUC__ indicates they're available? I like our bit test > versions we have now, and I think they're sufficiently efficient, but > I'm open to changes if there's a good reason. Well, it really depends on what one considers 'sufficiently efficient'. Instead of comparing a register with itself and testing flags (2 instructions) you get (for 'int f(double x){return isnan(x);}'): f: movabsq $9223372036854775807, %rdx movq %xmm0, %rax andq %rdx, %rax movabsq $9218868437227405312, %rdx cmpq %rdx, %rax seta %al movzbl %al, %eax ret (note that movq %xmm0, %rax is going to be more costly than a normal move as it crosses from fp to integer domain in the cpu) I think musl bit test can be implemented more efficiently via right-shifting the representation in %rax first, avoiding 64-bit immediates, but even then I'd say the "native" version is preferable. Alexander