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