1 @ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
5 @ Check that the assembler can handle the documented syntax from the ARM ARM
6 @ for loads and stores.
11 @------------------------------------------------------------------------------
13 @------------------------------------------------------------------------------
20 @ CHECK: ldr r5, [r7] @ encoding: [0x00,0x50,0x97,0xe5]
21 @ CHECK: ldr r6, [r3, #63] @ encoding: [0x3f,0x60,0x93,0xe5]
22 @ CHECK: ldr r2, [r4, #4095]! @ encoding: [0xff,0x2f,0xb4,0xe5]
23 @ CHECK: ldr r1, [r2], #30 @ encoding: [0x1e,0x10,0x92,0xe4]
24 @ CHECK: ldr r3, [r1], #-30 @ encoding: [0x1e,0x30,0x11,0xe4]
26 @------------------------------------------------------------------------------
27 @ FIXME: LDR (literal)
28 @------------------------------------------------------------------------------
29 @ label operands currently assert the show-encoding asm comment helper due
30 @ to the use of non-contiguous bit ranges for fixups in ARM. Once that's
31 @ cleaned up, we can write useful assembly testcases for these sorts of
34 @------------------------------------------------------------------------------
36 @------------------------------------------------------------------------------
43 ldr r3, [r8, -r2, lsl #15]
44 ldr r1, [r5], r3, asr #15
46 @ CHECK: ldr r3, [r8, r1] @ encoding: [0x01,0x30,0x98,0xe7]
47 @ CHECK: ldr r2, [r5, -r3] @ encoding: [0x03,0x20,0x15,0xe7]
48 @ CHECK: ldr r1, [r5, r9]! @ encoding: [0x09,0x10,0xb5,0xe7]
49 @ CHECK: ldr r6, [r7, -r8]! @ encoding: [0x08,0x60,0x37,0xe7]
50 @ CHECK: ldr r5, [r9], r2 @ encoding: [0x02,0x50,0x99,0xe6]
51 @ CHECK: ldr r4, [r3], -r6 @ encoding: [0x06,0x40,0x13,0xe6]
52 @ CHECK: ldr r3, [r8, -r2, lsl #15] @ encoding: [0x82,0x37,0x18,0xe7]
53 @ CHECK: ldr r1, [r5], r3, asr #15 @ encoding: [0xc3,0x17,0x95,0xe6]
56 @------------------------------------------------------------------------------
58 @------------------------------------------------------------------------------
65 @ CHECK: ldrb r3, [r8] @ encoding: [0x00,0x30,0xd8,0xe5]
66 @ CHECK: ldrb r1, [sp, #63] @ encoding: [0x3f,0x10,0xdd,0xe5]
67 @ CHECK: ldrb r9, [r3, #4095]! @ encoding: [0xff,0x9f,0xf3,0xe5]
68 @ CHECK: ldrb r8, [r1], #22 @ encoding: [0x16,0x80,0xd1,0xe4]
69 @ CHECK: ldrb r2, [r7], #-19 @ encoding: [0x13,0x20,0x57,0xe4]
72 @------------------------------------------------------------------------------
74 @------------------------------------------------------------------------------
81 ldr r7, [r12, -r1, lsl #15]
82 ldr r5, [r2], r9, asr #15
84 @ CHECK: ldr r9, [r8, r5] @ encoding: [0x05,0x90,0x98,0xe7]
85 @ CHECK: ldr r1, [r5, -r1] @ encoding: [0x01,0x10,0x15,0xe7]
86 @ CHECK: ldr r3, [r5, r2]! @ encoding: [0x02,0x30,0xb5,0xe7]
87 @ CHECK: ldr r6, [r9, -r3]! @ encoding: [0x03,0x60,0x39,0xe7]
88 @ CHECK: ldr r2, [r1], r4 @ encoding: [0x04,0x20,0x91,0xe6]
89 @ CHECK: ldr r8, [r4], -r5 @ encoding: [0x05,0x80,0x14,0xe6]
90 @ CHECK: ldr r7, [r12, -r1, lsl #15] @ encoding: [0x81,0x77,0x1c,0xe7]
91 @ CHECK: ldr r5, [r2], r9, asr #15 @ encoding: [0xc9,0x57,0x92,0xe6]
94 @------------------------------------------------------------------------------
96 @------------------------------------------------------------------------------
97 @ FIXME: Optional offset operand.
101 ldrbt r1, [r2], -r6, lsl #12
104 @ CHECK: ldrbt r3, [r1], #4 @ encoding: [0x04,0x30,0xf1,0xe4]
105 @ CHECK: ldrbt r2, [r8], #-8 @ encoding: [0x08,0x20,0x78,0xe4]
106 @ CHECK: ldrbt r8, [r7], r6 @ encoding: [0x06,0x80,0xf7,0xe6]
107 @ CHECK: ldrbt r1, [r2], -r6, lsl #12 @ encoding: [0x06,0x16,0x72,0xe6]
110 @------------------------------------------------------------------------------
112 @------------------------------------------------------------------------------
114 ldrd r7, r8, [r2, #15]
115 ldrd r1, r2, [r9, #32]!
116 ldrd r6, r7, [r1], #8
117 ldrd r1, r2, [r8], #0
118 ldrd r1, r2, [r8], #+0
119 ldrd r1, r2, [r8], #-0
121 @ CHECK: ldrd r3, r4, [r5] @ encoding: [0xd0,0x30,0xc5,0xe1]
122 @ CHECK: ldrd r7, r8, [r2, #15] @ encoding: [0xdf,0x70,0xc2,0xe1]
123 @ CHECK: ldrd r1, r2, [r9, #32]! @ encoding: [0xd0,0x12,0xe9,0xe1]
124 @ CHECK: ldrd r6, r7, [r1], #8 @ encoding: [0xd8,0x60,0xc1,0xe0]
125 @ CHECK: ldrd r1, r2, [r8], #0 @ encoding: [0xd0,0x10,0xc8,0xe0]
126 @ CHECK: ldrd r1, r2, [r8], #0 @ encoding: [0xd0,0x10,0xc8,0xe0]
127 @ CHECK: ldrd r1, r2, [r8], #-0 @ encoding: [0xd0,0x10,0x48,0xe0]
130 @------------------------------------------------------------------------------
131 @ FIXME: LDRD (label)
132 @------------------------------------------------------------------------------
134 @------------------------------------------------------------------------------
136 @------------------------------------------------------------------------------
137 ldrd r3, r4, [r1, r3]
138 ldrd r4, r5, [r7, r2]!
139 ldrd r1, r2, [r8], r12
140 ldrd r1, r2, [r8], -r12
142 @ CHECK: ldrd r3, r4, [r1, r3] @ encoding: [0xd3,0x30,0x81,0xe1]
143 @ CHECK: ldrd r4, r5, [r7, r2]! @ encoding: [0xd2,0x40,0xa7,0xe1]
144 @ CHECK: ldrd r1, r2, [r8], r12 @ encoding: [0xdc,0x10,0x88,0xe0]
145 @ CHECK: ldrd r1, r2, [r8], -r12 @ encoding: [0xdc,0x10,0x08,0xe0]
148 @------------------------------------------------------------------------------
150 @------------------------------------------------------------------------------
156 @ CHECK: ldrh r3, [r4] @ encoding: [0xb0,0x30,0xd4,0xe1]
157 @ CHECK: ldrh r2, [r7, #4] @ encoding: [0xb4,0x20,0xd7,0xe1]
158 @ CHECK: ldrh r1, [r8, #64]! @ encoding: [0xb0,0x14,0xf8,0xe1]
159 @ CHECK: ldrh r12, [sp], #4 @ encoding: [0xb4,0xc0,0xdd,0xe0]
162 @------------------------------------------------------------------------------
163 @ FIXME: LDRH (label)
164 @------------------------------------------------------------------------------
167 @------------------------------------------------------------------------------
169 @------------------------------------------------------------------------------
176 @ CHECK: ldrh r6, [r5, r4] @ encoding: [0xb4,0x60,0x95,0xe1]
177 @ CHECK: ldrh r3, [r8, r11]! @ encoding: [0xbb,0x30,0xb8,0xe1]
178 @ CHECK: ldrh r1, [r2, -r1]! @ encoding: [0xb1,0x10,0x32,0xe1]
179 @ CHECK: ldrh r9, [r7], r2 @ encoding: [0xb2,0x90,0x97,0xe0]
180 @ CHECK: ldrh r4, [r3], -r2 @ encoding: [0xb2,0x40,0x13,0xe0]
183 @------------------------------------------------------------------------------
185 @------------------------------------------------------------------------------
191 @ CHECK: ldrht r9, [r7], #128 @ encoding: [0xb0,0x98,0xf7,0xe0]
192 @ CHECK: ldrht r4, [r3], #-75 @ encoding: [0xbb,0x44,0x73,0xe0]
193 @ CHECK: ldrht r9, [r7], r2 @ encoding: [0xb2,0x90,0xb7,0xe0]
194 @ CHECK: ldrht r4, [r3], -r2 @ encoding: [0xb2,0x40,0x33,0xe0]
197 @------------------------------------------------------------------------------
199 @------------------------------------------------------------------------------
202 ldrsb r1, [r8, #255]!
205 @ CHECK: ldrsb r3, [r4] @ encoding: [0xd0,0x30,0xd4,0xe1]
206 @ CHECK: ldrsb r2, [r7, #17] @ encoding: [0xd1,0x21,0xd7,0xe1]
207 @ CHECK: ldrsb r1, [r8, #255]! @ encoding: [0xdf,0x1f,0xf8,0xe1]
208 @ CHECK: ldrsb r12, [sp], #9 @ encoding: [0xd9,0xc0,0xdd,0xe0]
211 @------------------------------------------------------------------------------
212 @ FIXME: LDRSB (label)
213 @------------------------------------------------------------------------------
216 @------------------------------------------------------------------------------
218 @------------------------------------------------------------------------------
226 @ CHECK: ldrsb r6, [r5, r4] @ encoding: [0xd4,0x60,0x95,0xe1]
227 @ CHECK: ldrsb r3, [r8, r11]! @ encoding: [0xdb,0x30,0xb8,0xe1]
228 @ CHECK: ldrsb r1, [r2, -r1]! @ encoding: [0xd1,0x10,0x32,0xe1]
229 @ CHECK: ldrsb r9, [r7], r2 @ encoding: [0xd2,0x90,0x97,0xe0]
230 @ CHECK: ldrsb r4, [r3], -r2 @ encoding: [0xd2,0x40,0x13,0xe0]
233 @------------------------------------------------------------------------------
235 @------------------------------------------------------------------------------
237 ldrsbt r3, [r8], #-12
241 @ CHECK: ldrsbt r5, [r6], #1 @ encoding: [0xd1,0x50,0xf6,0xe0]
242 @ CHECK: ldrsbt r3, [r8], #-12 @ encoding: [0xdc,0x30,0x78,0xe0]
243 @ CHECK: ldrsbt r8, [r9], r5 @ encoding: [0xd5,0x80,0xb9,0xe0]
244 @ CHECK: ldrsbt r2, [r1], -r4 @ encoding: [0xd4,0x20,0x31,0xe0]
247 @------------------------------------------------------------------------------
249 @------------------------------------------------------------------------------
255 @ CHECK: ldrsh r5, [r9] @ encoding: [0xf0,0x50,0xd9,0xe1]
256 @ CHECK: ldrsh r4, [r5, #7] @ encoding: [0xf7,0x40,0xd5,0xe1]
257 @ CHECK: ldrsh r3, [r6, #55]! @ encoding: [0xf7,0x33,0xf6,0xe1]
258 @ CHECK: ldrsh r2, [r7], #-9 @ encoding: [0xf9,0x20,0x57,0xe0]
261 @------------------------------------------------------------------------------
262 @ FIXME: LDRSH (label)
263 @------------------------------------------------------------------------------
266 @------------------------------------------------------------------------------
268 @------------------------------------------------------------------------------
275 @ CHECK: ldrsh r3, [r1, r5] @ encoding: [0xf5,0x30,0x91,0xe1]
276 @ CHECK: ldrsh r4, [r6, r1]! @ encoding: [0xf1,0x40,0xb6,0xe1]
277 @ CHECK: ldrsh r5, [r3, -r6]! @ encoding: [0xf6,0x50,0x33,0xe1]
278 @ CHECK: ldrsh r6, [r9], r8 @ encoding: [0xf8,0x60,0x99,0xe0]
279 @ CHECK: ldrsh r7, [r8], -r3 @ encoding: [0xf3,0x70,0x18,0xe0]
282 @------------------------------------------------------------------------------
284 @------------------------------------------------------------------------------
286 ldrsht r3, [r8], #-12
290 @ CHECK: ldrsht r5, [r6], #1 @ encoding: [0xf1,0x50,0xf6,0xe0]
291 @ CHECK: ldrsht r3, [r8], #-12 @ encoding: [0xfc,0x30,0x78,0xe0]
292 @ CHECK: ldrsht r8, [r9], r5 @ encoding: [0xf5,0x80,0xb9,0xe0]
293 @ CHECK: ldrsht r2, [r1], -r4 @ encoding: [0xf4,0x20,0x31,0xe0]
296 @------------------------------------------------------------------------------
298 @------------------------------------------------------------------------------
305 @ CHECK: str r8, [r12] @ encoding: [0x00,0x80,0x8c,0xe5]
306 @ CHECK: str r7, [r1, #12] @ encoding: [0x0c,0x70,0x81,0xe5]
307 @ CHECK: str r3, [r5, #40]! @ encoding: [0x28,0x30,0xa5,0xe5]
308 @ CHECK: str r9, [sp], #4095 @ encoding: [0xff,0x9f,0x8d,0xe4]
309 @ CHECK: str r1, [r7], #-128 @ encoding: [0x80,0x10,0x07,0xe4]
312 @------------------------------------------------------------------------------
313 @ FIXME: STR (literal)
314 @------------------------------------------------------------------------------
316 @------------------------------------------------------------------------------
318 @------------------------------------------------------------------------------
325 str r3, [r4, -r2, lsl #2]
326 str r2, [r7], r3, asr #24
328 @ CHECK: str r9, [r6, r3] @ encoding: [0x03,0x90,0x86,0xe7]
329 @ CHECK: str r8, [r0, -r2] @ encoding: [0x02,0x80,0x00,0xe7]
330 @ CHECK: str r7, [r1, r6]! @ encoding: [0x06,0x70,0xa1,0xe7]
331 @ CHECK: str r6, [sp, -r1]! @ encoding: [0x01,0x60,0x2d,0xe7]
332 @ CHECK: str r5, [r3], r9 @ encoding: [0x09,0x50,0x83,0xe6]
333 @ CHECK: str r4, [r2], -r5 @ encoding: [0x05,0x40,0x02,0xe6]
334 @ CHECK: str r3, [r4, -r2, lsl #2] @ encoding: [0x02,0x31,0x04,0xe7]
335 @ CHECK: str r2, [r7], r3, asr #24 @ encoding: [0x43,0x2c,0x87,0xe6]