[LLVMdev] Add support for ldr pseudo instruction in ARM integrated assembler

Renato Golin
Fri, 25 Oct 2013 20:11:10 -0000

On 25 October 2013 18:33, David Peixotto <dpeixott at codeaurora.org>
wrote:

> Both armasm and gnu as support an ldr pseudo instruction for loading
> constants that lowers to either a mov, movn, or a pc-relative ldr from the
> constant pool. It would be great if the llvm integrated assembler could
> support this feature as well.
>

Hi David,

As much as I think that it's important to add support for old codebases to
be compiled, I also have to consider the importance of compatibility and
compiler sanity.

Adding support for this GNU extension (that ARMCC also seem to support) can:

1. Add multiple representations to the same operation, which is fine when
you're converting ASM into binary, but not so much when you're doing the
reverse.

We have been trying to deprecate pre-UAL and GNU-extensions as much as
possible, and this is a move that is supported from most of the ARM LLVM
community. The main reason is, as I said, to be able to come to and from
ASM, having the same canonical representation. This will make it a lot
easier to test the compiler and to avoid silent asm/disasm failures not
covered by the tests. We also have been avoiding to remove pre-UAL support
just because "bacon", but if it impacts a needed change, or if
removing it
fixes a bug, we tend to trim it off.

2. Increment the complexity of the assembler and disassembler in areas that
you cannot predict right now.

It seems that this syntax allows for you to define symbols and constant
pools, and both have interactions with the rest of the code generation,
relocation symbols, etc. I can't guarantee right now that there will be no
conflicts with anything elsewhere, and to make sure we're covering all
bases, a huge amount of tests will need to be added. Of course, people are
free to work on things that make their work compile and run, but you have
to be aware that GNU-extensions and pre-UAL features are not taken lightly.

Ultimately, if there is a feature that cannot be done any other way in ARM
UAL, than we shall consider the options and implement the best. But if this
is just syntactic sugar, than I'd strongly suggest you to upgrade your
assembly files. The argument that "GCC does it" is used far too often
in
the LLVM list, and I can't say I'm a big fan of it. GCC did not take
*only*
smart decisions in its life (neither did LLVM), and copying everything from
one side to the other blindly is not a good strategy.

I may be wrong, correct me if I'm wrong, but as far as I got it, this looks
just like syntactic sugar.

cheers,
--renato
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20131025/273aedfd/attachment.html>