mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Markus Wichmann <nullplan@gmx.net>
To: musl@lists.openwall.com
Subject: Re: Model specific optimizations?
Date: Sat, 1 Oct 2016 21:53:04 +0200	[thread overview]
Message-ID: <20161001195304.GF22343@voyager> (raw)
In-Reply-To: <20161001151012.GN19318@brightrain.aerifal.cx>

On Sat, Oct 01, 2016 at 11:10:12AM -0400, Rich Felker wrote:
> On Sat, Oct 01, 2016 at 10:52:14AM +0200, Markus Wichmann wrote:
> > On Sat, Oct 01, 2016 at 01:50:23AM -0400, Rich Felker wrote:
> > > I don't think this works at all. sqrt() is required to be
> > > correctly-rounded; that's the whole reason sqrt.c is costly.
> > 
> > It's an approximation, at least, which was rather my point.
> > 
> > As I've come to realize over the course of this discussion, the fsqrt
> > instruction is useless here and pretty much everywhere out there:
> 
> I don't think that conclusion is correct. It certainly makes sense for
> libc to use it in targets that have it, assuming it safely produces
> correct results, and for compilers to generate it in place of a call
> to sqrt.
> 

But again, that requires the appropriate flags.

> > Also, at least according to Apple, which were the only ones actually
> > looking at the thing, such as I could find, it was only ever supported
> > by the 970 and the 970FX cores, released in 2002 and 2004, respectively.
> > I highly doubt they'll have much relevance. Chalk up my suspicions from
> > the OP to not having researched enough.
> 
> Do you mean these are the only non-POWER line models that have fsqrt?
> 

The more I research this, the more confused I get!

So, I was looking for real-world users of fsqrt, do look at how they
determine availability. The first such user I found was Apple's libm.
Tracing back to where they set their feature flags, I found this file

http://opensource.apple.com/source/xnu/xnu-1456.1.26/osfmk/ppc/start.s

If you search for _cpu_capabilities, around line 180 you'll find a
comment saying the feature flags in this file are only defaults and may
be changed by initialization code. But I couldn't find anything setting
more flags, if anything, flags got removed. And the only models that
have the flag kHasFsqrt are the 970 and the 970FX.

But then I noticed that their processor list is kind of small, so I
continued the search. I found this e-mail claiming the 604 supports the
instruction:

http://aps.anl.gov/epics/tech-talk/2011/msg01247.php

But if you look at datasheets of the 604, they say nothing either way.
But alright, the 604 is and old model (intrduced in 1994), maybe fsqrt
wasn't defined then.

I personally work with the e300 (at my day job), and at least their
datasheet makes it clear that fsqrt is not supported. Actually,
apparently Freescale aren't big fans of this instruction at all,
according to this comment:

https://github.com/ibmruntimes/v8ppc/issues/119#issuecomment-72705975

Wikipedia claims, however, that it wasn't until the 620 that the square
root instruction was put into hardware. I tried to find a 620 datasheet,
but no luck so far.

Next family on the list would be the 4xx. 403 can be discounted
immediately as it lacks an FPU. Since the 401 is stripped down even
further, it also has no FPU. From the 405 onward it get's dicey as they
went the way of the x87: You could connect an external FPU if desired.

I found one for 405 here:

http://www.xilinx.com/support/documentation/ip_documentation/apu_fpu.pdf

That one doesn't support fsqrt, at least not enough for our purposes,
but it does support fsqrts (that's the single precision variant). That's
a whole new level of weird.

As for the rest: I hope, Apple got it right, because afer the 970,
nothing more is listed in Wikipedia.

So, as you can see, the whole thing is a mess.

> Rich

Ciao,
Markus


  reply	other threads:[~2016-10-01 19:53 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-29 14:21 Markus Wichmann
2016-09-29 14:57 ` Szabolcs Nagy
2016-09-29 15:23 ` Rich Felker
2016-09-29 17:08   ` Markus Wichmann
2016-09-29 18:13     ` Rich Felker
2016-09-29 18:52       ` Adhemerval Zanella
2016-09-29 22:05         ` Szabolcs Nagy
2016-09-29 23:14           ` Adhemerval Zanella
2016-09-30  4:56       ` Markus Wichmann
2016-10-01  5:50         ` Rich Felker
2016-10-01  8:52           ` Markus Wichmann
2016-10-01 15:10             ` Rich Felker
2016-10-01 19:53               ` Markus Wichmann [this message]
2016-10-02 13:59                 ` Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161001195304.GF22343@voyager \
    --to=nullplan@gmx.net \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).