From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/14675 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: [PATCH] mips: add single-instruction math functions Date: Fri, 13 Sep 2019 16:01:41 -0400 Message-ID: <20190913200141.GL9017@brightrain.aerifal.cx> References: <20190911103224.504A15C44C@mx7.valuehost.ru> <20190913183123.GI9017@brightrain.aerifal.cx> <20190913185657.GJ9017@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="24070"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mutt/1.5.21 (2010-09-15) To: musl@lists.openwall.com Original-X-From: musl-return-14691-gllmg-musl=m.gmane.org@lists.openwall.com Fri Sep 13 22:01:56 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 1i8rlU-0006Aq-3Q for gllmg-musl@m.gmane.org; Fri, 13 Sep 2019 22:01:56 +0200 Original-Received: (qmail 7882 invoked by uid 550); 13 Sep 2019 20:01:53 -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 7864 invoked from network); 13 Sep 2019 20:01:53 -0000 Content-Disposition: inline In-Reply-To: Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:14675 Archived-At: On Fri, Sep 13, 2019 at 03:12:11PM -0400, James Y Knight wrote: > I've no idea about the issues with MIPS' instruction set, but yes, to be > correct, abs does need to affect only the sign bit, leaving everything else > the same. > > It's specified as such in IEEE 754-2008: 5.5.1 Sign bit operations -- > "Implementations shall provide the following homogeneous > quiet-computational sign bit operations for all supported arithmetic > formats; they only affect the sign bit. The operations treat floating-point > numbers and NaNs alike, and signal no exception. These operations may > propagate non-canonical encodings." > .... > "abs(x) copies a floating-point operand x to a destination in the same > format, setting the sign bit to 0 (positive)." > > (That section also defines the copy, negate, and copySign operations) OK, the text I was missing was: "The fabs functions in provide the abs function recommended in the Appendix to IEC 60559." from F.3 ΒΆ1. Rich > On Fri, Sep 13, 2019 at 2:57 PM Rich Felker wrote: > > > On Fri, Sep 13, 2019 at 02:31:23PM -0400, Rich Felker wrote: > > > On Wed, Sep 11, 2019 at 01:05:04PM +0300, info@mobile-stream.com wrote: > > > > > > > > non-commit text: > > > > gcc puts annoying nop into the delay slot for these functions, e.g.: > > > > abs.d $f0,$f12 > > > > jr $ra > > > > nop > > > > is there any way to get rid of this without using pure .S? > > > > > > > > > > > > > > > > SQRT.fmt exists on MIPS II+ (float), MIPS III+ (double). > > > > > > > > ABS.fmt exists on MIPS I+ but only cores with ABS2008 flag in FCSR > > > > implement the required behaviour. > > > > --- > > > > src/math/mips/fabs.c | 16 ++++++++++++++++ > > > > src/math/mips/fabsf.c | 16 ++++++++++++++++ > > > > src/math/mips/sqrt.c | 16 ++++++++++++++++ > > > > src/math/mips/sqrtf.c | 16 ++++++++++++++++ > > > > 4 files changed, 64 insertions(+) > > > > create mode 100644 src/math/mips/fabs.c > > > > create mode 100644 src/math/mips/fabsf.c > > > > create mode 100644 src/math/mips/sqrt.c > > > > create mode 100644 src/math/mips/sqrtf.c > > > > > > > > diff --git a/src/math/mips/fabs.c b/src/math/mips/fabs.c > > > > new file mode 100644 > > > > index 00000000..0a5aa3b1 > > > > --- /dev/null > > > > +++ b/src/math/mips/fabs.c > > > > @@ -0,0 +1,16 @@ > > > > +#if !defined(__mips_soft_float) && defined(__mips_abs2008) > > > > > > Why is this dependent on __mips_abs2008? > > > > OK, I see. The macro isn't well-documented, but it corresponds to the > > gcc -mabs=2008 option indicating an ISA variant that treats the > > abs.[sd] instruction as bitwise rather than arithmetic. I'm somewhat > > unclear on whether we should do anything like this; it's one of the > > places where MIPS blurred the distinction between ISA levels and > > incompatible ABIs, and seems to be able to produce code that would > > silently run on the wrong type of cpu and produce the wrong result (or > > maybe this is a runtime-switchable cpu mode?) > > > > I'm also unclear though whether fabs() actually needs to behave as > > bitwise. Neither C nor Annex F nor POSIX seems to specify its behavior > > for NANs except that a NAN is returned. Am I missing something? If > > not, it seems the 'legacy' abs.[sd] instructions would also be fine > > for implementing this, and then no conditional is needed. > > > > Rich > >