mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: status of armhf asm with VFP instructions
Date: Thu, 15 Oct 2015 18:44:25 -0400	[thread overview]
Message-ID: <20151015224425.GA8645@brightrain.aerifal.cx> (raw)
In-Reply-To: <20151015223320.GW10551@port70.net>

On Fri, Oct 16, 2015 at 12:33:20AM +0200, Szabolcs Nagy wrote:
> it is not possible to write arm asm in a way that pleases all
> assemblers, here is a summary of the problems relevant to musl:
> 
> some instructions can be written in several ways since UAL
> (= unified assembler language) was introduced to unify arm
> and thumb instruction mnemonics.
> 
> in case of armhf VFP instructions musl uses the following ones
> in hand written asm:
> 
>  hex       ual         old
> 
>  eeb1XacX  vsqrt.f32   fsqrts
>  eeb1XbcX  vsqrt.f64   fsqrtd
>  eeb0XacX  vabs.f64    fabss
>  eeb0XbcX  vabs.f64    fabsd
>  eef1Xa10  vmrs fpscr  mrc p10,7,..
>  eee1Xa10  vmsr fpscr  mcr p10,7,..
> 
> the issues:
> 
> (1) binutils gas rejects UAL VFP instructions unless either
> the -mfpu=<vfp variant> option is passed or the asm source
> has '.fpu <vfp variant>' directive, the old names work though
> (if the target is hard float).  A gcc toolchain built
> --with-float=hard but without --with-fpu=<vfp variant> does not
> pass -mfpu to the assembler.
> 
> (2) Most UAL mnemonics were added in binutils 2.18, older
> binutils only supports the old syntax.  Some UAL mnemonics were
> added later, vmrs and vmsr only appear in binutils 2.21
> (released in 2010).
> 
> (3) The clang assembler does not support old mnemonics in general
> but includes a few exceptions (e.g. fabs and fsqrt are supported,
> but not the mrc or mcr coprocessor instructions).
> 
> Using UAL asm is the clean solution, but then to fix (1) we
> should have .fpu directives in the asm files.
> 
> However the conflict between (2) and (3) means that fenv code
> using vmrs and vmsr either drops support for old binutils gas
> or the clang assembler.

It seems we're already using the new forms vsqrt and vabs in
src/math/armhf/*.s. So using vmrs/vmsr presumably will not break
support for any toolchains that work now.

I think the reason this went unnoticed for so long is that Aboriginal
Linux (the only real user of the ancient binutils, due to GPL v2 vs v3
issues) does not use the armhf ABI at all; it only targets standard
EABI for which musl does not use any math/fenv asm.

So I'm ok with the fpu-related changes proposed, but I'm not sure what
to do about UAL issues elsewhere. Right now we have a lot of files
with instructions written as .word in them which is a mess and which
precludes Cortex-M (thumb2-only) targets. These are files which need
to be built even on non-hf, so changing them presumably will break
support for old binutils. As a workaround, users needing old binutils
could perhaps misuse the ASM_CMD var in the Makefile to run a sed
script that replaces UAL with old-syntax asm. Or someone could patch
the old binutils to accept UAL...

Rich


  reply	other threads:[~2015-10-15 22:44 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-15 22:33 Szabolcs Nagy
2015-10-15 22:44 ` Rich Felker [this message]
2015-10-15 23:16   ` Szabolcs Nagy
2015-10-15 23:58     ` Szabolcs Nagy
2015-10-19  6:12       ` Rich Felker
2015-10-16  0:00     ` Rich Felker
2015-10-16  0:33       ` Szabolcs Nagy
2015-10-16  1:03         ` Rich Felker
2015-10-16  3:23           ` Rich Felker
2015-10-16  6:42     ` Khem Raj

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=20151015224425.GA8645@brightrain.aerifal.cx \
    --to=dalias@libc.org \
    --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).