Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Thu, 13 Sep 2018 11:43:27 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: musl@...ts.openwall.com
Subject: Re: Cortex-M support

* Rich Felker <dalias@...c.org> [2018-09-12 21:24:10 -0400]:
> On Thu, Sep 13, 2018 at 03:06:52AM +0200, Pierluigi Passaro wrote:
> > 2) trying to enable hardfp support, the build fails
> > - fabs try calling vabs.f64 assembly instruction
> > - sqrt try calling vsqrt.f64 assembly instruction
> > As far as I understood, vXXX.f64 instructions are only available
> > with single/double precision FPU, not with half precision.

i think half precision is used incorrectly here: single is 32bit
half is 16bit (arm has half precision instructions so mixing these
can be confusing)

> > I'm wondering if the assembly optimization should be wrapped by
> > something like
> >    #if ... && (__ARM_FP > 7)
> > 
> > I'm still trying to setup a reasonable build/test environment, but I
> > suppose I need some suggestions on how to proceed.
> > Any hints?
> 
> Configurations where float and double are anything other than IEEE
> single and double with IEEE-conforming semantics, or where long double
> does not have IEEE-conforming semantics, are not supported/supportable
> by musl, by intent. I would assume there's some way to configure the
> compiler to offer a separate half-precision hardfloat type on an
> otherwise soft-float EABI target with conforming float/double, but if
> not this is a compiler deficiency that makes it impossible to use at
> this time.
> 
> There were some SH4 models that also had this limitation (only
> single-precision FPU) and since GCC's only profile for them redefines
> double as single, rather than doing hard-single and soft-double, we
> just don't support hardfloat at all on them.
> 
> In principle you could build musl as soft-float (with a softfloat
> toolchain) but use a separate toolchain with half-precision hardfloat
> for your applications. There would be no way to call stdlib interfaces
> that take floating point arguments without a glue layer though. Use of
> setjmp/longjmp might also be problematic (failure to restore float
> regs) but this could possibly be mitigated.

note that a large part of the float code in libc is in the
math library which expects efficient double arithmetics,
i plan to rewrite the most important single precision math
functions using double arithmetics, this gives significant
benefits on all systems except ones with single precision
only hw.

(for soft float systems using int arithmetics is the best,
for single prec only systems using single prec arithmetics
is, there are also many places where musl could be better
size optimized, but musl does not have such implementation
variations for maintainability reasons.)

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.