[LLVMdev] Intel vs. AT&T Assembly.
ralph at inputplus.co.uk
Mon May 1 04:39:55 PDT 2006
> The LLVM X86 backend started out emitting intel mode for use with GAS
> and it's "intel syntax mode" (which does use registers with %'s).
> Unfortunately GAS has (or commonly available versions have) a number
> of bugs in intel syntax mode (e.g. you can't define a function named
> 'dword'), so we switched to using AT&T syntax.
Ah, OK. The current gas manual says Intel register operands are
undelimeted, i.e. no `%'. Perhaps they've changed.
> Intel syntax mode was retained because it's nicer to read :), and
> because it may be useful in the future. As Jeff says, patches are
> welcome to make it do something useful, e.g. be assemblable with MASM
> or NASM.
NASM might be the nicer target since it's GNU LGPL and runs on multiple
OS. Its home page is broken at the moment, but the manual pages work.
You went onto write:
> > Let's see. Ralph correctly points out that LLVM isn't producing
> > anything like Intel syntax. ...
"Oh, no I didn't". :-) It was me that was saying llc's att and intel
are already very different but both happen to have `%'.
> This is not true. LLVM produces something very close to what GAS
> accepts in intel mode: that is, we produce fully intel syntax (e.g.
> "DWORD PTR", no opcode size suffixes, etc) but we prepend % onto
> registers. This is what GAS expects (i.e., it's gas intel mode). I
> believe there is a GAS option to turn off the % prefix, but we never
> used it because it had other bugs.
OK, looks like they may have made that the default now.
> As was independently pointed out, we're quite close to supporting MASM
> (or whatever) intel syntax. Removing the %'s, for example, is
> trivial. Anyone who wants to do so is welcome to. The current
> -x86-asm-syntax=intel support is not currently compatible with any
> assembler that I know of. Patches to make it useful are welcome.
OK. Thanks for clarifying.
More information about the llvm-dev