1625e3dd4SPeter Maydell# AArch32 Neon data-processing instruction descriptions 2625e3dd4SPeter Maydell# 3625e3dd4SPeter Maydell# Copyright (c) 2020 Linaro, Ltd 4625e3dd4SPeter Maydell# 5625e3dd4SPeter Maydell# This library is free software; you can redistribute it and/or 6625e3dd4SPeter Maydell# modify it under the terms of the GNU Lesser General Public 7625e3dd4SPeter Maydell# License as published by the Free Software Foundation; either 8625e3dd4SPeter Maydell# version 2 of the License, or (at your option) any later version. 9625e3dd4SPeter Maydell# 10625e3dd4SPeter Maydell# This library is distributed in the hope that it will be useful, 11625e3dd4SPeter Maydell# but WITHOUT ANY WARRANTY; without even the implied warranty of 12625e3dd4SPeter Maydell# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13625e3dd4SPeter Maydell# Lesser General Public License for more details. 14625e3dd4SPeter Maydell# 15625e3dd4SPeter Maydell# You should have received a copy of the GNU Lesser General Public 16625e3dd4SPeter Maydell# License along with this library; if not, see <http://www.gnu.org/licenses/>. 17625e3dd4SPeter Maydell 18625e3dd4SPeter Maydell# 19625e3dd4SPeter Maydell# This file is processed by scripts/decodetree.py 20625e3dd4SPeter Maydell# 21a4e143acSPeter Maydell# VFP/Neon register fields; same as vfp.decode 22a4e143acSPeter Maydell%vm_dp 5:1 0:4 23a4e143acSPeter Maydell%vn_dp 7:1 16:4 24a4e143acSPeter Maydell%vd_dp 22:1 12:4 25625e3dd4SPeter Maydell 26625e3dd4SPeter Maydell# Encodings for Neon data processing instructions where the T32 encoding 27625e3dd4SPeter Maydell# is a simple transformation of the A32 encoding. 28625e3dd4SPeter Maydell# More specifically, this file covers instructions where the A32 encoding is 29625e3dd4SPeter Maydell# 0b1111_001p_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq 30625e3dd4SPeter Maydell# and the T32 encoding is 31625e3dd4SPeter Maydell# 0b111p_1111_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq 32625e3dd4SPeter Maydell# This file works on the A32 encoding only; calling code for T32 has to 33625e3dd4SPeter Maydell# transform the insn into the A32 version first. 34a4e143acSPeter Maydell 35a4e143acSPeter Maydell###################################################################### 36a4e143acSPeter Maydell# 3-reg-same grouping: 37a4e143acSPeter Maydell# 1111 001 U 0 D sz:2 Vn:4 Vd:4 opc:4 N Q M op Vm:4 38a4e143acSPeter Maydell###################################################################### 39a4e143acSPeter Maydell 40a4e143acSPeter Maydell&3same vm vn vd q size 41a4e143acSPeter Maydell 42a4e143acSPeter Maydell@3same .... ... . . . size:2 .... .... .... . q:1 . . .... \ 43a4e143acSPeter Maydell &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp 44a4e143acSPeter Maydell 45059c2398SPeter Maydell@3same_q0 .... ... . . . size:2 .... .... .... . 0 . . .... \ 46059c2398SPeter Maydell &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp q=0 47059c2398SPeter Maydell 48a26a352bSPeter Maydell# For FP insns the high bit of 'size' is used as part of opcode decode 49a26a352bSPeter Maydell@3same_fp .... ... . . . . size:1 .... .... .... . q:1 . . .... \ 50a26a352bSPeter Maydell &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp 51ab978335SPeter Maydell@3same_fp_q0 .... ... . . . . size:1 .... .... .... . 0 . . .... \ 52ab978335SPeter Maydell &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp q=0 53a26a352bSPeter Maydell 54cb294bcaSPeter MaydellVHADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 0 .... @3same 55cb294bcaSPeter MaydellVHADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 0 .... @3same 567a9497f1SPeter MaydellVQADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same 577a9497f1SPeter MaydellVQADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 1 .... @3same 587a9497f1SPeter Maydell 598e44d03fSPeter MaydellVRHADD_S_3s 1111 001 0 0 . .. .... .... 0001 . . . 0 .... @3same 608e44d03fSPeter MaydellVRHADD_U_3s 1111 001 1 0 . .. .... .... 0001 . . . 0 .... @3same 618e44d03fSPeter Maydell 6235a548edSPeter Maydell@3same_logic .... ... . . . .. .... .... .... . q:1 .. .... \ 6335a548edSPeter Maydell &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp size=0 6435a548edSPeter Maydell 6535a548edSPeter MaydellVAND_3s 1111 001 0 0 . 00 .... .... 0001 ... 1 .... @3same_logic 6635a548edSPeter MaydellVBIC_3s 1111 001 0 0 . 01 .... .... 0001 ... 1 .... @3same_logic 6735a548edSPeter MaydellVORR_3s 1111 001 0 0 . 10 .... .... 0001 ... 1 .... @3same_logic 6835a548edSPeter MaydellVORN_3s 1111 001 0 0 . 11 .... .... 0001 ... 1 .... @3same_logic 6935a548edSPeter MaydellVEOR_3s 1111 001 1 0 . 00 .... .... 0001 ... 1 .... @3same_logic 7035a548edSPeter MaydellVBSL_3s 1111 001 1 0 . 01 .... .... 0001 ... 1 .... @3same_logic 7135a548edSPeter MaydellVBIT_3s 1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic 7235a548edSPeter MaydellVBIF_3s 1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic 7335a548edSPeter Maydell 748e44d03fSPeter MaydellVHSUB_S_3s 1111 001 0 0 . .. .... .... 0010 . . . 0 .... @3same 758e44d03fSPeter MaydellVHSUB_U_3s 1111 001 1 0 . .. .... .... 0010 . . . 0 .... @3same 768e44d03fSPeter Maydell 777a9497f1SPeter MaydellVQSUB_S_3s 1111 001 0 0 . .. .... .... 0010 . . . 1 .... @3same 787a9497f1SPeter MaydellVQSUB_U_3s 1111 001 1 0 . .. .... .... 0010 . . . 1 .... @3same 797a9497f1SPeter Maydell 8002bd0cdbSPeter MaydellVCGT_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 0 .... @3same 8102bd0cdbSPeter MaydellVCGT_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 0 .... @3same 8202bd0cdbSPeter MaydellVCGE_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 1 .... @3same 8302bd0cdbSPeter MaydellVCGE_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 1 .... @3same 8402bd0cdbSPeter Maydell 85e9eee531SRichard Henderson# The _rev suffix indicates that Vn and Vm are reversed. This is 86e9eee531SRichard Henderson# the case for shifts. In the Arm ARM these insns are documented 87e9eee531SRichard Henderson# with the Vm and Vn fields in their usual places, but in the 88e9eee531SRichard Henderson# assembly the operands are listed "backwards", ie in the order 89e9eee531SRichard Henderson# Dd, Dm, Dn where other insns use Dd, Dn, Dm. For QEMU we choose 90e9eee531SRichard Henderson# to consider Vm and Vn as being in different fields in the insn, 91e9eee531SRichard Henderson# which allows us to avoid special-casing shifts in the trans_ 92e9eee531SRichard Henderson# function code. We would otherwise need to manually swap the operands 93e9eee531SRichard Henderson# over to call Neon helper functions that are shared with AArch64, 94e9eee531SRichard Henderson# which does not have this odd reversed-operand situation. 95e9eee531SRichard Henderson@3same_rev .... ... . . . size:2 .... .... .... . q:1 . . .... \ 96e9eee531SRichard Henderson &3same vn=%vm_dp vm=%vn_dp vd=%vd_dp 97e9eee531SRichard Henderson 98e9eee531SRichard HendersonVSHL_S_3s 1111 001 0 0 . .. .... .... 0100 . . . 0 .... @3same_rev 99e9eee531SRichard HendersonVSHL_U_3s 1111 001 1 0 . .. .... .... 0100 . . . 0 .... @3same_rev 1000de34fd4SPeter Maydell 10135d4352fSPeter Maydell# Insns operating on 64-bit elements (size!=0b11 handled elsewhere) 10235d4352fSPeter Maydell# The _rev suffix indicates that Vn and Vm are reversed (as explained 10335d4352fSPeter Maydell# by the comment for the @3same_rev format). 10435d4352fSPeter Maydell@3same_64_rev .... ... . . . 11 .... .... .... . q:1 . . .... \ 10535d4352fSPeter Maydell &3same vm=%vn_dp vn=%vm_dp vd=%vd_dp size=3 10635d4352fSPeter Maydell 1076812dfdcSPeter Maydell{ 10835d4352fSPeter Maydell VQSHL_S64_3s 1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same_64_rev 1096812dfdcSPeter Maydell VQSHL_S_3s 1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same_rev 1106812dfdcSPeter Maydell} 1116812dfdcSPeter Maydell{ 11235d4352fSPeter Maydell VQSHL_U64_3s 1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same_64_rev 1136812dfdcSPeter Maydell VQSHL_U_3s 1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same_rev 1146812dfdcSPeter Maydell} 1156812dfdcSPeter Maydell{ 11635d4352fSPeter Maydell VRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same_64_rev 1176812dfdcSPeter Maydell VRSHL_S_3s 1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same_rev 1186812dfdcSPeter Maydell} 1196812dfdcSPeter Maydell{ 12035d4352fSPeter Maydell VRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same_64_rev 1216812dfdcSPeter Maydell VRSHL_U_3s 1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same_rev 1226812dfdcSPeter Maydell} 1236812dfdcSPeter Maydell{ 12435d4352fSPeter Maydell VQRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same_64_rev 1256812dfdcSPeter Maydell VQRSHL_S_3s 1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same_rev 1266812dfdcSPeter Maydell} 1276812dfdcSPeter Maydell{ 12835d4352fSPeter Maydell VQRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same_64_rev 1296812dfdcSPeter Maydell VQRSHL_U_3s 1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same_rev 1306812dfdcSPeter Maydell} 13135d4352fSPeter Maydell 13236b59310SPeter MaydellVMAX_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same 13336b59310SPeter MaydellVMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same 13436b59310SPeter MaydellVMIN_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same 13536b59310SPeter MaydellVMIN_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 1 .... @3same 13636b59310SPeter Maydell 1377715098fSPeter MaydellVABD_S_3s 1111 001 0 0 . .. .... .... 0111 . . . 0 .... @3same 1387715098fSPeter MaydellVABD_U_3s 1111 001 1 0 . .. .... .... 0111 . . . 0 .... @3same 1397715098fSPeter Maydell 1407715098fSPeter MaydellVABA_S_3s 1111 001 0 0 . .. .... .... 0111 . . . 1 .... @3same 1417715098fSPeter MaydellVABA_U_3s 1111 001 1 0 . .. .... .... 0111 . . . 1 .... @3same 1427715098fSPeter Maydell 143a4e143acSPeter MaydellVADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same 144a4e143acSPeter MaydellVSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same 14502bd0cdbSPeter Maydell 14602bd0cdbSPeter MaydellVTST_3s 1111 001 0 0 . .. .... .... 1000 . . . 1 .... @3same 14702bd0cdbSPeter MaydellVCEQ_3s 1111 001 1 0 . .. .... .... 1000 . . . 1 .... @3same 1480de34fd4SPeter Maydell 1490de34fd4SPeter MaydellVMLA_3s 1111 001 0 0 . .. .... .... 1001 . . . 0 .... @3same 1500de34fd4SPeter MaydellVMLS_3s 1111 001 1 0 . .. .... .... 1001 . . . 0 .... @3same 1510de34fd4SPeter Maydell 1520de34fd4SPeter MaydellVMUL_3s 1111 001 0 0 . .. .... .... 1001 . . . 1 .... @3same 1530de34fd4SPeter MaydellVMUL_p_3s 1111 001 1 0 . .. .... .... 1001 . . . 1 .... @3same 154a0635695SPeter Maydell 155059c2398SPeter MaydellVPMAX_S_3s 1111 001 0 0 . .. .... .... 1010 . . . 0 .... @3same_q0 156059c2398SPeter MaydellVPMAX_U_3s 1111 001 1 0 . .. .... .... 1010 . . . 0 .... @3same_q0 157059c2398SPeter Maydell 158059c2398SPeter MaydellVPMIN_S_3s 1111 001 0 0 . .. .... .... 1010 . . . 1 .... @3same_q0 159059c2398SPeter MaydellVPMIN_U_3s 1111 001 1 0 . .. .... .... 1010 . . . 1 .... @3same_q0 160059c2398SPeter Maydell 1617ecc28bcSPeter MaydellVQDMULH_3s 1111 001 0 0 . .. .... .... 1011 . . . 0 .... @3same 1627ecc28bcSPeter MaydellVQRDMULH_3s 1111 001 1 0 . .. .... .... 1011 . . . 0 .... @3same 1637ecc28bcSPeter Maydell 164fa22827dSPeter MaydellVPADD_3s 1111 001 0 0 . .. .... .... 1011 . . . 1 .... @3same_q0 165fa22827dSPeter Maydell 166a0635695SPeter MaydellVQRDMLAH_3s 1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same 16721290edfSPeter Maydell 16821290edfSPeter MaydellSHA1_3s 1111 001 0 0 . optype:2 .... .... 1100 . 1 . 0 .... \ 16921290edfSPeter Maydell vm=%vm_dp vn=%vn_dp vd=%vd_dp 17021290edfSPeter MaydellSHA256H_3s 1111 001 1 0 . 00 .... .... 1100 . 1 . 0 .... \ 17121290edfSPeter Maydell vm=%vm_dp vn=%vn_dp vd=%vd_dp 17221290edfSPeter MaydellSHA256H2_3s 1111 001 1 0 . 01 .... .... 1100 . 1 . 0 .... \ 17321290edfSPeter Maydell vm=%vm_dp vn=%vn_dp vd=%vd_dp 17421290edfSPeter MaydellSHA256SU1_3s 1111 001 1 0 . 10 .... .... 1100 . 1 . 0 .... \ 17521290edfSPeter Maydell vm=%vm_dp vn=%vn_dp vd=%vd_dp 17621290edfSPeter Maydell 177*e95485f8SPeter MaydellVFMA_fp_3s 1111 001 0 0 . 0 . .... .... 1100 ... 1 .... @3same_fp 178*e95485f8SPeter MaydellVFMS_fp_3s 1111 001 0 0 . 1 . .... .... 1100 ... 1 .... @3same_fp 179*e95485f8SPeter Maydell 180a0635695SPeter MaydellVQRDMLSH_3s 1111 001 1 0 . .. .... .... 1100 ... 1 .... @3same 181a26a352bSPeter Maydell 182a26a352bSPeter MaydellVADD_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 0 .... @3same_fp 183a26a352bSPeter MaydellVSUB_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 0 .... @3same_fp 184ab978335SPeter MaydellVPADD_fp_3s 1111 001 1 0 . 0 . .... .... 1101 ... 0 .... @3same_fp_q0 185a26a352bSPeter MaydellVABD_fp_3s 1111 001 1 0 . 1 . .... .... 1101 ... 0 .... @3same_fp 1868aa71eadSPeter MaydellVMLA_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 1 .... @3same_fp 1878aa71eadSPeter MaydellVMLS_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 1 .... @3same_fp 1888aa71eadSPeter MaydellVMUL_fp_3s 1111 001 1 0 . 0 . .... .... 1101 ... 1 .... @3same_fp 189727ff1d6SPeter MaydellVCEQ_fp_3s 1111 001 0 0 . 0 . .... .... 1110 ... 0 .... @3same_fp 190727ff1d6SPeter MaydellVCGE_fp_3s 1111 001 1 0 . 0 . .... .... 1110 ... 0 .... @3same_fp 191727ff1d6SPeter MaydellVACGE_fp_3s 1111 001 1 0 . 0 . .... .... 1110 ... 1 .... @3same_fp 192727ff1d6SPeter MaydellVCGT_fp_3s 1111 001 1 0 . 1 . .... .... 1110 ... 0 .... @3same_fp 193727ff1d6SPeter MaydellVACGT_fp_3s 1111 001 1 0 . 1 . .... .... 1110 ... 1 .... @3same_fp 194d5fdf9e9SPeter MaydellVMAX_fp_3s 1111 001 0 0 . 0 . .... .... 1111 ... 0 .... @3same_fp 195d5fdf9e9SPeter MaydellVMIN_fp_3s 1111 001 0 0 . 1 . .... .... 1111 ... 0 .... @3same_fp 196ab978335SPeter MaydellVPMAX_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 0 .... @3same_fp_q0 197ab978335SPeter MaydellVPMIN_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 0 .... @3same_fp_q0 198d5fdf9e9SPeter MaydellVRECPS_fp_3s 1111 001 0 0 . 0 . .... .... 1111 ... 1 .... @3same_fp 199d5fdf9e9SPeter MaydellVRSQRTS_fp_3s 1111 001 0 0 . 1 . .... .... 1111 ... 1 .... @3same_fp 200d5fdf9e9SPeter MaydellVMAXNM_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 1 .... @3same_fp 201d5fdf9e9SPeter MaydellVMINNM_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 1 .... @3same_fp 202