[LLVMdev] inline asm

Eli Friedman eli.friedman at gmail.com
Tue May 17 11:03:42 PDT 2011


2011/5/17 Hans Stimer <hans.stimer at gmail.com>:
> Are there any examples for the inline assembler or more complete docs?
> Questions:
> * What are the syntax and semantics of constraints?

Try the gcc inline asm docs; we don't have very good ones.

> * If I load up specific registers in the inline assembly, will llvm make
> sure that those registers are unassigned or should I save the registers and
> restore them? i.e. does llvm try and understand what is going on in the
> inline assembly, or is it a black box to llvm analysis?

You have to mark registers which are clobbered.

> * What is the syntax of the inline assembly? i.e. intel, att, ...?
> The test code is complete mystery to me:
>
> ; From test/Assembler/alignstack.II
> define void @test1() nounwind {
> ; CHECK: test1
> ; CHECK: sideeffect
> ; CHECK-NOT: alignstack
> tail call void asm sideeffect "mov", "~{dirflag},~{fpsr},~{flags}"()
> nounwind
> ret void
> ; CHECK: ret
> }
>
> * Presumably "mov" is the inline assembly string, but that isn't going to
> assemble without arguments -- are arguments append to the string somehow?

That isn't a working example of an inline asm; inline asm doesn't get
parsed if you're just emitting assembly code.

> * Is anyone using the inline assembler? I would really like to see how
> others are using it.

Look for examples in C, and convert them to LLVM IR with clang.

-Eli



More information about the llvm-dev mailing list