]> git.proxmox.com Git - mirror_qemu.git/blame - target/arm/sve.decode
target/arm: Reject dup_i w/ shifted byte early
[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
8fe612a1 25%imm4_16_p1 16:4 !function=plus_1
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)
c437c59b
RH
790{
791 INVALID 00100101 00 111 00 011 1 -------- -----
792 DUP_i 00100101 esz:2 111 00 011 . ........ rd:5 imm=%sh8_i8s
793}
ed491961 794
6e6a157d
RH
795# SVE integer add/subtract immediate (unpredicated)
796ADD_zzi 00100101 .. 100 000 11 . ........ ..... @rdn_sh_i8u
797SUB_zzi 00100101 .. 100 001 11 . ........ ..... @rdn_sh_i8u
798SUBR_zzi 00100101 .. 100 011 11 . ........ ..... @rdn_sh_i8u
799SQADD_zzi 00100101 .. 100 100 11 . ........ ..... @rdn_sh_i8u
800UQADD_zzi 00100101 .. 100 101 11 . ........ ..... @rdn_sh_i8u
801SQSUB_zzi 00100101 .. 100 110 11 . ........ ..... @rdn_sh_i8u
802UQSUB_zzi 00100101 .. 100 111 11 . ........ ..... @rdn_sh_i8u
803
804# SVE integer min/max immediate (unpredicated)
805SMAX_zzi 00100101 .. 101 000 110 ........ ..... @rdn_i8s
806UMAX_zzi 00100101 .. 101 001 110 ........ ..... @rdn_i8u
807SMIN_zzi 00100101 .. 101 010 110 ........ ..... @rdn_i8s
808UMIN_zzi 00100101 .. 101 011 110 ........ ..... @rdn_i8u
809
810# SVE integer multiply immediate (unpredicated)
811MUL_zzi 00100101 .. 110 000 110 ........ ..... @rdn_i8s
812
d730ecaa 813# SVE integer dot product (unpredicated)
bc2bd697
RH
814DOT_zzzz 01000100 1 sz:1 0 rm:5 00000 u:1 rn:5 rd:5 \
815 ra=%reg_movprfx
d730ecaa 816
21068f39
RH
817# SVE2 complex dot product (vectors)
818CDOT_zzzz 01000100 esz:2 0 rm:5 0001 rot:2 rn:5 rd:5 ra=%reg_movprfx
819
814d4c52
RH
820#### SVE Multiply - Indexed
821
16fcfdc7 822# SVE integer dot product (indexed)
0a82d963
RH
823SDOT_zzxw_s 01000100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=2
824SDOT_zzxw_d 01000100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3
825UDOT_zzxw_s 01000100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=2
826UDOT_zzxw_d 01000100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3
16fcfdc7 827
8a02aac7
RH
828# SVE2 integer multiply-add (indexed)
829MLA_zzxz_h 01000100 0. 1 ..... 000010 ..... ..... @rrxr_3 esz=1
830MLA_zzxz_s 01000100 10 1 ..... 000010 ..... ..... @rrxr_2 esz=2
831MLA_zzxz_d 01000100 11 1 ..... 000010 ..... ..... @rrxr_1 esz=3
832MLS_zzxz_h 01000100 0. 1 ..... 000011 ..... ..... @rrxr_3 esz=1
833MLS_zzxz_s 01000100 10 1 ..... 000011 ..... ..... @rrxr_2 esz=2
834MLS_zzxz_d 01000100 11 1 ..... 000011 ..... ..... @rrxr_1 esz=3
835
75d6d5fc
RH
836# SVE2 saturating multiply-add high (indexed)
837SQRDMLAH_zzxz_h 01000100 0. 1 ..... 000100 ..... ..... @rrxr_3 esz=1
838SQRDMLAH_zzxz_s 01000100 10 1 ..... 000100 ..... ..... @rrxr_2 esz=2
839SQRDMLAH_zzxz_d 01000100 11 1 ..... 000100 ..... ..... @rrxr_1 esz=3
840SQRDMLSH_zzxz_h 01000100 0. 1 ..... 000101 ..... ..... @rrxr_3 esz=1
841SQRDMLSH_zzxz_s 01000100 10 1 ..... 000101 ..... ..... @rrxr_2 esz=2
842SQRDMLSH_zzxz_d 01000100 11 1 ..... 000101 ..... ..... @rrxr_1 esz=3
843
2867039a
RH
844# SVE mixed sign dot product (indexed)
845USDOT_zzxw_s 01000100 10 1 ..... 000110 ..... ..... @rrxr_2 esz=2
846SUDOT_zzxw_s 01000100 10 1 ..... 000111 ..... ..... @rrxr_2 esz=2
847
c5c455d7
RH
848# SVE2 saturating multiply-add (indexed)
849SQDMLALB_zzxw_s 01000100 10 1 ..... 0010.0 ..... ..... @rrxr_3a esz=2
850SQDMLALB_zzxw_d 01000100 11 1 ..... 0010.0 ..... ..... @rrxr_2a esz=3
851SQDMLALT_zzxw_s 01000100 10 1 ..... 0010.1 ..... ..... @rrxr_3a esz=2
852SQDMLALT_zzxw_d 01000100 11 1 ..... 0010.1 ..... ..... @rrxr_2a esz=3
853SQDMLSLB_zzxw_s 01000100 10 1 ..... 0011.0 ..... ..... @rrxr_3a esz=2
854SQDMLSLB_zzxw_d 01000100 11 1 ..... 0011.0 ..... ..... @rrxr_2a esz=3
855SQDMLSLT_zzxw_s 01000100 10 1 ..... 0011.1 ..... ..... @rrxr_3a esz=2
856SQDMLSLT_zzxw_d 01000100 11 1 ..... 0011.1 ..... ..... @rrxr_2a esz=3
857
21068f39
RH
858# SVE2 complex integer dot product (indexed)
859CDOT_zzxw_s 01000100 10 1 index:2 rm:3 0100 rot:2 rn:5 rd:5 \
860 ra=%reg_movprfx
861CDOT_zzxw_d 01000100 11 1 index:1 rm:4 0100 rot:2 rn:5 rd:5 \
862 ra=%reg_movprfx
863
3b787ed8
RH
864# SVE2 complex integer multiply-add (indexed)
865CMLA_zzxz_h 01000100 10 1 index:2 rm:3 0110 rot:2 rn:5 rd:5 \
866 ra=%reg_movprfx
867CMLA_zzxz_s 01000100 11 1 index:1 rm:4 0110 rot:2 rn:5 rd:5 \
868 ra=%reg_movprfx
869
870# SVE2 complex saturating integer multiply-add (indexed)
871SQRDCMLAH_zzxz_h 01000100 10 1 index:2 rm:3 0111 rot:2 rn:5 rd:5 \
872 ra=%reg_movprfx
873SQRDCMLAH_zzxz_s 01000100 11 1 index:1 rm:4 0111 rot:2 rn:5 rd:5 \
874 ra=%reg_movprfx
875
d462469f
RH
876# SVE2 multiply-add long (indexed)
877SMLALB_zzxw_s 01000100 10 1 ..... 1000.0 ..... ..... @rrxr_3a esz=2
878SMLALB_zzxw_d 01000100 11 1 ..... 1000.0 ..... ..... @rrxr_2a esz=3
879SMLALT_zzxw_s 01000100 10 1 ..... 1000.1 ..... ..... @rrxr_3a esz=2
880SMLALT_zzxw_d 01000100 11 1 ..... 1000.1 ..... ..... @rrxr_2a esz=3
881UMLALB_zzxw_s 01000100 10 1 ..... 1001.0 ..... ..... @rrxr_3a esz=2
882UMLALB_zzxw_d 01000100 11 1 ..... 1001.0 ..... ..... @rrxr_2a esz=3
883UMLALT_zzxw_s 01000100 10 1 ..... 1001.1 ..... ..... @rrxr_3a esz=2
884UMLALT_zzxw_d 01000100 11 1 ..... 1001.1 ..... ..... @rrxr_2a esz=3
885SMLSLB_zzxw_s 01000100 10 1 ..... 1010.0 ..... ..... @rrxr_3a esz=2
886SMLSLB_zzxw_d 01000100 11 1 ..... 1010.0 ..... ..... @rrxr_2a esz=3
887SMLSLT_zzxw_s 01000100 10 1 ..... 1010.1 ..... ..... @rrxr_3a esz=2
888SMLSLT_zzxw_d 01000100 11 1 ..... 1010.1 ..... ..... @rrxr_2a esz=3
889UMLSLB_zzxw_s 01000100 10 1 ..... 1011.0 ..... ..... @rrxr_3a esz=2
890UMLSLB_zzxw_d 01000100 11 1 ..... 1011.0 ..... ..... @rrxr_2a esz=3
891UMLSLT_zzxw_s 01000100 10 1 ..... 1011.1 ..... ..... @rrxr_3a esz=2
892UMLSLT_zzxw_d 01000100 11 1 ..... 1011.1 ..... ..... @rrxr_2a esz=3
893
d3949c4c
RH
894# SVE2 integer multiply long (indexed)
895SMULLB_zzx_s 01000100 10 1 ..... 1100.0 ..... ..... @rrx_3a esz=2
896SMULLB_zzx_d 01000100 11 1 ..... 1100.0 ..... ..... @rrx_2a esz=3
897SMULLT_zzx_s 01000100 10 1 ..... 1100.1 ..... ..... @rrx_3a esz=2
898SMULLT_zzx_d 01000100 11 1 ..... 1100.1 ..... ..... @rrx_2a esz=3
899UMULLB_zzx_s 01000100 10 1 ..... 1101.0 ..... ..... @rrx_3a esz=2
900UMULLB_zzx_d 01000100 11 1 ..... 1101.0 ..... ..... @rrx_2a esz=3
901UMULLT_zzx_s 01000100 10 1 ..... 1101.1 ..... ..... @rrx_3a esz=2
902UMULLT_zzx_d 01000100 11 1 ..... 1101.1 ..... ..... @rrx_2a esz=3
903
b95f5eeb
RH
904# SVE2 saturating multiply (indexed)
905SQDMULLB_zzx_s 01000100 10 1 ..... 1110.0 ..... ..... @rrx_3a esz=2
906SQDMULLB_zzx_d 01000100 11 1 ..... 1110.0 ..... ..... @rrx_2a esz=3
907SQDMULLT_zzx_s 01000100 10 1 ..... 1110.1 ..... ..... @rrx_3a esz=2
908SQDMULLT_zzx_d 01000100 11 1 ..... 1110.1 ..... ..... @rrx_2a esz=3
909
1aee2d70
RH
910# SVE2 saturating multiply high (indexed)
911SQDMULH_zzx_h 01000100 0. 1 ..... 111100 ..... ..... @rrx_3 esz=1
912SQDMULH_zzx_s 01000100 10 1 ..... 111100 ..... ..... @rrx_2 esz=2
913SQDMULH_zzx_d 01000100 11 1 ..... 111100 ..... ..... @rrx_1 esz=3
914SQRDMULH_zzx_h 01000100 0. 1 ..... 111101 ..... ..... @rrx_3 esz=1
915SQRDMULH_zzx_s 01000100 10 1 ..... 111101 ..... ..... @rrx_2 esz=2
916SQRDMULH_zzx_d 01000100 11 1 ..... 111101 ..... ..... @rrx_1 esz=3
917
814d4c52
RH
918# SVE2 integer multiply (indexed)
919MUL_zzx_h 01000100 0. 1 ..... 111110 ..... ..... @rrx_3 esz=1
920MUL_zzx_s 01000100 10 1 ..... 111110 ..... ..... @rrx_2 esz=2
921MUL_zzx_d 01000100 11 1 ..... 111110 ..... ..... @rrx_1 esz=3
922
76a9d9cd
RH
923# SVE floating-point complex add (predicated)
924FCADD 01100100 esz:2 00000 rot:1 100 pg:3 rm:5 rd:5 \
925 rn=%reg_movprfx
926
05f48bab
RH
927# SVE floating-point complex multiply-add (predicated)
928FCMLA_zpzzz 01100100 esz:2 0 rm:5 0 rot:2 pg:3 rn:5 rd:5 \
929 ra=%reg_movprfx
930
18fc2405
RH
931# SVE floating-point complex multiply-add (indexed)
932FCMLA_zzxz 01100100 10 1 index:2 rm:3 0001 rot:2 rn:5 rd:5 \
933 ra=%reg_movprfx esz=1
934FCMLA_zzxz 01100100 11 1 index:1 rm:4 0001 rot:2 rn:5 rd:5 \
935 ra=%reg_movprfx esz=2
936
ca40a6e6
RH
937### SVE FP Multiply-Add Indexed Group
938
939# SVE floating-point multiply-add (indexed)
0a82d963
RH
940FMLA_zzxz 01100100 0. 1 ..... 000000 ..... ..... @rrxr_3 esz=1
941FMLA_zzxz 01100100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=2
942FMLA_zzxz 01100100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3
943FMLS_zzxz 01100100 0. 1 ..... 000001 ..... ..... @rrxr_3 esz=1
944FMLS_zzxz 01100100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=2
945FMLS_zzxz 01100100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3
ca40a6e6
RH
946
947### SVE FP Multiply Indexed Group
948
949# SVE floating-point multiply (indexed)
1c737d9c
RH
950FMUL_zzx 01100100 0. 1 ..... 001000 ..... ..... @rrx_3 esz=1
951FMUL_zzx 01100100 10 1 ..... 001000 ..... ..... @rrx_2 esz=2
952FMUL_zzx 01100100 11 1 ..... 001000 ..... ..... @rrx_1 esz=3
ca40a6e6 953
23fbe79f
RH
954### SVE FP Fast Reduction Group
955
956FADDV 01100101 .. 000 000 001 ... ..... ..... @rd_pg_rn
957FMAXNMV 01100101 .. 000 100 001 ... ..... ..... @rd_pg_rn
958FMINNMV 01100101 .. 000 101 001 ... ..... ..... @rd_pg_rn
959FMAXV 01100101 .. 000 110 001 ... ..... ..... @rd_pg_rn
960FMINV 01100101 .. 000 111 001 ... ..... ..... @rd_pg_rn
961
3887c038
RH
962## SVE Floating Point Unary Operations - Unpredicated Group
963
964FRECPE 01100101 .. 001 110 001100 ..... ..... @rd_rn
965FRSQRTE 01100101 .. 001 111 001100 ..... ..... @rd_rn
966
4d2e2a03
RH
967### SVE FP Compare with Zero Group
968
969FCMGE_ppz0 01100101 .. 0100 00 001 ... ..... 0 .... @pd_pg_rn
970FCMGT_ppz0 01100101 .. 0100 00 001 ... ..... 1 .... @pd_pg_rn
971FCMLT_ppz0 01100101 .. 0100 01 001 ... ..... 0 .... @pd_pg_rn
972FCMLE_ppz0 01100101 .. 0100 01 001 ... ..... 1 .... @pd_pg_rn
973FCMEQ_ppz0 01100101 .. 0100 10 001 ... ..... 0 .... @pd_pg_rn
974FCMNE_ppz0 01100101 .. 0100 11 001 ... ..... 0 .... @pd_pg_rn
975
7f9ddf64
RH
976### SVE FP Accumulating Reduction Group
977
978# SVE floating-point serial reduction (predicated)
979FADDA 01100101 .. 011 000 001 ... ..... ..... @rdn_pg_rm
980
29b80469
RH
981### SVE Floating Point Arithmetic - Unpredicated Group
982
983# SVE floating-point arithmetic (unpredicated)
984FADD_zzz 01100101 .. 0 ..... 000 000 ..... ..... @rd_rn_rm
985FSUB_zzz 01100101 .. 0 ..... 000 001 ..... ..... @rd_rn_rm
986FMUL_zzz 01100101 .. 0 ..... 000 010 ..... ..... @rd_rn_rm
987FTSMUL 01100101 .. 0 ..... 000 011 ..... ..... @rd_rn_rm
988FRECPS 01100101 .. 0 ..... 000 110 ..... ..... @rd_rn_rm
989FRSQRTS 01100101 .. 0 ..... 000 111 ..... ..... @rd_rn_rm
990
ec3b87c2
RH
991### SVE FP Arithmetic Predicated Group
992
993# SVE floating-point arithmetic (predicated)
994FADD_zpzz 01100101 .. 00 0000 100 ... ..... ..... @rdn_pg_rm
995FSUB_zpzz 01100101 .. 00 0001 100 ... ..... ..... @rdn_pg_rm
996FMUL_zpzz 01100101 .. 00 0010 100 ... ..... ..... @rdn_pg_rm
997FSUB_zpzz 01100101 .. 00 0011 100 ... ..... ..... @rdm_pg_rn # FSUBR
998FMAXNM_zpzz 01100101 .. 00 0100 100 ... ..... ..... @rdn_pg_rm
999FMINNM_zpzz 01100101 .. 00 0101 100 ... ..... ..... @rdn_pg_rm
1000FMAX_zpzz 01100101 .. 00 0110 100 ... ..... ..... @rdn_pg_rm
1001FMIN_zpzz 01100101 .. 00 0111 100 ... ..... ..... @rdn_pg_rm
1002FABD 01100101 .. 00 1000 100 ... ..... ..... @rdn_pg_rm
1003FSCALE 01100101 .. 00 1001 100 ... ..... ..... @rdn_pg_rm
1004FMULX 01100101 .. 00 1010 100 ... ..... ..... @rdn_pg_rm
1005FDIV 01100101 .. 00 1100 100 ... ..... ..... @rdm_pg_rn # FDIVR
1006FDIV 01100101 .. 00 1101 100 ... ..... ..... @rdn_pg_rm
1007
cc48affe
RH
1008# SVE floating-point arithmetic with immediate (predicated)
1009FADD_zpzi 01100101 .. 011 000 100 ... 0000 . ..... @rdn_i1
1010FSUB_zpzi 01100101 .. 011 001 100 ... 0000 . ..... @rdn_i1
1011FMUL_zpzi 01100101 .. 011 010 100 ... 0000 . ..... @rdn_i1
1012FSUBR_zpzi 01100101 .. 011 011 100 ... 0000 . ..... @rdn_i1
1013FMAXNM_zpzi 01100101 .. 011 100 100 ... 0000 . ..... @rdn_i1
1014FMINNM_zpzi 01100101 .. 011 101 100 ... 0000 . ..... @rdn_i1
1015FMAX_zpzi 01100101 .. 011 110 100 ... 0000 . ..... @rdn_i1
1016FMIN_zpzi 01100101 .. 011 111 100 ... 0000 . ..... @rdn_i1
1017
67fcd9ad
RH
1018# SVE floating-point trig multiply-add coefficient
1019FTMAD 01100101 esz:2 010 imm:3 100000 rm:5 rd:5 rn=%reg_movprfx
1020
6ceabaad
RH
1021### SVE FP Multiply-Add Group
1022
1023# SVE floating-point multiply-accumulate writing addend
1024FMLA_zpzzz 01100101 .. 1 ..... 000 ... ..... ..... @rda_pg_rn_rm
1025FMLS_zpzzz 01100101 .. 1 ..... 001 ... ..... ..... @rda_pg_rn_rm
1026FNMLA_zpzzz 01100101 .. 1 ..... 010 ... ..... ..... @rda_pg_rn_rm
1027FNMLS_zpzzz 01100101 .. 1 ..... 011 ... ..... ..... @rda_pg_rn_rm
1028
1029# SVE floating-point multiply-accumulate writing multiplicand
1030# Alter the operand extraction order and reuse the helpers from above.
1031# FMAD, FMSB, FNMAD, FNMS
1032FMLA_zpzzz 01100101 .. 1 ..... 100 ... ..... ..... @rdn_pg_rm_ra
1033FMLS_zpzzz 01100101 .. 1 ..... 101 ... ..... ..... @rdn_pg_rm_ra
1034FNMLA_zpzzz 01100101 .. 1 ..... 110 ... ..... ..... @rdn_pg_rm_ra
1035FNMLS_zpzzz 01100101 .. 1 ..... 111 ... ..... ..... @rdn_pg_rm_ra
1036
8092c6a3
RH
1037### SVE FP Unary Operations Predicated Group
1038
46d33d1e
RH
1039# SVE floating-point convert precision
1040FCVT_sh 01100101 10 0010 00 101 ... ..... ..... @rd_pg_rn_e0
1041FCVT_hs 01100101 10 0010 01 101 ... ..... ..... @rd_pg_rn_e0
d29b17ca 1042BFCVT 01100101 10 0010 10 101 ... ..... ..... @rd_pg_rn_e0
46d33d1e
RH
1043FCVT_dh 01100101 11 0010 00 101 ... ..... ..... @rd_pg_rn_e0
1044FCVT_hd 01100101 11 0010 01 101 ... ..... ..... @rd_pg_rn_e0
1045FCVT_ds 01100101 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1046FCVT_sd 01100101 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
1047
df4de1af
RH
1048# SVE floating-point convert to integer
1049FCVTZS_hh 01100101 01 011 01 0 101 ... ..... ..... @rd_pg_rn_e0
1050FCVTZU_hh 01100101 01 011 01 1 101 ... ..... ..... @rd_pg_rn_e0
1051FCVTZS_hs 01100101 01 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1052FCVTZU_hs 01100101 01 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1053FCVTZS_hd 01100101 01 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1054FCVTZU_hd 01100101 01 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1055FCVTZS_ss 01100101 10 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1056FCVTZU_ss 01100101 10 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1057FCVTZS_ds 01100101 11 011 00 0 101 ... ..... ..... @rd_pg_rn_e0
1058FCVTZU_ds 01100101 11 011 00 1 101 ... ..... ..... @rd_pg_rn_e0
1059FCVTZS_sd 01100101 11 011 10 0 101 ... ..... ..... @rd_pg_rn_e0
1060FCVTZU_sd 01100101 11 011 10 1 101 ... ..... ..... @rd_pg_rn_e0
1061FCVTZS_dd 01100101 11 011 11 0 101 ... ..... ..... @rd_pg_rn_e0
1062FCVTZU_dd 01100101 11 011 11 1 101 ... ..... ..... @rd_pg_rn_e0
1063
cda3c753
RH
1064# SVE floating-point round to integral value
1065FRINTN 01100101 .. 000 000 101 ... ..... ..... @rd_pg_rn
1066FRINTP 01100101 .. 000 001 101 ... ..... ..... @rd_pg_rn
1067FRINTM 01100101 .. 000 010 101 ... ..... ..... @rd_pg_rn
1068FRINTZ 01100101 .. 000 011 101 ... ..... ..... @rd_pg_rn
1069FRINTA 01100101 .. 000 100 101 ... ..... ..... @rd_pg_rn
1070FRINTX 01100101 .. 000 110 101 ... ..... ..... @rd_pg_rn
1071FRINTI 01100101 .. 000 111 101 ... ..... ..... @rd_pg_rn
1072
ec5b375b
RH
1073# SVE floating-point unary operations
1074FRECPX 01100101 .. 001 100 101 ... ..... ..... @rd_pg_rn
1075FSQRT 01100101 .. 001 101 101 ... ..... ..... @rd_pg_rn
1076
8092c6a3
RH
1077# SVE integer convert to floating-point
1078SCVTF_hh 01100101 01 010 01 0 101 ... ..... ..... @rd_pg_rn_e0
1079SCVTF_sh 01100101 01 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1080SCVTF_dh 01100101 01 010 11 0 101 ... ..... ..... @rd_pg_rn_e0
1081SCVTF_ss 01100101 10 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1082SCVTF_sd 01100101 11 010 00 0 101 ... ..... ..... @rd_pg_rn_e0
1083SCVTF_ds 01100101 11 010 10 0 101 ... ..... ..... @rd_pg_rn_e0
1084SCVTF_dd 01100101 11 010 11 0 101 ... ..... ..... @rd_pg_rn_e0
1085
1086UCVTF_hh 01100101 01 010 01 1 101 ... ..... ..... @rd_pg_rn_e0
1087UCVTF_sh 01100101 01 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1088UCVTF_dh 01100101 01 010 11 1 101 ... ..... ..... @rd_pg_rn_e0
1089UCVTF_ss 01100101 10 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1090UCVTF_sd 01100101 11 010 00 1 101 ... ..... ..... @rd_pg_rn_e0
1091UCVTF_ds 01100101 11 010 10 1 101 ... ..... ..... @rd_pg_rn_e0
1092UCVTF_dd 01100101 11 010 11 1 101 ... ..... ..... @rd_pg_rn_e0
1093
d1822297
RH
1094### SVE Memory - 32-bit Gather and Unsized Contiguous Group
1095
1096# SVE load predicate register
1097LDR_pri 10000101 10 ...... 000 ... ..... 0 .... @pd_rn_i9
1098
1099# SVE load vector register
1100LDR_zri 10000101 10 ...... 010 ... ..... ..... @rd_rn_i9
c4e7c493 1101
68459864
RH
1102# SVE load and broadcast element
1103LD1R_zpri 1000010 .. 1 imm:6 1.. pg:3 rn:5 rd:5 \
1104 &rpri_load dtype=%dtype_23_13 nreg=0
1105
673e9fa6
RH
1106# SVE 32-bit gather load (scalar plus 32-bit unscaled offsets)
1107# SVE 32-bit gather load (scalar plus 32-bit scaled offsets)
1108LD1_zprz 1000010 00 .0 ..... 0.. ... ..... ..... \
1109 @rprr_g_load_xs_u esz=2 msz=0 scale=0
1110LD1_zprz 1000010 01 .. ..... 0.. ... ..... ..... \
1111 @rprr_g_load_xs_u_sc esz=2 msz=1
1112LD1_zprz 1000010 10 .. ..... 01. ... ..... ..... \
1113 @rprr_g_load_xs_sc esz=2 msz=2 u=1
1114
1115# SVE 32-bit gather load (vector plus immediate)
1116LD1_zpiz 1000010 .. 01 ..... 1.. ... ..... ..... \
1117 @rpri_g_load esz=2
1118
c4e7c493
RH
1119### SVE Memory Contiguous Load Group
1120
1121# SVE contiguous load (scalar plus scalar)
1122LD_zprr 1010010 .... ..... 010 ... ..... ..... @rprr_load_dt nreg=0
1123
e2654d75
RH
1124# SVE contiguous first-fault load (scalar plus scalar)
1125LDFF1_zprr 1010010 .... ..... 011 ... ..... ..... @rprr_load_dt nreg=0
1126
c4e7c493
RH
1127# SVE contiguous load (scalar plus immediate)
1128LD_zpri 1010010 .... 0.... 101 ... ..... ..... @rpri_load_dt nreg=0
1129
e2654d75
RH
1130# SVE contiguous non-fault load (scalar plus immediate)
1131LDNF1_zpri 1010010 .... 1.... 101 ... ..... ..... @rpri_load_dt nreg=0
1132
c4e7c493
RH
1133# SVE contiguous non-temporal load (scalar plus scalar)
1134# LDNT1B, LDNT1H, LDNT1W, LDNT1D
1135# SVE load multiple structures (scalar plus scalar)
1136# LD2B, LD2H, LD2W, LD2D; etc.
1137LD_zprr 1010010 .. nreg:2 ..... 110 ... ..... ..... @rprr_load_msz
1138
1139# SVE contiguous non-temporal load (scalar plus immediate)
1140# LDNT1B, LDNT1H, LDNT1W, LDNT1D
1141# SVE load multiple structures (scalar plus immediate)
1142# LD2B, LD2H, LD2W, LD2D; etc.
1143LD_zpri 1010010 .. nreg:2 0.... 111 ... ..... ..... @rpri_load_msz
1a039c7e 1144
05abe304
RH
1145# SVE load and broadcast quadword (scalar plus scalar)
1146LD1RQ_zprr 1010010 .. 00 ..... 000 ... ..... ..... \
1147 @rprr_load_msz nreg=0
12c563f6
RH
1148LD1RO_zprr 1010010 .. 01 ..... 000 ... ..... ..... \
1149 @rprr_load_msz nreg=0
05abe304
RH
1150
1151# SVE load and broadcast quadword (scalar plus immediate)
1152# LD1RQB, LD1RQH, LD1RQS, LD1RQD
1153LD1RQ_zpri 1010010 .. 00 0.... 001 ... ..... ..... \
1154 @rpri_load_msz nreg=0
12c563f6
RH
1155LD1RO_zpri 1010010 .. 01 0.... 001 ... ..... ..... \
1156 @rpri_load_msz nreg=0
05abe304 1157
dec6cf6b
RH
1158# SVE 32-bit gather prefetch (scalar plus 32-bit scaled offsets)
1159PRF 1000010 00 -1 ----- 0-- --- ----- 0 ----
1160
1161# SVE 32-bit gather prefetch (vector plus immediate)
1162PRF 1000010 -- 00 ----- 111 --- ----- 0 ----
1163
1164# SVE contiguous prefetch (scalar plus immediate)
1165PRF 1000010 11 1- ----- 0-- --- ----- 0 ----
1166
1167# SVE contiguous prefetch (scalar plus scalar)
1168PRF_rr 1000010 -- 00 rm:5 110 --- ----- 0 ----
1169
1170### SVE Memory 64-bit Gather Group
1171
673e9fa6
RH
1172# SVE 64-bit gather load (scalar plus 32-bit unpacked unscaled offsets)
1173# SVE 64-bit gather load (scalar plus 32-bit unpacked scaled offsets)
1174LD1_zprz 1100010 00 .0 ..... 0.. ... ..... ..... \
1175 @rprr_g_load_xs_u esz=3 msz=0 scale=0
1176LD1_zprz 1100010 01 .. ..... 0.. ... ..... ..... \
1177 @rprr_g_load_xs_u_sc esz=3 msz=1
1178LD1_zprz 1100010 10 .. ..... 0.. ... ..... ..... \
1179 @rprr_g_load_xs_u_sc esz=3 msz=2
1180LD1_zprz 1100010 11 .. ..... 01. ... ..... ..... \
1181 @rprr_g_load_xs_sc esz=3 msz=3 u=1
1182
1183# SVE 64-bit gather load (scalar plus 64-bit unscaled offsets)
1184# SVE 64-bit gather load (scalar plus 64-bit scaled offsets)
1185LD1_zprz 1100010 00 10 ..... 1.. ... ..... ..... \
1186 @rprr_g_load_u esz=3 msz=0 scale=0
1187LD1_zprz 1100010 01 1. ..... 1.. ... ..... ..... \
1188 @rprr_g_load_u_sc esz=3 msz=1
1189LD1_zprz 1100010 10 1. ..... 1.. ... ..... ..... \
1190 @rprr_g_load_u_sc esz=3 msz=2
1191LD1_zprz 1100010 11 1. ..... 11. ... ..... ..... \
1192 @rprr_g_load_sc esz=3 msz=3 u=1
1193
1194# SVE 64-bit gather load (vector plus immediate)
1195LD1_zpiz 1100010 .. 01 ..... 1.. ... ..... ..... \
1196 @rpri_g_load esz=3
1197
dec6cf6b
RH
1198# SVE 64-bit gather prefetch (scalar plus 64-bit scaled offsets)
1199PRF 1100010 00 11 ----- 1-- --- ----- 0 ----
1200
1201# SVE 64-bit gather prefetch (scalar plus unpacked 32-bit scaled offsets)
1202PRF 1100010 00 -1 ----- 0-- --- ----- 0 ----
1203
1204# SVE 64-bit gather prefetch (vector plus immediate)
1205PRF 1100010 -- 00 ----- 111 --- ----- 0 ----
1206
1a039c7e
RH
1207### SVE Memory Store Group
1208
5047c204
RH
1209# SVE store predicate register
1210STR_pri 1110010 11 0. ..... 000 ... ..... 0 .... @pd_rn_i9
1211
1212# SVE store vector register
1213STR_zri 1110010 11 0. ..... 010 ... ..... ..... @rd_rn_i9
1214
1a039c7e
RH
1215# SVE contiguous store (scalar plus immediate)
1216# ST1B, ST1H, ST1W, ST1D; require msz <= esz
1217ST_zpri 1110010 .. esz:2 0.... 111 ... ..... ..... \
1218 @rpri_store_msz nreg=0
1219
1220# SVE contiguous store (scalar plus scalar)
1221# ST1B, ST1H, ST1W, ST1D; require msz <= esz
1222# Enumerate msz lest we conflict with STR_zri.
1223ST_zprr 1110010 00 .. ..... 010 ... ..... ..... \
1224 @rprr_store_esz_n0 msz=0
1225ST_zprr 1110010 01 .. ..... 010 ... ..... ..... \
1226 @rprr_store_esz_n0 msz=1
1227ST_zprr 1110010 10 .. ..... 010 ... ..... ..... \
1228 @rprr_store_esz_n0 msz=2
1229ST_zprr 1110010 11 11 ..... 010 ... ..... ..... \
1230 @rprr_store msz=3 esz=3 nreg=0
1231
1232# SVE contiguous non-temporal store (scalar plus immediate) (nreg == 0)
1233# SVE store multiple structures (scalar plus immediate) (nreg != 0)
1234ST_zpri 1110010 .. nreg:2 1.... 111 ... ..... ..... \
1235 @rpri_store_msz esz=%size_23
1236
1237# SVE contiguous non-temporal store (scalar plus scalar) (nreg == 0)
1238# SVE store multiple structures (scalar plus scalar) (nreg != 0)
1239ST_zprr 1110010 msz:2 nreg:2 ..... 011 ... ..... ..... \
1240 @rprr_store esz=%size_23
f6dbf62a
RH
1241
1242# SVE 32-bit scatter store (scalar plus 32-bit scaled offsets)
1243# Require msz > 0 && msz <= esz.
1244ST1_zprz 1110010 .. 11 ..... 100 ... ..... ..... \
1245 @rprr_scatter_store xs=0 esz=2 scale=1
1246ST1_zprz 1110010 .. 11 ..... 110 ... ..... ..... \
1247 @rprr_scatter_store xs=1 esz=2 scale=1
1248
1249# SVE 32-bit scatter store (scalar plus 32-bit unscaled offsets)
1250# Require msz <= esz.
1251ST1_zprz 1110010 .. 10 ..... 100 ... ..... ..... \
1252 @rprr_scatter_store xs=0 esz=2 scale=0
1253ST1_zprz 1110010 .. 10 ..... 110 ... ..... ..... \
1254 @rprr_scatter_store xs=1 esz=2 scale=0
1255
1256# SVE 64-bit scatter store (scalar plus 64-bit scaled offset)
1257# Require msz > 0
1258ST1_zprz 1110010 .. 01 ..... 101 ... ..... ..... \
1259 @rprr_scatter_store xs=2 esz=3 scale=1
1260
1261# SVE 64-bit scatter store (scalar plus 64-bit unscaled offset)
1262ST1_zprz 1110010 .. 00 ..... 101 ... ..... ..... \
1263 @rprr_scatter_store xs=2 esz=3 scale=0
1264
408ecde9
RH
1265# SVE 64-bit scatter store (vector plus immediate)
1266ST1_zpiz 1110010 .. 10 ..... 101 ... ..... ..... \
1267 @rpri_scatter_store esz=3
1268
1269# SVE 32-bit scatter store (vector plus immediate)
1270ST1_zpiz 1110010 .. 11 ..... 101 ... ..... ..... \
1271 @rpri_scatter_store esz=2
1272
f6dbf62a
RH
1273# SVE 64-bit scatter store (scalar plus unpacked 32-bit scaled offset)
1274# Require msz > 0
1275ST1_zprz 1110010 .. 01 ..... 100 ... ..... ..... \
1276 @rprr_scatter_store xs=0 esz=3 scale=1
1277ST1_zprz 1110010 .. 01 ..... 110 ... ..... ..... \
1278 @rprr_scatter_store xs=1 esz=3 scale=1
1279
1280# SVE 64-bit scatter store (scalar plus unpacked 32-bit unscaled offset)
1281ST1_zprz 1110010 .. 00 ..... 100 ... ..... ..... \
1282 @rprr_scatter_store xs=0 esz=3 scale=0
1283ST1_zprz 1110010 .. 00 ..... 110 ... ..... ..... \
1284 @rprr_scatter_store xs=1 esz=3 scale=0
5dad1ba5
RH
1285
1286#### SVE2 Support
1287
1288### SVE2 Integer Multiply - Unpredicated
1289
1290# SVE2 integer multiply vectors (unpredicated)
1291MUL_zzz 00000100 .. 1 ..... 0110 00 ..... ..... @rd_rn_rm
1292SMULH_zzz 00000100 .. 1 ..... 0110 10 ..... ..... @rd_rn_rm
1293UMULH_zzz 00000100 .. 1 ..... 0110 11 ..... ..... @rd_rn_rm
1294PMUL_zzz 00000100 00 1 ..... 0110 01 ..... ..... @rd_rn_rm_e0
d4b1e59d 1295
169d7c58
RH
1296# SVE2 signed saturating doubling multiply high (unpredicated)
1297SQDMULH_zzz 00000100 .. 1 ..... 0111 00 ..... ..... @rd_rn_rm
1298SQRDMULH_zzz 00000100 .. 1 ..... 0111 01 ..... ..... @rd_rn_rm
1299
d4b1e59d
RH
1300### SVE2 Integer - Predicated
1301
1302SADALP_zpzz 01000100 .. 000 100 101 ... ..... ..... @rdm_pg_rn
1303UADALP_zpzz 01000100 .. 000 101 101 ... ..... ..... @rdm_pg_rn
db366da8
RH
1304
1305### SVE2 integer unary operations (predicated)
1306
1307URECPE 01000100 .. 000 000 101 ... ..... ..... @rd_pg_rn
1308URSQRTE 01000100 .. 000 001 101 ... ..... ..... @rd_pg_rn
1309SQABS 01000100 .. 001 000 101 ... ..... ..... @rd_pg_rn
1310SQNEG 01000100 .. 001 001 101 ... ..... ..... @rd_pg_rn
45d9503d
RH
1311
1312### SVE2 saturating/rounding bitwise shift left (predicated)
1313
1314SRSHL 01000100 .. 000 010 100 ... ..... ..... @rdn_pg_rm
1315URSHL 01000100 .. 000 011 100 ... ..... ..... @rdn_pg_rm
1316SRSHL 01000100 .. 000 110 100 ... ..... ..... @rdm_pg_rn # SRSHLR
1317URSHL 01000100 .. 000 111 100 ... ..... ..... @rdm_pg_rn # URSHLR
1318
1319SQSHL 01000100 .. 001 000 100 ... ..... ..... @rdn_pg_rm
1320UQSHL 01000100 .. 001 001 100 ... ..... ..... @rdn_pg_rm
1321SQSHL 01000100 .. 001 100 100 ... ..... ..... @rdm_pg_rn # SQSHLR
1322UQSHL 01000100 .. 001 101 100 ... ..... ..... @rdm_pg_rn # UQSHLR
1323
1324SQRSHL 01000100 .. 001 010 100 ... ..... ..... @rdn_pg_rm
1325UQRSHL 01000100 .. 001 011 100 ... ..... ..... @rdn_pg_rm
1326SQRSHL 01000100 .. 001 110 100 ... ..... ..... @rdm_pg_rn # SQRSHLR
1327UQRSHL 01000100 .. 001 111 100 ... ..... ..... @rdm_pg_rn # UQRSHLR
a47dc220
RH
1328
1329### SVE2 integer halving add/subtract (predicated)
1330
1331SHADD 01000100 .. 010 000 100 ... ..... ..... @rdn_pg_rm
1332UHADD 01000100 .. 010 001 100 ... ..... ..... @rdn_pg_rm
1333SHSUB 01000100 .. 010 010 100 ... ..... ..... @rdn_pg_rm
1334UHSUB 01000100 .. 010 011 100 ... ..... ..... @rdn_pg_rm
1335SRHADD 01000100 .. 010 100 100 ... ..... ..... @rdn_pg_rm
1336URHADD 01000100 .. 010 101 100 ... ..... ..... @rdn_pg_rm
1337SHSUB 01000100 .. 010 110 100 ... ..... ..... @rdm_pg_rn # SHSUBR
1338UHSUB 01000100 .. 010 111 100 ... ..... ..... @rdm_pg_rn # UHSUBR
8597dc8b
RH
1339
1340### SVE2 integer pairwise arithmetic
1341
1342ADDP 01000100 .. 010 001 101 ... ..... ..... @rdn_pg_rm
1343SMAXP 01000100 .. 010 100 101 ... ..... ..... @rdn_pg_rm
1344UMAXP 01000100 .. 010 101 101 ... ..... ..... @rdn_pg_rm
1345SMINP 01000100 .. 010 110 101 ... ..... ..... @rdn_pg_rm
1346UMINP 01000100 .. 010 111 101 ... ..... ..... @rdn_pg_rm
4f07fbeb
RH
1347
1348### SVE2 saturating add/subtract (predicated)
1349
1350SQADD_zpzz 01000100 .. 011 000 100 ... ..... ..... @rdn_pg_rm
1351UQADD_zpzz 01000100 .. 011 001 100 ... ..... ..... @rdn_pg_rm
1352SQSUB_zpzz 01000100 .. 011 010 100 ... ..... ..... @rdn_pg_rm
1353UQSUB_zpzz 01000100 .. 011 011 100 ... ..... ..... @rdn_pg_rm
1354SUQADD 01000100 .. 011 100 100 ... ..... ..... @rdn_pg_rm
1355USQADD 01000100 .. 011 101 100 ... ..... ..... @rdn_pg_rm
1356SQSUB_zpzz 01000100 .. 011 110 100 ... ..... ..... @rdm_pg_rn # SQSUBR
1357UQSUB_zpzz 01000100 .. 011 111 100 ... ..... ..... @rdm_pg_rn # UQSUBR
0ce1dda8
RH
1358
1359#### SVE2 Widening Integer Arithmetic
1360
1361## SVE2 integer add/subtract long
1362
1363SADDLB 01000101 .. 0 ..... 00 0000 ..... ..... @rd_rn_rm
1364SADDLT 01000101 .. 0 ..... 00 0001 ..... ..... @rd_rn_rm
1365UADDLB 01000101 .. 0 ..... 00 0010 ..... ..... @rd_rn_rm
1366UADDLT 01000101 .. 0 ..... 00 0011 ..... ..... @rd_rn_rm
1367
1368SSUBLB 01000101 .. 0 ..... 00 0100 ..... ..... @rd_rn_rm
1369SSUBLT 01000101 .. 0 ..... 00 0101 ..... ..... @rd_rn_rm
1370USUBLB 01000101 .. 0 ..... 00 0110 ..... ..... @rd_rn_rm
1371USUBLT 01000101 .. 0 ..... 00 0111 ..... ..... @rd_rn_rm
1372
1373SABDLB 01000101 .. 0 ..... 00 1100 ..... ..... @rd_rn_rm
1374SABDLT 01000101 .. 0 ..... 00 1101 ..... ..... @rd_rn_rm
1375UABDLB 01000101 .. 0 ..... 00 1110 ..... ..... @rd_rn_rm
1376UABDLT 01000101 .. 0 ..... 00 1111 ..... ..... @rd_rn_rm
daec426b
RH
1377
1378## SVE2 integer add/subtract interleaved long
1379
1380SADDLBT 01000101 .. 0 ..... 1000 00 ..... ..... @rd_rn_rm
1381SSUBLBT 01000101 .. 0 ..... 1000 10 ..... ..... @rd_rn_rm
1382SSUBLTB 01000101 .. 0 ..... 1000 11 ..... ..... @rd_rn_rm
81fccf09
RH
1383
1384## SVE2 integer add/subtract wide
1385
1386SADDWB 01000101 .. 0 ..... 010 000 ..... ..... @rd_rn_rm
1387SADDWT 01000101 .. 0 ..... 010 001 ..... ..... @rd_rn_rm
1388UADDWB 01000101 .. 0 ..... 010 010 ..... ..... @rd_rn_rm
1389UADDWT 01000101 .. 0 ..... 010 011 ..... ..... @rd_rn_rm
1390
1391SSUBWB 01000101 .. 0 ..... 010 100 ..... ..... @rd_rn_rm
1392SSUBWT 01000101 .. 0 ..... 010 101 ..... ..... @rd_rn_rm
1393USUBWB 01000101 .. 0 ..... 010 110 ..... ..... @rd_rn_rm
1394USUBWT 01000101 .. 0 ..... 010 111 ..... ..... @rd_rn_rm
69ccc099
RH
1395
1396## SVE2 integer multiply long
1397
1398SQDMULLB_zzz 01000101 .. 0 ..... 011 000 ..... ..... @rd_rn_rm
1399SQDMULLT_zzz 01000101 .. 0 ..... 011 001 ..... ..... @rd_rn_rm
e3a56131
RH
1400PMULLB 01000101 .. 0 ..... 011 010 ..... ..... @rd_rn_rm
1401PMULLT 01000101 .. 0 ..... 011 011 ..... ..... @rd_rn_rm
69ccc099
RH
1402SMULLB_zzz 01000101 .. 0 ..... 011 100 ..... ..... @rd_rn_rm
1403SMULLT_zzz 01000101 .. 0 ..... 011 101 ..... ..... @rd_rn_rm
1404UMULLB_zzz 01000101 .. 0 ..... 011 110 ..... ..... @rd_rn_rm
1405UMULLT_zzz 01000101 .. 0 ..... 011 111 ..... ..... @rd_rn_rm
4269fef1
RH
1406
1407## SVE2 bitwise shift left long
1408
1409# Note bit23 == 0 is handled by esz > 0 in do_sve2_shll_tb.
1410SSHLLB 01000101 .. 0 ..... 1010 00 ..... ..... @rd_rn_tszimm_shl
1411SSHLLT 01000101 .. 0 ..... 1010 01 ..... ..... @rd_rn_tszimm_shl
1412USHLLB 01000101 .. 0 ..... 1010 10 ..... ..... @rd_rn_tszimm_shl
1413USHLLT 01000101 .. 0 ..... 1010 11 ..... ..... @rd_rn_tszimm_shl
2df3ca55
RH
1414
1415## SVE2 bitwise exclusive-or interleaved
1416
1417EORBT 01000101 .. 0 ..... 10010 0 ..... ..... @rd_rn_rm
1418EORTB 01000101 .. 0 ..... 10010 1 ..... ..... @rd_rn_rm
cb9c33b8 1419
2323c5ff
RH
1420## SVE integer matrix multiply accumulate
1421
1422SMMLA 01000101 00 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0
1423USMMLA 01000101 10 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0
1424UMMLA 01000101 11 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0
1425
cb9c33b8
RH
1426## SVE2 bitwise permute
1427
1428BEXT 01000101 .. 0 ..... 1011 00 ..... ..... @rd_rn_rm
1429BDEP 01000101 .. 0 ..... 1011 01 ..... ..... @rd_rn_rm
1430BGRP 01000101 .. 0 ..... 1011 10 ..... ..... @rd_rn_rm
ed4a6387
RH
1431
1432#### SVE2 Accumulate
1433
1434## SVE2 complex integer add
1435
1436CADD_rot90 01000101 .. 00000 0 11011 0 ..... ..... @rdn_rm
1437CADD_rot270 01000101 .. 00000 0 11011 1 ..... ..... @rdn_rm
1438SQCADD_rot90 01000101 .. 00000 1 11011 0 ..... ..... @rdn_rm
1439SQCADD_rot270 01000101 .. 00000 1 11011 1 ..... ..... @rdn_rm
38650638
RH
1440
1441## SVE2 integer absolute difference and accumulate long
1442
1443SABALB 01000101 .. 0 ..... 1100 00 ..... ..... @rda_rn_rm
1444SABALT 01000101 .. 0 ..... 1100 01 ..... ..... @rda_rn_rm
1445UABALB 01000101 .. 0 ..... 1100 10 ..... ..... @rda_rn_rm
1446UABALT 01000101 .. 0 ..... 1100 11 ..... ..... @rda_rn_rm
b8295dfb
RH
1447
1448## SVE2 integer add/subtract long with carry
1449
1450# ADC and SBC decoded via size in helper dispatch.
1451ADCLB 01000101 .. 0 ..... 11010 0 ..... ..... @rda_rn_rm
1452ADCLT 01000101 .. 0 ..... 11010 1 ..... ..... @rda_rn_rm
a7e3a90e
RH
1453
1454## SVE2 bitwise shift right and accumulate
1455
1456# TODO: Use @rda and %reg_movprfx here.
1457SSRA 01000101 .. 0 ..... 1110 00 ..... ..... @rd_rn_tszimm_shr
1458USRA 01000101 .. 0 ..... 1110 01 ..... ..... @rd_rn_tszimm_shr
1459SRSRA 01000101 .. 0 ..... 1110 10 ..... ..... @rd_rn_tszimm_shr
1460URSRA 01000101 .. 0 ..... 1110 11 ..... ..... @rd_rn_tszimm_shr
fc12b46a
RH
1461
1462## SVE2 bitwise shift and insert
1463
1464SRI 01000101 .. 0 ..... 11110 0 ..... ..... @rd_rn_tszimm_shr
1465SLI 01000101 .. 0 ..... 11110 1 ..... ..... @rd_rn_tszimm_shl
289a1797
RH
1466
1467## SVE2 integer absolute difference and accumulate
1468
1469# TODO: Use @rda and %reg_movprfx here.
1470SABA 01000101 .. 0 ..... 11111 0 ..... ..... @rd_rn_rm
1471UABA 01000101 .. 0 ..... 11111 1 ..... ..... @rd_rn_rm
5ff2838d
RH
1472
1473#### SVE2 Narrowing
1474
1475## SVE2 saturating extract narrow
1476
1477# Bits 23, 18-16 are zero, limited in the translator via esz < 3 & imm == 0.
1478SQXTNB 01000101 .. 1 ..... 010 000 ..... ..... @rd_rn_tszimm_shl
1479SQXTNT 01000101 .. 1 ..... 010 001 ..... ..... @rd_rn_tszimm_shl
1480UQXTNB 01000101 .. 1 ..... 010 010 ..... ..... @rd_rn_tszimm_shl
1481UQXTNT 01000101 .. 1 ..... 010 011 ..... ..... @rd_rn_tszimm_shl
1482SQXTUNB 01000101 .. 1 ..... 010 100 ..... ..... @rd_rn_tszimm_shl
1483SQXTUNT 01000101 .. 1 ..... 010 101 ..... ..... @rd_rn_tszimm_shl
b87dbeeb 1484
46d111b2
RH
1485## SVE2 bitwise shift right narrow
1486
1487# Bit 23 == 0 is handled by esz > 0 in the translator.
81fd3e6e
RH
1488SQSHRUNB 01000101 .. 1 ..... 00 0000 ..... ..... @rd_rn_tszimm_shr
1489SQSHRUNT 01000101 .. 1 ..... 00 0001 ..... ..... @rd_rn_tszimm_shr
1490SQRSHRUNB 01000101 .. 1 ..... 00 0010 ..... ..... @rd_rn_tszimm_shr
1491SQRSHRUNT 01000101 .. 1 ..... 00 0011 ..... ..... @rd_rn_tszimm_shr
46d111b2
RH
1492SHRNB 01000101 .. 1 ..... 00 0100 ..... ..... @rd_rn_tszimm_shr
1493SHRNT 01000101 .. 1 ..... 00 0101 ..... ..... @rd_rn_tszimm_shr
1494RSHRNB 01000101 .. 1 ..... 00 0110 ..... ..... @rd_rn_tszimm_shr
1495RSHRNT 01000101 .. 1 ..... 00 0111 ..... ..... @rd_rn_tszimm_shr
743bb147
RH
1496SQSHRNB 01000101 .. 1 ..... 00 1000 ..... ..... @rd_rn_tszimm_shr
1497SQSHRNT 01000101 .. 1 ..... 00 1001 ..... ..... @rd_rn_tszimm_shr
1498SQRSHRNB 01000101 .. 1 ..... 00 1010 ..... ..... @rd_rn_tszimm_shr
1499SQRSHRNT 01000101 .. 1 ..... 00 1011 ..... ..... @rd_rn_tszimm_shr
c13418da
RH
1500UQSHRNB 01000101 .. 1 ..... 00 1100 ..... ..... @rd_rn_tszimm_shr
1501UQSHRNT 01000101 .. 1 ..... 00 1101 ..... ..... @rd_rn_tszimm_shr
1502UQRSHRNB 01000101 .. 1 ..... 00 1110 ..... ..... @rd_rn_tszimm_shr
1503UQRSHRNT 01000101 .. 1 ..... 00 1111 ..... ..... @rd_rn_tszimm_shr
46d111b2 1504
40d5ea50
SL
1505## SVE2 integer add/subtract narrow high part
1506
1507ADDHNB 01000101 .. 1 ..... 011 000 ..... ..... @rd_rn_rm
1508ADDHNT 01000101 .. 1 ..... 011 001 ..... ..... @rd_rn_rm
0ea3ff02
SL
1509RADDHNB 01000101 .. 1 ..... 011 010 ..... ..... @rd_rn_rm
1510RADDHNT 01000101 .. 1 ..... 011 011 ..... ..... @rd_rn_rm
c3cd6766
SL
1511SUBHNB 01000101 .. 1 ..... 011 100 ..... ..... @rd_rn_rm
1512SUBHNT 01000101 .. 1 ..... 011 101 ..... ..... @rd_rn_rm
e9443d10
SL
1513RSUBHNB 01000101 .. 1 ..... 011 110 ..... ..... @rd_rn_rm
1514RSUBHNT 01000101 .. 1 ..... 011 111 ..... ..... @rd_rn_rm
40d5ea50 1515
e0ae6ec3
SL
1516### SVE2 Character Match
1517
1518MATCH 01000101 .. 1 ..... 100 ... ..... 0 .... @pd_pg_rn_rm
1519NMATCH 01000101 .. 1 ..... 100 ... ..... 1 .... @pd_pg_rn_rm
1520
7d47ac94
SL
1521### SVE2 Histogram Computation
1522
1523HISTCNT 01000101 .. 1 ..... 110 ... ..... ..... @rd_pg_rn_rm
1524HISTSEG 01000101 .. 1 ..... 101 000 ..... ..... @rd_rn_rm
1525
b87dbeeb
SL
1526## SVE2 floating-point pairwise operations
1527
1528FADDP 01100100 .. 010 00 0 100 ... ..... ..... @rdn_pg_rm
1529FMAXNMP 01100100 .. 010 10 0 100 ... ..... ..... @rdn_pg_rm
1530FMINNMP 01100100 .. 010 10 1 100 ... ..... ..... @rdn_pg_rm
1531FMAXP 01100100 .. 010 11 0 100 ... ..... ..... @rdn_pg_rm
1532FMINP 01100100 .. 010 11 1 100 ... ..... ..... @rdn_pg_rm
bfc9307e
RH
1533
1534#### SVE Integer Multiply-Add (unpredicated)
1535
1536## SVE2 saturating multiply-add long
1537
1538SQDMLALB_zzzw 01000100 .. 0 ..... 0110 00 ..... ..... @rda_rn_rm
1539SQDMLALT_zzzw 01000100 .. 0 ..... 0110 01 ..... ..... @rda_rn_rm
1540SQDMLSLB_zzzw 01000100 .. 0 ..... 0110 10 ..... ..... @rda_rn_rm
1541SQDMLSLT_zzzw 01000100 .. 0 ..... 0110 11 ..... ..... @rda_rn_rm
1542
1543## SVE2 saturating multiply-add interleaved long
1544
1545SQDMLALBT 01000100 .. 0 ..... 00001 0 ..... ..... @rda_rn_rm
1546SQDMLSLBT 01000100 .. 0 ..... 00001 1 ..... ..... @rda_rn_rm
ab3ddf31
RH
1547
1548## SVE2 saturating multiply-add high
1549
1550SQRDMLAH_zzzz 01000100 .. 0 ..... 01110 0 ..... ..... @rda_rn_rm
1551SQRDMLSH_zzzz 01000100 .. 0 ..... 01110 1 ..... ..... @rda_rn_rm
45a32e80
RH
1552
1553## SVE2 integer multiply-add long
1554
1555SMLALB_zzzw 01000100 .. 0 ..... 010 000 ..... ..... @rda_rn_rm
1556SMLALT_zzzw 01000100 .. 0 ..... 010 001 ..... ..... @rda_rn_rm
1557UMLALB_zzzw 01000100 .. 0 ..... 010 010 ..... ..... @rda_rn_rm
1558UMLALT_zzzw 01000100 .. 0 ..... 010 011 ..... ..... @rda_rn_rm
1559SMLSLB_zzzw 01000100 .. 0 ..... 010 100 ..... ..... @rda_rn_rm
1560SMLSLT_zzzw 01000100 .. 0 ..... 010 101 ..... ..... @rda_rn_rm
1561UMLSLB_zzzw 01000100 .. 0 ..... 010 110 ..... ..... @rda_rn_rm
1562UMLSLT_zzzw 01000100 .. 0 ..... 010 111 ..... ..... @rda_rn_rm
d782d3ca
RH
1563
1564## SVE2 complex integer multiply-add
1565
1566CMLA_zzzz 01000100 esz:2 0 rm:5 0010 rot:2 rn:5 rd:5 ra=%reg_movprfx
1567SQRDCMLAH_zzzz 01000100 esz:2 0 rm:5 0011 rot:2 rn:5 rd:5 ra=%reg_movprfx
6ebca45f 1568
6a98cb2a
RH
1569## SVE mixed sign dot product
1570
1571USDOT_zzzz 01000100 .. 0 ..... 011 110 ..... ..... @rda_rn_rm
1572
4f26756b 1573### SVE2 floating point matrix multiply accumulate
81266a1f
RH
1574{
1575 BFMMLA 01100100 01 1 ..... 111 001 ..... ..... @rda_rn_rm_e0
1576 FMMLA 01100100 .. 1 ..... 111 001 ..... ..... @rda_rn_rm
1577}
4f26756b 1578
cf327449
SL
1579### SVE2 Memory Gather Load Group
1580
b17ab470 1581# SVE2 64-bit gather non-temporal load (scalar plus 64-bit unscaled offsets)
cf327449 1582LDNT1_zprz 1100010 msz:2 00 rm:5 1 u:1 0 pg:3 rn:5 rd:5 \
b17ab470 1583 &rprr_gather_load xs=2 esz=3 scale=0 ff=0
cf327449
SL
1584
1585# SVE2 32-bit gather non-temporal load (scalar plus 32-bit unscaled offsets)
1586LDNT1_zprz 1000010 msz:2 00 rm:5 10 u:1 pg:3 rn:5 rd:5 \
1587 &rprr_gather_load xs=0 esz=2 scale=0 ff=0
1588
6ebca45f
SL
1589### SVE2 Memory Store Group
1590
1591# SVE2 64-bit scatter non-temporal store (vector plus scalar)
1592STNT1_zprz 1110010 .. 00 ..... 001 ... ..... ..... \
1593 @rprr_scatter_store xs=2 esz=3 scale=0
1594
1595# SVE2 32-bit scatter non-temporal store (vector plus scalar)
1596STNT1_zprz 1110010 .. 10 ..... 001 ... ..... ..... \
1597 @rprr_scatter_store xs=0 esz=2 scale=0
b2bcd1be
RH
1598
1599### SVE2 Crypto Extensions
1600
1601# SVE2 crypto unary operations
1602# AESMC and AESIMC
1603AESMC 01000101 00 10000011100 decrypt:1 00000 rd:5
3cc7a88e
RH
1604
1605# SVE2 crypto destructive binary operations
1606AESE 01000101 00 10001 0 11100 0 ..... ..... @rdn_rm_e0
1607AESD 01000101 00 10001 0 11100 1 ..... ..... @rdn_rm_e0
1608SM4E 01000101 00 10001 1 11100 0 ..... ..... @rdn_rm_e0
3358eb3f
RH
1609
1610# SVE2 crypto constructive binary operations
1611SM4EKEY 01000101 00 1 ..... 11110 0 ..... ..... @rd_rn_rm_e0
1612RAX1 01000101 00 1 ..... 11110 1 ..... ..... @rd_rn_rm_e0
5c1b7226
RH
1613
1614### SVE2 floating-point convert precision odd elements
95365277
SL
1615FCVTXNT_ds 01100100 00 0010 10 101 ... ..... ..... @rd_pg_rn_e0
1616FCVTX_ds 01100101 00 0010 10 101 ... ..... ..... @rd_pg_rn_e0
5c1b7226 1617FCVTNT_sh 01100100 10 0010 00 101 ... ..... ..... @rd_pg_rn_e0
d29b17ca 1618BFCVTNT 01100100 10 0010 10 101 ... ..... ..... @rd_pg_rn_e0
83c2523f 1619FCVTLT_hs 01100100 10 0010 01 101 ... ..... ..... @rd_pg_rn_e0
5c1b7226 1620FCVTNT_ds 01100100 11 0010 10 101 ... ..... ..... @rd_pg_rn_e0
83c2523f 1621FCVTLT_sd 01100100 11 0010 11 101 ... ..... ..... @rd_pg_rn_e0
631be02e
SL
1622
1623### SVE2 floating-point convert to integer
1624FLOGB 01100101 00 011 esz:2 0101 pg:3 rn:5 rd:5 &rpr_esz
50d102bd
SL
1625
1626### SVE2 floating-point multiply-add long (vectors)
1627FMLALB_zzzw 01100100 10 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0
1628FMLALT_zzzw 01100100 10 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_e0
1629FMLSLB_zzzw 01100100 10 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_e0
1630FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_e0
1631
5693887f
RH
1632BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0
1633BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_e0
1634
cb8657f7
RH
1635### SVE2 floating-point bfloat16 dot-product
1636BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0
1637
50d102bd
SL
1638### SVE2 floating-point multiply-add long (indexed)
1639FMLALB_zzxw 01100100 10 1 ..... 0100.0 ..... ..... @rrxr_3a esz=2
1640FMLALT_zzxw 01100100 10 1 ..... 0100.1 ..... ..... @rrxr_3a esz=2
1641FMLSLB_zzxw 01100100 10 1 ..... 0110.0 ..... ..... @rrxr_3a esz=2
1642FMLSLT_zzxw 01100100 10 1 ..... 0110.1 ..... ..... @rrxr_3a esz=2
458d0ab6
RH
1643BFMLALB_zzxw 01100100 11 1 ..... 0100.0 ..... ..... @rrxr_3a esz=2
1644BFMLALT_zzxw 01100100 11 1 ..... 0100.1 ..... ..... @rrxr_3a esz=2
83914478
RH
1645
1646### SVE2 floating-point bfloat16 dot-product (indexed)
1647BFDOT_zzxz 01100100 01 1 ..... 010000 ..... ..... @rrxr_2 esz=2