xref: /qemu/target/arm/tcg/mve.decode (revision 4773e74e5f58dbf5637a27f37cd3b95b0ee33ac8)
16390eed4SPeter Maydell# M-profile MVE instruction descriptions
26390eed4SPeter Maydell#
36390eed4SPeter Maydell#  Copyright (c) 2021 Linaro, Ltd
46390eed4SPeter Maydell#
56390eed4SPeter Maydell# This library is free software; you can redistribute it and/or
66390eed4SPeter Maydell# modify it under the terms of the GNU Lesser General Public
76390eed4SPeter Maydell# License as published by the Free Software Foundation; either
86390eed4SPeter Maydell# version 2.1 of the License, or (at your option) any later version.
96390eed4SPeter Maydell#
106390eed4SPeter Maydell# This library is distributed in the hope that it will be useful,
116390eed4SPeter Maydell# but WITHOUT ANY WARRANTY; without even the implied warranty of
126390eed4SPeter Maydell# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
136390eed4SPeter Maydell# Lesser General Public License for more details.
146390eed4SPeter Maydell#
156390eed4SPeter Maydell# You should have received a copy of the GNU Lesser General Public
166390eed4SPeter Maydell# License along with this library; if not, see <http://www.gnu.org/licenses/>.
176390eed4SPeter Maydell
186390eed4SPeter Maydell#
196390eed4SPeter Maydell# This file is processed by scripts/decodetree.py
206390eed4SPeter Maydell#
21507b6a50SPeter Maydell
22507b6a50SPeter Maydell%qd 22:1 13:3
230f0f2bd5SPeter Maydell%qm 5:1 1:3
24ab59362fSPeter Maydell%qn 7:1 17:3
25507b6a50SPeter Maydell
26a8890353SPeter Maydell# VQDMULL has size in bit 28: 0 for 16 bit, 1 for 32 bit
27a8890353SPeter Maydell%size_28 28:1 !function=plus_1
28a8890353SPeter Maydell
291e35cd91SPeter Maydell# 2 operand fp insns have size in bit 20: 1 for 16 bit, 0 for 32 bit,
301e35cd91SPeter Maydell# like Neon FP insns.
311e35cd91SPeter Maydell%2op_fp_size 20:1 !function=neon_3same_fp_size
32104afc68SPeter Maydell# VCADD is an exception, where bit 20 is 0 for 16 bit and 1 for 32 bit
33104afc68SPeter Maydell%2op_fp_size_rev 20:1 !function=plus_1
34abfe39b2SPeter Maydell# FP scalars have size in bit 28, 1 for 16 bit, 0 for 32 bit
35abfe39b2SPeter Maydell%2op_fp_scalar_size 28:1 !function=neon_3same_fp_size
361e35cd91SPeter Maydell
37eab84139SPeter Maydell# 1imm format immediate
38eab84139SPeter Maydell%imm_28_16_0 28:1 16:3 0:4
39eab84139SPeter Maydell
402fc6b751SPeter Maydell&vldr_vstr rn qd imm p a w size l u
410f0f2bd5SPeter Maydell&1op qd qm size
4268245e44SPeter Maydell&2op qd qm qn size
43e51896b3SPeter Maydell&2scalar qd qn rm size
44eab84139SPeter Maydell&1imm qd imm cmode op
45f9ed6174SPeter Maydell&2shift qd qm shift size
46395b92d5SPeter Maydell&vidup qd rn size imm
47395b92d5SPeter Maydell&viwdup qd rn rm size imm
48eff5d9a9SPeter Maydell&vcmp qm qn size mask
49cce81873SPeter Maydell&vcmp_scalar qn rm size mask
501b15a97dSPeter Maydell&shl_scalar qda rm size
51688ba4cfSPeter Maydell&vmaxv qm rda size
527f061c0aSPeter Maydell&vabav qn qm rda size
53dc18628bSPeter Maydell&vldst_sg qd qm rn size msize os
54fac80f08SPeter Maydell&vldst_sg_imm qd qm a w imm
55075e7e97SPeter Maydell&vldst_il qd rn size pat w
56dc18628bSPeter Maydell
57dc18628bSPeter Maydell# scatter-gather memory size is in bits 6:4
58dc18628bSPeter Maydell%sg_msize 6:1 4:1
59507b6a50SPeter Maydell
602fc6b751SPeter Maydell@vldr_vstr ....... . . . . l:1 rn:4 ... ...... imm:7 &vldr_vstr qd=%qd u=0
612fc6b751SPeter Maydell# Note that both Rn and Qd are 3 bits only (no D bit)
622fc6b751SPeter Maydell@vldst_wn ... u:1 ... . . . . l:1 . rn:3 qd:3 . ... .. imm:7 &vldr_vstr
63507b6a50SPeter Maydell
64dc18628bSPeter Maydell@vldst_sg .... .... .... rn:4 .... ... size:2 ... ... os:1 &vldst_sg \
65dc18628bSPeter Maydell          qd=%qd qm=%qm msize=%sg_msize
66dc18628bSPeter Maydell
67fac80f08SPeter Maydell# Qm is in the fields usually labeled Qn
68fac80f08SPeter Maydell@vldst_sg_imm .... .... a:1 . w:1 . .... .... .... . imm:7 &vldst_sg_imm \
69fac80f08SPeter Maydell              qd=%qd qm=%qn
70fac80f08SPeter Maydell
71075e7e97SPeter Maydell# Deinterleaving load/interleaving store
72075e7e97SPeter Maydell@vldst_il .... .... .. w:1 . rn:4 .... ... size:2 pat:2 ..... &vldst_il \
73075e7e97SPeter Maydell          qd=%qd
74075e7e97SPeter Maydell
750f0f2bd5SPeter Maydell@1op .... .... .... size:2 .. .... .... .... .... &1op qd=%qd qm=%qm
768abd3c80SPeter Maydell@1op_nosz .... .... .... .... .... .... .... .... &1op qd=%qd qm=%qm size=0
779333fe4dSPeter Maydell@2op .... .... .. size:2 .... .... .... .... .... &2op qd=%qd qm=%qm qn=%qn
7868245e44SPeter Maydell@2op_nosz .... .... .... .... .... .... .... .... &2op qd=%qd qm=%qm qn=%qn size=0
7943364321SPeter Maydell@2op_sz28 .... .... .... .... .... .... .... .... &2op qd=%qd qm=%qm qn=%qn \
8043364321SPeter Maydell     size=%size_28
81eab84139SPeter Maydell@1imm .... .... .... .... .... cmode:4 .. op:1 . .... &1imm qd=%qd imm=%imm_28_16_0
820f0f2bd5SPeter Maydell
83483da661SPeter Maydell# The _rev suffix indicates that Vn and Vm are reversed. This is
84483da661SPeter Maydell# the case for shifts. In the Arm ARM these insns are documented
85483da661SPeter Maydell# with the Vm and Vn fields in their usual places, but in the
86483da661SPeter Maydell# assembly the operands are listed "backwards", ie in the order
87483da661SPeter Maydell# Qd, Qm, Qn where other insns use Qd, Qn, Qm. For QEMU we choose
88483da661SPeter Maydell# to consider Vm and Vn as being in different fields in the insn.
89483da661SPeter Maydell# This gives us consistency with A64 and Neon.
90483da661SPeter Maydell@2op_rev .... .... .. size:2 .... .... .... .... .... &2op qd=%qd qm=%qn qn=%qm
91483da661SPeter Maydell
92e51896b3SPeter Maydell@2scalar .... .... .. size:2 .... .... .... .... rm:4 &2scalar qd=%qd qn=%qn
93a8890353SPeter Maydell@2scalar_nosz .... .... .... .... .... .... .... rm:4 &2scalar qd=%qd qn=%qn
94e51896b3SPeter Maydell
95f9ed6174SPeter Maydell@2_shl_b .... .... .. 001 shift:3 .... .... .... .... &2shift qd=%qd qm=%qm size=0
96f9ed6174SPeter Maydell@2_shl_h .... .... .. 01  shift:4 .... .... .... .... &2shift qd=%qd qm=%qm size=1
97f9ed6174SPeter Maydell@2_shl_w .... .... .. 1   shift:5 .... .... .... .... &2shift qd=%qd qm=%qm size=2
98f9ed6174SPeter Maydell
99c2262707SPeter Maydell@2_shll_b .... .... ... 01 shift:3 .... .... .... .... &2shift qd=%qd qm=%qm size=0
100c2262707SPeter Maydell@2_shll_h .... .... ... 1  shift:4 .... .... .... .... &2shift qd=%qd qm=%qm size=1
101c2262707SPeter Maydell# VSHLL encoding T2 where shift == esize
102c2262707SPeter Maydell@2_shll_esize_b .... .... .... 00 .. .... .... .... .... &2shift \
103c2262707SPeter Maydell                qd=%qd qm=%qm size=0 shift=8
104c2262707SPeter Maydell@2_shll_esize_h .... .... .... 01 .. .... .... .... .... &2shift \
105c2262707SPeter Maydell                qd=%qd qm=%qm size=1 shift=16
106c2262707SPeter Maydell
1073394116fSPeter Maydell# Right shifts are encoded as N - shift, where N is the element size in bits.
1083394116fSPeter Maydell%rshift_i5  16:5 !function=rsub_32
1093394116fSPeter Maydell%rshift_i4  16:4 !function=rsub_16
1103394116fSPeter Maydell%rshift_i3  16:3 !function=rsub_8
1113394116fSPeter Maydell
1123394116fSPeter Maydell@2_shr_b .... .... .. 001 ... .... .... .... .... &2shift qd=%qd qm=%qm \
1133394116fSPeter Maydell         size=0 shift=%rshift_i3
1143394116fSPeter Maydell@2_shr_h .... .... .. 01 .... .... .... .... .... &2shift qd=%qd qm=%qm \
1153394116fSPeter Maydell         size=1 shift=%rshift_i4
1163394116fSPeter Maydell@2_shr_w .... .... .. 1 ..... .... .... .... .... &2shift qd=%qd qm=%qm \
1173394116fSPeter Maydell         size=2 shift=%rshift_i5
1183394116fSPeter Maydell
1191b15a97dSPeter Maydell@shl_scalar .... .... .... size:2 .. .... .... .... rm:4 &shl_scalar qda=%qd
1201b15a97dSPeter Maydell
121eff5d9a9SPeter Maydell# Vector comparison; 4-bit Qm but 3-bit Qn
122eff5d9a9SPeter Maydell%mask_22_13      22:1 13:3
123eff5d9a9SPeter Maydell@vcmp    .... .... .. size:2 qn:3 . .... .... .... .... &vcmp qm=%qm mask=%mask_22_13
124cce81873SPeter Maydell@vcmp_scalar .... .... .. size:2 qn:3 . .... .... .... rm:4 &vcmp_scalar \
125cce81873SPeter Maydell             mask=%mask_22_13
126eff5d9a9SPeter Maydell
127688ba4cfSPeter Maydell@vmaxv .... .... .... size:2 .. rda:4 .... .... .... &vmaxv qm=%qm
128688ba4cfSPeter Maydell
1291e35cd91SPeter Maydell@2op_fp .... .... .... .... .... .... .... .... &2op \
1301e35cd91SPeter Maydell        qd=%qd qn=%qn qm=%qm size=%2op_fp_size
1311e35cd91SPeter Maydell
132104afc68SPeter Maydell@2op_fp_size_rev .... .... .... .... .... .... .... .... &2op \
133104afc68SPeter Maydell                 qd=%qd qn=%qn qm=%qm size=%2op_fp_size_rev
134104afc68SPeter Maydell
13590257a4fSPeter Maydell# 2-operand, but Qd and Qn share a field. Size is in bit 28, but we
13690257a4fSPeter Maydell# don't decode it in this format
13790257a4fSPeter Maydell@vmaxnma  .... .... .... .... .... .... .... .... &2op \
13890257a4fSPeter Maydell          qd=%qd qn=%qd qm=%qm
13990257a4fSPeter Maydell
140abfe39b2SPeter Maydell@2op_fp_scalar .... .... .... .... .... .... .... rm:4 &2scalar \
141abfe39b2SPeter Maydell               qd=%qd qn=%qn size=%2op_fp_scalar_size
142abfe39b2SPeter Maydell
143507b6a50SPeter Maydell# Vector loads and stores
144507b6a50SPeter Maydell
1452fc6b751SPeter Maydell# Widening loads and narrowing stores:
1462fc6b751SPeter Maydell# for these P=0 W=0 is 'related encoding'; sz=11 is 'related encoding'
1472fc6b751SPeter Maydell# This means we need to expand out to multiple patterns for P, W, SZ.
1482fc6b751SPeter Maydell# For stores the U bit must be 0 but we catch that in the trans_ function.
1492fc6b751SPeter Maydell# The naming scheme here is "VLDSTB_H == in-memory byte load/store to/from
1502fc6b751SPeter Maydell# signed halfword element in register", etc.
1512fc6b751SPeter MaydellVLDSTB_H         111 . 110 0 a:1 0 1   . 0 ... ... 0 111 01 ....... @vldst_wn \
1522fc6b751SPeter Maydell                 p=0 w=1 size=1
1532fc6b751SPeter MaydellVLDSTB_H         111 . 110 1 a:1 0 w:1 . 0 ... ... 0 111 01 ....... @vldst_wn \
1542fc6b751SPeter Maydell                 p=1 size=1
1552fc6b751SPeter MaydellVLDSTB_W         111 . 110 0 a:1 0 1   . 0 ... ... 0 111 10 ....... @vldst_wn \
1562fc6b751SPeter Maydell                 p=0 w=1 size=2
1572fc6b751SPeter MaydellVLDSTB_W         111 . 110 1 a:1 0 w:1 . 0 ... ... 0 111 10 ....... @vldst_wn \
1582fc6b751SPeter Maydell                 p=1 size=2
1592fc6b751SPeter MaydellVLDSTH_W         111 . 110 0 a:1 0 1   . 1 ... ... 0 111 10 ....... @vldst_wn \
1602fc6b751SPeter Maydell                 p=0 w=1 size=2
1612fc6b751SPeter MaydellVLDSTH_W         111 . 110 1 a:1 0 w:1 . 1 ... ... 0 111 10 ....... @vldst_wn \
1622fc6b751SPeter Maydell                 p=1 size=2
1632fc6b751SPeter Maydell
164507b6a50SPeter Maydell# Non-widening loads/stores (P=0 W=0 is 'related encoding')
165507b6a50SPeter MaydellVLDR_VSTR        1110110 0 a:1 . 1   . .... ... 111100 .......   @vldr_vstr \
166507b6a50SPeter Maydell                 size=0 p=0 w=1
167507b6a50SPeter MaydellVLDR_VSTR        1110110 0 a:1 . 1   . .... ... 111101 .......   @vldr_vstr \
168507b6a50SPeter Maydell                 size=1 p=0 w=1
169507b6a50SPeter MaydellVLDR_VSTR        1110110 0 a:1 . 1   . .... ... 111110 .......   @vldr_vstr \
170507b6a50SPeter Maydell                 size=2 p=0 w=1
171507b6a50SPeter MaydellVLDR_VSTR        1110110 1 a:1 . w:1 . .... ... 111100 .......   @vldr_vstr \
172507b6a50SPeter Maydell                 size=0 p=1
173507b6a50SPeter MaydellVLDR_VSTR        1110110 1 a:1 . w:1 . .... ... 111101 .......   @vldr_vstr \
174507b6a50SPeter Maydell                 size=1 p=1
175507b6a50SPeter MaydellVLDR_VSTR        1110110 1 a:1 . w:1 . .... ... 111110 .......   @vldr_vstr \
176507b6a50SPeter Maydell                 size=2 p=1
1770f0f2bd5SPeter Maydell
178dc18628bSPeter Maydell# gather loads/scatter stores
179dc18628bSPeter MaydellVLDR_S_sg        111 0 1100 1 . 01 .... ... 0 111 . .... .... @vldst_sg
180dc18628bSPeter MaydellVLDR_U_sg        111 1 1100 1 . 01 .... ... 0 111 . .... .... @vldst_sg
181dc18628bSPeter MaydellVSTR_sg          111 0 1100 1 . 00 .... ... 0 111 . .... .... @vldst_sg
182dc18628bSPeter Maydell
183fac80f08SPeter MaydellVLDRW_sg_imm     111 1 1101 ... 1 ... 0 ... 1 1110 .... .... @vldst_sg_imm
184fac80f08SPeter MaydellVLDRD_sg_imm     111 1 1101 ... 1 ... 0 ... 1 1111 .... .... @vldst_sg_imm
185fac80f08SPeter MaydellVSTRW_sg_imm     111 1 1101 ... 0 ... 0 ... 1 1110 .... .... @vldst_sg_imm
186fac80f08SPeter MaydellVSTRD_sg_imm     111 1 1101 ... 0 ... 0 ... 1 1111 .... .... @vldst_sg_imm
187fac80f08SPeter Maydell
188075e7e97SPeter Maydell# deinterleaving loads/interleaving stores
189075e7e97SPeter MaydellVLD2             1111 1100 1 .. 1 .... ... 1 111 .. .. 00000 @vldst_il
190075e7e97SPeter MaydellVLD4             1111 1100 1 .. 1 .... ... 1 111 .. .. 00001 @vldst_il
191075e7e97SPeter MaydellVST2             1111 1100 1 .. 0 .... ... 1 111 .. .. 00000 @vldst_il
192075e7e97SPeter MaydellVST4             1111 1100 1 .. 0 .... ... 1 111 .. .. 00001 @vldst_il
193075e7e97SPeter Maydell
1941241f148SPeter Maydell# Moves between 2 32-bit vector lanes and 2 general purpose registers
1951241f148SPeter MaydellVMOV_to_2gp      1110 1100 0 . 00 rt2:4 ... 0 1111 000 idx:1 rt:4 qd=%qd
1961241f148SPeter MaydellVMOV_from_2gp    1110 1100 0 . 01 rt2:4 ... 0 1111 000 idx:1 rt:4 qd=%qd
1971241f148SPeter Maydell
19868245e44SPeter Maydell# Vector 2-op
19968245e44SPeter MaydellVAND             1110 1111 0 . 00 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
20068245e44SPeter MaydellVBIC             1110 1111 0 . 01 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
20168245e44SPeter MaydellVORR             1110 1111 0 . 10 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
20268245e44SPeter MaydellVORN             1110 1111 0 . 11 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
20368245e44SPeter MaydellVEOR             1111 1111 0 . 00 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
20468245e44SPeter Maydell
2059333fe4dSPeter MaydellVADD             1110 1111 0 . .. ... 0 ... 0 1000 . 1 . 0 ... 0 @2op
2069333fe4dSPeter MaydellVSUB             1111 1111 0 . .. ... 0 ... 0 1000 . 1 . 0 ... 0 @2op
2079333fe4dSPeter MaydellVMUL             1110 1111 0 . .. ... 0 ... 0 1001 . 1 . 1 ... 0 @2op
2089333fe4dSPeter Maydell
209c2262707SPeter Maydell# The VSHLL T2 encoding is not a @2op pattern, but is here because it
210c2262707SPeter Maydell# overlaps what would be size=0b11 VMULH/VRMULH
211c2262707SPeter Maydell{
21290257a4fSPeter Maydell  VMAXNMA        111 0 1110 0 . 11 1111 ... 0 1110 1 0 . 0 ... 1 @vmaxnma size=2
21390257a4fSPeter Maydell
214c2262707SPeter Maydell  VSHLL_BS       111 0 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_b
215c2262707SPeter Maydell  VSHLL_BS       111 0 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_h
216c2262707SPeter Maydell
21754dc78a9SPeter Maydell  VQMOVUNB       111 0 1110 0 . 11 .. 01 ... 0 1110 1 0 . 0 ... 1 @1op
21854dc78a9SPeter Maydell  VQMOVN_BS      111 0 1110 0 . 11 .. 11 ... 0 1110 0 0 . 0 ... 1 @1op
21954dc78a9SPeter Maydell
220d5c571eaSPeter Maydell  VMAXA          111 0 1110 0 . 11 .. 11 ... 0 1110 1 0 . 0 ... 1 @1op
221d5c571eaSPeter Maydell
222ba62cc56SPeter Maydell  VMULH_S        111 0 1110 0 . .. ...1 ... 0 1110 . 0 . 0 ... 1 @2op
223c2262707SPeter Maydell}
224c2262707SPeter Maydell
225c2262707SPeter Maydell{
22690257a4fSPeter Maydell  VMAXNMA        111 1 1110 0 . 11  1111 ... 0 1110 1 0 . 0 ... 1 @vmaxnma size=1
22790257a4fSPeter Maydell
228c2262707SPeter Maydell  VSHLL_BU       111 1 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_b
229c2262707SPeter Maydell  VSHLL_BU       111 1 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_h
230c2262707SPeter Maydell
23154dc78a9SPeter Maydell  VMOVNB         111 1 1110 0 . 11 .. 01 ... 0 1110 1 0 . 0 ... 1 @1op
23254dc78a9SPeter Maydell  VQMOVN_BU      111 1 1110 0 . 11 .. 11 ... 0 1110 0 0 . 0 ... 1 @1op
23354dc78a9SPeter Maydell
234ba62cc56SPeter Maydell  VMULH_U        111 1 1110 0 . .. ...1 ... 0 1110 . 0 . 0 ... 1 @2op
235c2262707SPeter Maydell}
236c2262707SPeter Maydell
237c2262707SPeter Maydell{
23890257a4fSPeter Maydell  VMINNMA        111 0 1110 0 . 11  1111 ... 1 1110 1 0 . 0 ... 1 @vmaxnma size=2
239c2262707SPeter Maydell  VSHLL_TS       111 0 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_b
240c2262707SPeter Maydell  VSHLL_TS       111 0 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_h
241ba62cc56SPeter Maydell
24254dc78a9SPeter Maydell  VQMOVUNT       111 0 1110 0 . 11 .. 01 ... 1 1110 1 0 . 0 ... 1 @1op
24354dc78a9SPeter Maydell  VQMOVN_TS      111 0 1110 0 . 11 .. 11 ... 1 1110 0 0 . 0 ... 1 @1op
24454dc78a9SPeter Maydell
245d5c571eaSPeter Maydell  VMINA          111 0 1110 0 . 11 .. 11 ... 1 1110 1 0 . 0 ... 1 @1op
246d5c571eaSPeter Maydell
247fca87b78SPeter Maydell  VRMULH_S       111 0 1110 0 . .. ...1 ... 1 1110 . 0 . 0 ... 1 @2op
248c2262707SPeter Maydell}
249c2262707SPeter Maydell
250c2262707SPeter Maydell{
25190257a4fSPeter Maydell  VMINNMA        111 1 1110 0 . 11  1111 ... 1 1110 1 0 . 0 ... 1 @vmaxnma size=1
252c2262707SPeter Maydell  VSHLL_TU       111 1 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_b
253c2262707SPeter Maydell  VSHLL_TU       111 1 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_h
254c2262707SPeter Maydell
25554dc78a9SPeter Maydell  VMOVNT         111 1 1110 0 . 11 .. 01 ... 1 1110 1 0 . 0 ... 1 @1op
25654dc78a9SPeter Maydell  VQMOVN_TU      111 1 1110 0 . 11 .. 11 ... 1 1110 0 0 . 0 ... 1 @1op
25754dc78a9SPeter Maydell
258fca87b78SPeter Maydell  VRMULH_U       111 1 1110 0 . .. ...1 ... 1 1110 . 0 . 0 ... 1 @2op
259c2262707SPeter Maydell}
260fca87b78SPeter Maydell
261cd367ff3SPeter MaydellVMAX_S           111 0 1111 0 . .. ... 0 ... 0 0110 . 1 . 0 ... 0 @2op
262cd367ff3SPeter MaydellVMAX_U           111 1 1111 0 . .. ... 0 ... 0 0110 . 1 . 0 ... 0 @2op
263cd367ff3SPeter MaydellVMIN_S           111 0 1111 0 . .. ... 0 ... 0 0110 . 1 . 1 ... 0 @2op
264cd367ff3SPeter MaydellVMIN_U           111 1 1111 0 . .. ... 0 ... 0 0110 . 1 . 1 ... 0 @2op
265cd367ff3SPeter Maydell
266bc67aa8dSPeter MaydellVABD_S           111 0 1111 0 . .. ... 0 ... 0 0111 . 1 . 0 ... 0 @2op
267bc67aa8dSPeter MaydellVABD_U           111 1 1111 0 . .. ... 0 ... 0 0111 . 1 . 0 ... 0 @2op
268bc67aa8dSPeter Maydell
269abc48e31SPeter MaydellVHADD_S          111 0 1111 0 . .. ... 0 ... 0 0000 . 1 . 0 ... 0 @2op
270abc48e31SPeter MaydellVHADD_U          111 1 1111 0 . .. ... 0 ... 0 0000 . 1 . 0 ... 0 @2op
271abc48e31SPeter MaydellVHSUB_S          111 0 1111 0 . .. ... 0 ... 0 0010 . 1 . 0 ... 0 @2op
272abc48e31SPeter MaydellVHSUB_U          111 1 1111 0 . .. ... 0 ... 0 0010 . 1 . 0 ... 0 @2op
273abc48e31SPeter Maydell
274c1bd78cbSPeter Maydell{
275c1bd78cbSPeter Maydell  VMULLP_B       111 . 1110 0 . 11 ... 1 ... 0 1110 . 0 . 0 ... 0 @2op_sz28
276ac6ad1dcSPeter Maydell  VMULL_BS       111 0 1110 0 . .. ... 1 ... 0 1110 . 0 . 0 ... 0 @2op
277ac6ad1dcSPeter Maydell  VMULL_BU       111 1 1110 0 . .. ... 1 ... 0 1110 . 0 . 0 ... 0 @2op
278c1bd78cbSPeter Maydell}
279c1bd78cbSPeter Maydell{
280c1bd78cbSPeter Maydell  VMULLP_T       111 . 1110 0 . 11 ... 1 ... 1 1110 . 0 . 0 ... 0 @2op_sz28
281ac6ad1dcSPeter Maydell  VMULL_TS       111 0 1110 0 . .. ... 1 ... 1 1110 . 0 . 0 ... 0 @2op
282ac6ad1dcSPeter Maydell  VMULL_TU       111 1 1110 0 . .. ... 1 ... 1 1110 . 0 . 0 ... 0 @2op
283c1bd78cbSPeter Maydell}
284ac6ad1dcSPeter Maydell
285380caf6cSPeter MaydellVQDMULH          1110 1111 0 . .. ... 0 ... 0 1011 . 1 . 0 ... 0 @2op
286380caf6cSPeter MaydellVQRDMULH         1111 1111 0 . .. ... 0 ... 0 1011 . 1 . 0 ... 0 @2op
287380caf6cSPeter Maydell
288f741707bSPeter MaydellVQADD_S          111 0 1111 0 . .. ... 0 ... 0 0000 . 1 . 1 ... 0 @2op
289f741707bSPeter MaydellVQADD_U          111 1 1111 0 . .. ... 0 ... 0 0000 . 1 . 1 ... 0 @2op
290f741707bSPeter MaydellVQSUB_S          111 0 1111 0 . .. ... 0 ... 0 0010 . 1 . 1 ... 0 @2op
291f741707bSPeter MaydellVQSUB_U          111 1 1111 0 . .. ... 0 ... 0 0010 . 1 . 1 ... 0 @2op
292f741707bSPeter Maydell
2930372cad8SPeter MaydellVSHL_S           111 0 1111 0 . .. ... 0 ... 0 0100 . 1 . 0 ... 0 @2op_rev
2940372cad8SPeter MaydellVSHL_U           111 1 1111 0 . .. ... 0 ... 0 0100 . 1 . 0 ... 0 @2op_rev
2950372cad8SPeter Maydell
296bb002345SPeter MaydellVRSHL_S          111 0 1111 0 . .. ... 0 ... 0 0101 . 1 . 0 ... 0 @2op_rev
297bb002345SPeter MaydellVRSHL_U          111 1 1111 0 . .. ... 0 ... 0 0101 . 1 . 0 ... 0 @2op_rev
298bb002345SPeter Maydell
299483da661SPeter MaydellVQSHL_S          111 0 1111 0 . .. ... 0 ... 0 0100 . 1 . 1 ... 0 @2op_rev
300483da661SPeter MaydellVQSHL_U          111 1 1111 0 . .. ... 0 ... 0 0100 . 1 . 1 ... 0 @2op_rev
301483da661SPeter Maydell
3029dc868c4SPeter MaydellVQRSHL_S         111 0 1111 0 . .. ... 0 ... 0 0101 . 1 . 1 ... 0 @2op_rev
3039dc868c4SPeter MaydellVQRSHL_U         111 1 1111 0 . .. ... 0 ... 0 0101 . 1 . 1 ... 0 @2op_rev
3049dc868c4SPeter Maydell
305d3cd965cSPeter Maydell{
306d3cd965cSPeter Maydell  VCMUL0         111 . 1110 0 . 11 ... 0 ... 0 1110 . 0 . 0 ... 0 @2op_sz28
307fd677f80SPeter Maydell  VQDMLADH       1110  1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 0 @2op
30892f11732SPeter Maydell  VQDMLSDH       1111  1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 0 @2op
309d3cd965cSPeter Maydell}
310d3cd965cSPeter Maydell
311d3cd965cSPeter Maydell{
312d3cd965cSPeter Maydell  VCMUL180       111 . 1110 0 . 11 ... 0 ... 1 1110 . 0 . 0 ... 0 @2op_sz28
313d3cd965cSPeter Maydell  VQDMLADHX      111 0 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 0 @2op
31492f11732SPeter Maydell  VQDMLSDHX      111 1 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 0 @2op
315d3cd965cSPeter Maydell}
316d3cd965cSPeter Maydell
317d3cd965cSPeter Maydell{
318d3cd965cSPeter Maydell  VCMUL90        111 . 1110 0 . 11 ... 0 ... 0 1110 . 0 . 0 ... 1 @2op_sz28
319d3cd965cSPeter Maydell  VQRDMLADH      111 0 1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 1 @2op
32092f11732SPeter Maydell  VQRDMLSDH      111 1 1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 1 @2op
321d3cd965cSPeter Maydell}
322d3cd965cSPeter Maydell
323d3cd965cSPeter Maydell{
324d3cd965cSPeter Maydell  VCMUL270       111 . 1110 0 . 11 ... 0 ... 1 1110 . 0 . 0 ... 1 @2op_sz28
325d3cd965cSPeter Maydell  VQRDMLADHX     111 0 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 1 @2op
32692f11732SPeter Maydell  VQRDMLSDHX     111 1 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 1 @2op
327d3cd965cSPeter Maydell}
32892f11732SPeter Maydell
32943364321SPeter MaydellVQDMULLB         111 . 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 1 @2op_sz28
33043364321SPeter MaydellVQDMULLT         111 . 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 1 @2op_sz28
33143364321SPeter Maydell
3321eb987a8SPeter MaydellVRHADD_S         111 0 1111 0 . .. ... 0 ... 0 0001 . 1 . 0 ... 0 @2op
3331eb987a8SPeter MaydellVRHADD_U         111 1 1111 0 . .. ... 0 ... 0 0001 . 1 . 0 ... 0 @2op
3341eb987a8SPeter Maydell
3358625693aSPeter Maydell{
33689bc4c4fSPeter Maydell  VADC           1110 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 0 @2op_nosz
33789bc4c4fSPeter Maydell  VADCI          1110 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 0 @2op_nosz
3388625693aSPeter Maydell  VHCADD90       1110 1110 0 . .. ... 0 ... 0 1111 . 0 . 0 ... 0 @2op
3398625693aSPeter Maydell  VHCADD270      1110 1110 0 . .. ... 0 ... 1 1111 . 0 . 0 ... 0 @2op
3408625693aSPeter Maydell}
34167ec113bSPeter Maydell
34267ec113bSPeter Maydell{
34367ec113bSPeter Maydell  VSBC           1111 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 0 @2op_nosz
34489bc4c4fSPeter Maydell  VSBCI          1111 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 0 @2op_nosz
34567ec113bSPeter Maydell  VCADD90        1111 1110 0 . .. ... 0 ... 0 1111 . 0 . 0 ... 0 @2op
34667ec113bSPeter Maydell  VCADD270       1111 1110 0 . .. ... 0 ... 1 1111 . 0 . 0 ... 0 @2op
34767ec113bSPeter Maydell}
34889bc4c4fSPeter Maydell
3490f0f2bd5SPeter Maydell# Vector miscellaneous
3500f0f2bd5SPeter Maydell
3516437f1f7SPeter MaydellVCLS             1111 1111 1 . 11 .. 00 ... 0 0100 01 . 0 ... 0 @1op
3520f0f2bd5SPeter MaydellVCLZ             1111 1111 1 . 11 .. 00 ... 0 0100 11 . 0 ... 0 @1op
353249b5309SPeter Maydell
354249b5309SPeter MaydellVREV16           1111 1111 1 . 11 .. 00 ... 0 0001 01 . 0 ... 0 @1op
355249b5309SPeter MaydellVREV32           1111 1111 1 . 11 .. 00 ... 0 0000 11 . 0 ... 0 @1op
356249b5309SPeter MaydellVREV64           1111 1111 1 . 11 .. 00 ... 0 0000 01 . 0 ... 0 @1op
3578abd3c80SPeter Maydell
3588abd3c80SPeter MaydellVMVN             1111 1111 1 . 11 00 00 ... 0 0101 11 . 0 ... 0 @1op_nosz
35959c91773SPeter Maydell
36059c91773SPeter MaydellVABS             1111 1111 1 . 11 .. 01 ... 0 0011 01 . 0 ... 0 @1op
36159c91773SPeter MaydellVABS_fp          1111 1111 1 . 11 .. 01 ... 0 0111 01 . 0 ... 0 @1op
362399a8c76SPeter MaydellVNEG             1111 1111 1 . 11 .. 01 ... 0 0011 11 . 0 ... 0 @1op
363399a8c76SPeter MaydellVNEG_fp          1111 1111 1 . 11 .. 01 ... 0 0111 11 . 0 ... 0 @1op
364ab59362fSPeter Maydell
365398e7cd3SPeter MaydellVQABS            1111 1111 1 . 11 .. 00 ... 0 0111 01 . 0 ... 0 @1op
366398e7cd3SPeter MaydellVQNEG            1111 1111 1 . 11 .. 00 ... 0 0111 11 . 0 ... 0 @1op
367398e7cd3SPeter Maydell
368ab59362fSPeter Maydell&vdup qd rt size
369ab59362fSPeter Maydell# Qd is in the fields usually named Qn
370ab59362fSPeter Maydell@vdup            .... .... . . .. ... . rt:4 .... . . . . .... qd=%qn &vdup
371ab59362fSPeter Maydell
372ab59362fSPeter Maydell# B and E bits encode size, which we decode here to the usual size values
373ab59362fSPeter MaydellVDUP             1110 1110 1 1 10 ... 0 .... 1011 . 0 0 1 0000 @vdup size=0
374ab59362fSPeter MaydellVDUP             1110 1110 1 0 10 ... 0 .... 1011 . 0 1 1 0000 @vdup size=1
375ab59362fSPeter MaydellVDUP             1110 1110 1 0 10 ... 0 .... 1011 . 0 0 1 0000 @vdup size=2
3761d2386f7SPeter Maydell
377395b92d5SPeter Maydell# Incrementing and decrementing dup
378395b92d5SPeter Maydell
379395b92d5SPeter Maydell# VIDUP, VDDUP format immediate: 1 << (immh:imml)
380395b92d5SPeter Maydell%imm_vidup 7:1 0:1 !function=vidup_imm
381395b92d5SPeter Maydell
382395b92d5SPeter Maydell# VIDUP, VDDUP registers: Rm bits [3:1] from insn, bit 0 is 1;
383395b92d5SPeter Maydell# Rn bits [3:1] from insn, bit 0 is 0
384395b92d5SPeter Maydell%vidup_rm 1:3 !function=times_2_plus_1
385395b92d5SPeter Maydell%vidup_rn 17:3 !function=times_2
386395b92d5SPeter Maydell
387395b92d5SPeter Maydell@vidup           .... .... . . size:2 .... .... .... .... .... \
388395b92d5SPeter Maydell                 qd=%qd imm=%imm_vidup rn=%vidup_rn &vidup
389395b92d5SPeter Maydell@viwdup          .... .... . . size:2 .... .... .... .... .... \
390395b92d5SPeter Maydell                 qd=%qd imm=%imm_vidup rm=%vidup_rm rn=%vidup_rn &viwdup
391395b92d5SPeter Maydell{
392395b92d5SPeter Maydell  VIDUP          1110 1110 0 . .. ... 1 ... 0 1111 . 110 111 . @vidup
393395b92d5SPeter Maydell  VIWDUP         1110 1110 0 . .. ... 1 ... 0 1111 . 110 ... . @viwdup
394395b92d5SPeter Maydell}
395395b92d5SPeter Maydell{
396395b92d5SPeter Maydell  VDDUP          1110 1110 0 . .. ... 1 ... 1 1111 . 110 111 . @vidup
397395b92d5SPeter Maydell  VDWDUP         1110 1110 0 . .. ... 1 ... 1 1111 . 110 ... . @viwdup
398395b92d5SPeter Maydell}
399395b92d5SPeter Maydell
4001d2386f7SPeter Maydell# multiply-add long dual accumulate
4011d2386f7SPeter Maydell# rdahi: bits [3:1] from insn, bit 0 is 1
4021d2386f7SPeter Maydell# rdalo: bits [3:1] from insn, bit 0 is 0
4031d2386f7SPeter Maydell%rdahi 20:3 !function=times_2_plus_1
4041d2386f7SPeter Maydell%rdalo 13:3 !function=times_2
4051d2386f7SPeter Maydell# size bit is 0 for 16 bit, 1 for 32 bit
4061d2386f7SPeter Maydell%size_16 16:1 !function=plus_1
4071d2386f7SPeter Maydell
4081d2386f7SPeter Maydell&vmlaldav rdahi rdalo size qn qm x a
409f0ffff51SPeter Maydell&vmladav rda size qn qm x a
4101d2386f7SPeter Maydell
411345910f8SPeter Maydell@vmlaldav        .... .... . ... ... . ... x:1 .... .. a:1 . qm:3 . \
4121d2386f7SPeter Maydell                 qn=%qn rdahi=%rdahi rdalo=%rdalo size=%size_16 &vmlaldav
413345910f8SPeter Maydell@vmlaldav_nosz   .... .... . ... ... . ... x:1 .... .. a:1 . qm:3 . \
41438548747SPeter Maydell                 qn=%qn rdahi=%rdahi rdalo=%rdalo size=0 &vmlaldav
415f0ffff51SPeter Maydell@vmladav         .... .... .... ... . ... x:1 .... . . a:1 . qm:3 . \
416f0ffff51SPeter Maydell                 qn=%qn rda=%rdalo size=%size_16 &vmladav
417f0ffff51SPeter Maydell@vmladav_nosz    .... .... .... ... . ... x:1 .... . . a:1 . qm:3 . \
418f0ffff51SPeter Maydell                 qn=%qn rda=%rdalo size=0 &vmladav
419181cd971SPeter Maydell
420f0ffff51SPeter Maydell{
421f0ffff51SPeter Maydell  VMLADAV_S      1110 1110 1111  ... . ... . 1110 . 0 . 0 ... 0 @vmladav
422f0ffff51SPeter Maydell  VMLALDAV_S     1110 1110 1 ... ... . ... . 1110 . 0 . 0 ... 0 @vmlaldav
423f0ffff51SPeter Maydell}
424f0ffff51SPeter Maydell{
425f0ffff51SPeter Maydell  VMLADAV_U      1111 1110 1111  ... . ... . 1110 . 0 . 0 ... 0 @vmladav
426f0ffff51SPeter Maydell  VMLALDAV_U     1111 1110 1 ... ... . ... . 1110 . 0 . 0 ... 0 @vmlaldav
427f0ffff51SPeter Maydell}
428f0ffff51SPeter Maydell
429f0ffff51SPeter Maydell{
430f0ffff51SPeter Maydell  VMLSDAV        1110 1110 1111  ... . ... . 1110 . 0 . 0 ... 1 @vmladav
431345910f8SPeter Maydell  VMLSLDAV       1110 1110 1 ... ... . ... . 1110 . 0 . 0 ... 1 @vmlaldav
432f0ffff51SPeter Maydell}
433f0ffff51SPeter Maydell
434f0ffff51SPeter Maydell{
435f0ffff51SPeter Maydell  VMLSDAV        1111 1110 1111  ... 0 ... . 1110 . 0 . 0 ... 1 @vmladav_nosz
436f0ffff51SPeter Maydell  VRMLSLDAVH     1111 1110 1 ... ... 0 ... . 1110 . 0 . 0 ... 1 @vmlaldav_nosz
437f0ffff51SPeter Maydell}
438f0ffff51SPeter Maydell
439f0ffff51SPeter MaydellVMLADAV_S        1110 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 1 @vmladav_nosz
440f0ffff51SPeter MaydellVMLADAV_U        1111 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 1 @vmladav_nosz
44138548747SPeter Maydell
442688ba4cfSPeter Maydell{
443688ba4cfSPeter Maydell  VMAXV_S        1110 1110 1110  .. 10 ....  1111 0 0 . 0 ... 0 @vmaxv
444688ba4cfSPeter Maydell  VMINV_S        1110 1110 1110  .. 10 ....  1111 1 0 . 0 ... 0 @vmaxv
445688ba4cfSPeter Maydell  VMAXAV         1110 1110 1110  .. 00 ....  1111 0 0 . 0 ... 0 @vmaxv
446688ba4cfSPeter Maydell  VMINAV         1110 1110 1110  .. 00 ....  1111 1 0 . 0 ... 0 @vmaxv
447f0ffff51SPeter Maydell  VMLADAV_S      1110 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 0 @vmladav_nosz
448345910f8SPeter Maydell  VRMLALDAVH_S   1110 1110 1 ... ... 0 ... . 1111 . 0 . 0 ... 0 @vmlaldav_nosz
449688ba4cfSPeter Maydell}
450688ba4cfSPeter Maydell
451688ba4cfSPeter Maydell{
452688ba4cfSPeter Maydell  VMAXV_U        1111 1110 1110  .. 10 ....  1111 0 0 . 0 ... 0 @vmaxv
453688ba4cfSPeter Maydell  VMINV_U        1111 1110 1110  .. 10 ....  1111 1 0 . 0 ... 0 @vmaxv
454f0ffff51SPeter Maydell  VMLADAV_U      1111 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 0 @vmladav_nosz
455345910f8SPeter Maydell  VRMLALDAVH_U   1111 1110 1 ... ... 0 ... . 1111 . 0 . 0 ... 0 @vmlaldav_nosz
456688ba4cfSPeter Maydell}
45738548747SPeter Maydell
458e51896b3SPeter Maydell# Scalar operations
459e51896b3SPeter Maydell
460e51896b3SPeter MaydellVADD_scalar      1110 1110 0 . .. ... 1 ... 0 1111 . 100 .... @2scalar
46191a358fdSPeter MaydellVSUB_scalar      1110 1110 0 . .. ... 1 ... 1 1111 . 100 .... @2scalar
4621b15a97dSPeter Maydell
4631b15a97dSPeter Maydell{
4641b15a97dSPeter Maydell  VSHL_S_scalar   1110 1110 0 . 11 .. 01 ... 1 1110 0110 .... @shl_scalar
4651b15a97dSPeter Maydell  VRSHL_S_scalar  1110 1110 0 . 11 .. 11 ... 1 1110 0110 .... @shl_scalar
4661b15a97dSPeter Maydell  VQSHL_S_scalar  1110 1110 0 . 11 .. 01 ... 1 1110 1110 .... @shl_scalar
4671b15a97dSPeter Maydell  VQRSHL_S_scalar 1110 1110 0 . 11 .. 11 ... 1 1110 1110 .... @shl_scalar
46891a358fdSPeter Maydell  VMUL_scalar     1110 1110 0 . .. ... 1 ... 1 1110 . 110 .... @2scalar
4691b15a97dSPeter Maydell}
4701b15a97dSPeter Maydell
4711b15a97dSPeter Maydell{
4721b15a97dSPeter Maydell  VSHL_U_scalar   1111 1110 0 . 11 .. 01 ... 1 1110 0110 .... @shl_scalar
4731b15a97dSPeter Maydell  VRSHL_U_scalar  1111 1110 0 . 11 .. 11 ... 1 1110 0110 .... @shl_scalar
4741b15a97dSPeter Maydell  VQSHL_U_scalar  1111 1110 0 . 11 .. 01 ... 1 1110 1110 .... @shl_scalar
4751b15a97dSPeter Maydell  VQRSHL_U_scalar 1111 1110 0 . 11 .. 11 ... 1 1110 1110 .... @shl_scalar
4761b15a97dSPeter Maydell  VBRSR           1111 1110 0 . .. ... 1 ... 1 1110 . 110 .... @2scalar
4771b15a97dSPeter Maydell}
4781b15a97dSPeter Maydell
479abfe39b2SPeter Maydell{
480abfe39b2SPeter Maydell  VADD_fp_scalar  111 . 1110 0 . 11 ... 0 ... 0 1111 . 100 .... @2op_fp_scalar
481644f717cSPeter Maydell  VHADD_S_scalar  1110  1110 0 . .. ... 0 ... 0 1111 . 100 .... @2scalar
482644f717cSPeter Maydell  VHADD_U_scalar  1111  1110 0 . .. ... 0 ... 0 1111 . 100 .... @2scalar
483abfe39b2SPeter Maydell}
484abfe39b2SPeter Maydell
485abfe39b2SPeter Maydell{
486abfe39b2SPeter Maydell  VSUB_fp_scalar  111 . 1110 0 . 11 ... 0 ... 1 1111 . 100 .... @2op_fp_scalar
487644f717cSPeter Maydell  VHSUB_S_scalar  1110  1110 0 . .. ... 0 ... 1 1111 . 100 .... @2scalar
488644f717cSPeter Maydell  VHSUB_U_scalar  1111  1110 0 . .. ... 0 ... 1 1111 . 100 .... @2scalar
489abfe39b2SPeter Maydell}
49039f2ec85SPeter Maydell
491a8890353SPeter Maydell{
49239f2ec85SPeter Maydell  VQADD_S_scalar  1110  1110 0 . .. ... 0 ... 0 1111 . 110 .... @2scalar
49339f2ec85SPeter Maydell  VQADD_U_scalar  1111  1110 0 . .. ... 0 ... 0 1111 . 110 .... @2scalar
494a8890353SPeter Maydell  VQDMULLB_scalar 111 . 1110 0 . 11 ... 0 ... 0 1111 . 110 .... @2scalar_nosz \
495a8890353SPeter Maydell                  size=%size_28
496a8890353SPeter Maydell}
497a8890353SPeter Maydell
498a8890353SPeter Maydell{
49939f2ec85SPeter Maydell  VQSUB_S_scalar  1110  1110 0 . .. ... 0 ... 1 1111 . 110 .... @2scalar
50039f2ec85SPeter Maydell  VQSUB_U_scalar  1111  1110 0 . .. ... 0 ... 1 1111 . 110 .... @2scalar
501a8890353SPeter Maydell  VQDMULLT_scalar 111 . 1110 0 . 11 ... 0 ... 1 1111 . 110 .... @2scalar_nosz \
502a8890353SPeter Maydell                  size=%size_28
503a8890353SPeter Maydell}
504a8890353SPeter Maydell
505abfe39b2SPeter Maydell{
506abfe39b2SPeter Maydell  VMUL_fp_scalar  111 . 1110 0 . 11 ... 1 ... 0 1110 . 110 .... @2op_fp_scalar
50766c05767SPeter Maydell  VQDMULH_scalar  1110  1110 0 . .. ... 1 ... 0 1110 . 110 .... @2scalar
50866c05767SPeter Maydell  VQRDMULH_scalar 1111  1110 0 . .. ... 1 ... 0 1110 . 110 .... @2scalar
509abfe39b2SPeter Maydell}
51066c05767SPeter Maydell
511*4773e74eSPeter Maydell{
512*4773e74eSPeter Maydell  VFMA_scalar     111 . 1110 0 . 11 ... 1 ... 0 1110 . 100 .... @2op_fp_scalar
5136b895bf8SPeter Maydell  # The U bit (28) is don't-care because it does not affect the result
514c69e34c6SPeter Maydell  VMLA            111 - 1110 0 . .. ... 1 ... 0 1110 . 100 .... @2scalar
515*4773e74eSPeter Maydell}
516*4773e74eSPeter Maydell
517*4773e74eSPeter Maydell{
518*4773e74eSPeter Maydell  VFMAS_scalar    111 . 1110 0 . 11 ... 1 ... 1 1110 . 100 .... @2op_fp_scalar
519*4773e74eSPeter Maydell  # The U bit (28) is don't-care because it does not affect the result
5206b895bf8SPeter Maydell  VMLAS           111 - 1110 0 . .. ... 1 ... 1 1110 . 100 .... @2scalar
521*4773e74eSPeter Maydell}
5226b895bf8SPeter Maydell
5238be9a250SPeter MaydellVQRDMLAH         1110 1110 0 . .. ... 0 ... 0 1110 . 100 .... @2scalar
5248be9a250SPeter MaydellVQRDMLASH        1110 1110 0 . .. ... 0 ... 1 1110 . 100 .... @2scalar
5258be9a250SPeter MaydellVQDMLAH          1110 1110 0 . .. ... 0 ... 0 1110 . 110 .... @2scalar
5268be9a250SPeter MaydellVQDMLASH         1110 1110 0 . .. ... 0 ... 1 1110 . 110 .... @2scalar
5278be9a250SPeter Maydell
5286f060a63SPeter Maydell# Vector add across vector
529d43ebd9dSPeter Maydell{
5306f060a63SPeter Maydell  VADDV          111 u:1 1110 1111 size:2 01 ... 0 1111 0 0 a:1 0 qm:3 0 rda=%rdalo
531d43ebd9dSPeter Maydell  VADDLV         111 u:1 1110 1 ... 1001 ... 0 1111 00 a:1 0 qm:3 0 \
532d43ebd9dSPeter Maydell                 rdahi=%rdahi rdalo=%rdalo
533d43ebd9dSPeter Maydell}
534a8890353SPeter Maydell
5357f061c0aSPeter Maydell@vabav           .... .... .. size:2 .... rda:4 .... .... .... &vabav qn=%qn qm=%qm
5367f061c0aSPeter Maydell
5377f061c0aSPeter MaydellVABAV_S          111 0 1110 10 .. ... 0 .... 1111 . 0 . 0 ... 1 @vabav
5387f061c0aSPeter MaydellVABAV_U          111 1 1110 10 .. ... 0 .... 1111 . 0 . 0 ... 1 @vabav
5397f061c0aSPeter Maydell
540eab84139SPeter Maydell# Logical immediate operations (1 reg and modified-immediate)
541eab84139SPeter Maydell
542eab84139SPeter Maydell# The cmode/op bits here decode VORR/VBIC/VMOV/VMVN, but
543eab84139SPeter Maydell# not in a way we can conveniently represent in decodetree without
544eab84139SPeter Maydell# a lot of repetition:
545eab84139SPeter Maydell# VORR: op=0, (cmode & 1) && cmode < 12
546eab84139SPeter Maydell# VBIC: op=1, (cmode & 1) && cmode < 12
547eab84139SPeter Maydell# VMOV: everything else
548eab84139SPeter Maydell# So we have a single decode line and check the cmode/op in the
549eab84139SPeter Maydell# trans function.
550eab84139SPeter MaydellVimm_1r 111 . 1111 1 . 00 0 ... ... 0 .... 0 1 . 1 .... @1imm
551f9ed6174SPeter Maydell
552f9ed6174SPeter Maydell# Shifts by immediate
553f9ed6174SPeter Maydell
554f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_b
555f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_h
556f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_w
557f9ed6174SPeter Maydell
558f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_b
559f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_h
560f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_w
561f9ed6174SPeter Maydell
562f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_b
563f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_h
564f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_w
565f9ed6174SPeter Maydell
566f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_b
567f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_h
568f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_w
5693394116fSPeter Maydell
5703394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_b
5713394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_h
5723394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_w
5733394116fSPeter Maydell
5743394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_b
5753394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_h
5763394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_w
5773394116fSPeter Maydell
5783394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_b
5793394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_h
5803394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_w
5813394116fSPeter Maydell
5823394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_b
5833394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_h
5843394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_w
585c2262707SPeter Maydell
586c2262707SPeter Maydell# VSHLL T1 encoding; the T2 VSHLL encoding is elsewhere in this file
5879dacf076SPeter Maydell# Note that VMOVL is encoded as "VSHLL with a zero shift count"; we
5889dacf076SPeter Maydell# implement it that way rather than special-casing it in the decode.
589c2262707SPeter MaydellVSHLL_BS          111 0 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_b
590c2262707SPeter MaydellVSHLL_BS          111 0 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_h
591c2262707SPeter Maydell
592c2262707SPeter MaydellVSHLL_BU          111 1 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_b
593c2262707SPeter MaydellVSHLL_BU          111 1 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_h
594c2262707SPeter Maydell
595c2262707SPeter MaydellVSHLL_TS          111 0 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_b
596c2262707SPeter MaydellVSHLL_TS          111 0 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_h
597c2262707SPeter Maydell
598c2262707SPeter MaydellVSHLL_TU          111 1 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_b
599c2262707SPeter MaydellVSHLL_TU          111 1 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_h
600a78b25faSPeter Maydell
601a78b25faSPeter Maydell# Shift-and-insert
602a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_b
603a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_h
604a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_w
605a78b25faSPeter Maydell
606a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_b
607a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_h
608a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_w
609162e2655SPeter Maydell
610162e2655SPeter Maydell# Narrowing shifts (which only support b and h sizes)
611162e2655SPeter MaydellVSHRNB            111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_b
612162e2655SPeter MaydellVSHRNB            111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_h
613162e2655SPeter MaydellVSHRNT            111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_b
614162e2655SPeter MaydellVSHRNT            111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_h
615162e2655SPeter Maydell
616162e2655SPeter MaydellVRSHRNB           111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_b
617162e2655SPeter MaydellVRSHRNB           111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_h
618162e2655SPeter MaydellVRSHRNT           111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_b
619162e2655SPeter MaydellVRSHRNT           111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_h
620d6f9e011SPeter Maydell
621d6f9e011SPeter MaydellVQSHRNB_S         111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_b
622d6f9e011SPeter MaydellVQSHRNB_S         111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_h
623d6f9e011SPeter MaydellVQSHRNT_S         111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_b
624d6f9e011SPeter MaydellVQSHRNT_S         111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_h
625d6f9e011SPeter MaydellVQSHRNB_U         111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_b
626d6f9e011SPeter MaydellVQSHRNB_U         111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_h
627d6f9e011SPeter MaydellVQSHRNT_U         111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_b
628d6f9e011SPeter MaydellVQSHRNT_U         111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_h
629d6f9e011SPeter Maydell
630d6f9e011SPeter MaydellVQSHRUNB          111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_b
631d6f9e011SPeter MaydellVQSHRUNB          111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_h
632d6f9e011SPeter MaydellVQSHRUNT          111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_b
633d6f9e011SPeter MaydellVQSHRUNT          111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_h
634d6f9e011SPeter Maydell
635d6f9e011SPeter MaydellVQRSHRNB_S        111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_b
636d6f9e011SPeter MaydellVQRSHRNB_S        111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_h
637d6f9e011SPeter MaydellVQRSHRNT_S        111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_b
638d6f9e011SPeter MaydellVQRSHRNT_S        111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_h
639d6f9e011SPeter MaydellVQRSHRNB_U        111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_b
640d6f9e011SPeter MaydellVQRSHRNB_U        111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_h
641d6f9e011SPeter MaydellVQRSHRNT_U        111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_b
642d6f9e011SPeter MaydellVQRSHRNT_U        111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_h
643d6f9e011SPeter Maydell
644d6f9e011SPeter MaydellVQRSHRUNB         111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_b
645d6f9e011SPeter MaydellVQRSHRUNB         111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_h
646d6f9e011SPeter MaydellVQRSHRUNT         111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_b
647d6f9e011SPeter MaydellVQRSHRUNT         111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_h
6482e6a4ce0SPeter Maydell
6492e6a4ce0SPeter MaydellVSHLC             111 0 1110 1 . 1 imm:5 ... 0 1111 1100 rdm:4 qd=%qd
650eff5d9a9SPeter Maydell
651eff5d9a9SPeter Maydell# Comparisons. We expand out the conditions which are split across
652eff5d9a9SPeter Maydell# encodings T1, T2, T3 and the fc bits. These include VPT, which is
653eff5d9a9SPeter Maydell# effectively "VCMP then VPST". A plain "VCMP" has a mask field of zero.
654eff5d9a9SPeter MaydellVCMPEQ            1111 1110 0 . .. ... 1 ... 0 1111 0 0 . 0 ... 0 @vcmp
655eff5d9a9SPeter MaydellVCMPNE            1111 1110 0 . .. ... 1 ... 0 1111 1 0 . 0 ... 0 @vcmp
656c386443bSPeter Maydell{
657c386443bSPeter Maydell  VPSEL           1111 1110 0 . 11 ... 1 ... 0 1111 . 0 . 0 ... 1 @2op_nosz
658eff5d9a9SPeter Maydell  VCMPCS          1111 1110 0 . .. ... 1 ... 0 1111 0 0 . 0 ... 1 @vcmp
659eff5d9a9SPeter Maydell  VCMPHI          1111 1110 0 . .. ... 1 ... 0 1111 1 0 . 0 ... 1 @vcmp
660c386443bSPeter Maydell}
661eff5d9a9SPeter MaydellVCMPGE            1111 1110 0 . .. ... 1 ... 1 1111 0 0 . 0 ... 0 @vcmp
662eff5d9a9SPeter MaydellVCMPLT            1111 1110 0 . .. ... 1 ... 1 1111 1 0 . 0 ... 0 @vcmp
663eff5d9a9SPeter MaydellVCMPGT            1111 1110 0 . .. ... 1 ... 1 1111 0 0 . 0 ... 1 @vcmp
664eff5d9a9SPeter MaydellVCMPLE            1111 1110 0 . .. ... 1 ... 1 1111 1 0 . 0 ... 1 @vcmp
665cce81873SPeter Maydell
666cce81873SPeter Maydell{
667fea3958fSPeter Maydell  VPNOT           1111 1110 0 0 11 000 1 000 0 1111 0100 1101
668cce81873SPeter Maydell  VPST            1111 1110 0 . 11 000 1 ... 0 1111 0100 1101 mask=%mask_22_13
669cce81873SPeter Maydell  VCMPEQ_scalar   1111 1110 0 . .. ... 1 ... 0 1111 0 1 0 0 .... @vcmp_scalar
670cce81873SPeter Maydell}
671cce81873SPeter MaydellVCMPNE_scalar     1111 1110 0 . .. ... 1 ... 0 1111 1 1 0 0 .... @vcmp_scalar
672cce81873SPeter MaydellVCMPCS_scalar     1111 1110 0 . .. ... 1 ... 0 1111 0 1 1 0 .... @vcmp_scalar
673cce81873SPeter MaydellVCMPHI_scalar     1111 1110 0 . .. ... 1 ... 0 1111 1 1 1 0 .... @vcmp_scalar
674cce81873SPeter MaydellVCMPGE_scalar     1111 1110 0 . .. ... 1 ... 1 1111 0 1 0 0 .... @vcmp_scalar
675cce81873SPeter MaydellVCMPLT_scalar     1111 1110 0 . .. ... 1 ... 1 1111 1 1 0 0 .... @vcmp_scalar
676cce81873SPeter MaydellVCMPGT_scalar     1111 1110 0 . .. ... 1 ... 1 1111 0 1 1 0 .... @vcmp_scalar
677cce81873SPeter MaydellVCMPLE_scalar     1111 1110 0 . .. ... 1 ... 1 1111 1 1 1 0 .... @vcmp_scalar
6781e35cd91SPeter Maydell
6791e35cd91SPeter Maydell# 2-operand FP
6801e35cd91SPeter MaydellVADD_fp           1110 1111 0 . 0 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
68182af0153SPeter MaydellVSUB_fp           1110 1111 0 . 1 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
68282af0153SPeter MaydellVMUL_fp           1111 1111 0 . 0 . ... 0 ... 0 1101 . 1 . 1 ... 0 @2op_fp
68382af0153SPeter MaydellVABD_fp           1111 1111 0 . 1 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
68482af0153SPeter Maydell
68582af0153SPeter MaydellVMAXNM            1111 1111 0 . 0 . ... 0 ... 0 1111 . 1 . 1 ... 0 @2op_fp
68682af0153SPeter MaydellVMINNM            1111 1111 0 . 1 . ... 0 ... 0 1111 . 1 . 1 ... 0 @2op_fp
687104afc68SPeter Maydell
688104afc68SPeter MaydellVCADD90_fp        1111 1100 1 . 0 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
689104afc68SPeter MaydellVCADD270_fp       1111 1101 1 . 0 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
6903173c0ddSPeter Maydell
6913173c0ddSPeter MaydellVFMA              1110 1111 0 . 0 . ... 0 ... 0 1100 . 1 . 1 ... 0 @2op_fp
6923173c0ddSPeter MaydellVFMS              1110 1111 0 . 1 . ... 0 ... 0 1100 . 1 . 1 ... 0 @2op_fp
693d3cd965cSPeter Maydell
694d3cd965cSPeter MaydellVCMLA0            1111 110 00 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
695d3cd965cSPeter MaydellVCMLA90           1111 110 01 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
696d3cd965cSPeter MaydellVCMLA180          1111 110 10 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
697d3cd965cSPeter MaydellVCMLA270          1111 110 11 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
698