mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Khem Raj <raj.khem@gmail.com>
To: musl@lists.openwall.com
Subject: Re: status of armhf asm with VFP instructions
Date: Thu, 15 Oct 2015 23:42:56 -0700	[thread overview]
Message-ID: <1C314980-DEC4-4C34-9126-1AA2FA231F4C@gmail.com> (raw)
In-Reply-To: <20151015231606.GX10551@port70.net>

[-- Attachment #1: Type: text/plain, Size: 3442 bytes --]


> On Oct 15, 2015, at 4:16 PM, Szabolcs Nagy <nsz@port70.net> wrote:
> 
> * Rich Felker <dalias@libc.org> [2015-10-15 18:44:25 -0400]:
>> 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,..
> 
> sorry, for reading/writing fpscr fmrx/fmxr can be used in the
> old syntax instead of vmrs/vmsr, but clang does not know
> those names.
> 
>>> 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.
>> 
> 
> vmrs/vmsr can break on old binutils versions (2.18 - 2.20) and
> 2.20 is not that ancient.. is that ok?
> 
>> 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...
>> 
> 
> most likely ual is the long term solution.

thats right.

> 
> maybe it is best to switch to ual and then write that script
> if ppl with old binutils run into issues.

agree here.


[-- Attachment #2: Message signed with OpenPGP using GPGMail --]
[-- Type: application/pgp-signature, Size: 204 bytes --]

      parent reply	other threads:[~2015-10-16  6:42 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
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 [this message]

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=1C314980-DEC4-4C34-9126-1AA2FA231F4C@gmail.com \
    --to=raj.khem@gmail.com \
    --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).