1@ Tests for LDR group relocations. 2 3 .text 4 5 .macro ldrtest load store sym offset 6 7 \load r0, [r0, #:pc_g0:(\sym \offset)] 8 \load r0, [r0, #:pc_g1:(\sym \offset)] 9 \load r0, [r0, #:pc_g2:(\sym \offset)] 10 \load r0, [r0, #:sb_g0:(\sym \offset)] 11 \load r0, [r0, #:sb_g1:(\sym \offset)] 12 \load r0, [r0, #:sb_g2:(\sym \offset)] 13 14 \store r0, [r0, #:pc_g0:(\sym \offset)] 15 \store r0, [r0, #:pc_g1:(\sym \offset)] 16 \store r0, [r0, #:pc_g2:(\sym \offset)] 17 \store r0, [r0, #:sb_g0:(\sym \offset)] 18 \store r0, [r0, #:sb_g1:(\sym \offset)] 19 \store r0, [r0, #:sb_g2:(\sym \offset)] 20 21 .endm 22 23@ LDR/STR/LDRB/STRB only have 12 bits available for the magnitude of the addend. 24@ So these should all (just) work. 25 26 ldrtest ldr str f "+ 4095" 27 ldrtest ldrb strb f "+ 4095" 28 ldrtest ldr str f "- 4095" 29 ldrtest ldrb strb f "- 4095" 30 31@ The same as the above, but for a local symbol. These should not be 32@ resolved by the assembler but instead left to the linker. 33 34 ldrtest ldr str localsym "+ 4095" 35 ldrtest ldrb strb localsym "+ 4095" 36 ldrtest ldr str localsym "- 4095" 37 ldrtest ldrb strb localsym "- 4095" 38 39localsym: 40 mov r0, #0 41 42