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