1 // RUN: llvm-mc -triple=aarch64 -mattr=+neon -show-encoding < %s | FileCheck %s
3 // Check that the assembler can handle the documented syntax for AArch64
5 //------------------------------------------------------------------------------
6 // Instructions with 2 vectors and an element
7 //------------------------------------------------------------------------------
9 mla v0.2s, v1.2s, v2.s[2]
10 mla v0.2s, v1.2s, v22.s[2]
11 mla v3.4s, v8.4s, v2.s[1]
12 mla v3.4s, v8.4s, v22.s[3]
14 // CHECK: mla v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x08,0x82,0x2f]
15 // CHECK: mla v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x08,0x96,0x2f]
16 // CHECK: mla v3.4s, v8.4s, v2.s[1] // encoding: [0x03,0x01,0xa2,0x6f]
17 // CHECK: mla v3.4s, v8.4s, v22.s[3] // encoding: [0x03,0x09,0xb6,0x6f]
19 mla v0.4h, v1.4h, v2.h[2]
20 mla v0.4h, v1.4h, v15.h[2]
21 mla v0.8h, v1.8h, v2.h[7]
22 mla v0.8h, v1.8h, v14.h[6]
24 // CHECK: mla v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0x00,0x62,0x2f]
25 // CHECK: mla v0.4h, v1.4h, v15.h[2] // encoding: [0x20,0x00,0x6f,0x2f]
26 // CHECK: mla v0.8h, v1.8h, v2.h[7] // encoding: [0x20,0x08,0x72,0x6f]
27 // CHECK: mla v0.8h, v1.8h, v14.h[6] // encoding: [0x20,0x08,0x6e,0x6f]
29 mls v0.2s, v1.2s, v2.s[2]
30 mls v0.2s, v1.2s, v22.s[2]
31 mls v3.4s, v8.4s, v2.s[1]
32 mls v3.4s, v8.4s, v22.s[3]
34 // CHECK: mls v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x48,0x82,0x2f]
35 // CHECK: mls v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x48,0x96,0x2f]
36 // CHECK: mls v3.4s, v8.4s, v2.s[1] // encoding: [0x03,0x41,0xa2,0x6f]
37 // CHECK: mls v3.4s, v8.4s, v22.s[3] // encoding: [0x03,0x49,0xb6,0x6f]
39 mls v0.4h, v1.4h, v2.h[2]
40 mls v0.4h, v1.4h, v15.h[2]
41 mls v0.8h, v1.8h, v2.h[7]
42 mls v0.8h, v1.8h, v14.h[6]
44 // CHECK: mls v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0x40,0x62,0x2f]
45 // CHECK: mls v0.4h, v1.4h, v15.h[2] // encoding: [0x20,0x40,0x6f,0x2f]
46 // CHECK: mls v0.8h, v1.8h, v2.h[7] // encoding: [0x20,0x48,0x72,0x6f]
47 // CHECK: mls v0.8h, v1.8h, v14.h[6] // encoding: [0x20,0x48,0x6e,0x6f]
49 fmla v0.2s, v1.2s, v2.s[2]
50 fmla v0.2s, v1.2s, v22.s[2]
51 fmla v3.4s, v8.4s, v2.s[1]
52 fmla v3.4s, v8.4s, v22.s[3]
53 fmla v0.2d, v1.2d, v2.d[1]
54 fmla v0.2d, v1.2d, v22.d[1]
56 // CHECK: fmla v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x18,0x82,0x0f]
57 // CHECK: fmla v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x18,0x96,0x0f]
58 // CHECK: fmla v3.4s, v8.4s, v2.s[1] // encoding: [0x03,0x11,0xa2,0x4f]
59 // CHECK: fmla v3.4s, v8.4s, v22.s[3] // encoding: [0x03,0x19,0xb6,0x4f]
60 // CHECK: fmla v0.2d, v1.2d, v2.d[1] // encoding: [0x20,0x18,0xc2,0x4f]
61 // CHECK: fmla v0.2d, v1.2d, v22.d[1] // encoding: [0x20,0x18,0xd6,0x4f]
63 fmls v0.2s, v1.2s, v2.s[2]
64 fmls v0.2s, v1.2s, v22.s[2]
65 fmls v3.4s, v8.4s, v2.s[1]
66 fmls v3.4s, v8.4s, v22.s[3]
67 fmls v0.2d, v1.2d, v2.d[1]
68 fmls v0.2d, v1.2d, v22.d[1]
70 // CHECK: fmls v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x58,0x82,0x0f]
71 // CHECK: fmls v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x58,0x96,0x0f]
72 // CHECK: fmls v3.4s, v8.4s, v2.s[1] // encoding: [0x03,0x51,0xa2,0x4f]
73 // CHECK: fmls v3.4s, v8.4s, v22.s[3] // encoding: [0x03,0x59,0xb6,0x4f]
74 // CHECK: fmls v0.2d, v1.2d, v2.d[1] // encoding: [0x20,0x58,0xc2,0x4f]
75 // CHECK: fmls v0.2d, v1.2d, v22.d[1] // encoding: [0x20,0x58,0xd6,0x4f]
77 smlal v0.4s, v1.4h, v2.h[2]
78 smlal v0.2d, v1.2s, v2.s[2]
79 smlal v0.2d, v1.2s, v22.s[2]
80 smlal2 v0.4s, v1.8h, v1.h[2]
81 smlal2 v0.2d, v1.4s, v1.s[2]
82 smlal2 v0.2d, v1.4s, v22.s[2]
84 // CHECK: smlal v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0x20,0x62,0x0f]
85 // CHECK: smlal v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0x28,0x82,0x0f]
86 // CHECK: smlal v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0x28,0x96,0x0f]
87 // CHECK: smlal2 v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x20,0x61,0x4f]
88 // CHECK: smlal2 v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x28,0x81,0x4f]
89 // CHECK: smlal2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x28,0x96,0x4f]
91 smlsl v0.4s, v1.4h, v2.h[2]
92 smlsl v0.2d, v1.2s, v2.s[2]
93 smlsl v0.2d, v1.2s, v22.s[2]
94 smlsl2 v0.4s, v1.8h, v1.h[2]
95 smlsl2 v0.2d, v1.4s, v1.s[2]
96 smlsl2 v0.2d, v1.4s, v22.s[2]
98 // CHECK: smlsl v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0x60,0x62,0x0f]
99 // CHECK: smlsl v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0x68,0x82,0x0f]
100 // CHECK: smlsl v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0x68,0x96,0x0f]
101 // CHECK: smlsl2 v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x60,0x61,0x4f]
102 // CHECK: smlsl2 v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x68,0x81,0x4f]
103 // CHECK: smlsl2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x68,0x96,0x4f]
105 sqdmlal v0.4s, v1.4h, v2.h[2]
106 sqdmlal v0.2d, v1.2s, v2.s[2]
107 sqdmlal v0.2d, v1.2s, v22.s[2]
108 sqdmlal2 v0.4s, v1.8h, v1.h[2]
109 sqdmlal2 v0.2d, v1.4s, v1.s[2]
110 sqdmlal2 v0.2d, v1.4s, v22.s[2]
112 // CHECK: sqdmlal v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0x30,0x62,0x0f]
113 // CHECK: sqdmlal v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0x38,0x82,0x0f]
114 // CHECK: sqdmlal v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0x38,0x96,0x0f]
115 // CHECK: sqdmlal2 v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x30,0x61,0x4f]
116 // CHECK: sqdmlal2 v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x38,0x81,0x4f]
117 // CHECK: sqdmlal2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x38,0x96,0x4f]
119 umlal v0.4s, v1.4h, v2.h[2]
120 umlal v0.2d, v1.2s, v2.s[2]
121 umlal v0.2d, v1.2s, v22.s[2]
122 umlal2 v0.4s, v1.8h, v1.h[2]
123 umlal2 v0.2d, v1.4s, v1.s[2]
124 umlal2 v0.2d, v1.4s, v22.s[2]
126 // CHECK: umlal v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0x20,0x62,0x2f]
127 // CHECK: umlal v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0x28,0x82,0x2f]
128 // CHECK: umlal v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0x28,0x96,0x2f]
129 // CHECK: umlal2 v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x20,0x61,0x6f]
130 // CHECK: umlal2 v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x28,0x81,0x6f]
131 // CHECK: umlal2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x28,0x96,0x6f]
133 umlsl v0.4s, v1.4h, v2.h[2]
134 umlsl v0.2d, v1.2s, v2.s[2]
135 umlsl v0.2d, v1.2s, v22.s[2]
136 umlsl2 v0.4s, v1.8h, v1.h[2]
137 umlsl2 v0.2d, v1.4s, v1.s[2]
138 umlsl2 v0.2d, v1.4s, v22.s[2]
140 // CHECK: umlsl v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0x60,0x62,0x2f]
141 // CHECK: umlsl v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0x68,0x82,0x2f]
142 // CHECK: umlsl v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0x68,0x96,0x2f]
143 // CHECK: umlsl2 v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x60,0x61,0x6f]
144 // CHECK: umlsl2 v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x68,0x81,0x6f]
145 // CHECK: umlsl2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x68,0x96,0x6f]
147 sqdmlsl v0.4s, v1.4h, v2.h[2]
148 sqdmlsl v0.2d, v1.2s, v2.s[2]
149 sqdmlsl v0.2d, v1.2s, v22.s[2]
150 sqdmlsl2 v0.4s, v1.8h, v1.h[2]
151 sqdmlsl2 v0.2d, v1.4s, v1.s[2]
152 sqdmlsl2 v0.2d, v1.4s, v22.s[2]
154 // CHECK: sqdmlsl v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0x70,0x62,0x0f]
155 // CHECK: sqdmlsl v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0x78,0x82,0x0f]
156 // CHECK: sqdmlsl v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0x78,0x96,0x0f]
157 // CHECK: sqdmlsl2 v0.4s, v1.8h, v1.h[2] // encoding: [0x20,0x70,0x61,0x4f]
158 // CHECK: sqdmlsl2 v0.2d, v1.4s, v1.s[2] // encoding: [0x20,0x78,0x81,0x4f]
159 // CHECK: sqdmlsl2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0x78,0x96,0x4f]
161 mul v0.4h, v1.4h, v2.h[2]
162 mul v0.8h, v1.8h, v2.h[2]
163 mul v0.2s, v1.2s, v2.s[2]
164 mul v0.2s, v1.2s, v22.s[2]
165 mul v0.4s, v1.4s, v2.s[2]
166 mul v0.4s, v1.4s, v22.s[2]
168 // CHECK: mul v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0x80,0x62,0x0f]
169 // CHECK: mul v0.8h, v1.8h, v2.h[2] // encoding: [0x20,0x80,0x62,0x4f]
170 // CHECK: mul v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x88,0x82,0x0f]
171 // CHECK: mul v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x88,0x96,0x0f]
172 // CHECK: mul v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0x88,0x82,0x4f]
173 // CHECK: mul v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0x88,0x96,0x4f]
175 fmul v0.2s, v1.2s, v2.s[2]
176 fmul v0.2s, v1.2s, v22.s[2]
177 fmul v0.4s, v1.4s, v2.s[2]
178 fmul v0.4s, v1.4s, v22.s[2]
179 fmul v0.2d, v1.2d, v2.d[1]
180 fmul v0.2d, v1.2d, v22.d[1]
182 // CHECK: fmul v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x98,0x82,0x0f]
183 // CHECK: fmul v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x98,0x96,0x0f]
184 // CHECK: fmul v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0x98,0x82,0x4f]
185 // CHECK: fmul v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0x98,0x96,0x4f]
186 // CHECK: fmul v0.2d, v1.2d, v2.d[1] // encoding: [0x20,0x98,0xc2,0x4f]
187 // CHECK: fmul v0.2d, v1.2d, v22.d[1] // encoding: [0x20,0x98,0xd6,0x4f]
189 fmulx v0.2s, v1.2s, v2.s[2]
190 fmulx v0.2s, v1.2s, v22.s[2]
191 fmulx v0.4s, v1.4s, v2.s[2]
192 fmulx v0.4s, v1.4s, v22.s[2]
193 fmulx v0.2d, v1.2d, v2.d[1]
194 fmulx v0.2d, v1.2d, v22.d[1]
196 // CHECK: fmulx v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0x98,0x82,0x2f]
197 // CHECK: fmulx v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0x98,0x96,0x2f]
198 // CHECK: fmulx v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0x98,0x82,0x6f]
199 // CHECK: fmulx v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0x98,0x96,0x6f]
200 // CHECK: fmulx v0.2d, v1.2d, v2.d[1] // encoding: [0x20,0x98,0xc2,0x6f]
201 // CHECK: fmulx v0.2d, v1.2d, v22.d[1] // encoding: [0x20,0x98,0xd6,0x6f]
203 smull v0.4s, v1.4h, v2.h[2]
204 smull v0.2d, v1.2s, v2.s[2]
205 smull v0.2d, v1.2s, v22.s[2]
206 smull2 v0.4s, v1.8h, v2.h[2]
207 smull2 v0.2d, v1.4s, v2.s[2]
208 smull2 v0.2d, v1.4s, v22.s[2]
210 // CHECK: smull v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0xa0,0x62,0x0f]
211 // CHECK: smull v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0xa8,0x82,0x0f]
212 // CHECK: smull v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0xa8,0x96,0x0f]
213 // CHECK: smull2 v0.4s, v1.8h, v2.h[2] // encoding: [0x20,0xa0,0x62,0x4f]
214 // CHECK: smull2 v0.2d, v1.4s, v2.s[2] // encoding: [0x20,0xa8,0x82,0x4f]
215 // CHECK: smull2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0xa8,0x96,0x4f]
217 umull v0.4s, v1.4h, v2.h[2]
218 umull v0.2d, v1.2s, v2.s[2]
219 umull v0.2d, v1.2s, v22.s[2]
220 umull2 v0.4s, v1.8h, v2.h[2]
221 umull2 v0.2d, v1.4s, v2.s[2]
222 umull2 v0.2d, v1.4s, v22.s[2]
224 // CHECK: umull v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0xa0,0x62,0x2f]
225 // CHECK: umull v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0xa8,0x82,0x2f]
226 // CHECK: umull v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0xa8,0x96,0x2f]
227 // CHECK: umull2 v0.4s, v1.8h, v2.h[2] // encoding: [0x20,0xa0,0x62,0x6f]
228 // CHECK: umull2 v0.2d, v1.4s, v2.s[2] // encoding: [0x20,0xa8,0x82,0x6f]
229 // CHECK: umull2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0xa8,0x96,0x6f]
231 sqdmull v0.4s, v1.4h, v2.h[2]
232 sqdmull v0.2d, v1.2s, v2.s[2]
233 sqdmull v0.2d, v1.2s, v22.s[2]
234 sqdmull2 v0.4s, v1.8h, v2.h[2]
235 sqdmull2 v0.2d, v1.4s, v2.s[2]
236 sqdmull2 v0.2d, v1.4s, v22.s[2]
238 // CHECK: sqdmull v0.4s, v1.4h, v2.h[2] // encoding: [0x20,0xb0,0x62,0x0f]
239 // CHECK: sqdmull v0.2d, v1.2s, v2.s[2] // encoding: [0x20,0xb8,0x82,0x0f]
240 // CHECK: sqdmull v0.2d, v1.2s, v22.s[2] // encoding: [0x20,0xb8,0x96,0x0f]
241 // CHECK: sqdmull2 v0.4s, v1.8h, v2.h[2] // encoding: [0x20,0xb0,0x62,0x4f]
242 // CHECK: sqdmull2 v0.2d, v1.4s, v2.s[2] // encoding: [0x20,0xb8,0x82,0x4f]
243 // CHECK: sqdmull2 v0.2d, v1.4s, v22.s[2] // encoding: [0x20,0xb8,0x96,0x4f]
245 sqdmulh v0.4h, v1.4h, v2.h[2]
246 sqdmulh v0.8h, v1.8h, v2.h[2]
247 sqdmulh v0.2s, v1.2s, v2.s[2]
248 sqdmulh v0.2s, v1.2s, v22.s[2]
249 sqdmulh v0.4s, v1.4s, v2.s[2]
250 sqdmulh v0.4s, v1.4s, v22.s[2]
252 // CHECK: sqdmulh v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0xc0,0x62,0x0f]
253 // CHECK: sqdmulh v0.8h, v1.8h, v2.h[2] // encoding: [0x20,0xc0,0x62,0x4f]
254 // CHECK: sqdmulh v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0xc8,0x82,0x0f]
255 // CHECK: sqdmulh v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0xc8,0x96,0x0f]
256 // CHECK: sqdmulh v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0xc8,0x82,0x4f]
257 // CHECK: sqdmulh v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0xc8,0x96,0x4f]
259 sqrdmulh v0.4h, v1.4h, v2.h[2]
260 sqrdmulh v0.8h, v1.8h, v2.h[2]
261 sqrdmulh v0.2s, v1.2s, v2.s[2]
262 sqrdmulh v0.2s, v1.2s, v22.s[2]
263 sqrdmulh v0.4s, v1.4s, v2.s[2]
264 sqrdmulh v0.4s, v1.4s, v22.s[2]
266 // CHECK: sqrdmulh v0.4h, v1.4h, v2.h[2] // encoding: [0x20,0xd0,0x62,0x0f]
267 // CHECK: sqrdmulh v0.8h, v1.8h, v2.h[2] // encoding: [0x20,0xd0,0x62,0x4f]
268 // CHECK: sqrdmulh v0.2s, v1.2s, v2.s[2] // encoding: [0x20,0xd8,0x82,0x0f]
269 // CHECK: sqrdmulh v0.2s, v1.2s, v22.s[2] // encoding: [0x20,0xd8,0x96,0x0f]
270 // CHECK: sqrdmulh v0.4s, v1.4s, v2.s[2] // encoding: [0x20,0xd8,0x82,0x4f]
271 // CHECK: sqrdmulh v0.4s, v1.4s, v22.s[2] // encoding: [0x20,0xd8,0x96,0x4f]