Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Fri, 16 Oct 2015 00:33:20 +0200
From: Szabolcs Nagy <>
Subject: status of armhf asm with VFP instructions

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.

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.