xref: /qemu/target/arm/tcg/mve.decode (revision f0984d4040c328d1c021ae6680479cbbe13c485b)
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{
22473d260dbSPeter Maydell  VCVTB_SH       111 0 1110 0 . 11 1111 ... 0 1110 0 0 . 0 ... 1 @1op_nosz
22573d260dbSPeter Maydell
22690257a4fSPeter Maydell  VMAXNMA        111 0 1110 0 . 11 1111 ... 0 1110 1 0 . 0 ... 1 @vmaxnma size=2
22790257a4fSPeter Maydell
228c2262707SPeter Maydell  VSHLL_BS       111 0 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_b
229c2262707SPeter Maydell  VSHLL_BS       111 0 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_h
230c2262707SPeter Maydell
23154dc78a9SPeter Maydell  VQMOVUNB       111 0 1110 0 . 11 .. 01 ... 0 1110 1 0 . 0 ... 1 @1op
23254dc78a9SPeter Maydell  VQMOVN_BS      111 0 1110 0 . 11 .. 11 ... 0 1110 0 0 . 0 ... 1 @1op
23354dc78a9SPeter Maydell
234d5c571eaSPeter Maydell  VMAXA          111 0 1110 0 . 11 .. 11 ... 0 1110 1 0 . 0 ... 1 @1op
235d5c571eaSPeter Maydell
236ba62cc56SPeter Maydell  VMULH_S        111 0 1110 0 . .. ...1 ... 0 1110 . 0 . 0 ... 1 @2op
237c2262707SPeter Maydell}
238c2262707SPeter Maydell
239c2262707SPeter Maydell{
24073d260dbSPeter Maydell  VCVTB_HS       111 1 1110 0 . 11  1111 ... 0 1110 0 0 . 0 ... 1  @1op_nosz
24173d260dbSPeter Maydell
24290257a4fSPeter Maydell  VMAXNMA        111 1 1110 0 . 11  1111 ... 0 1110 1 0 . 0 ... 1 @vmaxnma size=1
24390257a4fSPeter Maydell
244c2262707SPeter Maydell  VSHLL_BU       111 1 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_b
245c2262707SPeter Maydell  VSHLL_BU       111 1 1110 0 . 11 .. 01 ... 0 1110 0 0 . 0 ... 1 @2_shll_esize_h
246c2262707SPeter Maydell
24754dc78a9SPeter Maydell  VMOVNB         111 1 1110 0 . 11 .. 01 ... 0 1110 1 0 . 0 ... 1 @1op
24854dc78a9SPeter Maydell  VQMOVN_BU      111 1 1110 0 . 11 .. 11 ... 0 1110 0 0 . 0 ... 1 @1op
24954dc78a9SPeter Maydell
250ba62cc56SPeter Maydell  VMULH_U        111 1 1110 0 . .. ...1 ... 0 1110 . 0 . 0 ... 1 @2op
251c2262707SPeter Maydell}
252c2262707SPeter Maydell
253c2262707SPeter Maydell{
25473d260dbSPeter Maydell  VCVTT_SH       111 0 1110 0 . 11  1111 ... 1 1110 0 0 . 0 ... 1 @1op_nosz
25573d260dbSPeter Maydell
25690257a4fSPeter Maydell  VMINNMA        111 0 1110 0 . 11  1111 ... 1 1110 1 0 . 0 ... 1 @vmaxnma size=2
257c2262707SPeter Maydell  VSHLL_TS       111 0 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_b
258c2262707SPeter Maydell  VSHLL_TS       111 0 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_h
259ba62cc56SPeter Maydell
26054dc78a9SPeter Maydell  VQMOVUNT       111 0 1110 0 . 11 .. 01 ... 1 1110 1 0 . 0 ... 1 @1op
26154dc78a9SPeter Maydell  VQMOVN_TS      111 0 1110 0 . 11 .. 11 ... 1 1110 0 0 . 0 ... 1 @1op
26254dc78a9SPeter Maydell
263d5c571eaSPeter Maydell  VMINA          111 0 1110 0 . 11 .. 11 ... 1 1110 1 0 . 0 ... 1 @1op
264d5c571eaSPeter Maydell
265fca87b78SPeter Maydell  VRMULH_S       111 0 1110 0 . .. ...1 ... 1 1110 . 0 . 0 ... 1 @2op
266c2262707SPeter Maydell}
267c2262707SPeter Maydell
268c2262707SPeter Maydell{
26973d260dbSPeter Maydell  VCVTT_HS       111 1 1110 0 . 11  1111 ... 1 1110 0 0 . 0 ... 1 @1op_nosz
27073d260dbSPeter Maydell
27190257a4fSPeter Maydell  VMINNMA        111 1 1110 0 . 11  1111 ... 1 1110 1 0 . 0 ... 1 @vmaxnma size=1
272c2262707SPeter Maydell  VSHLL_TU       111 1 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_b
273c2262707SPeter Maydell  VSHLL_TU       111 1 1110 0 . 11 .. 01 ... 1 1110 0 0 . 0 ... 1 @2_shll_esize_h
274c2262707SPeter Maydell
27554dc78a9SPeter Maydell  VMOVNT         111 1 1110 0 . 11 .. 01 ... 1 1110 1 0 . 0 ... 1 @1op
27654dc78a9SPeter Maydell  VQMOVN_TU      111 1 1110 0 . 11 .. 11 ... 1 1110 0 0 . 0 ... 1 @1op
27754dc78a9SPeter Maydell
278fca87b78SPeter Maydell  VRMULH_U       111 1 1110 0 . .. ...1 ... 1 1110 . 0 . 0 ... 1 @2op
279c2262707SPeter Maydell}
280fca87b78SPeter Maydell
281cd367ff3SPeter MaydellVMAX_S           111 0 1111 0 . .. ... 0 ... 0 0110 . 1 . 0 ... 0 @2op
282cd367ff3SPeter MaydellVMAX_U           111 1 1111 0 . .. ... 0 ... 0 0110 . 1 . 0 ... 0 @2op
283cd367ff3SPeter MaydellVMIN_S           111 0 1111 0 . .. ... 0 ... 0 0110 . 1 . 1 ... 0 @2op
284cd367ff3SPeter MaydellVMIN_U           111 1 1111 0 . .. ... 0 ... 0 0110 . 1 . 1 ... 0 @2op
285cd367ff3SPeter Maydell
286bc67aa8dSPeter MaydellVABD_S           111 0 1111 0 . .. ... 0 ... 0 0111 . 1 . 0 ... 0 @2op
287bc67aa8dSPeter MaydellVABD_U           111 1 1111 0 . .. ... 0 ... 0 0111 . 1 . 0 ... 0 @2op
288bc67aa8dSPeter Maydell
289abc48e31SPeter MaydellVHADD_S          111 0 1111 0 . .. ... 0 ... 0 0000 . 1 . 0 ... 0 @2op
290abc48e31SPeter MaydellVHADD_U          111 1 1111 0 . .. ... 0 ... 0 0000 . 1 . 0 ... 0 @2op
291abc48e31SPeter MaydellVHSUB_S          111 0 1111 0 . .. ... 0 ... 0 0010 . 1 . 0 ... 0 @2op
292abc48e31SPeter MaydellVHSUB_U          111 1 1111 0 . .. ... 0 ... 0 0010 . 1 . 0 ... 0 @2op
293abc48e31SPeter Maydell
294c1bd78cbSPeter Maydell{
295c1bd78cbSPeter Maydell  VMULLP_B       111 . 1110 0 . 11 ... 1 ... 0 1110 . 0 . 0 ... 0 @2op_sz28
296ac6ad1dcSPeter Maydell  VMULL_BS       111 0 1110 0 . .. ... 1 ... 0 1110 . 0 . 0 ... 0 @2op
297ac6ad1dcSPeter Maydell  VMULL_BU       111 1 1110 0 . .. ... 1 ... 0 1110 . 0 . 0 ... 0 @2op
298c1bd78cbSPeter Maydell}
299c1bd78cbSPeter Maydell{
300c1bd78cbSPeter Maydell  VMULLP_T       111 . 1110 0 . 11 ... 1 ... 1 1110 . 0 . 0 ... 0 @2op_sz28
301ac6ad1dcSPeter Maydell  VMULL_TS       111 0 1110 0 . .. ... 1 ... 1 1110 . 0 . 0 ... 0 @2op
302ac6ad1dcSPeter Maydell  VMULL_TU       111 1 1110 0 . .. ... 1 ... 1 1110 . 0 . 0 ... 0 @2op
303c1bd78cbSPeter Maydell}
304ac6ad1dcSPeter Maydell
305380caf6cSPeter MaydellVQDMULH          1110 1111 0 . .. ... 0 ... 0 1011 . 1 . 0 ... 0 @2op
306380caf6cSPeter MaydellVQRDMULH         1111 1111 0 . .. ... 0 ... 0 1011 . 1 . 0 ... 0 @2op
307380caf6cSPeter Maydell
308f741707bSPeter MaydellVQADD_S          111 0 1111 0 . .. ... 0 ... 0 0000 . 1 . 1 ... 0 @2op
309f741707bSPeter MaydellVQADD_U          111 1 1111 0 . .. ... 0 ... 0 0000 . 1 . 1 ... 0 @2op
310f741707bSPeter MaydellVQSUB_S          111 0 1111 0 . .. ... 0 ... 0 0010 . 1 . 1 ... 0 @2op
311f741707bSPeter MaydellVQSUB_U          111 1 1111 0 . .. ... 0 ... 0 0010 . 1 . 1 ... 0 @2op
312f741707bSPeter Maydell
3130372cad8SPeter MaydellVSHL_S           111 0 1111 0 . .. ... 0 ... 0 0100 . 1 . 0 ... 0 @2op_rev
3140372cad8SPeter MaydellVSHL_U           111 1 1111 0 . .. ... 0 ... 0 0100 . 1 . 0 ... 0 @2op_rev
3150372cad8SPeter Maydell
316bb002345SPeter MaydellVRSHL_S          111 0 1111 0 . .. ... 0 ... 0 0101 . 1 . 0 ... 0 @2op_rev
317bb002345SPeter MaydellVRSHL_U          111 1 1111 0 . .. ... 0 ... 0 0101 . 1 . 0 ... 0 @2op_rev
318bb002345SPeter Maydell
319483da661SPeter MaydellVQSHL_S          111 0 1111 0 . .. ... 0 ... 0 0100 . 1 . 1 ... 0 @2op_rev
320483da661SPeter MaydellVQSHL_U          111 1 1111 0 . .. ... 0 ... 0 0100 . 1 . 1 ... 0 @2op_rev
321483da661SPeter Maydell
3229dc868c4SPeter MaydellVQRSHL_S         111 0 1111 0 . .. ... 0 ... 0 0101 . 1 . 1 ... 0 @2op_rev
3239dc868c4SPeter MaydellVQRSHL_U         111 1 1111 0 . .. ... 0 ... 0 0101 . 1 . 1 ... 0 @2op_rev
3249dc868c4SPeter Maydell
325d3cd965cSPeter Maydell{
326d3cd965cSPeter Maydell  VCMUL0         111 . 1110 0 . 11 ... 0 ... 0 1110 . 0 . 0 ... 0 @2op_sz28
327fd677f80SPeter Maydell  VQDMLADH       1110  1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 0 @2op
32892f11732SPeter Maydell  VQDMLSDH       1111  1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 0 @2op
329d3cd965cSPeter Maydell}
330d3cd965cSPeter Maydell
331d3cd965cSPeter Maydell{
332d3cd965cSPeter Maydell  VCMUL180       111 . 1110 0 . 11 ... 0 ... 1 1110 . 0 . 0 ... 0 @2op_sz28
333d3cd965cSPeter Maydell  VQDMLADHX      111 0 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 0 @2op
33492f11732SPeter Maydell  VQDMLSDHX      111 1 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 0 @2op
335d3cd965cSPeter Maydell}
336d3cd965cSPeter Maydell
337d3cd965cSPeter Maydell{
338d3cd965cSPeter Maydell  VCMUL90        111 . 1110 0 . 11 ... 0 ... 0 1110 . 0 . 0 ... 1 @2op_sz28
339d3cd965cSPeter Maydell  VQRDMLADH      111 0 1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 1 @2op
34092f11732SPeter Maydell  VQRDMLSDH      111 1 1110 0 . .. ... 0 ... 0 1110 . 0 . 0 ... 1 @2op
341d3cd965cSPeter Maydell}
342d3cd965cSPeter Maydell
343d3cd965cSPeter Maydell{
344d3cd965cSPeter Maydell  VCMUL270       111 . 1110 0 . 11 ... 0 ... 1 1110 . 0 . 0 ... 1 @2op_sz28
345d3cd965cSPeter Maydell  VQRDMLADHX     111 0 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 1 @2op
34692f11732SPeter Maydell  VQRDMLSDHX     111 1 1110 0 . .. ... 0 ... 1 1110 . 0 . 0 ... 1 @2op
347d3cd965cSPeter Maydell}
34892f11732SPeter Maydell
34943364321SPeter MaydellVQDMULLB         111 . 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 1 @2op_sz28
35043364321SPeter MaydellVQDMULLT         111 . 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 1 @2op_sz28
35143364321SPeter Maydell
3521eb987a8SPeter MaydellVRHADD_S         111 0 1111 0 . .. ... 0 ... 0 0001 . 1 . 0 ... 0 @2op
3531eb987a8SPeter MaydellVRHADD_U         111 1 1111 0 . .. ... 0 ... 0 0001 . 1 . 0 ... 0 @2op
3541eb987a8SPeter Maydell
3558625693aSPeter Maydell{
35689bc4c4fSPeter Maydell  VADC           1110 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 0 @2op_nosz
35789bc4c4fSPeter Maydell  VADCI          1110 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 0 @2op_nosz
3588625693aSPeter Maydell  VHCADD90       1110 1110 0 . .. ... 0 ... 0 1111 . 0 . 0 ... 0 @2op
3598625693aSPeter Maydell  VHCADD270      1110 1110 0 . .. ... 0 ... 1 1111 . 0 . 0 ... 0 @2op
3608625693aSPeter Maydell}
36167ec113bSPeter Maydell
36267ec113bSPeter Maydell{
36367ec113bSPeter Maydell  VSBC           1111 1110 0 . 11 ... 0 ... 0 1111 . 0 . 0 ... 0 @2op_nosz
36489bc4c4fSPeter Maydell  VSBCI          1111 1110 0 . 11 ... 0 ... 1 1111 . 0 . 0 ... 0 @2op_nosz
36567ec113bSPeter Maydell  VCADD90        1111 1110 0 . .. ... 0 ... 0 1111 . 0 . 0 ... 0 @2op
36667ec113bSPeter Maydell  VCADD270       1111 1110 0 . .. ... 0 ... 1 1111 . 0 . 0 ... 0 @2op
36767ec113bSPeter Maydell}
36889bc4c4fSPeter Maydell
3690f0f2bd5SPeter Maydell# Vector miscellaneous
3700f0f2bd5SPeter Maydell
3716437f1f7SPeter MaydellVCLS             1111 1111 1 . 11 .. 00 ... 0 0100 01 . 0 ... 0 @1op
3720f0f2bd5SPeter MaydellVCLZ             1111 1111 1 . 11 .. 00 ... 0 0100 11 . 0 ... 0 @1op
373249b5309SPeter Maydell
374249b5309SPeter MaydellVREV16           1111 1111 1 . 11 .. 00 ... 0 0001 01 . 0 ... 0 @1op
375249b5309SPeter MaydellVREV32           1111 1111 1 . 11 .. 00 ... 0 0000 11 . 0 ... 0 @1op
376249b5309SPeter MaydellVREV64           1111 1111 1 . 11 .. 00 ... 0 0000 01 . 0 ... 0 @1op
3778abd3c80SPeter Maydell
3788abd3c80SPeter MaydellVMVN             1111 1111 1 . 11 00 00 ... 0 0101 11 . 0 ... 0 @1op_nosz
37959c91773SPeter Maydell
38059c91773SPeter MaydellVABS             1111 1111 1 . 11 .. 01 ... 0 0011 01 . 0 ... 0 @1op
38159c91773SPeter MaydellVABS_fp          1111 1111 1 . 11 .. 01 ... 0 0111 01 . 0 ... 0 @1op
382399a8c76SPeter MaydellVNEG             1111 1111 1 . 11 .. 01 ... 0 0011 11 . 0 ... 0 @1op
383399a8c76SPeter MaydellVNEG_fp          1111 1111 1 . 11 .. 01 ... 0 0111 11 . 0 ... 0 @1op
384ab59362fSPeter Maydell
385398e7cd3SPeter MaydellVQABS            1111 1111 1 . 11 .. 00 ... 0 0111 01 . 0 ... 0 @1op
386398e7cd3SPeter MaydellVQNEG            1111 1111 1 . 11 .. 00 ... 0 0111 11 . 0 ... 0 @1op
387398e7cd3SPeter Maydell
388ab59362fSPeter Maydell&vdup qd rt size
389ab59362fSPeter Maydell# Qd is in the fields usually named Qn
390ab59362fSPeter Maydell@vdup            .... .... . . .. ... . rt:4 .... . . . . .... qd=%qn &vdup
391ab59362fSPeter Maydell
392ab59362fSPeter Maydell# B and E bits encode size, which we decode here to the usual size values
393ab59362fSPeter MaydellVDUP             1110 1110 1 1 10 ... 0 .... 1011 . 0 0 1 0000 @vdup size=0
394ab59362fSPeter MaydellVDUP             1110 1110 1 0 10 ... 0 .... 1011 . 0 1 1 0000 @vdup size=1
395ab59362fSPeter MaydellVDUP             1110 1110 1 0 10 ... 0 .... 1011 . 0 0 1 0000 @vdup size=2
3961d2386f7SPeter Maydell
397395b92d5SPeter Maydell# Incrementing and decrementing dup
398395b92d5SPeter Maydell
399395b92d5SPeter Maydell# VIDUP, VDDUP format immediate: 1 << (immh:imml)
400395b92d5SPeter Maydell%imm_vidup 7:1 0:1 !function=vidup_imm
401395b92d5SPeter Maydell
402395b92d5SPeter Maydell# VIDUP, VDDUP registers: Rm bits [3:1] from insn, bit 0 is 1;
403395b92d5SPeter Maydell# Rn bits [3:1] from insn, bit 0 is 0
404395b92d5SPeter Maydell%vidup_rm 1:3 !function=times_2_plus_1
405395b92d5SPeter Maydell%vidup_rn 17:3 !function=times_2
406395b92d5SPeter Maydell
407395b92d5SPeter Maydell@vidup           .... .... . . size:2 .... .... .... .... .... \
408395b92d5SPeter Maydell                 qd=%qd imm=%imm_vidup rn=%vidup_rn &vidup
409395b92d5SPeter Maydell@viwdup          .... .... . . size:2 .... .... .... .... .... \
410395b92d5SPeter Maydell                 qd=%qd imm=%imm_vidup rm=%vidup_rm rn=%vidup_rn &viwdup
411395b92d5SPeter Maydell{
412395b92d5SPeter Maydell  VIDUP          1110 1110 0 . .. ... 1 ... 0 1111 . 110 111 . @vidup
413395b92d5SPeter Maydell  VIWDUP         1110 1110 0 . .. ... 1 ... 0 1111 . 110 ... . @viwdup
414395b92d5SPeter Maydell}
415395b92d5SPeter Maydell{
416c2d8f6bbSPeter Maydell  VCMPGT_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  0110 .... @vcmp_fp_scalar size=2
417c2d8f6bbSPeter Maydell  VCMPLE_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  1110 .... @vcmp_fp_scalar size=2
418395b92d5SPeter Maydell  VDDUP            1110 1110 0 . .. ... 1 ... 1 1111 . 110 111 . @vidup
419395b92d5SPeter Maydell  VDWDUP           1110 1110 0 . .. ... 1 ... 1 1111 . 110 ... . @viwdup
420395b92d5SPeter Maydell}
421395b92d5SPeter Maydell
4221d2386f7SPeter Maydell# multiply-add long dual accumulate
4231d2386f7SPeter Maydell# rdahi: bits [3:1] from insn, bit 0 is 1
4241d2386f7SPeter Maydell# rdalo: bits [3:1] from insn, bit 0 is 0
4251d2386f7SPeter Maydell%rdahi 20:3 !function=times_2_plus_1
4261d2386f7SPeter Maydell%rdalo 13:3 !function=times_2
4271d2386f7SPeter Maydell# size bit is 0 for 16 bit, 1 for 32 bit
4281d2386f7SPeter Maydell%size_16 16:1 !function=plus_1
4291d2386f7SPeter Maydell
4301d2386f7SPeter Maydell&vmlaldav rdahi rdalo size qn qm x a
431f0ffff51SPeter Maydell&vmladav rda size qn qm x a
4321d2386f7SPeter Maydell
433345910f8SPeter Maydell@vmlaldav        .... .... . ... ... . ... x:1 .... .. a:1 . qm:3 . \
4341d2386f7SPeter Maydell                 qn=%qn rdahi=%rdahi rdalo=%rdalo size=%size_16 &vmlaldav
435345910f8SPeter Maydell@vmlaldav_nosz   .... .... . ... ... . ... x:1 .... .. a:1 . qm:3 . \
43638548747SPeter Maydell                 qn=%qn rdahi=%rdahi rdalo=%rdalo size=0 &vmlaldav
437f0ffff51SPeter Maydell@vmladav         .... .... .... ... . ... x:1 .... . . a:1 . qm:3 . \
438f0ffff51SPeter Maydell                 qn=%qn rda=%rdalo size=%size_16 &vmladav
439f0ffff51SPeter Maydell@vmladav_nosz    .... .... .... ... . ... x:1 .... . . a:1 . qm:3 . \
440f0ffff51SPeter Maydell                 qn=%qn rda=%rdalo size=0 &vmladav
441181cd971SPeter Maydell
442f0ffff51SPeter Maydell{
443f0ffff51SPeter Maydell  VMLADAV_S      1110 1110 1111  ... . ... . 1110 . 0 . 0 ... 0 @vmladav
444f0ffff51SPeter Maydell  VMLALDAV_S     1110 1110 1 ... ... . ... . 1110 . 0 . 0 ... 0 @vmlaldav
445f0ffff51SPeter Maydell}
446f0ffff51SPeter Maydell{
447f0ffff51SPeter Maydell  VMLADAV_U      1111 1110 1111  ... . ... . 1110 . 0 . 0 ... 0 @vmladav
448f0ffff51SPeter Maydell  VMLALDAV_U     1111 1110 1 ... ... . ... . 1110 . 0 . 0 ... 0 @vmlaldav
449f0ffff51SPeter Maydell}
450f0ffff51SPeter Maydell
451f0ffff51SPeter Maydell{
452f0ffff51SPeter Maydell  VMLSDAV        1110 1110 1111  ... . ... . 1110 . 0 . 0 ... 1 @vmladav
453345910f8SPeter Maydell  VMLSLDAV       1110 1110 1 ... ... . ... . 1110 . 0 . 0 ... 1 @vmlaldav
454f0ffff51SPeter Maydell}
455f0ffff51SPeter Maydell
456f0ffff51SPeter Maydell{
457f0ffff51SPeter Maydell  VMLSDAV        1111 1110 1111  ... 0 ... . 1110 . 0 . 0 ... 1 @vmladav_nosz
458f0ffff51SPeter Maydell  VRMLSLDAVH     1111 1110 1 ... ... 0 ... . 1110 . 0 . 0 ... 1 @vmlaldav_nosz
459f0ffff51SPeter Maydell}
460f0ffff51SPeter Maydell
461f0ffff51SPeter MaydellVMLADAV_S        1110 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 1 @vmladav_nosz
462f0ffff51SPeter MaydellVMLADAV_U        1111 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 1 @vmladav_nosz
46338548747SPeter Maydell
464688ba4cfSPeter Maydell{
46529f80e7dSPeter Maydell  [
46629f80e7dSPeter Maydell    VMAXNMAV     1110 1110 1110  11 00 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=2
46729f80e7dSPeter Maydell    VMINNMAV     1110 1110 1110  11 00 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=2
46829f80e7dSPeter Maydell    VMAXNMV      1110 1110 1110  11 10 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=2
46929f80e7dSPeter Maydell    VMINNMV      1110 1110 1110  11 10 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=2
47029f80e7dSPeter Maydell  ]
47129f80e7dSPeter Maydell  [
472688ba4cfSPeter Maydell    VMAXV_S      1110 1110 1110  .. 10 ....  1111 0 0 . 0 ... 0 @vmaxv
473688ba4cfSPeter Maydell    VMINV_S      1110 1110 1110  .. 10 ....  1111 1 0 . 0 ... 0 @vmaxv
474688ba4cfSPeter Maydell    VMAXAV       1110 1110 1110  .. 00 ....  1111 0 0 . 0 ... 0 @vmaxv
475688ba4cfSPeter Maydell    VMINAV       1110 1110 1110  .. 00 ....  1111 1 0 . 0 ... 0 @vmaxv
47629f80e7dSPeter Maydell  ]
477f0ffff51SPeter Maydell  VMLADAV_S      1110 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 0 @vmladav_nosz
478345910f8SPeter Maydell  VRMLALDAVH_S   1110 1110 1 ... ... 0 ... . 1111 . 0 . 0 ... 0 @vmlaldav_nosz
479688ba4cfSPeter Maydell}
480688ba4cfSPeter Maydell
481688ba4cfSPeter Maydell{
48229f80e7dSPeter Maydell  [
48329f80e7dSPeter Maydell    VMAXNMAV     1111 1110 1110  11 00 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=1
48429f80e7dSPeter Maydell    VMINNMAV     1111 1110 1110  11 00 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=1
48529f80e7dSPeter Maydell    VMAXNMV      1111 1110 1110  11 10 ....  1111 0 0 . 0 ... 0 @vmaxnmv size=1
48629f80e7dSPeter Maydell    VMINNMV      1111 1110 1110  11 10 ....  1111 1 0 . 0 ... 0 @vmaxnmv size=1
48729f80e7dSPeter Maydell  ]
48829f80e7dSPeter Maydell  [
489688ba4cfSPeter Maydell    VMAXV_U      1111 1110 1110  .. 10 ....  1111 0 0 . 0 ... 0 @vmaxv
490688ba4cfSPeter Maydell    VMINV_U      1111 1110 1110  .. 10 ....  1111 1 0 . 0 ... 0 @vmaxv
49129f80e7dSPeter Maydell  ]
492f0ffff51SPeter Maydell  VMLADAV_U      1111 1110 1111  ... 0 ... . 1111 . 0 . 0 ... 0 @vmladav_nosz
493345910f8SPeter Maydell  VRMLALDAVH_U   1111 1110 1 ... ... 0 ... . 1111 . 0 . 0 ... 0 @vmlaldav_nosz
494688ba4cfSPeter Maydell}
49538548747SPeter Maydell
496e51896b3SPeter Maydell# Scalar operations
497e51896b3SPeter Maydell
498c2d8f6bbSPeter Maydell{
499c2d8f6bbSPeter Maydell  VCMPEQ_fp_scalar 1110 1110 0 . 11 ... 1 ... 0 1111  0100 .... @vcmp_fp_scalar size=2
500c2d8f6bbSPeter Maydell  VCMPNE_fp_scalar 1110 1110 0 . 11 ... 1 ... 0 1111  1100 .... @vcmp_fp_scalar size=2
501e51896b3SPeter Maydell  VADD_scalar      1110 1110 0 . .. ... 1 ... 0 1111 . 100 .... @2scalar
502c2d8f6bbSPeter Maydell}
503c2d8f6bbSPeter Maydell
504c2d8f6bbSPeter Maydell{
505c2d8f6bbSPeter Maydell  VCMPLT_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  1100 .... @vcmp_fp_scalar size=2
506c2d8f6bbSPeter Maydell  VCMPGE_fp_scalar 1110 1110 0 . 11 ... 1 ... 1 1111  0100 .... @vcmp_fp_scalar size=2
50791a358fdSPeter Maydell  VSUB_scalar      1110 1110 0 . .. ... 1 ... 1 1111 . 100 .... @2scalar
508c2d8f6bbSPeter Maydell}
5091b15a97dSPeter Maydell
5101b15a97dSPeter Maydell{
5111b15a97dSPeter Maydell  VSHL_S_scalar   1110 1110 0 . 11 .. 01 ... 1 1110 0110 .... @shl_scalar
5121b15a97dSPeter Maydell  VRSHL_S_scalar  1110 1110 0 . 11 .. 11 ... 1 1110 0110 .... @shl_scalar
5131b15a97dSPeter Maydell  VQSHL_S_scalar  1110 1110 0 . 11 .. 01 ... 1 1110 1110 .... @shl_scalar
5141b15a97dSPeter Maydell  VQRSHL_S_scalar 1110 1110 0 . 11 .. 11 ... 1 1110 1110 .... @shl_scalar
51591a358fdSPeter Maydell  VMUL_scalar     1110 1110 0 . .. ... 1 ... 1 1110 . 110 .... @2scalar
5161b15a97dSPeter Maydell}
5171b15a97dSPeter Maydell
5181b15a97dSPeter Maydell{
5191b15a97dSPeter Maydell  VSHL_U_scalar   1111 1110 0 . 11 .. 01 ... 1 1110 0110 .... @shl_scalar
5201b15a97dSPeter Maydell  VRSHL_U_scalar  1111 1110 0 . 11 .. 11 ... 1 1110 0110 .... @shl_scalar
5211b15a97dSPeter Maydell  VQSHL_U_scalar  1111 1110 0 . 11 .. 01 ... 1 1110 1110 .... @shl_scalar
5221b15a97dSPeter Maydell  VQRSHL_U_scalar 1111 1110 0 . 11 .. 11 ... 1 1110 1110 .... @shl_scalar
5231b15a97dSPeter Maydell  VBRSR           1111 1110 0 . .. ... 1 ... 1 1110 . 110 .... @2scalar
5241b15a97dSPeter Maydell}
5251b15a97dSPeter Maydell
526abfe39b2SPeter Maydell{
527abfe39b2SPeter Maydell  VADD_fp_scalar  111 . 1110 0 . 11 ... 0 ... 0 1111 . 100 .... @2op_fp_scalar
528644f717cSPeter Maydell  VHADD_S_scalar  1110  1110 0 . .. ... 0 ... 0 1111 . 100 .... @2scalar
529644f717cSPeter Maydell  VHADD_U_scalar  1111  1110 0 . .. ... 0 ... 0 1111 . 100 .... @2scalar
530abfe39b2SPeter Maydell}
531abfe39b2SPeter Maydell
532abfe39b2SPeter Maydell{
533abfe39b2SPeter Maydell  VSUB_fp_scalar  111 . 1110 0 . 11 ... 0 ... 1 1111 . 100 .... @2op_fp_scalar
534644f717cSPeter Maydell  VHSUB_S_scalar  1110  1110 0 . .. ... 0 ... 1 1111 . 100 .... @2scalar
535644f717cSPeter Maydell  VHSUB_U_scalar  1111  1110 0 . .. ... 0 ... 1 1111 . 100 .... @2scalar
536abfe39b2SPeter Maydell}
53739f2ec85SPeter Maydell
538a8890353SPeter Maydell{
53939f2ec85SPeter Maydell  VQADD_S_scalar  1110  1110 0 . .. ... 0 ... 0 1111 . 110 .... @2scalar
54039f2ec85SPeter Maydell  VQADD_U_scalar  1111  1110 0 . .. ... 0 ... 0 1111 . 110 .... @2scalar
541a8890353SPeter Maydell  VQDMULLB_scalar 111 . 1110 0 . 11 ... 0 ... 0 1111 . 110 .... @2scalar_nosz \
542a8890353SPeter Maydell                  size=%size_28
543a8890353SPeter Maydell}
544a8890353SPeter Maydell
545a8890353SPeter Maydell{
54639f2ec85SPeter Maydell  VQSUB_S_scalar  1110  1110 0 . .. ... 0 ... 1 1111 . 110 .... @2scalar
54739f2ec85SPeter Maydell  VQSUB_U_scalar  1111  1110 0 . .. ... 0 ... 1 1111 . 110 .... @2scalar
548a8890353SPeter Maydell  VQDMULLT_scalar 111 . 1110 0 . 11 ... 0 ... 1 1111 . 110 .... @2scalar_nosz \
549a8890353SPeter Maydell                  size=%size_28
550a8890353SPeter Maydell}
551a8890353SPeter Maydell
552abfe39b2SPeter Maydell{
553abfe39b2SPeter Maydell  VMUL_fp_scalar  111 . 1110 0 . 11 ... 1 ... 0 1110 . 110 .... @2op_fp_scalar
55466c05767SPeter Maydell  VQDMULH_scalar  1110  1110 0 . .. ... 1 ... 0 1110 . 110 .... @2scalar
55566c05767SPeter Maydell  VQRDMULH_scalar 1111  1110 0 . .. ... 1 ... 0 1110 . 110 .... @2scalar
556abfe39b2SPeter Maydell}
55766c05767SPeter Maydell
5584773e74eSPeter Maydell{
5594773e74eSPeter Maydell  VFMA_scalar     111 . 1110 0 . 11 ... 1 ... 0 1110 . 100 .... @2op_fp_scalar
5606b895bf8SPeter Maydell  # The U bit (28) is don't-care because it does not affect the result
561c69e34c6SPeter Maydell  VMLA            111 - 1110 0 . .. ... 1 ... 0 1110 . 100 .... @2scalar
5624773e74eSPeter Maydell}
5634773e74eSPeter Maydell
5644773e74eSPeter Maydell{
5654773e74eSPeter Maydell  VFMAS_scalar    111 . 1110 0 . 11 ... 1 ... 1 1110 . 100 .... @2op_fp_scalar
5664773e74eSPeter Maydell  # The U bit (28) is don't-care because it does not affect the result
5676b895bf8SPeter Maydell  VMLAS           111 - 1110 0 . .. ... 1 ... 1 1110 . 100 .... @2scalar
5684773e74eSPeter Maydell}
5696b895bf8SPeter Maydell
5708be9a250SPeter MaydellVQRDMLAH         1110 1110 0 . .. ... 0 ... 0 1110 . 100 .... @2scalar
5718be9a250SPeter MaydellVQRDMLASH        1110 1110 0 . .. ... 0 ... 1 1110 . 100 .... @2scalar
5728be9a250SPeter MaydellVQDMLAH          1110 1110 0 . .. ... 0 ... 0 1110 . 110 .... @2scalar
5738be9a250SPeter MaydellVQDMLASH         1110 1110 0 . .. ... 0 ... 1 1110 . 110 .... @2scalar
5748be9a250SPeter Maydell
5756f060a63SPeter Maydell# Vector add across vector
576d43ebd9dSPeter Maydell{
5776f060a63SPeter Maydell  VADDV          111 u:1 1110 1111 size:2 01 ... 0 1111 0 0 a:1 0 qm:3 0 rda=%rdalo
578d43ebd9dSPeter Maydell  VADDLV         111 u:1 1110 1 ... 1001 ... 0 1111 00 a:1 0 qm:3 0 \
579d43ebd9dSPeter Maydell                 rdahi=%rdahi rdalo=%rdalo
580d43ebd9dSPeter Maydell}
581a8890353SPeter Maydell
5827f061c0aSPeter Maydell@vabav           .... .... .. size:2 .... rda:4 .... .... .... &vabav qn=%qn qm=%qm
5837f061c0aSPeter Maydell
5847f061c0aSPeter MaydellVABAV_S          111 0 1110 10 .. ... 0 .... 1111 . 0 . 0 ... 1 @vabav
5857f061c0aSPeter MaydellVABAV_U          111 1 1110 10 .. ... 0 .... 1111 . 0 . 0 ... 1 @vabav
5867f061c0aSPeter Maydell
587eab84139SPeter Maydell# Logical immediate operations (1 reg and modified-immediate)
588eab84139SPeter Maydell
589eab84139SPeter Maydell# The cmode/op bits here decode VORR/VBIC/VMOV/VMVN, but
590eab84139SPeter Maydell# not in a way we can conveniently represent in decodetree without
591eab84139SPeter Maydell# a lot of repetition:
592eab84139SPeter Maydell# VORR: op=0, (cmode & 1) && cmode < 12
593eab84139SPeter Maydell# VBIC: op=1, (cmode & 1) && cmode < 12
594eab84139SPeter Maydell# VMOV: everything else
595eab84139SPeter Maydell# So we have a single decode line and check the cmode/op in the
596eab84139SPeter Maydell# trans function.
597eab84139SPeter MaydellVimm_1r 111 . 1111 1 . 00 0 ... ... 0 .... 0 1 . 1 .... @1imm
598f9ed6174SPeter Maydell
599f9ed6174SPeter Maydell# Shifts by immediate
600f9ed6174SPeter Maydell
601f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_b
602f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_h
603f9ed6174SPeter MaydellVSHLI             111 0 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_w
604f9ed6174SPeter Maydell
605f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_b
606f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_h
607f9ed6174SPeter MaydellVQSHLI_S          111 0 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_w
608f9ed6174SPeter Maydell
609f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_b
610f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_h
611f9ed6174SPeter MaydellVQSHLI_U          111 1 1111 1 . ... ... ... 0 0111 0 1 . 1 ... 0 @2_shl_w
612f9ed6174SPeter Maydell
613f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_b
614f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_h
615f9ed6174SPeter MaydellVQSHLUI           111 1 1111 1 . ... ... ... 0 0110 0 1 . 1 ... 0 @2_shl_w
6163394116fSPeter Maydell
6173394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_b
6183394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_h
6193394116fSPeter MaydellVSHRI_S           111 0 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_w
6203394116fSPeter Maydell
6213394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_b
6223394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_h
6233394116fSPeter MaydellVSHRI_U           111 1 1111 1 . ... ... ... 0 0000 0 1 . 1 ... 0 @2_shr_w
6243394116fSPeter Maydell
6253394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_b
6263394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_h
6273394116fSPeter MaydellVRSHRI_S          111 0 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_w
6283394116fSPeter Maydell
6293394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_b
6303394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_h
6313394116fSPeter MaydellVRSHRI_U          111 1 1111 1 . ... ... ... 0 0010 0 1 . 1 ... 0 @2_shr_w
632c2262707SPeter Maydell
633c2262707SPeter Maydell# VSHLL T1 encoding; the T2 VSHLL encoding is elsewhere in this file
6349dacf076SPeter Maydell# Note that VMOVL is encoded as "VSHLL with a zero shift count"; we
6359dacf076SPeter Maydell# implement it that way rather than special-casing it in the decode.
636c2262707SPeter MaydellVSHLL_BS          111 0 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_b
637c2262707SPeter MaydellVSHLL_BS          111 0 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_h
638c2262707SPeter Maydell
639c2262707SPeter MaydellVSHLL_BU          111 1 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_b
640c2262707SPeter MaydellVSHLL_BU          111 1 1110 1 . 1 .. ... ... 0 1111 0 1 . 0 ... 0 @2_shll_h
641c2262707SPeter Maydell
642c2262707SPeter MaydellVSHLL_TS          111 0 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_b
643c2262707SPeter MaydellVSHLL_TS          111 0 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_h
644c2262707SPeter Maydell
645c2262707SPeter MaydellVSHLL_TU          111 1 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_b
646c2262707SPeter MaydellVSHLL_TU          111 1 1110 1 . 1 .. ... ... 1 1111 0 1 . 0 ... 0 @2_shll_h
647a78b25faSPeter Maydell
648a78b25faSPeter Maydell# Shift-and-insert
649a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_b
650a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_h
651a78b25faSPeter MaydellVSRI              111 1 1111 1 . ... ... ... 0 0100 0 1 . 1 ... 0 @2_shr_w
652a78b25faSPeter Maydell
653a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_b
654a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_h
655a78b25faSPeter MaydellVSLI              111 1 1111 1 . ... ... ... 0 0101 0 1 . 1 ... 0 @2_shl_w
656162e2655SPeter Maydell
657162e2655SPeter Maydell# Narrowing shifts (which only support b and h sizes)
658162e2655SPeter MaydellVSHRNB            111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_b
659162e2655SPeter MaydellVSHRNB            111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_h
660162e2655SPeter MaydellVSHRNT            111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_b
661162e2655SPeter MaydellVSHRNT            111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_h
662162e2655SPeter Maydell
663162e2655SPeter MaydellVRSHRNB           111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_b
664162e2655SPeter MaydellVRSHRNB           111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 1 @2_shr_h
665162e2655SPeter MaydellVRSHRNT           111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_b
666162e2655SPeter MaydellVRSHRNT           111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 1 @2_shr_h
667d6f9e011SPeter Maydell
668d6f9e011SPeter MaydellVQSHRNB_S         111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_b
669d6f9e011SPeter MaydellVQSHRNB_S         111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_h
670d6f9e011SPeter MaydellVQSHRNT_S         111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_b
671d6f9e011SPeter MaydellVQSHRNT_S         111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_h
672d6f9e011SPeter MaydellVQSHRNB_U         111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_b
673d6f9e011SPeter MaydellVQSHRNB_U         111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 0 @2_shr_h
674d6f9e011SPeter MaydellVQSHRNT_U         111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_b
675d6f9e011SPeter MaydellVQSHRNT_U         111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 0 @2_shr_h
676d6f9e011SPeter Maydell
677d6f9e011SPeter MaydellVQSHRUNB          111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_b
678d6f9e011SPeter MaydellVQSHRUNB          111 0 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_h
679d6f9e011SPeter MaydellVQSHRUNT          111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_b
680d6f9e011SPeter MaydellVQSHRUNT          111 0 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_h
681d6f9e011SPeter Maydell
682d6f9e011SPeter MaydellVQRSHRNB_S        111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_b
683d6f9e011SPeter MaydellVQRSHRNB_S        111 0 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_h
684d6f9e011SPeter MaydellVQRSHRNT_S        111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_b
685d6f9e011SPeter MaydellVQRSHRNT_S        111 0 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_h
686d6f9e011SPeter MaydellVQRSHRNB_U        111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_b
687d6f9e011SPeter MaydellVQRSHRNB_U        111 1 1110 1 . ... ... ... 0 1111 0 1 . 0 ... 1 @2_shr_h
688d6f9e011SPeter MaydellVQRSHRNT_U        111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_b
689d6f9e011SPeter MaydellVQRSHRNT_U        111 1 1110 1 . ... ... ... 1 1111 0 1 . 0 ... 1 @2_shr_h
690d6f9e011SPeter Maydell
691d6f9e011SPeter MaydellVQRSHRUNB         111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_b
692d6f9e011SPeter MaydellVQRSHRUNB         111 1 1110 1 . ... ... ... 0 1111 1 1 . 0 ... 0 @2_shr_h
693d6f9e011SPeter MaydellVQRSHRUNT         111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_b
694d6f9e011SPeter MaydellVQRSHRUNT         111 1 1110 1 . ... ... ... 1 1111 1 1 . 0 ... 0 @2_shr_h
6952e6a4ce0SPeter Maydell
6962e6a4ce0SPeter MaydellVSHLC             111 0 1110 1 . 1 imm:5 ... 0 1111 1100 rdm:4 qd=%qd
697eff5d9a9SPeter Maydell
698eff5d9a9SPeter Maydell# Comparisons. We expand out the conditions which are split across
699eff5d9a9SPeter Maydell# encodings T1, T2, T3 and the fc bits. These include VPT, which is
700eff5d9a9SPeter Maydell# effectively "VCMP then VPST". A plain "VCMP" has a mask field of zero.
701c87fe6d2SPeter Maydell{
702c87fe6d2SPeter Maydell  VCMPEQ_fp       111 . 1110 0 . 11 ... 1 ... 0 1111 0 0 . 0 ... 0 @vcmp_fp
703eff5d9a9SPeter Maydell  VCMPEQ          111 1 1110 0 . .. ... 1 ... 0 1111 0 0 . 0 ... 0 @vcmp
704c87fe6d2SPeter Maydell}
705c87fe6d2SPeter Maydell
706c87fe6d2SPeter Maydell{
707c87fe6d2SPeter Maydell  VCMPNE_fp       111 . 1110 0 . 11 ... 1 ... 0 1111 1 0 . 0 ... 0 @vcmp_fp
708eff5d9a9SPeter Maydell  VCMPNE          111 1 1110 0 . .. ... 1 ... 0 1111 1 0 . 0 ... 0 @vcmp
709c87fe6d2SPeter Maydell}
710c87fe6d2SPeter Maydell
711c87fe6d2SPeter Maydell{
712c87fe6d2SPeter Maydell  VCMPGE_fp       111 . 1110 0 . 11 ... 1 ... 1 1111 0 0 . 0 ... 0 @vcmp_fp
713c87fe6d2SPeter Maydell  VCMPGE          111 1 1110 0 . .. ... 1 ... 1 1111 0 0 . 0 ... 0 @vcmp
714c87fe6d2SPeter Maydell}
715c87fe6d2SPeter Maydell
716c87fe6d2SPeter Maydell{
717c87fe6d2SPeter Maydell  VCMPLT_fp       111 . 1110 0 . 11 ... 1 ... 1 1111 1 0 . 0 ... 0 @vcmp_fp
718c87fe6d2SPeter Maydell  VCMPLT          111 1 1110 0 . .. ... 1 ... 1 1111 1 0 . 0 ... 0 @vcmp
719c87fe6d2SPeter Maydell}
720c87fe6d2SPeter Maydell
721c87fe6d2SPeter Maydell{
722c87fe6d2SPeter Maydell  VCMPGT_fp       111 . 1110 0 . 11 ... 1 ... 1 1111 0 0 . 0 ... 1 @vcmp_fp
723c87fe6d2SPeter Maydell  VCMPGT          111 1 1110 0 . .. ... 1 ... 1 1111 0 0 . 0 ... 1 @vcmp
724c87fe6d2SPeter Maydell}
725c87fe6d2SPeter Maydell
726c87fe6d2SPeter Maydell{
727c87fe6d2SPeter Maydell  VCMPLE_fp         111 . 1110 0 . 11 ... 1 ... 1 1111 1 0 . 0 ... 1 @vcmp_fp
728c87fe6d2SPeter Maydell  VCMPLE            1111 1110 0 . .. ... 1 ... 1 1111 1 0 . 0 ... 1 @vcmp
729c87fe6d2SPeter Maydell}
730c87fe6d2SPeter Maydell
731c386443bSPeter Maydell{
732c386443bSPeter Maydell  VPSEL           1111 1110 0 . 11 ... 1 ... 0 1111 . 0 . 0 ... 1 @2op_nosz
733eff5d9a9SPeter Maydell  VCMPCS          1111 1110 0 . .. ... 1 ... 0 1111 0 0 . 0 ... 1 @vcmp
734eff5d9a9SPeter Maydell  VCMPHI          1111 1110 0 . .. ... 1 ... 0 1111 1 0 . 0 ... 1 @vcmp
735c386443bSPeter Maydell}
736cce81873SPeter Maydell
737cce81873SPeter Maydell{
738fea3958fSPeter Maydell  VPNOT            1111 1110 0 0 11 000 1 000 0 1111 0100 1101
739cce81873SPeter Maydell  VPST             1111 1110 0 . 11 000 1 ... 0 1111 0100 1101 mask=%mask_22_13
740c2d8f6bbSPeter Maydell  VCMPEQ_fp_scalar 1111 1110 0 . 11 ... 1 ... 0 1111 0100 .... @vcmp_fp_scalar size=1
741cce81873SPeter Maydell  VCMPEQ_scalar    1111 1110 0 . .. ... 1 ... 0 1111 0100 .... @vcmp_scalar
742cce81873SPeter Maydell}
743c2d8f6bbSPeter Maydell
744c2d8f6bbSPeter Maydell{
745c2d8f6bbSPeter Maydell  VCMPNE_fp_scalar 1111 1110 0 . 11 ... 1 ... 0 1111 1100 .... @vcmp_fp_scalar size=1
746cce81873SPeter Maydell  VCMPNE_scalar    1111 1110 0 . .. ... 1 ... 0 1111 1100 .... @vcmp_scalar
747c2d8f6bbSPeter Maydell}
748c2d8f6bbSPeter Maydell
749c2d8f6bbSPeter Maydell{
750c2d8f6bbSPeter Maydell  VCMPGT_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 0110 .... @vcmp_fp_scalar size=1
751c2d8f6bbSPeter Maydell  VCMPGT_scalar    1111 1110 0 . .. ... 1 ... 1 1111 0110 .... @vcmp_scalar
752c2d8f6bbSPeter Maydell}
753c2d8f6bbSPeter Maydell
754c2d8f6bbSPeter Maydell{
755c2d8f6bbSPeter Maydell  VCMPLE_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 1110 .... @vcmp_fp_scalar size=1
756c2d8f6bbSPeter Maydell  VCMPLE_scalar    1111 1110 0 . .. ... 1 ... 1 1111 1110 .... @vcmp_scalar
757c2d8f6bbSPeter Maydell}
758c2d8f6bbSPeter Maydell
759c2d8f6bbSPeter Maydell{
760c2d8f6bbSPeter Maydell  VCMPGE_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 0100 .... @vcmp_fp_scalar size=1
761c2d8f6bbSPeter Maydell  VCMPGE_scalar    1111 1110 0 . .. ... 1 ... 1 1111 0100 .... @vcmp_scalar
762c2d8f6bbSPeter Maydell}
763c2d8f6bbSPeter Maydell{
764c2d8f6bbSPeter Maydell  VCMPLT_fp_scalar 1111 1110 0 . 11 ... 1 ... 1 1111 1100 .... @vcmp_fp_scalar size=1
765c2d8f6bbSPeter Maydell  VCMPLT_scalar    1111 1110 0 . .. ... 1 ... 1 1111 1100 .... @vcmp_scalar
766c2d8f6bbSPeter Maydell}
767c2d8f6bbSPeter Maydell
768cce81873SPeter MaydellVCMPCS_scalar     1111 1110 0 . .. ... 1 ... 0 1111 0 1 1 0 .... @vcmp_scalar
769cce81873SPeter MaydellVCMPHI_scalar     1111 1110 0 . .. ... 1 ... 0 1111 1 1 1 0 .... @vcmp_scalar
7701e35cd91SPeter Maydell
7711e35cd91SPeter Maydell# 2-operand FP
7721e35cd91SPeter MaydellVADD_fp           1110 1111 0 . 0 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
77382af0153SPeter MaydellVSUB_fp           1110 1111 0 . 1 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
77482af0153SPeter MaydellVMUL_fp           1111 1111 0 . 0 . ... 0 ... 0 1101 . 1 . 1 ... 0 @2op_fp
77582af0153SPeter MaydellVABD_fp           1111 1111 0 . 1 . ... 0 ... 0 1101 . 1 . 0 ... 0 @2op_fp
77682af0153SPeter Maydell
77782af0153SPeter MaydellVMAXNM            1111 1111 0 . 0 . ... 0 ... 0 1111 . 1 . 1 ... 0 @2op_fp
77882af0153SPeter MaydellVMINNM            1111 1111 0 . 1 . ... 0 ... 0 1111 . 1 . 1 ... 0 @2op_fp
779104afc68SPeter Maydell
780104afc68SPeter MaydellVCADD90_fp        1111 1100 1 . 0 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
781104afc68SPeter MaydellVCADD270_fp       1111 1101 1 . 0 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
7823173c0ddSPeter Maydell
7833173c0ddSPeter MaydellVFMA              1110 1111 0 . 0 . ... 0 ... 0 1100 . 1 . 1 ... 0 @2op_fp
7843173c0ddSPeter MaydellVFMS              1110 1111 0 . 1 . ... 0 ... 0 1100 . 1 . 1 ... 0 @2op_fp
785d3cd965cSPeter Maydell
786d3cd965cSPeter MaydellVCMLA0            1111 110 00 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
787d3cd965cSPeter MaydellVCMLA90           1111 110 01 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
788d3cd965cSPeter MaydellVCMLA180          1111 110 10 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
789d3cd965cSPeter MaydellVCMLA270          1111 110 11 . 1 . ... 0 ... 0 1000 . 1 . 0 ... 0 @2op_fp_size_rev
7902a4b939cSPeter Maydell
7912a4b939cSPeter Maydell# floating-point <-> fixed-point conversions. Naming convention:
7922a4b939cSPeter Maydell# VCVT_<from><to>, S = signed int, U = unsigned int, H = halfprec, F = singleprec
7932a4b939cSPeter Maydell@vcvt             .... .... .. 1 ..... .... .. 1 . .... .... &2shift \
7942a4b939cSPeter Maydell                  qd=%qd qm=%qm shift=%rshift_i5 size=2
7952a4b939cSPeter Maydell@vcvt_f16         .... .... .. 11 .... .... .. 0 . .... .... &2shift \
7962a4b939cSPeter Maydell                  qd=%qd qm=%qm shift=%rshift_i4 size=1
7972a4b939cSPeter Maydell
7982a4b939cSPeter MaydellVCVT_SH_fixed     1110 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt_f16
7992a4b939cSPeter MaydellVCVT_UH_fixed     1111 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt_f16
8002a4b939cSPeter Maydell
8012a4b939cSPeter MaydellVCVT_HS_fixed     1110 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt_f16
8022a4b939cSPeter MaydellVCVT_HU_fixed     1111 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt_f16
8032a4b939cSPeter Maydell
8042a4b939cSPeter MaydellVCVT_SF_fixed     1110 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt
8052a4b939cSPeter MaydellVCVT_UF_fixed     1111 1111 1 . ...... ... 0 11 . 0 01 . 1 ... 0 @vcvt
8062a4b939cSPeter Maydell
8072a4b939cSPeter MaydellVCVT_FS_fixed     1110 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt
8082a4b939cSPeter MaydellVCVT_FU_fixed     1111 1111 1 . ...... ... 0 11 . 1 01 . 1 ... 0 @vcvt
8092ec0dcf0SPeter Maydell
8102ec0dcf0SPeter Maydell# VCVT between floating point and integer (halfprec and single);
8112ec0dcf0SPeter Maydell# VCVT_<from><to>, S = signed int, U = unsigned int, F = float
8122ec0dcf0SPeter MaydellVCVT_SF           1111 1111 1 . 11 .. 11 ... 0 011 00 1 . 0 ... 0 @1op
8132ec0dcf0SPeter MaydellVCVT_UF           1111 1111 1 . 11 .. 11 ... 0 011 01 1 . 0 ... 0 @1op
8142ec0dcf0SPeter MaydellVCVT_FS           1111 1111 1 . 11 .. 11 ... 0 011 10 1 . 0 ... 0 @1op
8152ec0dcf0SPeter MaydellVCVT_FU           1111 1111 1 . 11 .. 11 ... 0 011 11 1 . 0 ... 0 @1op
81653fc5f61SPeter Maydell
81753fc5f61SPeter Maydell# VCVT from floating point to integer with specified rounding mode
81853fc5f61SPeter MaydellVCVTAS            1111 1111 1 . 11 .. 11 ... 000 00 0 1 . 0 ... 0 @1op
81953fc5f61SPeter MaydellVCVTAU            1111 1111 1 . 11 .. 11 ... 000 00 1 1 . 0 ... 0 @1op
82053fc5f61SPeter MaydellVCVTNS            1111 1111 1 . 11 .. 11 ... 000 01 0 1 . 0 ... 0 @1op
82153fc5f61SPeter MaydellVCVTNU            1111 1111 1 . 11 .. 11 ... 000 01 1 1 . 0 ... 0 @1op
82253fc5f61SPeter MaydellVCVTPS            1111 1111 1 . 11 .. 11 ... 000 10 0 1 . 0 ... 0 @1op
82353fc5f61SPeter MaydellVCVTPU            1111 1111 1 . 11 .. 11 ... 000 10 1 1 . 0 ... 0 @1op
82453fc5f61SPeter MaydellVCVTMS            1111 1111 1 . 11 .. 11 ... 000 11 0 1 . 0 ... 0 @1op
82553fc5f61SPeter MaydellVCVTMU            1111 1111 1 . 11 .. 11 ... 000 11 1 1 . 0 ... 0 @1op
826*98e40fbdSPeter Maydell
827*98e40fbdSPeter MaydellVRINTN            1111 1111 1 . 11 .. 10 ... 001 000 1 . 0 ... 0 @1op
828*98e40fbdSPeter MaydellVRINTX            1111 1111 1 . 11 .. 10 ... 001 001 1 . 0 ... 0 @1op
829*98e40fbdSPeter MaydellVRINTA            1111 1111 1 . 11 .. 10 ... 001 010 1 . 0 ... 0 @1op
830*98e40fbdSPeter MaydellVRINTZ            1111 1111 1 . 11 .. 10 ... 001 011 1 . 0 ... 0 @1op
831*98e40fbdSPeter MaydellVRINTM            1111 1111 1 . 11 .. 10 ... 001 101 1 . 0 ... 0 @1op
832*98e40fbdSPeter MaydellVRINTP            1111 1111 1 . 11 .. 10 ... 001 111 1 . 0 ... 0 @1op
833