https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30527

Nate Eldredge <nate at thatsmathematics dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nate at thatsmathematics dot 
com

--- Comment #8 from Nate Eldredge <nate at thatsmathematics dot com> ---
For arm/aarch64 in particular, there is an extra wrinkle, which is that
armclang *does* support and document the template modifiers.  See
https://developer.arm.com/documentation/100067/0610/armclang-Inline-Assembler/Inline-assembly-template-modifiers?lang=en.
 As best I can tell, they are exactly the same as what gcc already supports
(undocumentedly).

So that makes this into a compatibility issue.  People may be writing code for
armclang using the modifiers, and then want to build with gcc instead.  In
practice it will work fine, but from the gcc docs, you wouldn't know it.

On these targets, some of the modifiers are pretty important, and there are
fairly basic things that you simply can't do without them.  For example, on
aarch64, the b/h/s/d/q modifiers to get the names of various scalar pieces of a
vector register (v15 -> b15 / h15 / s15 / d15 / q15).  It's just impossible to
write any scalar floating-point asm without this, or SIMD code using the
"across vector" instructions like ADDV which need a scalar output operand.  

Or, the c modifier to suppress the leading # on an immediate.  This one is
documented for x86, where the need for it is similarly obvious, but no
indication in the docs that it works on arm/aarch64 as well.

I really do think it would be a good idea for these to become officially
supported and documented by gcc, at least for these targets.
  • [Bug target/30527] Use of in... nate at thatsmathematics dot com via Gcc-bugs

Reply via email to