Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220301131037.GF7074@brightrain.aerifal.cx>
Date: Tue, 1 Mar 2022 08:10:38 -0500
From: Rich Felker <dalias@...c.org>
To: SIMONE MIONE <205212@...denti.unimore.it>
Cc: noloader@...il.com, musl@...ts.openwall.com
Subject: Re: musl how to use hard float with aarch64-none-elf-gcc

On Tue, Mar 01, 2022 at 09:36:44AM +0100, SIMONE MIONE wrote:
> My problem is I don't know how to implement such functions. I mean,
> functions like "__extenddftf2" and so on.
> Does someone know how to do that? Does someone have some reference I can
> check to implement those functions?

They come from the compiler runtime -- part of the compiler's contract
in generating calls to these functions to implement floating point
arithmetic is that it will *provide* them. This is via libgcc.a if
you're using gcc, or compiler-rt if you're using clang/LLVM. Other
compilers should either document that they expect you to use one of
these or provide their own (for example, PCC has its own).

> I already have integrated newlib into my system and I didn't have these
> issues. Now I want to integrate musl but I can't because of this. What am I
> missing?

It could be that configure didn't detect "LIBCC" correctly for you, or
that you're building in some way not using the configure script in
which case you'll need to make sure it's set. There's nothing
OS/distro-specific about these functions so, short of having something
else, you can just use libgcc.a from an aarch64 gcc toolchain if
needed.

Rich


> Il giorno ven 25 feb 2022 alle ore 19:01 Rich Felker <dalias@...c.org> ha
> scritto:
> 
> > On Fri, Feb 25, 2022 at 04:21:59PM +0100, SIMONE MIONE wrote:
> > > And what if I don't want quad precision?
> >
> > Then you don't have to use it, but at least some minimal amount of the
> > support code for it will be linked if you're using printf, since
> > linking can't see what format strings you're using with printf.
> >
> > > I mean, when I try to print a float, vfprintf casts the float to a double
> > > (and that's ok), but it seems like musl uses double as long double, so it
> > > tries to cast the double to long double.
> > > Is it true?
> >
> > Yes, the vfprintf converts all types up to the largest width/precision
> > one when loading them so that there are not duplicate code paths. In
> > the case of floating point, this is completely inconsequential because
> > only a very small number of operations are performed on the floating
> > point type to extract the exponent and mantissa and rounding
> > direction. After that it's all integer arithmetic. And of course the
> > result is not affected by this because all values of the narrower type
> > are representable in the wider type (that's the whole point).
> >
> > > Can I use a double (or float) as a double precision instead of
> > > quad precision?
> >
> > In short, no. There is no defined or supported ABI for aarch64 like
> > that.
> >
> > In theory it would be possible to define, with assistance from the
> > tooling (compiler etc), an ABI for aarch64 where long double is just a
> > copy of double, but I'm unclear what value you'd be hoping to get out
> > of that. Saving a small amount of .text size?
> >
> > Rich
> >
> >
> > > Il giorno mer 16 feb 2022 alle ore 15:57 Rich Felker <dalias@...c.org>
> > ha
> > > scritto:
> > >
> > > > On Wed, Feb 16, 2022 at 12:59:13PM +0100, SIMONE MIONE wrote:
> > > > > Thank you all for your reply.
> > > > > I meant when I add musl's lib*.a into my makefile, the compiler
> > complains
> > > > > about "undefined reference to __addtf3" (and others). Isn't that
> > > > > soft-float? Or emulation float?
> > > >
> > > > It's the implementation of long double which is IEEE quad in the
> > > > aarch64 ABI.
> > > >
> > > > > My supervisor told me "we already have float implementation so we
> > don't
> > > > > need those functions". So I was wondering if I need to disable it in
> > some
> > > > > way.
> > > >
> > > > No, you need them because there is no fpu implementation of quad.
> > > >
> > > >
> > > > > Il giorno mer 16 feb 2022 alle ore 12:32 Jeffrey Walton <
> > > > noloader@...il.com>
> > > > > ha scritto:
> > > > >
> > > > > > On Wed, Feb 16, 2022 at 6:29 AM Szabolcs Nagy <nsz@...t70.net>
> > wrote:
> > > > > > >
> > > > > > > * Jeffrey Walton <noloader@...il.com> [2022-02-16 05:24:48
> > -0500]:
> > > > > > > > On Wed, Feb 16, 2022 at 4:51 AM SIMONE MIONE <
> > > > > > 205212@...denti.unimore.it> wrote:
> > > > > > > > >
> > > > > > > > > I am trying to integrate musl in a baremetal environment. I
> > > > already
> > > > > > have float support but I can't manage to disable soft-float by
> > musl.
> > > > > > > > >
> > > > > > > > > I configure with:
> > > > > > > > > ./configure --target=aarch64-none-elf --enable-debug
> > > > --disable-shared
> > > > > > > > > And simple compile with:
> > > > > > > > > make
> > > > > > > > >
> > > > > > > > > Does anyone know how to use hardfloat instead of soft float?
> > Is
> > > > > > there any option or flag? Thank you
> > > > > > > >
> > > > > > > > The GCC options for hard-floats are -mfpu=neon
> > -mfloat-abi=hard. In
> > > > > > > > later versions of GCC, you can also use -mfpu=auto (sometimes).
> > > > > > >
> > > > > > > that's for 32bit arm
> > > > > > >
> > > > > > > there is no soft float abi for aarch64, so i'm not sure what's
> > going
> > > > on.
> > > > > >
> > > > > > Oh, you're right My bad. I did not notice it was Aarch64.
> > > > > >
> > > > > > Jeff
> > > > > >
> > > >
> >

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.