summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/gas/testsuite/gas/arm/group-reloc-ldrs-encoding-bad.s
blob: ac7a90f0e9e2e8d68e421924225983c6ffca4820 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@ Tests that are meant to fail during encoding of LDRS group relocations.

	.text

	.macro ldrtest2 load sym offset

	\load	r0, [r0, #:pc_g1:(\sym \offset)]
	\load	r0, [r0, #:pc_g2:(\sym \offset)]
	\load	r0, [r0, #:sb_g0:(\sym \offset)]
	\load	r0, [r0, #:sb_g1:(\sym \offset)]
	\load	r0, [r0, #:sb_g2:(\sym \offset)]

	.endm

	.macro ldrtest load store sym offset

	ldrtest2 \load \sym \offset

	\store	r0, [r0, #:pc_g1:(\sym \offset)]
	\store	r0, [r0, #:pc_g2:(\sym \offset)]
	\store	r0, [r0, #:sb_g0:(\sym \offset)]
	\store	r0, [r0, #:sb_g1:(\sym \offset)]
	\store	r0, [r0, #:sb_g2:(\sym \offset)]

	.endm

@ LDRD/STRD/LDRH/STRH/LDRSH/LDRSB only have 8 bits available for the 
@ magnitude of the addend.  So these should all (just) fail.

	ldrtest ldrd strd f "+ 256"
	ldrtest ldrh strh f "+ 256"
	ldrtest2 ldrsh f "+ 256"
	ldrtest2 ldrsb f "+ 256"

	ldrtest ldrd strd f "- 256"
	ldrtest ldrh strh f "- 256"
	ldrtest2 ldrsh f "- 256"
	ldrtest2 ldrsb f "- 256"

@ The same as the above, but for a local symbol.

	ldrtest ldrd strd localsym "+ 256"
	ldrtest ldrh strh localsym "+ 256"
	ldrtest2 ldrsh localsym "+ 256"
	ldrtest2 ldrsb localsym "+ 256"

	ldrtest ldrd strd localsym "- 256"
	ldrtest ldrh strh localsym "- 256"
	ldrtest2 ldrsh localsym "- 256"
	ldrtest2 ldrsb localsym "- 256"

localsym:
	mov	r0, #0