]> git.proxmox.com Git - mirror_qemu.git/blame - target/arm/sve.decode
target/arm: Implement bfloat widening fma (indexed)
[mirror_qemu.git] / target / arm / sve.decode
CommitLineData
38388f7e
RH
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
50f57e09 8# version 2.1 of the License, or (at your option) any later version.
38388f7e
RH
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
d1822297
RH
22###########################################################################
23# Named fields. These are primarily for disjoint fields.
24
f25a2361 25%imm4_16_p1 16:4 !function=plus1
ccd841c3 26%imm6_22_5 22:1 5:5
30562ab7 27%imm7_22_16 22:2 16:5
b94f8f60 28%imm8_16_10 16:5 10:3
d1822297 29%imm9_16_10 16:s6 10:3
1a039c7e 30%size_23 23:2
68459864 31%dtype_23_13 23:2 13:2
ca40a6e6 32%index3_22_19 22:1 19:2
c5c455d7
RH
33%index3_19_11 19:2 11:1
34%index2_20_11 20:1 11:1
d1822297 35
ccd841c3
RH
36# A combination of tsz:imm3 -- extract esize.
37%tszimm_esz 22:2 5:5 !function=tszimm_esz
38# A combination of tsz:imm3 -- extract (2 * esize) - (tsz:imm3)
39%tszimm_shr 22:2 5:5 !function=tszimm_shr
40# A combination of tsz:imm3 -- extract (tsz:imm3) - esize
41%tszimm_shl 22:2 5:5 !function=tszimm_shl
42
d9d78dcc
RH
43# Similarly for the tszh/tszl pair at 22/16 for zzi
44%tszimm16_esz 22:2 16:5 !function=tszimm_esz
45%tszimm16_shr 22:2 16:5 !function=tszimm_shr
46%tszimm16_shl 22:2 16:5 !function=tszimm_shl
47
f25a2361
RH
48# Signed 8-bit immediate, optionally shifted left by 8.
49%sh8_i8s 5:9 !function=expand_imm_sh8s
6e6a157d
RH
50# Unsigned 8-bit immediate, optionally shifted left by 8.
51%sh8_i8u 5:9 !function=expand_imm_sh8u
f25a2361 52
c4e7c493
RH
53# Unsigned load of msz into esz=2, represented as a dtype.
54%msz_dtype 23:2 !function=msz_dtype
55
f97cfd59
RH
56# Either a copy of rd (at bit 0), or a different source
57# as propagated via the MOVPRFX instruction.
58%reg_movprfx 0:5
59
38388f7e
RH
60###########################################################################
61# Named attribute sets. These are used to make nice(er) names
62# when creating helpers common to those for the individual
63# instruction patterns.
64
028e2a7b 65&rr_esz rd rn esz
d1822297 66&rri rd rn imm
e1fa1164 67&rr_dbm rd rn dbm
4b242d9c 68&rrri rd rn rm imm
d9d78dcc 69&rri_esz rd rn imm esz
e6eba6e5 70&rrri_esz rd rn rm imm esz
38388f7e 71&rrr_esz rd rn rm esz
1c737d9c 72&rrx_esz rd rn rm index esz
047cec97 73&rpr_esz rd pg rn esz
35da316f 74&rpr_s rd pg rn s
516e246a 75&rprr_s rd pg rn rm s
f97cfd59 76&rprr_esz rd pg rn rm esz
38650638 77&rrrr_esz rd ra rn rm esz
0a82d963 78&rrxr_esz rd rn rm ra index esz
96a36e4a 79&rprrr_esz rd pg rn rm ra esz
ccd841c3 80&rpri_esz rd pg rn imm esz
24e82e68
RH
81&ptrue rd esz pat s
82&incdec_cnt rd pat esz imm d u
83&incdec2_cnt rd rn pat esz imm d u
9ee3a611
RH
84&incdec_pred rd pg esz d u
85&incdec2_pred rd rn pg esz d u
c4e7c493
RH
86&rprr_load rd pg rn rm dtype nreg
87&rpri_load rd pg rn imm dtype nreg
1a039c7e
RH
88&rprr_store rd pg rn rm msz esz nreg
89&rpri_store rd pg rn imm msz esz nreg
673e9fa6
RH
90&rprr_gather_load rd pg rn rm esz msz u ff xs scale
91&rpri_gather_load rd pg rn imm esz msz u ff
f6dbf62a 92&rprr_scatter_store rd pg rn rm esz msz xs scale
408ecde9 93&rpri_scatter_store rd pg rn imm esz msz
38388f7e
RH
94
95###########################################################################
96# Named instruction formats. These are generally used to
97# reduce the amount of duplication between instruction patterns.
98
028e2a7b
RH
99# Two operand with unused vector element size
100@pd_pn_e0 ........ ........ ....... rn:4 . rd:4 &rr_esz esz=0
101
102# Two operand
103@pd_pn ........ esz:2 .. .... ....... rn:4 . rd:4 &rr_esz
0762cd42 104@rd_rn ........ esz:2 ...... ...... rn:5 rd:5 &rr_esz
028e2a7b 105
35da316f
RH
106# Two operand with governing predicate, flags setting
107@pd_pg_pn_s ........ . s:1 ...... .. pg:4 . rn:4 . rd:4 &rpr_s
407e6ce7 108@pd_pg_pn_s0 ........ . . ...... .. pg:4 . rn:4 . rd:4 &rpr_s s=0
35da316f 109
38388f7e
RH
110# Three operand with unused vector element size
111@rd_rn_rm_e0 ........ ... rm:5 ... ... rn:5 rd:5 &rrr_esz esz=0
112
516e246a
RH
113# Three predicate operand, with governing predicate, flag setting
114@pd_pg_pn_pm_s ........ . s:1 .. rm:4 .. pg:4 . rn:4 . rd:4 &rprr_s
115
fea98f9c
RH
116# Three operand, vector element size
117@rd_rn_rm ........ esz:2 . rm:5 ... ... rn:5 rd:5 &rrr_esz
d731d8cb 118@pd_pn_pm ........ esz:2 .. rm:4 ....... rn:4 . rd:4 &rrr_esz
30562ab7
RH
119@rdn_rm ........ esz:2 ...... ...... rm:5 rd:5 \
120 &rrr_esz rn=%reg_movprfx
3cc7a88e
RH
121@rdn_rm_e0 ........ .. ...... ...... rm:5 rd:5 \
122 &rrr_esz rn=%reg_movprfx esz=0
6e6a157d
RH
123@rdn_sh_i8u ........ esz:2 ...... ...... ..... rd:5 \
124 &rri_esz rn=%reg_movprfx imm=%sh8_i8u
125@rdn_i8u ........ esz:2 ...... ... imm:8 rd:5 \
126 &rri_esz rn=%reg_movprfx
127@rdn_i8s ........ esz:2 ...... ... imm:s8 rd:5 \
128 &rri_esz rn=%reg_movprfx
fea98f9c 129
38650638
RH
130# Four operand, vector element size
131@rda_rn_rm ........ esz:2 . rm:5 ... ... rn:5 rd:5 \
132 &rrrr_esz ra=%reg_movprfx
133
911cdc6d 134# Four operand with unused vector element size
50d102bd
SL
135@rda_rn_rm_e0 ........ ... rm:5 ... ... rn:5 rd:5 \
136 &rrrr_esz esz=0 ra=%reg_movprfx
911cdc6d
RH
137@rdn_ra_rm_e0 ........ ... rm:5 ... ... ra:5 rd:5 \
138 &rrrr_esz esz=0 rn=%reg_movprfx
139
4b242d9c
RH
140# Three operand with "memory" size, aka immediate left shift
141@rd_rn_msz_rm ........ ... rm:5 .... imm:2 rn:5 rd:5 &rrri
142
f97cfd59
RH
143# Two register operand, with governing predicate, vector element size
144@rdn_pg_rm ........ esz:2 ... ... ... pg:3 rm:5 rd:5 \
145 &rprr_esz rn=%reg_movprfx
146@rdm_pg_rn ........ esz:2 ... ... ... pg:3 rn:5 rd:5 \
147 &rprr_esz rm=%reg_movprfx
d3fe4a29 148@rd_pg4_rn_rm ........ esz:2 . rm:5 .. pg:4 rn:5 rd:5 &rprr_esz
757f9cff 149@pd_pg_rn_rm ........ esz:2 . rm:5 ... pg:3 rn:5 . rd:4 &rprr_esz
f97cfd59 150
96a36e4a
RH
151# Three register operand, with governing predicate, vector element size
152@rda_pg_rn_rm ........ esz:2 . rm:5 ... pg:3 rn:5 rd:5 \
153 &rprrr_esz ra=%reg_movprfx
154@rdn_pg_ra_rm ........ esz:2 . rm:5 ... pg:3 ra:5 rd:5 \
155 &rprrr_esz rn=%reg_movprfx
6ceabaad
RH
156@rdn_pg_rm_ra ........ esz:2 . ra:5 ... pg:3 rm:5 rd:5 \
157 &rprrr_esz rn=%reg_movprfx
7d47ac94 158@rd_pg_rn_rm ........ esz:2 . rm:5 ... pg:3 rn:5 rd:5 &rprr_esz
96a36e4a 159
047cec97
RH
160# One register operand, with governing predicate, vector element size
161@rd_pg_rn ........ esz:2 ... ... ... pg:3 rn:5 rd:5 &rpr_esz
9ee3a611 162@rd_pg4_pn ........ esz:2 ... ... .. pg:4 . rn:4 rd:5 &rpr_esz
4d2e2a03 163@pd_pg_rn ........ esz:2 ... ... ... pg:3 rn:5 . rd:4 &rpr_esz
047cec97 164
8092c6a3
RH
165# One register operand, with governing predicate, no vector element size
166@rd_pg_rn_e0 ........ .. ... ... ... pg:3 rn:5 rd:5 &rpr_esz esz=0
167
96f922cc
RH
168# Two register operands with a 6-bit signed immediate.
169@rd_rn_i6 ........ ... rn:5 ..... imm:s6 rd:5 &rri
170
ccd841c3 171# Two register operand, one immediate operand, with predicate,
830d1a5a
RH
172# element size encoded as TSZHL.
173@rdn_pg_tszimm_shl ........ .. ... ... ... pg:3 ..... rd:5 \
174 &rpri_esz rn=%reg_movprfx esz=%tszimm_esz imm=%tszimm_shl
175@rdn_pg_tszimm_shr ........ .. ... ... ... pg:3 ..... rd:5 \
176 &rpri_esz rn=%reg_movprfx esz=%tszimm_esz imm=%tszimm_shr
ccd841c3 177
d9d78dcc 178# Similarly without predicate.
830d1a5a
RH
179@rd_rn_tszimm_shl ........ .. ... ... ...... rn:5 rd:5 \
180 &rri_esz esz=%tszimm16_esz imm=%tszimm16_shl
181@rd_rn_tszimm_shr ........ .. ... ... ...... rn:5 rd:5 \
182 &rri_esz esz=%tszimm16_esz imm=%tszimm16_shr
d9d78dcc 183
f25a2361
RH
184# Two register operand, one immediate operand, with 4-bit predicate.
185# User must fill in imm.
186@rdn_pg4 ........ esz:2 .. pg:4 ... ........ rd:5 \
187 &rpri_esz rn=%reg_movprfx
188
cc48affe
RH
189# Two register operand, one one-bit floating-point operand.
190@rdn_i1 ........ esz:2 ......... pg:3 .... imm:1 rd:5 \
191 &rpri_esz rn=%reg_movprfx
192
e1fa1164
RH
193# Two register operand, one encoded bitmask.
194@rdn_dbm ........ .. .... dbm:13 rd:5 \
195 &rr_dbm rn=%reg_movprfx
196
38cadeba
RH
197# Predicate output, vector and immediate input,
198# controlling predicate, element size.
199@pd_pg_rn_i7 ........ esz:2 . imm:7 . pg:3 rn:5 . rd:4 &rpri_esz
200@pd_pg_rn_i5 ........ esz:2 . imm:s5 ... pg:3 rn:5 . rd:4 &rpri_esz
201
d1822297
RH
202# Basic Load/Store with 9-bit immediate offset
203@pd_rn_i9 ........ ........ ...... rn:5 . rd:4 \
204 &rri imm=%imm9_16_10
205@rd_rn_i9 ........ ........ ...... rn:5 rd:5 \
206 &rri imm=%imm9_16_10
207
24e82e68
RH
208# One register, pattern, and uint4+1.
209# User must fill in U and D.
210@incdec_cnt ........ esz:2 .. .... ...... pat:5 rd:5 \
211 &incdec_cnt imm=%imm4_16_p1
212@incdec2_cnt ........ esz:2 .. .... ...... pat:5 rd:5 \
213 &incdec2_cnt imm=%imm4_16_p1 rn=%reg_movprfx
214
9ee3a611
RH
215# One register, predicate.
216# User must fill in U and D.
217@incdec_pred ........ esz:2 .... .. ..... .. pg:4 rd:5 &incdec_pred
218@incdec2_pred ........ esz:2 .... .. ..... .. pg:4 rd:5 \
219 &incdec2_pred rn=%reg_movprfx
220
c4e7c493
RH
221# Loads; user must fill in NREG.
222@rprr_load_dt ....... dtype:4 rm:5 ... pg:3 rn:5 rd:5 &rprr_load
223@rpri_load_dt ....... dtype:4 . imm:s4 ... pg:3 rn:5 rd:5 &rpri_load
224
225@rprr_load_msz ....... .... rm:5 ... pg:3 rn:5 rd:5 \
226 &rprr_load dtype=%msz_dtype
227@rpri_load_msz ....... .... . imm:s4 ... pg:3 rn:5 rd:5 \
228 &rpri_load dtype=%msz_dtype
229
673e9fa6
RH
230# Gather Loads.
231@rprr_g_load_u ....... .. . . rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
232 &rprr_gather_load xs=2
233@rprr_g_load_xs_u ....... .. xs:1 . rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
234 &rprr_gather_load
235@rprr_g_load_xs_u_sc ....... .. xs:1 scale:1 rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
236 &rprr_gather_load
237@rprr_g_load_xs_sc ....... .. xs:1 scale:1 rm:5 . . ff:1 pg:3 rn:5 rd:5 \
238 &rprr_gather_load
239@rprr_g_load_u_sc ....... .. . scale:1 rm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
240 &rprr_gather_load xs=2
241@rprr_g_load_sc ....... .. . scale:1 rm:5 . . ff:1 pg:3 rn:5 rd:5 \
242 &rprr_gather_load xs=2
243@rpri_g_load ....... msz:2 .. imm:5 . u:1 ff:1 pg:3 rn:5 rd:5 \
244 &rpri_gather_load
245
1a039c7e
RH
246# Stores; user must fill in ESZ, MSZ, NREG as needed.
247@rprr_store ....... .. .. rm:5 ... pg:3 rn:5 rd:5 &rprr_store
248@rpri_store_msz ....... msz:2 .. . imm:s4 ... pg:3 rn:5 rd:5 &rpri_store
249@rprr_store_esz_n0 ....... .. esz:2 rm:5 ... pg:3 rn:5 rd:5 \
250 &rprr_store nreg=0
f6dbf62a
RH
251@rprr_scatter_store ....... msz:2 .. rm:5 ... pg:3 rn:5 rd:5 \
252 &rprr_scatter_store
408ecde9
RH
253@rpri_scatter_store ....... msz:2 .. imm:5 ... pg:3 rn:5 rd:5 \
254 &rpri_scatter_store
1a039c7e 255
1c737d9c
RH
256# Two registers and a scalar by N-bit index
257@rrx_3 ........ .. . .. rm:3 ...... rn:5 rd:5 \
258 &rrx_esz index=%index3_22_19
259@rrx_2 ........ .. . index:2 rm:3 ...... rn:5 rd:5 &rrx_esz
260@rrx_1 ........ .. . index:1 rm:4 ...... rn:5 rd:5 &rrx_esz
261
b95f5eeb
RH
262# Two registers and a scalar by N-bit index, alternate
263@rrx_3a ........ .. . .. rm:3 ...... rn:5 rd:5 \
264 &rrx_esz index=%index3_19_11
265@rrx_2a ........ .. . . rm:4 ...... rn:5 rd:5 \
266 &rrx_esz index=%index2_20_11
267
0a82d963
RH
268# Three registers and a scalar by N-bit index
269@rrxr_3 ........ .. . .. rm:3 ...... rn:5 rd:5 \
270 &rrxr_esz ra=%reg_movprfx index=%index3_22_19
271@rrxr_2 ........ .. . index:2 rm:3 ...... rn:5 rd:5 \
272 &rrxr_esz ra=%reg_movprfx
273@rrxr_1 ........ .. . index:1 rm:4 ...... rn:5 rd:5 \
274 &rrxr_esz ra=%reg_movprfx
275
c5c455d7
RH
276# Three registers and a scalar by N-bit index, alternate
277@rrxr_3a ........ .. ... rm:3 ...... rn:5 rd:5 \
278 &rrxr_esz ra=%reg_movprfx index=%index3_19_11
279@rrxr_2a ........ .. .. rm:4 ...... rn:5 rd:5 \
280 &rrxr_esz ra=%reg_movprfx index=%index2_20_11
281
38388f7e
RH
282###########################################################################
283# Instruction patterns. Grouped according to the SVE encodingindex.xhtml.
284
f97cfd59
RH
285### SVE Integer Arithmetic - Binary Predicated Group
286
287# SVE bitwise logical vector operations (predicated)
288ORR_zpzz 00000100 .. 011 000 000 ... ..... ..... @rdn_pg_rm
289EOR_zpzz 00000100 .. 011 001 000 ... ..... ..... @rdn_pg_rm
290AND_zpzz 00000100 .. 011 010 000 ... ..... ..... @rdn_pg_rm
291BIC_zpzz 00000100 .. 011 011 000 ... ..... ..... @rdn_pg_rm
292
293# SVE integer add/subtract vectors (predicated)
294ADD_zpzz 00000100 .. 000 000 000 ... ..... ..... @rdn_pg_rm
295SUB_zpzz 00000100 .. 000 001 000 ... ..... ..... @rdn_pg_rm
296SUB_zpzz 00000100 .. 000 011 000 ... ..... ..... @rdm_pg_rn # SUBR
297
298# SVE integer min/max/difference (predicated)
299SMAX_zpzz 00000100 .. 001 000 000 ... ..... ..... @rdn_pg_rm
300UMAX_zpzz 00000100 .. 001 001 000 ... ..... ..... @rdn_pg_rm
301SMIN_zpzz 00000100 .. 001 010 000 ... ..... ..... @rdn_pg_rm
302UMIN_zpzz 00000100 .. 001 011 000 ... ..... ..... @rdn_pg_rm
303SABD_zpzz 00000100 .. 001 100 000 ... ..... ..... @rdn_pg_rm
304UABD_zpzz 00000100 .. 001 101 000 ... ..... ..... @rdn_pg_rm
305
306# SVE integer multiply/divide (predicated)
307MUL_zpzz 00000100 .. 010 000 000 ... ..... ..... @rdn_pg_rm
308SMULH_zpzz 00000100 .. 010 010 000 ... ..... ..... @rdn_pg_rm
309UMULH_zpzz 00000100 .. 010 011 000 ... ..... ..... @rdn_pg_rm
310# Note that divide requires size >= 2; below 2 is unallocated.
311SDIV_zpzz 00000100 .. 010 100 000 ... ..... ..... @rdn_pg_rm
312UDIV_zpzz 00000100 .. 010 101 000 ... ..... ..... @rdn_pg_rm
313SDIV_zpzz 00000100 .. 010 110 000 ... ..... ..... @rdm_pg_rn # SDIVR
314UDIV_zpzz 00000100 .. 010 111 000 ... ..... ..... @rdm_pg_rn # UDIVR
315
047cec97
RH
316### SVE Integer Reduction Group
317
318# SVE bitwise logical reduction (predicated)
319ORV 00000100 .. 011 000 001 ... ..... ..... @rd_pg_rn
320EORV 00000100 .. 011 001 001 ... ..... ..... @rd_pg_rn
321ANDV 00000100 .. 011 010 001 ... ..... ..... @rd_pg_rn
322
a2103582
RH
323# SVE constructive prefix (predicated)
324MOVPRFX_z 00000100 .. 010 000 001 ... ..... ..... @rd_pg_rn
325MOVPRFX_m 00000100 .. 010 001 001 ... ..... ..... @rd_pg_rn
326
047cec97
RH
327# SVE integer add reduction (predicated)
328# Note that saddv requires size != 3.
329UADDV 00000100 .. 000 001 001 ... ..... ..... @rd_pg_rn
330SADDV 00000100 .. 000 000 001 ... ..... ..... @rd_pg_rn
331
332# SVE integer min/max reduction (predicated)
333SMAXV 00000100 .. 001 000 001 ... ..... ..... @rd_pg_rn
334UMAXV 00000100 .. 001 001 001 ... ..... ..... @rd_pg_rn
335SMINV 00000100 .. 001 010 001 ... ..... ..... @rd_pg_rn
336UMINV 00000100 .. 001 011 001 ... ..... ..... @rd_pg_rn
337
ccd841c3
RH
338### SVE Shift by Immediate - Predicated Group
339
340# SVE bitwise shift by immediate (predicated)
830d1a5a
RH
341ASR_zpzi 00000100 .. 000 000 100 ... .. ... ..... @rdn_pg_tszimm_shr
342LSR_zpzi 00000100 .. 000 001 100 ... .. ... ..... @rdn_pg_tszimm_shr
343LSL_zpzi 00000100 .. 000 011 100 ... .. ... ..... @rdn_pg_tszimm_shl
344ASRD 00000100 .. 000 100 100 ... .. ... ..... @rdn_pg_tszimm_shr
a5421b54
SL
345SQSHL_zpzi 00000100 .. 000 110 100 ... .. ... ..... @rdn_pg_tszimm_shl
346UQSHL_zpzi 00000100 .. 000 111 100 ... .. ... ..... @rdn_pg_tszimm_shl
347SRSHR 00000100 .. 001 100 100 ... .. ... ..... @rdn_pg_tszimm_shr
348URSHR 00000100 .. 001 101 100 ... .. ... ..... @rdn_pg_tszimm_shr
349SQSHLU 00000100 .. 001 111 100 ... .. ... ..... @rdn_pg_tszimm_shl
ccd841c3 350
27721dbb
RH
351# SVE bitwise shift by vector (predicated)
352ASR_zpzz 00000100 .. 010 000 100 ... ..... ..... @rdn_pg_rm
353LSR_zpzz 00000100 .. 010 001 100 ... ..... ..... @rdn_pg_rm
354LSL_zpzz 00000100 .. 010 011 100 ... ..... ..... @rdn_pg_rm
355ASR_zpzz 00000100 .. 010 100 100 ... ..... ..... @rdm_pg_rn # ASRR
356LSR_zpzz 00000100 .. 010 101 100 ... ..... ..... @rdm_pg_rn # LSRR
357LSL_zpzz 00000100 .. 010 111 100 ... ..... ..... @rdm_pg_rn # LSLR
358
fe7f8dfb
RH
359# SVE bitwise shift by wide elements (predicated)
360# Note these require size != 3.
361ASR_zpzw 00000100 .. 011 000 100 ... ..... ..... @rdn_pg_rm
362LSR_zpzw 00000100 .. 011 001 100 ... ..... ..... @rdn_pg_rm
363LSL_zpzw 00000100 .. 011 011 100 ... ..... ..... @rdn_pg_rm
364
afac6d04
RH
365### SVE Integer Arithmetic - Unary Predicated Group
366
367# SVE unary bit operations (predicated)
368# Note esz != 0 for FABS and FNEG.
369CLS 00000100 .. 011 000 101 ... ..... ..... @rd_pg_rn
370CLZ 00000100 .. 011 001 101 ... ..... ..... @rd_pg_rn
371CNT_zpz 00000100 .. 011 010 101 ... ..... ..... @rd_pg_rn
372CNOT 00000100 .. 011 011 101 ... ..... ..... @rd_pg_rn
373NOT_zpz 00000100 .. 011 110 101 ... ..... ..... @rd_pg_rn
374FABS 00000100 .. 011 100 101 ... ..... ..... @rd_pg_rn
375FNEG 00000100 .. 011 101 101 ... ..... ..... @rd_pg_rn
376
377# SVE integer unary operations (predicated)
378# Note esz > original size for extensions.
379ABS 00000100 .. 010 110 101 ... ..... ..... @rd_pg_rn
380NEG 00000100 .. 010 111 101 ... ..... ..... @rd_pg_rn
381SXTB 00000100 .. 010 000 101 ... ..... ..... @rd_pg_rn
382UXTB 00000100 .. 010 001 101 ... ..... ..... @rd_pg_rn
383SXTH 00000100 .. 010 010 101 ... ..... ..... @rd_pg_rn
384UXTH 00000100 .. 010 011 101 ... ..... ..... @rd_pg_rn
385SXTW 00000100 .. 010 100 101 ... ..... ..... @rd_pg_rn
386UXTW 00000100 .. 010 101 101 ... ..... ..... @rd_pg_rn
387
abfdefd5
RH
388### SVE Floating Point Compare - Vectors Group
389
390# SVE floating-point compare vectors
391FCMGE_ppzz 01100101 .. 0 ..... 010 ... ..... 0 .... @pd_pg_rn_rm
392FCMGT_ppzz 01100101 .. 0 ..... 010 ... ..... 1 .... @pd_pg_rn_rm
393FCMEQ_ppzz 01100101 .. 0 ..... 011 ... ..... 0 .... @pd_pg_rn_rm
394FCMNE_ppzz 01100101 .. 0 ..... 011 ... ..... 1 .... @pd_pg_rn_rm
395FCMUO_ppzz 01100101 .. 0 ..... 110 ... ..... 0 .... @pd_pg_rn_rm
396FACGE_ppzz 01100101 .. 0 ..... 110 ... ..... 1 .... @pd_pg_rn_rm
397FACGT_ppzz 01100101 .. 0 ..... 111 ... ..... 1 .... @pd_pg_rn_rm
398
96a36e4a
RH
399### SVE Integer Multiply-Add Group
400
401# SVE integer multiply-add writing addend (predicated)
402MLA 00000100 .. 0 ..... 010 ... ..... ..... @rda_pg_rn_rm
403MLS 00000100 .. 0 ..... 011 ... ..... ..... @rda_pg_rn_rm
404
405# SVE integer multiply-add writing multiplicand (predicated)
406MLA 00000100 .. 0 ..... 110 ... ..... ..... @rdn_pg_ra_rm # MAD
407MLS 00000100 .. 0 ..... 111 ... ..... ..... @rdn_pg_ra_rm # MSB
408
fea98f9c
RH
409### SVE Integer Arithmetic - Unpredicated Group
410
411# SVE integer add/subtract vectors (unpredicated)
412ADD_zzz 00000100 .. 1 ..... 000 000 ..... ..... @rd_rn_rm
413SUB_zzz 00000100 .. 1 ..... 000 001 ..... ..... @rd_rn_rm
414SQADD_zzz 00000100 .. 1 ..... 000 100 ..... ..... @rd_rn_rm
415UQADD_zzz 00000100 .. 1 ..... 000 101 ..... ..... @rd_rn_rm
416SQSUB_zzz 00000100 .. 1 ..... 000 110 ..... ..... @rd_rn_rm
417UQSUB_zzz 00000100 .. 1 ..... 000 111 ..... ..... @rd_rn_rm
418
38388f7e
RH
419### SVE Logical - Unpredicated Group
420
421# SVE bitwise logical operations (unpredicated)
422AND_zzz 00000100 00 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
423ORR_zzz 00000100 01 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
424EOR_zzz 00000100 10 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
425BIC_zzz 00000100 11 1 ..... 001 100 ..... ..... @rd_rn_rm_e0
d1822297 426
e6eba6e5
RH
427XAR 00000100 .. 1 ..... 001 101 rm:5 rd:5 &rrri_esz \
428 rn=%reg_movprfx esz=%tszimm16_esz imm=%tszimm16_shr
429
911cdc6d
RH
430# SVE2 bitwise ternary operations
431EOR3 00000100 00 1 ..... 001 110 ..... ..... @rdn_ra_rm_e0
432BSL 00000100 00 1 ..... 001 111 ..... ..... @rdn_ra_rm_e0
433BCAX 00000100 01 1 ..... 001 110 ..... ..... @rdn_ra_rm_e0
434BSL1N 00000100 01 1 ..... 001 111 ..... ..... @rdn_ra_rm_e0
435BSL2N 00000100 10 1 ..... 001 111 ..... ..... @rdn_ra_rm_e0
436NBSL 00000100 11 1 ..... 001 111 ..... ..... @rdn_ra_rm_e0
437
9a56c9c3
RH
438### SVE Index Generation Group
439
440# SVE index generation (immediate start, immediate increment)
441INDEX_ii 00000100 esz:2 1 imm2:s5 010000 imm1:s5 rd:5
442
443# SVE index generation (immediate start, register increment)
444INDEX_ir 00000100 esz:2 1 rm:5 010010 imm:s5 rd:5
445
446# SVE index generation (register start, immediate increment)
447INDEX_ri 00000100 esz:2 1 imm:s5 010001 rn:5 rd:5
448
449# SVE index generation (register start, register increment)
450INDEX_rr 00000100 .. 1 ..... 010011 ..... ..... @rd_rn_rm
451
96f922cc
RH
452### SVE Stack Allocation Group
453
454# SVE stack frame adjustment
455ADDVL 00000100 001 ..... 01010 ...... ..... @rd_rn_i6
456ADDPL 00000100 011 ..... 01010 ...... ..... @rd_rn_i6
457
458# SVE stack frame size
459RDVL 00000100 101 11111 01010 imm:s6 rd:5
460
d9d78dcc
RH
461### SVE Bitwise Shift - Unpredicated Group
462
463# SVE bitwise shift by immediate (unpredicated)
830d1a5a
RH
464ASR_zzi 00000100 .. 1 ..... 1001 00 ..... ..... @rd_rn_tszimm_shr
465LSR_zzi 00000100 .. 1 ..... 1001 01 ..... ..... @rd_rn_tszimm_shr
466LSL_zzi 00000100 .. 1 ..... 1001 11 ..... ..... @rd_rn_tszimm_shl
d9d78dcc
RH
467
468# SVE bitwise shift by wide elements (unpredicated)
469# Note esz != 3
470ASR_zzw 00000100 .. 1 ..... 1000 00 ..... ..... @rd_rn_rm
471LSR_zzw 00000100 .. 1 ..... 1000 01 ..... ..... @rd_rn_rm
472LSL_zzw 00000100 .. 1 ..... 1000 11 ..... ..... @rd_rn_rm
473
4b242d9c
RH
474### SVE Compute Vector Address Group
475
476# SVE vector address generation
477ADR_s32 00000100 00 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
478ADR_u32 00000100 01 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
479ADR_p32 00000100 10 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
480ADR_p64 00000100 11 1 ..... 1010 .. ..... ..... @rd_rn_msz_rm
481
0762cd42
RH
482### SVE Integer Misc - Unpredicated Group
483
a2103582
RH
484# SVE constructive prefix (unpredicated)
485MOVPRFX 00000100 00 1 00000 101111 rn:5 rd:5
486
0762cd42
RH
487# SVE floating-point exponential accelerator
488# Note esz != 0
489FEXPA 00000100 .. 1 00000 101110 ..... ..... @rd_rn
490
a1f233f2
RH
491# SVE floating-point trig select coefficient
492# Note esz != 0
493FTSSEL 00000100 .. 1 ..... 101100 ..... ..... @rd_rn_rm
494
24e82e68
RH
495### SVE Element Count Group
496
497# SVE element count
498CNT_r 00000100 .. 10 .... 1110 0 0 ..... ..... @incdec_cnt d=0 u=1
499
500# SVE inc/dec register by element count
501INCDEC_r 00000100 .. 11 .... 1110 0 d:1 ..... ..... @incdec_cnt u=1
502
503# SVE saturating inc/dec register by element count
504SINCDEC_r_32 00000100 .. 10 .... 1111 d:1 u:1 ..... ..... @incdec_cnt
505SINCDEC_r_64 00000100 .. 11 .... 1111 d:1 u:1 ..... ..... @incdec_cnt
506
507# SVE inc/dec vector by element count
508# Note this requires esz != 0.
509INCDEC_v 00000100 .. 1 1 .... 1100 0 d:1 ..... ..... @incdec2_cnt u=1
510
511# SVE saturating inc/dec vector by element count
512# Note these require esz != 0.
513SINCDEC_v 00000100 .. 1 0 .... 1100 d:1 u:1 ..... ..... @incdec2_cnt
516e246a 514
e1fa1164
RH
515### SVE Bitwise Immediate Group
516
517# SVE bitwise logical with immediate (unpredicated)
518ORR_zzi 00000101 00 0000 ............. ..... @rdn_dbm
519EOR_zzi 00000101 01 0000 ............. ..... @rdn_dbm
520AND_zzi 00000101 10 0000 ............. ..... @rdn_dbm
521
522# SVE broadcast bitmask immediate
523DUPM 00000101 11 0000 dbm:13 rd:5
524
f25a2361
RH
525### SVE Integer Wide Immediate - Predicated Group
526
527# SVE copy floating-point immediate (predicated)
528FCPY 00000101 .. 01 .... 110 imm:8 ..... @rdn_pg4
529
530# SVE copy integer immediate (predicated)
531CPY_m_i 00000101 .. 01 .... 01 . ........ ..... @rdn_pg4 imm=%sh8_i8s
532CPY_z_i 00000101 .. 01 .... 00 . ........ ..... @rdn_pg4 imm=%sh8_i8s
533
b94f8f60
RH
534### SVE Permute - Extract Group
535
75114792 536# SVE extract vector (destructive)
b94f8f60
RH
537EXT 00000101 001 ..... 000 ... rm:5 rd:5 \
538 &rrri rn=%reg_movprfx imm=%imm8_16_10
539
75114792
SL
540# SVE2 extract vector (constructive)
541EXT_sve2 00000101 011 ..... 000 ... rn:5 rd:5 \
542 &rri imm=%imm8_16_10
543
30562ab7
RH
544### SVE Permute - Unpredicated Group
545
546# SVE broadcast general register
547DUP_s 00000101 .. 1 00000 001110 ..... ..... @rd_rn
548
549# SVE broadcast indexed element
550DUP_x 00000101 .. 1 ..... 001000 rn:5 rd:5 \
551 &rri imm=%imm7_22_16
552
553# SVE insert SIMD&FP scalar register
554INSR_f 00000101 .. 1 10100 001110 ..... ..... @rdn_rm
555
556# SVE insert general register
557INSR_r 00000101 .. 1 00100 001110 ..... ..... @rdn_rm
558
559# SVE reverse vector elements
560REV_v 00000101 .. 1 11000 001110 ..... ..... @rd_rn
561
562# SVE vector table lookup
563TBL 00000101 .. 1 ..... 001100 ..... ..... @rd_rn_rm
564
565# SVE unpack vector elements
566UNPK 00000101 esz:2 1100 u:1 h:1 001110 rn:5 rd:5
567
80a712a2
SL
568# SVE2 Table Lookup (three sources)
569
570TBL_sve2 00000101 .. 1 ..... 001010 ..... ..... @rd_rn_rm
571TBX 00000101 .. 1 ..... 001011 ..... ..... @rd_rn_rm
572
d731d8cb
RH
573### SVE Permute - Predicates Group
574
575# SVE permute predicate elements
576ZIP1_p 00000101 .. 10 .... 010 000 0 .... 0 .... @pd_pn_pm
577ZIP2_p 00000101 .. 10 .... 010 001 0 .... 0 .... @pd_pn_pm
578UZP1_p 00000101 .. 10 .... 010 010 0 .... 0 .... @pd_pn_pm
579UZP2_p 00000101 .. 10 .... 010 011 0 .... 0 .... @pd_pn_pm
580TRN1_p 00000101 .. 10 .... 010 100 0 .... 0 .... @pd_pn_pm
581TRN2_p 00000101 .. 10 .... 010 101 0 .... 0 .... @pd_pn_pm
582
583# SVE reverse predicate elements
584REV_p 00000101 .. 11 0100 010 000 0 .... 0 .... @pd_pn
585
586# SVE unpack predicate elements
587PUNPKLO 00000101 00 11 0000 010 000 0 .... 0 .... @pd_pn_e0
588PUNPKHI 00000101 00 11 0001 010 000 0 .... 0 .... @pd_pn_e0
589
234b48e9
RH
590### SVE Permute - Interleaving Group
591
592# SVE permute vector elements
593ZIP1_z 00000101 .. 1 ..... 011 000 ..... ..... @rd_rn_rm
594ZIP2_z 00000101 .. 1 ..... 011 001 ..... ..... @rd_rn_rm
595UZP1_z 00000101 .. 1 ..... 011 010 ..... ..... @rd_rn_rm
596UZP2_z 00000101 .. 1 ..... 011 011 ..... ..... @rd_rn_rm
597TRN1_z 00000101 .. 1 ..... 011 100 ..... ..... @rd_rn_rm
598TRN2_z 00000101 .. 1 ..... 011 101 ..... ..... @rd_rn_rm
599
74b64b25
RH
600# SVE2 permute vector segments
601ZIP1_q 00000101 10 1 ..... 000 000 ..... ..... @rd_rn_rm_e0
602ZIP2_q 00000101 10 1 ..... 000 001 ..... ..... @rd_rn_rm_e0
603UZP1_q 00000101 10 1 ..... 000 010 ..... ..... @rd_rn_rm_e0
604UZP2_q 00000101 10 1 ..... 000 011 ..... ..... @rd_rn_rm_e0
605TRN1_q 00000101 10 1 ..... 000 110 ..... ..... @rd_rn_rm_e0
606TRN2_q 00000101 10 1 ..... 000 111 ..... ..... @rd_rn_rm_e0
607
3ca879ae
RH
608### SVE Permute - Predicated Group
609
610# SVE compress active elements
611# Note esz >= 2
612COMPACT 00000101 .. 100001 100 ... ..... ..... @rd_pg_rn
613
ef23cb72
RH
614# SVE conditionally broadcast element to vector
615CLASTA_z 00000101 .. 10100 0 100 ... ..... ..... @rdn_pg_rm
616CLASTB_z 00000101 .. 10100 1 100 ... ..... ..... @rdn_pg_rm
617
618# SVE conditionally copy element to SIMD&FP scalar
619CLASTA_v 00000101 .. 10101 0 100 ... ..... ..... @rd_pg_rn
620CLASTB_v 00000101 .. 10101 1 100 ... ..... ..... @rd_pg_rn
621
622# SVE conditionally copy element to general register
623CLASTA_r 00000101 .. 11000 0 101 ... ..... ..... @rd_pg_rn
624CLASTB_r 00000101 .. 11000 1 101 ... ..... ..... @rd_pg_rn
625
626# SVE copy element to SIMD&FP scalar register
627LASTA_v 00000101 .. 10001 0 100 ... ..... ..... @rd_pg_rn
628LASTB_v 00000101 .. 10001 1 100 ... ..... ..... @rd_pg_rn
629
630# SVE copy element to general register
631LASTA_r 00000101 .. 10000 0 101 ... ..... ..... @rd_pg_rn
632LASTB_r 00000101 .. 10000 1 101 ... ..... ..... @rd_pg_rn
633
792a5578
RH
634# SVE copy element from SIMD&FP scalar register
635CPY_m_v 00000101 .. 100000 100 ... ..... ..... @rd_pg_rn
636
637# SVE copy element from general register to vector (predicated)
638CPY_m_r 00000101 .. 101000 101 ... ..... ..... @rd_pg_rn
639
dae8fb90
RH
640# SVE reverse within elements
641# Note esz >= operation size
642REVB 00000101 .. 1001 00 100 ... ..... ..... @rd_pg_rn
643REVH 00000101 .. 1001 01 100 ... ..... ..... @rd_pg_rn
644REVW 00000101 .. 1001 10 100 ... ..... ..... @rd_pg_rn
645RBIT 00000101 .. 1001 11 100 ... ..... ..... @rd_pg_rn
646
75114792 647# SVE vector splice (predicated, destructive)
b48ff240
RH
648SPLICE 00000101 .. 101 100 100 ... ..... ..... @rdn_pg_rm
649
75114792
SL
650# SVE2 vector splice (predicated, constructive)
651SPLICE_sve2 00000101 .. 101 101 100 ... ..... ..... @rd_pg_rn
652
d3fe4a29
RH
653### SVE Select Vectors Group
654
655# SVE select vector elements (predicated)
656SEL_zpzz 00000101 .. 1 ..... 11 .... ..... ..... @rd_pg4_rn_rm
657
757f9cff
RH
658### SVE Integer Compare - Vectors Group
659
660# SVE integer compare_vectors
661CMPHS_ppzz 00100100 .. 0 ..... 000 ... ..... 0 .... @pd_pg_rn_rm
662CMPHI_ppzz 00100100 .. 0 ..... 000 ... ..... 1 .... @pd_pg_rn_rm
663CMPGE_ppzz 00100100 .. 0 ..... 100 ... ..... 0 .... @pd_pg_rn_rm
664CMPGT_ppzz 00100100 .. 0 ..... 100 ... ..... 1 .... @pd_pg_rn_rm
665CMPEQ_ppzz 00100100 .. 0 ..... 101 ... ..... 0 .... @pd_pg_rn_rm
666CMPNE_ppzz 00100100 .. 0 ..... 101 ... ..... 1 .... @pd_pg_rn_rm
667
668# SVE integer compare with wide elements
669# Note these require esz != 3.
670CMPEQ_ppzw 00100100 .. 0 ..... 001 ... ..... 0 .... @pd_pg_rn_rm
671CMPNE_ppzw 00100100 .. 0 ..... 001 ... ..... 1 .... @pd_pg_rn_rm
672CMPGE_ppzw 00100100 .. 0 ..... 010 ... ..... 0 .... @pd_pg_rn_rm
673CMPGT_ppzw 00100100 .. 0 ..... 010 ... ..... 1 .... @pd_pg_rn_rm
674CMPLT_ppzw 00100100 .. 0 ..... 011 ... ..... 0 .... @pd_pg_rn_rm
675CMPLE_ppzw 00100100 .. 0 ..... 011 ... ..... 1 .... @pd_pg_rn_rm
676CMPHS_ppzw 00100100 .. 0 ..... 110 ... ..... 0 .... @pd_pg_rn_rm
677CMPHI_ppzw 00100100 .. 0 ..... 110 ... ..... 1 .... @pd_pg_rn_rm
678CMPLO_ppzw 00100100 .. 0 ..... 111 ... ..... 0 .... @pd_pg_rn_rm
679CMPLS_ppzw 00100100 .. 0 ..... 111 ... ..... 1 .... @pd_pg_rn_rm
680
38cadeba
RH
681### SVE Integer Compare - Unsigned Immediate Group
682
683# SVE integer compare with unsigned immediate
684CMPHS_ppzi 00100100 .. 1 ....... 0 ... ..... 0 .... @pd_pg_rn_i7
685CMPHI_ppzi 00100100 .. 1 ....... 0 ... ..... 1 .... @pd_pg_rn_i7
686CMPLO_ppzi 00100100 .. 1 ....... 1 ... ..... 0 .... @pd_pg_rn_i7
687CMPLS_ppzi 00100100 .. 1 ....... 1 ... ..... 1 .... @pd_pg_rn_i7
688
689### SVE Integer Compare - Signed Immediate Group
690
691# SVE integer compare with signed immediate
692CMPGE_ppzi 00100101 .. 0 ..... 000 ... ..... 0 .... @pd_pg_rn_i5
693CMPGT_ppzi 00100101 .. 0 ..... 000 ... ..... 1 .... @pd_pg_rn_i5
694CMPLT_ppzi 00100101 .. 0 ..... 001 ... ..... 0 .... @pd_pg_rn_i5
695CMPLE_ppzi 00100101 .. 0 ..... 001 ... ..... 1 .... @pd_pg_rn_i5
696CMPEQ_ppzi 00100101 .. 0 ..... 100 ... ..... 0 .... @pd_pg_rn_i5
697CMPNE_ppzi 00100101 .. 0 ..... 100 ... ..... 1 .... @pd_pg_rn_i5
698
e1fa1164
RH
699### SVE Predicate Logical Operations Group
700
516e246a
RH
701# SVE predicate logical operations
702AND_pppp 00100101 0. 00 .... 01 .... 0 .... 0 .... @pd_pg_pn_pm_s
703BIC_pppp 00100101 0. 00 .... 01 .... 0 .... 1 .... @pd_pg_pn_pm_s
704EOR_pppp 00100101 0. 00 .... 01 .... 1 .... 0 .... @pd_pg_pn_pm_s
705SEL_pppp 00100101 0. 00 .... 01 .... 1 .... 1 .... @pd_pg_pn_pm_s
706ORR_pppp 00100101 1. 00 .... 01 .... 0 .... 0 .... @pd_pg_pn_pm_s
707ORN_pppp 00100101 1. 00 .... 01 .... 0 .... 1 .... @pd_pg_pn_pm_s
708NOR_pppp 00100101 1. 00 .... 01 .... 1 .... 0 .... @pd_pg_pn_pm_s
709NAND_pppp 00100101 1. 00 .... 01 .... 1 .... 1 .... @pd_pg_pn_pm_s
710
9e18d7a6
RH
711### SVE Predicate Misc Group
712
713# SVE predicate test
714PTEST 00100101 01 010000 11 pg:4 0 rn:4 0 0000
715
028e2a7b
RH
716# SVE predicate initialize
717PTRUE 00100101 esz:2 01100 s:1 111000 pat:5 0 rd:4
718
719# SVE initialize FFR
720SETFFR 00100101 0010 1100 1001 0000 0000 0000
721
722# SVE zero predicate register
723PFALSE 00100101 0001 1000 1110 0100 0000 rd:4
724
725# SVE predicate read from FFR (predicated)
726RDFFR_p 00100101 0 s:1 0110001111000 pg:4 0 rd:4
727
728# SVE predicate read from FFR (unpredicated)
729RDFFR 00100101 0001 1001 1111 0000 0000 rd:4
730
731# SVE FFR write from predicate (WRFFR)
732WRFFR 00100101 0010 1000 1001 000 rn:4 00000
733
734# SVE predicate first active
735PFIRST 00100101 01 011 000 11000 00 .... 0 .... @pd_pn_e0
736
737# SVE predicate next active
738PNEXT 00100101 .. 011 001 11000 10 .... 0 .... @pd_pn
739
35da316f
RH
740### SVE Partition Break Group
741
742# SVE propagate break from previous partition
743BRKPA 00100101 0. 00 .... 11 .... 0 .... 0 .... @pd_pg_pn_pm_s
744BRKPB 00100101 0. 00 .... 11 .... 0 .... 1 .... @pd_pg_pn_pm_s
745
746# SVE partition break condition
747BRKA_z 00100101 0. 01000001 .... 0 .... 0 .... @pd_pg_pn_s
748BRKB_z 00100101 1. 01000001 .... 0 .... 0 .... @pd_pg_pn_s
407e6ce7
RH
749BRKA_m 00100101 00 01000001 .... 0 .... 1 .... @pd_pg_pn_s0
750BRKB_m 00100101 10 01000001 .... 0 .... 1 .... @pd_pg_pn_s0
35da316f
RH
751
752# SVE propagate break to next partition
753BRKN 00100101 0. 01100001 .... 0 .... 0 .... @pd_pg_pn_s
754
9ee3a611
RH
755### SVE Predicate Count Group
756
757# SVE predicate count
758CNTP 00100101 .. 100 000 10 .... 0 .... ..... @rd_pg4_pn
759
760# SVE inc/dec register by predicate count
761INCDECP_r 00100101 .. 10110 d:1 10001 00 .... ..... @incdec_pred u=1
762
763# SVE inc/dec vector by predicate count
764INCDECP_z 00100101 .. 10110 d:1 10000 00 .... ..... @incdec2_pred u=1
765
766# SVE saturating inc/dec register by predicate count
767SINCDECP_r_32 00100101 .. 1010 d:1 u:1 10001 00 .... ..... @incdec_pred
768SINCDECP_r_64 00100101 .. 1010 d:1 u:1 10001 10 .... ..... @incdec_pred
769
770# SVE saturating inc/dec vector by predicate count
771SINCDECP_z 00100101 .. 1010 d:1 u:1 10000 00 .... ..... @incdec2_pred
772
caf1cefc
RH
773### SVE Integer Compare - Scalars Group
774
775# SVE conditionally terminate scalars
776CTERM 00100101 1 sf:1 1 rm:5 001000 rn:5 ne:1 0000
777
778# SVE integer compare scalar count and limit
34688dbc 779WHILE 00100101 esz:2 1 rm:5 000 sf:1 u:1 lt:1 rn:5 eq:1 rd:4
caf1cefc 780
14f6dad1
RH
781# SVE2 pointer conflict compare
782WHILE_ptr 00100101 esz:2 1 rm:5 001 100 rn:5 rw:1 rd:4
783
ed491961
RH
784### SVE Integer Wide Immediate - Unpredicated Group
785
786# SVE broadcast floating-point immediate (unpredicated)
787FDUP 00100101 esz:2 111 00 1110 imm:8 rd:5
788
789# SVE broadcast integer immediate (unpredicated)
790DUP_i 00100101 esz:2 111 00 011 . ........ rd:5 imm=%sh8_i8s
791
6e6a157d
RH
792# SVE integer add/subtract immediate (unpredicated)
793ADD_zzi 00100101 .. 100 000 11 . ........ ..... @rdn_sh_i8u
794SUB_zzi 00100101 .. 100 001 11 . ........ ..... @rdn_sh_i8u
795SUBR_zzi 00100101 .. 100 011 11 . ........ ..... @rdn_sh_i8u
796SQADD_zzi 00100101 .. 100 100 11 . ........ ..... @rdn_sh_i8u
797UQADD_zzi 00100101 .. 100 101 11 . ........ ..... @rdn_sh_i8u
798SQSUB_zzi 00100101 .. 100 110 11 . ........ ..... @rdn_sh_i8u
799UQSUB_zzi 00100101 .. 100 111 11 . ........ ..... @rdn_sh_i8u
800
801# SVE integer min/max immediate (unpredicated)
802SMAX_zzi 00100101 .. 101 000 110 ........ ..... @rdn_i8s
803UMAX_zzi 00100101 .. 101 001 110 ........ ..... @rdn_i8u
804SMIN_zzi 00100101 .. 101 010 110 ........ ..... @rdn_i8s
805UMIN_zzi 00100101 .. 101 011 110 ........ ..... @rdn_i8u
806
807# SVE integer multiply immediate (unpredicated)
808MUL_zzi 00100101 .. 110 000 110 ........ ..... @rdn_i8s
809
d730ecaa 810# SVE integer dot product (unpredicated)
bc2bd697
RH
811DOT_zzzz 01000100 1 sz:1 0 rm:5 00000 u:1 rn:5 rd:5 \
812 ra=%reg_movprfx
d730ecaa 813
21068f39
RH
814# SVE2 complex dot product (vectors)
815CDOT_zzzz 01000100 esz:2 0 rm:5 0001 rot:2 rn:5 rd:5 ra=%reg_movprfx
816
814d4c52
RH
817#### SVE Multiply - Indexed
818
16fcfdc7 819# SVE integer dot product (indexed)
0a82d963
RH
820SDOT_zzxw_s 01000100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=2
821SDOT_zzxw_d 01000100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3
822UDOT_zzxw_s 01000100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=2
823UDOT_zzxw_d 01000100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3
16fcfdc7 824
8a02aac7
RH
825# SVE2 integer multiply-add (indexed)
826MLA_zzxz_h 01000100 0. 1 ..... 000010 ..... ..... @rrxr_3 esz=1
827MLA_zzxz_s 01000100 10 1 ..... 000010 ..... ..... @rrxr_2 esz=2
828MLA_zzxz_d 01000100 11 1 ..... 000010 ..... ..... @rrxr_1 esz=3
829MLS_zzxz_h 01000100 0. 1 ..... 000011 ..... ..... @rrxr_3 esz=1
830MLS_zzxz_s 01000100 10 1 ..... 000011 ..... ..... @rrxr_2 esz=2
831MLS_zzxz_d 01000100 11 1 ..... 000011 ..... ..... @rrxr_1 esz=3
832
75d6d5fc
RH
833# SVE2 saturating multiply-add high (indexed)
834SQRDMLAH_zzxz_h 01000100 0. 1 ..... 000100 ..... ..... @rrxr_3 esz=1
835SQRDMLAH_zzxz_s 01000100 10 1 ..... 000100 ..... ..... @rrxr_2 esz=2
836SQRDMLAH_zzxz_d 01000100 11 1 ..... 000100 ..... ..... @rrxr_1 esz=3
837SQRDMLSH_zzxz_h 01000100 0. 1 ..... 000101 ..... ..... @rrxr_3 esz=1
838SQRDMLSH_zzxz_s 01000100 10 1 ..... 000101 ..... ..... @rrxr_2 esz=2
839SQRDMLSH_zzxz_d 01000100 11 1 ..... 000101 ..... ..... @rrxr_1 esz=3
840
2867039a
RH
841# SVE mixed sign dot product (indexed)
842USDOT_zzxw_s 01000100 10 1 ..... 000110 ..... ..... @rrxr_2 esz=2
843SUDOT_zzxw_s 01000100 10 1 ..... 000111 ..... ..... @rrxr_2 esz=2
844
c5c455d7
RH
845# SVE2 saturating multiply-add (indexed)
846SQDMLALB_zzxw_s 01000100 10 1 ..... 0010.0 ..... ..... @rrxr_3a esz=2
847SQDMLALB_zzxw_d 01000100 11 1 ..... 0010.0 ..... ..... @rrxr_2a esz=3
848SQDMLALT_zzxw_s 01000100 10 1 ..... 0010.1 ..... ..... @rrxr_3a esz=2
849SQDMLALT_zzxw_d 01000100 11 1 ..... 0010.1 ..... ..... @rrxr_2a esz=3
850SQDMLSLB_zzxw_s 01000100 10 1 ..... 0011.0 ..... ..... @rrxr_3a esz=2
851SQDMLSLB_zzxw_d 01000100 11 1 ..... 0011.0 ..... ..... @rrxr_2a esz=3
852SQDMLSLT_zzxw_s 01000100 10 1 ..... 0011.1 ..... ..... @rrxr_3a esz=2
853SQDMLSLT_zzxw_d 01000100 11 1 ..... 0011.1 ..... ..... @rrxr_2a esz=3
854
21068f39
RH
855# SVE2 complex integer dot product (indexed)
856CDOT_zzxw_s 01000100 10 1 index:2 rm:3 0100 rot:2 rn:5 rd:5 \
857 ra=%reg_movprfx
858CDOT_zzxw_d 01000100 11 1 index:1 rm:4 0100 rot:2 rn:5 rd:5 \
859 ra=%reg_movprfx
860
3b787ed8
RH
861# SVE2 complex integer multiply-add (indexed)
862CMLA_zzxz_h 01000100 10 1 index:2 rm:3 0110 rot:2 rn:5 rd:5 \
863 ra=%reg_movprfx
864CMLA_zzxz_s 01000100 11 1 index:1 rm:4 0110 rot:2 rn:5 rd:5 \
865 ra=%reg_movprfx
866
867# SVE2 complex saturating integer multiply-add (indexed)
868SQRDCMLAH_zzxz_h 01000100 10 1 index:2 rm:3 0111 rot:2 rn:5 rd:5 \
869 ra=%reg_movprfx
870SQRDCMLAH_zzxz_s 01000100 11 1 index:1 rm:4 0111 rot:2 rn:5 rd:5 \
871 ra=%reg_movprfx
872
d462469f
RH
873# SVE2 multiply-add long (indexed)
874SMLALB_zzxw_s 01000100 10 1 ..... 1000.0 ..... ..... @rrxr_3a esz=2
875SMLALB_zzxw_d 01000100 11 1 ..... 1000.0 ..... ..... @rrxr_2a esz=3
876SMLALT_zzxw_s 01000100 10 1 ..... 1000.1 ..... ..... @rrxr_3a esz=2
877SMLALT_zzxw_d 01000100 11 1 ..... 1000.1 ..... ..... @rrxr_2a esz=3
878UMLALB_zzxw_s 01000100 10 1 ..... 1001.0 ..... ..... @rrxr_3a esz=2
879UMLALB_zzxw_d 01000100 11 1 ..... 1001.0 ..... ..... @rrxr_2a esz=3
880UMLALT_zzxw_s 01000100 10 1 ..... 1001.1 ..... ..... @rrxr_3a esz=2
881UMLALT_zzxw_d 01000100 11 1 ..... 1001.1 ..... ..... @rrxr_2a esz=3
882SMLSLB_zzxw_s 01000100 10 1 ..... 1010.0 ..... ..... @rrxr_3a esz=2
883SMLSLB_zzxw_d 01000100 11 1 ..... 1010.0 ..... ..... @rrxr_2a esz=3
884SMLSLT_zzxw_s 01000100 10 1 ..... 1010.1 ..... ..... @rrxr_3a esz=2
885SMLSLT_zzxw_d 01000100 11 1 ..... 1010.1 ..... ..... @rrxr_2a esz=3
886UMLSLB_zzxw_s 01000100 10 1 ..... 1011.0 ..... ..... @rrxr_3a esz=2
887UMLSLB_zzxw_d 01000100 11 1 ..... 1011.0 ..... ..... @rrxr_2a esz=3
888UMLSLT_zzxw_s 01000100 10 1 ..... 1011.1 ..... ..... @rrxr_3a esz=2
889UMLSLT_zzxw_d 01000100 11 1 ..... 1011.1 ..... ..... @rrxr_2a esz=3
890
d3949c4c
RH
891# SVE2 integer multiply long (indexed)
892SMULLB_zzx_s 01000100 10 1 ..... 1100.0 ..... ..... @rrx_3a esz=2
893SMULLB_zzx_d 01000100 11 1 ..... 1100.0 ..... ..... @rrx_2a esz=3
894SMULLT_zzx_s 01000100 10 1 ..... 1100.1 ..... ..... @rrx_3a esz=2
895SMULLT_zzx_d 01000100 11 1 ..... 1100.1 ..... ..... @rrx_2a esz=3
896UMULLB_zzx_s 01000100 10 1 ..... 1101.0 ..... ..... @rrx_3a esz=2
897UMULLB_zzx_d 01000100 11 1 ..... 1101.0 ..... ..... @rrx_2a esz=3
898UMULLT_zzx_s 01000100 10 1 ..... 1101.1 ..... ..... @rrx_3a esz=2
899UMULLT_zzx_d 01000100 11 1 ..... 1101.1 ..... ..... @rrx_2a esz=3
900
b95f5eeb
RH
901# SVE2 saturating multiply (indexed)
902SQDMULLB_zzx_s 01000100 10 1 ..... 1110.0 ..... ..... @rrx_3a esz=2
903SQDMULLB_zzx_d 01000100 11 1 ..... 1110.0 ..... ..... @rrx_2a esz=3
904SQDMULLT_zzx_s 01000100 10 1 ..... 1110.1 ..... ..... @rrx_3a esz=2
905SQDMULLT_zzx_d 01000100 11 1 ..... 1110.1 ..... ..... @rrx_2a esz=3
906
1aee2d70
RH
907# SVE2 saturating multiply high (indexed)
908SQDMULH_zzx_h 01000100 0. 1 ..... 111100 ..... ..... @rrx_3 esz=1
909SQDMULH_zzx_s 01000100 10 1 ..... 111100 ..... ..... @rrx_2 esz=2
910SQDMULH_zzx_d 01000100 11 1 ..... 111100 ..... ..... @rrx_1 esz=3
911SQRDMULH_zzx_h 01000100 0. 1 ..... 111101 ..... ..... @rrx_3 esz=1
912SQRDMULH_zzx_s 01000100 10 1 ..... 111101 ..... ..... @rrx_2 esz=2
913SQRDMULH_zzx_d 01000100 11 1 ..... 111101 ..... ..... @rrx_1 esz=3
914
814d4c52
RH
915# SVE2 integer multiply (indexed)
916MUL_zzx_h 01000100 0. 1 ..... 111110 ..... ..... @rrx_3 esz=1
917MUL_zzx_s 01000100 10 1 ..... 111110 ..... ..... @rrx_2 esz=2
918MUL_zzx_d 01000100 11 1 ..... 111110 ..... ..... @rrx_1 esz=3
919
76a9d9cd
RH
920# SVE floating-point complex add (predicated)
921FCADD 01100100 esz:2 00000 rot:1 100 pg:3 rm:5 rd:5 \
922 rn=%reg_movprfx
923
05f48bab
RH
924# SVE floating-point complex multiply-add (predicated)
925FCMLA_zpzzz 01100100 esz:2 0 rm:5 0 rot:2 pg:3 rn:5 rd:5 \
926 ra=%reg_movprfx
927
18fc2405
RH
928# SVE floating-point complex multiply-add (indexed)
929FCMLA_zzxz 01100100 10 1 index:2 rm:3 0001 rot:2 rn:5 rd:5 \
930 ra=%reg_movprfx esz=1
931FCMLA_zzxz 01100100 11 1 index:1 rm:4 0001 rot:2 rn:5 rd:5 \
932 ra=%reg_movprfx esz=2
933
ca40a6e6
RH
934### SVE FP Multiply-Add Indexed Group
935
936# SVE floating-point multiply-add (indexed)
0a82d963
RH
937FMLA_zzxz 01100100 0. 1 ..... 000000 ..... ..... @rrxr_3 esz=1
938FMLA_zzxz 01100100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=2
939FMLA_zzxz 01100100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3
940FMLS_zzxz 01100100 0. 1 ..... 000001 ..... ..... @rrxr_3 esz=1
941FMLS_zzxz 01100100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=2
942FMLS_zzxz 01100100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3
ca40a6e6
RH
943
944### SVE FP Multiply Indexed Group
945
946# SVE floating-point multiply (indexed)
1c737d9c
RH
947FMUL_zzx 01100100 0. 1 ..... 001000 ..... ..... @rrx_3 esz=1
948FMUL_zzx 01100100 10 1 ..... 001000 ..... ..... @rrx_2 esz=2
949FMUL_zzx 01100100 11 1 ..... 001000 ..... ..... @rrx_1 esz=3
ca40a6e6 950
23fbe79f
RH
951### SVE FP Fast Reduction Group
952
953FADDV 01100101 .. 000 000 001 ... ..... ..... @rd_pg_rn
954FMAXNMV 01100101 .. 000 100 001 ... ..... ..... @rd_pg_rn
955FMINNMV 01100101 .. 000 101 001 ... ..... ..... @rd_pg_rn
956FMAXV 01100101 .. 000 110 001 ... ..... ..... @rd_pg_rn
957FMINV 01100101 .. 000 111 001 ... ..... ..... @rd_pg_rn
958
3887c038
RH
959## SVE Floating Point Unary Operations - Unpredicated Group
960
961FRECPE 01100101 .. 001 110 001100 ..... ..... @rd_rn
962FRSQRTE 01100101 .. 001 111 001100 ..... ..... @rd_rn
963
4d2e2a03
RH
964### SVE FP Compare with Zero Group
965
966FCMGE_ppz0 01100101 .. 0100 00 001 ... ..... 0 .... @pd_pg_rn
967FCMGT_ppz0 01100101 .. 0100 00 001 ... ..... 1 .... @pd_pg_rn
968FCMLT_ppz0 01100101 .. 0100 01 001 ... ..... 0 .... @pd_pg_rn
969FCMLE_ppz0 01100101 .. 0100 01 001 ... ..... 1 .... @pd_pg_rn
970FCMEQ_ppz0 01100101 .. 0100 10 001 ... ..... 0 .... @pd_pg_rn
971FCMNE_ppz0 01100101 .. 0100 11 001 ... ..... 0 .... @pd_pg_rn
972
7f9ddf64
RH
973### SVE FP Accumulating Reduction Group
974
975# SVE floating-point serial reduction (predicated)
976FADDA 01100101 .. 011 000 001 ... ..... ..... @rdn_pg_rm
977
29b80469
RH
978### SVE Floating Point Arithmetic - Unpredicated Group
979
980# SVE floating-point arithmetic (unpredicated)
981FADD_zzz 01100101 .. 0 ..... 000 000 ..... ..... @rd_rn_rm
982FSUB_zzz 01100101 .. 0 ..... 000 001 ..... ..... @rd_rn_rm
983FMUL_zzz 01100101 .. 0 ..... 000 010 ..... ..... @rd_rn_rm
984FTSMUL 01100101 .. 0 ..... 000 011 ..... ..... @rd_rn_rm
985FRECPS 01100101 .. 0 ..... 000 110 ..... ..... @rd_rn_rm
986FRSQRTS 01100101 .. 0 ..... 000 111 ..... ..... @rd_rn_rm
987
ec3b87c2
RH
988### SVE FP Arithmetic Predicated Group
989
990# SVE floating-point arithmetic (predicated)
991FADD_zpzz 01100101 .. 00 0000 100 ... ..... ..... @rdn_pg_rm
992FSUB_zpzz 01100101 .. 00 0001 100 ... ..... ..... @rdn_pg_rm
993FMUL_zpzz 01100101 .. 00 0010 100 ... ..... ..... @rdn_pg_rm
994FSUB_zpzz 01100101 .. 00 0011 100 ... ..... ..... @rdm_pg_rn # FSUBR
995FMAXNM_zpzz 01100101 .. 00 0100 100 ... ..... ..... @rdn_pg_rm
996FMINNM_zpzz 01100101 .. 00 0101 100 ... ..... ..... @rdn_pg_rm
997FMAX_zpzz 01100101 .. 00 0110 100 ... ..... ..... @rdn_pg_rm
998FMIN_zpzz 01100101 .. 00 0111 100 ... ..... ..... @rdn_pg_rm
999FABD 01100101 .. 00 1000 100 ... ..... ..... @rdn_pg_rm
1000FSCALE 01100101 .. 00 1001 100 ... ..... ..... @rdn_pg_rm
1001FMULX 01100101 .. 00 1010 100 ... ..... ..... @rdn_pg_rm
1002FDIV 01100101 .. 00 1100 100 ... ..... ..... @rdm_pg_rn # FDIVR
1003FDIV 01100101 .. 00 1101 100 ... ..... ..... @rdn_pg_rm
1004
cc48affe
RH
1005# SVE floating-point arithmetic with immediate (predicated)
1006FADD_zpzi 01100101 .. 011 000 100 ... 0000 . ..... @rdn_i1
1007FSUB_zpzi 01100101 .. 011 001 100 ... 0000 . ..... @rdn_i1
1008FMUL_zpzi 01100101 .. 011 010 100 ... 0000 . ..... @rdn_i1
1009FSUBR_zpzi 01100101 .. 011 011 100 ... 0000 . ..... @rdn_i1
1010FMAXNM_zpzi 01100101 .. 011 100 100 ... 0000 . ..... @rdn_i1
1011FMINNM_zpzi 01100101 .. 011 101 100 ... 0000 . ..... @rdn_i1
1012FMAX_zpzi 01100101 .. 011 110 100 ... 0000 . ..... @rdn_i1
1013FMIN_zpzi 01100101 .. 011 111 100 ... 0000 . ..... @rdn_i1
1014
67fcd9ad
RH
1015# SVE floating-point trig multiply-add coefficient
1016FTMAD 01100101 esz:2 010 imm:3 100000 rm:5 rd:5 rn=%reg_movprfx
1017
6ceabaad
RH
1018### SVE FP Multiply-Add Group
1019
1020# SVE floating-point multiply-accumulate writing addend
1021FMLA_zpzzz 01100101 .. 1 ..... 000 ... ..... ..... @rda_pg_rn_rm
1022FMLS_zpzzz 01100101 .. 1 ..... 001 ... ..... ..... @rda_pg_rn_rm
1023FNMLA_zpzzz 01100101 .. 1 ..... 010 ... ..... ..... @rda_pg_rn_rm
1024FNMLS_zpzzz 01100101 .. 1 ..... 011 ... ..... ..... @rda_pg_rn_rm
1025
1026# SVE floating-point multiply-accumulate writing multiplicand
1027# Alter the operand extraction order and reuse the helpers from above.
1028# FMAD, FMSB, FNMAD, FNMS
1029FMLA_zpzzz 01100101 .. 1 ..... 100 ... ..... ..... @rdn_pg_rm_ra
1030FMLS_zpzzz 01100101 .. 1 ..... 101 ... ..... ..... @rdn_pg_rm_ra
1031FNMLA_zpzzz 01100101 .. 1 ..... 110 ... ..... ..... @rdn_pg_rm_ra
1032FNMLS_zpzzz 01100101 .. 1 ..... 111 ... ..... ..... @rdn_pg_rm_ra
1033
8092c6a3
RH
1034### SVE FP Unary Operations Predicated Group
1035
46d33d1e
RH
1036# SVE floating-point convert precision
1037FCVT_sh 01100101 10 0010 00 101 ... ..... ..... @rd_pg_rn_e0
1038FCVT_hs 01100101 10 0010 01 101 ... ..... ..... @rd_pg_rn_e0
d29b17ca 1039BFCVT 01100101 10 0010 10 101 ... ..... ..... @rd_pg_rn_e0
46d33d1e
RH
1040FCVT_dh 01100101 11 0010 00 101 ... ..... ..... @rd_pg_rn_e0
1041FCVT_hd 01100101 11 0010 01 101 ... ..... ..... @rd_pg_rn_e0
1042FCVT_ds 01100101 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1043FCVT_sd 01100101 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
1044
df4de1af
RH
1045# SVE floating-point convert to integer
1046FCVTZS_hh 01100101 01 011 01 0 101 ... ..... ..... @rd_pg_rn_e0
1047FCVTZU_hh 01100101 01 011 01 1 101 ... ..... ..... @rd_pg_rn_e0
1048FCVTZS_hs 01100101 01 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1049FCVTZU_hs 01100101 01 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1050FCVTZS_hd 01100101 01 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1051FCVTZU_hd 01100101 01 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1052FCVTZS_ss 01100101 10 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1053FCVTZU_ss 01100101 10 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1054FCVTZS_ds 01100101 11 011 00 0 101 ... ..... ..... @rd_pg_rn_e0
1055FCVTZU_ds 01100101 11 011 00 1 101 ... ..... ..... @rd_pg_rn_e0
1056FCVTZS_sd 01100101 11 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1057FCVTZU_sd 01100101 11 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1058FCVTZS_dd 01100101 11 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1059FCVTZU_dd 01100101 11 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1060
cda3c753
RH
1061# SVE floating-point round to integral value
1062FRINTN 01100101 .. 000 000 101 ... ..... ..... @rd_pg_rn
1063FRINTP 01100101 .. 000 001 101 ... ..... ..... @rd_pg_rn
1064FRINTM 01100101 .. 000 010 101 ... ..... ..... @rd_pg_rn
1065FRINTZ 01100101 .. 000 011 101 ... ..... ..... @rd_pg_rn
1066FRINTA 01100101 .. 000 100 101 ... ..... ..... @rd_pg_rn
1067FRINTX 01100101 .. 000 110 101 ... ..... ..... @rd_pg_rn
1068FRINTI 01100101 .. 000 111 101 ... ..... ..... @rd_pg_rn
1069
ec5b375b
RH
1070# SVE floating-point unary operations
1071FRECPX 01100101 .. 001 100 101 ... ..... ..... @rd_pg_rn
1072FSQRT 01100101 .. 001 101 101 ... ..... ..... @rd_pg_rn
1073
8092c6a3
RH
1074# SVE integer convert to floating-point
1075SCVTF_hh 01100101 01 010 01 0 101 ... ..... ..... @rd_pg_rn_e0
1076SCVTF_sh 01100101 01 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1077SCVTF_dh 01100101 01 010 11 0 101 ... ..... ..... @rd_pg_rn_e0
1078SCVTF_ss 01100101 10 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1079SCVTF_sd 01100101 11 010 00 0 101 ... ..... ..... @rd_pg_rn_e0
1080SCVTF_ds 01100101 11 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1081SCVTF_dd 01100101 11 010 11 0 101 ... ..... ..... @rd_pg_rn_e0
1082
1083UCVTF_hh 01100101 01 010 01 1 101 ... ..... ..... @rd_pg_rn_e0
1084UCVTF_sh 01100101 01 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1085UCVTF_dh 01100101 01 010 11 1 101 ... ..... ..... @rd_pg_rn_e0
1086UCVTF_ss 01100101 10 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1087UCVTF_sd 01100101 11 010 00 1 101 ... ..... ..... @rd_pg_rn_e0
1088UCVTF_ds 01100101 11 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1089UCVTF_dd 01100101 11 010 11 1 101 ... ..... ..... @rd_pg_rn_e0
1090
d1822297
RH
1091### SVE Memory - 32-bit Gather and Unsized Contiguous Group
1092
1093# SVE load predicate register
1094LDR_pri 10000101 10 ...... 000 ... ..... 0 .... @pd_rn_i9
1095
1096# SVE load vector register
1097LDR_zri 10000101 10 ...... 010 ... ..... ..... @rd_rn_i9
c4e7c493 1098
68459864
RH
1099# SVE load and broadcast element
1100LD1R_zpri 1000010 .. 1 imm:6 1.. pg:3 rn:5 rd:5 \
1101 &rpri_load dtype=%dtype_23_13 nreg=0
1102
673e9fa6
RH
1103# SVE 32-bit gather load (scalar plus 32-bit unscaled offsets)
1104# SVE 32-bit gather load (scalar plus 32-bit scaled offsets)
1105LD1_zprz 1000010 00 .0 ..... 0.. ... ..... ..... \
1106 @rprr_g_load_xs_u esz=2 msz=0 scale=0
1107LD1_zprz 1000010 01 .. ..... 0.. ... ..... ..... \
1108 @rprr_g_load_xs_u_sc esz=2 msz=1
1109LD1_zprz 1000010 10 .. ..... 01. ... ..... ..... \
1110 @rprr_g_load_xs_sc esz=2 msz=2 u=1
1111
1112# SVE 32-bit gather load (vector plus immediate)
1113LD1_zpiz 1000010 .. 01 ..... 1.. ... ..... ..... \
1114 @rpri_g_load esz=2
1115
c4e7c493
RH
1116### SVE Memory Contiguous Load Group
1117
1118# SVE contiguous load (scalar plus scalar)
1119LD_zprr 1010010 .... ..... 010 ... ..... ..... @rprr_load_dt nreg=0
1120
e2654d75
RH
1121# SVE contiguous first-fault load (scalar plus scalar)
1122LDFF1_zprr 1010010 .... ..... 011 ... ..... ..... @rprr_load_dt nreg=0
1123
c4e7c493
RH
1124# SVE contiguous load (scalar plus immediate)
1125LD_zpri 1010010 .... 0.... 101 ... ..... ..... @rpri_load_dt nreg=0
1126
e2654d75
RH
1127# SVE contiguous non-fault load (scalar plus immediate)
1128LDNF1_zpri 1010010 .... 1.... 101 ... ..... ..... @rpri_load_dt nreg=0
1129
c4e7c493
RH
1130# SVE contiguous non-temporal load (scalar plus scalar)
1131# LDNT1B, LDNT1H, LDNT1W, LDNT1D
1132# SVE load multiple structures (scalar plus scalar)
1133# LD2B, LD2H, LD2W, LD2D; etc.
1134LD_zprr 1010010 .. nreg:2 ..... 110 ... ..... ..... @rprr_load_msz
1135
1136# SVE contiguous non-temporal load (scalar plus immediate)
1137# LDNT1B, LDNT1H, LDNT1W, LDNT1D
1138# SVE load multiple structures (scalar plus immediate)
1139# LD2B, LD2H, LD2W, LD2D; etc.
1140LD_zpri 1010010 .. nreg:2 0.... 111 ... ..... ..... @rpri_load_msz
1a039c7e 1141
05abe304
RH
1142# SVE load and broadcast quadword (scalar plus scalar)
1143LD1RQ_zprr 1010010 .. 00 ..... 000 ... ..... ..... \
1144 @rprr_load_msz nreg=0
12c563f6
RH
1145LD1RO_zprr 1010010 .. 01 ..... 000 ... ..... ..... \
1146 @rprr_load_msz nreg=0
05abe304
RH
1147
1148# SVE load and broadcast quadword (scalar plus immediate)
1149# LD1RQB, LD1RQH, LD1RQS, LD1RQD
1150LD1RQ_zpri 1010010 .. 00 0.... 001 ... ..... ..... \
1151 @rpri_load_msz nreg=0
12c563f6
RH
1152LD1RO_zpri 1010010 .. 01 0.... 001 ... ..... ..... \
1153 @rpri_load_msz nreg=0
05abe304 1154
dec6cf6b
RH
1155# SVE 32-bit gather prefetch (scalar plus 32-bit scaled offsets)
1156PRF 1000010 00 -1 ----- 0-- --- ----- 0 ----
1157
1158# SVE 32-bit gather prefetch (vector plus immediate)
1159PRF 1000010 -- 00 ----- 111 --- ----- 0 ----
1160
1161# SVE contiguous prefetch (scalar plus immediate)
1162PRF 1000010 11 1- ----- 0-- --- ----- 0 ----
1163
1164# SVE contiguous prefetch (scalar plus scalar)
1165PRF_rr 1000010 -- 00 rm:5 110 --- ----- 0 ----
1166
1167### SVE Memory 64-bit Gather Group
1168
673e9fa6
RH
1169# SVE 64-bit gather load (scalar plus 32-bit unpacked unscaled offsets)
1170# SVE 64-bit gather load (scalar plus 32-bit unpacked scaled offsets)
1171LD1_zprz 1100010 00 .0 ..... 0.. ... ..... ..... \
1172 @rprr_g_load_xs_u esz=3 msz=0 scale=0
1173LD1_zprz 1100010 01 .. ..... 0.. ... ..... ..... \
1174 @rprr_g_load_xs_u_sc esz=3 msz=1
1175LD1_zprz 1100010 10 .. ..... 0.. ... ..... ..... \
1176 @rprr_g_load_xs_u_sc esz=3 msz=2
1177LD1_zprz 1100010 11 .. ..... 01. ... ..... ..... \
1178 @rprr_g_load_xs_sc esz=3 msz=3 u=1
1179
1180# SVE 64-bit gather load (scalar plus 64-bit unscaled offsets)
1181# SVE 64-bit gather load (scalar plus 64-bit scaled offsets)
1182LD1_zprz 1100010 00 10 ..... 1.. ... ..... ..... \
1183 @rprr_g_load_u esz=3 msz=0 scale=0
1184LD1_zprz 1100010 01 1. ..... 1.. ... ..... ..... \
1185 @rprr_g_load_u_sc esz=3 msz=1
1186LD1_zprz 1100010 10 1. ..... 1.. ... ..... ..... \
1187 @rprr_g_load_u_sc esz=3 msz=2
1188LD1_zprz 1100010 11 1. ..... 11. ... ..... ..... \
1189 @rprr_g_load_sc esz=3 msz=3 u=1
1190
1191# SVE 64-bit gather load (vector plus immediate)
1192LD1_zpiz 1100010 .. 01 ..... 1.. ... ..... ..... \
1193 @rpri_g_load esz=3
1194
dec6cf6b
RH
1195# SVE 64-bit gather prefetch (scalar plus 64-bit scaled offsets)
1196PRF 1100010 00 11 ----- 1-- --- ----- 0 ----
1197
1198# SVE 64-bit gather prefetch (scalar plus unpacked 32-bit scaled offsets)
1199PRF 1100010 00 -1 ----- 0-- --- ----- 0 ----
1200
1201# SVE 64-bit gather prefetch (vector plus immediate)
1202PRF 1100010 -- 00 ----- 111 --- ----- 0 ----
1203
1a039c7e
RH
1204### SVE Memory Store Group
1205
5047c204
RH
1206# SVE store predicate register
1207STR_pri 1110010 11 0. ..... 000 ... ..... 0 .... @pd_rn_i9
1208
1209# SVE store vector register
1210STR_zri 1110010 11 0. ..... 010 ... ..... ..... @rd_rn_i9
1211
1a039c7e
RH
1212# SVE contiguous store (scalar plus immediate)
1213# ST1B, ST1H, ST1W, ST1D; require msz <= esz
1214ST_zpri 1110010 .. esz:2 0.... 111 ... ..... ..... \
1215 @rpri_store_msz nreg=0
1216
1217# SVE contiguous store (scalar plus scalar)
1218# ST1B, ST1H, ST1W, ST1D; require msz <= esz
1219# Enumerate msz lest we conflict with STR_zri.
1220ST_zprr 1110010 00 .. ..... 010 ... ..... ..... \
1221 @rprr_store_esz_n0 msz=0
1222ST_zprr 1110010 01 .. ..... 010 ... ..... ..... \
1223 @rprr_store_esz_n0 msz=1
1224ST_zprr 1110010 10 .. ..... 010 ... ..... ..... \
1225 @rprr_store_esz_n0 msz=2
1226ST_zprr 1110010 11 11 ..... 010 ... ..... ..... \
1227 @rprr_store msz=3 esz=3 nreg=0
1228
1229# SVE contiguous non-temporal store (scalar plus immediate) (nreg == 0)
1230# SVE store multiple structures (scalar plus immediate) (nreg != 0)
1231ST_zpri 1110010 .. nreg:2 1.... 111 ... ..... ..... \
1232 @rpri_store_msz esz=%size_23
1233
1234# SVE contiguous non-temporal store (scalar plus scalar) (nreg == 0)
1235# SVE store multiple structures (scalar plus scalar) (nreg != 0)
1236ST_zprr 1110010 msz:2 nreg:2 ..... 011 ... ..... ..... \
1237 @rprr_store esz=%size_23
f6dbf62a
RH
1238
1239# SVE 32-bit scatter store (scalar plus 32-bit scaled offsets)
1240# Require msz > 0 && msz <= esz.
1241ST1_zprz 1110010 .. 11 ..... 100 ... ..... ..... \
1242 @rprr_scatter_store xs=0 esz=2 scale=1
1243ST1_zprz 1110010 .. 11 ..... 110 ... ..... ..... \
1244 @rprr_scatter_store xs=1 esz=2 scale=1
1245
1246# SVE 32-bit scatter store (scalar plus 32-bit unscaled offsets)
1247# Require msz <= esz.
1248ST1_zprz 1110010 .. 10 ..... 100 ... ..... ..... \
1249 @rprr_scatter_store xs=0 esz=2 scale=0
1250ST1_zprz 1110010 .. 10 ..... 110 ... ..... ..... \
1251 @rprr_scatter_store xs=1 esz=2 scale=0
1252
1253# SVE 64-bit scatter store (scalar plus 64-bit scaled offset)
1254# Require msz > 0
1255ST1_zprz 1110010 .. 01 ..... 101 ... ..... ..... \
1256 @rprr_scatter_store xs=2 esz=3 scale=1
1257
1258# SVE 64-bit scatter store (scalar plus 64-bit unscaled offset)
1259ST1_zprz 1110010 .. 00 ..... 101 ... ..... ..... \
1260 @rprr_scatter_store xs=2 esz=3 scale=0
1261
408ecde9
RH
1262# SVE 64-bit scatter store (vector plus immediate)
1263ST1_zpiz 1110010 .. 10 ..... 101 ... ..... ..... \
1264 @rpri_scatter_store esz=3
1265
1266# SVE 32-bit scatter store (vector plus immediate)
1267ST1_zpiz 1110010 .. 11 ..... 101 ... ..... ..... \
1268 @rpri_scatter_store esz=2
1269
f6dbf62a
RH
1270# SVE 64-bit scatter store (scalar plus unpacked 32-bit scaled offset)
1271# Require msz > 0
1272ST1_zprz 1110010 .. 01 ..... 100 ... ..... ..... \
1273 @rprr_scatter_store xs=0 esz=3 scale=1
1274ST1_zprz 1110010 .. 01 ..... 110 ... ..... ..... \
1275 @rprr_scatter_store xs=1 esz=3 scale=1
1276
1277# SVE 64-bit scatter store (scalar plus unpacked 32-bit unscaled offset)
1278ST1_zprz 1110010 .. 00 ..... 100 ... ..... ..... \
1279 @rprr_scatter_store xs=0 esz=3 scale=0
1280ST1_zprz 1110010 .. 00 ..... 110 ... ..... ..... \
1281 @rprr_scatter_store xs=1 esz=3 scale=0
5dad1ba5
RH
1282
1283#### SVE2 Support
1284
1285### SVE2 Integer Multiply - Unpredicated
1286
1287# SVE2 integer multiply vectors (unpredicated)
1288MUL_zzz 00000100 .. 1 ..... 0110 00 ..... ..... @rd_rn_rm
1289SMULH_zzz 00000100 .. 1 ..... 0110 10 ..... ..... @rd_rn_rm
1290UMULH_zzz 00000100 .. 1 ..... 0110 11 ..... ..... @rd_rn_rm
1291PMUL_zzz 00000100 00 1 ..... 0110 01 ..... ..... @rd_rn_rm_e0
d4b1e59d 1292
169d7c58
RH
1293# SVE2 signed saturating doubling multiply high (unpredicated)
1294SQDMULH_zzz 00000100 .. 1 ..... 0111 00 ..... ..... @rd_rn_rm
1295SQRDMULH_zzz 00000100 .. 1 ..... 0111 01 ..... ..... @rd_rn_rm
1296
d4b1e59d
RH
1297### SVE2 Integer - Predicated
1298
1299SADALP_zpzz 01000100 .. 000 100 101 ... ..... ..... @rdm_pg_rn
1300UADALP_zpzz 01000100 .. 000 101 101 ... ..... ..... @rdm_pg_rn
db366da8
RH
1301
1302### SVE2 integer unary operations (predicated)
1303
1304URECPE 01000100 .. 000 000 101 ... ..... ..... @rd_pg_rn
1305URSQRTE 01000100 .. 000 001 101 ... ..... ..... @rd_pg_rn
1306SQABS 01000100 .. 001 000 101 ... ..... ..... @rd_pg_rn
1307SQNEG 01000100 .. 001 001 101 ... ..... ..... @rd_pg_rn
45d9503d
RH
1308
1309### SVE2 saturating/rounding bitwise shift left (predicated)
1310
1311SRSHL 01000100 .. 000 010 100 ... ..... ..... @rdn_pg_rm
1312URSHL 01000100 .. 000 011 100 ... ..... ..... @rdn_pg_rm
1313SRSHL 01000100 .. 000 110 100 ... ..... ..... @rdm_pg_rn # SRSHLR
1314URSHL 01000100 .. 000 111 100 ... ..... ..... @rdm_pg_rn # URSHLR
1315
1316SQSHL 01000100 .. 001 000 100 ... ..... ..... @rdn_pg_rm
1317UQSHL 01000100 .. 001 001 100 ... ..... ..... @rdn_pg_rm
1318SQSHL 01000100 .. 001 100 100 ... ..... ..... @rdm_pg_rn # SQSHLR
1319UQSHL 01000100 .. 001 101 100 ... ..... ..... @rdm_pg_rn # UQSHLR
1320
1321SQRSHL 01000100 .. 001 010 100 ... ..... ..... @rdn_pg_rm
1322UQRSHL 01000100 .. 001 011 100 ... ..... ..... @rdn_pg_rm
1323SQRSHL 01000100 .. 001 110 100 ... ..... ..... @rdm_pg_rn # SQRSHLR
1324UQRSHL 01000100 .. 001 111 100 ... ..... ..... @rdm_pg_rn # UQRSHLR
a47dc220
RH
1325
1326### SVE2 integer halving add/subtract (predicated)
1327
1328SHADD 01000100 .. 010 000 100 ... ..... ..... @rdn_pg_rm
1329UHADD 01000100 .. 010 001 100 ... ..... ..... @rdn_pg_rm
1330SHSUB 01000100 .. 010 010 100 ... ..... ..... @rdn_pg_rm
1331UHSUB 01000100 .. 010 011 100 ... ..... ..... @rdn_pg_rm
1332SRHADD 01000100 .. 010 100 100 ... ..... ..... @rdn_pg_rm
1333URHADD 01000100 .. 010 101 100 ... ..... ..... @rdn_pg_rm
1334SHSUB 01000100 .. 010 110 100 ... ..... ..... @rdm_pg_rn # SHSUBR
1335UHSUB 01000100 .. 010 111 100 ... ..... ..... @rdm_pg_rn # UHSUBR
8597dc8b
RH
1336
1337### SVE2 integer pairwise arithmetic
1338
1339ADDP 01000100 .. 010 001 101 ... ..... ..... @rdn_pg_rm
1340SMAXP 01000100 .. 010 100 101 ... ..... ..... @rdn_pg_rm
1341UMAXP 01000100 .. 010 101 101 ... ..... ..... @rdn_pg_rm
1342SMINP 01000100 .. 010 110 101 ... ..... ..... @rdn_pg_rm
1343UMINP 01000100 .. 010 111 101 ... ..... ..... @rdn_pg_rm
4f07fbeb
RH
1344
1345### SVE2 saturating add/subtract (predicated)
1346
1347SQADD_zpzz 01000100 .. 011 000 100 ... ..... ..... @rdn_pg_rm
1348UQADD_zpzz 01000100 .. 011 001 100 ... ..... ..... @rdn_pg_rm
1349SQSUB_zpzz 01000100 .. 011 010 100 ... ..... ..... @rdn_pg_rm
1350UQSUB_zpzz 01000100 .. 011 011 100 ... ..... ..... @rdn_pg_rm
1351SUQADD 01000100 .. 011 100 100 ... ..... ..... @rdn_pg_rm
1352USQADD 01000100 .. 011 101 100 ... ..... ..... @rdn_pg_rm
1353SQSUB_zpzz 01000100 .. 011 110 100 ... ..... ..... @rdm_pg_rn # SQSUBR
1354UQSUB_zpzz 01000100 .. 011 111 100 ... ..... ..... @rdm_pg_rn # UQSUBR
0ce1dda8
RH
1355
1356#### SVE2 Widening Integer Arithmetic
1357
1358## SVE2 integer add/subtract long
1359
1360SADDLB 01000101 .. 0 ..... 00 0000 ..... ..... @rd_rn_rm
1361SADDLT 01000101 .. 0 ..... 00 0001 ..... ..... @rd_rn_rm
1362UADDLB 01000101 .. 0 ..... 00 0010 ..... ..... @rd_rn_rm
1363UADDLT 01000101 .. 0 ..... 00 0011 ..... ..... @rd_rn_rm
1364
1365SSUBLB 01000101 .. 0 ..... 00 0100 ..... ..... @rd_rn_rm
1366SSUBLT 01000101 .. 0 ..... 00 0101 ..... ..... @rd_rn_rm
1367USUBLB 01000101 .. 0 ..... 00 0110 ..... ..... @rd_rn_rm
1368USUBLT 01000101 .. 0 ..... 00 0111 ..... ..... @rd_rn_rm
1369
1370SABDLB 01000101 .. 0 ..... 00 1100 ..... ..... @rd_rn_rm
1371SABDLT 01000101 .. 0 ..... 00 1101 ..... ..... @rd_rn_rm
1372UABDLB 01000101 .. 0 ..... 00 1110 ..... ..... @rd_rn_rm
1373UABDLT 01000101 .. 0 ..... 00 1111 ..... ..... @rd_rn_rm
daec426b
RH
1374
1375## SVE2 integer add/subtract interleaved long
1376
1377SADDLBT 01000101 .. 0 ..... 1000 00 ..... ..... @rd_rn_rm
1378SSUBLBT 01000101 .. 0 ..... 1000 10 ..... ..... @rd_rn_rm
1379SSUBLTB 01000101 .. 0 ..... 1000 11 ..... ..... @rd_rn_rm
81fccf09
RH
1380
1381## SVE2 integer add/subtract wide
1382
1383SADDWB 01000101 .. 0 ..... 010 000 ..... ..... @rd_rn_rm
1384SADDWT 01000101 .. 0 ..... 010 001 ..... ..... @rd_rn_rm
1385UADDWB 01000101 .. 0 ..... 010 010 ..... ..... @rd_rn_rm
1386UADDWT 01000101 .. 0 ..... 010 011 ..... ..... @rd_rn_rm
1387
1388SSUBWB 01000101 .. 0 ..... 010 100 ..... ..... @rd_rn_rm
1389SSUBWT 01000101 .. 0 ..... 010 101 ..... ..... @rd_rn_rm
1390USUBWB 01000101 .. 0 ..... 010 110 ..... ..... @rd_rn_rm
1391USUBWT 01000101 .. 0 ..... 010 111 ..... ..... @rd_rn_rm
69ccc099
RH
1392
1393## SVE2 integer multiply long
1394
1395SQDMULLB_zzz 01000101 .. 0 ..... 011 000 ..... ..... @rd_rn_rm
1396SQDMULLT_zzz 01000101 .. 0 ..... 011 001 ..... ..... @rd_rn_rm
e3a56131
RH
1397PMULLB 01000101 .. 0 ..... 011 010 ..... ..... @rd_rn_rm
1398PMULLT 01000101 .. 0 ..... 011 011 ..... ..... @rd_rn_rm
69ccc099
RH
1399SMULLB_zzz 01000101 .. 0 ..... 011 100 ..... ..... @rd_rn_rm
1400SMULLT_zzz 01000101 .. 0 ..... 011 101 ..... ..... @rd_rn_rm
1401UMULLB_zzz 01000101 .. 0 ..... 011 110 ..... ..... @rd_rn_rm
1402UMULLT_zzz 01000101 .. 0 ..... 011 111 ..... ..... @rd_rn_rm
4269fef1
RH
1403
1404## SVE2 bitwise shift left long
1405
1406# Note bit23 == 0 is handled by esz > 0 in do_sve2_shll_tb.
1407SSHLLB 01000101 .. 0 ..... 1010 00 ..... ..... @rd_rn_tszimm_shl
1408SSHLLT 01000101 .. 0 ..... 1010 01 ..... ..... @rd_rn_tszimm_shl
1409USHLLB 01000101 .. 0 ..... 1010 10 ..... ..... @rd_rn_tszimm_shl
1410USHLLT 01000101 .. 0 ..... 1010 11 ..... ..... @rd_rn_tszimm_shl
2df3ca55
RH
1411
1412## SVE2 bitwise exclusive-or interleaved
1413
1414EORBT 01000101 .. 0 ..... 10010 0 ..... ..... @rd_rn_rm
1415EORTB 01000101 .. 0 ..... 10010 1 ..... ..... @rd_rn_rm
cb9c33b8 1416
2323c5ff
RH
1417## SVE integer matrix multiply accumulate
1418
1419SMMLA 01000101 00 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0
1420USMMLA 01000101 10 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0
1421UMMLA 01000101 11 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0
1422
cb9c33b8
RH
1423## SVE2 bitwise permute
1424
1425BEXT 01000101 .. 0 ..... 1011 00 ..... ..... @rd_rn_rm
1426BDEP 01000101 .. 0 ..... 1011 01 ..... ..... @rd_rn_rm
1427BGRP 01000101 .. 0 ..... 1011 10 ..... ..... @rd_rn_rm
ed4a6387
RH
1428
1429#### SVE2 Accumulate
1430
1431## SVE2 complex integer add
1432
1433CADD_rot90 01000101 .. 00000 0 11011 0 ..... ..... @rdn_rm
1434CADD_rot270 01000101 .. 00000 0 11011 1 ..... ..... @rdn_rm
1435SQCADD_rot90 01000101 .. 00000 1 11011 0 ..... ..... @rdn_rm
1436SQCADD_rot270 01000101 .. 00000 1 11011 1 ..... ..... @rdn_rm
38650638
RH
1437
1438## SVE2 integer absolute difference and accumulate long
1439
1440SABALB 01000101 .. 0 ..... 1100 00 ..... ..... @rda_rn_rm
1441SABALT 01000101 .. 0 ..... 1100 01 ..... ..... @rda_rn_rm
1442UABALB 01000101 .. 0 ..... 1100 10 ..... ..... @rda_rn_rm
1443UABALT 01000101 .. 0 ..... 1100 11 ..... ..... @rda_rn_rm
b8295dfb
RH
1444
1445## SVE2 integer add/subtract long with carry
1446
1447# ADC and SBC decoded via size in helper dispatch.
1448ADCLB 01000101 .. 0 ..... 11010 0 ..... ..... @rda_rn_rm
1449ADCLT 01000101 .. 0 ..... 11010 1 ..... ..... @rda_rn_rm
a7e3a90e
RH
1450
1451## SVE2 bitwise shift right and accumulate
1452
1453# TODO: Use @rda and %reg_movprfx here.
1454SSRA 01000101 .. 0 ..... 1110 00 ..... ..... @rd_rn_tszimm_shr
1455USRA 01000101 .. 0 ..... 1110 01 ..... ..... @rd_rn_tszimm_shr
1456SRSRA 01000101 .. 0 ..... 1110 10 ..... ..... @rd_rn_tszimm_shr
1457URSRA 01000101 .. 0 ..... 1110 11 ..... ..... @rd_rn_tszimm_shr
fc12b46a
RH
1458
1459## SVE2 bitwise shift and insert
1460
1461SRI 01000101 .. 0 ..... 11110 0 ..... ..... @rd_rn_tszimm_shr
1462SLI 01000101 .. 0 ..... 11110 1 ..... ..... @rd_rn_tszimm_shl
289a1797
RH
1463
1464## SVE2 integer absolute difference and accumulate
1465
1466# TODO: Use @rda and %reg_movprfx here.
1467SABA 01000101 .. 0 ..... 11111 0 ..... ..... @rd_rn_rm
1468UABA 01000101 .. 0 ..... 11111 1 ..... ..... @rd_rn_rm
5ff2838d
RH
1469
1470#### SVE2 Narrowing
1471
1472## SVE2 saturating extract narrow
1473
1474# Bits 23, 18-16 are zero, limited in the translator via esz < 3 & imm == 0.
1475SQXTNB 01000101 .. 1 ..... 010 000 ..... ..... @rd_rn_tszimm_shl
1476SQXTNT 01000101 .. 1 ..... 010 001 ..... ..... @rd_rn_tszimm_shl
1477UQXTNB 01000101 .. 1 ..... 010 010 ..... ..... @rd_rn_tszimm_shl
1478UQXTNT 01000101 .. 1 ..... 010 011 ..... ..... @rd_rn_tszimm_shl
1479SQXTUNB 01000101 .. 1 ..... 010 100 ..... ..... @rd_rn_tszimm_shl
1480SQXTUNT 01000101 .. 1 ..... 010 101 ..... ..... @rd_rn_tszimm_shl
b87dbeeb 1481
46d111b2
RH
1482## SVE2 bitwise shift right narrow
1483
1484# Bit 23 == 0 is handled by esz > 0 in the translator.
81fd3e6e
RH
1485SQSHRUNB 01000101 .. 1 ..... 00 0000 ..... ..... @rd_rn_tszimm_shr
1486SQSHRUNT 01000101 .. 1 ..... 00 0001 ..... ..... @rd_rn_tszimm_shr
1487SQRSHRUNB 01000101 .. 1 ..... 00 0010 ..... ..... @rd_rn_tszimm_shr
1488SQRSHRUNT 01000101 .. 1 ..... 00 0011 ..... ..... @rd_rn_tszimm_shr
46d111b2
RH
1489SHRNB 01000101 .. 1 ..... 00 0100 ..... ..... @rd_rn_tszimm_shr
1490SHRNT 01000101 .. 1 ..... 00 0101 ..... ..... @rd_rn_tszimm_shr
1491RSHRNB 01000101 .. 1 ..... 00 0110 ..... ..... @rd_rn_tszimm_shr
1492RSHRNT 01000101 .. 1 ..... 00 0111 ..... ..... @rd_rn_tszimm_shr
743bb147
RH
1493SQSHRNB 01000101 .. 1 ..... 00 1000 ..... ..... @rd_rn_tszimm_shr
1494SQSHRNT 01000101 .. 1 ..... 00 1001 ..... ..... @rd_rn_tszimm_shr
1495SQRSHRNB 01000101 .. 1 ..... 00 1010 ..... ..... @rd_rn_tszimm_shr
1496SQRSHRNT 01000101 .. 1 ..... 00 1011 ..... ..... @rd_rn_tszimm_shr
c13418da
RH
1497UQSHRNB 01000101 .. 1 ..... 00 1100 ..... ..... @rd_rn_tszimm_shr
1498UQSHRNT 01000101 .. 1 ..... 00 1101 ..... ..... @rd_rn_tszimm_shr
1499UQRSHRNB 01000101 .. 1 ..... 00 1110 ..... ..... @rd_rn_tszimm_shr
1500UQRSHRNT 01000101 .. 1 ..... 00 1111 ..... ..... @rd_rn_tszimm_shr
46d111b2 1501
40d5ea50
SL
1502## SVE2 integer add/subtract narrow high part
1503
1504ADDHNB 01000101 .. 1 ..... 011 000 ..... ..... @rd_rn_rm
1505ADDHNT 01000101 .. 1 ..... 011 001 ..... ..... @rd_rn_rm
0ea3ff02
SL
1506RADDHNB 01000101 .. 1 ..... 011 010 ..... ..... @rd_rn_rm
1507RADDHNT 01000101 .. 1 ..... 011 011 ..... ..... @rd_rn_rm
c3cd6766
SL
1508SUBHNB 01000101 .. 1 ..... 011 100 ..... ..... @rd_rn_rm
1509SUBHNT 01000101 .. 1 ..... 011 101 ..... ..... @rd_rn_rm
e9443d10
SL
1510RSUBHNB 01000101 .. 1 ..... 011 110 ..... ..... @rd_rn_rm
1511RSUBHNT 01000101 .. 1 ..... 011 111 ..... ..... @rd_rn_rm
40d5ea50 1512
e0ae6ec3
SL
1513### SVE2 Character Match
1514
1515MATCH 01000101 .. 1 ..... 100 ... ..... 0 .... @pd_pg_rn_rm
1516NMATCH 01000101 .. 1 ..... 100 ... ..... 1 .... @pd_pg_rn_rm
1517
7d47ac94
SL
1518### SVE2 Histogram Computation
1519
1520HISTCNT 01000101 .. 1 ..... 110 ... ..... ..... @rd_pg_rn_rm
1521HISTSEG 01000101 .. 1 ..... 101 000 ..... ..... @rd_rn_rm
1522
b87dbeeb
SL
1523## SVE2 floating-point pairwise operations
1524
1525FADDP 01100100 .. 010 00 0 100 ... ..... ..... @rdn_pg_rm
1526FMAXNMP 01100100 .. 010 10 0 100 ... ..... ..... @rdn_pg_rm
1527FMINNMP 01100100 .. 010 10 1 100 ... ..... ..... @rdn_pg_rm
1528FMAXP 01100100 .. 010 11 0 100 ... ..... ..... @rdn_pg_rm
1529FMINP 01100100 .. 010 11 1 100 ... ..... ..... @rdn_pg_rm
bfc9307e
RH
1530
1531#### SVE Integer Multiply-Add (unpredicated)
1532
1533## SVE2 saturating multiply-add long
1534
1535SQDMLALB_zzzw 01000100 .. 0 ..... 0110 00 ..... ..... @rda_rn_rm
1536SQDMLALT_zzzw 01000100 .. 0 ..... 0110 01 ..... ..... @rda_rn_rm
1537SQDMLSLB_zzzw 01000100 .. 0 ..... 0110 10 ..... ..... @rda_rn_rm
1538SQDMLSLT_zzzw 01000100 .. 0 ..... 0110 11 ..... ..... @rda_rn_rm
1539
1540## SVE2 saturating multiply-add interleaved long
1541
1542SQDMLALBT 01000100 .. 0 ..... 00001 0 ..... ..... @rda_rn_rm
1543SQDMLSLBT 01000100 .. 0 ..... 00001 1 ..... ..... @rda_rn_rm
ab3ddf31
RH
1544
1545## SVE2 saturating multiply-add high
1546
1547SQRDMLAH_zzzz 01000100 .. 0 ..... 01110 0 ..... ..... @rda_rn_rm
1548SQRDMLSH_zzzz 01000100 .. 0 ..... 01110 1 ..... ..... @rda_rn_rm
45a32e80
RH
1549
1550## SVE2 integer multiply-add long
1551
1552SMLALB_zzzw 01000100 .. 0 ..... 010 000 ..... ..... @rda_rn_rm
1553SMLALT_zzzw 01000100 .. 0 ..... 010 001 ..... ..... @rda_rn_rm
1554UMLALB_zzzw 01000100 .. 0 ..... 010 010 ..... ..... @rda_rn_rm
1555UMLALT_zzzw 01000100 .. 0 ..... 010 011 ..... ..... @rda_rn_rm
1556SMLSLB_zzzw 01000100 .. 0 ..... 010 100 ..... ..... @rda_rn_rm
1557SMLSLT_zzzw 01000100 .. 0 ..... 010 101 ..... ..... @rda_rn_rm
1558UMLSLB_zzzw 01000100 .. 0 ..... 010 110 ..... ..... @rda_rn_rm
1559UMLSLT_zzzw 01000100 .. 0 ..... 010 111 ..... ..... @rda_rn_rm
d782d3ca
RH
1560
1561## SVE2 complex integer multiply-add
1562
1563CMLA_zzzz 01000100 esz:2 0 rm:5 0010 rot:2 rn:5 rd:5 ra=%reg_movprfx
1564SQRDCMLAH_zzzz 01000100 esz:2 0 rm:5 0011 rot:2 rn:5 rd:5 ra=%reg_movprfx
6ebca45f 1565
6a98cb2a
RH
1566## SVE mixed sign dot product
1567
1568USDOT_zzzz 01000100 .. 0 ..... 011 110 ..... ..... @rda_rn_rm
1569
4f26756b 1570### SVE2 floating point matrix multiply accumulate
81266a1f
RH
1571{
1572 BFMMLA 01100100 01 1 ..... 111 001 ..... ..... @rda_rn_rm_e0
1573 FMMLA 01100100 .. 1 ..... 111 001 ..... ..... @rda_rn_rm
1574}
4f26756b 1575
cf327449
SL
1576### SVE2 Memory Gather Load Group
1577
1578# SVE2 64-bit gather non-temporal load
1579# (scalar plus unpacked 32-bit unscaled offsets)
1580LDNT1_zprz 1100010 msz:2 00 rm:5 1 u:1 0 pg:3 rn:5 rd:5 \
1581 &rprr_gather_load xs=0 esz=3 scale=0 ff=0
1582
1583# SVE2 32-bit gather non-temporal load (scalar plus 32-bit unscaled offsets)
1584LDNT1_zprz 1000010 msz:2 00 rm:5 10 u:1 pg:3 rn:5 rd:5 \
1585 &rprr_gather_load xs=0 esz=2 scale=0 ff=0
1586
6ebca45f
SL
1587### SVE2 Memory Store Group
1588
1589# SVE2 64-bit scatter non-temporal store (vector plus scalar)
1590STNT1_zprz 1110010 .. 00 ..... 001 ... ..... ..... \
1591 @rprr_scatter_store xs=2 esz=3 scale=0
1592
1593# SVE2 32-bit scatter non-temporal store (vector plus scalar)
1594STNT1_zprz 1110010 .. 10 ..... 001 ... ..... ..... \
1595 @rprr_scatter_store xs=0 esz=2 scale=0
b2bcd1be
RH
1596
1597### SVE2 Crypto Extensions
1598
1599# SVE2 crypto unary operations
1600# AESMC and AESIMC
1601AESMC 01000101 00 10000011100 decrypt:1 00000 rd:5
3cc7a88e
RH
1602
1603# SVE2 crypto destructive binary operations
1604AESE 01000101 00 10001 0 11100 0 ..... ..... @rdn_rm_e0
1605AESD 01000101 00 10001 0 11100 1 ..... ..... @rdn_rm_e0
1606SM4E 01000101 00 10001 1 11100 0 ..... ..... @rdn_rm_e0
3358eb3f
RH
1607
1608# SVE2 crypto constructive binary operations
1609SM4EKEY 01000101 00 1 ..... 11110 0 ..... ..... @rd_rn_rm_e0
1610RAX1 01000101 00 1 ..... 11110 1 ..... ..... @rd_rn_rm_e0
5c1b7226
RH
1611
1612### SVE2 floating-point convert precision odd elements
95365277
SL
1613FCVTXNT_ds 01100100 00 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1614FCVTX_ds 01100101 00 0010 10 101 ... ..... ..... @rd_pg_rn_e0
5c1b7226 1615FCVTNT_sh 01100100 10 0010 00 101 ... ..... ..... @rd_pg_rn_e0
d29b17ca 1616BFCVTNT 01100100 10 0010 10 101 ... ..... ..... @rd_pg_rn_e0
83c2523f 1617FCVTLT_hs 01100100 10 0010 01 101 ... ..... ..... @rd_pg_rn_e0
5c1b7226 1618FCVTNT_ds 01100100 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
83c2523f 1619FCVTLT_sd 01100100 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
631be02e
SL
1620
1621### SVE2 floating-point convert to integer
1622FLOGB 01100101 00 011 esz:2 0101 pg:3 rn:5 rd:5 &rpr_esz
50d102bd
SL
1623
1624### SVE2 floating-point multiply-add long (vectors)
1625FMLALB_zzzw 01100100 10 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0
1626FMLALT_zzzw 01100100 10 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_e0
1627FMLSLB_zzzw 01100100 10 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_e0
1628FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_e0
1629
5693887f
RH
1630BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0
1631BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_e0
1632
cb8657f7
RH
1633### SVE2 floating-point bfloat16 dot-product
1634BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0
1635
50d102bd
SL
1636### SVE2 floating-point multiply-add long (indexed)
1637FMLALB_zzxw 01100100 10 1 ..... 0100.0 ..... ..... @rrxr_3a esz=2
1638FMLALT_zzxw 01100100 10 1 ..... 0100.1 ..... ..... @rrxr_3a esz=2
1639FMLSLB_zzxw 01100100 10 1 ..... 0110.0 ..... ..... @rrxr_3a esz=2
1640FMLSLT_zzxw 01100100 10 1 ..... 0110.1 ..... ..... @rrxr_3a esz=2
458d0ab6
RH
1641BFMLALB_zzxw 01100100 11 1 ..... 0100.0 ..... ..... @rrxr_3a esz=2
1642BFMLALT_zzxw 01100100 11 1 ..... 0100.1 ..... ..... @rrxr_3a esz=2
83914478
RH
1643
1644### SVE2 floating-point bfloat16 dot-product (indexed)
1645BFDOT_zzxz 01100100 01 1 ..... 010000 ..... ..... @rrxr_2 esz=2