[LLVMdev] Support for delayed constants in ARM integrated assembler
Renato Golin
renato.golin at linaro.org
Wed Dec 11 02:44:54 PST 2013
Hi David,
I agree we should support this. I've added a few more cases in the bug itself.
cheers,
--renato
On 10 December 2013 22:12, David Peixotto <dpeixott at codeaurora.org> wrote:
> I have some assembly code that uses .equ to set a symbol to a computed
> constant. It works in GCC but not LLVM. I am not sure about the correct
> terminology, but here is an example:
>
> .syntax unified
> .set size, end - start
> add r0, r0, #size
>
> start:
> .space 0x10
> end:
>
> GCC will compile this to `add r0, r0, #16`. Compiling with llvm-mc gives:
>
> set.s:4:13: error: invalid operand for instruction
> add r0, r0, #size
> ^
> It works for llvm-mc if the #size is set to a constant (e.g. .set size,
> 0x10).
>
> I took a quick shot at implementing this for llvm. I had some success by
> allowing an MCExpr to impersonate a constant and then using a MCFixup to
> write the actual constant value later. I am not sure if this is the best
> approach for implementing this feature.
>
> What do others think? Is this a feature we can support for ARM? Can we
> (should we?) do it in a target-independent way?
>
> (filed bug http://llvm.org/bugs/show_bug.cgi?id=18202)
> -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by The Linux Foundation
>
>
>
>
More information about the llvm-dev
mailing list