1 ; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding < %s | FileCheck %s
4 ;==---------------------------------------------------------------------------==
5 ; Add/Subtract with carry/borrow
6 ;==---------------------------------------------------------------------------==
13 ; CHECK: adc w1, w2, w3 ; encoding: [0x41,0x00,0x03,0x1a]
14 ; CHECK: adc x1, x2, x3 ; encoding: [0x41,0x00,0x03,0x9a]
15 ; CHECK: adcs w5, w4, w3 ; encoding: [0x85,0x00,0x03,0x3a]
16 ; CHECK: adcs x5, x4, x3 ; encoding: [0x85,0x00,0x03,0xba]
23 ; CHECK: sbc w1, w2, w3 ; encoding: [0x41,0x00,0x03,0x5a]
24 ; CHECK: sbc x1, x2, x3 ; encoding: [0x41,0x00,0x03,0xda]
25 ; CHECK: sbcs w1, w2, w3 ; encoding: [0x41,0x00,0x03,0x7a]
26 ; CHECK: sbcs x1, x2, x3 ; encoding: [0x41,0x00,0x03,0xfa]
28 ;==---------------------------------------------------------------------------==
29 ; Add/Subtract with (optionally shifted) immediate
30 ;==---------------------------------------------------------------------------==
33 add w3, w4, #1024, lsl #0
35 add x3, x4, #1024, lsl #0
37 ; CHECK: add w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x11]
38 ; CHECK: add w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x11]
39 ; CHECK: add x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0x91]
40 ; CHECK: add x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0x91]
42 add w3, w4, #1024, lsl #12
44 add w3, w4, #0, lsl #12
45 add x3, x4, #1024, lsl #12
47 add x3, x4, #0, lsl #12
50 ; CHECK: add w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x11]
51 ; CHECK: add w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x11]
52 ; CHECK: add w3, w4, #0, lsl #12 ; encoding: [0x83,0x00,0x40,0x11]
53 ; CHECK: add x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x91]
54 ; CHECK: add x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x91]
55 ; CHECK: add x3, x4, #0, lsl #12 ; encoding: [0x83,0x00,0x40,0x91]
56 ; CHECK: add sp, sp, #32 ; encoding: [0xff,0x83,0x00,0x91]
59 adds w3, w4, #1024, lsl #0
60 adds w3, w4, #1024, lsl #12
62 adds x3, x4, #1024, lsl #0
63 adds x3, x4, #1024, lsl #12
65 ; CHECK: adds w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x31]
66 ; CHECK: adds w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x31]
67 ; CHECK: adds w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x31]
68 ; CHECK: adds x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0xb1]
69 ; CHECK: adds x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0xb1]
70 ; CHECK: adds x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0xb1]
73 sub w3, w4, #1024, lsl #0
74 sub w3, w4, #1024, lsl #12
76 sub x3, x4, #1024, lsl #0
77 sub x3, x4, #1024, lsl #12
80 ; CHECK: sub w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x51]
81 ; CHECK: sub w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x51]
82 ; CHECK: sub w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x51]
83 ; CHECK: sub x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0xd1]
84 ; CHECK: sub x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0xd1]
85 ; CHECK: sub x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0xd1]
86 ; CHECK: sub sp, sp, #32 ; encoding: [0xff,0x83,0x00,0xd1]
89 subs w3, w4, #1024, lsl #0
90 subs w3, w4, #1024, lsl #12
92 subs x3, x4, #1024, lsl #0
93 subs x3, x4, #1024, lsl #12
95 ; CHECK: subs w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x71]
96 ; CHECK: subs w3, w4, #1024 ; encoding: [0x83,0x00,0x10,0x71]
97 ; CHECK: subs w3, w4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0x71]
98 ; CHECK: subs x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0xf1]
99 ; CHECK: subs x3, x4, #1024 ; encoding: [0x83,0x00,0x10,0xf1]
100 ; CHECK: subs x3, x4, #1024, lsl #12 ; encoding: [0x83,0x00,0x50,0xf1]
102 ;==---------------------------------------------------------------------------==
103 ; Add/Subtract register with (optional) shift
104 ;==---------------------------------------------------------------------------==
108 add w12, w13, w14, lsl #12
109 add x12, x13, x14, lsl #12
110 add w12, w13, w14, lsr #42
111 add x12, x13, x14, lsr #42
112 add w12, w13, w14, asr #39
113 add x12, x13, x14, asr #39
115 ; CHECK: add w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x0b]
116 ; CHECK: add x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0x8b]
117 ; CHECK: add w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x0b]
118 ; CHECK: add x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x8b]
119 ; CHECK: add w12, w13, w14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0x0b]
120 ; CHECK: add x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0x8b]
121 ; CHECK: add w12, w13, w14, asr #39 ; encoding: [0xac,0x9d,0x8e,0x0b]
122 ; CHECK: add x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0x8b]
126 sub w12, w13, w14, lsl #12
127 sub x12, x13, x14, lsl #12
128 sub w12, w13, w14, lsr #42
129 sub x12, x13, x14, lsr #42
130 sub w12, w13, w14, asr #39
131 sub x12, x13, x14, asr #39
133 ; CHECK: sub w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x4b]
134 ; CHECK: sub x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0xcb]
135 ; CHECK: sub w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x4b]
136 ; CHECK: sub x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xcb]
137 ; CHECK: sub w12, w13, w14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0x4b]
138 ; CHECK: sub x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xcb]
139 ; CHECK: sub w12, w13, w14, asr #39 ; encoding: [0xac,0x9d,0x8e,0x4b]
140 ; CHECK: sub x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xcb]
144 adds w12, w13, w14, lsl #12
145 adds x12, x13, x14, lsl #12
146 adds w12, w13, w14, lsr #42
147 adds x12, x13, x14, lsr #42
148 adds w12, w13, w14, asr #39
149 adds x12, x13, x14, asr #39
151 ; CHECK: adds w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x2b]
152 ; CHECK: adds x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0xab]
153 ; CHECK: adds w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x2b]
154 ; CHECK: adds x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xab]
155 ; CHECK: adds w12, w13, w14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0x2b]
156 ; CHECK: adds x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xab]
157 ; CHECK: adds w12, w13, w14, asr #39 ; encoding: [0xac,0x9d,0x8e,0x2b]
158 ; CHECK: adds x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xab]
162 subs w12, w13, w14, lsl #12
163 subs x12, x13, x14, lsl #12
164 subs w12, w13, w14, lsr #42
165 subs x12, x13, x14, lsr #42
166 subs w12, w13, w14, asr #39
167 subs x12, x13, x14, asr #39
169 ; CHECK: subs w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x6b]
170 ; CHECK: subs x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0xeb]
171 ; CHECK: subs w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x6b]
172 ; CHECK: subs x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xeb]
173 ; CHECK: subs w12, w13, w14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0x6b]
174 ; CHECK: subs x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xeb]
175 ; CHECK: subs w12, w13, w14, asr #39 ; encoding: [0xac,0x9d,0x8e,0x6b]
176 ; CHECK: subs x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xeb]
178 ; Check use of upper case register names rdar://14354073
180 ; CHECK: add x2, x2, x2 ; encoding: [0x42,0x00,0x02,0x8b]
182 ;==---------------------------------------------------------------------------==
183 ; Add/Subtract with (optional) extend
184 ;==---------------------------------------------------------------------------==
195 ; CHECK: add w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x0b]
196 ; CHECK: add w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x0b]
197 ; CHECK: add w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x0b]
198 ; CHECK: add w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x0b]
199 ; CHECK: add w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x0b]
200 ; CHECK: add w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x0b]
201 ; CHECK: add w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x0b]
202 ; CHECK: add w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x0b]
211 ; CHECK: add x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x8b]
212 ; CHECK: add x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0x8b]
213 ; CHECK: add x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x8b]
214 ; CHECK: add x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x8b]
215 ; CHECK: add x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x8b]
216 ; CHECK: add x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x8b]
219 add w1, wsp, w3, uxtw #0
220 add w2, wsp, w3, lsl #1
222 add sp, x2, x3, uxtx #0
224 ; CHECK: add w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x0b]
225 ; CHECK: add w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x0b]
226 ; CHECK: add w2, wsp, w3, lsl #1 ; encoding: [0xe2,0x47,0x23,0x0b]
227 ; CHECK: add sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0x8b]
228 ; CHECK: add sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0x8b]
239 ; CHECK: sub w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x4b]
240 ; CHECK: sub w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x4b]
241 ; CHECK: sub w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x4b]
242 ; CHECK: sub w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x4b]
243 ; CHECK: sub w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x4b]
244 ; CHECK: sub w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x4b]
245 ; CHECK: sub w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x4b]
246 ; CHECK: sub w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x4b]
255 ; CHECK: sub x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0xcb]
256 ; CHECK: sub x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0xcb]
257 ; CHECK: sub x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0xcb]
258 ; CHECK: sub x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0xcb]
259 ; CHECK: sub x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0xcb]
260 ; CHECK: sub x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0xcb]
263 sub w1, wsp, w3, uxtw #0
265 sub sp, x2, x3, uxtx #0
266 sub sp, x3, x7, lsl #4
268 ; CHECK: sub w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x4b]
269 ; CHECK: sub w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x4b]
270 ; CHECK: sub sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0xcb]
271 ; CHECK: sub sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0xcb]
272 ; CHECK: sp, x3, x7, lsl #4 ; encoding: [0x7f,0x70,0x27,0xcb]
274 adds w1, w2, w3, uxtb
275 adds w1, w2, w3, uxth
276 adds w1, w2, w3, uxtw
277 adds w1, w2, w3, uxtx
278 adds w1, w2, w3, sxtb
279 adds w1, w2, w3, sxth
280 adds w1, w2, w3, sxtw
281 adds w1, w2, w3, sxtx
283 ; CHECK: adds w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x2b]
284 ; CHECK: adds w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x2b]
285 ; CHECK: adds w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x2b]
286 ; CHECK: adds w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x2b]
287 ; CHECK: adds w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x2b]
288 ; CHECK: adds w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x2b]
289 ; CHECK: adds w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x2b]
290 ; CHECK: adds w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x2b]
292 adds x1, x2, w3, uxtb
293 adds x1, x2, w3, uxth
294 adds x1, x2, w3, uxtw
295 adds x1, x2, w3, uxtx
296 adds x1, x2, w3, sxtb
297 adds x1, x2, w3, sxth
298 adds x1, x2, w3, sxtw
299 adds x1, x2, w3, sxtx
301 ; CHECK: adds x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0xab]
302 ; CHECK: adds x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0xab]
303 ; CHECK: adds x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0xab]
304 ; CHECK: adds x1, x2, w3, uxtx ; encoding: [0x41,0x60,0x23,0xab]
305 ; CHECK: adds x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0xab]
306 ; CHECK: adds x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0xab]
307 ; CHECK: adds x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0xab]
308 ; CHECK: adds x1, x2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0xab]
311 adds w1, wsp, w3, uxtw #0
312 adds wzr, wsp, w3, lsl #4
314 ; CHECK: adds w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x2b]
315 ; CHECK: adds w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x2b]
316 ; CHECK: adds wzr, wsp, w3, lsl #4 ; encoding: [0xff,0x53,0x23,0x2b]
318 subs w1, w2, w3, uxtb
319 subs w1, w2, w3, uxth
320 subs w1, w2, w3, uxtw
321 subs w1, w2, w3, uxtx
322 subs w1, w2, w3, sxtb
323 subs w1, w2, w3, sxth
324 subs w1, w2, w3, sxtw
325 subs w1, w2, w3, sxtx
327 ; CHECK: subs w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x6b]
328 ; CHECK: subs w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x6b]
329 ; CHECK: subs w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x6b]
330 ; CHECK: subs w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x6b]
331 ; CHECK: subs w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x6b]
332 ; CHECK: subs w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x6b]
333 ; CHECK: subs w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x6b]
334 ; CHECK: subs w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x6b]
336 subs x1, x2, w3, uxtb
337 subs x1, x2, w3, uxth
338 subs x1, x2, w3, uxtw
339 subs x1, x2, w3, uxtx
340 subs x1, x2, w3, sxtb
341 subs x1, x2, w3, sxth
342 subs x1, x2, w3, sxtw
343 subs x1, x2, w3, sxtx
345 ; CHECK: subs x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0xeb]
346 ; CHECK: subs x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0xeb]
347 ; CHECK: subs x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0xeb]
348 ; CHECK: subs x1, x2, w3, uxtx ; encoding: [0x41,0x60,0x23,0xeb]
349 ; CHECK: subs x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0xeb]
350 ; CHECK: subs x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0xeb]
351 ; CHECK: subs x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0xeb]
352 ; CHECK: subs x1, x2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0xeb]
355 subs w1, wsp, w3, uxtw #0
357 ; CHECK: subs w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x6b]
358 ; CHECK: subs w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x6b]
361 subs x3, sp, x9, lsl #2
363 subs wzr, wsp, w8, uxtw
365 subs xzr, sp, w8, uxtw
367 ; CHECK: cmp wsp, w9 ; encoding: [0xff,0x43,0x29,0x6b]
368 ; CHECK: subs x3, sp, x9, lsl #2 ; encoding: [0xe3,0x6b,0x29,0xeb]
369 ; CHECK: cmp wsp, w8 ; encoding: [0xff,0x43,0x28,0x6b]
370 ; CHECK: cmp wsp, w8 ; encoding: [0xff,0x43,0x28,0x6b]
371 ; CHECK: cmp sp, w8, uxtw ; encoding: [0xff,0x43,0x28,0xeb]
372 ; CHECK: cmp sp, w8, uxtw ; encoding: [0xff,0x43,0x28,0xeb]
374 sub wsp, w9, w8, uxtw
375 sub w1, wsp, w8, uxtw
376 sub wsp, wsp, w8, uxtw
380 subs w1, wsp, w8, uxtw
381 subs x1, sp, w8, uxtw
383 ; CHECK: sub wsp, w9, w8 ; encoding: [0x3f,0x41,0x28,0x4b]
384 ; CHECK: sub w1, wsp, w8 ; encoding: [0xe1,0x43,0x28,0x4b]
385 ; CHECK: sub wsp, wsp, w8 ; encoding: [0xff,0x43,0x28,0x4b]
386 ; CHECK: sub sp, x9, w8, uxtw ; encoding: [0x3f,0x41,0x28,0xcb]
387 ; CHECK: sub x1, sp, w8, uxtw ; encoding: [0xe1,0x43,0x28,0xcb]
388 ; CHECK: sub sp, sp, w8, uxtw ; encoding: [0xff,0x43,0x28,0xcb]
389 ; CHECK: subs w1, wsp, w8 ; encoding: [0xe1,0x43,0x28,0x6b]
390 ; CHECK: subs x1, sp, w8, uxtw ; encoding: [0xe1,0x43,0x28,0xeb]
392 ;==---------------------------------------------------------------------------==
393 ; Signed/Unsigned divide
394 ;==---------------------------------------------------------------------------==
401 ; CHECK: sdiv w1, w2, w3 ; encoding: [0x41,0x0c,0xc3,0x1a]
402 ; CHECK: sdiv x1, x2, x3 ; encoding: [0x41,0x0c,0xc3,0x9a]
403 ; CHECK: udiv w1, w2, w3 ; encoding: [0x41,0x08,0xc3,0x1a]
404 ; CHECK: udiv x1, x2, x3 ; encoding: [0x41,0x08,0xc3,0x9a]
406 ;==---------------------------------------------------------------------------==
408 ;==---------------------------------------------------------------------------==
427 ; CHECK: encoding: [0x41,0x28,0xc3,0x1a]
428 ; CHECK: encoding: [0x41,0x28,0xc3,0x9a]
429 ; CHECK: encoding: [0x41,0x28,0xc3,0x1a]
430 ; CHECK: encoding: [0x41,0x28,0xc3,0x9a]
431 ; CHECK: encoding: [0x41,0x20,0xc3,0x1a]
432 ; CHECK: encoding: [0x41,0x20,0xc3,0x9a]
433 ; CHECK: encoding: [0x41,0x20,0xc3,0x1a]
434 ; CHECK: encoding: [0x41,0x20,0xc3,0x9a]
435 ; CHECK: encoding: [0x41,0x24,0xc3,0x1a]
436 ; CHECK: encoding: [0x41,0x24,0xc3,0x9a]
437 ; CHECK: encoding: [0x41,0x24,0xc3,0x1a]
438 ; CHECK: encoding: [0x41,0x24,0xc3,0x9a]
439 ; CHECK: encoding: [0x41,0x2c,0xc3,0x1a]
440 ; CHECK: encoding: [0x41,0x2c,0xc3,0x9a]
441 ; CHECK: encoding: [0x41,0x2c,0xc3,0x1a]
442 ; CHECK: encoding: [0x41,0x2c,0xc3,0x9a]
444 ;==---------------------------------------------------------------------------==
445 ; One operand instructions
446 ;==---------------------------------------------------------------------------==
460 ; CHECK: encoding: [0x41,0x14,0xc0,0x5a]
461 ; CHECK: encoding: [0x41,0x14,0xc0,0xda]
462 ; CHECK: encoding: [0x41,0x10,0xc0,0x5a]
463 ; CHECK: encoding: [0x41,0x10,0xc0,0xda]
464 ; CHECK: encoding: [0x41,0x00,0xc0,0x5a]
465 ; CHECK: encoding: [0x41,0x00,0xc0,0xda]
466 ; CHECK: encoding: [0x41,0x08,0xc0,0x5a]
467 ; CHECK: encoding: [0x41,0x0c,0xc0,0xda]
468 ; CHECK: encoding: [0x41,0x04,0xc0,0x5a]
469 ; CHECK: encoding: [0x41,0x04,0xc0,0xda]
470 ; CHECK: encoding: [0x41,0x08,0xc0,0xda]
472 ;==---------------------------------------------------------------------------==
473 ; 6.6.1 Multiply-add instructions
474 ;==---------------------------------------------------------------------------==
480 smaddl x1, w2, w3, x4
481 smsubl x1, w2, w3, x4
482 umaddl x1, w2, w3, x4
483 umsubl x1, w2, w3, x4
485 ; CHECK: madd w1, w2, w3, w4 ; encoding: [0x41,0x10,0x03,0x1b]
486 ; CHECK: madd x1, x2, x3, x4 ; encoding: [0x41,0x10,0x03,0x9b]
487 ; CHECK: msub w1, w2, w3, w4 ; encoding: [0x41,0x90,0x03,0x1b]
488 ; CHECK: msub x1, x2, x3, x4 ; encoding: [0x41,0x90,0x03,0x9b]
489 ; CHECK: smaddl x1, w2, w3, x4 ; encoding: [0x41,0x10,0x23,0x9b]
490 ; CHECK: smsubl x1, w2, w3, x4 ; encoding: [0x41,0x90,0x23,0x9b]
491 ; CHECK: umaddl x1, w2, w3, x4 ; encoding: [0x41,0x10,0xa3,0x9b]
492 ; CHECK: umsubl x1, w2, w3, x4 ; encoding: [0x41,0x90,0xa3,0x9b]
494 ;==---------------------------------------------------------------------------==
495 ; Multiply-high instructions
496 ;==---------------------------------------------------------------------------==
501 ; CHECK: smulh x1, x2, x3 ; encoding: [0x41,0x7c,0x43,0x9b]
502 ; CHECK: umulh x1, x2, x3 ; encoding: [0x41,0x7c,0xc3,0x9b]
504 ;==---------------------------------------------------------------------------==
505 ; Move immediate instructions
506 ;==---------------------------------------------------------------------------==
513 ; CHECK: movz w0, #1 ; encoding: [0x20,0x00,0x80,0x52]
514 ; CHECK: movz x0, #1 ; encoding: [0x20,0x00,0x80,0xd2]
515 ; CHECK: movz w0, #1, lsl #16 ; encoding: [0x20,0x00,0xa0,0x52]
516 ; CHECK: movz x0, #1, lsl #16 ; encoding: [0x20,0x00,0xa0,0xd2]
523 ; CHECK: movn w0, #2 ; encoding: [0x40,0x00,0x80,0x12]
524 ; CHECK: movn x0, #2 ; encoding: [0x40,0x00,0x80,0x92]
525 ; CHECK: movn w0, #2, lsl #16 ; encoding: [0x40,0x00,0xa0,0x12]
526 ; CHECK: movn x0, #2, lsl #16 ; encoding: [0x40,0x00,0xa0,0x92]
533 ; CHECK: movk w0, #1 ; encoding: [0x20,0x00,0x80,0x72]
534 ; CHECK: movk x0, #1 ; encoding: [0x20,0x00,0x80,0xf2]
535 ; CHECK: movk w0, #1, lsl #16 ; encoding: [0x20,0x00,0xa0,0x72]
536 ; CHECK: movk x0, #1, lsl #16 ; encoding: [0x20,0x00,0xa0,0xf2]
538 ;==---------------------------------------------------------------------------==
539 ; Conditionally set flags instructions
540 ;==---------------------------------------------------------------------------==
547 ; CHECK: encoding: [0x23,0x08,0x42,0x3a]
548 ; CHECK: encoding: [0x23,0x08,0x42,0xba]
549 ; CHECK: encoding: [0x23,0x08,0x42,0x7a]
550 ; CHECK: encoding: [0x23,0x08,0x42,0xfa]
557 ; CHECK: encoding: [0x23,0x00,0x42,0x3a]
558 ; CHECK: encoding: [0x23,0x00,0x42,0xba]
559 ; CHECK: encoding: [0x23,0x00,0x42,0x7a]
560 ; CHECK: encoding: [0x23,0x00,0x42,0xfa]
562 ;==---------------------------------------------------------------------------==
563 ; Conditional select instructions
564 ;==---------------------------------------------------------------------------==
575 ; CHECK: encoding: [0x41,0x00,0x83,0x1a]
576 ; CHECK: encoding: [0x41,0x00,0x83,0x9a]
577 ; CHECK: encoding: [0x41,0x04,0x83,0x1a]
578 ; CHECK: encoding: [0x41,0x04,0x83,0x9a]
579 ; CHECK: encoding: [0x41,0x00,0x83,0x5a]
580 ; CHECK: encoding: [0x41,0x00,0x83,0xda]
581 ; CHECK: encoding: [0x41,0x04,0x83,0x5a]
582 ; CHECK: encoding: [0x41,0x04,0x83,0xda]
584 ; Make sure we handle upper case, too. In particular, condition codes.
585 CSEL W16, W7, W27, EQ
586 CSEL W15, W6, W26, NE
587 CSEL W14, W5, W25, CS
588 CSEL W13, W4, W24, HS
589 csel w12, w3, w23, CC
590 csel w11, w2, w22, LO
591 csel w10, w1, w21, MI
601 csel x10, x1, x20, AL
603 ; CHECK: csel w16, w7, w27, eq ; encoding: [0xf0,0x00,0x9b,0x1a]
604 ; CHECK: csel w15, w6, w26, ne ; encoding: [0xcf,0x10,0x9a,0x1a]
605 ; CHECK: csel w14, w5, w25, cs ; encoding: [0xae,0x20,0x99,0x1a]
606 ; CHECK: csel w13, w4, w24, cs ; encoding: [0x8d,0x20,0x98,0x1a]
607 ; CHECK: csel w12, w3, w23, cc ; encoding: [0x6c,0x30,0x97,0x1a]
608 ; CHECK: csel w11, w2, w22, cc ; encoding: [0x4b,0x30,0x96,0x1a]
609 ; CHECK: csel w10, w1, w21, mi ; encoding: [0x2a,0x40,0x95,0x1a]
610 ; CHECK: csel x9, x9, x1, pl ; encoding: [0x29,0x51,0x81,0x9a]
611 ; CHECK: csel x8, x8, x2, vs ; encoding: [0x08,0x61,0x82,0x9a]
612 ; CHECK: csel x7, x7, x3, vc ; encoding: [0xe7,0x70,0x83,0x9a]
613 ; CHECK: csel x6, x7, x4, hi ; encoding: [0xe6,0x80,0x84,0x9a]
614 ; CHECK: csel x5, x6, x5, ls ; encoding: [0xc5,0x90,0x85,0x9a]
615 ; CHECK: csel x4, x5, x6, ge ; encoding: [0xa4,0xa0,0x86,0x9a]
616 ; CHECK: csel x3, x4, x7, lt ; encoding: [0x83,0xb0,0x87,0x9a]
617 ; CHECK: csel x2, x3, x8, gt ; encoding: [0x62,0xc0,0x88,0x9a]
618 ; CHECK: csel x1, x2, x9, le ; encoding: [0x41,0xd0,0x89,0x9a]
619 ; CHECK: csel x10, x1, x20, al ; encoding: [0x2a,0xe0,0x94,0x9a]
622 ;==---------------------------------------------------------------------------==
623 ; Scalar saturating arithmetic
624 ;==---------------------------------------------------------------------------==
629 ; CHECK: uqxtn b4, h2 ; encoding: [0x44,0x48,0x21,0x7e]
630 ; CHECK: uqxtn h2, s3 ; encoding: [0x62,0x48,0x61,0x7e]
631 ; CHECK: uqxtn s9, d2 ; encoding: [0x49,0x48,0xa1,0x7e]