master
decode 2,147 lines 98.6 KB
Raw
1 # AArch64 SVE instruction descriptions
2 #
3 # Copyright (c) 2017 Linaro, Ltd
4 #
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License, or (at your option) any later version.
9 #
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
14 #
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, see <http://www.gnu.org/licenses/>.
17
18 #
19 # This file is processed by scripts/decodetree.py
20 #
21
22 ###########################################################################
23 # Named fields. These are primarily for disjoint fields.
24
25 %imm4_16_p1 16:4 !function=plus_1
26 %imm6_22_5 22:1 5:5
27 %imm7_22_16 22:2 16:5
28 %imm8_16_10 16:5 10:3
29 %imm9_16_10 16:s6 10:3
30 %size_23 23:2
31 %dtype_23_13 23:2 13:2
32 %index4_19_10 19:2 10:2
33 %index3_22_19 22:1 19:2
34 %index3_22_17 22:1 17:2
35 %index3_22_12 22:2 12:1
36 %index3_19_11 19:2 11:1
37 %index2_20_11 20:1 11:1
38
39 # A combination of tsz:imm3 -- extract esize.
40 %tszimm_esz 22:2 5:5 !function=tszimm_esz
41 # A combination of tsz:imm3 -- extract (2 * esize) - (tsz:imm3)
42 %tszimm_shr 22:2 5:5 !function=tszimm_shr
43 # A combination of tsz:imm3 -- extract (tsz:imm3) - esize
44 %tszimm_shl 22:2 5:5 !function=tszimm_shl
45
46 # Similarly for the tszh/tszl pair at 22/16 for zzi
47 %tszimm16_esz 22:2 16:5 !function=tszimm_esz
48 %tszimm16_shr 22:2 16:5 !function=tszimm_shr
49 %tszimm16_shl 22:2 16:5 !function=tszimm_shl
50
51 # Signed 8-bit immediate, optionally shifted left by 8.
52 %sh8_i8s 5:9 !function=expand_imm_sh8s
53 # Unsigned 8-bit immediate, optionally shifted left by 8.
54 %sh8_i8u 5:9 !function=expand_imm_sh8u
55
56 # Unsigned load of msz into esz=2, represented as a dtype.
57 %msz_dtype 23:2 !function=msz_dtype
58
59 # Either a copy of rd (at bit 0), or a different source
60 # as propagated via the MOVPRFX instruction.
61 %reg_movprfx 0:5
62
63 %zd_ax2 1:4 !function=times_2
64 %zd_ax4 2:3 !function=times_4
65 %rn_ax2 6:4 !function=times_2
66
67 %pnd 0:3 !function=plus_8
68 %pnn 5:3 !function=plus_8
69
70 ###########################################################################
71 # Named attribute sets. These are used to make nice(er) names
72 # when creating helpers common to those for the individual
73 # instruction patterns.
74
75 &rx_n rdn rm index n
76 &rr_esz rd rn esz
77 &rri rd rn imm
78 &rr_dbm rd rn dbm
79 &rrri rd rn rm imm
80 &rxx rd rn rm idxn idxm
81 &rri_esz rd rn imm esz
82 &rrri_esz rd rn rm imm esz
83 &rrr_esz rd rn rm esz
84 &rrx_esz rd rn rm index esz
85 &rpr_esz rd pg rn esz
86 &rpr_s rd pg rn s
87 &rprr_s rd pg rn rm s
88 &rprr_esz rd pg rn rm esz
89 &rrrr_esz rd ra rn rm esz
90 &rrxr_esz rd rn rm ra index esz
91 &rprrr_esz rd pg rn rm ra esz
92 &rpri_esz rd pg rn imm esz
93 &ptrue rd esz pat s
94 &incdec_cnt rd pat esz imm d u
95 &incdec2_cnt rd rn pat esz imm d u
96 &incdec_pred rd pg esz d u
97 &incdec2_pred rd rn pg esz d u
98 &rprr_load rd pg rn rm dtype nreg
99 &rpri_load rd pg rn imm dtype nreg
100 &rprr_store rd pg rn rm msz esz nreg
101 &rpri_store rd pg rn imm msz esz nreg
102 &rprr_gather_load rd pg rn rm esz msz u ff xs scale
103 &rpri_gather_load rd pg rn imm esz msz u ff
104 &rprr_scatter_store rd pg rn rm esz msz xs scale
105 &rpri_scatter_store rd pg rn imm esz msz
106
107 ###########################################################################
108 # Named instruction formats. These are generally used to
109 # reduce the amount of duplication between instruction patterns.
110
111 # Two operand with unused vector element size
112 @pd_pn_e0 ........ ........ ....... rn:4 . rd:4 &rr_esz esz=0
113
114 # Two operand
115 @pd_pn ........ esz:2 .. .... ....... rn:4 . rd:4 &rr_esz
116 @rd_rn ........ esz:2 ...... ...... rn:5 rd:5 &rr_esz
117 @rd_rn_e0 ........ .. ...... ...... rn:5 rd:5 &rr_esz esz=0
118 @rd_rnx2 ........ ... ..... ...... ..... rd:5 &rr_esz rn=%rn_ax2
119
120 # Two operand with governing predicate, flags setting
121 @pd_pg_pn_s ........ . s:1 ...... .. pg:4 . rn:4 . rd:4 &rpr_s
122 @pd_pg_pn_s0 ........ . . ...... .. pg:4 . rn:4 . rd:4 &rpr_s s=0
123
124 # Three operand with unused vector element size
125 @rd_rn_rm_e0 ........ ... rm:5 ... ... rn:5 rd:5 &rrr_esz esz=0
126
127 # Three predicate operand, with governing predicate, flag setting
128 @pd_pg_pn_pm_s ........ . s:1 .. rm:4 .. pg:4 . rn:4 . rd:4 &rprr_s
129
130 # Three operand, vector element size
131 @rd_rn_rm ........ esz:2 . rm:5 ... ... rn:5 rd:5 &rrr_esz
132 @pd_pn_pm ........ esz:2 .. rm:4 ....... rn:4 . rd:4 &rrr_esz
133 @rdn_rm ........ esz:2 ...... ...... rm:5 rd:5 \
134 &rrr_esz rn=%reg_movprfx
135 @rdn_rm_e0 ........ .. ...... ...... rm:5 rd:5 \
136 &rrr_esz rn=%reg_movprfx esz=0
137 @rdn_sh_i8u ........ esz:2 ...... ...... ..... rd:5 \
138 &rri_esz rn=%reg_movprfx imm=%sh8_i8u
139 @rdn_i8u ........ esz:2 ...... ... imm:8 rd:5 \
140 &rri_esz rn=%reg_movprfx
141 @rdn_i8s ........ esz:2 ...... ... imm:s8 rd:5 \
142 &rri_esz rn=%reg_movprfx
143
144 # Four operand, vector element size
145 @rda_rn_rm ........ esz:2 . rm:5 ... ... rn:5 rd:5 \
146 &rrrr_esz ra=%reg_movprfx
147
148 # Four operand with explicit vector element size
149 @rda_rn_rm_ex ........ ... rm:5 ... ... rn:5 rd:5 \
150 &rrrr_esz ra=%reg_movprfx
151 @rdn_ra_rm_ex ........ ... rm:5 ... ... ra:5 rd:5 \
152 &rrrr_esz rn=%reg_movprfx
153
154 # Three operand with "memory" size, aka immediate left shift
155 @rd_rn_msz_rm ........ ... rm:5 .... imm:2 rn:5 rd:5 &rrri
156
157 # Two register operand, with governing predicate, vector element size
158 @rdn_pg_rm ........ esz:2 ... ... ... pg:3 rm:5 rd:5 \
159 &rprr_esz rn=%reg_movprfx
160 @rdm_pg_rn ........ esz:2 ... ... ... pg:3 rn:5 rd:5 \
161 &rprr_esz rm=%reg_movprfx
162 @rd_pg4_rn_rm ........ esz:2 . rm:5 .. pg:4 rn:5 rd:5 &rprr_esz
163 @pd_pg_rn_rm ........ esz:2 . rm:5 ... pg:3 rn:5 . rd:4 &rprr_esz
164
165 @rdn_pg_rm_e0 ........ .. ... ... ... pg:3 rm:5 rd:5 \
166 &rprr_esz esz=0 rn=%reg_movprfx
167
168 # Three register operand, with governing predicate, vector element size
169 @rda_pg_rn_rm ........ esz:2 . rm:5 ... pg:3 rn:5 rd:5 \
170 &rprrr_esz ra=%reg_movprfx
171 @rdn_pg_ra_rm ........ esz:2 . rm:5 ... pg:3 ra:5 rd:5 \
172 &rprrr_esz rn=%reg_movprfx
173 @rdn_pg_rm_ra ........ esz:2 . ra:5 ... pg:3 rm:5 rd:5 \
174 &rprrr_esz rn=%reg_movprfx
175 @rd_pg_rn_rm ........ esz:2 . rm:5 ... pg:3 rn:5 rd:5 &rprr_esz
176
177 # One register operand, with governing predicate, vector element size
178 @rd_pg_rn ........ esz:2 ... ... ... pg:3 rn:5 rd:5 &rpr_esz
179 @rd_pg4_pn ........ esz:2 ... ... .. pg:4 . rn:4 rd:5 &rpr_esz
180 @pd_pg_rn ........ esz:2 ... ... ... pg:3 rn:5 . rd:4 &rpr_esz
181
182 # One register operand, with governing predicate, no vector element size
183 @rd_pg_rn_e0 ........ .. ... ... ... pg:3 rn:5 rd:5 &rpr_esz esz=0
184
185 # Two register operands with a 6-bit signed immediate.
186 @rd_rn_i6 ........ ... rn:5 ..... imm:s6 rd:5 &rri
187
188 # Two register operand, one immediate operand, with predicate,
189 # element size encoded as TSZHL.
190 @rdn_pg_tszimm_shl ........ .. ... ... ... pg:3 ..... rd:5 \
191 &rpri_esz rn=%reg_movprfx esz=%tszimm_esz imm=%tszimm_shl
192 @rdn_pg_tszimm_shr ........ .. ... ... ... pg:3 ..... rd:5 \
193 &rpri_esz rn=%reg_movprfx esz=%tszimm_esz imm=%tszimm_shr
194
195 # Similarly without predicate.
196 @rd_rn_tszimm_shl ........ .. ... ... ...... rn:5 rd:5 \
197 &rri_esz esz=%tszimm16_esz imm=%tszimm16_shl
198 @rd_rn_tszimm_shr ........ .. ... ... ...... rn:5 rd:5 \
199 &rri_esz esz=%tszimm16_esz imm=%tszimm16_shr
200
201 # Two register operand, one immediate operand, with 4-bit predicate.
202 # User must fill in imm.
203 @rdn_pg4 ........ esz:2 .. pg:4 ... ........ rd:5 \
204 &rpri_esz rn=%reg_movprfx
205
206 # Two register operand, one one-bit floating-point operand.
207 @rdn_i1 ........ esz:2 ......... pg:3 .... imm:1 rd:5 \
208 &rpri_esz rn=%reg_movprfx
209
210 # Two register operand, one encoded bitmask.
211 @rdn_dbm ........ .. .... dbm:13 rd:5 \
212 &rr_dbm rn=%reg_movprfx
213
214 # Predicate output, vector and immediate input,
215 # controlling predicate, element size.
216 @pd_pg_rn_i7 ........ esz:2 . imm:7 . pg:3 rn:5 . rd:4 &rpri_esz
217 @pd_pg_rn_i5 ........ esz:2 . imm:s5 ... pg:3 rn:5 . rd:4 &rpri_esz
218
219 # Basic Load/Store with 9-bit immediate offset
220 @pd_rn_i9 ........ ........ ...... rn:5 . rd:4 \
221 &rri imm=%imm9_16_10
222 @rd_rn_i9 ........ ........ ...... rn:5 rd:5 \
223 &rri imm=%imm9_16_10
224
225 # One register, pattern, and uint4+1.
226 # User must fill in U and D.
227 @incdec_cnt ........ esz:2 .. .... ...... pat:5 rd:5 \
228 &incdec_cnt imm=%imm4_16_p1
229 @incdec2_cnt ........ esz:2 .. .... ...... pat:5 rd:5 \
230 &incdec2_cnt imm=%imm4_16_p1 rn=%reg_movprfx
231
232 # One register, predicate.
233 # User must fill in U and D.
234 @incdec_pred ........ esz:2 .... .. ..... .. pg:4 rd:5 &incdec_pred
235 @incdec2_pred ........ esz:2 .... .. ..... .. pg:4 rd:5 \
236 &incdec2_pred rn=%reg_movprfx
237
238 # Loads; user must fill in NREG.
239 @rprr_load_dt ....... dtype:4 rm:5 ... pg:3 rn:5 rd:5 &rprr_load
240 @rpri_load_dt ....... dtype:4 . imm:s4 ... pg:3 rn:5 rd:5 &rpri_load
241
242 @rprr_load ....... .... rm:5 ... pg:3 rn:5 rd:5 &rprr_load
243 @rpri_load ....... .... . imm:s4 ... pg:3 rn:5 rd:5 &rpri_load
244
245 @rprr_load_msz ....... .... rm:5 ... pg:3 rn:5 rd:5 \
246 &rprr_load dtype=%msz_dtype
247 @rpri_load_msz ....... .... . imm:s4 ... pg:3 rn:5 rd:5 \
248 &rpri_load dtype=%msz_dtype
249
250 # Gather Loads.
251 @rprr_g_load_u ....... .. . . rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
252 &rprr_gather_load xs=2
253 @rprr_g_load_xs_u ....... .. xs:1 . rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
254 &rprr_gather_load
255 @rprr_g_load_xs_u_sc ....... .. xs:1 scale:1 rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
256 &rprr_gather_load
257 @rprr_g_load_xs_sc ....... .. xs:1 scale:1 rm:5 . . ff:1 pg:3 rn:5 rd:5 \
258 &rprr_gather_load
259 @rprr_g_load_u_sc ....... .. . scale:1 rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
260 &rprr_gather_load xs=2
261 @rprr_g_load_sc ....... .. . scale:1 rm:5 . . ff:1 pg:3 rn:5 rd:5 \
262 &rprr_gather_load xs=2
263 @rpri_g_load ....... msz:2 .. imm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
264 &rpri_gather_load
265
266 # Stores; user must fill in ESZ, MSZ, NREG as needed.
267 @rprr_store ....... .. .. rm:5 ... pg:3 rn:5 rd:5 &rprr_store
268 @rpri_store ....... .. .. . imm:s4 ... pg:3 rn:5 rd:5 &rpri_store
269 @rprr_store_esz_n0 ....... .. esz:2 rm:5 ... pg:3 rn:5 rd:5 \
270 &rprr_store nreg=0
271 @rprr_scatter_store ....... msz:2 .. rm:5 ... pg:3 rn:5 rd:5 \
272 &rprr_scatter_store
273 @rpri_scatter_store ....... msz:2 .. imm:5 ... pg:3 rn:5 rd:5 \
274 &rpri_scatter_store
275
276 # Two registers and a scalar by N-bit index
277 @rrx_3 ........ .. . .. rm:3 ...... rn:5 rd:5 \
278 &rrx_esz index=%index3_22_19
279 @rrx_2 ........ .. . index:2 rm:3 ...... rn:5 rd:5 &rrx_esz
280 @rrx_1 ........ .. . index:1 rm:4 ...... rn:5 rd:5 &rrx_esz
281
282 # Two registers and a scalar by N-bit index, alternate
283 @rrx_3a ........ .. . .. rm:3 ...... rn:5 rd:5 \
284 &rrx_esz index=%index3_19_11
285 @rrx_2a ........ .. . . rm:4 ...... rn:5 rd:5 \
286 &rrx_esz index=%index2_20_11
287
288 # Three registers and a scalar by N-bit index
289 @rrxr_3 ........ .. . .. rm:3 ...... rn:5 rd:5 \
290 &rrxr_esz ra=%reg_movprfx index=%index3_22_19
291 @rrxr_2 ........ .. . index:2 rm:3 ...... rn:5 rd:5 \
292 &rrxr_esz ra=%reg_movprfx
293 @rrxr_1 ........ .. . index:1 rm:4 ...... rn:5 rd:5 \
294 &rrxr_esz ra=%reg_movprfx
295
296 # Three registers and a scalar by N-bit index, alternate
297 @rrxr_3a ........ .. ... rm:3 ...... rn:5 rd:5 \
298 &rrxr_esz ra=%reg_movprfx index=%index3_19_11
299 @rrxr_2a ........ .. .. rm:4 ...... rn:5 rd:5 \
300 &rrxr_esz ra=%reg_movprfx index=%index2_20_11
301
302 ###########################################################################
303 # Instruction patterns. Grouped according to the SVE encodingindex.xhtml.
304
305 ### SVE Integer Arithmetic - Binary Predicated Group
306
307 # SVE bitwise logical vector operations (predicated)
308 ORR_zpzz 00000100 .. 011 000 000 ... ..... ..... @rdn_pg_rm
309 EOR_zpzz 00000100 .. 011 001 000 ... ..... ..... @rdn_pg_rm
310 AND_zpzz 00000100 .. 011 010 000 ... ..... ..... @rdn_pg_rm
311 BIC_zpzz 00000100 .. 011 011 000 ... ..... ..... @rdn_pg_rm
312
313 # SVE integer add/subtract vectors (predicated)
314 ADD_zpzz 00000100 .. 000 000 000 ... ..... ..... @rdn_pg_rm
315 SUB_zpzz 00000100 .. 000 001 000 ... ..... ..... @rdn_pg_rm
316 SUB_zpzz 00000100 .. 000 011 000 ... ..... ..... @rdm_pg_rn # SUBR
317
318 # SVE integer min/max/difference (predicated)
319 SMAX_zpzz 00000100 .. 001 000 000 ... ..... ..... @rdn_pg_rm
320 UMAX_zpzz 00000100 .. 001 001 000 ... ..... ..... @rdn_pg_rm
321 SMIN_zpzz 00000100 .. 001 010 000 ... ..... ..... @rdn_pg_rm
322 UMIN_zpzz 00000100 .. 001 011 000 ... ..... ..... @rdn_pg_rm
323 SABD_zpzz 00000100 .. 001 100 000 ... ..... ..... @rdn_pg_rm
324 UABD_zpzz 00000100 .. 001 101 000 ... ..... ..... @rdn_pg_rm
325
326 # SVE integer multiply/divide (predicated)
327 MUL_zpzz 00000100 .. 010 000 000 ... ..... ..... @rdn_pg_rm
328 SMULH_zpzz 00000100 .. 010 010 000 ... ..... ..... @rdn_pg_rm
329 UMULH_zpzz 00000100 .. 010 011 000 ... ..... ..... @rdn_pg_rm
330 # Note that divide requires size >= 2; below 2 is unallocated.
331 SDIV_zpzz 00000100 .. 010 100 000 ... ..... ..... @rdn_pg_rm
332 UDIV_zpzz 00000100 .. 010 101 000 ... ..... ..... @rdn_pg_rm
333 SDIV_zpzz 00000100 .. 010 110 000 ... ..... ..... @rdm_pg_rn # SDIVR
334 UDIV_zpzz 00000100 .. 010 111 000 ... ..... ..... @rdm_pg_rn # UDIVR
335
336 ### SVE Integer Reduction Group
337
338 # SVE bitwise logical reduction (predicated)
339 ORV 00000100 .. 011 000 001 ... ..... ..... @rd_pg_rn
340 EORV 00000100 .. 011 001 001 ... ..... ..... @rd_pg_rn
341 ANDV 00000100 .. 011 010 001 ... ..... ..... @rd_pg_rn
342
343 # SVE2.1 bitwise logical reduction (quadwords)
344 ORQV 00000100 .. 011 100 001 ... ..... ..... @rd_pg_rn
345 EORQV 00000100 .. 011 101 001 ... ..... ..... @rd_pg_rn
346 ANDQV 00000100 .. 011 110 001 ... ..... ..... @rd_pg_rn
347
348 # SVE constructive prefix (predicated)
349 MOVPRFX_z 00000100 .. 010 000 001 ... ..... ..... @rd_pg_rn
350 MOVPRFX_m 00000100 .. 010 001 001 ... ..... ..... @rd_pg_rn
351
352 # SVE integer add reduction (predicated)
353 # Note that saddv requires size != 3.
354 UADDV 00000100 .. 000 001 001 ... ..... ..... @rd_pg_rn
355 SADDV 00000100 .. 000 000 001 ... ..... ..... @rd_pg_rn
356
357 # SVE integer min/max reduction (predicated)
358 SMAXV 00000100 .. 001 000 001 ... ..... ..... @rd_pg_rn
359 UMAXV 00000100 .. 001 001 001 ... ..... ..... @rd_pg_rn
360 SMINV 00000100 .. 001 010 001 ... ..... ..... @rd_pg_rn
361 UMINV 00000100 .. 001 011 001 ... ..... ..... @rd_pg_rn
362
363 # SVE2.1 segment reduction
364 ADDQV 00000100 .. 000 101 001 ... ..... ..... @rd_pg_rn
365 SMAXQV 00000100 .. 001 100 001 ... ..... ..... @rd_pg_rn
366 SMINQV 00000100 .. 001 110 001 ... ..... ..... @rd_pg_rn
367 UMAXQV 00000100 .. 001 101 001 ... ..... ..... @rd_pg_rn
368 UMINQV 00000100 .. 001 111 001 ... ..... ..... @rd_pg_rn
369
370 ### SVE Shift by Immediate - Predicated Group
371
372 # SVE bitwise shift by immediate (predicated)
373 ASR_zpzi 00000100 .. 000 000 100 ... .. ... ..... @rdn_pg_tszimm_shr
374 LSR_zpzi 00000100 .. 000 001 100 ... .. ... ..... @rdn_pg_tszimm_shr
375 LSL_zpzi 00000100 .. 000 011 100 ... .. ... ..... @rdn_pg_tszimm_shl
376 ASRD 00000100 .. 000 100 100 ... .. ... ..... @rdn_pg_tszimm_shr
377 SQSHL_zpzi 00000100 .. 000 110 100 ... .. ... ..... @rdn_pg_tszimm_shl
378 UQSHL_zpzi 00000100 .. 000 111 100 ... .. ... ..... @rdn_pg_tszimm_shl
379 SRSHR 00000100 .. 001 100 100 ... .. ... ..... @rdn_pg_tszimm_shr
380 URSHR 00000100 .. 001 101 100 ... .. ... ..... @rdn_pg_tszimm_shr
381 SQSHLU 00000100 .. 001 111 100 ... .. ... ..... @rdn_pg_tszimm_shl
382
383 # SVE bitwise shift by vector (predicated)
384 ASR_zpzz 00000100 .. 010 000 100 ... ..... ..... @rdn_pg_rm
385 LSR_zpzz 00000100 .. 010 001 100 ... ..... ..... @rdn_pg_rm
386 LSL_zpzz 00000100 .. 010 011 100 ... ..... ..... @rdn_pg_rm
387 ASR_zpzz 00000100 .. 010 100 100 ... ..... ..... @rdm_pg_rn # ASRR
388 LSR_zpzz 00000100 .. 010 101 100 ... ..... ..... @rdm_pg_rn # LSRR
389 LSL_zpzz 00000100 .. 010 111 100 ... ..... ..... @rdm_pg_rn # LSLR
390
391 # SVE bitwise shift by wide elements (predicated)
392 # Note these require size != 3.
393 ASR_zpzw 00000100 .. 011 000 100 ... ..... ..... @rdn_pg_rm
394 LSR_zpzw 00000100 .. 011 001 100 ... ..... ..... @rdn_pg_rm
395 LSL_zpzw 00000100 .. 011 011 100 ... ..... ..... @rdn_pg_rm
396
397 ### SVE Integer Arithmetic - Unary Predicated Group
398
399 # SVE unary bit operations (predicated)
400 # Note esz != 0 for FABS and FNEG.
401 CLS_m 00000100 .. 011 000 101 ... ..... ..... @rd_pg_rn
402 CLZ_m 00000100 .. 011 001 101 ... ..... ..... @rd_pg_rn
403 CNT_zpz_m 00000100 .. 011 010 101 ... ..... ..... @rd_pg_rn
404 CNOT_m 00000100 .. 011 011 101 ... ..... ..... @rd_pg_rn
405 NOT_zpz_m 00000100 .. 011 110 101 ... ..... ..... @rd_pg_rn
406 FABS_m 00000100 .. 011 100 101 ... ..... ..... @rd_pg_rn
407 FNEG_m 00000100 .. 011 101 101 ... ..... ..... @rd_pg_rn
408
409 CLS_z 00000100 .. 001 000 101 ... ..... ..... @rd_pg_rn
410 CLZ_z 00000100 .. 001 001 101 ... ..... ..... @rd_pg_rn
411 CNT_zpz_z 00000100 .. 001 010 101 ... ..... ..... @rd_pg_rn
412 CNOT_z 00000100 .. 001 011 101 ... ..... ..... @rd_pg_rn
413 NOT_zpz_z 00000100 .. 001 110 101 ... ..... ..... @rd_pg_rn
414 FABS_z 00000100 .. 001 100 101 ... ..... ..... @rd_pg_rn
415 FNEG_z 00000100 .. 001 101 101 ... ..... ..... @rd_pg_rn
416
417 # SVE integer unary operations (predicated)
418 # Note esz > original size for extensions.
419 ABS_m 00000100 .. 010 110 101 ... ..... ..... @rd_pg_rn
420 NEG_m 00000100 .. 010 111 101 ... ..... ..... @rd_pg_rn
421 SXTB_m 00000100 .. 010 000 101 ... ..... ..... @rd_pg_rn
422 UXTB_m 00000100 .. 010 001 101 ... ..... ..... @rd_pg_rn
423 SXTH_m 00000100 .. 010 010 101 ... ..... ..... @rd_pg_rn
424 UXTH_m 00000100 .. 010 011 101 ... ..... ..... @rd_pg_rn
425 SXTW_m 00000100 .. 010 100 101 ... ..... ..... @rd_pg_rn
426 UXTW_m 00000100 .. 010 101 101 ... ..... ..... @rd_pg_rn
427
428 ABS_z 00000100 .. 000 110 101 ... ..... ..... @rd_pg_rn
429 NEG_z 00000100 .. 000 111 101 ... ..... ..... @rd_pg_rn
430 SXTB_z 00000100 .. 000 000 101 ... ..... ..... @rd_pg_rn
431 UXTB_z 00000100 .. 000 001 101 ... ..... ..... @rd_pg_rn
432 SXTH_z 00000100 .. 000 010 101 ... ..... ..... @rd_pg_rn
433 UXTH_z 00000100 .. 000 011 101 ... ..... ..... @rd_pg_rn
434 SXTW_z 00000100 .. 000 100 101 ... ..... ..... @rd_pg_rn
435 UXTW_z 00000100 .. 000 101 101 ... ..... ..... @rd_pg_rn
436
437 ### SVE Floating Point Compare - Vectors Group
438
439 # SVE floating-point compare vectors
440 FCMGE_ppzz 01100101 .. 0 ..... 010 ... ..... 0 .... @pd_pg_rn_rm
441 FCMGT_ppzz 01100101 .. 0 ..... 010 ... ..... 1 .... @pd_pg_rn_rm
442 FCMEQ_ppzz 01100101 .. 0 ..... 011 ... ..... 0 .... @pd_pg_rn_rm
443 FCMNE_ppzz 01100101 .. 0 ..... 011 ... ..... 1 .... @pd_pg_rn_rm
444 FCMUO_ppzz 01100101 .. 0 ..... 110 ... ..... 0 .... @pd_pg_rn_rm
445 FACGE_ppzz 01100101 .. 0 ..... 110 ... ..... 1 .... @pd_pg_rn_rm
446 FACGT_ppzz 01100101 .. 0 ..... 111 ... ..... 1 .... @pd_pg_rn_rm
447
448 ### SVE Integer Multiply-Add Group
449
450 # SVE integer multiply-add writing addend (predicated)
451 MLA 00000100 .. 0 ..... 010 ... ..... ..... @rda_pg_rn_rm
452 MLS 00000100 .. 0 ..... 011 ... ..... ..... @rda_pg_rn_rm
453
454 # SVE integer multiply-add writing multiplicand (predicated)
455 MLA 00000100 .. 0 ..... 110 ... ..... ..... @rdn_pg_ra_rm # MAD
456 MLS 00000100 .. 0 ..... 111 ... ..... ..... @rdn_pg_ra_rm # MSB
457
458 ### SVE Integer Arithmetic - Unpredicated Group
459
460 # SVE integer add/subtract vectors (unpredicated)
461 ADD_zzz 00000100 .. 1 ..... 000 000 ..... ..... @rd_rn_rm
462 SUB_zzz 00000100 .. 1 ..... 000 001 ..... ..... @rd_rn_rm
463 SQADD_zzz 00000100 .. 1 ..... 000 100 ..... ..... @rd_rn_rm
464 UQADD_zzz 00000100 .. 1 ..... 000 101 ..... ..... @rd_rn_rm
465 SQSUB_zzz 00000100 .. 1 ..... 000 110 ..... ..... @rd_rn_rm
466 UQSUB_zzz 00000100 .. 1 ..... 000 111 ..... ..... @rd_rn_rm
467
468 ### SVE Logical - Unpredicated Group
469
470 # SVE bitwise logical operations (unpredicated)
471 AND_zzz 00000100 00 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
472 ORR_zzz 00000100 01 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
473 EOR_zzz 00000100 10 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
474 BIC_zzz 00000100 11 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
475
476 XAR 00000100 .. 1 ..... 001 101 rm:5 rd:5 &rrri_esz \
477 rn=%reg_movprfx esz=%tszimm16_esz imm=%tszimm16_shr
478
479 # SVE2 bitwise ternary operations
480 EOR3 00000100 00 1 ..... 001 110 ..... ..... @rdn_ra_rm_ex esz=0
481 BSL 00000100 00 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex esz=0
482 BCAX 00000100 01 1 ..... 001 110 ..... ..... @rdn_ra_rm_ex esz=0
483 BSL1N 00000100 01 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex esz=0
484 BSL2N 00000100 10 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex esz=0
485 NBSL 00000100 11 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex esz=0
486
487 ### SVE Index Generation Group
488
489 # SVE index generation (immediate start, immediate increment)
490 INDEX_ii 00000100 esz:2 1 imm2:s5 010000 imm1:s5 rd:5
491
492 # SVE index generation (immediate start, register increment)
493 INDEX_ir 00000100 esz:2 1 rm:5 010010 imm:s5 rd:5
494
495 # SVE index generation (register start, immediate increment)
496 INDEX_ri 00000100 esz:2 1 imm:s5 010001 rn:5 rd:5
497
498 # SVE index generation (register start, register increment)
499 INDEX_rr 00000100 .. 1 ..... 010011 ..... ..... @rd_rn_rm
500
501 ### SVE / Streaming SVE Stack Allocation Group
502
503 # SVE stack frame adjustment
504 ADDVL 00000100 001 ..... 01010 ...... ..... @rd_rn_i6
505 ADDSVL 00000100 001 ..... 01011 ...... ..... @rd_rn_i6
506 ADDPL 00000100 011 ..... 01010 ...... ..... @rd_rn_i6
507 ADDSPL 00000100 011 ..... 01011 ...... ..... @rd_rn_i6
508
509 # SVE stack frame size
510 RDVL 00000100 101 11111 01010 imm:s6 rd:5
511 RDSVL 00000100 101 11111 01011 imm:s6 rd:5
512
513 ### SVE Bitwise Shift - Unpredicated Group
514
515 # SVE bitwise shift by immediate (unpredicated)
516 ASR_zzi 00000100 .. 1 ..... 1001 00 ..... ..... @rd_rn_tszimm_shr
517 LSR_zzi 00000100 .. 1 ..... 1001 01 ..... ..... @rd_rn_tszimm_shr
518 LSL_zzi 00000100 .. 1 ..... 1001 11 ..... ..... @rd_rn_tszimm_shl
519
520 # SVE bitwise shift by wide elements (unpredicated)
521 # Note esz != 3
522 ASR_zzw 00000100 .. 1 ..... 1000 00 ..... ..... @rd_rn_rm
523 LSR_zzw 00000100 .. 1 ..... 1000 01 ..... ..... @rd_rn_rm
524 LSL_zzw 00000100 .. 1 ..... 1000 11 ..... ..... @rd_rn_rm
525
526 ### SVE Compute Vector Address Group
527
528 # SVE vector address generation
529 ADR_s32 00000100 00 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
530 ADR_u32 00000100 01 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
531 ADR_p32 00000100 10 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
532 ADR_p64 00000100 11 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
533
534 ### SVE Integer Misc - Unpredicated Group
535
536 # SVE constructive prefix (unpredicated)
537 MOVPRFX 00000100 00 1 00000 101111 rn:5 rd:5
538
539 # SVE floating-point exponential accelerator
540 # Note esz != 0
541 FEXPA 00000100 .. 1 00000 101110 ..... ..... @rd_rn
542
543 # SVE floating-point trig select coefficient
544 # Note esz != 0
545 FTSSEL 00000100 .. 1 ..... 101100 ..... ..... @rd_rn_rm
546
547 ### SVE Element Count Group
548
549 # SVE element count
550 CNT_r 00000100 .. 10 .... 1110 0 0 ..... ..... @incdec_cnt d=0 u=1
551
552 # SVE inc/dec register by element count
553 INCDEC_r 00000100 .. 11 .... 1110 0 d:1 ..... ..... @incdec_cnt u=1
554
555 # SVE saturating inc/dec register by element count
556 SINCDEC_r_32 00000100 .. 10 .... 1111 d:1 u:1 ..... ..... @incdec_cnt
557 SINCDEC_r_64 00000100 .. 11 .... 1111 d:1 u:1 ..... ..... @incdec_cnt
558
559 # SVE inc/dec vector by element count
560 # Note this requires esz != 0.
561 INCDEC_v 00000100 .. 1 1 .... 1100 0 d:1 ..... ..... @incdec2_cnt u=1
562
563 # SVE saturating inc/dec vector by element count
564 # Note these require esz != 0.
565 SINCDEC_v 00000100 .. 1 0 .... 1100 d:1 u:1 ..... ..... @incdec2_cnt
566
567 ### SVE Bitwise Immediate Group
568
569 # SVE bitwise logical with immediate (unpredicated)
570 ORR_zzi 00000101 00 0000 ............. ..... @rdn_dbm
571 EOR_zzi 00000101 01 0000 ............. ..... @rdn_dbm
572 AND_zzi 00000101 10 0000 ............. ..... @rdn_dbm
573
574 # SVE broadcast bitmask immediate
575 DUPM 00000101 11 0000 dbm:13 rd:5
576
577 ### SVE Integer Wide Immediate - Predicated Group
578
579 # SVE copy floating-point immediate (predicated)
580 FCPY 00000101 .. 01 .... 110 imm:8 ..... @rdn_pg4
581
582 # SVE copy integer immediate (predicated)
583 {
584 INVALID 00000101 00 01 ---- 01 1 -------- -----
585 CPY_m_i 00000101 .. 01 .... 01 . ........ ..... @rdn_pg4 imm=%sh8_i8s
586 }
587 {
588 INVALID 00000101 00 01 ---- 00 1 -------- -----
589 CPY_z_i 00000101 .. 01 .... 00 . ........ ..... @rdn_pg4 imm=%sh8_i8s
590 }
591
592 ### SVE Permute - Extract Group
593
594 # SVE extract vector (destructive)
595 EXT 00000101 001 ..... 000 ... rm:5 rd:5 \
596 &rrri rn=%reg_movprfx imm=%imm8_16_10
597
598 # SVE2 extract vector (constructive)
599 EXT_sve2 00000101 011 ..... 000 ... rn:5 rd:5 \
600 &rri imm=%imm8_16_10
601
602 ### SVE Permute - Unpredicated Group
603
604 # SVE broadcast general register
605 DUP_s 00000101 .. 1 00000 001110 ..... ..... @rd_rn
606
607 # SVE broadcast indexed element
608 DUP_x 00000101 .. 1 ..... 001000 rn:5 rd:5 \
609 &rri imm=%imm7_22_16
610
611 # SVE Permute Vector - one source quadwords
612 DUPQ 00000101 001 imm:4 1 001001 rn:5 rd:5 &rri_esz esz=0
613 DUPQ 00000101 001 imm:3 10 001001 rn:5 rd:5 &rri_esz esz=1
614 DUPQ 00000101 001 imm:2 100 001001 rn:5 rd:5 &rri_esz esz=2
615 DUPQ 00000101 001 imm:1 1000 001001 rn:5 rd:5 &rri_esz esz=3
616
617 EXTQ 00000101 0110 imm:4 001001 rn:5 rd:5 &rri
618
619 # SVE insert SIMD&FP scalar register
620 INSR_f 00000101 .. 1 10100 001110 ..... ..... @rdn_rm
621
622 # SVE insert general register
623 INSR_r 00000101 .. 1 00100 001110 ..... ..... @rdn_rm
624
625 # SVE reverse vector elements
626 REV_v 00000101 .. 1 11000 001110 ..... ..... @rd_rn
627
628 # SVE move predicate to/from vector
629
630 PMOV_pv 00000101 00 101 01 0001110 rn:5 0 rd:4 \
631 &rri_esz esz=0 imm=0
632 PMOV_pv 00000101 00 101 1 imm:1 0001110 rn:5 0 rd:4 &rri_esz esz=1
633 PMOV_pv 00000101 01 101 imm:2 0001110 rn:5 0 rd:4 &rri_esz esz=2
634 PMOV_pv 00000101 1. 101 .. 0001110 rn:5 0 rd:4 \
635 &rri_esz esz=3 imm=%index3_22_17
636
637 PMOV_vp 00000101 00 101 01 1001110 0 rn:4 rd:5 \
638 &rri_esz esz=0 imm=0
639 PMOV_vp 00000101 00 101 1 imm:1 1001110 0 rn:4 rd:5 &rri_esz esz=1
640 PMOV_vp 00000101 01 101 imm:2 1001110 0 rn:4 rd:5 &rri_esz esz=2
641 PMOV_vp 00000101 1. 101 .. 1001110 0 rn:4 rd:5 \
642 &rri_esz esz=3 imm=%index3_22_17
643
644 # SVE vector table lookup
645 TBL 00000101 .. 1 ..... 001100 ..... ..... @rd_rn_rm
646
647 # SVE unpack vector elements
648 UNPK 00000101 esz:2 1100 u:1 h:1 001110 rn:5 rd:5
649
650 # SVE2 Table Lookup (three sources)
651
652 TBL_sve2 00000101 .. 1 ..... 001010 ..... ..... @rd_rn_rm
653 TBX 00000101 .. 1 ..... 001011 ..... ..... @rd_rn_rm
654
655 ### SVE Permute - Predicates Group
656
657 # SVE permute predicate elements
658 ZIP1_p 00000101 .. 10 .... 010 000 0 .... 0 .... @pd_pn_pm
659 ZIP2_p 00000101 .. 10 .... 010 001 0 .... 0 .... @pd_pn_pm
660 UZP1_p 00000101 .. 10 .... 010 010 0 .... 0 .... @pd_pn_pm
661 UZP2_p 00000101 .. 10 .... 010 011 0 .... 0 .... @pd_pn_pm
662 TRN1_p 00000101 .. 10 .... 010 100 0 .... 0 .... @pd_pn_pm
663 TRN2_p 00000101 .. 10 .... 010 101 0 .... 0 .... @pd_pn_pm
664
665 # SVE reverse predicate elements
666 REV_p 00000101 .. 11 0100 010 000 0 .... 0 .... @pd_pn
667
668 # SVE unpack predicate elements
669 PUNPKLO 00000101 00 11 0000 010 000 0 .... 0 .... @pd_pn_e0
670 PUNPKHI 00000101 00 11 0001 010 000 0 .... 0 .... @pd_pn_e0
671
672 ### SVE Permute - Interleaving Group
673
674 # SVE permute vector elements
675 ZIP1_z 00000101 .. 1 ..... 011 000 ..... ..... @rd_rn_rm
676 ZIP2_z 00000101 .. 1 ..... 011 001 ..... ..... @rd_rn_rm
677 UZP1_z 00000101 .. 1 ..... 011 010 ..... ..... @rd_rn_rm
678 UZP2_z 00000101 .. 1 ..... 011 011 ..... ..... @rd_rn_rm
679 TRN1_z 00000101 .. 1 ..... 011 100 ..... ..... @rd_rn_rm
680 TRN2_z 00000101 .. 1 ..... 011 101 ..... ..... @rd_rn_rm
681
682 # SVE2 permute vector segments
683 ZIP1_q 00000101 10 1 ..... 000 000 ..... ..... @rd_rn_rm_e0
684 ZIP2_q 00000101 10 1 ..... 000 001 ..... ..... @rd_rn_rm_e0
685 UZP1_q 00000101 10 1 ..... 000 010 ..... ..... @rd_rn_rm_e0
686 UZP2_q 00000101 10 1 ..... 000 011 ..... ..... @rd_rn_rm_e0
687 TRN1_q 00000101 10 1 ..... 000 110 ..... ..... @rd_rn_rm_e0
688 TRN2_q 00000101 10 1 ..... 000 111 ..... ..... @rd_rn_rm_e0
689
690 # SVE2.1 permute vector elements (quadwords)
691 ZIPQ1 01000100 .. 0 ..... 111 000 ..... ..... @rd_rn_rm
692 ZIPQ2 01000100 .. 0 ..... 111 001 ..... ..... @rd_rn_rm
693 UZPQ1 01000100 .. 0 ..... 111 010 ..... ..... @rd_rn_rm
694 UZPQ2 01000100 .. 0 ..... 111 011 ..... ..... @rd_rn_rm
695
696 TBLQ 01000100 .. 0 ..... 111 110 ..... ..... @rd_rn_rm
697 TBXQ 00000101 .. 1 ..... 001 101 ..... ..... @rd_rn_rm
698
699 ### SVE Permute - Predicated Group
700
701 # SVE compress active elements
702 COMPACT 00000101 .. 100001 100 ... ..... ..... @rd_pg_rn
703
704 # SVE conditionally broadcast element to vector
705 CLASTA_z 00000101 .. 10100 0 100 ... ..... ..... @rdn_pg_rm
706 CLASTB_z 00000101 .. 10100 1 100 ... ..... ..... @rdn_pg_rm
707
708 # SVE conditionally copy element to SIMD&FP scalar
709 CLASTA_v 00000101 .. 10101 0 100 ... ..... ..... @rd_pg_rn
710 CLASTB_v 00000101 .. 10101 1 100 ... ..... ..... @rd_pg_rn
711
712 # SVE conditionally copy element to general register
713 CLASTA_r 00000101 .. 11000 0 101 ... ..... ..... @rd_pg_rn
714 CLASTB_r 00000101 .. 11000 1 101 ... ..... ..... @rd_pg_rn
715
716 # SVE copy element to SIMD&FP scalar register
717 LASTA_v 00000101 .. 10001 0 100 ... ..... ..... @rd_pg_rn
718 LASTB_v 00000101 .. 10001 1 100 ... ..... ..... @rd_pg_rn
719
720 # SVE copy element to general register
721 LASTA_r 00000101 .. 10000 0 101 ... ..... ..... @rd_pg_rn
722 LASTB_r 00000101 .. 10000 1 101 ... ..... ..... @rd_pg_rn
723
724 # SVE copy element from SIMD&FP scalar register
725 CPY_m_v 00000101 .. 100000 100 ... ..... ..... @rd_pg_rn
726
727 # SVE copy element from general register to vector (predicated)
728 CPY_m_r 00000101 .. 101000 101 ... ..... ..... @rd_pg_rn
729
730 # SVE reverse within elements
731 # Note esz >= operation size
732 REVB_m 00000101 .. 1001 00 100 ... ..... ..... @rd_pg_rn
733 REVH_m 00000101 .. 1001 01 100 ... ..... ..... @rd_pg_rn
734 REVW_m 00000101 .. 1001 10 100 ... ..... ..... @rd_pg_rn
735 RBIT_m 00000101 .. 1001 11 100 ... ..... ..... @rd_pg_rn
736 REVD_m 00000101 00 1011 10 100 ... ..... ..... @rd_pg_rn_e0
737
738 REVB_z 00000101 .. 1001 00 101 ... ..... ..... @rd_pg_rn
739 REVH_z 00000101 .. 1001 01 101 ... ..... ..... @rd_pg_rn
740 REVW_z 00000101 .. 1001 10 101 ... ..... ..... @rd_pg_rn
741 RBIT_z 00000101 .. 1001 11 101 ... ..... ..... @rd_pg_rn
742 REVD_z 00000101 00 1011 10 101 ... ..... ..... @rd_pg_rn_e0
743
744 # SVE vector splice (predicated, destructive)
745 SPLICE 00000101 .. 101 100 100 ... ..... ..... @rdn_pg_rm
746
747 # SVE2 vector splice (predicated, constructive)
748 SPLICE_sve2 00000101 .. 101 101 100 ... ..... ..... @rd_pg_rn
749
750 EXPAND 00000101 .. 110 001 100 ... ..... ..... @rd_pg_rn
751
752 ### SVE Select Vectors Group
753
754 # SVE select vector elements (predicated)
755 SEL_zpzz 00000101 .. 1 ..... 11 .... ..... ..... @rd_pg4_rn_rm
756
757 ### SVE Integer Compare - Vectors Group
758
759 # SVE integer compare_vectors
760 CMPHS_ppzz 00100100 .. 0 ..... 000 ... ..... 0 .... @pd_pg_rn_rm
761 CMPHI_ppzz 00100100 .. 0 ..... 000 ... ..... 1 .... @pd_pg_rn_rm
762 CMPGE_ppzz 00100100 .. 0 ..... 100 ... ..... 0 .... @pd_pg_rn_rm
763 CMPGT_ppzz 00100100 .. 0 ..... 100 ... ..... 1 .... @pd_pg_rn_rm
764 CMPEQ_ppzz 00100100 .. 0 ..... 101 ... ..... 0 .... @pd_pg_rn_rm
765 CMPNE_ppzz 00100100 .. 0 ..... 101 ... ..... 1 .... @pd_pg_rn_rm
766
767 # SVE integer compare with wide elements
768 # Note these require esz != 3.
769 CMPEQ_ppzw 00100100 .. 0 ..... 001 ... ..... 0 .... @pd_pg_rn_rm
770 CMPNE_ppzw 00100100 .. 0 ..... 001 ... ..... 1 .... @pd_pg_rn_rm
771 CMPGE_ppzw 00100100 .. 0 ..... 010 ... ..... 0 .... @pd_pg_rn_rm
772 CMPGT_ppzw 00100100 .. 0 ..... 010 ... ..... 1 .... @pd_pg_rn_rm
773 CMPLT_ppzw 00100100 .. 0 ..... 011 ... ..... 0 .... @pd_pg_rn_rm
774 CMPLE_ppzw 00100100 .. 0 ..... 011 ... ..... 1 .... @pd_pg_rn_rm
775 CMPHS_ppzw 00100100 .. 0 ..... 110 ... ..... 0 .... @pd_pg_rn_rm
776 CMPHI_ppzw 00100100 .. 0 ..... 110 ... ..... 1 .... @pd_pg_rn_rm
777 CMPLO_ppzw 00100100 .. 0 ..... 111 ... ..... 0 .... @pd_pg_rn_rm
778 CMPLS_ppzw 00100100 .. 0 ..... 111 ... ..... 1 .... @pd_pg_rn_rm
779
780 ### SVE Integer Compare - Unsigned Immediate Group
781
782 # SVE integer compare with unsigned immediate
783 CMPHS_ppzi 00100100 .. 1 ....... 0 ... ..... 0 .... @pd_pg_rn_i7
784 CMPHI_ppzi 00100100 .. 1 ....... 0 ... ..... 1 .... @pd_pg_rn_i7
785 CMPLO_ppzi 00100100 .. 1 ....... 1 ... ..... 0 .... @pd_pg_rn_i7
786 CMPLS_ppzi 00100100 .. 1 ....... 1 ... ..... 1 .... @pd_pg_rn_i7
787
788 ### SVE Integer Compare - Signed Immediate Group
789
790 # SVE integer compare with signed immediate
791 CMPGE_ppzi 00100101 .. 0 ..... 000 ... ..... 0 .... @pd_pg_rn_i5
792 CMPGT_ppzi 00100101 .. 0 ..... 000 ... ..... 1 .... @pd_pg_rn_i5
793 CMPLT_ppzi 00100101 .. 0 ..... 001 ... ..... 0 .... @pd_pg_rn_i5
794 CMPLE_ppzi 00100101 .. 0 ..... 001 ... ..... 1 .... @pd_pg_rn_i5
795 CMPEQ_ppzi 00100101 .. 0 ..... 100 ... ..... 0 .... @pd_pg_rn_i5
796 CMPNE_ppzi 00100101 .. 0 ..... 100 ... ..... 1 .... @pd_pg_rn_i5
797
798 ### SVE Predicate Logical Operations Group
799
800 # SVE predicate logical operations
801 AND_pppp 00100101 0. 00 .... 01 .... 0 .... 0 .... @pd_pg_pn_pm_s
802 BIC_pppp 00100101 0. 00 .... 01 .... 0 .... 1 .... @pd_pg_pn_pm_s
803 EOR_pppp 00100101 0. 00 .... 01 .... 1 .... 0 .... @pd_pg_pn_pm_s
804 SEL_pppp 00100101 0. 00 .... 01 .... 1 .... 1 .... @pd_pg_pn_pm_s
805 ORR_pppp 00100101 1. 00 .... 01 .... 0 .... 0 .... @pd_pg_pn_pm_s
806 ORN_pppp 00100101 1. 00 .... 01 .... 0 .... 1 .... @pd_pg_pn_pm_s
807 NOR_pppp 00100101 1. 00 .... 01 .... 1 .... 0 .... @pd_pg_pn_pm_s
808 NAND_pppp 00100101 1. 00 .... 01 .... 1 .... 1 .... @pd_pg_pn_pm_s
809
810 ### SVE Predicate Misc Group
811
812 # SVE predicate test
813 PTEST 00100101 01 010000 11 pg:4 0 rn:4 0 0000
814
815 # SVE predicate initialize
816 PTRUE 00100101 esz:2 01100 s:1 111000 pat:5 0 rd:4
817 PTRUE_cnt 00100101 esz:2 1000000111100000010 ... rd=%pnd
818
819 # SVE initialize FFR
820 SETFFR 00100101 0010 1100 1001 0000 0000 0000
821
822 # SVE zero predicate register
823 PFALSE 00100101 0001 1000 1110 0100 0000 rd:4
824
825 # SVE predicate read from FFR (predicated)
826 RDFFR_p 00100101 0 s:1 0110001111000 pg:4 0 rd:4
827
828 # SVE predicate read from FFR (unpredicated)
829 RDFFR 00100101 0001 1001 1111 0000 0000 rd:4
830
831 # SVE FFR write from predicate (WRFFR)
832 WRFFR 00100101 0010 1000 1001 000 rn:4 00000
833
834 # SVE predicate first active
835 PFIRST 00100101 01 011 000 11000 00 .... 0 .... @pd_pn_e0
836
837 # SVE predicate next active
838 PNEXT 00100101 .. 011 001 11000 10 .... 0 .... @pd_pn
839
840 ### SVE Partition Break Group
841
842 # SVE propagate break from previous partition
843 BRKPA 00100101 0. 00 .... 11 .... 0 .... 0 .... @pd_pg_pn_pm_s
844 BRKPB 00100101 0. 00 .... 11 .... 0 .... 1 .... @pd_pg_pn_pm_s
845
846 # SVE partition break condition
847 BRKA_z 00100101 0. 01000001 .... 0 .... 0 .... @pd_pg_pn_s
848 BRKB_z 00100101 1. 01000001 .... 0 .... 0 .... @pd_pg_pn_s
849 BRKA_m 00100101 00 01000001 .... 0 .... 1 .... @pd_pg_pn_s0
850 BRKB_m 00100101 10 01000001 .... 0 .... 1 .... @pd_pg_pn_s0
851
852 # SVE propagate break to next partition
853 BRKN 00100101 0. 01100001 .... 0 .... 0 .... @pd_pg_pn_s
854
855 ### SVE Predicate Count Group
856
857 # SVE predicate count
858 CNTP 00100101 .. 100 000 10 .... 0 .... ..... @rd_pg4_pn
859 CNTP_c 00100101 esz:2 100 000 10 000 vl:1 1 rn:4 rd:5
860
861 FIRSTP 00100101 .. 100 001 10 .... 0 .... ..... @rd_pg4_pn
862 LASTP 00100101 .. 100 010 10 .... 0 .... ..... @rd_pg4_pn
863
864 # SVE inc/dec register by predicate count
865 INCDECP_r 00100101 .. 10110 d:1 10001 00 .... ..... @incdec_pred u=1
866
867 # SVE inc/dec vector by predicate count
868 INCDECP_z 00100101 .. 10110 d:1 10000 00 .... ..... @incdec2_pred u=1
869
870 # SVE saturating inc/dec register by predicate count
871 SINCDECP_r_32 00100101 .. 1010 d:1 u:1 10001 00 .... ..... @incdec_pred
872 SINCDECP_r_64 00100101 .. 1010 d:1 u:1 10001 10 .... ..... @incdec_pred
873
874 # SVE saturating inc/dec vector by predicate count
875 SINCDECP_z 00100101 .. 1010 d:1 u:1 10000 00 .... ..... @incdec2_pred
876
877 ### SVE Integer Compare - Scalars Group
878
879 # SVE conditionally terminate scalars
880 CTERM 00100101 1 sf:1 1 rm:5 001000 rn:5 ne:1 0000
881
882 # SVE integer compare scalar count and limit
883 &while esz rd rn rm sf u eq
884 WHILE_lt 00100101 esz:2 1 rm:5 000 sf:1 u:1 1 rn:5 eq:1 rd:4 &while
885 WHILE_gt 00100101 esz:2 1 rm:5 000 sf:1 u:1 0 rn:5 eq:1 rd:4 &while
886
887 # SVE2 pointer conflict compare
888 WHILE_ptr 00100101 esz:2 1 rm:5 001 100 rn:5 rw:1 rd:4
889
890 # SVE2.1 predicate pair
891 %pd_pair 1:3 !function=times_2
892 @while_pair ........ esz:2 . rm:5 .... u:1 . rn:5 . ... eq:1 \
893 &while rd=%pd_pair sf=1
894
895 WHILE_lt_pair 00100101 .. 1 ..... 0101 . 1 ..... 1 ... . @while_pair
896 WHILE_gt_pair 00100101 .. 1 ..... 0101 . 0 ..... 1 ... . @while_pair
897
898 # SVE2.1 predicate as count
899 @while_cnt ........ esz:2 . rm:5 .... u:1 . rn:5 . eq:1 ... \
900 &while rd=%pnd sf=1
901
902 WHILE_lt_cnt2 00100101 .. 1 ..... 0100 . 1 ..... 1 . ... @while_cnt
903 WHILE_lt_cnt4 00100101 .. 1 ..... 0110 . 1 ..... 1 . ... @while_cnt
904 WHILE_gt_cnt2 00100101 .. 1 ..... 0100 . 0 ..... 1 . ... @while_cnt
905 WHILE_gt_cnt4 00100101 .. 1 ..... 0110 . 0 ..... 1 . ... @while_cnt
906
907 # SVE2.1 extract mask predicate from predicate-as-counter
908 &pext rd rn esz imm
909 PEXT_1 00100101 esz:2 1 00000 0111 00 imm:2 ... 1 rd:4 &pext rn=%pnn
910 PEXT_2 00100101 esz:2 1 00000 0111 010 imm:1 ... 1 rd:4 &pext rn=%pnn
911
912 ### SVE Integer Wide Immediate - Unpredicated Group
913
914 # SVE broadcast floating-point immediate (unpredicated)
915 FDUP 00100101 esz:2 111 00 1110 imm:8 rd:5
916
917 # SVE broadcast integer immediate (unpredicated)
918 {
919 INVALID 00100101 00 111 00 011 1 -------- -----
920 DUP_i 00100101 esz:2 111 00 011 . ........ rd:5 imm=%sh8_i8s
921 }
922
923 # SVE integer add/subtract immediate (unpredicated)
924 {
925 INVALID 00100101 00 100 000 11 1 -------- -----
926 ADD_zzi 00100101 .. 100 000 11 . ........ ..... @rdn_sh_i8u
927 }
928 {
929 INVALID 00100101 00 100 001 11 1 -------- -----
930 SUB_zzi 00100101 .. 100 001 11 . ........ ..... @rdn_sh_i8u
931 }
932 {
933 INVALID 00100101 00 100 011 11 1 -------- -----
934 SUBR_zzi 00100101 .. 100 011 11 . ........ ..... @rdn_sh_i8u
935 }
936 {
937 INVALID 00100101 00 100 100 11 1 -------- -----
938 SQADD_zzi 00100101 .. 100 100 11 . ........ ..... @rdn_sh_i8u
939 }
940 {
941 INVALID 00100101 00 100 101 11 1 -------- -----
942 UQADD_zzi 00100101 .. 100 101 11 . ........ ..... @rdn_sh_i8u
943 }
944 {
945 INVALID 00100101 00 100 110 11 1 -------- -----
946 SQSUB_zzi 00100101 .. 100 110 11 . ........ ..... @rdn_sh_i8u
947 }
948 {
949 INVALID 00100101 00 100 111 11 1 -------- -----
950 UQSUB_zzi 00100101 .. 100 111 11 . ........ ..... @rdn_sh_i8u
951 }
952
953 # SVE integer min/max immediate (unpredicated)
954 SMAX_zzi 00100101 .. 101 000 110 ........ ..... @rdn_i8s
955 UMAX_zzi 00100101 .. 101 001 110 ........ ..... @rdn_i8u
956 SMIN_zzi 00100101 .. 101 010 110 ........ ..... @rdn_i8s
957 UMIN_zzi 00100101 .. 101 011 110 ........ ..... @rdn_i8u
958
959 # SVE integer multiply immediate (unpredicated)
960 MUL_zzi 00100101 .. 110 000 110 ........ ..... @rdn_i8s
961
962 # SVE integer dot product (unpredicated)
963 DOT_zzzz 01000100 1 sz:1 0 rm:5 00000 u:1 rn:5 rd:5 \
964 ra=%reg_movprfx
965
966 # SVE2 complex dot product (vectors)
967 CDOT_zzzz 01000100 esz:2 0 rm:5 0001 rot:2 rn:5 rd:5 ra=%reg_movprfx
968
969 #### SVE Multiply - Indexed
970
971 # SVE integer dot product (indexed)
972 SDOT_zzxw_4s 01000100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=2
973 SDOT_zzxw_4d 01000100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3
974 UDOT_zzxw_4s 01000100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=2
975 UDOT_zzxw_4d 01000100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3
976
977 SDOT_zzxw_2s 01000100 10 0 ..... 110010 ..... ..... @rrxr_2 esz=2
978 UDOT_zzxw_2s 01000100 10 0 ..... 110011 ..... ..... @rrxr_2 esz=2
979
980 # SVE2 integer multiply-add (indexed)
981 MLA_zzxz_h 01000100 0. 1 ..... 000010 ..... ..... @rrxr_3 esz=1
982 MLA_zzxz_s 01000100 10 1 ..... 000010 ..... ..... @rrxr_2 esz=2
983 MLA_zzxz_d 01000100 11 1 ..... 000010 ..... ..... @rrxr_1 esz=3
984 MLS_zzxz_h 01000100 0. 1 ..... 000011 ..... ..... @rrxr_3 esz=1
985 MLS_zzxz_s 01000100 10 1 ..... 000011 ..... ..... @rrxr_2 esz=2
986 MLS_zzxz_d 01000100 11 1 ..... 000011 ..... ..... @rrxr_1 esz=3
987
988 # SVE2 saturating multiply-add high (indexed)
989 SQRDMLAH_zzxz_h 01000100 0. 1 ..... 000100 ..... ..... @rrxr_3 esz=1
990 SQRDMLAH_zzxz_s 01000100 10 1 ..... 000100 ..... ..... @rrxr_2 esz=2
991 SQRDMLAH_zzxz_d 01000100 11 1 ..... 000100 ..... ..... @rrxr_1 esz=3
992 SQRDMLSH_zzxz_h 01000100 0. 1 ..... 000101 ..... ..... @rrxr_3 esz=1
993 SQRDMLSH_zzxz_s 01000100 10 1 ..... 000101 ..... ..... @rrxr_2 esz=2
994 SQRDMLSH_zzxz_d 01000100 11 1 ..... 000101 ..... ..... @rrxr_1 esz=3
995
996 # SVE mixed sign dot product (indexed)
997 USDOT_zzxw_4s 01000100 10 1 ..... 000110 ..... ..... @rrxr_2 esz=2
998 SUDOT_zzxw_4s 01000100 10 1 ..... 000111 ..... ..... @rrxr_2 esz=2
999
1000 # SVE2 saturating multiply-add (indexed)
1001 SQDMLALB_zzxw_s 01000100 10 1 ..... 0010.0 ..... ..... @rrxr_3a esz=2
1002 SQDMLALB_zzxw_d 01000100 11 1 ..... 0010.0 ..... ..... @rrxr_2a esz=3
1003 SQDMLALT_zzxw_s 01000100 10 1 ..... 0010.1 ..... ..... @rrxr_3a esz=2
1004 SQDMLALT_zzxw_d 01000100 11 1 ..... 0010.1 ..... ..... @rrxr_2a esz=3
1005 SQDMLSLB_zzxw_s 01000100 10 1 ..... 0011.0 ..... ..... @rrxr_3a esz=2
1006 SQDMLSLB_zzxw_d 01000100 11 1 ..... 0011.0 ..... ..... @rrxr_2a esz=3
1007 SQDMLSLT_zzxw_s 01000100 10 1 ..... 0011.1 ..... ..... @rrxr_3a esz=2
1008 SQDMLSLT_zzxw_d 01000100 11 1 ..... 0011.1 ..... ..... @rrxr_2a esz=3
1009
1010 # SVE2 complex integer dot product (indexed)
1011 CDOT_zzxw_s 01000100 10 1 index:2 rm:3 0100 rot:2 rn:5 rd:5 \
1012 ra=%reg_movprfx
1013 CDOT_zzxw_d 01000100 11 1 index:1 rm:4 0100 rot:2 rn:5 rd:5 \
1014 ra=%reg_movprfx
1015
1016 # SVE2 complex integer multiply-add (indexed)
1017 CMLA_zzxz_h 01000100 10 1 index:2 rm:3 0110 rot:2 rn:5 rd:5 \
1018 ra=%reg_movprfx
1019 CMLA_zzxz_s 01000100 11 1 index:1 rm:4 0110 rot:2 rn:5 rd:5 \
1020 ra=%reg_movprfx
1021
1022 # SVE2 complex saturating integer multiply-add (indexed)
1023 SQRDCMLAH_zzxz_h 01000100 10 1 index:2 rm:3 0111 rot:2 rn:5 rd:5 \
1024 ra=%reg_movprfx
1025 SQRDCMLAH_zzxz_s 01000100 11 1 index:1 rm:4 0111 rot:2 rn:5 rd:5 \
1026 ra=%reg_movprfx
1027
1028 # SVE2 multiply-add long (indexed)
1029 SMLALB_zzxw_s 01000100 10 1 ..... 1000.0 ..... ..... @rrxr_3a esz=2
1030 SMLALB_zzxw_d 01000100 11 1 ..... 1000.0 ..... ..... @rrxr_2a esz=3
1031 SMLALT_zzxw_s 01000100 10 1 ..... 1000.1 ..... ..... @rrxr_3a esz=2
1032 SMLALT_zzxw_d 01000100 11 1 ..... 1000.1 ..... ..... @rrxr_2a esz=3
1033 UMLALB_zzxw_s 01000100 10 1 ..... 1001.0 ..... ..... @rrxr_3a esz=2
1034 UMLALB_zzxw_d 01000100 11 1 ..... 1001.0 ..... ..... @rrxr_2a esz=3
1035 UMLALT_zzxw_s 01000100 10 1 ..... 1001.1 ..... ..... @rrxr_3a esz=2
1036 UMLALT_zzxw_d 01000100 11 1 ..... 1001.1 ..... ..... @rrxr_2a esz=3
1037 SMLSLB_zzxw_s 01000100 10 1 ..... 1010.0 ..... ..... @rrxr_3a esz=2
1038 SMLSLB_zzxw_d 01000100 11 1 ..... 1010.0 ..... ..... @rrxr_2a esz=3
1039 SMLSLT_zzxw_s 01000100 10 1 ..... 1010.1 ..... ..... @rrxr_3a esz=2
1040 SMLSLT_zzxw_d 01000100 11 1 ..... 1010.1 ..... ..... @rrxr_2a esz=3
1041 UMLSLB_zzxw_s 01000100 10 1 ..... 1011.0 ..... ..... @rrxr_3a esz=2
1042 UMLSLB_zzxw_d 01000100 11 1 ..... 1011.0 ..... ..... @rrxr_2a esz=3
1043 UMLSLT_zzxw_s 01000100 10 1 ..... 1011.1 ..... ..... @rrxr_3a esz=2
1044 UMLSLT_zzxw_d 01000100 11 1 ..... 1011.1 ..... ..... @rrxr_2a esz=3
1045
1046 # SVE2 integer multiply long (indexed)
1047 SMULLB_zzx_s 01000100 10 1 ..... 1100.0 ..... ..... @rrx_3a esz=2
1048 SMULLB_zzx_d 01000100 11 1 ..... 1100.0 ..... ..... @rrx_2a esz=3
1049 SMULLT_zzx_s 01000100 10 1 ..... 1100.1 ..... ..... @rrx_3a esz=2
1050 SMULLT_zzx_d 01000100 11 1 ..... 1100.1 ..... ..... @rrx_2a esz=3
1051 UMULLB_zzx_s 01000100 10 1 ..... 1101.0 ..... ..... @rrx_3a esz=2
1052 UMULLB_zzx_d 01000100 11 1 ..... 1101.0 ..... ..... @rrx_2a esz=3
1053 UMULLT_zzx_s 01000100 10 1 ..... 1101.1 ..... ..... @rrx_3a esz=2
1054 UMULLT_zzx_d 01000100 11 1 ..... 1101.1 ..... ..... @rrx_2a esz=3
1055
1056 # SVE2 saturating multiply (indexed)
1057 SQDMULLB_zzx_s 01000100 10 1 ..... 1110.0 ..... ..... @rrx_3a esz=2
1058 SQDMULLB_zzx_d 01000100 11 1 ..... 1110.0 ..... ..... @rrx_2a esz=3
1059 SQDMULLT_zzx_s 01000100 10 1 ..... 1110.1 ..... ..... @rrx_3a esz=2
1060 SQDMULLT_zzx_d 01000100 11 1 ..... 1110.1 ..... ..... @rrx_2a esz=3
1061
1062 # SVE2 saturating multiply high (indexed)
1063 SQDMULH_zzx_h 01000100 0. 1 ..... 111100 ..... ..... @rrx_3 esz=1
1064 SQDMULH_zzx_s 01000100 10 1 ..... 111100 ..... ..... @rrx_2 esz=2
1065 SQDMULH_zzx_d 01000100 11 1 ..... 111100 ..... ..... @rrx_1 esz=3
1066 SQRDMULH_zzx_h 01000100 0. 1 ..... 111101 ..... ..... @rrx_3 esz=1
1067 SQRDMULH_zzx_s 01000100 10 1 ..... 111101 ..... ..... @rrx_2 esz=2
1068 SQRDMULH_zzx_d 01000100 11 1 ..... 111101 ..... ..... @rrx_1 esz=3
1069
1070 # SVE2 integer multiply (indexed)
1071 MUL_zzx_h 01000100 0. 1 ..... 111110 ..... ..... @rrx_3 esz=1
1072 MUL_zzx_s 01000100 10 1 ..... 111110 ..... ..... @rrx_2 esz=2
1073 MUL_zzx_d 01000100 11 1 ..... 111110 ..... ..... @rrx_1 esz=3
1074
1075 # SVE floating-point complex add (predicated)
1076 FCADD 01100100 esz:2 00000 rot:1 100 pg:3 rm:5 rd:5 \
1077 rn=%reg_movprfx
1078
1079 # SVE floating-point complex multiply-add (predicated)
1080 FCMLA_zpzzz 01100100 esz:2 0 rm:5 0 rot:2 pg:3 rn:5 rd:5 \
1081 ra=%reg_movprfx
1082
1083 # SVE floating-point complex multiply-add (indexed)
1084 FCMLA_zzxz 01100100 10 1 index:2 rm:3 0001 rot:2 rn:5 rd:5 \
1085 ra=%reg_movprfx esz=1
1086 FCMLA_zzxz 01100100 11 1 index:1 rm:4 0001 rot:2 rn:5 rd:5 \
1087 ra=%reg_movprfx esz=2
1088
1089 ### SVE FP Multiply-Add Indexed Group
1090
1091 # SVE floating-point multiply-add (indexed)
1092 FMLA_zzxz 01100100 0. 1 ..... 000010 ..... ..... @rrxr_3 esz=0
1093 FMLA_zzxz 01100100 0. 1 ..... 000000 ..... ..... @rrxr_3 esz=1
1094 FMLA_zzxz 01100100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=2
1095 FMLA_zzxz 01100100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3
1096 FMLS_zzxz 01100100 0. 1 ..... 000011 ..... ..... @rrxr_3 esz=0
1097 FMLS_zzxz 01100100 0. 1 ..... 000001 ..... ..... @rrxr_3 esz=1
1098 FMLS_zzxz 01100100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=2
1099 FMLS_zzxz 01100100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3
1100
1101 ### SVE FP Multiply Indexed Group
1102
1103 # SVE floating-point multiply (indexed)
1104 FMUL_zzx 01100100 0. 1 ..... 001010 ..... ..... @rrx_3 esz=0
1105 FMUL_zzx 01100100 0. 1 ..... 001000 ..... ..... @rrx_3 esz=1
1106 FMUL_zzx 01100100 10 1 ..... 001000 ..... ..... @rrx_2 esz=2
1107 FMUL_zzx 01100100 11 1 ..... 001000 ..... ..... @rrx_1 esz=3
1108
1109 ### SVE FP Fast Reduction Group
1110
1111 FADDV 01100101 .. 000 000 001 ... ..... ..... @rd_pg_rn
1112 FMAXNMV 01100101 .. 000 100 001 ... ..... ..... @rd_pg_rn
1113 FMINNMV 01100101 .. 000 101 001 ... ..... ..... @rd_pg_rn
1114 FMAXV 01100101 .. 000 110 001 ... ..... ..... @rd_pg_rn
1115 FMINV 01100101 .. 000 111 001 ... ..... ..... @rd_pg_rn
1116
1117 ### SVE FP recursive reduction (quadwords)
1118
1119 FADDQV 01100100 .. 010 000 101 ... ..... ..... @rd_pg_rn
1120 FMAXNMQV 01100100 .. 010 100 101 ... ..... ..... @rd_pg_rn
1121 FMINNMQV 01100100 .. 010 101 101 ... ..... ..... @rd_pg_rn
1122 FMAXQV 01100100 .. 010 110 101 ... ..... ..... @rd_pg_rn
1123 FMINQV 01100100 .. 010 111 101 ... ..... ..... @rd_pg_rn
1124
1125 ## SVE Floating Point Unary Operations - Unpredicated Group
1126
1127 FRECPE 01100101 .. 001 110 001100 ..... ..... @rd_rn
1128 FRSQRTE 01100101 .. 001 111 001100 ..... ..... @rd_rn
1129
1130 F1CVT 01100101 00 001 000 001100 ..... ..... @rd_rn_e0
1131 F2CVT 01100101 00 001 000 001101 ..... ..... @rd_rn_e0
1132 F1CVTLT 01100101 00 001 001 001100 ..... ..... @rd_rn_e0
1133 F2CVTLT 01100101 00 001 001 001101 ..... ..... @rd_rn_e0
1134
1135 BF1CVT 01100101 00 001 000 001110 ..... ..... @rd_rn_e0
1136 BF2CVT 01100101 00 001 000 001111 ..... ..... @rd_rn_e0
1137 BF1CVTLT 01100101 00 001 001 001110 ..... ..... @rd_rn_e0
1138 BF2CVTLT 01100101 00 001 001 001111 ..... ..... @rd_rn_e0
1139
1140 FCVTN 01100101 00 001 010 001100 ....0 ..... @rd_rnx2 esz=1
1141 BFCVTN 01100101 00 001 010 001110 ....0 ..... @rd_rnx2 esz=1
1142 FCVTNB 01100101 00 001 010 001101 ....0 ..... @rd_rnx2 esz=2
1143 FCVTNT 01100101 00 001 010 001111 ....0 ..... @rd_rnx2 esz=2
1144
1145 ### SVE FP Compare with Zero Group
1146
1147 FCMGE_ppz0 01100101 .. 0100 00 001 ... ..... 0 .... @pd_pg_rn
1148 FCMGT_ppz0 01100101 .. 0100 00 001 ... ..... 1 .... @pd_pg_rn
1149 FCMLT_ppz0 01100101 .. 0100 01 001 ... ..... 0 .... @pd_pg_rn
1150 FCMLE_ppz0 01100101 .. 0100 01 001 ... ..... 1 .... @pd_pg_rn
1151 FCMEQ_ppz0 01100101 .. 0100 10 001 ... ..... 0 .... @pd_pg_rn
1152 FCMNE_ppz0 01100101 .. 0100 11 001 ... ..... 0 .... @pd_pg_rn
1153
1154 ### SVE FP Accumulating Reduction Group
1155
1156 # SVE floating-point serial reduction (predicated)
1157 FADDA 01100101 .. 011 000 001 ... ..... ..... @rdn_pg_rm
1158
1159 ### SVE Floating Point Arithmetic - Unpredicated Group
1160
1161 # SVE floating-point arithmetic (unpredicated)
1162 FADD_zzz 01100101 .. 0 ..... 000 000 ..... ..... @rd_rn_rm
1163 FSUB_zzz 01100101 .. 0 ..... 000 001 ..... ..... @rd_rn_rm
1164 FMUL_zzz 01100101 .. 0 ..... 000 010 ..... ..... @rd_rn_rm
1165 FTSMUL 01100101 .. 0 ..... 000 011 ..... ..... @rd_rn_rm
1166 FRECPS 01100101 .. 0 ..... 000 110 ..... ..... @rd_rn_rm
1167 FRSQRTS 01100101 .. 0 ..... 000 111 ..... ..... @rd_rn_rm
1168
1169 ### SVE FP Arithmetic Predicated Group
1170
1171 # SVE floating-point arithmetic (predicated)
1172 {
1173 BFADD_zpzz 01100101 00 00 0000 100 ... ..... ..... @rdn_pg_rm_e0
1174 FADD_zpzz 01100101 .. 00 0000 100 ... ..... ..... @rdn_pg_rm
1175 }
1176 {
1177 BFSUB_zpzz 01100101 00 00 0001 100 ... ..... ..... @rdn_pg_rm_e0
1178 FSUB_zpzz 01100101 .. 00 0001 100 ... ..... ..... @rdn_pg_rm
1179 }
1180 {
1181 BFMUL_zpzz 01100101 00 00 0010 100 ... ..... ..... @rdn_pg_rm_e0
1182 FMUL_zpzz 01100101 .. 00 0010 100 ... ..... ..... @rdn_pg_rm
1183 }
1184 FSUB_zpzz 01100101 .. 00 0011 100 ... ..... ..... @rdm_pg_rn # FSUBR
1185 {
1186 BFMAXNM_zpzz 01100101 00 00 0100 100 ... ..... ..... @rdn_pg_rm_e0
1187 FMAXNM_zpzz 01100101 .. 00 0100 100 ... ..... ..... @rdn_pg_rm
1188 }
1189 {
1190 BFMINNM_zpzz 01100101 00 00 0101 100 ... ..... ..... @rdn_pg_rm_e0
1191 FMINNM_zpzz 01100101 .. 00 0101 100 ... ..... ..... @rdn_pg_rm
1192 }
1193 {
1194 BFMAX_zpzz 01100101 00 00 0110 100 ... ..... ..... @rdn_pg_rm_e0
1195 FMAX_zpzz 01100101 .. 00 0110 100 ... ..... ..... @rdn_pg_rm
1196 }
1197 {
1198 BFMIN_zpzz 01100101 00 00 0111 100 ... ..... ..... @rdn_pg_rm_e0
1199 FMIN_zpzz 01100101 .. 00 0111 100 ... ..... ..... @rdn_pg_rm
1200 }
1201 FABD 01100101 .. 00 1000 100 ... ..... ..... @rdn_pg_rm
1202 {
1203 BFSCALE 01100101 00 00 1001 100 ... ..... ..... @rdn_pg_rm_e0
1204 FSCALE 01100101 .. 00 1001 100 ... ..... ..... @rdn_pg_rm
1205 }
1206 FMULX 01100101 .. 00 1010 100 ... ..... ..... @rdn_pg_rm
1207 FDIV 01100101 .. 00 1100 100 ... ..... ..... @rdm_pg_rn # FDIVR
1208 FDIV 01100101 .. 00 1101 100 ... ..... ..... @rdn_pg_rm
1209 FAMAX 01100101 .. 00 1110 100 ... ..... ..... @rdn_pg_rm
1210 FAMIN 01100101 .. 00 1111 100 ... ..... ..... @rdn_pg_rm
1211
1212 # SVE floating-point arithmetic with immediate (predicated)
1213 FADD_zpzi 01100101 .. 011 000 100 ... 0000 . ..... @rdn_i1
1214 FSUB_zpzi 01100101 .. 011 001 100 ... 0000 . ..... @rdn_i1
1215 FMUL_zpzi 01100101 .. 011 010 100 ... 0000 . ..... @rdn_i1
1216 FSUBR_zpzi 01100101 .. 011 011 100 ... 0000 . ..... @rdn_i1
1217 FMAXNM_zpzi 01100101 .. 011 100 100 ... 0000 . ..... @rdn_i1
1218 FMINNM_zpzi 01100101 .. 011 101 100 ... 0000 . ..... @rdn_i1
1219 FMAX_zpzi 01100101 .. 011 110 100 ... 0000 . ..... @rdn_i1
1220 FMIN_zpzi 01100101 .. 011 111 100 ... 0000 . ..... @rdn_i1
1221
1222 # SVE floating-point trig multiply-add coefficient
1223 FTMAD 01100101 esz:2 010 imm:3 100000 rm:5 rd:5 rn=%reg_movprfx
1224
1225 ### SVE FP Multiply-Add Group
1226
1227 # SVE floating-point multiply-accumulate writing addend
1228 FMLA_zpzzz 01100101 .. 1 ..... 000 ... ..... ..... @rda_pg_rn_rm
1229 FMLS_zpzzz 01100101 .. 1 ..... 001 ... ..... ..... @rda_pg_rn_rm
1230 FNMLA_zpzzz 01100101 .. 1 ..... 010 ... ..... ..... @rda_pg_rn_rm
1231 FNMLS_zpzzz 01100101 .. 1 ..... 011 ... ..... ..... @rda_pg_rn_rm
1232
1233 # SVE floating-point multiply-accumulate writing multiplicand
1234 # Alter the operand extraction order and reuse the helpers from above.
1235 # FMAD, FMSB, FNMAD, FNMS
1236 FMLA_zpzzz 01100101 .. 1 ..... 100 ... ..... ..... @rdn_pg_rm_ra
1237 FMLS_zpzzz 01100101 .. 1 ..... 101 ... ..... ..... @rdn_pg_rm_ra
1238 FNMLA_zpzzz 01100101 .. 1 ..... 110 ... ..... ..... @rdn_pg_rm_ra
1239 FNMLS_zpzzz 01100101 .. 1 ..... 111 ... ..... ..... @rdn_pg_rm_ra
1240
1241 ### SVE FP Unary Operations Predicated Group
1242
1243 # SVE floating-point convert precision
1244 FCVT_sh_m 01100101 10 0010 00 101 ... ..... ..... @rd_pg_rn_e0
1245 FCVT_hs_m 01100101 10 0010 01 101 ... ..... ..... @rd_pg_rn_e0
1246 BFCVT_m 01100101 10 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1247 FCVT_dh_m 01100101 11 0010 00 101 ... ..... ..... @rd_pg_rn_e0
1248 FCVT_hd_m 01100101 11 0010 01 101 ... ..... ..... @rd_pg_rn_e0
1249 FCVT_ds_m 01100101 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1250 FCVT_sd_m 01100101 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
1251
1252 FCVTX_ds_z 01100100 00 0110 101 10 ... ..... ..... @rd_pg_rn_e0
1253
1254 FCVT_sh_z 01100100 10 0110 101 00 ... ..... ..... @rd_pg_rn_e0
1255 FCVT_hs_z 01100100 10 0110 101 01 ... ..... ..... @rd_pg_rn_e0
1256 BFCVT_z 01100100 10 0110 101 10 ... ..... ..... @rd_pg_rn_e0
1257
1258 FCVT_dh_z 01100100 11 0110 101 00 ... ..... ..... @rd_pg_rn_e0
1259 FCVT_hd_z 01100100 11 0110 101 01 ... ..... ..... @rd_pg_rn_e0
1260 FCVT_ds_z 01100100 11 0110 101 10 ... ..... ..... @rd_pg_rn_e0
1261 FCVT_sd_z 01100100 11 0110 101 11 ... ..... ..... @rd_pg_rn_e0
1262
1263 # SVE floating-point convert to integer
1264 FCVTZS_hh_m 01100101 01 011 01 0 101 ... ..... ..... @rd_pg_rn_e0
1265 FCVTZU_hh_m 01100101 01 011 01 1 101 ... ..... ..... @rd_pg_rn_e0
1266 FCVTZS_hs_m 01100101 01 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1267 FCVTZU_hs_m 01100101 01 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1268 FCVTZS_hd_m 01100101 01 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1269 FCVTZU_hd_m 01100101 01 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1270 FCVTZS_ss_m 01100101 10 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1271 FCVTZU_ss_m 01100101 10 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1272 FCVTZS_ds_m 01100101 11 011 00 0 101 ... ..... ..... @rd_pg_rn_e0
1273 FCVTZU_ds_m 01100101 11 011 00 1 101 ... ..... ..... @rd_pg_rn_e0
1274 FCVTZS_sd_m 01100101 11 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1275 FCVTZU_sd_m 01100101 11 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1276 FCVTZS_dd_m 01100101 11 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1277 FCVTZU_dd_m 01100101 11 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1278
1279 FCVTZS_hh_z 01100100 01 011 11 0 110 ... ..... ..... @rd_pg_rn_e0
1280 FCVTZU_hh_z 01100100 01 011 11 0 111 ... ..... ..... @rd_pg_rn_e0
1281 FCVTZS_hs_z 01100100 01 011 11 1 100 ... ..... ..... @rd_pg_rn_e0
1282 FCVTZU_hs_z 01100100 01 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1283 FCVTZS_hd_z 01100100 01 011 11 1 110 ... ..... ..... @rd_pg_rn_e0
1284 FCVTZU_hd_z 01100100 01 011 11 1 111 ... ..... ..... @rd_pg_rn_e0
1285 FCVTZS_ss_z 01100100 10 011 11 1 100 ... ..... ..... @rd_pg_rn_e0
1286 FCVTZU_ss_z 01100100 10 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1287 FCVTZS_sd_z 01100100 11 011 11 1 100 ... ..... ..... @rd_pg_rn_e0
1288 FCVTZU_sd_z 01100100 11 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1289 FCVTZS_ds_z 01100100 11 011 11 0 100 ... ..... ..... @rd_pg_rn_e0
1290 FCVTZU_ds_z 01100100 11 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1291 FCVTZS_dd_z 01100100 11 011 11 1 110 ... ..... ..... @rd_pg_rn_e0
1292 FCVTZU_dd_z 01100100 11 011 11 1 111 ... ..... ..... @rd_pg_rn_e0
1293
1294 # SVE floating-point round to integral value
1295 FRINTN_m 01100101 .. 000 000 101 ... ..... ..... @rd_pg_rn
1296 FRINTP_m 01100101 .. 000 001 101 ... ..... ..... @rd_pg_rn
1297 FRINTM_m 01100101 .. 000 010 101 ... ..... ..... @rd_pg_rn
1298 FRINTZ_m 01100101 .. 000 011 101 ... ..... ..... @rd_pg_rn
1299 FRINTA_m 01100101 .. 000 100 101 ... ..... ..... @rd_pg_rn
1300 FRINTX_m 01100101 .. 000 110 101 ... ..... ..... @rd_pg_rn
1301 FRINTI_m 01100101 .. 000 111 101 ... ..... ..... @rd_pg_rn
1302
1303 FRINTN_z 01100100 .. 011 000 100 ... ..... ..... @rd_pg_rn
1304 FRINTP_z 01100100 .. 011 000 101 ... ..... ..... @rd_pg_rn
1305 FRINTM_z 01100100 .. 011 000 110 ... ..... ..... @rd_pg_rn
1306 FRINTZ_z 01100100 .. 011 000 111 ... ..... ..... @rd_pg_rn
1307 FRINTA_z 01100100 .. 011 001 100 ... ..... ..... @rd_pg_rn
1308 FRINTX_z 01100100 .. 011 001 110 ... ..... ..... @rd_pg_rn
1309 FRINTI_z 01100100 .. 011 001 111 ... ..... ..... @rd_pg_rn
1310
1311 FRINT32X_s_m 01100101 00 010 001 101 ... ..... ..... @rd_pg_rn_e0
1312 FRINT32X_d_m 01100101 00 010 011 101 ... ..... ..... @rd_pg_rn_e0
1313 FRINT64X_s_m 01100101 00 010 101 101 ... ..... ..... @rd_pg_rn_e0
1314 FRINT64X_d_m 01100101 00 010 111 101 ... ..... ..... @rd_pg_rn_e0
1315
1316 FRINT32X_s_z 01100100 00 011 100 101 ... ..... ..... @rd_pg_rn_e0
1317 FRINT32X_d_z 01100100 00 011 100 111 ... ..... ..... @rd_pg_rn_e0
1318 FRINT64X_s_z 01100100 00 011 101 101 ... ..... ..... @rd_pg_rn_e0
1319 FRINT64X_d_z 01100100 00 011 101 111 ... ..... ..... @rd_pg_rn_e0
1320
1321 FRINT32Z_s_m 01100101 00 010 000 101 ... ..... ..... @rd_pg_rn_e0
1322 FRINT32Z_d_m 01100101 00 010 010 101 ... ..... ..... @rd_pg_rn_e0
1323 FRINT64Z_s_m 01100101 00 010 100 101 ... ..... ..... @rd_pg_rn_e0
1324 FRINT64Z_d_m 01100101 00 010 110 101 ... ..... ..... @rd_pg_rn_e0
1325
1326 FRINT32Z_s_z 01100100 00 011 100 100 ... ..... ..... @rd_pg_rn_e0
1327 FRINT32Z_d_z 01100100 00 011 100 110 ... ..... ..... @rd_pg_rn_e0
1328 FRINT64Z_s_z 01100100 00 011 101 100 ... ..... ..... @rd_pg_rn_e0
1329 FRINT64Z_d_z 01100100 00 011 101 110 ... ..... ..... @rd_pg_rn_e0
1330
1331 # SVE floating-point unary operations
1332 FRECPX_m 01100101 .. 001 100 101 ... ..... ..... @rd_pg_rn
1333 FSQRT_m 01100101 .. 001 101 101 ... ..... ..... @rd_pg_rn
1334
1335 FRECPX_z 01100100 .. 011 011 100 ... ..... ..... @rd_pg_rn
1336 FSQRT_z 01100100 .. 011 011 101 ... ..... ..... @rd_pg_rn
1337
1338 # SVE integer convert to floating-point
1339 SCVTF_hh_m 01100101 01 010 01 0 101 ... ..... ..... @rd_pg_rn_e0
1340 SCVTF_sh_m 01100101 01 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1341 SCVTF_dh_m 01100101 01 010 11 0 101 ... ..... ..... @rd_pg_rn_e0
1342 SCVTF_ss_m 01100101 10 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1343 SCVTF_sd_m 01100101 11 010 00 0 101 ... ..... ..... @rd_pg_rn_e0
1344 SCVTF_ds_m 01100101 11 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1345 SCVTF_dd_m 01100101 11 010 11 0 101 ... ..... ..... @rd_pg_rn_e0
1346
1347 UCVTF_hh_m 01100101 01 010 01 1 101 ... ..... ..... @rd_pg_rn_e0
1348 UCVTF_sh_m 01100101 01 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1349 UCVTF_dh_m 01100101 01 010 11 1 101 ... ..... ..... @rd_pg_rn_e0
1350 UCVTF_ss_m 01100101 10 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1351 UCVTF_sd_m 01100101 11 010 00 1 101 ... ..... ..... @rd_pg_rn_e0
1352 UCVTF_ds_m 01100101 11 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1353 UCVTF_dd_m 01100101 11 010 11 1 101 ... ..... ..... @rd_pg_rn_e0
1354
1355 SCVTF_hh_z 01100100 01 011 10 0 110 ... ..... ..... @rd_pg_rn_e0
1356 SCVTF_sh_z 01100100 01 011 10 1 100 ... ..... ..... @rd_pg_rn_e0
1357 SCVTF_ss_z 01100100 10 011 10 1 100 ... ..... ..... @rd_pg_rn_e0
1358 SCVTF_sd_z 01100100 11 011 10 0 100 ... ..... ..... @rd_pg_rn_e0
1359 SCVTF_dh_z 01100100 01 011 10 1 110 ... ..... ..... @rd_pg_rn_e0
1360 SCVTF_ds_z 01100100 11 011 10 1 100 ... ..... ..... @rd_pg_rn_e0
1361 SCVTF_dd_z 01100100 11 011 10 1 110 ... ..... ..... @rd_pg_rn_e0
1362
1363 UCVTF_hh_z 01100100 01 011 10 0 111 ... ..... ..... @rd_pg_rn_e0
1364 UCVTF_sh_z 01100100 01 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1365 UCVTF_ss_z 01100100 10 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1366 UCVTF_sd_z 01100100 11 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1367 UCVTF_dh_z 01100100 01 011 10 1 111 ... ..... ..... @rd_pg_rn_e0
1368 UCVTF_ds_z 01100100 11 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1369 UCVTF_dd_z 01100100 11 011 10 1 111 ... ..... ..... @rd_pg_rn_e0
1370
1371 ### SVE Memory - 32-bit Gather and Unsized Contiguous Group
1372
1373 # SVE load predicate register
1374 LDR_pri 10000101 10 ...... 000 ... ..... 0 .... @pd_rn_i9
1375
1376 # SVE load vector register
1377 LDR_zri 10000101 10 ...... 010 ... ..... ..... @rd_rn_i9
1378
1379 # SVE load and broadcast element
1380 LD1R_zpri 1000010 .. 1 imm:6 1.. pg:3 rn:5 rd:5 \
1381 &rpri_load dtype=%dtype_23_13 nreg=0
1382
1383 # SVE 32-bit gather load (scalar plus 32-bit unscaled offsets)
1384 # SVE 32-bit gather load (scalar plus 32-bit scaled offsets)
1385 LD1_zprz 1000010 00 .0 ..... 0.. ... ..... ..... \
1386 @rprr_g_load_xs_u esz=2 msz=0 scale=0
1387 LD1_zprz 1000010 01 .. ..... 0.. ... ..... ..... \
1388 @rprr_g_load_xs_u_sc esz=2 msz=1
1389 LD1_zprz 1000010 10 .. ..... 01. ... ..... ..... \
1390 @rprr_g_load_xs_sc esz=2 msz=2 u=1
1391
1392 # SVE 32-bit gather load (vector plus immediate)
1393 LD1_zpiz 1000010 .. 01 ..... 1.. ... ..... ..... \
1394 @rpri_g_load esz=2
1395
1396 ### SVE Memory Contiguous Load Group
1397
1398 # SVE contiguous load (scalar plus scalar)
1399 LD_zprr 1010010 .... ..... 010 ... ..... ..... @rprr_load_dt nreg=0
1400 # LD1W (128-bit element)
1401 LD_zprr 1010010 1000 rm:5 100 pg:3 rn:5 rd:5 \
1402 &rprr_load dtype=16 nreg=0
1403 # LD1D (128-bit element)
1404 LD_zprr 1010010 1100 rm:5 100 pg:3 rn:5 rd:5 \
1405 &rprr_load dtype=17 nreg=0
1406
1407 # SVE contiguous first-fault load (scalar plus scalar)
1408 LDFF1_zprr 1010010 .... ..... 011 ... ..... ..... @rprr_load_dt nreg=0
1409
1410 # SVE contiguous load (scalar plus immediate)
1411 LD_zpri 1010010 .... 0.... 101 ... ..... ..... @rpri_load_dt nreg=0
1412 # LD1W (128-bit element)
1413 LD_zpri 1010010 1000 1 imm:s4 001 pg:3 rn:5 rd:5 \
1414 &rpri_load dtype=16 nreg=0
1415 # LD1D (128-bit element)
1416 LD_zpri 1010010 1100 1 imm:s4 001 pg:3 rn:5 rd:5 \
1417 &rpri_load dtype=17 nreg=0
1418
1419 # SVE contiguous non-fault load (scalar plus immediate)
1420 LDNF1_zpri 1010010 .... 1.... 101 ... ..... ..... @rpri_load_dt nreg=0
1421
1422 # SVE contiguous non-temporal load (scalar plus scalar)
1423 # LDNT1B, LDNT1H, LDNT1W, LDNT1D
1424 # SVE load multiple structures (scalar plus scalar)
1425 # LD2B, LD2H, LD2W, LD2D; etc.
1426 LD_zprr 1010010 .. nreg:2 ..... 110 ... ..... ..... @rprr_load_msz
1427 # LD[234]Q
1428 LD_zprr 1010010 01 01 ..... 100 ... ..... ..... \
1429 @rprr_load dtype=18 nreg=1
1430 LD_zprr 1010010 10 01 ..... 100 ... ..... ..... \
1431 @rprr_load dtype=18 nreg=2
1432 LD_zprr 1010010 11 01 ..... 100 ... ..... ..... \
1433 @rprr_load dtype=18 nreg=3
1434
1435 # SVE contiguous non-temporal load (scalar plus immediate)
1436 # LDNT1B, LDNT1H, LDNT1W, LDNT1D
1437 # SVE load multiple structures (scalar plus immediate)
1438 # LD2B, LD2H, LD2W, LD2D; etc.
1439 LD_zpri 1010010 .. nreg:2 0.... 111 ... ..... ..... @rpri_load_msz
1440 # LD[234]Q
1441 LD_zpri 1010010 01 001 .... 111 ... ..... ..... \
1442 @rpri_load dtype=18 nreg=1
1443 LD_zpri 1010010 10 001 .... 111 ... ..... ..... \
1444 @rpri_load dtype=18 nreg=2
1445 LD_zpri 1010010 11 001 .... 111 ... ..... ..... \
1446 @rpri_load dtype=18 nreg=3
1447
1448 # SVE load and broadcast quadword (scalar plus scalar)
1449 LD1RQ_zprr 1010010 .. 00 ..... 000 ... ..... ..... \
1450 @rprr_load_msz nreg=0
1451 LD1RO_zprr 1010010 .. 01 ..... 000 ... ..... ..... \
1452 @rprr_load_msz nreg=0
1453
1454 # SVE load and broadcast quadword (scalar plus immediate)
1455 # LD1RQB, LD1RQH, LD1RQS, LD1RQD
1456 LD1RQ_zpri 1010010 .. 00 0.... 001 ... ..... ..... \
1457 @rpri_load_msz nreg=0
1458 LD1RO_zpri 1010010 .. 01 0.... 001 ... ..... ..... \
1459 @rpri_load_msz nreg=0
1460
1461 # SVE 32-bit gather prefetch (scalar plus 32-bit scaled offsets)
1462 PRF_ns 1000010 00 -1 ----- 0-- --- ----- 0 ----
1463
1464 # SVE 32-bit gather prefetch (vector plus immediate)
1465 PRF_ns 1000010 -- 00 ----- 111 --- ----- 0 ----
1466
1467 # SVE contiguous prefetch (scalar plus immediate)
1468 PRF 1000010 11 1- ----- 0-- --- ----- 0 ----
1469
1470 # SVE contiguous prefetch (scalar plus scalar)
1471 PRF_rr 1000010 -- 00 rm:5 110 --- ----- 0 ----
1472
1473 ### SVE Memory 64-bit Gather Group
1474
1475 # SVE 64-bit gather load (scalar plus 32-bit unpacked unscaled offsets)
1476 # SVE 64-bit gather load (scalar plus 32-bit unpacked scaled offsets)
1477 LD1_zprz 1100010 00 .0 ..... 0.. ... ..... ..... \
1478 @rprr_g_load_xs_u esz=3 msz=0 scale=0
1479 LD1_zprz 1100010 01 .. ..... 0.. ... ..... ..... \
1480 @rprr_g_load_xs_u_sc esz=3 msz=1
1481 LD1_zprz 1100010 10 .. ..... 0.. ... ..... ..... \
1482 @rprr_g_load_xs_u_sc esz=3 msz=2
1483 LD1_zprz 1100010 11 .. ..... 01. ... ..... ..... \
1484 @rprr_g_load_xs_sc esz=3 msz=3 u=1
1485
1486 # SVE 64-bit gather load (scalar plus 64-bit unscaled offsets)
1487 # SVE 64-bit gather load (scalar plus 64-bit scaled offsets)
1488 LD1_zprz 1100010 00 10 ..... 1.. ... ..... ..... \
1489 @rprr_g_load_u esz=3 msz=0 scale=0
1490 LD1_zprz 1100010 01 1. ..... 1.. ... ..... ..... \
1491 @rprr_g_load_u_sc esz=3 msz=1
1492 LD1_zprz 1100010 10 1. ..... 1.. ... ..... ..... \
1493 @rprr_g_load_u_sc esz=3 msz=2
1494 LD1_zprz 1100010 11 1. ..... 11. ... ..... ..... \
1495 @rprr_g_load_sc esz=3 msz=3 u=1
1496
1497 # LD1Q. Note that this is subtly different from LD1_zprz because
1498 # it is vector + scalar, not scalar + vector.
1499 LD1Q 1100 0100 000 rm:5 101 pg:3 rn:5 rd:5
1500
1501 # SVE 64-bit gather load (vector plus immediate)
1502 LD1_zpiz 1100010 .. 01 ..... 1.. ... ..... ..... \
1503 @rpri_g_load esz=3
1504
1505 # SVE 64-bit gather prefetch (scalar plus 64-bit scaled offsets)
1506 PRF_ns 1100010 00 11 ----- 1-- --- ----- 0 ----
1507
1508 # SVE 64-bit gather prefetch (scalar plus unpacked 32-bit scaled offsets)
1509 PRF_ns 1100010 00 -1 ----- 0-- --- ----- 0 ----
1510
1511 # SVE 64-bit gather prefetch (vector plus immediate)
1512 PRF_ns 1100010 -- 00 ----- 111 --- ----- 0 ----
1513
1514 ### SVE Memory Store Group
1515
1516 # SVE store predicate register
1517 STR_pri 1110010 11 0. ..... 000 ... ..... 0 .... @pd_rn_i9
1518
1519 # SVE store vector register
1520 STR_zri 1110010 11 0. ..... 010 ... ..... ..... @rd_rn_i9
1521
1522 # SVE contiguous store (scalar plus immediate)
1523 # ST1B, ST1H, ST1W, ST1D; require msz <= esz
1524 ST_zpri 1110010 00 esz:2 0.... 111 ... ..... ..... \
1525 @rpri_store msz=0 nreg=0
1526 ST_zpri 1110010 01 esz:2 0.... 111 ... ..... ..... \
1527 @rpri_store msz=1 nreg=0
1528 ST_zpri 1110010 10 10 0.... 111 ... ..... ..... \
1529 @rpri_store msz=2 esz=2 nreg=0
1530 ST_zpri 1110010 10 11 0.... 111 ... ..... ..... \
1531 @rpri_store msz=2 esz=3 nreg=0
1532 ST_zpri 1110010 11 11 0.... 111 ... ..... ..... \
1533 @rpri_store msz=3 esz=3 nreg=0
1534 ST_zpri 1110010 10 00 0.... 111 ... ..... ..... \
1535 @rpri_store msz=2 esz=4 nreg=0
1536 ST_zpri 1110010 11 10 0.... 111 ... ..... ..... \
1537 @rpri_store msz=3 esz=4 nreg=0
1538
1539 # SVE contiguous store (scalar plus scalar)
1540 # ST1B, ST1H, ST1W, ST1D; require msz <= esz
1541 # Enumerate msz lest we conflict with STR_zri.
1542 ST_zprr 1110010 00 .. ..... 010 ... ..... ..... \
1543 @rprr_store_esz_n0 msz=0
1544 ST_zprr 1110010 01 .. ..... 010 ... ..... ..... \
1545 @rprr_store_esz_n0 msz=1
1546 ST_zprr 1110010 10 10 ..... 010 ... ..... ..... \
1547 @rprr_store msz=2 esz=2 nreg=0
1548 ST_zprr 1110010 10 11 ..... 010 ... ..... ..... \
1549 @rprr_store msz=2 esz=3 nreg=0
1550 ST_zprr 1110010 11 11 ..... 010 ... ..... ..... \
1551 @rprr_store msz=3 esz=3 nreg=0
1552 ST_zprr 1110010 10 00 ..... 010 ... ..... ..... \
1553 @rprr_store msz=2 esz=4 nreg=0
1554 ST_zprr 1110010 11 10 ..... 010 ... ..... ..... \
1555 @rprr_store msz=3 esz=4 nreg=0
1556
1557 # SVE contiguous non-temporal store (scalar plus immediate) (nreg == 0)
1558 # SVE store multiple structures (scalar plus immediate) (nreg != 0)
1559 ST_zpri 1110010 .. nreg:2 1.... 111 ... ..... ..... \
1560 @rpri_store msz=%size_23 esz=%size_23
1561 # ST[234]Q
1562 ST_zpri 11100100 01 00 .... 000 ... ..... ..... \
1563 @rpri_store msz=4 esz=4 nreg=1
1564 ST_zpri 11100100 10 00 .... 000 ... ..... ..... \
1565 @rpri_store msz=4 esz=4 nreg=2
1566 ST_zpri 11100100 11 00 .... 000 ... ..... ..... \
1567 @rpri_store msz=4 esz=4 nreg=3
1568
1569 # SVE contiguous non-temporal store (scalar plus scalar) (nreg == 0)
1570 # SVE store multiple structures (scalar plus scalar) (nreg != 0)
1571 ST_zprr 1110010 .. nreg:2 ..... 011 ... ..... ..... \
1572 @rprr_store msz=%size_23 esz=%size_23
1573 # ST[234]Q
1574 ST_zprr 11100100 01 1 ..... 000 ... ..... ..... \
1575 @rprr_store msz=4 esz=4 nreg=1
1576 ST_zprr 11100100 10 1 ..... 000 ... ..... ..... \
1577 @rprr_store msz=4 esz=4 nreg=2
1578 ST_zprr 11100100 11 1 ..... 000 ... ..... ..... \
1579 @rprr_store msz=4 esz=4 nreg=3
1580
1581 # SVE 32-bit scatter store (scalar plus 32-bit scaled offsets)
1582 # Require msz > 0 && msz <= esz.
1583 ST1_zprz 1110010 .. 11 ..... 100 ... ..... ..... \
1584 @rprr_scatter_store xs=0 esz=2 scale=1
1585 ST1_zprz 1110010 .. 11 ..... 110 ... ..... ..... \
1586 @rprr_scatter_store xs=1 esz=2 scale=1
1587
1588 # SVE 32-bit scatter store (scalar plus 32-bit unscaled offsets)
1589 # Require msz <= esz.
1590 ST1_zprz 1110010 .. 10 ..... 100 ... ..... ..... \
1591 @rprr_scatter_store xs=0 esz=2 scale=0
1592 ST1_zprz 1110010 .. 10 ..... 110 ... ..... ..... \
1593 @rprr_scatter_store xs=1 esz=2 scale=0
1594
1595 # SVE 64-bit scatter store (scalar plus 64-bit scaled offset)
1596 # Require msz > 0
1597 ST1_zprz 1110010 .. 01 ..... 101 ... ..... ..... \
1598 @rprr_scatter_store xs=2 esz=3 scale=1
1599
1600 # SVE 64-bit scatter store (scalar plus 64-bit unscaled offset)
1601 ST1_zprz 1110010 .. 00 ..... 101 ... ..... ..... \
1602 @rprr_scatter_store xs=2 esz=3 scale=0
1603
1604 # ST1Q. Note that this is subtly different from ST1_zprz because
1605 # it is vector + scalar, not scalar + vector.
1606 ST1Q 1110 0100 001 rm:5 001 pg:3 rn:5 rd:5
1607
1608 # SVE 64-bit scatter store (vector plus immediate)
1609 ST1_zpiz 1110010 .. 10 ..... 101 ... ..... ..... \
1610 @rpri_scatter_store esz=3
1611
1612 # SVE 32-bit scatter store (vector plus immediate)
1613 ST1_zpiz 1110010 .. 11 ..... 101 ... ..... ..... \
1614 @rpri_scatter_store esz=2
1615
1616 # SVE 64-bit scatter store (scalar plus unpacked 32-bit scaled offset)
1617 # Require msz > 0
1618 ST1_zprz 1110010 .. 01 ..... 100 ... ..... ..... \
1619 @rprr_scatter_store xs=0 esz=3 scale=1
1620 ST1_zprz 1110010 .. 01 ..... 110 ... ..... ..... \
1621 @rprr_scatter_store xs=1 esz=3 scale=1
1622
1623 # SVE 64-bit scatter store (scalar plus unpacked 32-bit unscaled offset)
1624 ST1_zprz 1110010 .. 00 ..... 100 ... ..... ..... \
1625 @rprr_scatter_store xs=0 esz=3 scale=0
1626 ST1_zprz 1110010 .. 00 ..... 110 ... ..... ..... \
1627 @rprr_scatter_store xs=1 esz=3 scale=0
1628
1629 #### SVE2 Support
1630
1631 ### SVE2 Integer Multiply - Unpredicated
1632
1633 # SVE2 integer multiply vectors (unpredicated)
1634 MUL_zzz 00000100 .. 1 ..... 0110 00 ..... ..... @rd_rn_rm
1635 SMULH_zzz 00000100 .. 1 ..... 0110 10 ..... ..... @rd_rn_rm
1636 UMULH_zzz 00000100 .. 1 ..... 0110 11 ..... ..... @rd_rn_rm
1637 PMUL_zzz 00000100 00 1 ..... 0110 01 ..... ..... @rd_rn_rm_e0
1638
1639 # SVE2 signed saturating doubling multiply high (unpredicated)
1640 SQDMULH_zzz 00000100 .. 1 ..... 0111 00 ..... ..... @rd_rn_rm
1641 SQRDMULH_zzz 00000100 .. 1 ..... 0111 01 ..... ..... @rd_rn_rm
1642
1643 ### SVE2 Integer - Predicated
1644
1645 SADALP_zpzz 01000100 .. 000 100 101 ... ..... ..... @rdm_pg_rn
1646 UADALP_zpzz 01000100 .. 000 101 101 ... ..... ..... @rdm_pg_rn
1647
1648 ### SVE2 integer unary operations (predicated)
1649
1650 URECPE_m 01000100 .. 000 000 101 ... ..... ..... @rd_pg_rn
1651 URSQRTE_m 01000100 .. 000 001 101 ... ..... ..... @rd_pg_rn
1652 SQABS_m 01000100 .. 001 000 101 ... ..... ..... @rd_pg_rn
1653 SQNEG_m 01000100 .. 001 001 101 ... ..... ..... @rd_pg_rn
1654
1655 URECPE_z 01000100 .. 000 010 101 ... ..... ..... @rd_pg_rn
1656 URSQRTE_z 01000100 .. 000 011 101 ... ..... ..... @rd_pg_rn
1657 SQABS_z 01000100 .. 001 010 101 ... ..... ..... @rd_pg_rn
1658 SQNEG_z 01000100 .. 001 011 101 ... ..... ..... @rd_pg_rn
1659
1660 ### SVE2 saturating/rounding bitwise shift left (predicated)
1661
1662 SRSHL 01000100 .. 000 010 100 ... ..... ..... @rdn_pg_rm
1663 URSHL 01000100 .. 000 011 100 ... ..... ..... @rdn_pg_rm
1664 SRSHL 01000100 .. 000 110 100 ... ..... ..... @rdm_pg_rn # SRSHLR
1665 URSHL 01000100 .. 000 111 100 ... ..... ..... @rdm_pg_rn # URSHLR
1666
1667 SQSHL 01000100 .. 001 000 100 ... ..... ..... @rdn_pg_rm
1668 UQSHL 01000100 .. 001 001 100 ... ..... ..... @rdn_pg_rm
1669 SQSHL 01000100 .. 001 100 100 ... ..... ..... @rdm_pg_rn # SQSHLR
1670 UQSHL 01000100 .. 001 101 100 ... ..... ..... @rdm_pg_rn # UQSHLR
1671
1672 SQRSHL 01000100 .. 001 010 100 ... ..... ..... @rdn_pg_rm
1673 UQRSHL 01000100 .. 001 011 100 ... ..... ..... @rdn_pg_rm
1674 SQRSHL 01000100 .. 001 110 100 ... ..... ..... @rdm_pg_rn # SQRSHLR
1675 UQRSHL 01000100 .. 001 111 100 ... ..... ..... @rdm_pg_rn # UQRSHLR
1676
1677 ### SVE2 integer halving add/subtract (predicated)
1678
1679 SHADD 01000100 .. 010 000 100 ... ..... ..... @rdn_pg_rm
1680 UHADD 01000100 .. 010 001 100 ... ..... ..... @rdn_pg_rm
1681 SHSUB 01000100 .. 010 010 100 ... ..... ..... @rdn_pg_rm
1682 UHSUB 01000100 .. 010 011 100 ... ..... ..... @rdn_pg_rm
1683 SRHADD 01000100 .. 010 100 100 ... ..... ..... @rdn_pg_rm
1684 URHADD 01000100 .. 010 101 100 ... ..... ..... @rdn_pg_rm
1685 SHSUB 01000100 .. 010 110 100 ... ..... ..... @rdm_pg_rn # SHSUBR
1686 UHSUB 01000100 .. 010 111 100 ... ..... ..... @rdm_pg_rn # UHSUBR
1687
1688 ### SVE2 integer pairwise arithmetic
1689
1690 ADDP 01000100 .. 010 001 101 ... ..... ..... @rdn_pg_rm
1691 SMAXP 01000100 .. 010 100 101 ... ..... ..... @rdn_pg_rm
1692 UMAXP 01000100 .. 010 101 101 ... ..... ..... @rdn_pg_rm
1693 SMINP 01000100 .. 010 110 101 ... ..... ..... @rdn_pg_rm
1694 UMINP 01000100 .. 010 111 101 ... ..... ..... @rdn_pg_rm
1695
1696 ### SVE2 saturating add/subtract (predicated)
1697
1698 SQADD_zpzz 01000100 .. 011 000 100 ... ..... ..... @rdn_pg_rm
1699 UQADD_zpzz 01000100 .. 011 001 100 ... ..... ..... @rdn_pg_rm
1700 SQSUB_zpzz 01000100 .. 011 010 100 ... ..... ..... @rdn_pg_rm
1701 UQSUB_zpzz 01000100 .. 011 011 100 ... ..... ..... @rdn_pg_rm
1702 SUQADD 01000100 .. 011 100 100 ... ..... ..... @rdn_pg_rm
1703 USQADD 01000100 .. 011 101 100 ... ..... ..... @rdn_pg_rm
1704 SQSUB_zpzz 01000100 .. 011 110 100 ... ..... ..... @rdm_pg_rn # SQSUBR
1705 UQSUB_zpzz 01000100 .. 011 111 100 ... ..... ..... @rdm_pg_rn # UQSUBR
1706
1707 #### SVE2 Widening Integer Arithmetic
1708
1709 ## SVE2 integer add/subtract long
1710
1711 SADDLB 01000101 .. 0 ..... 00 0000 ..... ..... @rd_rn_rm
1712 SADDLT 01000101 .. 0 ..... 00 0001 ..... ..... @rd_rn_rm
1713 UADDLB 01000101 .. 0 ..... 00 0010 ..... ..... @rd_rn_rm
1714 UADDLT 01000101 .. 0 ..... 00 0011 ..... ..... @rd_rn_rm
1715
1716 SSUBLB 01000101 .. 0 ..... 00 0100 ..... ..... @rd_rn_rm
1717 SSUBLT 01000101 .. 0 ..... 00 0101 ..... ..... @rd_rn_rm
1718 USUBLB 01000101 .. 0 ..... 00 0110 ..... ..... @rd_rn_rm
1719 USUBLT 01000101 .. 0 ..... 00 0111 ..... ..... @rd_rn_rm
1720
1721 SABDLB 01000101 .. 0 ..... 00 1100 ..... ..... @rd_rn_rm
1722 SABDLT 01000101 .. 0 ..... 00 1101 ..... ..... @rd_rn_rm
1723 UABDLB 01000101 .. 0 ..... 00 1110 ..... ..... @rd_rn_rm
1724 UABDLT 01000101 .. 0 ..... 00 1111 ..... ..... @rd_rn_rm
1725
1726 ## SVE2 integer add/subtract interleaved long
1727
1728 SADDLBT 01000101 .. 0 ..... 1000 00 ..... ..... @rd_rn_rm
1729 SSUBLBT 01000101 .. 0 ..... 1000 10 ..... ..... @rd_rn_rm
1730 SSUBLTB 01000101 .. 0 ..... 1000 11 ..... ..... @rd_rn_rm
1731
1732 ## SVE2 integer add/subtract wide
1733
1734 SADDWB 01000101 .. 0 ..... 010 000 ..... ..... @rd_rn_rm
1735 SADDWT 01000101 .. 0 ..... 010 001 ..... ..... @rd_rn_rm
1736 UADDWB 01000101 .. 0 ..... 010 010 ..... ..... @rd_rn_rm
1737 UADDWT 01000101 .. 0 ..... 010 011 ..... ..... @rd_rn_rm
1738
1739 SSUBWB 01000101 .. 0 ..... 010 100 ..... ..... @rd_rn_rm
1740 SSUBWT 01000101 .. 0 ..... 010 101 ..... ..... @rd_rn_rm
1741 USUBWB 01000101 .. 0 ..... 010 110 ..... ..... @rd_rn_rm
1742 USUBWT 01000101 .. 0 ..... 010 111 ..... ..... @rd_rn_rm
1743
1744 ## SVE2 integer multiply long
1745
1746 SQDMULLB_zzz 01000101 .. 0 ..... 011 000 ..... ..... @rd_rn_rm
1747 SQDMULLT_zzz 01000101 .. 0 ..... 011 001 ..... ..... @rd_rn_rm
1748 PMULLB 01000101 .. 0 ..... 011 010 ..... ..... @rd_rn_rm
1749 PMULLT 01000101 .. 0 ..... 011 011 ..... ..... @rd_rn_rm
1750 SMULLB_zzz 01000101 .. 0 ..... 011 100 ..... ..... @rd_rn_rm
1751 SMULLT_zzz 01000101 .. 0 ..... 011 101 ..... ..... @rd_rn_rm
1752 UMULLB_zzz 01000101 .. 0 ..... 011 110 ..... ..... @rd_rn_rm
1753 UMULLT_zzz 01000101 .. 0 ..... 011 111 ..... ..... @rd_rn_rm
1754
1755 ## SVE2 bitwise shift left long
1756
1757 # Note bit23 == 0 is handled by esz > 0 in do_sve2_shll_tb.
1758 SSHLLB 01000101 .. 0 ..... 1010 00 ..... ..... @rd_rn_tszimm_shl
1759 SSHLLT 01000101 .. 0 ..... 1010 01 ..... ..... @rd_rn_tszimm_shl
1760 USHLLB 01000101 .. 0 ..... 1010 10 ..... ..... @rd_rn_tszimm_shl
1761 USHLLT 01000101 .. 0 ..... 1010 11 ..... ..... @rd_rn_tszimm_shl
1762
1763 ## SVE2 bitwise exclusive-or interleaved
1764
1765 EORBT 01000101 .. 0 ..... 10010 0 ..... ..... @rd_rn_rm
1766 EORTB 01000101 .. 0 ..... 10010 1 ..... ..... @rd_rn_rm
1767
1768 ## SVE integer matrix multiply accumulate
1769
1770 SMMLA 01000101 00 0 ..... 10011 0 ..... ..... @rda_rn_rm_ex esz=2
1771 USMMLA 01000101 10 0 ..... 10011 0 ..... ..... @rda_rn_rm_ex esz=2
1772 UMMLA 01000101 11 0 ..... 10011 0 ..... ..... @rda_rn_rm_ex esz=2
1773
1774 ## SVE2 bitwise permute
1775
1776 BEXT 01000101 .. 0 ..... 1011 00 ..... ..... @rd_rn_rm
1777 BDEP 01000101 .. 0 ..... 1011 01 ..... ..... @rd_rn_rm
1778 BGRP 01000101 .. 0 ..... 1011 10 ..... ..... @rd_rn_rm
1779
1780 #### SVE2 Accumulate
1781
1782 ## SVE2 complex integer add
1783
1784 CADD_rot90 01000101 .. 00000 0 11011 0 ..... ..... @rdn_rm
1785 CADD_rot270 01000101 .. 00000 0 11011 1 ..... ..... @rdn_rm
1786 SQCADD_rot90 01000101 .. 00000 1 11011 0 ..... ..... @rdn_rm
1787 SQCADD_rot270 01000101 .. 00000 1 11011 1 ..... ..... @rdn_rm
1788
1789 ## SVE2 integer absolute difference and accumulate long
1790
1791 SABALB 01000101 .. 0 ..... 1100 00 ..... ..... @rda_rn_rm
1792 SABALT 01000101 .. 0 ..... 1100 01 ..... ..... @rda_rn_rm
1793 UABALB 01000101 .. 0 ..... 1100 10 ..... ..... @rda_rn_rm
1794 UABALT 01000101 .. 0 ..... 1100 11 ..... ..... @rda_rn_rm
1795
1796 ## SVE2 integer add/subtract long with carry
1797
1798 # ADC and SBC decoded via size in helper dispatch.
1799 ADCLB 01000101 .. 0 ..... 11010 0 ..... ..... @rda_rn_rm
1800 ADCLT 01000101 .. 0 ..... 11010 1 ..... ..... @rda_rn_rm
1801
1802 ## SVE2 bitwise shift right and accumulate
1803
1804 # TODO: Use @rda and %reg_movprfx here.
1805 SSRA 01000101 .. 0 ..... 1110 00 ..... ..... @rd_rn_tszimm_shr
1806 USRA 01000101 .. 0 ..... 1110 01 ..... ..... @rd_rn_tszimm_shr
1807 SRSRA 01000101 .. 0 ..... 1110 10 ..... ..... @rd_rn_tszimm_shr
1808 URSRA 01000101 .. 0 ..... 1110 11 ..... ..... @rd_rn_tszimm_shr
1809
1810 ## SVE2 bitwise shift and insert
1811
1812 SRI 01000101 .. 0 ..... 11110 0 ..... ..... @rd_rn_tszimm_shr
1813 SLI 01000101 .. 0 ..... 11110 1 ..... ..... @rd_rn_tszimm_shl
1814
1815 ## SVE2 integer absolute difference and accumulate
1816
1817 # TODO: Use @rda and %reg_movprfx here.
1818 SABA 01000101 .. 0 ..... 11111 0 ..... ..... @rd_rn_rm
1819 UABA 01000101 .. 0 ..... 11111 1 ..... ..... @rd_rn_rm
1820
1821 #### SVE2 Narrowing
1822
1823 ## SVE2 saturating extract narrow
1824 # Bits 23, 18-16 are zero, limited in the translator via esz < 3 & imm == 0.
1825
1826 {
1827 SQCVTN_sh 01000101 00 1 10001 010 000 ....0 ..... @rd_rnx2 esz=1
1828 SQXTNB 01000101 .. 1 ..... 010 000 ..... ..... @rd_rn_tszimm_shl
1829 }
1830 SQXTNT 01000101 .. 1 ..... 010 001 ..... ..... @rd_rn_tszimm_shl
1831 {
1832 UQCVTN_sh 01000101 00 1 10001 010 010 ....0 ..... @rd_rnx2 esz=1
1833 UQXTNB 01000101 .. 1 ..... 010 010 ..... ..... @rd_rn_tszimm_shl
1834 }
1835 UQXTNT 01000101 .. 1 ..... 010 011 ..... ..... @rd_rn_tszimm_shl
1836 {
1837 SQCVTUN_sh 01000101 00 1 10001 010 100 ....0 ..... @rd_rnx2 esz=1
1838 SQXTUNB 01000101 .. 1 ..... 010 100 ..... ..... @rd_rn_tszimm_shl
1839 }
1840 SQXTUNT 01000101 .. 1 ..... 010 101 ..... ..... @rd_rn_tszimm_shl
1841
1842 ## SVE2 bitwise shift right narrow
1843
1844 # Bit 23 == 0 is handled by esz > 0 in the translator.
1845 SQSHRUNB 01000101 .. 1 ..... 00 0000 ..... ..... @rd_rn_tszimm_shr
1846 SQSHRUNT 01000101 .. 1 ..... 00 0001 ..... ..... @rd_rn_tszimm_shr
1847 SQRSHRUNB 01000101 .. 1 ..... 00 0010 ..... ..... @rd_rn_tszimm_shr
1848 SQRSHRUNT 01000101 .. 1 ..... 00 0011 ..... ..... @rd_rn_tszimm_shr
1849 SHRNB 01000101 .. 1 ..... 00 0100 ..... ..... @rd_rn_tszimm_shr
1850 SHRNT 01000101 .. 1 ..... 00 0101 ..... ..... @rd_rn_tszimm_shr
1851 RSHRNB 01000101 .. 1 ..... 00 0110 ..... ..... @rd_rn_tszimm_shr
1852 RSHRNT 01000101 .. 1 ..... 00 0111 ..... ..... @rd_rn_tszimm_shr
1853 SQSHRNB 01000101 .. 1 ..... 00 1000 ..... ..... @rd_rn_tszimm_shr
1854 SQSHRNT 01000101 .. 1 ..... 00 1001 ..... ..... @rd_rn_tszimm_shr
1855 SQRSHRNB 01000101 .. 1 ..... 00 1010 ..... ..... @rd_rn_tszimm_shr
1856 SQRSHRNT 01000101 .. 1 ..... 00 1011 ..... ..... @rd_rn_tszimm_shr
1857 UQSHRNB 01000101 .. 1 ..... 00 1100 ..... ..... @rd_rn_tszimm_shr
1858 UQSHRNT 01000101 .. 1 ..... 00 1101 ..... ..... @rd_rn_tszimm_shr
1859 UQRSHRNB 01000101 .. 1 ..... 00 1110 ..... ..... @rd_rn_tszimm_shr
1860 UQRSHRNT 01000101 .. 1 ..... 00 1111 ..... ..... @rd_rn_tszimm_shr
1861
1862 ## SVE2 integer add/subtract narrow high part
1863
1864 ADDHNB 01000101 .. 1 ..... 011 000 ..... ..... @rd_rn_rm
1865 ADDHNT 01000101 .. 1 ..... 011 001 ..... ..... @rd_rn_rm
1866 RADDHNB 01000101 .. 1 ..... 011 010 ..... ..... @rd_rn_rm
1867 RADDHNT 01000101 .. 1 ..... 011 011 ..... ..... @rd_rn_rm
1868 SUBHNB 01000101 .. 1 ..... 011 100 ..... ..... @rd_rn_rm
1869 SUBHNT 01000101 .. 1 ..... 011 101 ..... ..... @rd_rn_rm
1870 RSUBHNB 01000101 .. 1 ..... 011 110 ..... ..... @rd_rn_rm
1871 RSUBHNT 01000101 .. 1 ..... 011 111 ..... ..... @rd_rn_rm
1872
1873 ### SVE2 Character Match
1874
1875 MATCH 01000101 .. 1 ..... 100 ... ..... 0 .... @pd_pg_rn_rm
1876 NMATCH 01000101 .. 1 ..... 100 ... ..... 1 .... @pd_pg_rn_rm
1877
1878 ### SVE2 Histogram Computation and Lookup Table
1879
1880 HISTCNT 01000101 .. 1 ..... 110 ... ..... ..... @rd_pg_rn_rm
1881 HISTSEG 01000101 .. 1 ..... 101 000 ..... ..... @rd_rn_rm
1882
1883 LUTI2_1b 01000101 index:2 1 rm:5 101100 rn:5 rd:5 &rrx_esz esz=0
1884 LUTI2_1h 01000101 .. 1 rm:5 101.10 rn:5 rd:5 \
1885 &rrx_esz esz=1 index=%index3_22_12
1886
1887 LUTI4_1b 01000101 index:1 11 rm:5 101001 rn:5 rd:5 &rrx_esz esz=0
1888 LUTI4_1h 01000101 index:2 1 rm:5 101111 rn:5 rd:5 &rrx_esz esz=1
1889 LUTI4_2h 01000101 index:2 1 rm:5 101101 rn:5 rd:5 &rrx_esz esz=1
1890
1891 ## SVE2 floating-point pairwise operations
1892
1893 FADDP 01100100 .. 010 00 0 100 ... ..... ..... @rdn_pg_rm
1894 FMAXNMP 01100100 .. 010 10 0 100 ... ..... ..... @rdn_pg_rm
1895 FMINNMP 01100100 .. 010 10 1 100 ... ..... ..... @rdn_pg_rm
1896 FMAXP 01100100 .. 010 11 0 100 ... ..... ..... @rdn_pg_rm
1897 FMINP 01100100 .. 010 11 1 100 ... ..... ..... @rdn_pg_rm
1898
1899 #### SVE Integer Multiply-Add (unpredicated)
1900
1901 ## SVE2 saturating multiply-add long
1902
1903 SQDMLALB_zzzw 01000100 .. 0 ..... 0110 00 ..... ..... @rda_rn_rm
1904 SQDMLALT_zzzw 01000100 .. 0 ..... 0110 01 ..... ..... @rda_rn_rm
1905 SQDMLSLB_zzzw 01000100 .. 0 ..... 0110 10 ..... ..... @rda_rn_rm
1906 SQDMLSLT_zzzw 01000100 .. 0 ..... 0110 11 ..... ..... @rda_rn_rm
1907
1908 ## SVE2 saturating multiply-add interleaved long
1909
1910 SQDMLALBT 01000100 .. 0 ..... 00001 0 ..... ..... @rda_rn_rm
1911 SQDMLSLBT 01000100 .. 0 ..... 00001 1 ..... ..... @rda_rn_rm
1912
1913 ## SVE2 saturating multiply-add high
1914
1915 SQRDMLAH_zzzz 01000100 .. 0 ..... 01110 0 ..... ..... @rda_rn_rm
1916 SQRDMLSH_zzzz 01000100 .. 0 ..... 01110 1 ..... ..... @rda_rn_rm
1917
1918 ## SVE2 integer multiply-add long
1919
1920 SMLALB_zzzw 01000100 .. 0 ..... 010 000 ..... ..... @rda_rn_rm
1921 SMLALT_zzzw 01000100 .. 0 ..... 010 001 ..... ..... @rda_rn_rm
1922 UMLALB_zzzw 01000100 .. 0 ..... 010 010 ..... ..... @rda_rn_rm
1923 UMLALT_zzzw 01000100 .. 0 ..... 010 011 ..... ..... @rda_rn_rm
1924 SMLSLB_zzzw 01000100 .. 0 ..... 010 100 ..... ..... @rda_rn_rm
1925 SMLSLT_zzzw 01000100 .. 0 ..... 010 101 ..... ..... @rda_rn_rm
1926 UMLSLB_zzzw 01000100 .. 0 ..... 010 110 ..... ..... @rda_rn_rm
1927 UMLSLT_zzzw 01000100 .. 0 ..... 010 111 ..... ..... @rda_rn_rm
1928
1929 ## SVE2 complex integer multiply-add
1930
1931 CMLA_zzzz 01000100 esz:2 0 rm:5 0010 rot:2 rn:5 rd:5 ra=%reg_movprfx
1932 SQRDCMLAH_zzzz 01000100 esz:2 0 rm:5 0011 rot:2 rn:5 rd:5 ra=%reg_movprfx
1933
1934 ## SVE dot product
1935
1936 SDOT_zzzz_2s 01000100 00 0 ..... 110 010 ..... ..... @rda_rn_rm_ex esz=2
1937 UDOT_zzzz_2s 01000100 00 0 ..... 110 011 ..... ..... @rda_rn_rm_ex esz=2
1938
1939 USDOT_zzzz_4s 01000100 10 0 ..... 011 110 ..... ..... @rda_rn_rm_ex esz=2
1940
1941 ### SVE2 floating point matrix multiply accumulate
1942 BFMMLA 01100100 01 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz=1
1943 FMMLA_s 01100100 10 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz=2
1944 FMMLA_d 01100100 11 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz=3
1945
1946 FMMLA_sb 01100100 00 1 ..... 111 000 ..... ..... @rda_rn_rm_ex esz=2
1947 FMMLA_hb 01100100 01 1 ..... 111 000 ..... ..... @rda_rn_rm_ex esz=1
1948
1949 ### SVE2 Memory Gather Load Group
1950
1951 # SVE2 64-bit gather non-temporal load (scalar plus 64-bit unscaled offsets)
1952 LDNT1_zprz 1100010 msz:2 00 rm:5 1 u:1 0 pg:3 rn:5 rd:5 \
1953 &rprr_gather_load xs=2 esz=3 scale=0 ff=0
1954
1955 # SVE2 32-bit gather non-temporal load (scalar plus 32-bit unscaled offsets)
1956 LDNT1_zprz 1000010 msz:2 00 rm:5 10 u:1 pg:3 rn:5 rd:5 \
1957 &rprr_gather_load xs=0 esz=2 scale=0 ff=0
1958
1959 ### SVE2 Memory Store Group
1960
1961 # SVE2 64-bit scatter non-temporal store (vector plus scalar)
1962 STNT1_zprz 1110010 .. 00 ..... 001 ... ..... ..... \
1963 @rprr_scatter_store xs=2 esz=3 scale=0
1964
1965 # SVE2 32-bit scatter non-temporal store (vector plus scalar)
1966 STNT1_zprz 1110010 .. 10 ..... 001 ... ..... ..... \
1967 @rprr_scatter_store xs=0 esz=2 scale=0
1968
1969 ### SVE2 Crypto Extensions
1970
1971 # SVE2 crypto unary operations
1972 AESMC 01000101 00 10000011100 0 00000 rd:5
1973 AESIMC 01000101 00 10000011100 1 00000 rd:5
1974
1975 # SVE2 crypto destructive binary operations
1976 AESE 01000101 00 10001 0 11100 0 ..... ..... @rdn_rm_e0
1977 AESD 01000101 00 10001 0 11100 1 ..... ..... @rdn_rm_e0
1978 SM4E 01000101 00 10001 1 11100 0 ..... ..... @rdn_rm_e0
1979
1980 @aes2_2 ........ .. . index:2 0........ rm:5 ..... \
1981 &rx_n n=2 rdn=%zd_ax2
1982 @aes2_4 ........ .. . index:2 1........ rm:5 ..... \
1983 &rx_n n=4 rdn=%zd_ax4
1984
1985 AESE_idx 01000101 00 1 .. .10111010 ..... ....0 @aes2_2
1986 AESE_idx 01000101 00 1 .. .10111010 ..... ...00 @aes2_4
1987
1988 AESD_idx 01000101 00 1 .. .10111011 ..... ....0 @aes2_2
1989 AESD_idx 01000101 00 1 .. .10111011 ..... ...00 @aes2_4
1990
1991 AESEMC 01000101 00 1 .. .11111010 ..... ....0 @aes2_2
1992 AESEMC 01000101 00 1 .. .11111010 ..... ...00 @aes2_4
1993
1994 AESDIMC 01000101 00 1 .. .11111011 ..... ....0 @aes2_2
1995 AESDIMC 01000101 00 1 .. .11111011 ..... ...00 @aes2_4
1996
1997 PMULL 01000101 00 1 rm:5 111110 rn:5 ....0 \
1998 &rrr_esz esz=0 rd=%zd_ax2
1999 PMLAL 01000101 00 1 rm:5 111111 rn:5 ....0 \
2000 &rrr_esz esz=0 rd=%zd_ax2
2001
2002 # SVE2 crypto constructive binary operations
2003 SM4EKEY 01000101 00 1 ..... 11110 0 ..... ..... @rd_rn_rm_e0
2004 RAX1 01000101 00 1 ..... 11110 1 ..... ..... @rd_rn_rm_e0
2005
2006 ### SVE2 floating-point convert precision odd elements
2007 FCVTXNT_ds_m 01100100 00 0010 10 101 ... ..... ..... @rd_pg_rn_e0
2008 FCVTX_ds_m 01100101 00 0010 10 101 ... ..... ..... @rd_pg_rn_e0
2009 FCVTNT_sh_m 01100100 10 0010 00 101 ... ..... ..... @rd_pg_rn_e0
2010 BFCVTNT_m 01100100 10 0010 10 101 ... ..... ..... @rd_pg_rn_e0
2011 FCVTLT_hs_m 01100100 10 0010 01 101 ... ..... ..... @rd_pg_rn_e0
2012 FCVTNT_ds_m 01100100 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
2013 FCVTLT_sd_m 01100100 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
2014
2015 FCVTXNT_ds_z 01100100 00 0000 10 101 ... ..... ..... @rd_pg_rn_e0
2016 FCVTNT_sh_z 01100100 10 0000 00 101 ... ..... ..... @rd_pg_rn_e0
2017 FCVTNT_ds_z 01100100 11 0000 10 101 ... ..... ..... @rd_pg_rn_e0
2018 BFCVTNT_z 01100100 10 0000 10 101 ... ..... ..... @rd_pg_rn_e0
2019 FCVTLT_hs_z 01100100 10 0000 01 101 ... ..... ..... @rd_pg_rn_e0
2020 FCVTLT_sd_z 01100100 11 0000 11 101 ... ..... ..... @rd_pg_rn_e0
2021
2022 ### SVE2 floating-point convert to integer
2023 FLOGB_m 01100101 00 011 esz:2 0101 pg:3 rn:5 rd:5 &rpr_esz
2024 FLOGB_z 01100100 00 011 1101 esz:2 pg:3 rn:5 rd:5 &rpr_esz
2025
2026 ### SVE2 floating-point multiply-add long (vectors)
2027 FMLALB_zzzw 01100100 10 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex esz=2
2028 FMLALT_zzzw 01100100 10 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex esz=2
2029 FMLSLB_zzzw 01100100 10 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_ex esz=2
2030 FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_ex esz=2
2031
2032 BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex esz=2
2033 BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex esz=2
2034 BFMLSLB_zzzw 01100100 11 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_ex esz=2
2035 BFMLSLT_zzzw 01100100 11 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_ex esz=2
2036
2037 FMLAL_hb 01100100 10 1 rm:5 100 idxn:1 10 rn:5 rd:5 &rxx idxm=0
2038
2039 FMLALL_sb 01100100 00 1 rm:5 10 idxn:2 10 rn:5 rd:5 &rxx idxm=0
2040
2041 ### SVE2 floating-point dot-product
2042 FDOT_zzzz 01100100 00 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex esz=2
2043 BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex esz=2
2044
2045 FDOT_sb 01100100 01 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex esz=2
2046 FDOT_hb 01100100 00 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex esz=1
2047
2048 ### SVE2 floating-point multiply-add long (indexed)
2049
2050 FMLALB_zzxw 01100100 10 1 ..... 0100.0 ..... ..... @rrxr_3a esz=2
2051 FMLALT_zzxw 01100100 10 1 ..... 0100.1 ..... ..... @rrxr_3a esz=2
2052 FMLSLB_zzxw 01100100 10 1 ..... 0110.0 ..... ..... @rrxr_3a esz=2
2053 FMLSLT_zzxw 01100100 10 1 ..... 0110.1 ..... ..... @rrxr_3a esz=2
2054
2055 BFMLALB_zzxw 01100100 11 1 ..... 0100.0 ..... ..... @rrxr_3a esz=2
2056 BFMLALT_zzxw 01100100 11 1 ..... 0100.1 ..... ..... @rrxr_3a esz=2
2057 BFMLSLB_zzxw 01100100 11 1 ..... 0110.0 ..... ..... @rrxr_3a esz=2
2058 BFMLSLT_zzxw 01100100 11 1 ..... 0110.1 ..... ..... @rrxr_3a esz=2
2059
2060 FMLAL_idx_hb 01100100 idxn:1 01 .. rm:3 0101 .. rn:5 rd:5 \
2061 &rxx idxm=%index4_19_10
2062
2063 FMLALL_idx_sb 01100100 idxn:2 1 .. rm:3 1100 .. rn:5 rd:5 \
2064 &rxx idxm=%index4_19_10
2065
2066 ### SVE2 floating-point dot-product (indexed)
2067
2068 FDOT_zzxz 01100100 00 1 ..... 010000 ..... ..... @rrxr_2 esz=2
2069 BFDOT_zzxz 01100100 01 1 ..... 010000 ..... ..... @rrxr_2 esz=2
2070
2071 FDOT_idx_sb 01100100 01 1 ..... 010001 ..... ..... @rrxr_2 esz=2
2072 FDOT_idx_hb 01100100 00 1 ..... 0100.1 ..... ..... @rrx_3a esz=1
2073
2074 ### SVE broadcast predicate element
2075
2076 &psel esz pd pn pm rv imm
2077 %psel_rv 16:2 !function=plus_12
2078 %psel_imm_b 22:2 19:2
2079 %psel_imm_h 22:2 20:1
2080 %psel_imm_s 22:2
2081 %psel_imm_d 23:1
2082 @psel ........ .. . ... .. .. pn:4 . pm:4 . pd:4 \
2083 &psel rv=%psel_rv
2084
2085 PSEL 00100101 .. 1 ..1 .. 01 .... 0 .... 0 .... \
2086 @psel esz=0 imm=%psel_imm_b
2087 PSEL 00100101 .. 1 .10 .. 01 .... 0 .... 0 .... \
2088 @psel esz=1 imm=%psel_imm_h
2089 PSEL 00100101 .. 1 100 .. 01 .... 0 .... 0 .... \
2090 @psel esz=2 imm=%psel_imm_s
2091 PSEL 00100101 .1 1 000 .. 01 .... 0 .... 0 .... \
2092 @psel esz=3 imm=%psel_imm_d
2093
2094 ### SVE clamp
2095
2096 SCLAMP 01000100 .. 0 ..... 110000 ..... ..... @rda_rn_rm
2097 UCLAMP 01000100 .. 0 ..... 110001 ..... ..... @rda_rn_rm
2098
2099 FCLAMP 01100100 .. 1 ..... 001001 ..... ..... @rda_rn_rm
2100
2101 ### SVE2p1 multi-vec contiguous load
2102
2103 &zcrr_ldst rd png rn rm esz nreg
2104 &zcri_ldst rd png rn imm esz nreg
2105 %png 10:3 !function=plus_8
2106
2107 LD1_zcrr 10100000000 rm:5 0 esz:2 ... rn:5 .... - \
2108 &zcrr_ldst %png rd=%zd_ax2 nreg=2
2109 LD1_zcrr 10100000000 rm:5 1 esz:2 ... rn:5 ... 0- \
2110 &zcrr_ldst %png rd=%zd_ax4 nreg=4
2111
2112 ST1_zcrr 10100000001 rm:5 0 esz:2 ... rn:5 .... - \
2113 &zcrr_ldst %png rd=%zd_ax2 nreg=2
2114 ST1_zcrr 10100000001 rm:5 1 esz:2 ... rn:5 ... 0- \
2115 &zcrr_ldst %png rd=%zd_ax4 nreg=4
2116
2117 LD1_zcri 101000000100 imm:s4 0 esz:2 ... rn:5 .... - \
2118 &zcri_ldst %png rd=%zd_ax2 nreg=2
2119 LD1_zcri 101000000100 imm:s4 1 esz:2 ... rn:5 ... 0- \
2120 &zcri_ldst %png rd=%zd_ax4 nreg=4
2121
2122 ST1_zcri 101000000110 imm:s4 0 esz:2 ... rn:5 .... - \
2123 &zcri_ldst %png rd=%zd_ax2 nreg=2
2124 ST1_zcri 101000000110 imm:s4 1 esz:2 ... rn:5 ... 0- \
2125 &zcri_ldst %png rd=%zd_ax4 nreg=4
2126
2127 # Note: N bit and 0 bit (for nreg4) still mashed in rd.
2128 # This is handled within gen_ldst_c().
2129 LD1_zcrr_stride 10100001000 rm:5 0 esz:2 ... rn:5 rd:5 \
2130 &zcrr_ldst %png nreg=2
2131 LD1_zcrr_stride 10100001000 rm:5 1 esz:2 ... rn:5 rd:5 \
2132 &zcrr_ldst %png nreg=4
2133
2134 ST1_zcrr_stride 10100001001 rm:5 0 esz:2 ... rn:5 rd:5 \
2135 &zcrr_ldst %png nreg=2
2136 ST1_zcrr_stride 10100001001 rm:5 1 esz:2 ... rn:5 rd:5 \
2137 &zcrr_ldst %png nreg=4
2138
2139 LD1_zcri_stride 101000010100 imm:s4 0 esz:2 ... rn:5 rd:5 \
2140 &zcri_ldst %png nreg=2
2141 LD1_zcri_stride 101000010100 imm:s4 1 esz:2 ... rn:5 rd:5 \
2142 &zcri_ldst %png nreg=4
2143
2144 ST1_zcri_stride 101000010110 imm:s4 0 esz:2 ... rn:5 rd:5 \
2145 &zcri_ldst %png nreg=2
2146 ST1_zcri_stride 101000010110 imm:s4 1 esz:2 ... rn:5 rd:5 \
2147 &zcri_ldst %png nreg=4