ARM64: use hex immediates for movz/movk instructions
[oota-llvm.git] / test / MC / ARM64 / arithmetic-encoding.s
1 ; RUN: llvm-mc -triple arm64-apple-darwin -mattr=neon -show-encoding < %s | FileCheck %s
2
3 foo:
4 ;==---------------------------------------------------------------------------==
5 ; Add/Subtract with carry/borrow
6 ;==---------------------------------------------------------------------------==
7
8   adc   w1, w2, w3
9   adc   x1, x2, x3
10   adcs  w5, w4, w3
11   adcs  x5, x4, x3
12
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]
17
18   sbc   w1, w2, w3
19   sbc   x1, x2, x3
20   sbcs  w1, w2, w3
21   sbcs  x1, x2, x3
22
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]
27
28 ;==---------------------------------------------------------------------------==
29 ; Add/Subtract with (optionally shifted) immediate
30 ;==---------------------------------------------------------------------------==
31
32   add w3, w4, #1024
33   add w3, w4, #1024, lsl #0
34   add x3, x4, #1024
35   add x3, x4, #1024, lsl #0
36
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]
41
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
49
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]
57
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
64
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]
71
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
79
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]
87
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
94
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]
101
102 ;==---------------------------------------------------------------------------==
103 ; Add/Subtract register with (optional) shift
104 ;==---------------------------------------------------------------------------==
105
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 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
114
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]
123
124   sub w12, w13, w14
125   sub x12, x13, x14
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
132
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]
141
142   adds w12, w13, w14
143   adds x12, x13, x14
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
150
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]
159
160   subs w12, w13, w14
161   subs x12, x13, x14
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
168
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]
177
178 ; Check use of upper case register names rdar://14354073
179   add X2, X2, X2
180 ; CHECK: add x2, x2, x2              ; encoding: [0x42,0x00,0x02,0x8b]
181
182 ;==---------------------------------------------------------------------------==
183 ; Add/Subtract with (optional) extend
184 ;==---------------------------------------------------------------------------==
185
186   add w1, w2, w3, uxtb
187   add w1, w2, w3, uxth
188   add w1, w2, w3, uxtw
189   add w1, w2, w3, uxtx
190   add w1, w2, w3, sxtb
191   add w1, w2, w3, sxth
192   add w1, w2, w3, sxtw
193   add w1, w2, w3, sxtx
194
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]
203
204   add x1, x2, w3, uxtb
205   add x1, x2, w3, uxth
206   add x1, x2, w3, uxtw
207   add x1, x2, w3, sxtb
208   add x1, x2, w3, sxth
209   add x1, x2, w3, sxtw
210
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]
217
218   add w1, wsp, w3
219   add w1, wsp, w3, uxtw #0
220   add w2, wsp, w3, lsl #1
221   add sp, x2, x3
222   add sp, x2, x3, uxtx #0
223
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]
229
230   sub w1, w2, w3, uxtb
231   sub w1, w2, w3, uxth
232   sub w1, w2, w3, uxtw
233   sub w1, w2, w3, uxtx
234   sub w1, w2, w3, sxtb
235   sub w1, w2, w3, sxth
236   sub w1, w2, w3, sxtw
237   sub w1, w2, w3, sxtx
238
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]
247
248   sub x1, x2, w3, uxtb
249   sub x1, x2, w3, uxth
250   sub x1, x2, w3, uxtw
251   sub x1, x2, w3, sxtb
252   sub x1, x2, w3, sxth
253   sub x1, x2, w3, sxtw
254
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]
261
262   sub w1, wsp, w3
263   sub w1, wsp, w3, uxtw #0
264   sub sp, x2, x3
265   sub sp, x2, x3, uxtx #0
266   sub sp, x3, x7, lsl #4
267
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]
273
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
282
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]
291
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
300
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]
309
310   adds w1, wsp, w3
311   adds w1, wsp, w3, uxtw #0
312   adds wzr, wsp, w3, lsl #4
313
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]
317
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
326
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]
335
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
344
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]
353
354   subs w1, wsp, w3
355   subs w1, wsp, w3, uxtw #0
356
357 ; CHECK: subs w1, wsp, w3            ; encoding: [0xe1,0x43,0x23,0x6b]
358 ; CHECK: subs w1, wsp, w3            ; encoding: [0xe1,0x43,0x23,0x6b]
359
360   cmp wsp, w9, lsl #0
361   subs x3, sp, x9, lsl #2
362   cmp wsp, w8, uxtw
363   subs wzr, wsp, w8, uxtw
364   cmp sp, w8, uxtw
365   subs xzr, sp, w8, uxtw
366
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]
373
374   sub wsp, w9, w8, uxtw
375   sub w1, wsp, w8, uxtw
376   sub wsp, wsp, w8, uxtw
377   sub sp, x9, w8, uxtw
378   sub x1, sp, w8, uxtw
379   sub sp, sp, w8, uxtw
380   subs w1, wsp, w8, uxtw
381   subs x1, sp, w8, uxtw
382
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]
391
392 ;==---------------------------------------------------------------------------==
393 ; Signed/Unsigned divide
394 ;==---------------------------------------------------------------------------==
395
396   sdiv w1, w2, w3
397   sdiv x1, x2, x3
398   udiv w1, w2, w3
399   udiv x1, x2, x3
400
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]
405
406 ;==---------------------------------------------------------------------------==
407 ; Variable shifts
408 ;==---------------------------------------------------------------------------==
409
410   asrv w1, w2, w3
411   asrv x1, x2, x3
412   asr w1, w2, w3
413   asr x1, x2, x3
414   lslv w1, w2, w3
415   lslv x1, x2, x3
416   lsl w1, w2, w3
417   lsl x1, x2, x3
418   lsrv w1, w2, w3
419   lsrv x1, x2, x3
420   lsr w1, w2, w3
421   lsr x1, x2, x3
422   rorv w1, w2, w3
423   rorv x1, x2, x3
424   ror w1, w2, w3
425   ror x1, x2, x3
426
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]
443
444 ;==---------------------------------------------------------------------------==
445 ; One operand instructions
446 ;==---------------------------------------------------------------------------==
447
448   cls w1, w2
449   cls x1, x2
450   clz w1, w2
451   clz x1, x2
452   rbit w1, w2
453   rbit x1, x2
454   rev w1, w2
455   rev x1, x2
456   rev16 w1, w2
457   rev16 x1, x2
458   rev32 x1, x2
459
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]
471
472 ;==---------------------------------------------------------------------------==
473 ; 6.6.1 Multiply-add instructions
474 ;==---------------------------------------------------------------------------==
475
476   madd   w1, w2, w3, w4
477   madd   x1, x2, x3, x4
478   msub   w1, w2, w3, w4
479   msub   x1, x2, x3, x4
480   smaddl x1, w2, w3, x4
481   smsubl x1, w2, w3, x4
482   umaddl x1, w2, w3, x4
483   umsubl x1, w2, w3, x4
484
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]
493
494 ;==---------------------------------------------------------------------------==
495 ; Multiply-high instructions
496 ;==---------------------------------------------------------------------------==
497
498   smulh x1, x2, x3
499   umulh x1, x2, x3
500
501 ; CHECK: smulh x1, x2, x3            ; encoding: [0x41,0x7c,0x43,0x9b]
502 ; CHECK: umulh x1, x2, x3            ; encoding: [0x41,0x7c,0xc3,0x9b]
503
504 ;==---------------------------------------------------------------------------==
505 ; Move immediate instructions
506 ;==---------------------------------------------------------------------------==
507
508   movz w0, #1
509   movz x0, #1
510   movz w0, #1, lsl #16
511   movz x0, #1, lsl #16
512
513 ; CHECK: movz w0, #0x1                 ; encoding: [0x20,0x00,0x80,0x52]
514 ; CHECK: movz x0, #0x1                 ; encoding: [0x20,0x00,0x80,0xd2]
515 ; CHECK: movz w0, #0x1, lsl #16        ; encoding: [0x20,0x00,0xa0,0x52]
516 ; CHECK: movz x0, #0x1, lsl #16        ; encoding: [0x20,0x00,0xa0,0xd2]
517
518   movn w0, #2
519   movn x0, #2
520   movn w0, #2, lsl #16
521   movn x0, #2, lsl #16
522
523 ; CHECK: movn w0, #0x2                 ; encoding: [0x40,0x00,0x80,0x12]
524 ; CHECK: movn x0, #0x2                 ; encoding: [0x40,0x00,0x80,0x92]
525 ; CHECK: movn w0, #0x2, lsl #16        ; encoding: [0x40,0x00,0xa0,0x12]
526 ; CHECK: movn x0, #0x2, lsl #16        ; encoding: [0x40,0x00,0xa0,0x92]
527
528   movk w0, #1
529   movk x0, #1
530   movk w0, #1, lsl #16
531   movk x0, #1, lsl #16
532
533 ; CHECK: movk w0, #0x1                 ; encoding: [0x20,0x00,0x80,0x72]
534 ; CHECK: movk x0, #0x1                 ; encoding: [0x20,0x00,0x80,0xf2]
535 ; CHECK: movk w0, #0x1, lsl #16        ; encoding: [0x20,0x00,0xa0,0x72]
536 ; CHECK: movk x0, #0x1, lsl #16        ; encoding: [0x20,0x00,0xa0,0xf2]
537
538 ;==---------------------------------------------------------------------------==
539 ; Conditionally set flags instructions
540 ;==---------------------------------------------------------------------------==
541
542   ccmn w1, #2, #3, eq
543   ccmn x1, #2, #3, eq
544   ccmp w1, #2, #3, eq
545   ccmp x1, #2, #3, eq
546
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]
551
552   ccmn w1, w2, #3, eq
553   ccmn x1, x2, #3, eq
554   ccmp w1, w2, #3, eq
555   ccmp x1, x2, #3, eq
556
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]
561
562 ;==---------------------------------------------------------------------------==
563 ; Conditional select instructions
564 ;==---------------------------------------------------------------------------==
565
566   csel w1, w2, w3, eq
567   csel x1, x2, x3, eq
568   csinc w1, w2, w3, eq
569   csinc x1, x2, x3, eq
570   csinv w1, w2, w3, eq
571   csinv x1, x2, x3, eq
572   csneg w1, w2, w3, eq
573   csneg x1, x2, x3, eq
574
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]
583
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
592   csel x9, x9, x1, PL
593   csel x8, x8, x2, VS
594   CSEL X7, X7, X3, VC
595   CSEL X6, X7, X4, HI
596   CSEL X5, X6, X5, LS
597   CSEL X4, X5, X6, GE
598   csel x3, x4, x7, LT
599   csel x2, x3, x8, GT
600   csel x1, x2, x9, LE
601   csel x10, x1, x20, AL
602
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]
620
621
622 ;==---------------------------------------------------------------------------==
623 ; Scalar saturating arithmetic
624 ;==---------------------------------------------------------------------------==
625   uqxtn b4, h2
626   uqxtn h2, s3
627   uqxtn s9, d2
628
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]