[ARM] Better OR's for MVE compares
[llvm-core.git] / test / MC / AArch64 / arm64-memory.s
blobfd4630d4f9ccadaa5cd9e209845e6ed1569b123e
1 ; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s
3 foo:
4 ;-----------------------------------------------------------------------------
5 ; Indexed loads
6 ;-----------------------------------------------------------------------------
8 ldr w5, [x4, #20]
9 ldr x4, [x3]
10 ldr x2, [sp, #32]
11 ldr b5, [sp, #1]
12 ldr h6, [sp, #2]
13 ldr s7, [sp, #4]
14 ldr d8, [sp, #8]
15 ldr q9, [sp, #16]
16 ldrb w4, [x3]
17 ldrb w5, [x4, #20]
18 ldrb w2, [x3, _foo@pageoff]
19 ldrb w3, [x2, "+[Test method].var"@PAGEOFF]
20 ldrsb w9, [x3]
21 ldrsb x2, [sp, #128]
22 ldrh w2, [sp, #32]
23 ldrsh w3, [sp, #32]
24 ldrsh x5, [x9, #24]
25 ldrsw x9, [sp, #512]
27 prfm #5, [sp, #32]
28 prfm #31, [sp, #32]
29 prfm pldl1keep, [x2]
30 prfm pldl1strm, [x2]
31 prfm pldl2keep, [x2]
32 prfm pldl2strm, [x2]
33 prfm pldl3keep, [x2]
34 prfm pldl3strm, [x2]
35 prfm pstl1keep, [x2]
36 prfm pstl1strm, [x2]
37 prfm pstl2keep, [x2]
38 prfm pstl2strm, [x2]
39 prfm pstl3keep, [x2]
40 prfm pstl3strm, [x2]
41 prfm pstl3strm, [x4, x5, lsl #3]
43 ; CHECK: ldr w5, [x4, #20] ; encoding: [0x85,0x14,0x40,0xb9]
44 ; CHECK: ldr x4, [x3] ; encoding: [0x64,0x00,0x40,0xf9]
45 ; CHECK: ldr x2, [sp, #32] ; encoding: [0xe2,0x13,0x40,0xf9]
46 ; CHECK: ldr b5, [sp, #1] ; encoding: [0xe5,0x07,0x40,0x3d]
47 ; CHECK: ldr h6, [sp, #2] ; encoding: [0xe6,0x07,0x40,0x7d]
48 ; CHECK: ldr s7, [sp, #4] ; encoding: [0xe7,0x07,0x40,0xbd]
49 ; CHECK: ldr d8, [sp, #8] ; encoding: [0xe8,0x07,0x40,0xfd]
50 ; CHECK: ldr q9, [sp, #16] ; encoding: [0xe9,0x07,0xc0,0x3d]
51 ; CHECK: ldrb w4, [x3] ; encoding: [0x64,0x00,0x40,0x39]
52 ; CHECK: ldrb w5, [x4, #20] ; encoding: [0x85,0x50,0x40,0x39]
53 ; CHECK: ldrb w2, [x3, _foo@PAGEOFF] ; encoding: [0x62,0bAAAAAA00,0b01AAAAAA,0x39]
54 ; CHECK: ldrb w3, [x2, "+[Test method].var"@PAGEOFF] ; encoding: [0x43,0bAAAAAA00,0b01AAAAAA,0x39]
55 ; CHECK: ldrsb w9, [x3] ; encoding: [0x69,0x00,0xc0,0x39]
56 ; CHECK: ldrsb x2, [sp, #128] ; encoding: [0xe2,0x03,0x82,0x39]
57 ; CHECK: ldrh w2, [sp, #32] ; encoding: [0xe2,0x43,0x40,0x79]
58 ; CHECK: ldrsh w3, [sp, #32] ; encoding: [0xe3,0x43,0xc0,0x79]
59 ; CHECK: ldrsh x5, [x9, #24] ; encoding: [0x25,0x31,0x80,0x79]
60 ; CHECK: ldrsw x9, [sp, #512] ; encoding: [0xe9,0x03,0x82,0xb9]
61 ; CHECK: prfm pldl3strm, [sp, #32] ; encoding: [0xe5,0x13,0x80,0xf9]
62 ; CHECK: prfm #31, [sp, #32] ; encoding: [0xff,0x13,0x80,0xf9]
63 ; CHECK: prfm pldl1keep, [x2] ; encoding: [0x40,0x00,0x80,0xf9]
64 ; CHECK: prfm pldl1strm, [x2] ; encoding: [0x41,0x00,0x80,0xf9]
65 ; CHECK: prfm pldl2keep, [x2] ; encoding: [0x42,0x00,0x80,0xf9]
66 ; CHECK: prfm pldl2strm, [x2] ; encoding: [0x43,0x00,0x80,0xf9]
67 ; CHECK: prfm pldl3keep, [x2] ; encoding: [0x44,0x00,0x80,0xf9]
68 ; CHECK: prfm pldl3strm, [x2] ; encoding: [0x45,0x00,0x80,0xf9]
69 ; CHECK: prfm pstl1keep, [x2] ; encoding: [0x50,0x00,0x80,0xf9]
70 ; CHECK: prfm pstl1strm, [x2] ; encoding: [0x51,0x00,0x80,0xf9]
71 ; CHECK: prfm pstl2keep, [x2] ; encoding: [0x52,0x00,0x80,0xf9]
72 ; CHECK: prfm pstl2strm, [x2] ; encoding: [0x53,0x00,0x80,0xf9]
73 ; CHECK: prfm pstl3keep, [x2] ; encoding: [0x54,0x00,0x80,0xf9]
74 ; CHECK: prfm pstl3strm, [x2] ; encoding: [0x55,0x00,0x80,0xf9]
75 ; CHECK: prfm pstl3strm, [x4, x5, lsl #3] ; encoding: [0x95,0x78,0xa5,0xf8]
77 ;-----------------------------------------------------------------------------
78 ; Indexed stores
79 ;-----------------------------------------------------------------------------
81 str x4, [x3]
82 str x2, [sp, #32]
83 str w5, [x4, #20]
84 str b5, [sp, #1]
85 str h6, [sp, #2]
86 str s7, [sp, #4]
87 str d8, [sp, #8]
88 str q9, [sp, #16]
89 strb w4, [x3]
90 strb w5, [x4, #20]
91 strh w2, [sp, #32]
93 ; CHECK: str x4, [x3] ; encoding: [0x64,0x00,0x00,0xf9]
94 ; CHECK: str x2, [sp, #32] ; encoding: [0xe2,0x13,0x00,0xf9]
95 ; CHECK: str w5, [x4, #20] ; encoding: [0x85,0x14,0x00,0xb9]
96 ; CHECK: str b5, [sp, #1] ; encoding: [0xe5,0x07,0x00,0x3d]
97 ; CHECK: str h6, [sp, #2] ; encoding: [0xe6,0x07,0x00,0x7d]
98 ; CHECK: str s7, [sp, #4] ; encoding: [0xe7,0x07,0x00,0xbd]
99 ; CHECK: str d8, [sp, #8] ; encoding: [0xe8,0x07,0x00,0xfd]
100 ; CHECK: str q9, [sp, #16] ; encoding: [0xe9,0x07,0x80,0x3d]
101 ; CHECK: strb w4, [x3] ; encoding: [0x64,0x00,0x00,0x39]
102 ; CHECK: strb w5, [x4, #20] ; encoding: [0x85,0x50,0x00,0x39]
103 ; CHECK: strh w2, [sp, #32] ; encoding: [0xe2,0x43,0x00,0x79]
105 ;-----------------------------------------------------------------------------
106 ; Unscaled immediate loads and stores
107 ;-----------------------------------------------------------------------------
109 ldur w2, [x3]
110 ldur w2, [sp, #24]
111 ldur x2, [x3]
112 ldur x2, [sp, #24]
113 ldur b5, [sp, #1]
114 ldur h6, [sp, #2]
115 ldur s7, [sp, #4]
116 ldur d8, [sp, #8]
117 ldur q9, [sp, #16]
118 ldursb w9, [x3]
119 ldursb x2, [sp, #128]
120 ldursh w3, [sp, #32]
121 ldursh x5, [x9, #24]
122 ldursw x9, [sp, #-128]
124 ; CHECK: ldur w2, [x3] ; encoding: [0x62,0x00,0x40,0xb8]
125 ; CHECK: ldur w2, [sp, #24] ; encoding: [0xe2,0x83,0x41,0xb8]
126 ; CHECK: ldur x2, [x3] ; encoding: [0x62,0x00,0x40,0xf8]
127 ; CHECK: ldur x2, [sp, #24] ; encoding: [0xe2,0x83,0x41,0xf8]
128 ; CHECK: ldur b5, [sp, #1] ; encoding: [0xe5,0x13,0x40,0x3c]
129 ; CHECK: ldur h6, [sp, #2] ; encoding: [0xe6,0x23,0x40,0x7c]
130 ; CHECK: ldur s7, [sp, #4] ; encoding: [0xe7,0x43,0x40,0xbc]
131 ; CHECK: ldur d8, [sp, #8] ; encoding: [0xe8,0x83,0x40,0xfc]
132 ; CHECK: ldur q9, [sp, #16] ; encoding: [0xe9,0x03,0xc1,0x3c]
133 ; CHECK: ldursb w9, [x3] ; encoding: [0x69,0x00,0xc0,0x38]
134 ; CHECK: ldursb x2, [sp, #128] ; encoding: [0xe2,0x03,0x88,0x38]
135 ; CHECK: ldursh w3, [sp, #32] ; encoding: [0xe3,0x03,0xc2,0x78]
136 ; CHECK: ldursh x5, [x9, #24] ; encoding: [0x25,0x81,0x81,0x78]
137 ; CHECK: ldursw x9, [sp, #-128] ; encoding: [0xe9,0x03,0x98,0xb8]
139 stur w4, [x3]
140 stur w2, [sp, #32]
141 stur x4, [x3]
142 stur x2, [sp, #32]
143 stur w5, [x4, #20]
144 stur b5, [sp, #1]
145 stur h6, [sp, #2]
146 stur s7, [sp, #4]
147 stur d8, [sp, #8]
148 stur q9, [sp, #16]
149 sturb w4, [x3]
150 sturb w5, [x4, #20]
151 sturh w2, [sp, #32]
152 prfum #5, [sp, #32]
154 ; CHECK: stur w4, [x3] ; encoding: [0x64,0x00,0x00,0xb8]
155 ; CHECK: stur w2, [sp, #32] ; encoding: [0xe2,0x03,0x02,0xb8]
156 ; CHECK: stur x4, [x3] ; encoding: [0x64,0x00,0x00,0xf8]
157 ; CHECK: stur x2, [sp, #32] ; encoding: [0xe2,0x03,0x02,0xf8]
158 ; CHECK: stur w5, [x4, #20] ; encoding: [0x85,0x40,0x01,0xb8]
159 ; CHECK: stur b5, [sp, #1] ; encoding: [0xe5,0x13,0x00,0x3c]
160 ; CHECK: stur h6, [sp, #2] ; encoding: [0xe6,0x23,0x00,0x7c]
161 ; CHECK: stur s7, [sp, #4] ; encoding: [0xe7,0x43,0x00,0xbc]
162 ; CHECK: stur d8, [sp, #8] ; encoding: [0xe8,0x83,0x00,0xfc]
163 ; CHECK: stur q9, [sp, #16] ; encoding: [0xe9,0x03,0x81,0x3c]
164 ; CHECK: sturb w4, [x3] ; encoding: [0x64,0x00,0x00,0x38]
165 ; CHECK: sturb w5, [x4, #20] ; encoding: [0x85,0x40,0x01,0x38]
166 ; CHECK: sturh w2, [sp, #32] ; encoding: [0xe2,0x03,0x02,0x78]
167 ; CHECK: prfum pldl3strm, [sp, #32] ; encoding: [0xe5,0x03,0x82,0xf8]
169 ;-----------------------------------------------------------------------------
170 ; Unprivileged loads and stores
171 ;-----------------------------------------------------------------------------
173 ldtr w3, [x4, #16]
174 ldtr x3, [x4, #16]
175 ldtrb w3, [x4, #16]
176 ldtrsb w9, [x3]
177 ldtrsb x2, [sp, #128]
178 ldtrh w3, [x4, #16]
179 ldtrsh w3, [sp, #32]
180 ldtrsh x5, [x9, #24]
181 ldtrsw x9, [sp, #-128]
183 ; CHECK: ldtr w3, [x4, #16] ; encoding: [0x83,0x08,0x41,0xb8]
184 ; CHECK: ldtr x3, [x4, #16] ; encoding: [0x83,0x08,0x41,0xf8]
185 ; CHECK: ldtrb w3, [x4, #16] ; encoding: [0x83,0x08,0x41,0x38]
186 ; CHECK: ldtrsb w9, [x3] ; encoding: [0x69,0x08,0xc0,0x38]
187 ; CHECK: ldtrsb x2, [sp, #128] ; encoding: [0xe2,0x0b,0x88,0x38]
188 ; CHECK: ldtrh w3, [x4, #16] ; encoding: [0x83,0x08,0x41,0x78]
189 ; CHECK: ldtrsh w3, [sp, #32] ; encoding: [0xe3,0x0b,0xc2,0x78]
190 ; CHECK: ldtrsh x5, [x9, #24] ; encoding: [0x25,0x89,0x81,0x78]
191 ; CHECK: ldtrsw x9, [sp, #-128] ; encoding: [0xe9,0x0b,0x98,0xb8]
193 sttr w5, [x4, #20]
194 sttr x4, [x3]
195 sttr x2, [sp, #32]
196 sttrb w4, [x3]
197 sttrb w5, [x4, #20]
198 sttrh w2, [sp, #32]
200 ; CHECK: sttr w5, [x4, #20] ; encoding: [0x85,0x48,0x01,0xb8]
201 ; CHECK: sttr x4, [x3] ; encoding: [0x64,0x08,0x00,0xf8]
202 ; CHECK: sttr x2, [sp, #32] ; encoding: [0xe2,0x0b,0x02,0xf8]
203 ; CHECK: sttrb w4, [x3] ; encoding: [0x64,0x08,0x00,0x38]
204 ; CHECK: sttrb w5, [x4, #20] ; encoding: [0x85,0x48,0x01,0x38]
205 ; CHECK: sttrh w2, [sp, #32] ; encoding: [0xe2,0x0b,0x02,0x78]
207 ;-----------------------------------------------------------------------------
208 ; Pre-indexed loads and stores
209 ;-----------------------------------------------------------------------------
211 ldr x29, [x7, #8]!
212 ldr x30, [x7, #8]!
213 ldr b5, [x0, #1]!
214 ldr h6, [x0, #2]!
215 ldr s7, [x0, #4]!
216 ldr d8, [x0, #8]!
217 ldr q9, [x0, #16]!
219 str x30, [x7, #-8]!
220 str x29, [x7, #-8]!
221 str b5, [x0, #-1]!
222 str h6, [x0, #-2]!
223 str s7, [x0, #-4]!
224 str d8, [x0, #-8]!
225 str q9, [x0, #-16]!
227 ; CHECK: ldr x29, [x7, #8]! ; encoding: [0xfd,0x8c,0x40,0xf8]
228 ; CHECK: ldr x30, [x7, #8]! ; encoding: [0xfe,0x8c,0x40,0xf8]
229 ; CHECK: ldr b5, [x0, #1]! ; encoding: [0x05,0x1c,0x40,0x3c]
230 ; CHECK: ldr h6, [x0, #2]! ; encoding: [0x06,0x2c,0x40,0x7c]
231 ; CHECK: ldr s7, [x0, #4]! ; encoding: [0x07,0x4c,0x40,0xbc]
232 ; CHECK: ldr d8, [x0, #8]! ; encoding: [0x08,0x8c,0x40,0xfc]
233 ; CHECK: ldr q9, [x0, #16]! ; encoding: [0x09,0x0c,0xc1,0x3c]
235 ; CHECK: str x30, [x7, #-8]! ; encoding: [0xfe,0x8c,0x1f,0xf8]
236 ; CHECK: str x29, [x7, #-8]! ; encoding: [0xfd,0x8c,0x1f,0xf8]
237 ; CHECK: str b5, [x0, #-1]! ; encoding: [0x05,0xfc,0x1f,0x3c]
238 ; CHECK: str h6, [x0, #-2]! ; encoding: [0x06,0xec,0x1f,0x7c]
239 ; CHECK: str s7, [x0, #-4]! ; encoding: [0x07,0xcc,0x1f,0xbc]
240 ; CHECK: str d8, [x0, #-8]! ; encoding: [0x08,0x8c,0x1f,0xfc]
241 ; CHECK: str q9, [x0, #-16]! ; encoding: [0x09,0x0c,0x9f,0x3c]
243 ;-----------------------------------------------------------------------------
244 ; post-indexed loads and stores
245 ;-----------------------------------------------------------------------------
246 str x30, [x7], #-8
247 str x29, [x7], #-8
248 str b5, [x0], #-1
249 str h6, [x0], #-2
250 str s7, [x0], #-4
251 str d8, [x0], #-8
252 str q9, [x0], #-16
254 ldr x29, [x7], #8
255 ldr x30, [x7], #8
256 ldr b5, [x0], #1
257 ldr h6, [x0], #2
258 ldr s7, [x0], #4
259 ldr d8, [x0], #8
260 ldr q9, [x0], #16
262 ; CHECK: str x30, [x7], #-8 ; encoding: [0xfe,0x84,0x1f,0xf8]
263 ; CHECK: str x29, [x7], #-8 ; encoding: [0xfd,0x84,0x1f,0xf8]
264 ; CHECK: str b5, [x0], #-1 ; encoding: [0x05,0xf4,0x1f,0x3c]
265 ; CHECK: str h6, [x0], #-2 ; encoding: [0x06,0xe4,0x1f,0x7c]
266 ; CHECK: str s7, [x0], #-4 ; encoding: [0x07,0xc4,0x1f,0xbc]
267 ; CHECK: str d8, [x0], #-8 ; encoding: [0x08,0x84,0x1f,0xfc]
268 ; CHECK: str q9, [x0], #-16 ; encoding: [0x09,0x04,0x9f,0x3c]
270 ; CHECK: ldr x29, [x7], #8 ; encoding: [0xfd,0x84,0x40,0xf8]
271 ; CHECK: ldr x30, [x7], #8 ; encoding: [0xfe,0x84,0x40,0xf8]
272 ; CHECK: ldr b5, [x0], #1 ; encoding: [0x05,0x14,0x40,0x3c]
273 ; CHECK: ldr h6, [x0], #2 ; encoding: [0x06,0x24,0x40,0x7c]
274 ; CHECK: ldr s7, [x0], #4 ; encoding: [0x07,0x44,0x40,0xbc]
275 ; CHECK: ldr d8, [x0], #8 ; encoding: [0x08,0x84,0x40,0xfc]
276 ; CHECK: ldr q9, [x0], #16 ; encoding: [0x09,0x04,0xc1,0x3c]
278 ;-----------------------------------------------------------------------------
279 ; Load/Store pair (indexed, offset)
280 ;-----------------------------------------------------------------------------
282 ldp w3, w2, [x15, #16]
283 ldp x4, x9, [sp, #-16]
284 ldpsw x2, x3, [x14, #16]
285 ldpsw x2, x3, [sp, #-16]
286 ldp s10, s1, [x2, #64]
287 ldp d10, d1, [x2]
288 ldp q2, q3, [x0, #32]
290 ; CHECK: ldp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x42,0x29]
291 ; CHECK: ldp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x7f,0xa9]
292 ; CHECK: ldpsw x2, x3, [x14, #16] ; encoding: [0xc2,0x0d,0x42,0x69]
293 ; CHECK: ldpsw x2, x3, [sp, #-16] ; encoding: [0xe2,0x0f,0x7e,0x69]
294 ; CHECK: ldp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x48,0x2d]
295 ; CHECK: ldp d10, d1, [x2] ; encoding: [0x4a,0x04,0x40,0x6d]
296 ; CHECK: ldp q2, q3, [x0, #32] ; encoding: [0x02,0x0c,0x41,0xad]
298 stp w3, w2, [x15, #16]
299 stp x4, x9, [sp, #-16]
300 stp s10, s1, [x2, #64]
301 stp d10, d1, [x2]
302 stp q2, q3, [x0, #32]
304 ; CHECK: stp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x02,0x29]
305 ; CHECK: stp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x3f,0xa9]
306 ; CHECK: stp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x08,0x2d]
307 ; CHECK: stp d10, d1, [x2] ; encoding: [0x4a,0x04,0x00,0x6d]
308 ; CHECK: stp q2, q3, [x0, #32] ; encoding: [0x02,0x0c,0x01,0xad]
310 ;-----------------------------------------------------------------------------
311 ; Load/Store pair (pre-indexed)
312 ;-----------------------------------------------------------------------------
314 ldp w3, w2, [x15, #16]!
315 ldp x4, x9, [sp, #-16]!
316 ldpsw x2, x3, [x14, #16]!
317 ldpsw x2, x3, [sp, #-16]!
318 ldp s10, s1, [x2, #64]!
319 ldp d10, d1, [x2, #16]!
321 ; CHECK: ldp w3, w2, [x15, #16]! ; encoding: [0xe3,0x09,0xc2,0x29]
322 ; CHECK: ldp x4, x9, [sp, #-16]! ; encoding: [0xe4,0x27,0xff,0xa9]
323 ; CHECK: ldpsw x2, x3, [x14, #16]! ; encoding: [0xc2,0x0d,0xc2,0x69]
324 ; CHECK: ldpsw x2, x3, [sp, #-16]! ; encoding: [0xe2,0x0f,0xfe,0x69]
325 ; CHECK: ldp s10, s1, [x2, #64]! ; encoding: [0x4a,0x04,0xc8,0x2d]
326 ; CHECK: ldp d10, d1, [x2, #16]! ; encoding: [0x4a,0x04,0xc1,0x6d]
328 stp w3, w2, [x15, #16]!
329 stp x4, x9, [sp, #-16]!
330 stp s10, s1, [x2, #64]!
331 stp d10, d1, [x2, #16]!
333 ; CHECK: stp w3, w2, [x15, #16]! ; encoding: [0xe3,0x09,0x82,0x29]
334 ; CHECK: stp x4, x9, [sp, #-16]! ; encoding: [0xe4,0x27,0xbf,0xa9]
335 ; CHECK: stp s10, s1, [x2, #64]! ; encoding: [0x4a,0x04,0x88,0x2d]
336 ; CHECK: stp d10, d1, [x2, #16]! ; encoding: [0x4a,0x04,0x81,0x6d]
338 ;-----------------------------------------------------------------------------
339 ; Load/Store pair (post-indexed)
340 ;-----------------------------------------------------------------------------
342 ldp w3, w2, [x15], #16
343 ldp x4, x9, [sp], #-16
344 ldpsw x2, x3, [x14], #16
345 ldpsw x2, x3, [sp], #-16
346 ldp s10, s1, [x2], #64
347 ldp d10, d1, [x2], #16
349 ; CHECK: ldp w3, w2, [x15], #16 ; encoding: [0xe3,0x09,0xc2,0x28]
350 ; CHECK: ldp x4, x9, [sp], #-16 ; encoding: [0xe4,0x27,0xff,0xa8]
351 ; CHECK: ldpsw x2, x3, [x14], #16 ; encoding: [0xc2,0x0d,0xc2,0x68]
352 ; CHECK: ldpsw x2, x3, [sp], #-16 ; encoding: [0xe2,0x0f,0xfe,0x68]
353 ; CHECK: ldp s10, s1, [x2], #64 ; encoding: [0x4a,0x04,0xc8,0x2c]
354 ; CHECK: ldp d10, d1, [x2], #16 ; encoding: [0x4a,0x04,0xc1,0x6c]
356 stp w3, w2, [x15], #16
357 stp x4, x9, [sp], #-16
358 stp s10, s1, [x2], #64
359 stp d10, d1, [x2], #16
361 ; CHECK: stp w3, w2, [x15], #16 ; encoding: [0xe3,0x09,0x82,0x28]
362 ; CHECK: stp x4, x9, [sp], #-16 ; encoding: [0xe4,0x27,0xbf,0xa8]
363 ; CHECK: stp s10, s1, [x2], #64 ; encoding: [0x4a,0x04,0x88,0x2c]
364 ; CHECK: stp d10, d1, [x2], #16 ; encoding: [0x4a,0x04,0x81,0x6c]
366 ;-----------------------------------------------------------------------------
367 ; Load/Store pair (no-allocate)
368 ;-----------------------------------------------------------------------------
370 ldnp w3, w2, [x15, #16]
371 ldnp x4, x9, [sp, #-16]
372 ldnp s10, s1, [x2, #64]
373 ldnp d10, d1, [x2]
375 ; CHECK: ldnp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x42,0x28]
376 ; CHECK: ldnp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x7f,0xa8]
377 ; CHECK: ldnp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x48,0x2c]
378 ; CHECK: ldnp d10, d1, [x2] ; encoding: [0x4a,0x04,0x40,0x6c]
380 stnp w3, w2, [x15, #16]
381 stnp x4, x9, [sp, #-16]
382 stnp s10, s1, [x2, #64]
383 stnp d10, d1, [x2]
385 ; CHECK: stnp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x02,0x28]
386 ; CHECK: stnp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x3f,0xa8]
387 ; CHECK: stnp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x08,0x2c]
388 ; CHECK: stnp d10, d1, [x2] ; encoding: [0x4a,0x04,0x00,0x6c]
390 ;-----------------------------------------------------------------------------
391 ; Load/Store register offset
392 ;-----------------------------------------------------------------------------
394 ldr w0, [x0, x0]
395 ldr w0, [x0, x0, lsl #2]
396 ldr x0, [x0, x0]
397 ldr x0, [x0, x0, lsl #3]
398 ldr x0, [x0, x0, sxtx]
400 ; CHECK: ldr w0, [x0, x0] ; encoding: [0x00,0x68,0x60,0xb8]
401 ; CHECK: ldr w0, [x0, x0, lsl #2] ; encoding: [0x00,0x78,0x60,0xb8]
402 ; CHECK: ldr x0, [x0, x0] ; encoding: [0x00,0x68,0x60,0xf8]
403 ; CHECK: ldr x0, [x0, x0, lsl #3] ; encoding: [0x00,0x78,0x60,0xf8]
404 ; CHECK: ldr x0, [x0, x0, sxtx] ; encoding: [0x00,0xe8,0x60,0xf8]
406 ldr b1, [x1, x2]
407 ldr b1, [x1, x2, lsl #0]
408 ldr h1, [x1, x2]
409 ldr h1, [x1, x2, lsl #1]
410 ldr s1, [x1, x2]
411 ldr s1, [x1, x2, lsl #2]
412 ldr d1, [x1, x2]
413 ldr d1, [x1, x2, lsl #3]
414 ldr q1, [x1, x2]
415 ldr q1, [x1, x2, lsl #4]
417 ; CHECK: ldr b1, [x1, x2] ; encoding: [0x21,0x68,0x62,0x3c]
418 ; CHECK: ldr b1, [x1, x2, lsl #0] ; encoding: [0x21,0x78,0x62,0x3c]
419 ; CHECK: ldr h1, [x1, x2] ; encoding: [0x21,0x68,0x62,0x7c]
420 ; CHECK: ldr h1, [x1, x2, lsl #1] ; encoding: [0x21,0x78,0x62,0x7c]
421 ; CHECK: ldr s1, [x1, x2] ; encoding: [0x21,0x68,0x62,0xbc]
422 ; CHECK: ldr s1, [x1, x2, lsl #2] ; encoding: [0x21,0x78,0x62,0xbc]
423 ; CHECK: ldr d1, [x1, x2] ; encoding: [0x21,0x68,0x62,0xfc]
424 ; CHECK: ldr d1, [x1, x2, lsl #3] ; encoding: [0x21,0x78,0x62,0xfc]
425 ; CHECK: ldr q1, [x1, x2] ; encoding: [0x21,0x68,0xe2,0x3c]
426 ; CHECK: ldr q1, [x1, x2, lsl #4] ; encoding: [0x21,0x78,0xe2,0x3c]
428 str d1, [sp, x3]
429 str d1, [sp, w3, uxtw #3]
430 str q1, [sp, x3]
431 str q1, [sp, w3, uxtw #4]
433 ; CHECK: str d1, [sp, x3] ; encoding: [0xe1,0x6b,0x23,0xfc]
434 ; CHECK: str d1, [sp, w3, uxtw #3] ; encoding: [0xe1,0x5b,0x23,0xfc]
435 ; CHECK: str q1, [sp, x3] ; encoding: [0xe1,0x6b,0xa3,0x3c]
436 ; CHECK: str q1, [sp, w3, uxtw #4] ; encoding: [0xe1,0x5b,0xa3,0x3c]
438 ;-----------------------------------------------------------------------------
439 ; Load literal
440 ;-----------------------------------------------------------------------------
442 ldr w5, foo
443 ldr x4, foo
444 ldrsw x9, foo
445 prfm #5, foo
447 ; CHECK: ldr w5, foo ; encoding: [0bAAA00101,A,A,0x18]
448 ; CHECK: ldr x4, foo ; encoding: [0bAAA00100,A,A,0x58]
449 ; CHECK: ldrsw x9, foo ; encoding: [0bAAA01001,A,A,0x98]
450 ; CHECK: prfm pldl3strm, foo ; encoding: [0bAAA00101,A,A,0xd8]
452 ;-----------------------------------------------------------------------------
453 ; Load/Store exclusive
454 ;-----------------------------------------------------------------------------
456 ldxr w6, [x1]
457 ldxr x6, [x1]
458 ldxrb w6, [x1]
459 ldxrh w6, [x1]
460 ldxp w7, w3, [x9]
461 ldxp x7, x3, [x9]
463 ; CHECK: ldxrb w6, [x1] ; encoding: [0x26,0x7c,0x5f,0x08]
464 ; CHECK: ldxrh w6, [x1] ; encoding: [0x26,0x7c,0x5f,0x48]
465 ; CHECK: ldxp w7, w3, [x9] ; encoding: [0x27,0x0d,0x7f,0x88]
466 ; CHECK: ldxp x7, x3, [x9] ; encoding: [0x27,0x0d,0x7f,0xc8]
468 stxr w1, x4, [x3]
469 stxr w1, w4, [x3]
470 stxrb w1, w4, [x3]
471 stxrh w1, w4, [x3]
472 stxp w1, x2, x6, [x7]
473 stxp w1, w2, w6, [x9]
475 ; CHECK: stxr w1, x4, [x3] ; encoding: [0x64,0x7c,0x01,0xc8]
476 ; CHECK: stxr w1, w4, [x3] ; encoding: [0x64,0x7c,0x01,0x88]
477 ; CHECK: stxrb w1, w4, [x3] ; encoding: [0x64,0x7c,0x01,0x08]
478 ; CHECK: stxrh w1, w4, [x3] ; encoding: [0x64,0x7c,0x01,0x48]
479 ; CHECK: stxp w1, x2, x6, [x7] ; encoding: [0xe2,0x18,0x21,0xc8]
480 ; CHECK: stxp w1, w2, w6, [x9] ; encoding: [0x22,0x19,0x21,0x88]
482 ;-----------------------------------------------------------------------------
483 ; Load-acquire/Store-release non-exclusive
484 ;-----------------------------------------------------------------------------
486 ldar w4, [sp]
487 ldar x4, [sp, #0]
488 ldarb w4, [sp]
489 ldarh w4, [sp]
491 ; CHECK: ldar w4, [sp] ; encoding: [0xe4,0xff,0xdf,0x88]
492 ; CHECK: ldar x4, [sp] ; encoding: [0xe4,0xff,0xdf,0xc8]
493 ; CHECK: ldarb w4, [sp] ; encoding: [0xe4,0xff,0xdf,0x08]
494 ; CHECK: ldarh w4, [sp] ; encoding: [0xe4,0xff,0xdf,0x48]
496 stlr w3, [x6]
497 stlr x3, [x6]
498 stlrb w3, [x6]
499 stlrh w3, [x6]
501 ; CHECK: stlr w3, [x6] ; encoding: [0xc3,0xfc,0x9f,0x88]
502 ; CHECK: stlr x3, [x6] ; encoding: [0xc3,0xfc,0x9f,0xc8]
503 ; CHECK: stlrb w3, [x6] ; encoding: [0xc3,0xfc,0x9f,0x08]
504 ; CHECK: stlrh w3, [x6] ; encoding: [0xc3,0xfc,0x9f,0x48]
506 ;-----------------------------------------------------------------------------
507 ; Load-acquire/Store-release exclusive
508 ;-----------------------------------------------------------------------------
510 ldaxr w2, [x4]
511 ldaxr x2, [x4]
512 ldaxrb w2, [x4, #0]
513 ldaxrh w2, [x4]
514 ldaxp w2, w6, [x1]
515 ldaxp x2, x6, [x1]
517 ; CHECK: ldaxr w2, [x4] ; encoding: [0x82,0xfc,0x5f,0x88]
518 ; CHECK: ldaxr x2, [x4] ; encoding: [0x82,0xfc,0x5f,0xc8]
519 ; CHECK: ldaxrb w2, [x4] ; encoding: [0x82,0xfc,0x5f,0x08]
520 ; CHECK: ldaxrh w2, [x4] ; encoding: [0x82,0xfc,0x5f,0x48]
521 ; CHECK: ldaxp w2, w6, [x1] ; encoding: [0x22,0x98,0x7f,0x88]
522 ; CHECK: ldaxp x2, x6, [x1] ; encoding: [0x22,0x98,0x7f,0xc8]
524 stlxr w8, x7, [x1]
525 stlxr w8, w7, [x1]
526 stlxrb w8, w7, [x1]
527 stlxrh w8, w7, [x1]
528 stlxp w1, x2, x6, [x7]
529 stlxp w1, w2, w6, [x9]
531 ; CHECK: stlxr w8, x7, [x1] ; encoding: [0x27,0xfc,0x08,0xc8]
532 ; CHECK: stlxr w8, w7, [x1] ; encoding: [0x27,0xfc,0x08,0x88]
533 ; CHECK: stlxrb w8, w7, [x1] ; encoding: [0x27,0xfc,0x08,0x08]
534 ; CHECK: stlxrh w8, w7, [x1] ; encoding: [0x27,0xfc,0x08,0x48]
535 ; CHECK: stlxp w1, x2, x6, [x7] ; encoding: [0xe2,0x98,0x21,0xc8]
536 ; CHECK: stlxp w1, w2, w6, [x9] ; encoding: [0x22,0x99,0x21,0x88]
539 ;-----------------------------------------------------------------------------
540 ; LDUR/STUR aliases for negative and unaligned LDR/STR instructions.
542 ; According to the ARM ISA documentation:
543 ; "A programmer-friendly assembler should also generate these instructions
544 ; in response to the standard LDR/STR mnemonics when the immediate offset is
545 ; unambiguous, i.e. negative or unaligned."
546 ;-----------------------------------------------------------------------------
548 ldr x11, [x29, #-8]
549 ldr x11, [x29, #7]
550 ldr w0, [x0, #2]
551 ldr w0, [x0, #-256]
552 ldr b2, [x1, #-2]
553 ldr h3, [x2, #3]
554 ldr h3, [x3, #-4]
555 ldr s3, [x4, #3]
556 ldr s3, [x5, #-4]
557 ldr d4, [x6, #4]
558 ldr d4, [x7, #-8]
559 ldr q5, [x8, #8]
560 ldr q5, [x9, #-16]
562 ; CHECK: ldur x11, [x29, #-8] ; encoding: [0xab,0x83,0x5f,0xf8]
563 ; CHECK: ldur x11, [x29, #7] ; encoding: [0xab,0x73,0x40,0xf8]
564 ; CHECK: ldur w0, [x0, #2] ; encoding: [0x00,0x20,0x40,0xb8]
565 ; CHECK: ldur w0, [x0, #-256] ; encoding: [0x00,0x00,0x50,0xb8]
566 ; CHECK: ldur b2, [x1, #-2] ; encoding: [0x22,0xe0,0x5f,0x3c]
567 ; CHECK: ldur h3, [x2, #3] ; encoding: [0x43,0x30,0x40,0x7c]
568 ; CHECK: ldur h3, [x3, #-4] ; encoding: [0x63,0xc0,0x5f,0x7c]
569 ; CHECK: ldur s3, [x4, #3] ; encoding: [0x83,0x30,0x40,0xbc]
570 ; CHECK: ldur s3, [x5, #-4] ; encoding: [0xa3,0xc0,0x5f,0xbc]
571 ; CHECK: ldur d4, [x6, #4] ; encoding: [0xc4,0x40,0x40,0xfc]
572 ; CHECK: ldur d4, [x7, #-8] ; encoding: [0xe4,0x80,0x5f,0xfc]
573 ; CHECK: ldur q5, [x8, #8] ; encoding: [0x05,0x81,0xc0,0x3c]
574 ; CHECK: ldur q5, [x9, #-16] ; encoding: [0x25,0x01,0xdf,0x3c]
576 str x11, [x29, #-8]
577 str x11, [x29, #7]
578 str w0, [x0, #2]
579 str w0, [x0, #-256]
580 str b2, [x1, #-2]
581 str h3, [x2, #3]
582 str h3, [x3, #-4]
583 str s3, [x4, #3]
584 str s3, [x5, #-4]
585 str d4, [x6, #4]
586 str d4, [x7, #-8]
587 str q5, [x8, #8]
588 str q5, [x9, #-16]
590 ; CHECK: stur x11, [x29, #-8] ; encoding: [0xab,0x83,0x1f,0xf8]
591 ; CHECK: stur x11, [x29, #7] ; encoding: [0xab,0x73,0x00,0xf8]
592 ; CHECK: stur w0, [x0, #2] ; encoding: [0x00,0x20,0x00,0xb8]
593 ; CHECK: stur w0, [x0, #-256] ; encoding: [0x00,0x00,0x10,0xb8]
594 ; CHECK: stur b2, [x1, #-2] ; encoding: [0x22,0xe0,0x1f,0x3c]
595 ; CHECK: stur h3, [x2, #3] ; encoding: [0x43,0x30,0x00,0x7c]
596 ; CHECK: stur h3, [x3, #-4] ; encoding: [0x63,0xc0,0x1f,0x7c]
597 ; CHECK: stur s3, [x4, #3] ; encoding: [0x83,0x30,0x00,0xbc]
598 ; CHECK: stur s3, [x5, #-4] ; encoding: [0xa3,0xc0,0x1f,0xbc]
599 ; CHECK: stur d4, [x6, #4] ; encoding: [0xc4,0x40,0x00,0xfc]
600 ; CHECK: stur d4, [x7, #-8] ; encoding: [0xe4,0x80,0x1f,0xfc]
601 ; CHECK: stur q5, [x8, #8] ; encoding: [0x05,0x81,0x80,0x3c]
602 ; CHECK: stur q5, [x9, #-16] ; encoding: [0x25,0x01,0x9f,0x3c]
604 ldrb w3, [x1, #-1]
605 ldrh w4, [x2, #1]
606 ldrh w5, [x3, #-1]
607 ldrsb w6, [x4, #-1]
608 ldrsb x7, [x5, #-1]
609 ldrsh w8, [x6, #1]
610 ldrsh w9, [x7, #-1]
611 ldrsh x1, [x8, #1]
612 ldrsh x2, [x9, #-1]
613 ldrsw x3, [x10, #10]
614 ldrsw x4, [x11, #-1]
616 ; CHECK: ldurb w3, [x1, #-1] ; encoding: [0x23,0xf0,0x5f,0x38]
617 ; CHECK: ldurh w4, [x2, #1] ; encoding: [0x44,0x10,0x40,0x78]
618 ; CHECK: ldurh w5, [x3, #-1] ; encoding: [0x65,0xf0,0x5f,0x78]
619 ; CHECK: ldursb w6, [x4, #-1] ; encoding: [0x86,0xf0,0xdf,0x38]
620 ; CHECK: ldursb x7, [x5, #-1] ; encoding: [0xa7,0xf0,0x9f,0x38]
621 ; CHECK: ldursh w8, [x6, #1] ; encoding: [0xc8,0x10,0xc0,0x78]
622 ; CHECK: ldursh w9, [x7, #-1] ; encoding: [0xe9,0xf0,0xdf,0x78]
623 ; CHECK: ldursh x1, [x8, #1] ; encoding: [0x01,0x11,0x80,0x78]
624 ; CHECK: ldursh x2, [x9, #-1] ; encoding: [0x22,0xf1,0x9f,0x78]
625 ; CHECK: ldursw x3, [x10, #10] ; encoding: [0x43,0xa1,0x80,0xb8]
626 ; CHECK: ldursw x4, [x11, #-1] ; encoding: [0x64,0xf1,0x9f,0xb8]
628 strb w3, [x1, #-1]
629 strh w4, [x2, #1]
630 strh w5, [x3, #-1]
632 ; CHECK: sturb w3, [x1, #-1] ; encoding: [0x23,0xf0,0x1f,0x38]
633 ; CHECK: sturh w4, [x2, #1] ; encoding: [0x44,0x10,0x00,0x78]
634 ; CHECK: sturh w5, [x3, #-1] ; encoding: [0x65,0xf0,0x1f,0x78]