xref: /qemu/target/arm/tcg/mve.decode (revision 2ec0dcf034b6954eb6d0b03ae83fba015e263c27)
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
127c87fe6d2SPeter Maydell@vcmp_fp .... .... .... qn:3 . .... .... .... .... &vcmp \
128c87fe6d2SPeter Maydell         qm=%qm size=%2op_fp_scalar_size mask=%mask_22_13
129c87fe6d2SPeter Maydell
130c2d8f6bbSPeter Maydell# Bit 28 is a 2op_fp_scalar_size bit, but we do not decode it in this
131c2d8f6bbSPeter Maydell# format to avoid complicated overlapping-instruction-groups
132c2d8f6bbSPeter Maydell@vcmp_fp_scalar .... .... .... qn:3 . .... .... .... rm:4 &vcmp_scalar \
133c2d8f6bbSPeter Maydell                mask=%mask_22_13
134c2d8f6bbSPeter Maydell
135688ba4cfSPeter Maydell@vmaxv .... .... .... size:2 .. rda:4 .... .... .... &vmaxv qm=%qm
136688ba4cfSPeter Maydell
1371e35cd91SPeter Maydell@2op_fp .... .... .... .... .... .... .... .... &2op \
1381e35cd91SPeter Maydell        qd=%qd qn=%qn qm=%qm size=%2op_fp_size
1391e35cd91SPeter Maydell
140104afc68SPeter Maydell@2op_fp_size_rev .... .... .... .... .... .... .... .... &2op \
141104afc68SPeter Maydell                 qd=%qd qn=%qn qm=%qm size=%2op_fp_size_rev
142104afc68SPeter Maydell
14390257a4fSPeter Maydell# 2-operand, but Qd and Qn share a field. Size is in bit 28, but we
14490257a4fSPeter Maydell# don't decode it in this format
14590257a4fSPeter Maydell@vmaxnma  .... .... .... .... .... .... .... .... &2op \
14690257a4fSPeter Maydell          qd=%qd qn=%qd qm=%qm
14790257a4fSPeter Maydell
14829f80e7dSPeter Maydell# Here also we don't decode the bit 28 size in the format to avoid
14929f80e7dSPeter Maydell# awkward nested overlap groups
15029f80e7dSPeter Maydell@vmaxnmv          .... .... .... .... rda:4 .... .... .... &vmaxv qm=%qm
15129f80e7dSPeter Maydell
152abfe39b2SPeter Maydell@2op_fp_scalar .... .... .... .... .... .... .... rm:4 &2scalar \
153abfe39b2SPeter Maydell               qd=%qd qn=%qn size=%2op_fp_scalar_size
154abfe39b2SPeter Maydell
155507b6a50SPeter Maydell# Vector loads and stores
156507b6a50SPeter Maydell
1572fc6b751SPeter Maydell# Widening loads and narrowing stores:
1582fc6b751SPeter Maydell# for these P=0 W=0 is 'related encoding'; sz=11 is 'related encoding'
1592fc6b751SPeter Maydell# This means we need to expand out to multiple patterns for P, W, SZ.
1602fc6b751SPeter Maydell# For stores the U bit must be 0 but we catch that in the trans_ function.
1612fc6b751SPeter Maydell# The naming scheme here is "VLDSTB_H == in-memory byte load/store to/from
1622fc6b751SPeter Maydell# signed halfword element in register", etc.
1632fc6b751SPeter MaydellVLDSTB_H         111 . 110 0 a:1 0 1   . 0 ... ... 0 111 01 ....... @vldst_wn \
1642fc6b751SPeter Maydell                 p=0 w=1 size=1
1652fc6b751SPeter MaydellVLDSTB_H         111 . 110 1 a:1 0 w:1 . 0 ... ... 0 111 01 ....... @vldst_wn \
1662fc6b751SPeter Maydell                 p=1 size=1
1672fc6b751SPeter MaydellVLDSTB_W         111 . 110 0 a:1 0 1   . 0 ... ... 0 111 10 ....... @vldst_wn \
1682fc6b751SPeter Maydell                 p=0 w=1 size=2
1692fc6b751SPeter MaydellVLDSTB_W         111 . 110 1 a:1 0 w:1 . 0 ... ... 0 111 10 ....... @vldst_wn \
1702fc6b751SPeter Maydell                 p=1 size=2
1712fc6b751SPeter MaydellVLDSTH_W         111 . 110 0 a:1 0 1   . 1 ... ... 0 111 10 ....... @vldst_wn \
1722fc6b751SPeter Maydell                 p=0 w=1 size=2
1732fc6b751SPeter MaydellVLDSTH_W         111 . 110 1 a:1 0 w:1 . 1 ... ... 0 111 10 ....... @vldst_wn \
1742fc6b751SPeter Maydell                 p=1 size=2
1752fc6b751SPeter Maydell
176507b6a50SPeter Maydell# Non-widening loads/stores (P=0 W=0 is 'related encoding')
177507b6a50SPeter MaydellVLDR_VSTR        1110110 0 a:1 . 1   . .... ... 111100 .......   @vldr_vstr \
178507b6a50SPeter Maydell                 size=0 p=0 w=1
179507b6a50SPeter MaydellVLDR_VSTR        1110110 0 a:1 . 1   . .... ... 111101 .......   @vldr_vstr \
180507b6a50SPeter Maydell                 size=1 p=0 w=1
181507b6a50SPeter MaydellVLDR_VSTR        1110110 0 a:1 . 1   . .... ... 111110 .......   @vldr_vstr \
182507b6a50SPeter Maydell                 size=2 p=0 w=1
183507b6a50SPeter MaydellVLDR_VSTR        1110110 1 a:1 . w:1 . .... ... 111100 .......   @vldr_vstr \
184507b6a50SPeter Maydell                 size=0 p=1
185507b6a50SPeter MaydellVLDR_VSTR        1110110 1 a:1 . w:1 . .... ... 111101 .......   @vldr_vstr \
186507b6a50SPeter Maydell                 size=1 p=1
187507b6a50SPeter MaydellVLDR_VSTR        1110110 1 a:1 . w:1 . .... ... 111110 .......   @vldr_vstr \
188507b6a50SPeter Maydell                 size=2 p=1
1890f0f2bd5SPeter Maydell
190dc18628bSPeter Maydell# gather loads/scatter stores
191dc18628bSPeter MaydellVLDR_S_sg        111 0 1100 1 . 01 .... ... 0 111 . .... .... @vldst_sg
192dc18628bSPeter MaydellVLDR_U_sg        111 1 1100 1 . 01 .... ... 0 111 . .... .... @vldst_sg
193dc18628bSPeter MaydellVSTR_sg          111 0 1100 1 . 00 .... ... 0 111 . .... .... @vldst_sg
194dc18628bSPeter Maydell
195fac80f08SPeter MaydellVLDRW_sg_imm     111 1 1101 ... 1 ... 0 ... 1 1110 .... .... @vldst_sg_imm
196fac80f08SPeter MaydellVLDRD_sg_imm     111 1 1101 ... 1 ... 0 ... 1 1111 .... .... @vldst_sg_imm
197fac80f08SPeter MaydellVSTRW_sg_imm     111 1 1101 ... 0 ... 0 ... 1 1110 .... .... @vldst_sg_imm
198fac80f08SPeter MaydellVSTRD_sg_imm     111 1 1101 ... 0 ... 0 ... 1 1111 .... .... @vldst_sg_imm
199fac80f08SPeter Maydell
200075e7e97SPeter Maydell# deinterleaving loads/interleaving stores
201075e7e97SPeter MaydellVLD2             1111 1100 1 .. 1 .... ... 1 111 .. .. 00000 @vldst_il
202075e7e97SPeter MaydellVLD4             1111 1100 1 .. 1 .... ... 1 111 .. .. 00001 @vldst_il
203075e7e97SPeter MaydellVST2             1111 1100 1 .. 0 .... ... 1 111 .. .. 00000 @vldst_il
204075e7e97SPeter MaydellVST4             1111 1100 1 .. 0 .... ... 1 111 .. .. 00001 @vldst_il
205075e7e97SPeter Maydell
2061241f148SPeter Maydell# Moves between 2 32-bit vector lanes and 2 general purpose registers
2071241f148SPeter MaydellVMOV_to_2gp      1110 1100 0 . 00 rt2:4 ... 0 1111 000 idx:1 rt:4 qd=%qd
2081241f148SPeter MaydellVMOV_from_2gp    1110 1100 0 . 01 rt2:4 ... 0 1111 000 idx:1 rt:4 qd=%qd
2091241f148SPeter Maydell
21068245e44SPeter Maydell# Vector 2-op
21168245e44SPeter MaydellVAND             1110 1111 0 . 00 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
21268245e44SPeter MaydellVBIC             1110 1111 0 . 01 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
21368245e44SPeter MaydellVORR             1110 1111 0 . 10 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
21468245e44SPeter MaydellVORN             1110 1111 0 . 11 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
21568245e44SPeter MaydellVEOR             1111 1111 0 . 00 ... 0 ... 0 0001 . 1 . 1 ... 0 @2op_nosz
21668245e44SPeter Maydell
2179333fe4dSPeter MaydellVADD             1110 1111 0 . .. ... 0 ... 0 1000 . 1 . 0 ... 0 @2op
2189333fe4dSPeter MaydellVSUB             1111 1111 0 . .. ... 0 ... 0 1000 . 1 . 0 ... 0 @2op
2199333fe4dSPeter MaydellVMUL             1110 1111 0 . .. ... 0 ... 0 1001 . 1 . 1 ... 0 @2op
2209333fe4dSPeter Maydell
221c2262707SPeter Maydell# The VSHLL T2 encoding is not a @2op pattern, but is here because it
222c2262707SPeter Maydell# overlaps what would be size=0b11 VMULH/VRMULH
223c2262707SPeter Maydell{
22490257a4fSPeter Maydell  VMAXNMA        111 0 1110 0 . 11 1111 ... 0 1110 1 0 . 0 ... 1 @vmaxnma size=2
22590257a4fSPeter Maydell
226c2262707SPeter Maydell  VSHLL_BS       111 0 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_b
227c2262707SPeter Maydell  VSHLL_BS       111 0 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_h
228c2262707SPeter Maydell
22954dc78a9SPeter Maydell  VQMOVUNB       111 0 1110 0 . 11 .. 01 ... 0 1110 1 0 . 0 ... 1 @1op
23054dc78a9SPeter Maydell  VQMOVN_BS      111 0 1110 0 . 11 .. 11 ... 0 1110 0 0 . 0 ... 1 @1op
23154dc78a9SPeter Maydell
232d5c571eaSPeter Maydell  VMAXA          111 0 1110 0 . 11 .. 11 ... 0 1110 1 0 . 0 ... 1 @1op
233d5c571eaSPeter Maydell
234ba62cc56SPeter Maydell  VMULH_S        111 0 1110 0 . .. ...1 ... 0 1110 . 0 . 0 ... 1 @2op
235c2262707SPeter Maydell}
236c2262707SPeter Maydell
237c2262707SPeter Maydell{
23890257a4fSPeter Maydell  VMAXNMA        111 1 1110 0 . 11  1111 ... 0 1110 1 0 . 0 ... 1 @vmaxnma size=1
23990257a4fSPeter Maydell
240c2262707SPeter Maydell  VSHLL_BU       111 1 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_b
241c2262707SPeter Maydell  VSHLL_BU       111 1 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_h
242c2262707SPeter Maydell
24354dc78a9SPeter Maydell  VMOVNB         111 1 1110 0 . 11 .. 01 ... 0 1110 1 0 . 0 ... 1 @1op
24454dc78a9SPeter Maydell  VQMOVN_BU      111 1 1110 0 . 11 .. 11 ... 0 1110 0 0 . 0 ... 1 @1op
24554dc78a9SPeter Maydell
246ba62cc56SPeter Maydell  VMULH_U        111 1 1110 0 . .. ...1 ... 0 1110 . 0 . 0 ... 1 @2op
247c2262707SPeter Maydell}
248c2262707SPeter Maydell
249c2262707SPeter Maydell{
25090257a4fSPeter Maydell  VMINNMA        111 0 1110 0 . 11  1111 ... 1 1110 1 0 . 0 ... 1 @vmaxnma size=2
251c2262707SPeter Maydell  VSHLL_TS       111 0 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_b
252c2262707SPeter Maydell  VSHLL_TS       111 0 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_h
253ba62cc56SPeter Maydell
25454dc78a9SPeter Maydell  VQMOVUNT       111 0 1110 0 . 11 .. 01 ... 1 1110 1 0 . 0 ... 1 @1op
25554dc78a9SPeter Maydell  VQMOVN_TS      111 0 1110 0 . 11 .. 11 ... 1 1110 0 0 . 0 ... 1 @1op
25654dc78a9SPeter Maydell
257d5c571eaSPeter Maydell  VMINA          111 0 1110 0 . 11 .. 11 ... 1 1110 1 0 . 0 ... 1 @1op
258d5c571eaSPeter Maydell
259fca87b78SPeter Maydell  VRMULH_S       111 0 1110 0 . .. ...1 ... 1 1110 . 0 . 0 ... 1 @2op
260c2262707SPeter Maydell}
261c2262707SPeter Maydell
262c2262707SPeter Maydell{
26390257a4fSPeter Maydell  VMINNMA        111 1 1110 0 . 11  1111 ... 1 1110 1 0 . 0 ... 1 @vmaxnma size=1
264c2262707SPeter Maydell  VSHLL_TU       111 1 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_b
265c2262707SPeter Maydell  VSHLL_TU       111 1 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_h
266c2262707SPeter Maydell
26754dc78a9SPeter Maydell  VMOVNT         111 1 1110 0 . 11 .. 01 ... 1 1110 1 0 . 0 ... 1 @1op
26854dc78a9SPeter Maydell  VQMOVN_TU      111 1 1110 0 . 11 .. 11 ... 1 1110 0 0 . 0 ... 1 @1op
26954dc78a9SPeter Maydell
270fca87b78SPeter Maydell  VRMULH_U       111 1 1110 0 . .. ...1 ... 1 1110 . 0 . 0 ... 1 @2op
271c2262707SPeter Maydell}
272fca87b78SPeter Maydell
273cd367ff3SPeter MaydellVMAX_S           111 0 1111 0 . .. ... 0 ... 0 0110 . 1 . 0 ... 0 @2op
274cd367ff3SPeter MaydellVMAX_U           111 1 1111 0 . .. ... 0 ... 0 0110 . 1 . 0 ... 0 @2op
275cd367ff3SPeter MaydellVMIN_S           111 0 1111 0 . .. ... 0 ... 0 0110 . 1 . 1 ... 0 @2op
276cd367ff3SPeter MaydellVMIN_U           111 1 1111 0 . .. ... 0 ... 0 0110 . 1 . 1 ... 0 @2op
277cd367ff3SPeter Maydell
278bc67aa8dSPeter MaydellVABD_S           111 0 1111 0 . .. ... 0 ... 0 0111 . 1 . 0 ... 0 @2op
279bc67aa8dSPeter MaydellVABD_U           111 1 1111 0 . .. ... 0 ... 0 0111 . 1 . 0 ... 0 @2op
280bc67aa8dSPeter Maydell
281abc48e31SPeter MaydellVHADD_S          111 0 1111 0 . .. ... 0 ... 0 0000 . 1 . 0 ... 0 @2op
282abc48e31SPeter MaydellVHADD_U          111 1 1111 0 . .. ... 0 ... 0 0000 . 1 . 0 ... 0 @2op
283abc48e31SPeter MaydellVHSUB_S          111 0 1111 0 . .. ... 0 ... 0 0010 . 1 . 0 ... 0 @2op
284abc48e31SPeter MaydellVHSUB_U          111 1 1111 0 . .. ... 0 ... 0 0010 . 1 . 0 ... 0 @2op
285abc48e31SPeter Maydell
286c1bd78cbSPeter Maydell{
287c1bd78cbSPeter Maydell  VMULLP_B       111 . 1110 0 . 11 ... 1 ... 0 1110 . 0 . 0 ... 0 @2op_sz28
288ac6ad1dcSPeter Maydell  VMULL_BS       111 0 1110 0 . .. ... 1 ... 0 1110 . 0 . 0 ... 0 @2op
289ac6ad1dcSPeter Maydell  VMULL_BU       111 1 1110 0 . .. ... 1 ... 0 1110 . 0 . 0 ... 0 @2op
290c1bd78cbSPeter Maydell}
291c1bd78cbSPeter Maydell{
292c1bd78cbSPeter Maydell  VMULLP_T       111 . 1110 0 . 11 ... 1 ... 1 1110 . 0 . 0 ... 0 @2op_sz28
293ac6ad1dcSPeter Maydell  VMULL_TS       111 0 1110 0 . .. ... 1 ... 1 1110 . 0 . 0 ... 0 @2op
294ac6ad1dcSPeter Maydell  VMULL_TU       111 1 1110 0 . .. ... 1 ... 1 1110 . 0 . 0 ... 0 @2op
295c1bd78cbSPeter Maydell}
296ac6ad1dcSPeter Maydell
297380caf6cSPeter MaydellVQDMULH          1110 1111 0 . .. ... 0 ... 0 1011 . 1 . 0 ... 0 @2op
298380caf6cSPeter MaydellVQRDMULH         1111 1111 0 . .. ... 0 ... 0 1011 . 1 . 0 ... 0 @2op
299380caf6cSPeter Maydell
300f741707bSPeter MaydellVQADD_S          111 0 1111 0 . .. ... 0 ... 0 0000 . 1 . 1 ... 0 @2op
301f741707bSPeter MaydellVQADD_U          111 1 1111 0 . .. ... 0 ... 0 0000 . 1 . 1 ... 0 @2op
302f741707bSPeter MaydellVQSUB_S          111 0 1111 0 . .. ... 0 ... 0 0010 . 1 . 1 ... 0 @2op
303f741707bSPeter MaydellVQSUB_U          111 1 1111 0 . .. ... 0 ... 0 0010 . 1 . 1 ... 0 @2op
304f741707bSPeter Maydell
3050372cad8SPeter MaydellVSHL_S           111 0 1111 0 . .. ... 0 ... 0 0100 . 1 . 0 ... 0 @2op_rev
3060372cad8SPeter MaydellVSHL_U           111 1 1111 0 . .. ... 0 ... 0 0100 . 1 . 0 ... 0 @2op_rev
3070372cad8SPeter Maydell
308bb002345SPeter MaydellVRSHL_S          111 0 1111 0 . .. ... 0 ... 0 0101 . 1 . 0 ... 0 @2op_rev
309bb002345SPeter MaydellVRSHL_U          111 1 1111 0 . .. ... 0 ... 0 0101 . 1 . 0 ... 0 @2op_rev
310bb002345SPeter Maydell
311483da661SPeter MaydellVQSHL_S          111 0 1111 0 . .. ... 0 ... 0 0100 . 1 . 1 ... 0 @2op_rev
312483da661SPeter MaydellVQSHL_U          111 1 1111 0 . .. ... 0 ... 0 0100 . 1 . 1 ... 0 @2op_rev
313483da661SPeter Maydell
3149dc868c4SPeter MaydellVQRSHL_S         111 0 1111 0 . .. ... 0 ... 0 0101 . 1 . 1 ... 0 @2op_rev
3159dc868c4SPeter MaydellVQRSHL_U         111 1 1111 0 . .. ... 0 ... 0 0101 . 1 . 1 ... 0 @2op_rev
3169dc868c4SPeter Maydell
317d3cd965cSPeter Maydell{
318d3cd965cSPeter Maydell  VCMUL0         111 . 1110 0 . 11 ... 0 ... 0 1110 . 0 . 0 ... 0 @2op_sz28
319fd677f80SPeter Maydell  VQDMLADH       1110  1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 0 @2op
32092f11732SPeter Maydell  VQDMLSDH       1111  1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 0 @2op
321d3cd965cSPeter Maydell}
322d3cd965cSPeter Maydell
323d3cd965cSPeter Maydell{
324d3cd965cSPeter Maydell  VCMUL180       111 . 1110 0 . 11 ... 0 ... 1 1110 . 0 . 0 ... 0 @2op_sz28
325d3cd965cSPeter Maydell  VQDMLADHX      111 0 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 0 @2op
32692f11732SPeter Maydell  VQDMLSDHX      111 1 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 0 @2op
327d3cd965cSPeter Maydell}
328d3cd965cSPeter Maydell
329d3cd965cSPeter Maydell{
330d3cd965cSPeter Maydell  VCMUL90        111 . 1110 0 . 11 ... 0 ... 0 1110 . 0 . 0 ... 1 @2op_sz28
331d3cd965cSPeter Maydell  VQRDMLADH      111 0 1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 1 @2op
33292f11732SPeter Maydell  VQRDMLSDH      111 1 1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 1 @2op
333d3cd965cSPeter Maydell}
334d3cd965cSPeter Maydell
335d3cd965cSPeter Maydell{
336d3cd965cSPeter Maydell  VCMUL270       111 . 1110 0 . 11 ... 0 ... 1 1110 . 0 . 0 ... 1 @2op_sz28
337d3cd965cSPeter Maydell  VQRDMLADHX     111 0 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 1 @2op
33892f11732SPeter Maydell  VQRDMLSDHX     111 1 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 1 @2op
339d3cd965cSPeter Maydell}
34092f11732SPeter Maydell
34143364321SPeter MaydellVQDMULLB         111 . 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 1 @2op_sz28
34243364321SPeter MaydellVQDMULLT         111 . 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 1 @2op_sz28
34343364321SPeter Maydell
3441eb987a8SPeter MaydellVRHADD_S         111 0 1111 0 . .. ... 0 ... 0 0001 . 1 . 0 ... 0 @2op
3451eb987a8SPeter MaydellVRHADD_U         111 1 1111 0 . .. ... 0 ... 0 0001 . 1 . 0 ... 0 @2op
3461eb987a8SPeter Maydell
3478625693aSPeter Maydell{
34889bc4c4fSPeter Maydell  VADC           1110 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 0 @2op_nosz
34989bc4c4fSPeter Maydell  VADCI          1110 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 0 @2op_nosz
3508625693aSPeter Maydell  VHCADD90       1110 1110 0 . .. ... 0 ... 0 1111 . 0 . 0 ... 0 @2op
3518625693aSPeter Maydell  VHCADD270      1110 1110 0 . .. ... 0 ... 1 1111 . 0 . 0 ... 0 @2op
3528625693aSPeter Maydell}
35367ec113bSPeter Maydell
35467ec113bSPeter Maydell{
35567ec113bSPeter Maydell  VSBC           1111 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 0 @2op_nosz
35689bc4c4fSPeter Maydell  VSBCI          1111 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 0 @2op_nosz
35767ec113bSPeter Maydell  VCADD90        1111 1110 0 . .. ... 0 ... 0 1111 . 0 . 0 ... 0 @2op
35867ec113bSPeter Maydell  VCADD270       1111 1110 0 . .. ... 0 ... 1 1111 . 0 . 0 ... 0 @2op
35967ec113bSPeter Maydell}
36089bc4c4fSPeter Maydell
3610f0f2bd5SPeter Maydell# Vector miscellaneous
3620f0f2bd5SPeter Maydell
3636437f1f7SPeter MaydellVCLS             1111 1111 1 . 11 .. 00 ... 0 0100 01 . 0 ... 0 @1op
3640f0f2bd5SPeter MaydellVCLZ             1111 1111 1 . 11 .. 00 ... 0 0100 11 . 0 ... 0 @1op
365249b5309SPeter Maydell
366249b5309SPeter MaydellVREV16           1111 1111 1 . 11 .. 00 ... 0 0001 01 . 0 ... 0 @1op
367249b5309SPeter MaydellVREV32           1111 1111 1 . 11 .. 00 ... 0 0000 11 . 0 ... 0 @1op
368249b5309SPeter MaydellVREV64           1111 1111 1 . 11 .. 00 ... 0 0000 01 . 0 ... 0 @1op
3698abd3c80SPeter Maydell
3708abd3c80SPeter MaydellVMVN             1111 1111 1 . 11 00 00 ... 0 0101 11 . 0 ... 0 @1op_nosz
37159c91773SPeter Maydell
37259c91773SPeter MaydellVABS             1111 1111 1 . 11 .. 01 ... 0 0011 01 . 0 ... 0 @1op
37359c91773SPeter MaydellVABS_fp          1111 1111 1 . 11 .. 01 ... 0 0111 01 . 0 ... 0 @1op
374399a8c76SPeter MaydellVNEG             1111 1111 1 . 11 .. 01 ... 0 0011 11 . 0 ... 0 @1op
375399a8c76SPeter MaydellVNEG_fp          1111 1111 1 . 11 .. 01 ... 0 0111 11 . 0 ... 0 @1op
376ab59362fSPeter Maydell
377398e7cd3SPeter MaydellVQABS            1111 1111 1 . 11 .. 00 ... 0 0111 01 . 0 ... 0 @1op
378398e7cd3SPeter MaydellVQNEG            1111 1111 1 . 11 .. 00 ... 0 0111 11 . 0 ... 0 @1op
379398e7cd3SPeter Maydell
380ab59362fSPeter Maydell&vdup qd rt size
381ab59362fSPeter Maydell# Qd is in the fields usually named Qn
382ab59362fSPeter Maydell@vdup            .... .... . . .. ... . rt:4 .... . . . . .... qd=%qn &vdup
383ab59362fSPeter Maydell
384ab59362fSPeter Maydell# B and E bits encode size, which we decode here to the usual size values
385ab59362fSPeter MaydellVDUP             1110 1110 1 1 10 ... 0 .... 1011 . 0 0 1 0000 @vdup size=0
386ab59362fSPeter MaydellVDUP             1110 1110 1 0 10 ... 0 .... 1011 . 0 1 1 0000 @vdup size=1
387ab59362fSPeter MaydellVDUP             1110 1110 1 0 10 ... 0 .... 1011 . 0 0 1 0000 @vdup size=2
3881d2386f7SPeter Maydell
389395b92d5SPeter Maydell# Incrementing and decrementing dup
390395b92d5SPeter Maydell
391395b92d5SPeter Maydell# VIDUP, VDDUP format immediate: 1 << (immh:imml)
392395b92d5SPeter Maydell%imm_vidup 7:1 0:1 !function=vidup_imm
393395b92d5SPeter Maydell
394395b92d5SPeter Maydell# VIDUP, VDDUP registers: Rm bits [3:1] from insn, bit 0 is 1;
395395b92d5SPeter Maydell# Rn bits [3:1] from insn, bit 0 is 0
396395b92d5SPeter Maydell%vidup_rm 1:3 !function=times_2_plus_1
397395b92d5SPeter Maydell%vidup_rn 17:3 !function=times_2
398395b92d5SPeter Maydell
399395b92d5SPeter Maydell@vidup           .... .... . . size:2 .... .... .... .... .... \
400395b92d5SPeter Maydell                 qd=%qd imm=%imm_vidup rn=%vidup_rn &vidup
401395b92d5SPeter Maydell@viwdup          .... .... . . size:2 .... .... .... .... .... \
402395b92d5SPeter Maydell                 qd=%qd imm=%imm_vidup rm=%vidup_rm rn=%vidup_rn &viwdup
403395b92d5SPeter Maydell{
404395b92d5SPeter Maydell  VIDUP          1110 1110 0 . .. ... 1 ... 0 1111 . 110 111 . @vidup
405395b92d5SPeter Maydell  VIWDUP         1110 1110 0 . .. ... 1 ... 0 1111 . 110 ... . @viwdup
406395b92d5SPeter Maydell}
407395b92d5SPeter Maydell{
408c2d8f6bbSPeter Maydell  VCMPGT_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  0110 .... @vcmp_fp_scalar size=2
409c2d8f6bbSPeter Maydell  VCMPLE_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  1110 .... @vcmp_fp_scalar size=2
410395b92d5SPeter Maydell  VDDUP            1110 1110 0 . .. ... 1 ... 1 1111 . 110 111 . @vidup
411395b92d5SPeter Maydell  VDWDUP           1110 1110 0 . .. ... 1 ... 1 1111 . 110 ... . @viwdup
412395b92d5SPeter Maydell}
413395b92d5SPeter Maydell
4141d2386f7SPeter Maydell# multiply-add long dual accumulate
4151d2386f7SPeter Maydell# rdahi: bits [3:1] from insn, bit 0 is 1
4161d2386f7SPeter Maydell# rdalo: bits [3:1] from insn, bit 0 is 0
4171d2386f7SPeter Maydell%rdahi 20:3 !function=times_2_plus_1
4181d2386f7SPeter Maydell%rdalo 13:3 !function=times_2
4191d2386f7SPeter Maydell# size bit is 0 for 16 bit, 1 for 32 bit
4201d2386f7SPeter Maydell%size_16 16:1 !function=plus_1
4211d2386f7SPeter Maydell
4221d2386f7SPeter Maydell&vmlaldav rdahi rdalo size qn qm x a
423f0ffff51SPeter Maydell&vmladav rda size qn qm x a
4241d2386f7SPeter Maydell
425345910f8SPeter Maydell@vmlaldav        .... .... . ... ... . ... x:1 .... .. a:1 . qm:3 . \
4261d2386f7SPeter Maydell                 qn=%qn rdahi=%rdahi rdalo=%rdalo size=%size_16 &vmlaldav
427345910f8SPeter Maydell@vmlaldav_nosz   .... .... . ... ... . ... x:1 .... .. a:1 . qm:3 . \
42838548747SPeter Maydell                 qn=%qn rdahi=%rdahi rdalo=%rdalo size=0 &vmlaldav
429f0ffff51SPeter Maydell@vmladav         .... .... .... ... . ... x:1 .... . . a:1 . qm:3 . \
430f0ffff51SPeter Maydell                 qn=%qn rda=%rdalo size=%size_16 &vmladav
431f0ffff51SPeter Maydell@vmladav_nosz    .... .... .... ... . ... x:1 .... . . a:1 . qm:3 . \
432f0ffff51SPeter Maydell                 qn=%qn rda=%rdalo size=0 &vmladav
433181cd971SPeter Maydell
434f0ffff51SPeter Maydell{
435f0ffff51SPeter Maydell  VMLADAV_S      1110 1110 1111  ... . ... . 1110 . 0 . 0 ... 0 @vmladav
436f0ffff51SPeter Maydell  VMLALDAV_S     1110 1110 1 ... ... . ... . 1110 . 0 . 0 ... 0 @vmlaldav
437f0ffff51SPeter Maydell}
438f0ffff51SPeter Maydell{
439f0ffff51SPeter Maydell  VMLADAV_U      1111 1110 1111  ... . ... . 1110 . 0 . 0 ... 0 @vmladav
440f0ffff51SPeter Maydell  VMLALDAV_U     1111 1110 1 ... ... . ... . 1110 . 0 . 0 ... 0 @vmlaldav
441f0ffff51SPeter Maydell}
442f0ffff51SPeter Maydell
443f0ffff51SPeter Maydell{
444f0ffff51SPeter Maydell  VMLSDAV        1110 1110 1111  ... . ... . 1110 . 0 . 0 ... 1 @vmladav
445345910f8SPeter Maydell  VMLSLDAV       1110 1110 1 ... ... . ... . 1110 . 0 . 0 ... 1 @vmlaldav
446f0ffff51SPeter Maydell}
447f0ffff51SPeter Maydell
448f0ffff51SPeter Maydell{
449f0ffff51SPeter Maydell  VMLSDAV        1111 1110 1111  ... 0 ... . 1110 . 0 . 0 ... 1 @vmladav_nosz
450f0ffff51SPeter Maydell  VRMLSLDAVH     1111 1110 1 ... ... 0 ... . 1110 . 0 . 0 ... 1 @vmlaldav_nosz
451f0ffff51SPeter Maydell}
452f0ffff51SPeter Maydell
453f0ffff51SPeter MaydellVMLADAV_S        1110 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 1 @vmladav_nosz
454f0ffff51SPeter MaydellVMLADAV_U        1111 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 1 @vmladav_nosz
45538548747SPeter Maydell
456688ba4cfSPeter Maydell{
45729f80e7dSPeter Maydell  [
45829f80e7dSPeter Maydell    VMAXNMAV     1110 1110 1110  11 00 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=2
45929f80e7dSPeter Maydell    VMINNMAV     1110 1110 1110  11 00 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=2
46029f80e7dSPeter Maydell    VMAXNMV      1110 1110 1110  11 10 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=2
46129f80e7dSPeter Maydell    VMINNMV      1110 1110 1110  11 10 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=2
46229f80e7dSPeter Maydell  ]
46329f80e7dSPeter Maydell  [
464688ba4cfSPeter Maydell    VMAXV_S      1110 1110 1110  .. 10 ....  1111 0 0 . 0 ... 0 @vmaxv
465688ba4cfSPeter Maydell    VMINV_S      1110 1110 1110  .. 10 ....  1111 1 0 . 0 ... 0 @vmaxv
466688ba4cfSPeter Maydell    VMAXAV       1110 1110 1110  .. 00 ....  1111 0 0 . 0 ... 0 @vmaxv
467688ba4cfSPeter Maydell    VMINAV       1110 1110 1110  .. 00 ....  1111 1 0 . 0 ... 0 @vmaxv
46829f80e7dSPeter Maydell  ]
469f0ffff51SPeter Maydell  VMLADAV_S      1110 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 0 @vmladav_nosz
470345910f8SPeter Maydell  VRMLALDAVH_S   1110 1110 1 ... ... 0 ... . 1111 . 0 . 0 ... 0 @vmlaldav_nosz
471688ba4cfSPeter Maydell}
472688ba4cfSPeter Maydell
473688ba4cfSPeter Maydell{
47429f80e7dSPeter Maydell  [
47529f80e7dSPeter Maydell    VMAXNMAV     1111 1110 1110  11 00 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=1
47629f80e7dSPeter Maydell    VMINNMAV     1111 1110 1110  11 00 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=1
47729f80e7dSPeter Maydell    VMAXNMV      1111 1110 1110  11 10 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=1
47829f80e7dSPeter Maydell    VMINNMV      1111 1110 1110  11 10 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=1
47929f80e7dSPeter Maydell  ]
48029f80e7dSPeter Maydell  [
481688ba4cfSPeter Maydell    VMAXV_U      1111 1110 1110  .. 10 ....  1111 0 0 . 0 ... 0 @vmaxv
482688ba4cfSPeter Maydell    VMINV_U      1111 1110 1110  .. 10 ....  1111 1 0 . 0 ... 0 @vmaxv
48329f80e7dSPeter Maydell  ]
484f0ffff51SPeter Maydell  VMLADAV_U      1111 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 0 @vmladav_nosz
485345910f8SPeter Maydell  VRMLALDAVH_U   1111 1110 1 ... ... 0 ... . 1111 . 0 . 0 ... 0 @vmlaldav_nosz
486688ba4cfSPeter Maydell}
48738548747SPeter Maydell
488e51896b3SPeter Maydell# Scalar operations
489e51896b3SPeter Maydell
490c2d8f6bbSPeter Maydell{
491c2d8f6bbSPeter Maydell  VCMPEQ_fp_scalar 1110 1110 0 . 11 ... 1 ... 0 1111  0100 .... @vcmp_fp_scalar size=2
492c2d8f6bbSPeter Maydell  VCMPNE_fp_scalar 1110 1110 0 . 11 ... 1 ... 0 1111  1100 .... @vcmp_fp_scalar size=2
493e51896b3SPeter Maydell  VADD_scalar      1110 1110 0 . .. ... 1 ... 0 1111 . 100 .... @2scalar
494c2d8f6bbSPeter Maydell}
495c2d8f6bbSPeter Maydell
496c2d8f6bbSPeter Maydell{
497c2d8f6bbSPeter Maydell  VCMPLT_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  1100 .... @vcmp_fp_scalar size=2
498c2d8f6bbSPeter Maydell  VCMPGE_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  0100 .... @vcmp_fp_scalar size=2
49991a358fdSPeter Maydell  VSUB_scalar      1110 1110 0 . .. ... 1 ... 1 1111 . 100 .... @2scalar
500c2d8f6bbSPeter Maydell}
5011b15a97dSPeter Maydell
5021b15a97dSPeter Maydell{
5031b15a97dSPeter Maydell  VSHL_S_scalar   1110 1110 0 . 11 .. 01 ... 1 1110 0110 .... @shl_scalar
5041b15a97dSPeter Maydell  VRSHL_S_scalar  1110 1110 0 . 11 .. 11 ... 1 1110 0110 .... @shl_scalar
5051b15a97dSPeter Maydell  VQSHL_S_scalar  1110 1110 0 . 11 .. 01 ... 1 1110 1110 .... @shl_scalar
5061b15a97dSPeter Maydell  VQRSHL_S_scalar 1110 1110 0 . 11 .. 11 ... 1 1110 1110 .... @shl_scalar
50791a358fdSPeter Maydell  VMUL_scalar     1110 1110 0 . .. ... 1 ... 1 1110 . 110 .... @2scalar
5081b15a97dSPeter Maydell}
5091b15a97dSPeter Maydell
5101b15a97dSPeter Maydell{
5111b15a97dSPeter Maydell  VSHL_U_scalar   1111 1110 0 . 11 .. 01 ... 1 1110 0110 .... @shl_scalar
5121b15a97dSPeter Maydell  VRSHL_U_scalar  1111 1110 0 . 11 .. 11 ... 1 1110 0110 .... @shl_scalar
5131b15a97dSPeter Maydell  VQSHL_U_scalar  1111 1110 0 . 11 .. 01 ... 1 1110 1110 .... @shl_scalar
5141b15a97dSPeter Maydell  VQRSHL_U_scalar 1111 1110 0 . 11 .. 11 ... 1 1110 1110 .... @shl_scalar
5151b15a97dSPeter Maydell  VBRSR           1111 1110 0 . .. ... 1 ... 1 1110 . 110 .... @2scalar
5161b15a97dSPeter Maydell}
5171b15a97dSPeter Maydell
518abfe39b2SPeter Maydell{
519abfe39b2SPeter Maydell  VADD_fp_scalar  111 . 1110 0 . 11 ... 0 ... 0 1111 . 100 .... @2op_fp_scalar
520644f717cSPeter Maydell  VHADD_S_scalar  1110  1110 0 . .. ... 0 ... 0 1111 . 100 .... @2scalar
521644f717cSPeter Maydell  VHADD_U_scalar  1111  1110 0 . .. ... 0 ... 0 1111 . 100 .... @2scalar
522abfe39b2SPeter Maydell}
523abfe39b2SPeter Maydell
524abfe39b2SPeter Maydell{
525abfe39b2SPeter Maydell  VSUB_fp_scalar  111 . 1110 0 . 11 ... 0 ... 1 1111 . 100 .... @2op_fp_scalar
526644f717cSPeter Maydell  VHSUB_S_scalar  1110  1110 0 . .. ... 0 ... 1 1111 . 100 .... @2scalar
527644f717cSPeter Maydell  VHSUB_U_scalar  1111  1110 0 . .. ... 0 ... 1 1111 . 100 .... @2scalar
528abfe39b2SPeter Maydell}
52939f2ec85SPeter Maydell
530a8890353SPeter Maydell{
53139f2ec85SPeter Maydell  VQADD_S_scalar  1110  1110 0 . .. ... 0 ... 0 1111 . 110 .... @2scalar
53239f2ec85SPeter Maydell  VQADD_U_scalar  1111  1110 0 . .. ... 0 ... 0 1111 . 110 .... @2scalar
533a8890353SPeter Maydell  VQDMULLB_scalar 111 . 1110 0 . 11 ... 0 ... 0 1111 . 110 .... @2scalar_nosz \
534a8890353SPeter Maydell                  size=%size_28
535a8890353SPeter Maydell}
536a8890353SPeter Maydell
537a8890353SPeter Maydell{
53839f2ec85SPeter Maydell  VQSUB_S_scalar  1110  1110 0 . .. ... 0 ... 1 1111 . 110 .... @2scalar
53939f2ec85SPeter Maydell  VQSUB_U_scalar  1111  1110 0 . .. ... 0 ... 1 1111 . 110 .... @2scalar
540a8890353SPeter Maydell  VQDMULLT_scalar 111 . 1110 0 . 11 ... 0 ... 1 1111 . 110 .... @2scalar_nosz \
541a8890353SPeter Maydell                  size=%size_28
542a8890353SPeter Maydell}
543a8890353SPeter Maydell
544abfe39b2SPeter Maydell{
545abfe39b2SPeter Maydell  VMUL_fp_scalar  111 . 1110 0 . 11 ... 1 ... 0 1110 . 110 .... @2op_fp_scalar
54666c05767SPeter Maydell  VQDMULH_scalar  1110  1110 0 . .. ... 1 ... 0 1110 . 110 .... @2scalar
54766c05767SPeter Maydell  VQRDMULH_scalar 1111  1110 0 . .. ... 1 ... 0 1110 . 110 .... @2scalar
548abfe39b2SPeter Maydell}
54966c05767SPeter Maydell
5504773e74eSPeter Maydell{
5514773e74eSPeter Maydell  VFMA_scalar     111 . 1110 0 . 11 ... 1 ... 0 1110 . 100 .... @2op_fp_scalar
5526b895bf8SPeter Maydell  # The U bit (28) is don't-care because it does not affect the result
553c69e34c6SPeter Maydell  VMLA            111 - 1110 0 . .. ... 1 ... 0 1110 . 100 .... @2scalar
5544773e74eSPeter Maydell}
5554773e74eSPeter Maydell
5564773e74eSPeter Maydell{
5574773e74eSPeter Maydell  VFMAS_scalar    111 . 1110 0 . 11 ... 1 ... 1 1110 . 100 .... @2op_fp_scalar
5584773e74eSPeter Maydell  # The U bit (28) is don't-care because it does not affect the result
5596b895bf8SPeter Maydell  VMLAS           111 - 1110 0 . .. ... 1 ... 1 1110 . 100 .... @2scalar
5604773e74eSPeter Maydell}
5616b895bf8SPeter Maydell
5628be9a250SPeter MaydellVQRDMLAH         1110 1110 0 . .. ... 0 ... 0 1110 . 100 .... @2scalar
5638be9a250SPeter MaydellVQRDMLASH        1110 1110 0 . .. ... 0 ... 1 1110 . 100 .... @2scalar
5648be9a250SPeter MaydellVQDMLAH          1110 1110 0 . .. ... 0 ... 0 1110 . 110 .... @2scalar
5658be9a250SPeter MaydellVQDMLASH         1110 1110 0 . .. ... 0 ... 1 1110 . 110 .... @2scalar
5668be9a250SPeter Maydell
5676f060a63SPeter Maydell# Vector add across vector
568d43ebd9dSPeter Maydell{
5696f060a63SPeter Maydell  VADDV          111 u:1 1110 1111 size:2 01 ... 0 1111 0 0 a:1 0 qm:3 0 rda=%rdalo
570d43ebd9dSPeter Maydell  VADDLV         111 u:1 1110 1 ... 1001 ... 0 1111 00 a:1 0 qm:3 0 \
571d43ebd9dSPeter Maydell                 rdahi=%rdahi rdalo=%rdalo
572d43ebd9dSPeter Maydell}
573a8890353SPeter Maydell
5747f061c0aSPeter Maydell@vabav           .... .... .. size:2 .... rda:4 .... .... .... &vabav qn=%qn qm=%qm
5757f061c0aSPeter Maydell
5767f061c0aSPeter MaydellVABAV_S          111 0 1110 10 .. ... 0 .... 1111 . 0 . 0 ... 1 @vabav
5777f061c0aSPeter MaydellVABAV_U          111 1 1110 10 .. ... 0 .... 1111 . 0 . 0 ... 1 @vabav
5787f061c0aSPeter Maydell
579eab84139SPeter Maydell# Logical immediate operations (1 reg and modified-immediate)
580eab84139SPeter Maydell
581eab84139SPeter Maydell# The cmode/op bits here decode VORR/VBIC/VMOV/VMVN, but
582eab84139SPeter Maydell# not in a way we can conveniently represent in decodetree without
583eab84139SPeter Maydell# a lot of repetition:
584eab84139SPeter Maydell# VORR: op=0, (cmode & 1) && cmode < 12
585eab84139SPeter Maydell# VBIC: op=1, (cmode & 1) && cmode < 12
586eab84139SPeter Maydell# VMOV: everything else
587eab84139SPeter Maydell# So we have a single decode line and check the cmode/op in the
588eab84139SPeter Maydell# trans function.
589eab84139SPeter MaydellVimm_1r 111 . 1111 1 . 00 0 ... ... 0 .... 0 1 . 1 .... @1imm
590f9ed6174SPeter Maydell
591f9ed6174SPeter Maydell# Shifts by immediate
592f9ed6174SPeter Maydell
593f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_b
594f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_h
595f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_w
596f9ed6174SPeter Maydell
597f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_b
598f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_h
599f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_w
600f9ed6174SPeter Maydell
601f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_b
602f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_h
603f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_w
604f9ed6174SPeter Maydell
605f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_b
606f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_h
607f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_w
6083394116fSPeter Maydell
6093394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_b
6103394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_h
6113394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_w
6123394116fSPeter Maydell
6133394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_b
6143394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_h
6153394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_w
6163394116fSPeter Maydell
6173394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_b
6183394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_h
6193394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_w
6203394116fSPeter Maydell
6213394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_b
6223394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_h
6233394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_w
624c2262707SPeter Maydell
625c2262707SPeter Maydell# VSHLL T1 encoding; the T2 VSHLL encoding is elsewhere in this file
6269dacf076SPeter Maydell# Note that VMOVL is encoded as "VSHLL with a zero shift count"; we
6279dacf076SPeter Maydell# implement it that way rather than special-casing it in the decode.
628c2262707SPeter MaydellVSHLL_BS          111 0 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_b
629c2262707SPeter MaydellVSHLL_BS          111 0 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_h
630c2262707SPeter Maydell
631c2262707SPeter MaydellVSHLL_BU          111 1 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_b
632c2262707SPeter MaydellVSHLL_BU          111 1 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_h
633c2262707SPeter Maydell
634c2262707SPeter MaydellVSHLL_TS          111 0 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_b
635c2262707SPeter MaydellVSHLL_TS          111 0 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_h
636c2262707SPeter Maydell
637c2262707SPeter MaydellVSHLL_TU          111 1 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_b
638c2262707SPeter MaydellVSHLL_TU          111 1 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_h
639a78b25faSPeter Maydell
640a78b25faSPeter Maydell# Shift-and-insert
641a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_b
642a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_h
643a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_w
644a78b25faSPeter Maydell
645a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_b
646a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_h
647a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_w
648162e2655SPeter Maydell
649162e2655SPeter Maydell# Narrowing shifts (which only support b and h sizes)
650162e2655SPeter MaydellVSHRNB            111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_b
651162e2655SPeter MaydellVSHRNB            111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_h
652162e2655SPeter MaydellVSHRNT            111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_b
653162e2655SPeter MaydellVSHRNT            111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_h
654162e2655SPeter Maydell
655162e2655SPeter MaydellVRSHRNB           111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_b
656162e2655SPeter MaydellVRSHRNB           111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_h
657162e2655SPeter MaydellVRSHRNT           111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_b
658162e2655SPeter MaydellVRSHRNT           111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_h
659d6f9e011SPeter Maydell
660d6f9e011SPeter MaydellVQSHRNB_S         111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_b
661d6f9e011SPeter MaydellVQSHRNB_S         111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_h
662d6f9e011SPeter MaydellVQSHRNT_S         111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_b
663d6f9e011SPeter MaydellVQSHRNT_S         111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_h
664d6f9e011SPeter MaydellVQSHRNB_U         111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_b
665d6f9e011SPeter MaydellVQSHRNB_U         111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_h
666d6f9e011SPeter MaydellVQSHRNT_U         111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_b
667d6f9e011SPeter MaydellVQSHRNT_U         111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_h
668d6f9e011SPeter Maydell
669d6f9e011SPeter MaydellVQSHRUNB          111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_b
670d6f9e011SPeter MaydellVQSHRUNB          111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_h
671d6f9e011SPeter MaydellVQSHRUNT          111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_b
672d6f9e011SPeter MaydellVQSHRUNT          111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_h
673d6f9e011SPeter Maydell
674d6f9e011SPeter MaydellVQRSHRNB_S        111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_b
675d6f9e011SPeter MaydellVQRSHRNB_S        111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_h
676d6f9e011SPeter MaydellVQRSHRNT_S        111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_b
677d6f9e011SPeter MaydellVQRSHRNT_S        111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_h
678d6f9e011SPeter MaydellVQRSHRNB_U        111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_b
679d6f9e011SPeter MaydellVQRSHRNB_U        111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_h
680d6f9e011SPeter MaydellVQRSHRNT_U        111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_b
681d6f9e011SPeter MaydellVQRSHRNT_U        111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_h
682d6f9e011SPeter Maydell
683d6f9e011SPeter MaydellVQRSHRUNB         111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_b
684d6f9e011SPeter MaydellVQRSHRUNB         111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_h
685d6f9e011SPeter MaydellVQRSHRUNT         111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_b
686d6f9e011SPeter MaydellVQRSHRUNT         111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_h
6872e6a4ce0SPeter Maydell
6882e6a4ce0SPeter MaydellVSHLC             111 0 1110 1 . 1 imm:5 ... 0 1111 1100 rdm:4 qd=%qd
689eff5d9a9SPeter Maydell
690eff5d9a9SPeter Maydell# Comparisons. We expand out the conditions which are split across
691eff5d9a9SPeter Maydell# encodings T1, T2, T3 and the fc bits. These include VPT, which is
692eff5d9a9SPeter Maydell# effectively "VCMP then VPST". A plain "VCMP" has a mask field of zero.
693c87fe6d2SPeter Maydell{
694c87fe6d2SPeter Maydell  VCMPEQ_fp       111 . 1110 0 . 11 ... 1 ... 0 1111 0 0 . 0 ... 0 @vcmp_fp
695eff5d9a9SPeter Maydell  VCMPEQ          111 1 1110 0 . .. ... 1 ... 0 1111 0 0 . 0 ... 0 @vcmp
696c87fe6d2SPeter Maydell}
697c87fe6d2SPeter Maydell
698c87fe6d2SPeter Maydell{
699c87fe6d2SPeter Maydell  VCMPNE_fp       111 . 1110 0 . 11 ... 1 ... 0 1111 1 0 . 0 ... 0 @vcmp_fp
700eff5d9a9SPeter Maydell  VCMPNE          111 1 1110 0 . .. ... 1 ... 0 1111 1 0 . 0 ... 0 @vcmp
701c87fe6d2SPeter Maydell}
702c87fe6d2SPeter Maydell
703c87fe6d2SPeter Maydell{
704c87fe6d2SPeter Maydell  VCMPGE_fp       111 . 1110 0 . 11 ... 1 ... 1 1111 0 0 . 0 ... 0 @vcmp_fp
705c87fe6d2SPeter Maydell  VCMPGE          111 1 1110 0 . .. ... 1 ... 1 1111 0 0 . 0 ... 0 @vcmp
706c87fe6d2SPeter Maydell}
707c87fe6d2SPeter Maydell
708c87fe6d2SPeter Maydell{
709c87fe6d2SPeter Maydell  VCMPLT_fp       111 . 1110 0 . 11 ... 1 ... 1 1111 1 0 . 0 ... 0 @vcmp_fp
710c87fe6d2SPeter Maydell  VCMPLT          111 1 1110 0 . .. ... 1 ... 1 1111 1 0 . 0 ... 0 @vcmp
711c87fe6d2SPeter Maydell}
712c87fe6d2SPeter Maydell
713c87fe6d2SPeter Maydell{
714c87fe6d2SPeter Maydell  VCMPGT_fp       111 . 1110 0 . 11 ... 1 ... 1 1111 0 0 . 0 ... 1 @vcmp_fp
715c87fe6d2SPeter Maydell  VCMPGT          111 1 1110 0 . .. ... 1 ... 1 1111 0 0 . 0 ... 1 @vcmp
716c87fe6d2SPeter Maydell}
717c87fe6d2SPeter Maydell
718c87fe6d2SPeter Maydell{
719c87fe6d2SPeter Maydell  VCMPLE_fp         111 . 1110 0 . 11 ... 1 ... 1 1111 1 0 . 0 ... 1 @vcmp_fp
720c87fe6d2SPeter Maydell  VCMPLE            1111 1110 0 . .. ... 1 ... 1 1111 1 0 . 0 ... 1 @vcmp
721c87fe6d2SPeter Maydell}
722c87fe6d2SPeter Maydell
723c386443bSPeter Maydell{
724c386443bSPeter Maydell  VPSEL           1111 1110 0 . 11 ... 1 ... 0 1111 . 0 . 0 ... 1 @2op_nosz
725eff5d9a9SPeter Maydell  VCMPCS          1111 1110 0 . .. ... 1 ... 0 1111 0 0 . 0 ... 1 @vcmp
726eff5d9a9SPeter Maydell  VCMPHI          1111 1110 0 . .. ... 1 ... 0 1111 1 0 . 0 ... 1 @vcmp
727c386443bSPeter Maydell}
728cce81873SPeter Maydell
729cce81873SPeter Maydell{
730fea3958fSPeter Maydell  VPNOT            1111 1110 0 0 11 000 1 000 0 1111 0100 1101
731cce81873SPeter Maydell  VPST             1111 1110 0 . 11 000 1 ... 0 1111 0100 1101 mask=%mask_22_13
732c2d8f6bbSPeter Maydell  VCMPEQ_fp_scalar 1111 1110 0 . 11 ... 1 ... 0 1111 0100 .... @vcmp_fp_scalar size=1
733cce81873SPeter Maydell  VCMPEQ_scalar    1111 1110 0 . .. ... 1 ... 0 1111 0100 .... @vcmp_scalar
734cce81873SPeter Maydell}
735c2d8f6bbSPeter Maydell
736c2d8f6bbSPeter Maydell{
737c2d8f6bbSPeter Maydell  VCMPNE_fp_scalar 1111 1110 0 . 11 ... 1 ... 0 1111 1100 .... @vcmp_fp_scalar size=1
738cce81873SPeter Maydell  VCMPNE_scalar    1111 1110 0 . .. ... 1 ... 0 1111 1100 .... @vcmp_scalar
739c2d8f6bbSPeter Maydell}
740c2d8f6bbSPeter Maydell
741c2d8f6bbSPeter Maydell{
742c2d8f6bbSPeter Maydell  VCMPGT_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 0110 .... @vcmp_fp_scalar size=1
743c2d8f6bbSPeter Maydell  VCMPGT_scalar    1111 1110 0 . .. ... 1 ... 1 1111 0110 .... @vcmp_scalar
744c2d8f6bbSPeter Maydell}
745c2d8f6bbSPeter Maydell
746c2d8f6bbSPeter Maydell{
747c2d8f6bbSPeter Maydell  VCMPLE_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 1110 .... @vcmp_fp_scalar size=1
748c2d8f6bbSPeter Maydell  VCMPLE_scalar    1111 1110 0 . .. ... 1 ... 1 1111 1110 .... @vcmp_scalar
749c2d8f6bbSPeter Maydell}
750c2d8f6bbSPeter Maydell
751c2d8f6bbSPeter Maydell{
752c2d8f6bbSPeter Maydell  VCMPGE_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 0100 .... @vcmp_fp_scalar size=1
753c2d8f6bbSPeter Maydell  VCMPGE_scalar    1111 1110 0 . .. ... 1 ... 1 1111 0100 .... @vcmp_scalar
754c2d8f6bbSPeter Maydell}
755c2d8f6bbSPeter Maydell{
756c2d8f6bbSPeter Maydell  VCMPLT_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 1100 .... @vcmp_fp_scalar size=1
757c2d8f6bbSPeter Maydell  VCMPLT_scalar    1111 1110 0 . .. ... 1 ... 1 1111 1100 .... @vcmp_scalar
758c2d8f6bbSPeter Maydell}
759c2d8f6bbSPeter Maydell
760cce81873SPeter MaydellVCMPCS_scalar     1111 1110 0 . .. ... 1 ... 0 1111 0 1 1 0 .... @vcmp_scalar
761cce81873SPeter MaydellVCMPHI_scalar     1111 1110 0 . .. ... 1 ... 0 1111 1 1 1 0 .... @vcmp_scalar
7621e35cd91SPeter Maydell
7631e35cd91SPeter Maydell# 2-operand FP
7641e35cd91SPeter MaydellVADD_fp           1110 1111 0 . 0 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
76582af0153SPeter MaydellVSUB_fp           1110 1111 0 . 1 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
76682af0153SPeter MaydellVMUL_fp           1111 1111 0 . 0 . ... 0 ... 0 1101 . 1 . 1 ... 0 @2op_fp
76782af0153SPeter MaydellVABD_fp           1111 1111 0 . 1 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
76882af0153SPeter Maydell
76982af0153SPeter MaydellVMAXNM            1111 1111 0 . 0 . ... 0 ... 0 1111 . 1 . 1 ... 0 @2op_fp
77082af0153SPeter MaydellVMINNM            1111 1111 0 . 1 . ... 0 ... 0 1111 . 1 . 1 ... 0 @2op_fp
771104afc68SPeter Maydell
772104afc68SPeter MaydellVCADD90_fp        1111 1100 1 . 0 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
773104afc68SPeter MaydellVCADD270_fp       1111 1101 1 . 0 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
7743173c0ddSPeter Maydell
7753173c0ddSPeter MaydellVFMA              1110 1111 0 . 0 . ... 0 ... 0 1100 . 1 . 1 ... 0 @2op_fp
7763173c0ddSPeter MaydellVFMS              1110 1111 0 . 1 . ... 0 ... 0 1100 . 1 . 1 ... 0 @2op_fp
777d3cd965cSPeter Maydell
778d3cd965cSPeter MaydellVCMLA0            1111 110 00 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
779d3cd965cSPeter MaydellVCMLA90           1111 110 01 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
780d3cd965cSPeter MaydellVCMLA180          1111 110 10 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
781d3cd965cSPeter MaydellVCMLA270          1111 110 11 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
7822a4b939cSPeter Maydell
7832a4b939cSPeter Maydell# floating-point <-> fixed-point conversions. Naming convention:
7842a4b939cSPeter Maydell# VCVT_<from><to>, S = signed int, U = unsigned int, H = halfprec, F = singleprec
7852a4b939cSPeter Maydell@vcvt             .... .... .. 1 ..... .... .. 1 . .... .... &2shift \
7862a4b939cSPeter Maydell                  qd=%qd qm=%qm shift=%rshift_i5 size=2
7872a4b939cSPeter Maydell@vcvt_f16         .... .... .. 11 .... .... .. 0 . .... .... &2shift \
7882a4b939cSPeter Maydell                  qd=%qd qm=%qm shift=%rshift_i4 size=1
7892a4b939cSPeter Maydell
7902a4b939cSPeter MaydellVCVT_SH_fixed     1110 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt_f16
7912a4b939cSPeter MaydellVCVT_UH_fixed     1111 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt_f16
7922a4b939cSPeter Maydell
7932a4b939cSPeter MaydellVCVT_HS_fixed     1110 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt_f16
7942a4b939cSPeter MaydellVCVT_HU_fixed     1111 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt_f16
7952a4b939cSPeter Maydell
7962a4b939cSPeter MaydellVCVT_SF_fixed     1110 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt
7972a4b939cSPeter MaydellVCVT_UF_fixed     1111 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt
7982a4b939cSPeter Maydell
7992a4b939cSPeter MaydellVCVT_FS_fixed     1110 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt
8002a4b939cSPeter MaydellVCVT_FU_fixed     1111 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt
801*2ec0dcf0SPeter Maydell
802*2ec0dcf0SPeter Maydell# VCVT between floating point and integer (halfprec and single);
803*2ec0dcf0SPeter Maydell# VCVT_<from><to>, S = signed int, U = unsigned int, F = float
804*2ec0dcf0SPeter MaydellVCVT_SF           1111 1111 1 . 11 .. 11 ... 0 011 00 1 . 0 ... 0 @1op
805*2ec0dcf0SPeter MaydellVCVT_UF           1111 1111 1 . 11 .. 11 ... 0 011 01 1 . 0 ... 0 @1op
806*2ec0dcf0SPeter MaydellVCVT_FS           1111 1111 1 . 11 .. 11 ... 0 011 10 1 . 0 ... 0 @1op
807*2ec0dcf0SPeter MaydellVCVT_FU           1111 1111 1 . 11 .. 11 ... 0 011 11 1 . 0 ... 0 @1op
808