[LLVMdev] Problems with 64-bit register operands of inline asm on ARM

Måns Rullgård mans at mansr.com
Wed Mar 13 11:21:58 PDT 2013

Jim Grosbach <grosbach at apple.com> writes:

> On Mar 13, 2013, at 11:01 AM, Renato Golin <renato.golin at linaro.org>
> wrote:
>> On 13 March 2013 17:57, Jim Grosbach <grosbach at apple.com> wrote:
>>> It seems to me that LLVM doesn’t parse the inline asm body. It just
>>> checks the constraints, (ie. Input/output interface). During ASM
>>> writing, it then binding those constraints to placeholders like %0,
>>> %1.
>> This is correct.
>> Ok, so maybe checking all possible ways to require paired registers
>> is not such a bad idea after all.
> The constraints are the right way to do it. There shouldn't be any
> magic beyond that.

Since there is no special operand constraint for a register pair, there
is no way to tell at that level.

GCC has (implicitly) defined 64-bit register operands as residing in
even/odd pairs, thus leaving inline asm free to make all manner of
assumptions based on this.  The only way I see to guarantee
compatibility is to mimic the gcc behaviour here.  It may be slightly
suboptimal in a few cases, but it's the safe choice.

Måns Rullgård
mans at mansr.com

More information about the llvm-dev mailing list