summaryrefslogtreecommitdiff
path: root/gas/testsuite/gas/arm/thumb.s
blob: 422b088de856fb046fa4b31e8b8ceca79477828a (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
	.text
	.code 16
.foo:	
	lsl	r2, r1, #3
	lsr	r3, r4, #31
wibble/data:	
	asr	r7, r0, #5

	lsl	r1, r2, #0
	lsr	r3, r4, #0
	asr	r4, r5, #0

	lsr	r6, r7, #32
	asr	r0, r1, #32

	add	r1, r2, r3
	add	r2, r4, #2
	sub	r3, r5, r7
	sub	r2, r4, #7

	mov	r4, #255
	cmp	r3, #250
	add	r6, #123
	sub	r5, #128

	and	r3, r5
	eor	r4, r6
	lsl	r1, r0
	lsr	r2, r3
	asr	r4, r6
	adc	r5, r7
	sbc	r0, r4
	ror	r1, r4
	tst	r2, r5
	neg	r1, r1
	cmp	r2, r3
	cmn	r1, r4
	orr	r0, r3
	mul	r4, r5
	bic	r5, r7
	mvn	r5, r5

	add	r1, r13
	add	r12, r2
	add	r9, r9
	cmp	r1, r14
	cmp	r8, r0
	cmp	r12, r14
	mov	r0, r9
	mov	r9, r4
	mov	r8, r8
	bx	r7
	bx	r8
	.align 0
	bx	pc

	ldr	r3, [pc, #128]
	ldr	r4, bar

	str	r0, [r1, r2]
	strb	r1, [r2, r4]
	ldr	r5, [r6, r7]
	ldrb	r2, [r4, r5]
	
	.align 0
bar:	
	strh	r1, [r2, r3]
	ldrh	r3, [r4, r0]
	ldsb	r1, [r6, r7]
	ldsh	r2, [r0, r5]

	str	r3, [r3, #124]
	ldr	r1, [r4, #124]
	ldr	r5, [r5]
	strb	r1, [r5, #31]
	strb	r1, [r4, #5]
	strb	r2, [r6]

	strh	r4, [r5, #62]
	ldrh	r5, [r0, #4]
	ldrh	r3, [r2]

	str	r3, [r13, #1020]
	ldr	r1, [r13, #44]
	ldr	r2, [r13]

	add	r7, r15, #1020
	add	r4, r13, #512

	add	r13, #268
	add	r13, #-104
	sub	r13, #268
	sub	r13, #-108

	push	{r0, r1, r2, r4}
	push	{r0, r3-r7, lr}
	pop	{r3, r4, r7}
	pop	{r0-r7, r15}

	stmia	r3!, {r0, r1, r4-r7}
	ldmia	r0!, {r1-r7}

	beq	bar
	bne	bar
	bcs	bar
	bcc	bar
	bmi	bar
	bpl	bar
	bvs	bar
	bvc	bar
	bhi	bar
	bls	bar
	bge	bar
	bgt	bar
	blt	bar
	bgt	bar
	ble	bar
	bhi	bar
	blo	bar
	bul	bar
	bal	bar

close:
	lsl	r4, r5, #near - close
near:
	add	r2, r3, #near - close

	add	sp, sp, #127 << 2
	sub	sp, sp, #127 << 2
	add	r0, sp, #255 << 2
	add	r0, pc, #255 << 2

	add	sp, sp, #bar - .foo
	sub	sp, sp, #bar - .foo
	add	r0, sp, #bar - .foo
	add	r0, pc, #bar - .foo

	add	r1, #bar - .foo
	mov	r6, #bar - .foo
	cmp	r7, #bar - .foo

	nop
	nop

	.arm
.localbar:
	b	.localbar
	b	.wombat
	bl	.localbar
	bl	.wombat

	bx	r0
	swi	0x123456

	.thumb
	@ The following will be disassembled incorrectly if we do not
	@ have a Thumb symbol defined before the first Thumb instruction:
morethumb:
	adr	r0, forwardonly

	b	.foo
	b	.wombat
	bl	.foo
	bl	.wombat

	bx	r0

	swi	0xff
	.align	0
forwardonly:
	beq	.wombat
	bne	.wombat
	bcs	.wombat
	bcc	.wombat
	bmi	.wombat
	bpl	.wombat
	bvs	.wombat
	bvc	.wombat
	bhi	.wombat
	bls	.wombat
	bge	.wombat
	bgt	.wombat
	blt	.wombat
	bgt	.wombat
	ble	.wombat
	bhi	.wombat
	blo	.wombat
	bul	.wombat

.back:
	bl	.local
	.space	(1 << 11)	@ leave space to force long offsets
.local:
	bl	.back