xref: /qemu/target/arm/tcg/neon-dp.decode (revision e95485f85657be21135c17a9226e297c21e73360)
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