[ARM] Better OR's for MVE compares
[llvm-core.git] / test / MC / AArch64 / arm64-arithmetic-encoding.s
blob7b090692de3179f1a1c71d4fd78ecf6127cd86c2
1 ; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding < %s | FileCheck %s
3 foo:
4 ;==---------------------------------------------------------------------------==
5 ; Add/Subtract with carry/borrow
6 ;==---------------------------------------------------------------------------==
8 adc w1, w2, w3
9 adc x1, x2, x3
10 adcs w5, w4, w3
11 adcs x5, x4, x3
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]
18 sbc w1, w2, w3
19 sbc x1, x2, x3
20 sbcs w1, w2, w3
21 sbcs x1, x2, x3
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 ;==---------------------------------------------------------------------------==
32 add w3, w4, #1024
33 add w3, w4, #1024, lsl #0
34 add x3, x4, #1024
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
43 add w3, w4, #4194304
44 add w3, w4, #0, lsl #12
45 add x3, x4, #1024, lsl #12
46 add x3, x4, #4194304
47 add x3, x4, #0, lsl #12
48 add sp, sp, #32
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]
58 adds w3, w4, #1024
59 adds w3, w4, #1024, lsl #0
60 adds w3, w4, #1024, lsl #12
61 adds x3, x4, #1024
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]
72 sub w3, w4, #1024
73 sub w3, w4, #1024, lsl #0
74 sub w3, w4, #1024, lsl #12
75 sub x3, x4, #1024
76 sub x3, x4, #1024, lsl #0
77 sub x3, x4, #1024, lsl #12
78 sub sp, sp, #32
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]
88 subs w3, w4, #1024
89 subs w3, w4, #1024, lsl #0
90 subs w3, w4, #1024, lsl #12
91 subs x3, x4, #1024
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 ;==---------------------------------------------------------------------------==
106 add w12, w13, w14
107 add x12, x13, x14
108 add w12, w13, w14, lsl #12
109 add x12, x13, x14, lsl #12
110 add x12, x13, x14, lsr #42
111 add x12, x13, x14, asr #39
113 ; CHECK: add w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x0b]
114 ; CHECK: add x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0x8b]
115 ; CHECK: add w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x0b]
116 ; CHECK: add x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x8b]
117 ; CHECK: add x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0x8b]
118 ; CHECK: add x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0x8b]
120 sub w12, w13, w14
121 sub x12, x13, x14
122 sub w12, w13, w14, lsl #12
123 sub x12, x13, x14, lsl #12
124 sub x12, x13, x14, lsr #42
125 sub x12, x13, x14, asr #39
127 ; CHECK: sub w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x4b]
128 ; CHECK: sub x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0xcb]
129 ; CHECK: sub w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x4b]
130 ; CHECK: sub x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xcb]
131 ; CHECK: sub x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xcb]
132 ; CHECK: sub x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xcb]
134 adds w12, w13, w14
135 adds x12, x13, x14
136 adds w12, w13, w14, lsl #12
137 adds x12, x13, x14, lsl #12
138 adds x12, x13, x14, lsr #42
139 adds x12, x13, x14, asr #39
141 ; CHECK: adds w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x2b]
142 ; CHECK: adds x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0xab]
143 ; CHECK: adds w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x2b]
144 ; CHECK: adds x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xab]
145 ; CHECK: adds x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xab]
146 ; CHECK: adds x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xab]
148 subs w12, w13, w14
149 subs x12, x13, x14
150 subs w12, w13, w14, lsl #12
151 subs x12, x13, x14, lsl #12
152 subs x12, x13, x14, lsr #42
153 subs x12, x13, x14, asr #39
155 ; CHECK: subs w12, w13, w14 ; encoding: [0xac,0x01,0x0e,0x6b]
156 ; CHECK: subs x12, x13, x14 ; encoding: [0xac,0x01,0x0e,0xeb]
157 ; CHECK: subs w12, w13, w14, lsl #12 ; encoding: [0xac,0x31,0x0e,0x6b]
158 ; CHECK: subs x12, x13, x14, lsl #12 ; encoding: [0xac,0x31,0x0e,0xeb]
159 ; CHECK: subs x12, x13, x14, lsr #42 ; encoding: [0xac,0xa9,0x4e,0xeb]
160 ; CHECK: subs x12, x13, x14, asr #39 ; encoding: [0xac,0x9d,0x8e,0xeb]
162 ; Check use of upper case register names rdar://14354073
163 add X2, X2, X2
164 ; CHECK: add x2, x2, x2 ; encoding: [0x42,0x00,0x02,0x8b]
166 ;==---------------------------------------------------------------------------==
167 ; Add/Subtract with (optional) extend
168 ;==---------------------------------------------------------------------------==
170 add w1, w2, w3, uxtb
171 add w1, w2, w3, uxth
172 add w1, w2, w3, uxtw
173 add w1, w2, w3, uxtx
174 add w1, w2, w3, sxtb
175 add w1, w2, w3, sxth
176 add w1, w2, w3, sxtw
177 add w1, w2, w3, sxtx
179 ; CHECK: add w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x0b]
180 ; CHECK: add w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x0b]
181 ; CHECK: add w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x0b]
182 ; CHECK: add w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x0b]
183 ; CHECK: add w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x0b]
184 ; CHECK: add w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x0b]
185 ; CHECK: add w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x0b]
186 ; CHECK: add w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x0b]
188 add x1, x2, w3, uxtb
189 add x1, x2, w3, uxth
190 add x1, x2, w3, uxtw
191 add x1, x2, w3, sxtb
192 add x1, x2, w3, sxth
193 add x1, x2, w3, sxtw
195 ; CHECK: add x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x8b]
196 ; CHECK: add x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0x8b]
197 ; CHECK: add x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x8b]
198 ; CHECK: add x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x8b]
199 ; CHECK: add x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x8b]
200 ; CHECK: add x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x8b]
202 add w1, wsp, w3
203 add w1, wsp, w3, uxtw #0
204 add w2, wsp, w3, lsl #1
205 add sp, x2, x3
206 add sp, x2, x3, uxtx #0
208 ; CHECK: add w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x0b]
209 ; CHECK: add w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x0b]
210 ; CHECK: add w2, wsp, w3, lsl #1 ; encoding: [0xe2,0x47,0x23,0x0b]
211 ; CHECK: add sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0x8b]
212 ; CHECK: add sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0x8b]
214 sub w1, w2, w3, uxtb
215 sub w1, w2, w3, uxth
216 sub w1, w2, w3, uxtw
217 sub w1, w2, w3, uxtx
218 sub w1, w2, w3, sxtb
219 sub w1, w2, w3, sxth
220 sub w1, w2, w3, sxtw
221 sub w1, w2, w3, sxtx
223 ; CHECK: sub w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x4b]
224 ; CHECK: sub w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x4b]
225 ; CHECK: sub w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x4b]
226 ; CHECK: sub w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x4b]
227 ; CHECK: sub w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x4b]
228 ; CHECK: sub w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x4b]
229 ; CHECK: sub w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x4b]
230 ; CHECK: sub w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x4b]
232 sub x1, x2, w3, uxtb
233 sub x1, x2, w3, uxth
234 sub x1, x2, w3, uxtw
235 sub x1, x2, w3, sxtb
236 sub x1, x2, w3, sxth
237 sub x1, x2, w3, sxtw
239 ; CHECK: sub x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0xcb]
240 ; CHECK: sub x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0xcb]
241 ; CHECK: sub x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0xcb]
242 ; CHECK: sub x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0xcb]
243 ; CHECK: sub x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0xcb]
244 ; CHECK: sub x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0xcb]
246 sub w1, wsp, w3
247 sub w1, wsp, w3, uxtw #0
248 sub sp, x2, x3
249 sub sp, x2, x3, uxtx #0
250 sub sp, x3, x7, lsl #4
252 ; CHECK: sub w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x4b]
253 ; CHECK: sub w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x4b]
254 ; CHECK: sub sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0xcb]
255 ; CHECK: sub sp, x2, x3 ; encoding: [0x5f,0x60,0x23,0xcb]
256 ; CHECK: sp, x3, x7, lsl #4 ; encoding: [0x7f,0x70,0x27,0xcb]
258 adds w1, w2, w3, uxtb
259 adds w1, w2, w3, uxth
260 adds w1, w2, w3, uxtw
261 adds w1, w2, w3, uxtx
262 adds w1, w2, w3, sxtb
263 adds w1, w2, w3, sxth
264 adds w1, w2, w3, sxtw
265 adds w1, w2, w3, sxtx
267 ; CHECK: adds w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x2b]
268 ; CHECK: adds w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x2b]
269 ; CHECK: adds w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x2b]
270 ; CHECK: adds w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x2b]
271 ; CHECK: adds w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x2b]
272 ; CHECK: adds w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x2b]
273 ; CHECK: adds w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x2b]
274 ; CHECK: adds w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x2b]
276 adds x1, x2, w3, uxtb
277 adds x1, x2, w3, uxth
278 adds x1, x2, w3, uxtw
279 adds x1, x2, w3, uxtx
280 adds x1, x2, w3, sxtb
281 adds x1, x2, w3, sxth
282 adds x1, x2, w3, sxtw
283 adds x1, x2, w3, sxtx
285 ; CHECK: adds x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0xab]
286 ; CHECK: adds x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0xab]
287 ; CHECK: adds x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0xab]
288 ; CHECK: adds x1, x2, w3, uxtx ; encoding: [0x41,0x60,0x23,0xab]
289 ; CHECK: adds x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0xab]
290 ; CHECK: adds x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0xab]
291 ; CHECK: adds x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0xab]
292 ; CHECK: adds x1, x2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0xab]
294 adds w1, wsp, w3
295 adds w1, wsp, w3, uxtw #0
296 adds wzr, wsp, w3, lsl #4
298 ; CHECK: adds w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x2b]
299 ; CHECK: adds w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x2b]
300 ; CHECK: cmn wsp, w3, lsl #4 ; encoding: [0xff,0x53,0x23,0x2b]
302 subs w1, w2, w3, uxtb
303 subs w1, w2, w3, uxth
304 subs w1, w2, w3, uxtw
305 subs w1, w2, w3, uxtx
306 subs w1, w2, w3, sxtb
307 subs w1, w2, w3, sxth
308 subs w1, w2, w3, sxtw
309 subs w1, w2, w3, sxtx
311 ; CHECK: subs w1, w2, w3, uxtb ; encoding: [0x41,0x00,0x23,0x6b]
312 ; CHECK: subs w1, w2, w3, uxth ; encoding: [0x41,0x20,0x23,0x6b]
313 ; CHECK: subs w1, w2, w3, uxtw ; encoding: [0x41,0x40,0x23,0x6b]
314 ; CHECK: subs w1, w2, w3, uxtx ; encoding: [0x41,0x60,0x23,0x6b]
315 ; CHECK: subs w1, w2, w3, sxtb ; encoding: [0x41,0x80,0x23,0x6b]
316 ; CHECK: subs w1, w2, w3, sxth ; encoding: [0x41,0xa0,0x23,0x6b]
317 ; CHECK: subs w1, w2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0x6b]
318 ; CHECK: subs w1, w2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0x6b]
320 subs x1, x2, w3, uxtb
321 subs x1, x2, w3, uxth
322 subs x1, x2, w3, uxtw
323 subs x1, x2, w3, uxtx
324 subs x1, x2, w3, sxtb
325 subs x1, x2, w3, sxth
326 subs x1, x2, w3, sxtw
327 subs x1, x2, w3, sxtx
329 ; CHECK: subs x1, x2, w3, uxtb ; encoding: [0x41,0x00,0x23,0xeb]
330 ; CHECK: subs x1, x2, w3, uxth ; encoding: [0x41,0x20,0x23,0xeb]
331 ; CHECK: subs x1, x2, w3, uxtw ; encoding: [0x41,0x40,0x23,0xeb]
332 ; CHECK: subs x1, x2, w3, uxtx ; encoding: [0x41,0x60,0x23,0xeb]
333 ; CHECK: subs x1, x2, w3, sxtb ; encoding: [0x41,0x80,0x23,0xeb]
334 ; CHECK: subs x1, x2, w3, sxth ; encoding: [0x41,0xa0,0x23,0xeb]
335 ; CHECK: subs x1, x2, w3, sxtw ; encoding: [0x41,0xc0,0x23,0xeb]
336 ; CHECK: subs x1, x2, w3, sxtx ; encoding: [0x41,0xe0,0x23,0xeb]
338 subs w1, wsp, w3
339 subs w1, wsp, w3, uxtw #0
341 ; CHECK: subs w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x6b]
342 ; CHECK: subs w1, wsp, w3 ; encoding: [0xe1,0x43,0x23,0x6b]
344 cmp wsp, w9, lsl #0
345 subs x3, sp, x9, lsl #2
346 cmp wsp, w8, uxtw
347 subs wzr, wsp, w8, uxtw
348 cmp sp, w8, uxtw
349 subs xzr, sp, w8, uxtw
351 ; CHECK: cmp wsp, w9 ; encoding: [0xff,0x43,0x29,0x6b]
352 ; CHECK: subs x3, sp, x9, lsl #2 ; encoding: [0xe3,0x6b,0x29,0xeb]
353 ; CHECK: cmp wsp, w8 ; encoding: [0xff,0x43,0x28,0x6b]
354 ; CHECK: cmp wsp, w8 ; encoding: [0xff,0x43,0x28,0x6b]
355 ; CHECK: cmp sp, w8, uxtw ; encoding: [0xff,0x43,0x28,0xeb]
356 ; CHECK: cmp sp, w8, uxtw ; encoding: [0xff,0x43,0x28,0xeb]
358 sub wsp, w9, w8, uxtw
359 sub w1, wsp, w8, uxtw
360 sub wsp, wsp, w8, uxtw
361 sub sp, x9, w8, uxtw
362 sub x1, sp, w8, uxtw
363 sub sp, sp, w8, uxtw
364 subs w1, wsp, w8, uxtw
365 subs x1, sp, w8, uxtw
367 ; CHECK: sub wsp, w9, w8 ; encoding: [0x3f,0x41,0x28,0x4b]
368 ; CHECK: sub w1, wsp, w8 ; encoding: [0xe1,0x43,0x28,0x4b]
369 ; CHECK: sub wsp, wsp, w8 ; encoding: [0xff,0x43,0x28,0x4b]
370 ; CHECK: sub sp, x9, w8, uxtw ; encoding: [0x3f,0x41,0x28,0xcb]
371 ; CHECK: sub x1, sp, w8, uxtw ; encoding: [0xe1,0x43,0x28,0xcb]
372 ; CHECK: sub sp, sp, w8, uxtw ; encoding: [0xff,0x43,0x28,0xcb]
373 ; CHECK: subs w1, wsp, w8 ; encoding: [0xe1,0x43,0x28,0x6b]
374 ; CHECK: subs x1, sp, w8, uxtw ; encoding: [0xe1,0x43,0x28,0xeb]
376 ;==---------------------------------------------------------------------------==
377 ; Signed/Unsigned divide
378 ;==---------------------------------------------------------------------------==
380 sdiv w1, w2, w3
381 sdiv x1, x2, x3
382 udiv w1, w2, w3
383 udiv x1, x2, x3
385 ; CHECK: sdiv w1, w2, w3 ; encoding: [0x41,0x0c,0xc3,0x1a]
386 ; CHECK: sdiv x1, x2, x3 ; encoding: [0x41,0x0c,0xc3,0x9a]
387 ; CHECK: udiv w1, w2, w3 ; encoding: [0x41,0x08,0xc3,0x1a]
388 ; CHECK: udiv x1, x2, x3 ; encoding: [0x41,0x08,0xc3,0x9a]
390 ;==---------------------------------------------------------------------------==
391 ; Variable shifts
392 ;==---------------------------------------------------------------------------==
394 asrv w1, w2, w3
395 asrv x1, x2, x3
396 asr w1, w2, w3
397 asr x1, x2, x3
398 lslv w1, w2, w3
399 lslv x1, x2, x3
400 lsl w1, w2, w3
401 lsl x1, x2, x3
402 lsrv w1, w2, w3
403 lsrv x1, x2, x3
404 lsr w1, w2, w3
405 lsr x1, x2, x3
406 rorv w1, w2, w3
407 rorv x1, x2, x3
408 ror w1, w2, w3
409 ror x1, x2, x3
411 ; CHECK: encoding: [0x41,0x28,0xc3,0x1a]
412 ; CHECK: encoding: [0x41,0x28,0xc3,0x9a]
413 ; CHECK: encoding: [0x41,0x28,0xc3,0x1a]
414 ; CHECK: encoding: [0x41,0x28,0xc3,0x9a]
415 ; CHECK: encoding: [0x41,0x20,0xc3,0x1a]
416 ; CHECK: encoding: [0x41,0x20,0xc3,0x9a]
417 ; CHECK: encoding: [0x41,0x20,0xc3,0x1a]
418 ; CHECK: encoding: [0x41,0x20,0xc3,0x9a]
419 ; CHECK: encoding: [0x41,0x24,0xc3,0x1a]
420 ; CHECK: encoding: [0x41,0x24,0xc3,0x9a]
421 ; CHECK: encoding: [0x41,0x24,0xc3,0x1a]
422 ; CHECK: encoding: [0x41,0x24,0xc3,0x9a]
423 ; CHECK: encoding: [0x41,0x2c,0xc3,0x1a]
424 ; CHECK: encoding: [0x41,0x2c,0xc3,0x9a]
425 ; CHECK: encoding: [0x41,0x2c,0xc3,0x1a]
426 ; CHECK: encoding: [0x41,0x2c,0xc3,0x9a]
428 ;==---------------------------------------------------------------------------==
429 ; One operand instructions
430 ;==---------------------------------------------------------------------------==
432 cls w1, w2
433 cls x1, x2
434 clz w1, w2
435 clz x1, x2
436 rbit w1, w2
437 rbit x1, x2
438 rev w1, w2
439 rev x1, x2
440 rev16 w1, w2
441 rev16 x1, x2
442 rev32 x1, x2
444 ; CHECK: encoding: [0x41,0x14,0xc0,0x5a]
445 ; CHECK: encoding: [0x41,0x14,0xc0,0xda]
446 ; CHECK: encoding: [0x41,0x10,0xc0,0x5a]
447 ; CHECK: encoding: [0x41,0x10,0xc0,0xda]
448 ; CHECK: encoding: [0x41,0x00,0xc0,0x5a]
449 ; CHECK: encoding: [0x41,0x00,0xc0,0xda]
450 ; CHECK: encoding: [0x41,0x08,0xc0,0x5a]
451 ; CHECK: encoding: [0x41,0x0c,0xc0,0xda]
452 ; CHECK: encoding: [0x41,0x04,0xc0,0x5a]
453 ; CHECK: encoding: [0x41,0x04,0xc0,0xda]
454 ; CHECK: encoding: [0x41,0x08,0xc0,0xda]
456 ;==---------------------------------------------------------------------------==
457 ; 6.6.1 Multiply-add instructions
458 ;==---------------------------------------------------------------------------==
460 madd w1, w2, w3, w4
461 madd x1, x2, x3, x4
462 msub w1, w2, w3, w4
463 msub x1, x2, x3, x4
464 smaddl x1, w2, w3, x4
465 smsubl x1, w2, w3, x4
466 umaddl x1, w2, w3, x4
467 umsubl x1, w2, w3, x4
469 ; CHECK: madd w1, w2, w3, w4 ; encoding: [0x41,0x10,0x03,0x1b]
470 ; CHECK: madd x1, x2, x3, x4 ; encoding: [0x41,0x10,0x03,0x9b]
471 ; CHECK: msub w1, w2, w3, w4 ; encoding: [0x41,0x90,0x03,0x1b]
472 ; CHECK: msub x1, x2, x3, x4 ; encoding: [0x41,0x90,0x03,0x9b]
473 ; CHECK: smaddl x1, w2, w3, x4 ; encoding: [0x41,0x10,0x23,0x9b]
474 ; CHECK: smsubl x1, w2, w3, x4 ; encoding: [0x41,0x90,0x23,0x9b]
475 ; CHECK: umaddl x1, w2, w3, x4 ; encoding: [0x41,0x10,0xa3,0x9b]
476 ; CHECK: umsubl x1, w2, w3, x4 ; encoding: [0x41,0x90,0xa3,0x9b]
478 ;==---------------------------------------------------------------------------==
479 ; Multiply-high instructions
480 ;==---------------------------------------------------------------------------==
482 smulh x1, x2, x3
483 umulh x1, x2, x3
485 ; CHECK: smulh x1, x2, x3 ; encoding: [0x41,0x7c,0x43,0x9b]
486 ; CHECK: umulh x1, x2, x3 ; encoding: [0x41,0x7c,0xc3,0x9b]
488 ;==---------------------------------------------------------------------------==
489 ; Move immediate instructions
490 ;==---------------------------------------------------------------------------==
492 movz w0, #1
493 movz x0, #1
494 movz w0, #1, lsl #16
495 movz x0, #1, lsl #16
497 ; CHECK: mov w0, #1 ; encoding: [0x20,0x00,0x80,0x52]
498 ; CHECK: mov x0, #1 ; encoding: [0x20,0x00,0x80,0xd2]
499 ; CHECK: mov w0, #65536 ; encoding: [0x20,0x00,0xa0,0x52]
500 ; CHECK: mov x0, #65536 ; encoding: [0x20,0x00,0xa0,0xd2]
502 movn w0, #2
503 movn x0, #2
504 movn w0, #2, lsl #16
505 movn x0, #2, lsl #16
507 ; CHECK: mov w0, #-3 ; encoding: [0x40,0x00,0x80,0x12]
508 ; CHECK: mov x0, #-3 ; encoding: [0x40,0x00,0x80,0x92]
509 ; CHECK: mov w0, #-131073 ; encoding: [0x40,0x00,0xa0,0x12]
510 ; CHECK: mov x0, #-131073 ; encoding: [0x40,0x00,0xa0,0x92]
512 movk w0, #1
513 movk x0, #1
514 movk w0, #1, lsl #16
515 movk x0, #1, lsl #16
517 ; CHECK: movk w0, #1 ; encoding: [0x20,0x00,0x80,0x72]
518 ; CHECK: movk x0, #1 ; encoding: [0x20,0x00,0x80,0xf2]
519 ; CHECK: movk w0, #1, lsl #16 ; encoding: [0x20,0x00,0xa0,0x72]
520 ; CHECK: movk x0, #1, lsl #16 ; encoding: [0x20,0x00,0xa0,0xf2]
522 ;==---------------------------------------------------------------------------==
523 ; Conditionally set flags instructions
524 ;==---------------------------------------------------------------------------==
526 ccmn w1, #2, #3, eq
527 ccmn x1, #2, #3, eq
528 ccmp w1, #2, #3, eq
529 ccmp x1, #2, #3, eq
531 ; CHECK: encoding: [0x23,0x08,0x42,0x3a]
532 ; CHECK: encoding: [0x23,0x08,0x42,0xba]
533 ; CHECK: encoding: [0x23,0x08,0x42,0x7a]
534 ; CHECK: encoding: [0x23,0x08,0x42,0xfa]
536 ccmn w1, w2, #3, eq
537 ccmn x1, x2, #3, eq
538 ccmp w1, w2, #3, eq
539 ccmp x1, x2, #3, eq
541 ; CHECK: encoding: [0x23,0x00,0x42,0x3a]
542 ; CHECK: encoding: [0x23,0x00,0x42,0xba]
543 ; CHECK: encoding: [0x23,0x00,0x42,0x7a]
544 ; CHECK: encoding: [0x23,0x00,0x42,0xfa]
546 ;==---------------------------------------------------------------------------==
547 ; Conditional select instructions
548 ;==---------------------------------------------------------------------------==
550 csel w1, w2, w3, eq
551 csel x1, x2, x3, eq
552 csinc w1, w2, w3, eq
553 csinc x1, x2, x3, eq
554 csinv w1, w2, w3, eq
555 csinv x1, x2, x3, eq
556 csneg w1, w2, w3, eq
557 csneg x1, x2, x3, eq
559 ; CHECK: encoding: [0x41,0x00,0x83,0x1a]
560 ; CHECK: encoding: [0x41,0x00,0x83,0x9a]
561 ; CHECK: encoding: [0x41,0x04,0x83,0x1a]
562 ; CHECK: encoding: [0x41,0x04,0x83,0x9a]
563 ; CHECK: encoding: [0x41,0x00,0x83,0x5a]
564 ; CHECK: encoding: [0x41,0x00,0x83,0xda]
565 ; CHECK: encoding: [0x41,0x04,0x83,0x5a]
566 ; CHECK: encoding: [0x41,0x04,0x83,0xda]
568 ; Make sure we handle upper case, too. In particular, condition codes.
569 CSEL W16, W7, W27, EQ
570 CSEL W15, W6, W26, NE
571 CSEL W14, W5, W25, CS
572 CSEL W13, W4, W24, HS
573 csel w12, w3, w23, CC
574 csel w11, w2, w22, LO
575 csel w10, w1, w21, MI
576 csel x9, x9, x1, PL
577 csel x8, x8, x2, VS
578 CSEL X7, X7, X3, VC
579 CSEL X6, X7, X4, HI
580 CSEL X5, X6, X5, LS
581 CSEL X4, X5, X6, GE
582 csel x3, x4, x7, LT
583 csel x2, x3, x8, GT
584 csel x1, x2, x9, LE
585 csel x10, x1, x20, AL
587 ; CHECK: csel w16, w7, w27, eq ; encoding: [0xf0,0x00,0x9b,0x1a]
588 ; CHECK: csel w15, w6, w26, ne ; encoding: [0xcf,0x10,0x9a,0x1a]
589 ; CHECK: csel w14, w5, w25, hs ; encoding: [0xae,0x20,0x99,0x1a]
590 ; CHECK: csel w13, w4, w24, hs ; encoding: [0x8d,0x20,0x98,0x1a]
591 ; CHECK: csel w12, w3, w23, lo ; encoding: [0x6c,0x30,0x97,0x1a]
592 ; CHECK: csel w11, w2, w22, lo ; encoding: [0x4b,0x30,0x96,0x1a]
593 ; CHECK: csel w10, w1, w21, mi ; encoding: [0x2a,0x40,0x95,0x1a]
594 ; CHECK: csel x9, x9, x1, pl ; encoding: [0x29,0x51,0x81,0x9a]
595 ; CHECK: csel x8, x8, x2, vs ; encoding: [0x08,0x61,0x82,0x9a]
596 ; CHECK: csel x7, x7, x3, vc ; encoding: [0xe7,0x70,0x83,0x9a]
597 ; CHECK: csel x6, x7, x4, hi ; encoding: [0xe6,0x80,0x84,0x9a]
598 ; CHECK: csel x5, x6, x5, ls ; encoding: [0xc5,0x90,0x85,0x9a]
599 ; CHECK: csel x4, x5, x6, ge ; encoding: [0xa4,0xa0,0x86,0x9a]
600 ; CHECK: csel x3, x4, x7, lt ; encoding: [0x83,0xb0,0x87,0x9a]
601 ; CHECK: csel x2, x3, x8, gt ; encoding: [0x62,0xc0,0x88,0x9a]
602 ; CHECK: csel x1, x2, x9, le ; encoding: [0x41,0xd0,0x89,0x9a]
603 ; CHECK: csel x10, x1, x20, al ; encoding: [0x2a,0xe0,0x94,0x9a]
606 ;==---------------------------------------------------------------------------==
607 ; Scalar saturating arithmetic
608 ;==---------------------------------------------------------------------------==
609 uqxtn b4, h2
610 uqxtn h2, s3
611 uqxtn s9, d2
613 ; CHECK: uqxtn b4, h2 ; encoding: [0x44,0x48,0x21,0x7e]
614 ; CHECK: uqxtn h2, s3 ; encoding: [0x62,0x48,0x61,0x7e]
615 ; CHECK: uqxtn s9, d2 ; encoding: [0x49,0x48,0xa1,0x7e]