xref: /qemu/target/arm/tcg/neon-dp.decode (revision cef9d54f)
1*f0984d40SFabiano Rosas# AArch32 Neon data-processing instruction descriptions
2*f0984d40SFabiano Rosas#
3*f0984d40SFabiano Rosas#  Copyright (c) 2020 Linaro, Ltd
4*f0984d40SFabiano Rosas#
5*f0984d40SFabiano Rosas# This library is free software; you can redistribute it and/or
6*f0984d40SFabiano Rosas# modify it under the terms of the GNU Lesser General Public
7*f0984d40SFabiano Rosas# License as published by the Free Software Foundation; either
8*f0984d40SFabiano Rosas# version 2.1 of the License, or (at your option) any later version.
9*f0984d40SFabiano Rosas#
10*f0984d40SFabiano Rosas# This library is distributed in the hope that it will be useful,
11*f0984d40SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of
12*f0984d40SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13*f0984d40SFabiano Rosas# Lesser General Public License for more details.
14*f0984d40SFabiano Rosas#
15*f0984d40SFabiano Rosas# You should have received a copy of the GNU Lesser General Public
16*f0984d40SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>.
17*f0984d40SFabiano Rosas
18*f0984d40SFabiano Rosas#
19*f0984d40SFabiano Rosas# This file is processed by scripts/decodetree.py
20*f0984d40SFabiano Rosas#
21*f0984d40SFabiano Rosas# VFP/Neon register fields; same as vfp.decode
22*f0984d40SFabiano Rosas%vm_dp  5:1 0:4
23*f0984d40SFabiano Rosas%vn_dp  7:1 16:4
24*f0984d40SFabiano Rosas%vd_dp  22:1 12:4
25*f0984d40SFabiano Rosas
26*f0984d40SFabiano Rosas# Encodings for Neon data processing instructions where the T32 encoding
27*f0984d40SFabiano Rosas# is a simple transformation of the A32 encoding.
28*f0984d40SFabiano Rosas# More specifically, this file covers instructions where the A32 encoding is
29*f0984d40SFabiano Rosas#   0b1111_001p_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq
30*f0984d40SFabiano Rosas# and the T32 encoding is
31*f0984d40SFabiano Rosas#   0b111p_1111_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq
32*f0984d40SFabiano Rosas# This file works on the A32 encoding only; calling code for T32 has to
33*f0984d40SFabiano Rosas# transform the insn into the A32 version first.
34*f0984d40SFabiano Rosas
35*f0984d40SFabiano Rosas######################################################################
36*f0984d40SFabiano Rosas# 3-reg-same grouping:
37*f0984d40SFabiano Rosas# 1111 001 U 0 D sz:2 Vn:4 Vd:4 opc:4 N Q M op Vm:4
38*f0984d40SFabiano Rosas######################################################################
39*f0984d40SFabiano Rosas
40*f0984d40SFabiano Rosas&3same vm vn vd q size
41*f0984d40SFabiano Rosas
42*f0984d40SFabiano Rosas@3same           .... ... . . . size:2 .... .... .... . q:1 . . .... \
43*f0984d40SFabiano Rosas                 &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp
44*f0984d40SFabiano Rosas
45*f0984d40SFabiano Rosas@3same_q0        .... ... . . . size:2 .... .... .... . 0 . . .... \
46*f0984d40SFabiano Rosas                 &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp q=0
47*f0984d40SFabiano Rosas
48*f0984d40SFabiano Rosas# For FP insns the high bit of 'size' is used as part of opcode decode,
49*f0984d40SFabiano Rosas# and the 'size' bit is 0 for 32-bit float and 1 for 16-bit float.
50*f0984d40SFabiano Rosas# This converts this encoding to the same MO_8/16/32/64 values that the
51*f0984d40SFabiano Rosas# integer neon insns use.
52*f0984d40SFabiano Rosas%3same_fp_size   20:1 !function=neon_3same_fp_size
53*f0984d40SFabiano Rosas
54*f0984d40SFabiano Rosas@3same_fp        .... ... . . . . . .... .... .... . q:1 . . .... \
55*f0984d40SFabiano Rosas                 &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp size=%3same_fp_size
56*f0984d40SFabiano Rosas@3same_fp_q0     .... ... . . . . . .... .... .... . 0 . . .... \
57*f0984d40SFabiano Rosas                 &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp q=0 size=%3same_fp_size
58*f0984d40SFabiano Rosas
59*f0984d40SFabiano RosasVHADD_S_3s       1111 001 0 0 . .. .... .... 0000 . . . 0 .... @3same
60*f0984d40SFabiano RosasVHADD_U_3s       1111 001 1 0 . .. .... .... 0000 . . . 0 .... @3same
61*f0984d40SFabiano RosasVQADD_S_3s       1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same
62*f0984d40SFabiano RosasVQADD_U_3s       1111 001 1 0 . .. .... .... 0000 . . . 1 .... @3same
63*f0984d40SFabiano Rosas
64*f0984d40SFabiano RosasVRHADD_S_3s      1111 001 0 0 . .. .... .... 0001 . . . 0 .... @3same
65*f0984d40SFabiano RosasVRHADD_U_3s      1111 001 1 0 . .. .... .... 0001 . . . 0 .... @3same
66*f0984d40SFabiano Rosas
67*f0984d40SFabiano Rosas@3same_logic     .... ... . . . .. .... .... .... . q:1 .. .... \
68*f0984d40SFabiano Rosas                 &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp size=0
69*f0984d40SFabiano Rosas
70*f0984d40SFabiano RosasVAND_3s          1111 001 0 0 . 00 .... .... 0001 ... 1 .... @3same_logic
71*f0984d40SFabiano RosasVBIC_3s          1111 001 0 0 . 01 .... .... 0001 ... 1 .... @3same_logic
72*f0984d40SFabiano RosasVORR_3s          1111 001 0 0 . 10 .... .... 0001 ... 1 .... @3same_logic
73*f0984d40SFabiano RosasVORN_3s          1111 001 0 0 . 11 .... .... 0001 ... 1 .... @3same_logic
74*f0984d40SFabiano RosasVEOR_3s          1111 001 1 0 . 00 .... .... 0001 ... 1 .... @3same_logic
75*f0984d40SFabiano RosasVBSL_3s          1111 001 1 0 . 01 .... .... 0001 ... 1 .... @3same_logic
76*f0984d40SFabiano RosasVBIT_3s          1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic
77*f0984d40SFabiano RosasVBIF_3s          1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic
78*f0984d40SFabiano Rosas
79*f0984d40SFabiano RosasVHSUB_S_3s       1111 001 0 0 . .. .... .... 0010 . . . 0 .... @3same
80*f0984d40SFabiano RosasVHSUB_U_3s       1111 001 1 0 . .. .... .... 0010 . . . 0 .... @3same
81*f0984d40SFabiano Rosas
82*f0984d40SFabiano RosasVQSUB_S_3s       1111 001 0 0 . .. .... .... 0010 . . . 1 .... @3same
83*f0984d40SFabiano RosasVQSUB_U_3s       1111 001 1 0 . .. .... .... 0010 . . . 1 .... @3same
84*f0984d40SFabiano Rosas
85*f0984d40SFabiano RosasVCGT_S_3s        1111 001 0 0 . .. .... .... 0011 . . . 0 .... @3same
86*f0984d40SFabiano RosasVCGT_U_3s        1111 001 1 0 . .. .... .... 0011 . . . 0 .... @3same
87*f0984d40SFabiano RosasVCGE_S_3s        1111 001 0 0 . .. .... .... 0011 . . . 1 .... @3same
88*f0984d40SFabiano RosasVCGE_U_3s        1111 001 1 0 . .. .... .... 0011 . . . 1 .... @3same
89*f0984d40SFabiano Rosas
90*f0984d40SFabiano Rosas# The _rev suffix indicates that Vn and Vm are reversed. This is
91*f0984d40SFabiano Rosas# the case for shifts. In the Arm ARM these insns are documented
92*f0984d40SFabiano Rosas# with the Vm and Vn fields in their usual places, but in the
93*f0984d40SFabiano Rosas# assembly the operands are listed "backwards", ie in the order
94*f0984d40SFabiano Rosas# Dd, Dm, Dn where other insns use Dd, Dn, Dm. For QEMU we choose
95*f0984d40SFabiano Rosas# to consider Vm and Vn as being in different fields in the insn,
96*f0984d40SFabiano Rosas# which allows us to avoid special-casing shifts in the trans_
97*f0984d40SFabiano Rosas# function code. We would otherwise need to manually swap the operands
98*f0984d40SFabiano Rosas# over to call Neon helper functions that are shared with AArch64,
99*f0984d40SFabiano Rosas# which does not have this odd reversed-operand situation.
100*f0984d40SFabiano Rosas@3same_rev       .... ... . . . size:2 .... .... .... . q:1 . . .... \
101*f0984d40SFabiano Rosas                 &3same vn=%vm_dp vm=%vn_dp vd=%vd_dp
102*f0984d40SFabiano Rosas
103*f0984d40SFabiano RosasVSHL_S_3s        1111 001 0 0 . .. .... .... 0100 . . . 0 .... @3same_rev
104*f0984d40SFabiano RosasVSHL_U_3s        1111 001 1 0 . .. .... .... 0100 . . . 0 .... @3same_rev
105*f0984d40SFabiano RosasVQSHL_S_3s       1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same_rev
106*f0984d40SFabiano RosasVQSHL_U_3s       1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same_rev
107*f0984d40SFabiano RosasVRSHL_S_3s       1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same_rev
108*f0984d40SFabiano RosasVRSHL_U_3s       1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same_rev
109*f0984d40SFabiano RosasVQRSHL_S_3s      1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same_rev
110*f0984d40SFabiano RosasVQRSHL_U_3s      1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same_rev
111*f0984d40SFabiano Rosas
112*f0984d40SFabiano RosasVMAX_S_3s        1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same
113*f0984d40SFabiano RosasVMAX_U_3s        1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same
114*f0984d40SFabiano RosasVMIN_S_3s        1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same
115*f0984d40SFabiano RosasVMIN_U_3s        1111 001 1 0 . .. .... .... 0110 . . . 1 .... @3same
116*f0984d40SFabiano Rosas
117*f0984d40SFabiano RosasVABD_S_3s        1111 001 0 0 . .. .... .... 0111 . . . 0 .... @3same
118*f0984d40SFabiano RosasVABD_U_3s        1111 001 1 0 . .. .... .... 0111 . . . 0 .... @3same
119*f0984d40SFabiano Rosas
120*f0984d40SFabiano RosasVABA_S_3s        1111 001 0 0 . .. .... .... 0111 . . . 1 .... @3same
121*f0984d40SFabiano RosasVABA_U_3s        1111 001 1 0 . .. .... .... 0111 . . . 1 .... @3same
122*f0984d40SFabiano Rosas
123*f0984d40SFabiano RosasVADD_3s          1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same
124*f0984d40SFabiano RosasVSUB_3s          1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same
125*f0984d40SFabiano Rosas
126*f0984d40SFabiano RosasVTST_3s          1111 001 0 0 . .. .... .... 1000 . . . 1 .... @3same
127*f0984d40SFabiano RosasVCEQ_3s          1111 001 1 0 . .. .... .... 1000 . . . 1 .... @3same
128*f0984d40SFabiano Rosas
129*f0984d40SFabiano RosasVMLA_3s          1111 001 0 0 . .. .... .... 1001 . . . 0 .... @3same
130*f0984d40SFabiano RosasVMLS_3s          1111 001 1 0 . .. .... .... 1001 . . . 0 .... @3same
131*f0984d40SFabiano Rosas
132*f0984d40SFabiano RosasVMUL_3s          1111 001 0 0 . .. .... .... 1001 . . . 1 .... @3same
133*f0984d40SFabiano RosasVMUL_p_3s        1111 001 1 0 . .. .... .... 1001 . . . 1 .... @3same
134*f0984d40SFabiano Rosas
135*f0984d40SFabiano RosasVPMAX_S_3s       1111 001 0 0 . .. .... .... 1010 . . . 0 .... @3same_q0
136*f0984d40SFabiano RosasVPMAX_U_3s       1111 001 1 0 . .. .... .... 1010 . . . 0 .... @3same_q0
137*f0984d40SFabiano Rosas
138*f0984d40SFabiano RosasVPMIN_S_3s       1111 001 0 0 . .. .... .... 1010 . . . 1 .... @3same_q0
139*f0984d40SFabiano RosasVPMIN_U_3s       1111 001 1 0 . .. .... .... 1010 . . . 1 .... @3same_q0
140*f0984d40SFabiano Rosas
141*f0984d40SFabiano RosasVQDMULH_3s       1111 001 0 0 . .. .... .... 1011 . . . 0 .... @3same
142*f0984d40SFabiano RosasVQRDMULH_3s      1111 001 1 0 . .. .... .... 1011 . . . 0 .... @3same
143*f0984d40SFabiano Rosas
144*f0984d40SFabiano RosasVPADD_3s         1111 001 0 0 . .. .... .... 1011 . . . 1 .... @3same_q0
145*f0984d40SFabiano Rosas
146*f0984d40SFabiano RosasVQRDMLAH_3s      1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same
147*f0984d40SFabiano Rosas
148*f0984d40SFabiano Rosas@3same_crypto    .... .... .... .... .... .... .... .... \
149*f0984d40SFabiano Rosas                 &3same vm=%vm_dp vn=%vn_dp vd=%vd_dp size=0 q=1
150*f0984d40SFabiano Rosas
151*f0984d40SFabiano RosasSHA1C_3s         1111 001 0 0 . 00 .... .... 1100 . 1 . 0 .... @3same_crypto
152*f0984d40SFabiano RosasSHA1P_3s         1111 001 0 0 . 01 .... .... 1100 . 1 . 0 .... @3same_crypto
153*f0984d40SFabiano RosasSHA1M_3s         1111 001 0 0 . 10 .... .... 1100 . 1 . 0 .... @3same_crypto
154*f0984d40SFabiano RosasSHA1SU0_3s       1111 001 0 0 . 11 .... .... 1100 . 1 . 0 .... @3same_crypto
155*f0984d40SFabiano RosasSHA256H_3s       1111 001 1 0 . 00 .... .... 1100 . 1 . 0 .... @3same_crypto
156*f0984d40SFabiano RosasSHA256H2_3s      1111 001 1 0 . 01 .... .... 1100 . 1 . 0 .... @3same_crypto
157*f0984d40SFabiano RosasSHA256SU1_3s     1111 001 1 0 . 10 .... .... 1100 . 1 . 0 .... @3same_crypto
158*f0984d40SFabiano Rosas
159*f0984d40SFabiano RosasVFMA_fp_3s       1111 001 0 0 . 0 . .... .... 1100 ... 1 .... @3same_fp
160*f0984d40SFabiano RosasVFMS_fp_3s       1111 001 0 0 . 1 . .... .... 1100 ... 1 .... @3same_fp
161*f0984d40SFabiano Rosas
162*f0984d40SFabiano RosasVQRDMLSH_3s      1111 001 1 0 . .. .... .... 1100 ... 1 .... @3same
163*f0984d40SFabiano Rosas
164*f0984d40SFabiano RosasVADD_fp_3s       1111 001 0 0 . 0 . .... .... 1101 ... 0 .... @3same_fp
165*f0984d40SFabiano RosasVSUB_fp_3s       1111 001 0 0 . 1 . .... .... 1101 ... 0 .... @3same_fp
166*f0984d40SFabiano RosasVPADD_fp_3s      1111 001 1 0 . 0 . .... .... 1101 ... 0 .... @3same_fp_q0
167*f0984d40SFabiano RosasVABD_fp_3s       1111 001 1 0 . 1 . .... .... 1101 ... 0 .... @3same_fp
168*f0984d40SFabiano RosasVMLA_fp_3s       1111 001 0 0 . 0 . .... .... 1101 ... 1 .... @3same_fp
169*f0984d40SFabiano RosasVMLS_fp_3s       1111 001 0 0 . 1 . .... .... 1101 ... 1 .... @3same_fp
170*f0984d40SFabiano RosasVMUL_fp_3s       1111 001 1 0 . 0 . .... .... 1101 ... 1 .... @3same_fp
171*f0984d40SFabiano RosasVCEQ_fp_3s       1111 001 0 0 . 0 . .... .... 1110 ... 0 .... @3same_fp
172*f0984d40SFabiano RosasVCGE_fp_3s       1111 001 1 0 . 0 . .... .... 1110 ... 0 .... @3same_fp
173*f0984d40SFabiano RosasVACGE_fp_3s      1111 001 1 0 . 0 . .... .... 1110 ... 1 .... @3same_fp
174*f0984d40SFabiano RosasVCGT_fp_3s       1111 001 1 0 . 1 . .... .... 1110 ... 0 .... @3same_fp
175*f0984d40SFabiano RosasVACGT_fp_3s      1111 001 1 0 . 1 . .... .... 1110 ... 1 .... @3same_fp
176*f0984d40SFabiano RosasVMAX_fp_3s       1111 001 0 0 . 0 . .... .... 1111 ... 0 .... @3same_fp
177*f0984d40SFabiano RosasVMIN_fp_3s       1111 001 0 0 . 1 . .... .... 1111 ... 0 .... @3same_fp
178*f0984d40SFabiano RosasVPMAX_fp_3s      1111 001 1 0 . 0 . .... .... 1111 ... 0 .... @3same_fp_q0
179*f0984d40SFabiano RosasVPMIN_fp_3s      1111 001 1 0 . 1 . .... .... 1111 ... 0 .... @3same_fp_q0
180*f0984d40SFabiano RosasVRECPS_fp_3s     1111 001 0 0 . 0 . .... .... 1111 ... 1 .... @3same_fp
181*f0984d40SFabiano RosasVRSQRTS_fp_3s    1111 001 0 0 . 1 . .... .... 1111 ... 1 .... @3same_fp
182*f0984d40SFabiano RosasVMAXNM_fp_3s     1111 001 1 0 . 0 . .... .... 1111 ... 1 .... @3same_fp
183*f0984d40SFabiano RosasVMINNM_fp_3s     1111 001 1 0 . 1 . .... .... 1111 ... 1 .... @3same_fp
184*f0984d40SFabiano Rosas
185*f0984d40SFabiano Rosas######################################################################
186*f0984d40SFabiano Rosas# 2-reg-and-shift grouping:
187*f0984d40SFabiano Rosas# 1111 001 U 1 D immH:3 immL:3 Vd:4 opc:4 L Q M 1 Vm:4
188*f0984d40SFabiano Rosas######################################################################
189*f0984d40SFabiano Rosas&2reg_shift vm vd q shift size
190*f0984d40SFabiano Rosas
191*f0984d40SFabiano Rosas# Right shifts are encoded as N - shift, where N is the element size in bits.
192*f0984d40SFabiano Rosas%neon_rshift_i6  16:6 !function=rsub_64
193*f0984d40SFabiano Rosas%neon_rshift_i5  16:5 !function=rsub_32
194*f0984d40SFabiano Rosas%neon_rshift_i4  16:4 !function=rsub_16
195*f0984d40SFabiano Rosas%neon_rshift_i3  16:3 !function=rsub_8
196*f0984d40SFabiano Rosas
197*f0984d40SFabiano Rosas@2reg_shr_d      .... ... . . . ......  .... .... 1 q:1 . . .... \
198*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=3 shift=%neon_rshift_i6
199*f0984d40SFabiano Rosas@2reg_shr_s      .... ... . . . 1 ..... .... .... 0 q:1 . . .... \
200*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=2 shift=%neon_rshift_i5
201*f0984d40SFabiano Rosas@2reg_shr_h      .... ... . . . 01 .... .... .... 0 q:1 . . .... \
202*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=1 shift=%neon_rshift_i4
203*f0984d40SFabiano Rosas@2reg_shr_b      .... ... . . . 001 ... .... .... 0 q:1 . . .... \
204*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=0 shift=%neon_rshift_i3
205*f0984d40SFabiano Rosas
206*f0984d40SFabiano Rosas@2reg_shl_d      .... ... . . . shift:6      .... .... 1 q:1 . . .... \
207*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=3
208*f0984d40SFabiano Rosas@2reg_shl_s      .... ... . . . 1 shift:5    .... .... 0 q:1 . . .... \
209*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=2
210*f0984d40SFabiano Rosas@2reg_shl_h      .... ... . . . 01 shift:4   .... .... 0 q:1 . . .... \
211*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=1
212*f0984d40SFabiano Rosas@2reg_shl_b      .... ... . . . 001 shift:3  .... .... 0 q:1 . . .... \
213*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=0
214*f0984d40SFabiano Rosas
215*f0984d40SFabiano Rosas# Narrowing right shifts: here the Q bit is part of the opcode decode
216*f0984d40SFabiano Rosas@2reg_shrn_d     .... ... . . . 1 ..... .... .... 0 . . . .... \
217*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=3 q=0 \
218*f0984d40SFabiano Rosas                 shift=%neon_rshift_i5
219*f0984d40SFabiano Rosas@2reg_shrn_s     .... ... . . . 01 .... .... .... 0 . . . .... \
220*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=2 q=0 \
221*f0984d40SFabiano Rosas                 shift=%neon_rshift_i4
222*f0984d40SFabiano Rosas@2reg_shrn_h     .... ... . . . 001 ... .... .... 0 . . . .... \
223*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=1 q=0 \
224*f0984d40SFabiano Rosas                 shift=%neon_rshift_i3
225*f0984d40SFabiano Rosas
226*f0984d40SFabiano Rosas# Long left shifts: again Q is part of opcode decode
227*f0984d40SFabiano Rosas@2reg_shll_s     .... ... . . . 1 shift:5    .... .... 0 . . . .... \
228*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=2 q=0
229*f0984d40SFabiano Rosas@2reg_shll_h     .... ... . . . 01 shift:4   .... .... 0 . . . .... \
230*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=1 q=0
231*f0984d40SFabiano Rosas@2reg_shll_b     .... ... . . . 001 shift:3  .... .... 0 . . . .... \
232*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=0 q=0
233*f0984d40SFabiano Rosas
234*f0984d40SFabiano Rosas@2reg_vcvt       .... ... . . . 1 ..... .... .... . q:1 . . .... \
235*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=2 shift=%neon_rshift_i5
236*f0984d40SFabiano Rosas@2reg_vcvt_f16   .... ... . . . 11 .... .... .... . q:1 . . .... \
237*f0984d40SFabiano Rosas                 &2reg_shift vm=%vm_dp vd=%vd_dp size=1 shift=%neon_rshift_i4
238*f0984d40SFabiano Rosas
239*f0984d40SFabiano RosasVSHR_S_2sh       1111 001 0 1 . ...... .... 0000 . . . 1 .... @2reg_shr_d
240*f0984d40SFabiano RosasVSHR_S_2sh       1111 001 0 1 . ...... .... 0000 . . . 1 .... @2reg_shr_s
241*f0984d40SFabiano RosasVSHR_S_2sh       1111 001 0 1 . ...... .... 0000 . . . 1 .... @2reg_shr_h
242*f0984d40SFabiano RosasVSHR_S_2sh       1111 001 0 1 . ...... .... 0000 . . . 1 .... @2reg_shr_b
243*f0984d40SFabiano Rosas
244*f0984d40SFabiano RosasVSHR_U_2sh       1111 001 1 1 . ...... .... 0000 . . . 1 .... @2reg_shr_d
245*f0984d40SFabiano RosasVSHR_U_2sh       1111 001 1 1 . ...... .... 0000 . . . 1 .... @2reg_shr_s
246*f0984d40SFabiano RosasVSHR_U_2sh       1111 001 1 1 . ...... .... 0000 . . . 1 .... @2reg_shr_h
247*f0984d40SFabiano RosasVSHR_U_2sh       1111 001 1 1 . ...... .... 0000 . . . 1 .... @2reg_shr_b
248*f0984d40SFabiano Rosas
249*f0984d40SFabiano RosasVSRA_S_2sh       1111 001 0 1 . ...... .... 0001 . . . 1 .... @2reg_shr_d
250*f0984d40SFabiano RosasVSRA_S_2sh       1111 001 0 1 . ...... .... 0001 . . . 1 .... @2reg_shr_s
251*f0984d40SFabiano RosasVSRA_S_2sh       1111 001 0 1 . ...... .... 0001 . . . 1 .... @2reg_shr_h
252*f0984d40SFabiano RosasVSRA_S_2sh       1111 001 0 1 . ...... .... 0001 . . . 1 .... @2reg_shr_b
253*f0984d40SFabiano Rosas
254*f0984d40SFabiano RosasVSRA_U_2sh       1111 001 1 1 . ...... .... 0001 . . . 1 .... @2reg_shr_d
255*f0984d40SFabiano RosasVSRA_U_2sh       1111 001 1 1 . ...... .... 0001 . . . 1 .... @2reg_shr_s
256*f0984d40SFabiano RosasVSRA_U_2sh       1111 001 1 1 . ...... .... 0001 . . . 1 .... @2reg_shr_h
257*f0984d40SFabiano RosasVSRA_U_2sh       1111 001 1 1 . ...... .... 0001 . . . 1 .... @2reg_shr_b
258*f0984d40SFabiano Rosas
259*f0984d40SFabiano RosasVRSHR_S_2sh      1111 001 0 1 . ...... .... 0010 . . . 1 .... @2reg_shr_d
260*f0984d40SFabiano RosasVRSHR_S_2sh      1111 001 0 1 . ...... .... 0010 . . . 1 .... @2reg_shr_s
261*f0984d40SFabiano RosasVRSHR_S_2sh      1111 001 0 1 . ...... .... 0010 . . . 1 .... @2reg_shr_h
262*f0984d40SFabiano RosasVRSHR_S_2sh      1111 001 0 1 . ...... .... 0010 . . . 1 .... @2reg_shr_b
263*f0984d40SFabiano Rosas
264*f0984d40SFabiano RosasVRSHR_U_2sh      1111 001 1 1 . ...... .... 0010 . . . 1 .... @2reg_shr_d
265*f0984d40SFabiano RosasVRSHR_U_2sh      1111 001 1 1 . ...... .... 0010 . . . 1 .... @2reg_shr_s
266*f0984d40SFabiano RosasVRSHR_U_2sh      1111 001 1 1 . ...... .... 0010 . . . 1 .... @2reg_shr_h
267*f0984d40SFabiano RosasVRSHR_U_2sh      1111 001 1 1 . ...... .... 0010 . . . 1 .... @2reg_shr_b
268*f0984d40SFabiano Rosas
269*f0984d40SFabiano RosasVRSRA_S_2sh      1111 001 0 1 . ...... .... 0011 . . . 1 .... @2reg_shr_d
270*f0984d40SFabiano RosasVRSRA_S_2sh      1111 001 0 1 . ...... .... 0011 . . . 1 .... @2reg_shr_s
271*f0984d40SFabiano RosasVRSRA_S_2sh      1111 001 0 1 . ...... .... 0011 . . . 1 .... @2reg_shr_h
272*f0984d40SFabiano RosasVRSRA_S_2sh      1111 001 0 1 . ...... .... 0011 . . . 1 .... @2reg_shr_b
273*f0984d40SFabiano Rosas
274*f0984d40SFabiano RosasVRSRA_U_2sh      1111 001 1 1 . ...... .... 0011 . . . 1 .... @2reg_shr_d
275*f0984d40SFabiano RosasVRSRA_U_2sh      1111 001 1 1 . ...... .... 0011 . . . 1 .... @2reg_shr_s
276*f0984d40SFabiano RosasVRSRA_U_2sh      1111 001 1 1 . ...... .... 0011 . . . 1 .... @2reg_shr_h
277*f0984d40SFabiano RosasVRSRA_U_2sh      1111 001 1 1 . ...... .... 0011 . . . 1 .... @2reg_shr_b
278*f0984d40SFabiano Rosas
279*f0984d40SFabiano RosasVSRI_2sh         1111 001 1 1 . ...... .... 0100 . . . 1 .... @2reg_shr_d
280*f0984d40SFabiano RosasVSRI_2sh         1111 001 1 1 . ...... .... 0100 . . . 1 .... @2reg_shr_s
281*f0984d40SFabiano RosasVSRI_2sh         1111 001 1 1 . ...... .... 0100 . . . 1 .... @2reg_shr_h
282*f0984d40SFabiano RosasVSRI_2sh         1111 001 1 1 . ...... .... 0100 . . . 1 .... @2reg_shr_b
283*f0984d40SFabiano Rosas
284*f0984d40SFabiano RosasVSHL_2sh         1111 001 0 1 . ...... .... 0101 . . . 1 .... @2reg_shl_d
285*f0984d40SFabiano RosasVSHL_2sh         1111 001 0 1 . ...... .... 0101 . . . 1 .... @2reg_shl_s
286*f0984d40SFabiano RosasVSHL_2sh         1111 001 0 1 . ...... .... 0101 . . . 1 .... @2reg_shl_h
287*f0984d40SFabiano RosasVSHL_2sh         1111 001 0 1 . ...... .... 0101 . . . 1 .... @2reg_shl_b
288*f0984d40SFabiano Rosas
289*f0984d40SFabiano RosasVSLI_2sh         1111 001 1 1 . ...... .... 0101 . . . 1 .... @2reg_shl_d
290*f0984d40SFabiano RosasVSLI_2sh         1111 001 1 1 . ...... .... 0101 . . . 1 .... @2reg_shl_s
291*f0984d40SFabiano RosasVSLI_2sh         1111 001 1 1 . ...... .... 0101 . . . 1 .... @2reg_shl_h
292*f0984d40SFabiano RosasVSLI_2sh         1111 001 1 1 . ...... .... 0101 . . . 1 .... @2reg_shl_b
293*f0984d40SFabiano Rosas
294*f0984d40SFabiano RosasVQSHLU_64_2sh    1111 001 1 1 . ...... .... 0110 . . . 1 .... @2reg_shl_d
295*f0984d40SFabiano RosasVQSHLU_2sh       1111 001 1 1 . ...... .... 0110 . . . 1 .... @2reg_shl_s
296*f0984d40SFabiano RosasVQSHLU_2sh       1111 001 1 1 . ...... .... 0110 . . . 1 .... @2reg_shl_h
297*f0984d40SFabiano RosasVQSHLU_2sh       1111 001 1 1 . ...... .... 0110 . . . 1 .... @2reg_shl_b
298*f0984d40SFabiano Rosas
299*f0984d40SFabiano RosasVQSHL_S_64_2sh   1111 001 0 1 . ...... .... 0111 . . . 1 .... @2reg_shl_d
300*f0984d40SFabiano RosasVQSHL_S_2sh      1111 001 0 1 . ...... .... 0111 . . . 1 .... @2reg_shl_s
301*f0984d40SFabiano RosasVQSHL_S_2sh      1111 001 0 1 . ...... .... 0111 . . . 1 .... @2reg_shl_h
302*f0984d40SFabiano RosasVQSHL_S_2sh      1111 001 0 1 . ...... .... 0111 . . . 1 .... @2reg_shl_b
303*f0984d40SFabiano Rosas
304*f0984d40SFabiano RosasVQSHL_U_64_2sh   1111 001 1 1 . ...... .... 0111 . . . 1 .... @2reg_shl_d
305*f0984d40SFabiano RosasVQSHL_U_2sh      1111 001 1 1 . ...... .... 0111 . . . 1 .... @2reg_shl_s
306*f0984d40SFabiano RosasVQSHL_U_2sh      1111 001 1 1 . ...... .... 0111 . . . 1 .... @2reg_shl_h
307*f0984d40SFabiano RosasVQSHL_U_2sh      1111 001 1 1 . ...... .... 0111 . . . 1 .... @2reg_shl_b
308*f0984d40SFabiano Rosas
309*f0984d40SFabiano RosasVSHRN_64_2sh     1111 001 0 1 . ...... .... 1000 . 0 . 1 .... @2reg_shrn_d
310*f0984d40SFabiano RosasVSHRN_32_2sh     1111 001 0 1 . ...... .... 1000 . 0 . 1 .... @2reg_shrn_s
311*f0984d40SFabiano RosasVSHRN_16_2sh     1111 001 0 1 . ...... .... 1000 . 0 . 1 .... @2reg_shrn_h
312*f0984d40SFabiano Rosas
313*f0984d40SFabiano RosasVRSHRN_64_2sh    1111 001 0 1 . ...... .... 1000 . 1 . 1 .... @2reg_shrn_d
314*f0984d40SFabiano RosasVRSHRN_32_2sh    1111 001 0 1 . ...... .... 1000 . 1 . 1 .... @2reg_shrn_s
315*f0984d40SFabiano RosasVRSHRN_16_2sh    1111 001 0 1 . ...... .... 1000 . 1 . 1 .... @2reg_shrn_h
316*f0984d40SFabiano Rosas
317*f0984d40SFabiano RosasVQSHRUN_64_2sh   1111 001 1 1 . ...... .... 1000 . 0 . 1 .... @2reg_shrn_d
318*f0984d40SFabiano RosasVQSHRUN_32_2sh   1111 001 1 1 . ...... .... 1000 . 0 . 1 .... @2reg_shrn_s
319*f0984d40SFabiano RosasVQSHRUN_16_2sh   1111 001 1 1 . ...... .... 1000 . 0 . 1 .... @2reg_shrn_h
320*f0984d40SFabiano Rosas
321*f0984d40SFabiano RosasVQRSHRUN_64_2sh  1111 001 1 1 . ...... .... 1000 . 1 . 1 .... @2reg_shrn_d
322*f0984d40SFabiano RosasVQRSHRUN_32_2sh  1111 001 1 1 . ...... .... 1000 . 1 . 1 .... @2reg_shrn_s
323*f0984d40SFabiano RosasVQRSHRUN_16_2sh  1111 001 1 1 . ...... .... 1000 . 1 . 1 .... @2reg_shrn_h
324*f0984d40SFabiano Rosas
325*f0984d40SFabiano Rosas# VQSHRN with signed input
326*f0984d40SFabiano RosasVQSHRN_S64_2sh   1111 001 0 1 . ...... .... 1001 . 0 . 1 .... @2reg_shrn_d
327*f0984d40SFabiano RosasVQSHRN_S32_2sh   1111 001 0 1 . ...... .... 1001 . 0 . 1 .... @2reg_shrn_s
328*f0984d40SFabiano RosasVQSHRN_S16_2sh   1111 001 0 1 . ...... .... 1001 . 0 . 1 .... @2reg_shrn_h
329*f0984d40SFabiano Rosas
330*f0984d40SFabiano Rosas# VQRSHRN with signed input
331*f0984d40SFabiano RosasVQRSHRN_S64_2sh  1111 001 0 1 . ...... .... 1001 . 1 . 1 .... @2reg_shrn_d
332*f0984d40SFabiano RosasVQRSHRN_S32_2sh  1111 001 0 1 . ...... .... 1001 . 1 . 1 .... @2reg_shrn_s
333*f0984d40SFabiano RosasVQRSHRN_S16_2sh  1111 001 0 1 . ...... .... 1001 . 1 . 1 .... @2reg_shrn_h
334*f0984d40SFabiano Rosas
335*f0984d40SFabiano Rosas# VQSHRN with unsigned input
336*f0984d40SFabiano RosasVQSHRN_U64_2sh   1111 001 1 1 . ...... .... 1001 . 0 . 1 .... @2reg_shrn_d
337*f0984d40SFabiano RosasVQSHRN_U32_2sh   1111 001 1 1 . ...... .... 1001 . 0 . 1 .... @2reg_shrn_s
338*f0984d40SFabiano RosasVQSHRN_U16_2sh   1111 001 1 1 . ...... .... 1001 . 0 . 1 .... @2reg_shrn_h
339*f0984d40SFabiano Rosas
340*f0984d40SFabiano Rosas# VQRSHRN with unsigned input
341*f0984d40SFabiano RosasVQRSHRN_U64_2sh  1111 001 1 1 . ...... .... 1001 . 1 . 1 .... @2reg_shrn_d
342*f0984d40SFabiano RosasVQRSHRN_U32_2sh  1111 001 1 1 . ...... .... 1001 . 1 . 1 .... @2reg_shrn_s
343*f0984d40SFabiano RosasVQRSHRN_U16_2sh  1111 001 1 1 . ...... .... 1001 . 1 . 1 .... @2reg_shrn_h
344*f0984d40SFabiano Rosas
345*f0984d40SFabiano RosasVSHLL_S_2sh      1111 001 0 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_s
346*f0984d40SFabiano RosasVSHLL_S_2sh      1111 001 0 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_h
347*f0984d40SFabiano RosasVSHLL_S_2sh      1111 001 0 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_b
348*f0984d40SFabiano Rosas
349*f0984d40SFabiano RosasVSHLL_U_2sh      1111 001 1 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_s
350*f0984d40SFabiano RosasVSHLL_U_2sh      1111 001 1 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_h
351*f0984d40SFabiano RosasVSHLL_U_2sh      1111 001 1 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_b
352*f0984d40SFabiano Rosas
353*f0984d40SFabiano Rosas# VCVT fixed<->float conversions
354*f0984d40SFabiano RosasVCVT_SH_2sh      1111 001 0 1 . ...... .... 1100 0 . . 1 .... @2reg_vcvt_f16
355*f0984d40SFabiano RosasVCVT_UH_2sh      1111 001 1 1 . ...... .... 1100 0 . . 1 .... @2reg_vcvt_f16
356*f0984d40SFabiano RosasVCVT_HS_2sh      1111 001 0 1 . ...... .... 1101 0 . . 1 .... @2reg_vcvt_f16
357*f0984d40SFabiano RosasVCVT_HU_2sh      1111 001 1 1 . ...... .... 1101 0 . . 1 .... @2reg_vcvt_f16
358*f0984d40SFabiano Rosas
359*f0984d40SFabiano RosasVCVT_SF_2sh      1111 001 0 1 . ...... .... 1110 0 . . 1 .... @2reg_vcvt
360*f0984d40SFabiano RosasVCVT_UF_2sh      1111 001 1 1 . ...... .... 1110 0 . . 1 .... @2reg_vcvt
361*f0984d40SFabiano RosasVCVT_FS_2sh      1111 001 0 1 . ...... .... 1111 0 . . 1 .... @2reg_vcvt
362*f0984d40SFabiano RosasVCVT_FU_2sh      1111 001 1 1 . ...... .... 1111 0 . . 1 .... @2reg_vcvt
363*f0984d40SFabiano Rosas
364*f0984d40SFabiano Rosas######################################################################
365*f0984d40SFabiano Rosas# 1-reg-and-modified-immediate grouping:
366*f0984d40SFabiano Rosas# 1111 001 i 1 D 000 imm:3 Vd:4 cmode:4 0 Q op 1 Vm:4
367*f0984d40SFabiano Rosas######################################################################
368*f0984d40SFabiano Rosas
369*f0984d40SFabiano Rosas&1reg_imm        vd q imm cmode op
370*f0984d40SFabiano Rosas
371*f0984d40SFabiano Rosas%asimd_imm_value 24:1 16:3 0:4
372*f0984d40SFabiano Rosas
373*f0984d40SFabiano Rosas@1reg_imm        .... ... . . . ... ... .... .... . q:1 . . .... \
374*f0984d40SFabiano Rosas                 &1reg_imm imm=%asimd_imm_value vd=%vd_dp
375*f0984d40SFabiano Rosas
376*f0984d40SFabiano Rosas# The cmode/op bits here decode VORR/VBIC/VMOV/VMNV, but
377*f0984d40SFabiano Rosas# not in a way we can conveniently represent in decodetree without
378*f0984d40SFabiano Rosas# a lot of repetition:
379*f0984d40SFabiano Rosas# VORR: op=0, (cmode & 1) && cmode < 12
380*f0984d40SFabiano Rosas# VBIC: op=1, (cmode & 1) && cmode < 12
381*f0984d40SFabiano Rosas# VMOV: everything else
382*f0984d40SFabiano Rosas# So we have a single decode line and check the cmode/op in the
383*f0984d40SFabiano Rosas# trans function.
384*f0984d40SFabiano RosasVimm_1r          1111 001 . 1 . 000 ... .... cmode:4 0 . op:1 1 .... @1reg_imm
385*f0984d40SFabiano Rosas
386*f0984d40SFabiano Rosas######################################################################
387*f0984d40SFabiano Rosas# Within the "two registers, or three registers of different lengths"
388*f0984d40SFabiano Rosas# grouping ([23,4]=0b10), bits [21:20] are either part of the opcode
389*f0984d40SFabiano Rosas# decode: 0b11 for VEXT, two-reg-misc, VTBL, and duplicate-scalar;
390*f0984d40SFabiano Rosas# or they are a size field for the three-reg-different-lengths and
391*f0984d40SFabiano Rosas# two-reg-and-scalar insn groups (where size cannot be 0b11). This
392*f0984d40SFabiano Rosas# is slightly awkward for decodetree: we handle it with this
393*f0984d40SFabiano Rosas# non-exclusive group which contains within it two exclusive groups:
394*f0984d40SFabiano Rosas# one for the size=0b11 patterns, and one for the size-not-0b11
395*f0984d40SFabiano Rosas# patterns. This allows us to check that none of the insns within
396*f0984d40SFabiano Rosas# each subgroup accidentally overlap each other. Note that all the
397*f0984d40SFabiano Rosas# trans functions for the size-not-0b11 patterns must check and
398*f0984d40SFabiano Rosas# return false for size==3.
399*f0984d40SFabiano Rosas######################################################################
400*f0984d40SFabiano Rosas{
401*f0984d40SFabiano Rosas  [
402*f0984d40SFabiano Rosas    ##################################################################
403*f0984d40SFabiano Rosas    # Miscellaneous size=0b11 insns
404*f0984d40SFabiano Rosas    ##################################################################
405*f0984d40SFabiano Rosas    VEXT         1111 001 0 1 . 11 .... .... imm:4 . q:1 . 0 .... \
406*f0984d40SFabiano Rosas                 vm=%vm_dp vn=%vn_dp vd=%vd_dp
407*f0984d40SFabiano Rosas
408*f0984d40SFabiano Rosas    VTBL         1111 001 1 1 . 11 .... .... 10 len:2 . op:1 . 0 .... \
409*f0984d40SFabiano Rosas                 vm=%vm_dp vn=%vn_dp vd=%vd_dp
410*f0984d40SFabiano Rosas
411*f0984d40SFabiano Rosas    VDUP_scalar  1111 001 1 1 . 11 index:3 1 .... 11 000 q:1 . 0 .... \
412*f0984d40SFabiano Rosas                 vm=%vm_dp vd=%vd_dp size=0
413*f0984d40SFabiano Rosas    VDUP_scalar  1111 001 1 1 . 11 index:2 10 .... 11 000 q:1 . 0 .... \
414*f0984d40SFabiano Rosas                 vm=%vm_dp vd=%vd_dp size=1
415*f0984d40SFabiano Rosas    VDUP_scalar  1111 001 1 1 . 11 index:1 100 .... 11 000 q:1 . 0 .... \
416*f0984d40SFabiano Rosas                 vm=%vm_dp vd=%vd_dp size=2
417*f0984d40SFabiano Rosas
418*f0984d40SFabiano Rosas    ##################################################################
419*f0984d40SFabiano Rosas    # 2-reg-misc grouping:
420*f0984d40SFabiano Rosas    # 1111 001 11 D 11 size:2 opc1:2 Vd:4 0 opc2:4 q:1 M 0 Vm:4
421*f0984d40SFabiano Rosas    ##################################################################
422*f0984d40SFabiano Rosas
423*f0984d40SFabiano Rosas    &2misc vd vm q size
424*f0984d40SFabiano Rosas
425*f0984d40SFabiano Rosas    @2misc       .... ... .. . .. size:2 .. .... . .... q:1 . . .... \
426*f0984d40SFabiano Rosas                 &2misc vm=%vm_dp vd=%vd_dp
427*f0984d40SFabiano Rosas    @2misc_q0    .... ... .. . .. size:2 .. .... . .... . . . .... \
428*f0984d40SFabiano Rosas                 &2misc vm=%vm_dp vd=%vd_dp q=0
429*f0984d40SFabiano Rosas    @2misc_q1    .... ... .. . .. size:2 .. .... . .... . . . .... \
430*f0984d40SFabiano Rosas                 &2misc vm=%vm_dp vd=%vd_dp q=1
431*f0984d40SFabiano Rosas
432*f0984d40SFabiano Rosas    VREV64       1111 001 11 . 11 .. 00 .... 0 0000 . . 0 .... @2misc
433*f0984d40SFabiano Rosas    VREV32       1111 001 11 . 11 .. 00 .... 0 0001 . . 0 .... @2misc
434*f0984d40SFabiano Rosas    VREV16       1111 001 11 . 11 .. 00 .... 0 0010 . . 0 .... @2misc
435*f0984d40SFabiano Rosas
436*f0984d40SFabiano Rosas    VPADDL_S     1111 001 11 . 11 .. 00 .... 0 0100 . . 0 .... @2misc
437*f0984d40SFabiano Rosas    VPADDL_U     1111 001 11 . 11 .. 00 .... 0 0101 . . 0 .... @2misc
438*f0984d40SFabiano Rosas
439*f0984d40SFabiano Rosas    AESE         1111 001 11 . 11 .. 00 .... 0 0110 0 . 0 .... @2misc_q1
440*f0984d40SFabiano Rosas    AESD         1111 001 11 . 11 .. 00 .... 0 0110 1 . 0 .... @2misc_q1
441*f0984d40SFabiano Rosas    AESMC        1111 001 11 . 11 .. 00 .... 0 0111 0 . 0 .... @2misc_q1
442*f0984d40SFabiano Rosas    AESIMC       1111 001 11 . 11 .. 00 .... 0 0111 1 . 0 .... @2misc_q1
443*f0984d40SFabiano Rosas
444*f0984d40SFabiano Rosas    VCLS         1111 001 11 . 11 .. 00 .... 0 1000 . . 0 .... @2misc
445*f0984d40SFabiano Rosas    VCLZ         1111 001 11 . 11 .. 00 .... 0 1001 . . 0 .... @2misc
446*f0984d40SFabiano Rosas    VCNT         1111 001 11 . 11 .. 00 .... 0 1010 . . 0 .... @2misc
447*f0984d40SFabiano Rosas
448*f0984d40SFabiano Rosas    VMVN         1111 001 11 . 11 .. 00 .... 0 1011 . . 0 .... @2misc
449*f0984d40SFabiano Rosas
450*f0984d40SFabiano Rosas    VPADAL_S     1111 001 11 . 11 .. 00 .... 0 1100 . . 0 .... @2misc
451*f0984d40SFabiano Rosas    VPADAL_U     1111 001 11 . 11 .. 00 .... 0 1101 . . 0 .... @2misc
452*f0984d40SFabiano Rosas
453*f0984d40SFabiano Rosas    VQABS        1111 001 11 . 11 .. 00 .... 0 1110 . . 0 .... @2misc
454*f0984d40SFabiano Rosas    VQNEG        1111 001 11 . 11 .. 00 .... 0 1111 . . 0 .... @2misc
455*f0984d40SFabiano Rosas
456*f0984d40SFabiano Rosas    VCGT0        1111 001 11 . 11 .. 01 .... 0 0000 . . 0 .... @2misc
457*f0984d40SFabiano Rosas    VCGE0        1111 001 11 . 11 .. 01 .... 0 0001 . . 0 .... @2misc
458*f0984d40SFabiano Rosas    VCEQ0        1111 001 11 . 11 .. 01 .... 0 0010 . . 0 .... @2misc
459*f0984d40SFabiano Rosas    VCLE0        1111 001 11 . 11 .. 01 .... 0 0011 . . 0 .... @2misc
460*f0984d40SFabiano Rosas    VCLT0        1111 001 11 . 11 .. 01 .... 0 0100 . . 0 .... @2misc
461*f0984d40SFabiano Rosas
462*f0984d40SFabiano Rosas    SHA1H        1111 001 11 . 11 .. 01 .... 0 0101 1 . 0 .... @2misc_q1
463*f0984d40SFabiano Rosas
464*f0984d40SFabiano Rosas    VABS         1111 001 11 . 11 .. 01 .... 0 0110 . . 0 .... @2misc
465*f0984d40SFabiano Rosas    VNEG         1111 001 11 . 11 .. 01 .... 0 0111 . . 0 .... @2misc
466*f0984d40SFabiano Rosas
467*f0984d40SFabiano Rosas    VCGT0_F      1111 001 11 . 11 .. 01 .... 0 1000 . . 0 .... @2misc
468*f0984d40SFabiano Rosas    VCGE0_F      1111 001 11 . 11 .. 01 .... 0 1001 . . 0 .... @2misc
469*f0984d40SFabiano Rosas    VCEQ0_F      1111 001 11 . 11 .. 01 .... 0 1010 . . 0 .... @2misc
470*f0984d40SFabiano Rosas    VCLE0_F      1111 001 11 . 11 .. 01 .... 0 1011 . . 0 .... @2misc
471*f0984d40SFabiano Rosas    VCLT0_F      1111 001 11 . 11 .. 01 .... 0 1100 . . 0 .... @2misc
472*f0984d40SFabiano Rosas
473*f0984d40SFabiano Rosas    VABS_F       1111 001 11 . 11 .. 01 .... 0 1110 . . 0 .... @2misc
474*f0984d40SFabiano Rosas    VNEG_F       1111 001 11 . 11 .. 01 .... 0 1111 . . 0 .... @2misc
475*f0984d40SFabiano Rosas
476*f0984d40SFabiano Rosas    VSWP         1111 001 11 . 11 .. 10 .... 0 0000 . . 0 .... @2misc
477*f0984d40SFabiano Rosas    VTRN         1111 001 11 . 11 .. 10 .... 0 0001 . . 0 .... @2misc
478*f0984d40SFabiano Rosas    VUZP         1111 001 11 . 11 .. 10 .... 0 0010 . . 0 .... @2misc
479*f0984d40SFabiano Rosas    VZIP         1111 001 11 . 11 .. 10 .... 0 0011 . . 0 .... @2misc
480*f0984d40SFabiano Rosas
481*f0984d40SFabiano Rosas    VMOVN        1111 001 11 . 11 .. 10 .... 0 0100 0 . 0 .... @2misc_q0
482*f0984d40SFabiano Rosas    # VQMOVUN: unsigned result (source is always signed)
483*f0984d40SFabiano Rosas    VQMOVUN      1111 001 11 . 11 .. 10 .... 0 0100 1 . 0 .... @2misc_q0
484*f0984d40SFabiano Rosas    # VQMOVN: signed result, source may be signed (_S) or unsigned (_U)
485*f0984d40SFabiano Rosas    VQMOVN_S     1111 001 11 . 11 .. 10 .... 0 0101 0 . 0 .... @2misc_q0
486*f0984d40SFabiano Rosas    VQMOVN_U     1111 001 11 . 11 .. 10 .... 0 0101 1 . 0 .... @2misc_q0
487*f0984d40SFabiano Rosas
488*f0984d40SFabiano Rosas    VSHLL        1111 001 11 . 11 .. 10 .... 0 0110 0 . 0 .... @2misc_q0
489*f0984d40SFabiano Rosas
490*f0984d40SFabiano Rosas    SHA1SU1      1111 001 11 . 11 .. 10 .... 0 0111 0 . 0 .... @2misc_q1
491*f0984d40SFabiano Rosas    SHA256SU0    1111 001 11 . 11 .. 10 .... 0 0111 1 . 0 .... @2misc_q1
492*f0984d40SFabiano Rosas
493*f0984d40SFabiano Rosas    VRINTN       1111 001 11 . 11 .. 10 .... 0 1000 . . 0 .... @2misc
494*f0984d40SFabiano Rosas    VRINTX       1111 001 11 . 11 .. 10 .... 0 1001 . . 0 .... @2misc
495*f0984d40SFabiano Rosas    VRINTA       1111 001 11 . 11 .. 10 .... 0 1010 . . 0 .... @2misc
496*f0984d40SFabiano Rosas    VRINTZ       1111 001 11 . 11 .. 10 .... 0 1011 . . 0 .... @2misc
497*f0984d40SFabiano Rosas
498*f0984d40SFabiano Rosas    VCVT_F16_F32 1111 001 11 . 11 .. 10 .... 0 1100 0 . 0 .... @2misc_q0
499*f0984d40SFabiano Rosas    VCVT_B16_F32 1111 001 11 . 11 .. 10 .... 0 1100 1 . 0 .... @2misc_q0
500*f0984d40SFabiano Rosas
501*f0984d40SFabiano Rosas    VRINTM       1111 001 11 . 11 .. 10 .... 0 1101 . . 0 .... @2misc
502*f0984d40SFabiano Rosas
503*f0984d40SFabiano Rosas    VCVT_F32_F16 1111 001 11 . 11 .. 10 .... 0 1110 0 . 0 .... @2misc_q0
504*f0984d40SFabiano Rosas
505*f0984d40SFabiano Rosas    VRINTP       1111 001 11 . 11 .. 10 .... 0 1111 . . 0 .... @2misc
506*f0984d40SFabiano Rosas
507*f0984d40SFabiano Rosas    VCVTAS       1111 001 11 . 11 .. 11 .... 0 0000 . . 0 .... @2misc
508*f0984d40SFabiano Rosas    VCVTAU       1111 001 11 . 11 .. 11 .... 0 0001 . . 0 .... @2misc
509*f0984d40SFabiano Rosas    VCVTNS       1111 001 11 . 11 .. 11 .... 0 0010 . . 0 .... @2misc
510*f0984d40SFabiano Rosas    VCVTNU       1111 001 11 . 11 .. 11 .... 0 0011 . . 0 .... @2misc
511*f0984d40SFabiano Rosas    VCVTPS       1111 001 11 . 11 .. 11 .... 0 0100 . . 0 .... @2misc
512*f0984d40SFabiano Rosas    VCVTPU       1111 001 11 . 11 .. 11 .... 0 0101 . . 0 .... @2misc
513*f0984d40SFabiano Rosas    VCVTMS       1111 001 11 . 11 .. 11 .... 0 0110 . . 0 .... @2misc
514*f0984d40SFabiano Rosas    VCVTMU       1111 001 11 . 11 .. 11 .... 0 0111 . . 0 .... @2misc
515*f0984d40SFabiano Rosas
516*f0984d40SFabiano Rosas    VRECPE       1111 001 11 . 11 .. 11 .... 0 1000 . . 0 .... @2misc
517*f0984d40SFabiano Rosas    VRSQRTE      1111 001 11 . 11 .. 11 .... 0 1001 . . 0 .... @2misc
518*f0984d40SFabiano Rosas    VRECPE_F     1111 001 11 . 11 .. 11 .... 0 1010 . . 0 .... @2misc
519*f0984d40SFabiano Rosas    VRSQRTE_F    1111 001 11 . 11 .. 11 .... 0 1011 . . 0 .... @2misc
520*f0984d40SFabiano Rosas    VCVT_FS      1111 001 11 . 11 .. 11 .... 0 1100 . . 0 .... @2misc
521*f0984d40SFabiano Rosas    VCVT_FU      1111 001 11 . 11 .. 11 .... 0 1101 . . 0 .... @2misc
522*f0984d40SFabiano Rosas    VCVT_SF      1111 001 11 . 11 .. 11 .... 0 1110 . . 0 .... @2misc
523*f0984d40SFabiano Rosas    VCVT_UF      1111 001 11 . 11 .. 11 .... 0 1111 . . 0 .... @2misc
524*f0984d40SFabiano Rosas  ]
525*f0984d40SFabiano Rosas
526*f0984d40SFabiano Rosas  # Subgroup for size != 0b11
527*f0984d40SFabiano Rosas  [
528*f0984d40SFabiano Rosas    ##################################################################
529*f0984d40SFabiano Rosas    # 3-reg-different-length grouping:
530*f0984d40SFabiano Rosas    # 1111 001 U 1 D sz!=11 Vn:4 Vd:4 opc:4 N 0 M 0 Vm:4
531*f0984d40SFabiano Rosas    ##################################################################
532*f0984d40SFabiano Rosas
533*f0984d40SFabiano Rosas    &3diff vm vn vd size
534*f0984d40SFabiano Rosas
535*f0984d40SFabiano Rosas    @3diff       .... ... . . . size:2 .... .... .... . . . . .... \
536*f0984d40SFabiano Rosas                 &3diff vm=%vm_dp vn=%vn_dp vd=%vd_dp
537*f0984d40SFabiano Rosas
538*f0984d40SFabiano Rosas    VADDL_S_3d   1111 001 0 1 . .. .... .... 0000 . 0 . 0 .... @3diff
539*f0984d40SFabiano Rosas    VADDL_U_3d   1111 001 1 1 . .. .... .... 0000 . 0 . 0 .... @3diff
540*f0984d40SFabiano Rosas
541*f0984d40SFabiano Rosas    VADDW_S_3d   1111 001 0 1 . .. .... .... 0001 . 0 . 0 .... @3diff
542*f0984d40SFabiano Rosas    VADDW_U_3d   1111 001 1 1 . .. .... .... 0001 . 0 . 0 .... @3diff
543*f0984d40SFabiano Rosas
544*f0984d40SFabiano Rosas    VSUBL_S_3d   1111 001 0 1 . .. .... .... 0010 . 0 . 0 .... @3diff
545*f0984d40SFabiano Rosas    VSUBL_U_3d   1111 001 1 1 . .. .... .... 0010 . 0 . 0 .... @3diff
546*f0984d40SFabiano Rosas
547*f0984d40SFabiano Rosas    VSUBW_S_3d   1111 001 0 1 . .. .... .... 0011 . 0 . 0 .... @3diff
548*f0984d40SFabiano Rosas    VSUBW_U_3d   1111 001 1 1 . .. .... .... 0011 . 0 . 0 .... @3diff
549*f0984d40SFabiano Rosas
550*f0984d40SFabiano Rosas    VADDHN_3d    1111 001 0 1 . .. .... .... 0100 . 0 . 0 .... @3diff
551*f0984d40SFabiano Rosas    VRADDHN_3d   1111 001 1 1 . .. .... .... 0100 . 0 . 0 .... @3diff
552*f0984d40SFabiano Rosas
553*f0984d40SFabiano Rosas    VABAL_S_3d   1111 001 0 1 . .. .... .... 0101 . 0 . 0 .... @3diff
554*f0984d40SFabiano Rosas    VABAL_U_3d   1111 001 1 1 . .. .... .... 0101 . 0 . 0 .... @3diff
555*f0984d40SFabiano Rosas
556*f0984d40SFabiano Rosas    VSUBHN_3d    1111 001 0 1 . .. .... .... 0110 . 0 . 0 .... @3diff
557*f0984d40SFabiano Rosas    VRSUBHN_3d   1111 001 1 1 . .. .... .... 0110 . 0 . 0 .... @3diff
558*f0984d40SFabiano Rosas
559*f0984d40SFabiano Rosas    VABDL_S_3d   1111 001 0 1 . .. .... .... 0111 . 0 . 0 .... @3diff
560*f0984d40SFabiano Rosas    VABDL_U_3d   1111 001 1 1 . .. .... .... 0111 . 0 . 0 .... @3diff
561*f0984d40SFabiano Rosas
562*f0984d40SFabiano Rosas    VMLAL_S_3d   1111 001 0 1 . .. .... .... 1000 . 0 . 0 .... @3diff
563*f0984d40SFabiano Rosas    VMLAL_U_3d   1111 001 1 1 . .. .... .... 1000 . 0 . 0 .... @3diff
564*f0984d40SFabiano Rosas
565*f0984d40SFabiano Rosas    VQDMLAL_3d   1111 001 0 1 . .. .... .... 1001 . 0 . 0 .... @3diff
566*f0984d40SFabiano Rosas
567*f0984d40SFabiano Rosas    VMLSL_S_3d   1111 001 0 1 . .. .... .... 1010 . 0 . 0 .... @3diff
568*f0984d40SFabiano Rosas    VMLSL_U_3d   1111 001 1 1 . .. .... .... 1010 . 0 . 0 .... @3diff
569*f0984d40SFabiano Rosas
570*f0984d40SFabiano Rosas    VQDMLSL_3d   1111 001 0 1 . .. .... .... 1011 . 0 . 0 .... @3diff
571*f0984d40SFabiano Rosas
572*f0984d40SFabiano Rosas    VMULL_S_3d   1111 001 0 1 . .. .... .... 1100 . 0 . 0 .... @3diff
573*f0984d40SFabiano Rosas    VMULL_U_3d   1111 001 1 1 . .. .... .... 1100 . 0 . 0 .... @3diff
574*f0984d40SFabiano Rosas
575*f0984d40SFabiano Rosas    VQDMULL_3d   1111 001 0 1 . .. .... .... 1101 . 0 . 0 .... @3diff
576*f0984d40SFabiano Rosas
577*f0984d40SFabiano Rosas    VMULL_P_3d   1111 001 0 1 . .. .... .... 1110 . 0 . 0 .... @3diff
578*f0984d40SFabiano Rosas
579*f0984d40SFabiano Rosas    ##################################################################
580*f0984d40SFabiano Rosas    # 2-regs-plus-scalar grouping:
581*f0984d40SFabiano Rosas    # 1111 001 Q 1 D sz!=11 Vn:4 Vd:4 opc:4 N 1 M 0 Vm:4
582*f0984d40SFabiano Rosas    ##################################################################
583*f0984d40SFabiano Rosas    &2scalar vm vn vd size q
584*f0984d40SFabiano Rosas
585*f0984d40SFabiano Rosas    @2scalar     .... ... q:1 . . size:2 .... .... .... . . . . .... \
586*f0984d40SFabiano Rosas                 &2scalar vm=%vm_dp vn=%vn_dp vd=%vd_dp
587*f0984d40SFabiano Rosas    # For the 'long' ops the Q bit is part of insn decode
588*f0984d40SFabiano Rosas    @2scalar_q0  .... ... . . . size:2 .... .... .... . . . . .... \
589*f0984d40SFabiano Rosas                 &2scalar vm=%vm_dp vn=%vn_dp vd=%vd_dp q=0
590*f0984d40SFabiano Rosas
591*f0984d40SFabiano Rosas    VMLA_2sc     1111 001 . 1 . .. .... .... 0000 . 1 . 0 .... @2scalar
592*f0984d40SFabiano Rosas    VMLA_F_2sc   1111 001 . 1 . .. .... .... 0001 . 1 . 0 .... @2scalar
593*f0984d40SFabiano Rosas
594*f0984d40SFabiano Rosas    VMLAL_S_2sc  1111 001 0 1 . .. .... .... 0010 . 1 . 0 .... @2scalar_q0
595*f0984d40SFabiano Rosas    VMLAL_U_2sc  1111 001 1 1 . .. .... .... 0010 . 1 . 0 .... @2scalar_q0
596*f0984d40SFabiano Rosas
597*f0984d40SFabiano Rosas    VQDMLAL_2sc  1111 001 0 1 . .. .... .... 0011 . 1 . 0 .... @2scalar_q0
598*f0984d40SFabiano Rosas
599*f0984d40SFabiano Rosas    VMLS_2sc     1111 001 . 1 . .. .... .... 0100 . 1 . 0 .... @2scalar
600*f0984d40SFabiano Rosas    VMLS_F_2sc   1111 001 . 1 . .. .... .... 0101 . 1 . 0 .... @2scalar
601*f0984d40SFabiano Rosas
602*f0984d40SFabiano Rosas    VMLSL_S_2sc  1111 001 0 1 . .. .... .... 0110 . 1 . 0 .... @2scalar_q0
603*f0984d40SFabiano Rosas    VMLSL_U_2sc  1111 001 1 1 . .. .... .... 0110 . 1 . 0 .... @2scalar_q0
604*f0984d40SFabiano Rosas
605*f0984d40SFabiano Rosas    VQDMLSL_2sc  1111 001 0 1 . .. .... .... 0111 . 1 . 0 .... @2scalar_q0
606*f0984d40SFabiano Rosas
607*f0984d40SFabiano Rosas    VMUL_2sc     1111 001 . 1 . .. .... .... 1000 . 1 . 0 .... @2scalar
608*f0984d40SFabiano Rosas    VMUL_F_2sc   1111 001 . 1 . .. .... .... 1001 . 1 . 0 .... @2scalar
609*f0984d40SFabiano Rosas
610*f0984d40SFabiano Rosas    VMULL_S_2sc  1111 001 0 1 . .. .... .... 1010 . 1 . 0 .... @2scalar_q0
611*f0984d40SFabiano Rosas    VMULL_U_2sc  1111 001 1 1 . .. .... .... 1010 . 1 . 0 .... @2scalar_q0
612*f0984d40SFabiano Rosas
613*f0984d40SFabiano Rosas    VQDMULL_2sc  1111 001 0 1 . .. .... .... 1011 . 1 . 0 .... @2scalar_q0
614*f0984d40SFabiano Rosas
615*f0984d40SFabiano Rosas    VQDMULH_2sc  1111 001 . 1 . .. .... .... 1100 . 1 . 0 .... @2scalar
616*f0984d40SFabiano Rosas    VQRDMULH_2sc 1111 001 . 1 . .. .... .... 1101 . 1 . 0 .... @2scalar
617*f0984d40SFabiano Rosas
618*f0984d40SFabiano Rosas    VQRDMLAH_2sc 1111 001 . 1 . .. .... .... 1110 . 1 . 0 .... @2scalar
619*f0984d40SFabiano Rosas    VQRDMLSH_2sc 1111 001 . 1 . .. .... .... 1111 . 1 . 0 .... @2scalar
620*f0984d40SFabiano Rosas  ]
621*f0984d40SFabiano Rosas}
622