|
Date: Thu, 15 Oct 2015 23:42:56 -0700
From: Khem Raj <raj.khem@...il.com>
To: musl@...ts.openwall.com
Subject: Re: status of armhf asm with VFP instructions
> On Oct 15, 2015, at 4:16 PM, Szabolcs Nagy <nsz@...t70.net> wrote:
>
> * Rich Felker <dalias@...c.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.
Download attachment "signature.asc" of type "application/pgp-signature" (205 bytes)
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.