Meaning of IR inline assembly

Hello,

Most of the IR language is correctly explained; but with inline assembly I feel alone at some point:

define i32 @main(i32 %argc, i8** %argv) #0 {
  ... //some uninteresting bloat here
  call void asm sideeffect "outw %eax, $0", "imr,~{dirflag},~{fpsr},~{flags}"(i32 %8) #2, !srcloc !2
  ret i32 0
}

I reduced the above code to the offending line containing: "imr,~{dirflag},~{fpsr},~{flags}".

How should I interpret this? I found no resource on this over the net. Maybe there are more options like that?
Do you have a link explaining this more in details?

thanks a lot.
--е║
Alex

I reduced the above code to the offending line containing: "imr,~{dirflag},~{fpsr},~{flags}".

How should I interpret this? I found no resource on this over the net. Maybe there are more options like that?
Do you have a link explaining this more in details?

It’s called a constraint string and it is documented here:

http://llvm.org/docs/LangRef.html#inline-asm-constraint-string

Cheers,

d

Thanks, but I could not find the imr, dirflag, fpsr constraints here. Just the usual gcc/clang inline assembly constraints.
Those one were of my concern, actually :slight_smile:

Those are register names.

-Krzysztof

The names in {} are register names. The "imr" is explained here:
http://llvm.org/docs/LangRef.html#supported-constraint-code-list

-K

Got it thanks!

--е║
Alex