[LLVMdev] Implementing the ldr pseudo instruction in ARM integrated assembler
Jim Grosbach
grosbach at apple.com
Fri Nov 1 11:36:00 PDT 2013
Hi David,
In these examples, I don’t see the directive that indicates where the assembler should place the constant pool?
-Jim
On Nov 1, 2013, at 11:16 AM, David Peixotto <dpeixott at codeaurora.org> wrote:
> In an earlier email[1] I proposed adding support for the ldr
> pseud-instruction to the ARM integrated assembler. After some discussion the
> overall consensus seemed to be that it was worth adding. One concern was
> that we needed to have adequate testing. I promised to provide more details
> on what the behavior should be and provide some tests before starting the
> implementation. The FileCheck-ified tests are attached to this email. They
> currently pass when using gcc to assemble the test.
>
> Here are the specific behaviors that are checked in the test:
>
> 1. Check that constants that fit into imm12 are converted to mov
> ldr r0, =0x3
> 2. Check that large constants are converted to ldr from constant pool
> ldr r0, =0x103
> 3. Duplicate constants should be merged to the same constant pool location
> ldr r0, =0x103
> ...
> ldr r0, =0x103
> 4. A section defined in multiple pieces is merged and uses a single constant
> pool
> For example,
>
> .section e, "ax", %progbits
> f6:
> ldr r0, =0x103
> .section f, "ax", %progbits
> f7: add r0, r0, r0
> .section e, "ax", %progbits
> f8:
> add r0, r0, r0
> ldr r0, =0x105
>
> should only produce one constant pool for section e.
>
> 5. Check that symbols can be loaded using ldr pseudo
> ldr r0, =foo
>
> 6. Check that ldr pseudo can be used with expressions
> ldr r0, =0x101+6
> ldr r0, =bar+4
>
> 7. Check that it is used correctly in a macro
> .macro useit_in_a_macro
> ldr r0, =0x101
> ldr r0, =bar
> .endm
> .section k, "ax", %progbits
> f14:
> useit_in_a_macro
>
> 8. Check that an error is issued when the constant pool would be placed too
> far away
> ldr r0, =0x101
> @... lots of instructions
> Error: invalid literal constant: pool needs to be closer
>
> I have not yet looked into the code to see where/how this feature can be
> implemented. Any pointers or feedback is welcome. I've filed a Bug[2] to
> track this issue.
>
> [1]: http://lists.cs.uiuc.edu/pipermail/llvmdev/2013-October/066808.html
> [2]: http://llvm.org/bugs/show_bug.cgi?id=17769
>
> -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by The Linux Foundation
>
>
>
> <ldr_pseudo.s>_______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list