1	.text
2	.code 16
3.foo:
4	lsl	r2, r1, #3
5	lsr	r3, r4, #31
6wibble/data:
7	asr	r7, r0, #5
8
9	lsl	r1, r2, #0
10	lsr	r3, r4, #0
11	asr	r4, r5, #0
12
13	lsr	r6, r7, #32
14	asr	r0, r1, #32
15
16	add	r1, r2, r3
17	add	r2, r4, #2
18	sub	r3, r5, r7
19	sub	r2, r4, #7
20
21	mov	r4, #255
22	cmp	r3, #250
23	add	r6, #123
24	sub	r5, #128
25
26	and	r3, r5
27	eor	r4, r6
28	lsl	r1, r0
29	lsr	r2, r3
30	asr	r4, r6
31	adc	r5, r7
32	sbc	r0, r4
33	ror	r1, r4
34	tst	r2, r5
35	neg	r1, r1
36	cmp	r2, r3
37	cmn	r1, r4
38	orr	r0, r3
39	mul	r4, r5
40	bic	r5, r7
41	mvn	r5, r5
42
43	add	r1, r13
44	add	r12, r2
45	add	r9, r9
46	cmp	r1, r14
47	cmp	r8, r0
48	cmp	r12, r14
49	mov	r0, r9
50	mov	r9, r4
51	mov	r8, r8
52	bx	r7
53	bx	r8
54	.align 0
55	bx	pc
56
57	ldr	r3, [pc, #128]
58	ldr	r4, bar
59
60	str	r0, [r1, r2]
61	strb	r1, [r2, r4]
62	ldr	r5, [r6, r7]
63	ldrb	r2, [r4, r5]
64
65	.align 0
66bar:
67	strh	r1, [r2, r3]
68	ldrh	r3, [r4, r0]
69	ldsb	r1, [r6, r7]
70	ldsh	r2, [r0, r5]
71
72	str	r3, [r3, #124]
73	ldr	r1, [r4, #124]
74	ldr	r5, [r5]
75	strb	r1, [r5, #31]
76	strb	r1, [r4, #5]
77	strb	r2, [r6]
78
79	strh	r4, [r5, #62]
80	ldrh	r5, [r0, #4]
81	ldrh	r3, [r2]
82
83	str	r3, [r13, #1020]
84	ldr	r1, [r13, #44]
85	ldr	r2, [r13]
86
87	add	r7, r15, #1020
88	add	r4, r13, #512
89
90	add	r13, #268
91	add	r13, #-104
92	sub	r13, #268
93	sub	r13, #-108
94
95	push	{r0, r1, r2, r4}
96	push	{r0, r3-r7, lr}
97	pop	{r3, r4, r7}
98	pop	{r0-r7, r15}
99
100	stmia	r3!, {r0, r1, r4-r7}
101	ldmia	r0!, {r1-r7}
102
103	beq	bar
104	bne	bar
105	bcs	bar
106	bcc	bar
107	bmi	bar
108	bpl	bar
109	bvs	bar
110	bvc	bar
111	bhi	bar
112	bls	bar
113	bge	bar
114	bgt	bar
115	blt	bar
116	bgt	bar
117	ble	bar
118	bhi	bar
119	blo	bar
120	bul	bar
121	bal	bar
122
123close:
124	lsl	r4, r5, #near - close
125near:
126	add	r2, r3, #near - close
127
128	add	sp, sp, #127 << 2
129	sub	sp, sp, #127 << 2
130	add	r0, sp, #255 << 2
131	add	r0, pc, #255 << 2
132
133	add	sp, sp, #bar - .foo
134	sub	sp, sp, #bar - .foo
135	add	r0, sp, #bar - .foo
136	add	r0, pc, #bar - .foo
137
138	add	r1, #bar - .foo
139	mov	r6, #bar - .foo
140	cmp	r7, #bar - .foo
141
142	nop
143	nop
144
145	.arm
146.localbar:
147	b	.localbar
148	b	.back
149	bl	.localbar
150	bl	.back
151
152	bx	r0
153	swi	0x123456
154
155	.thumb
156	@ The following will be disassembled incorrectly if we do not
157	@ have a Thumb symbol defined before the first Thumb instruction:
158morethumb:
159	adr	r0, forwardonly
160
161	b	.foo
162	b	.back
163	bl	.foo
164	bl	.back
165
166	bx	r0
167
168	swi	0xff
169	.align	0
170forwardonly:
171	beq	.back
172	bne	.back
173	bcs	.back
174	bcc	.back
175	bmi	.back
176	bpl	.back
177	bvs	.back
178	bvc	.back
179	bhi	.back
180	bls	.back
181	bge	.back
182	bgt	.back
183	blt	.back
184	bgt	.back
185	ble	.back
186	bhi	.back
187	blo	.back
188	bul	.back
189
190.back:
191	bl	.local
192	.space	(1 << 11)	@ leave space to force long offsets
193.local:
194	bl	.back
195
196	ldr	r0, .target
197	ldr	r0, .target
198	ldr	r0, [pc, #4]
199	ldr	r0, [pc, #4]
200.target:
201	nop	@ pad for a.out
202	nop
203