xref: /qemu/target/arm/tcg/t32.decode (revision db36e145)
1f0984d40SFabiano Rosas# Thumb2 instructions
2f0984d40SFabiano Rosas#
3f0984d40SFabiano Rosas#  Copyright (c) 2019 Linaro, Ltd
4f0984d40SFabiano Rosas#
5f0984d40SFabiano Rosas# This library is free software; you can redistribute it and/or
6f0984d40SFabiano Rosas# modify it under the terms of the GNU Lesser General Public
7f0984d40SFabiano Rosas# License as published by the Free Software Foundation; either
8f0984d40SFabiano Rosas# version 2.1 of the License, or (at your option) any later version.
9f0984d40SFabiano Rosas#
10f0984d40SFabiano Rosas# This library is distributed in the hope that it will be useful,
11f0984d40SFabiano Rosas# but WITHOUT ANY WARRANTY; without even the implied warranty of
12f0984d40SFabiano Rosas# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13f0984d40SFabiano Rosas# Lesser General Public License for more details.
14f0984d40SFabiano Rosas#
15f0984d40SFabiano Rosas# You should have received a copy of the GNU Lesser General Public
16f0984d40SFabiano Rosas# License along with this library; if not, see <http://www.gnu.org/licenses/>.
17f0984d40SFabiano Rosas
18f0984d40SFabiano Rosas#
19f0984d40SFabiano Rosas# This file is processed by scripts/decodetree.py
20f0984d40SFabiano Rosas#
21f0984d40SFabiano Rosas
22f0984d40SFabiano Rosas&empty           !extern
23f0984d40SFabiano Rosas&s_rrr_shi       !extern s rd rn rm shim shty
24f0984d40SFabiano Rosas&s_rrr_shr       !extern s rn rd rm rs shty
25f0984d40SFabiano Rosas&s_rri_rot       !extern s rn rd imm rot
26f0984d40SFabiano Rosas&s_rrrr          !extern s rd rn rm ra
27f0984d40SFabiano Rosas&rrrr            !extern rd rn rm ra
28f0984d40SFabiano Rosas&rrr_rot         !extern rd rn rm rot
29f0984d40SFabiano Rosas&rrr             !extern rd rn rm
30f0984d40SFabiano Rosas&rr              !extern rd rm
31f0984d40SFabiano Rosas&ri              !extern rd imm
32f0984d40SFabiano Rosas&r               !extern rm
33f0984d40SFabiano Rosas&i               !extern imm
34f0984d40SFabiano Rosas&msr_reg         !extern rn r mask
35f0984d40SFabiano Rosas&mrs_reg         !extern rd r
36f0984d40SFabiano Rosas&msr_bank        !extern rn r sysm
37f0984d40SFabiano Rosas&mrs_bank        !extern rd r sysm
38f0984d40SFabiano Rosas&ldst_rr         !extern p w u rn rt rm shimm shtype
39f0984d40SFabiano Rosas&ldst_ri         !extern p w u rn rt imm
40f0984d40SFabiano Rosas&ldst_block      !extern rn i b u w list
41f0984d40SFabiano Rosas&strex           !extern rn rd rt rt2 imm
42f0984d40SFabiano Rosas&ldrex           !extern rn rt rt2 imm
43f0984d40SFabiano Rosas&bfx             !extern rd rn lsb widthm1
44f0984d40SFabiano Rosas&bfi             !extern rd rn lsb msb
45f0984d40SFabiano Rosas&sat             !extern rd rn satimm imm sh
46f0984d40SFabiano Rosas&pkh             !extern rd rn rm imm tb
47f0984d40SFabiano Rosas&cps             !extern mode imod M A I F
48f0984d40SFabiano Rosas&mcr             !extern cp opc1 crn crm opc2 rt
49f0984d40SFabiano Rosas&mcrr            !extern cp opc1 crm rt rt2
50f0984d40SFabiano Rosas
51f0984d40SFabiano Rosas&mve_shl_ri      rdalo rdahi shim
52f0984d40SFabiano Rosas&mve_shl_rr      rdalo rdahi rm
53f0984d40SFabiano Rosas&mve_sh_ri       rda shim
54f0984d40SFabiano Rosas&mve_sh_rr       rda rm
55f0984d40SFabiano Rosas
56f0984d40SFabiano Rosas# rdahi: bits [3:1] from insn, bit 0 is 1
57f0984d40SFabiano Rosas# rdalo: bits [3:1] from insn, bit 0 is 0
58f0984d40SFabiano Rosas%rdahi_9 9:3 !function=times_2_plus_1
59f0984d40SFabiano Rosas%rdalo_17 17:3 !function=times_2
60f0984d40SFabiano Rosas
61f0984d40SFabiano Rosas# Data-processing (register)
62f0984d40SFabiano Rosas
63f0984d40SFabiano Rosas%imm5_12_6       12:3 6:2
64f0984d40SFabiano Rosas
65f0984d40SFabiano Rosas@s_rrr_shi       ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \
66f0984d40SFabiano Rosas                 &s_rrr_shi shim=%imm5_12_6
67f0984d40SFabiano Rosas@s_rxr_shi       ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \
68f0984d40SFabiano Rosas                 &s_rrr_shi shim=%imm5_12_6 rn=0
69f0984d40SFabiano Rosas@S_xrr_shi       ....... .... .   rn:4 .... .... .. shty:2 rm:4 \
70f0984d40SFabiano Rosas                 &s_rrr_shi shim=%imm5_12_6 s=1 rd=0
71f0984d40SFabiano Rosas
72f0984d40SFabiano Rosas@mve_shl_ri      ....... .... . ... . . ... ... . .. .. .... \
73f0984d40SFabiano Rosas                 &mve_shl_ri shim=%imm5_12_6 rdalo=%rdalo_17 rdahi=%rdahi_9
74f0984d40SFabiano Rosas@mve_shl_rr      ....... .... . ... . rm:4  ... . .. .. .... \
75f0984d40SFabiano Rosas                 &mve_shl_rr rdalo=%rdalo_17 rdahi=%rdahi_9
76f0984d40SFabiano Rosas@mve_sh_ri       ....... .... . rda:4 . ... ... . .. .. .... \
77f0984d40SFabiano Rosas                 &mve_sh_ri shim=%imm5_12_6
78f0984d40SFabiano Rosas@mve_sh_rr       ....... .... . rda:4 rm:4 .... .... .... &mve_sh_rr
79f0984d40SFabiano Rosas
80f0984d40SFabiano Rosas{
81f0984d40SFabiano Rosas  TST_xrri       1110101 0000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
82f0984d40SFabiano Rosas  AND_rrri       1110101 0000 . .... 0 ... .... .... ....     @s_rrr_shi
83f0984d40SFabiano Rosas}
84f0984d40SFabiano RosasBIC_rrri         1110101 0001 . .... 0 ... .... .... ....     @s_rrr_shi
85f0984d40SFabiano Rosas{
86f0984d40SFabiano Rosas  # The v8.1M MVE shift insns overlap in encoding with MOVS/ORRS
87f0984d40SFabiano Rosas  # and are distinguished by having Rm==13 or 15. Those are UNPREDICTABLE
88f0984d40SFabiano Rosas  # cases for MOVS/ORRS. We decode the MVE cases first, ensuring that
89f0984d40SFabiano Rosas  # they explicitly call unallocated_encoding() for cases that must UNDEF
90f0984d40SFabiano Rosas  # (eg "using a new shift insn on a v8.1M CPU without MVE"), and letting
91f0984d40SFabiano Rosas  # the rest fall through (where ORR_rrri and MOV_rxri will end up
92f0984d40SFabiano Rosas  # handling them as r13 and r15 accesses with the same semantics as A32).
93f0984d40SFabiano Rosas  [
94f0984d40SFabiano Rosas    {
95f0984d40SFabiano Rosas      UQSHL_ri   1110101 0010 1 ....  0 ...  1111 .. 00 1111  @mve_sh_ri
96f0984d40SFabiano Rosas      LSLL_ri    1110101 0010 1 ... 0 0 ... ... 1 .. 00 1111  @mve_shl_ri
97f0984d40SFabiano Rosas      UQSHLL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 00 1111  @mve_shl_ri
98f0984d40SFabiano Rosas    }
99f0984d40SFabiano Rosas
100f0984d40SFabiano Rosas    {
101f0984d40SFabiano Rosas      URSHR_ri   1110101 0010 1 ....  0 ...  1111 .. 01 1111  @mve_sh_ri
102f0984d40SFabiano Rosas      LSRL_ri    1110101 0010 1 ... 0 0 ... ... 1 .. 01 1111  @mve_shl_ri
103f0984d40SFabiano Rosas      URSHRL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 01 1111  @mve_shl_ri
104f0984d40SFabiano Rosas    }
105f0984d40SFabiano Rosas
106f0984d40SFabiano Rosas    {
107f0984d40SFabiano Rosas      SRSHR_ri   1110101 0010 1 ....  0 ...  1111 .. 10 1111  @mve_sh_ri
108f0984d40SFabiano Rosas      ASRL_ri    1110101 0010 1 ... 0 0 ... ... 1 .. 10 1111  @mve_shl_ri
109f0984d40SFabiano Rosas      SRSHRL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 10 1111  @mve_shl_ri
110f0984d40SFabiano Rosas    }
111f0984d40SFabiano Rosas
112f0984d40SFabiano Rosas    {
113f0984d40SFabiano Rosas      SQSHL_ri   1110101 0010 1 ....  0 ...  1111 .. 11 1111  @mve_sh_ri
114f0984d40SFabiano Rosas      SQSHLL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 11 1111  @mve_shl_ri
115f0984d40SFabiano Rosas    }
116f0984d40SFabiano Rosas
117f0984d40SFabiano Rosas    {
118f0984d40SFabiano Rosas      UQRSHL_rr    1110101 0010 1 ....  ....  1111 0000 1101  @mve_sh_rr
119f0984d40SFabiano Rosas      LSLL_rr      1110101 0010 1 ... 0 .... ... 1 0000 1101  @mve_shl_rr
120f0984d40SFabiano Rosas      UQRSHLL64_rr 1110101 0010 1 ... 1 .... ... 1 0000 1101  @mve_shl_rr
121f0984d40SFabiano Rosas    }
122f0984d40SFabiano Rosas
123f0984d40SFabiano Rosas    {
124f0984d40SFabiano Rosas      SQRSHR_rr    1110101 0010 1 ....  ....  1111 0010 1101  @mve_sh_rr
125f0984d40SFabiano Rosas      ASRL_rr      1110101 0010 1 ... 0 .... ... 1 0010 1101  @mve_shl_rr
126f0984d40SFabiano Rosas      SQRSHRL64_rr 1110101 0010 1 ... 1 .... ... 1 0010 1101  @mve_shl_rr
127f0984d40SFabiano Rosas    }
128f0984d40SFabiano Rosas
129f0984d40SFabiano Rosas    UQRSHLL48_rr 1110101 0010 1 ... 1 ....  ... 1  1000 1101  @mve_shl_rr
130f0984d40SFabiano Rosas    SQRSHRL48_rr 1110101 0010 1 ... 1 ....  ... 1  1010 1101  @mve_shl_rr
131f0984d40SFabiano Rosas  ]
132f0984d40SFabiano Rosas
133f0984d40SFabiano Rosas  MOV_rxri       1110101 0010 . 1111 0 ... .... .... ....     @s_rxr_shi
134f0984d40SFabiano Rosas  ORR_rrri       1110101 0010 . .... 0 ... .... .... ....     @s_rrr_shi
135f0984d40SFabiano Rosas
136f0984d40SFabiano Rosas  # v8.1M CSEL and friends
137f0984d40SFabiano Rosas  CSEL           1110101 0010 1 rn:4 10 op:2 rd:4 fcond:4 rm:4
138f0984d40SFabiano Rosas}
139f0984d40SFabiano Rosas{
140f0984d40SFabiano Rosas  MVN_rxri       1110101 0011 . 1111 0 ... .... .... ....     @s_rxr_shi
141f0984d40SFabiano Rosas  ORN_rrri       1110101 0011 . .... 0 ... .... .... ....     @s_rrr_shi
142f0984d40SFabiano Rosas}
143f0984d40SFabiano Rosas{
144f0984d40SFabiano Rosas  TEQ_xrri       1110101 0100 1 .... 0 ... 1111 .... ....     @S_xrr_shi
145f0984d40SFabiano Rosas  EOR_rrri       1110101 0100 . .... 0 ... .... .... ....     @s_rrr_shi
146f0984d40SFabiano Rosas}
147f0984d40SFabiano RosasPKH              1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
148f0984d40SFabiano Rosas                 &pkh imm=%imm5_12_6
149f0984d40SFabiano Rosas{
150f0984d40SFabiano Rosas  CMN_xrri       1110101 1000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
151f0984d40SFabiano Rosas  ADD_rrri       1110101 1000 . .... 0 ... .... .... ....     @s_rrr_shi
152f0984d40SFabiano Rosas}
153f0984d40SFabiano RosasADC_rrri         1110101 1010 . .... 0 ... .... .... ....     @s_rrr_shi
154f0984d40SFabiano RosasSBC_rrri         1110101 1011 . .... 0 ... .... .... ....     @s_rrr_shi
155f0984d40SFabiano Rosas{
156f0984d40SFabiano Rosas  CMP_xrri       1110101 1101 1 .... 0 ... 1111 .... ....     @S_xrr_shi
157f0984d40SFabiano Rosas  SUB_rrri       1110101 1101 . .... 0 ... .... .... ....     @s_rrr_shi
158f0984d40SFabiano Rosas}
159f0984d40SFabiano RosasRSB_rrri         1110101 1110 . .... 0 ... .... .... ....     @s_rrr_shi
160f0984d40SFabiano Rosas
161f0984d40SFabiano Rosas# Data-processing (register-shifted register)
162f0984d40SFabiano Rosas
163f0984d40SFabiano RosasMOV_rxrr         1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
164f0984d40SFabiano Rosas                 &s_rrr_shr rn=0
165f0984d40SFabiano Rosas
166f0984d40SFabiano Rosas# Data-processing (immediate)
167f0984d40SFabiano Rosas
168f0984d40SFabiano Rosas%t32extrot       26:1 12:3 0:8  !function=t32_expandimm_rot
169f0984d40SFabiano Rosas%t32extimm       26:1 12:3 0:8  !function=t32_expandimm_imm
170f0984d40SFabiano Rosas
171f0984d40SFabiano Rosas@s_rri_rot       ....... .... s:1 rn:4 . ... rd:4 ........ \
172f0984d40SFabiano Rosas                 &s_rri_rot imm=%t32extimm rot=%t32extrot
173f0984d40SFabiano Rosas@s_rxi_rot       ....... .... s:1 .... . ... rd:4 ........ \
174f0984d40SFabiano Rosas                 &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0
175f0984d40SFabiano Rosas@S_xri_rot       ....... .... .   rn:4 . ... .... ........ \
176f0984d40SFabiano Rosas                 &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0
177f0984d40SFabiano Rosas
178f0984d40SFabiano Rosas{
179f0984d40SFabiano Rosas  TST_xri        1111 0.0 0000 1 .... 0 ... 1111 ........     @S_xri_rot
180f0984d40SFabiano Rosas  AND_rri        1111 0.0 0000 . .... 0 ... .... ........     @s_rri_rot
181f0984d40SFabiano Rosas}
182f0984d40SFabiano RosasBIC_rri          1111 0.0 0001 . .... 0 ... .... ........     @s_rri_rot
183f0984d40SFabiano Rosas{
184f0984d40SFabiano Rosas  MOV_rxi        1111 0.0 0010 . 1111 0 ... .... ........     @s_rxi_rot
185f0984d40SFabiano Rosas  ORR_rri        1111 0.0 0010 . .... 0 ... .... ........     @s_rri_rot
186f0984d40SFabiano Rosas}
187f0984d40SFabiano Rosas{
188f0984d40SFabiano Rosas  MVN_rxi        1111 0.0 0011 . 1111 0 ... .... ........     @s_rxi_rot
189f0984d40SFabiano Rosas  ORN_rri        1111 0.0 0011 . .... 0 ... .... ........     @s_rri_rot
190f0984d40SFabiano Rosas}
191f0984d40SFabiano Rosas{
192f0984d40SFabiano Rosas  TEQ_xri        1111 0.0 0100 1 .... 0 ... 1111 ........     @S_xri_rot
193f0984d40SFabiano Rosas  EOR_rri        1111 0.0 0100 . .... 0 ... .... ........     @s_rri_rot
194f0984d40SFabiano Rosas}
195f0984d40SFabiano Rosas{
196f0984d40SFabiano Rosas  CMN_xri        1111 0.0 1000 1 .... 0 ... 1111 ........     @S_xri_rot
197f0984d40SFabiano Rosas  ADD_rri        1111 0.0 1000 . .... 0 ... .... ........     @s_rri_rot
198f0984d40SFabiano Rosas}
199f0984d40SFabiano RosasADC_rri          1111 0.0 1010 . .... 0 ... .... ........     @s_rri_rot
200f0984d40SFabiano RosasSBC_rri          1111 0.0 1011 . .... 0 ... .... ........     @s_rri_rot
201f0984d40SFabiano Rosas{
202f0984d40SFabiano Rosas  CMP_xri        1111 0.0 1101 1 .... 0 ... 1111 ........     @S_xri_rot
203f0984d40SFabiano Rosas  SUB_rri        1111 0.0 1101 . .... 0 ... .... ........     @s_rri_rot
204f0984d40SFabiano Rosas}
205f0984d40SFabiano RosasRSB_rri          1111 0.0 1110 . .... 0 ... .... ........     @s_rri_rot
206f0984d40SFabiano Rosas
207f0984d40SFabiano Rosas# Data processing (plain binary immediate)
208f0984d40SFabiano Rosas
209f0984d40SFabiano Rosas%imm12_26_12_0   26:1 12:3 0:8
210f0984d40SFabiano Rosas%neg12_26_12_0   26:1 12:3 0:8 !function=negate
211f0984d40SFabiano Rosas@s0_rri_12       .... ... .... . rn:4 . ... rd:4 ........ \
212f0984d40SFabiano Rosas                 &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
213f0984d40SFabiano Rosas
214f0984d40SFabiano Rosas{
215f0984d40SFabiano Rosas  ADR            1111 0.1 0000 0 1111 0 ... rd:4 ........ \
216f0984d40SFabiano Rosas                 &ri imm=%imm12_26_12_0
217f0984d40SFabiano Rosas  ADD_rri        1111 0.1 0000 0 .... 0 ... .... ........     @s0_rri_12
218f0984d40SFabiano Rosas}
219f0984d40SFabiano Rosas{
220f0984d40SFabiano Rosas  ADR            1111 0.1 0101 0 1111 0 ... rd:4 ........ \
221f0984d40SFabiano Rosas                 &ri imm=%neg12_26_12_0
222f0984d40SFabiano Rosas  SUB_rri        1111 0.1 0101 0 .... 0 ... .... ........     @s0_rri_12
223f0984d40SFabiano Rosas}
224f0984d40SFabiano Rosas
225f0984d40SFabiano Rosas# Move Wide
226f0984d40SFabiano Rosas
227f0984d40SFabiano Rosas%imm16_26_16_12_0 16:4 26:1 12:3 0:8
228f0984d40SFabiano Rosas@mov16           .... .... .... .... .... rd:4 .... .... \
229f0984d40SFabiano Rosas                 &ri imm=%imm16_26_16_12_0
230f0984d40SFabiano Rosas
231f0984d40SFabiano RosasMOVW             1111 0.10 0100 .... 0 ... .... ........      @mov16
232f0984d40SFabiano RosasMOVT             1111 0.10 1100 .... 0 ... .... ........      @mov16
233f0984d40SFabiano Rosas
234f0984d40SFabiano Rosas# Saturate, bitfield
235f0984d40SFabiano Rosas
236f0984d40SFabiano Rosas@sat             .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
237f0984d40SFabiano Rosas                 &sat imm=%imm5_12_6
238f0984d40SFabiano Rosas@sat16           .... .... .. .    . rn:4 . ... rd:4 .. . satimm:5 \
239f0984d40SFabiano Rosas                 &sat sh=0 imm=0
240f0984d40SFabiano Rosas
241f0984d40SFabiano Rosas{
242f0984d40SFabiano Rosas  SSAT16         1111 0011 001 0 .... 0 000 .... 00 0 .....   @sat16
243f0984d40SFabiano Rosas  SSAT           1111 0011 00. 0 .... 0 ... .... .. 0 .....   @sat
244f0984d40SFabiano Rosas}
245f0984d40SFabiano Rosas{
246f0984d40SFabiano Rosas  USAT16         1111 0011 101 0 .... 0 000 .... 00 0 .....   @sat16
247f0984d40SFabiano Rosas  USAT           1111 0011 10. 0 .... 0 ... .... .. 0 .....   @sat
248f0984d40SFabiano Rosas}
249f0984d40SFabiano Rosas
250f0984d40SFabiano Rosas@bfx             .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
251f0984d40SFabiano Rosas                 &bfx lsb=%imm5_12_6
252f0984d40SFabiano Rosas@bfi             .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
253f0984d40SFabiano Rosas                 &bfi lsb=%imm5_12_6
254f0984d40SFabiano Rosas
255f0984d40SFabiano RosasSBFX             1111 0011 010 0 .... 0 ... .... ..0.....     @bfx
256f0984d40SFabiano RosasUBFX             1111 0011 110 0 .... 0 ... .... ..0.....     @bfx
257f0984d40SFabiano Rosas
258f0984d40SFabiano Rosas# bfc is bfi w/ rn=15
259f0984d40SFabiano RosasBFCI             1111 0011 011 0 .... 0 ... .... ..0.....     @bfi
260f0984d40SFabiano Rosas
261f0984d40SFabiano Rosas# Multiply and multiply accumulate
262f0984d40SFabiano Rosas
263f0984d40SFabiano Rosas@s0_rnadm        .... .... .... rn:4 ra:4 rd:4 .... rm:4      &s_rrrr s=0
264f0984d40SFabiano Rosas@s0_rn0dm        .... .... .... rn:4 .... rd:4 .... rm:4      &s_rrrr ra=0 s=0
265f0984d40SFabiano Rosas@rnadm           .... .... .... rn:4 ra:4 rd:4 .... rm:4      &rrrr
266f0984d40SFabiano Rosas@rn0dm           .... .... .... rn:4 .... rd:4 .... rm:4      &rrrr ra=0
267f0984d40SFabiano Rosas@rndm            .... .... .... rn:4 .... rd:4 .... rm:4      &rrr
268f0984d40SFabiano Rosas@rdm             .... .... .... .... .... rd:4 .... rm:4      &rr
269f0984d40SFabiano Rosas
270f0984d40SFabiano Rosas{
271f0984d40SFabiano Rosas  MUL            1111 1011 0000 .... 1111 .... 0000 ....      @s0_rn0dm
272f0984d40SFabiano Rosas  MLA            1111 1011 0000 .... .... .... 0000 ....      @s0_rnadm
273f0984d40SFabiano Rosas}
274f0984d40SFabiano RosasMLS              1111 1011 0000 .... .... .... 0001 ....      @rnadm
275f0984d40SFabiano RosasSMULL            1111 1011 1000 .... .... .... 0000 ....      @s0_rnadm
276f0984d40SFabiano RosasUMULL            1111 1011 1010 .... .... .... 0000 ....      @s0_rnadm
277f0984d40SFabiano RosasSMLAL            1111 1011 1100 .... .... .... 0000 ....      @s0_rnadm
278f0984d40SFabiano RosasUMLAL            1111 1011 1110 .... .... .... 0000 ....      @s0_rnadm
279f0984d40SFabiano RosasUMAAL            1111 1011 1110 .... .... .... 0110 ....      @rnadm
280f0984d40SFabiano Rosas{
281f0984d40SFabiano Rosas  SMULWB         1111 1011 0011 .... 1111 .... 0000 ....      @rn0dm
282f0984d40SFabiano Rosas  SMLAWB         1111 1011 0011 .... .... .... 0000 ....      @rnadm
283f0984d40SFabiano Rosas}
284f0984d40SFabiano Rosas{
285f0984d40SFabiano Rosas  SMULWT         1111 1011 0011 .... 1111 .... 0001 ....      @rn0dm
286f0984d40SFabiano Rosas  SMLAWT         1111 1011 0011 .... .... .... 0001 ....      @rnadm
287f0984d40SFabiano Rosas}
288f0984d40SFabiano Rosas{
289f0984d40SFabiano Rosas  SMULBB         1111 1011 0001 .... 1111 .... 0000 ....      @rn0dm
290f0984d40SFabiano Rosas  SMLABB         1111 1011 0001 .... .... .... 0000 ....      @rnadm
291f0984d40SFabiano Rosas}
292f0984d40SFabiano Rosas{
293f0984d40SFabiano Rosas  SMULBT         1111 1011 0001 .... 1111 .... 0001 ....      @rn0dm
294f0984d40SFabiano Rosas  SMLABT         1111 1011 0001 .... .... .... 0001 ....      @rnadm
295f0984d40SFabiano Rosas}
296f0984d40SFabiano Rosas{
297f0984d40SFabiano Rosas  SMULTB         1111 1011 0001 .... 1111 .... 0010 ....      @rn0dm
298f0984d40SFabiano Rosas  SMLATB         1111 1011 0001 .... .... .... 0010 ....      @rnadm
299f0984d40SFabiano Rosas}
300f0984d40SFabiano Rosas{
301f0984d40SFabiano Rosas  SMULTT         1111 1011 0001 .... 1111 .... 0011 ....      @rn0dm
302f0984d40SFabiano Rosas  SMLATT         1111 1011 0001 .... .... .... 0011 ....      @rnadm
303f0984d40SFabiano Rosas}
304f0984d40SFabiano RosasSMLALBB          1111 1011 1100 .... .... .... 1000 ....      @rnadm
305f0984d40SFabiano RosasSMLALBT          1111 1011 1100 .... .... .... 1001 ....      @rnadm
306f0984d40SFabiano RosasSMLALTB          1111 1011 1100 .... .... .... 1010 ....      @rnadm
307f0984d40SFabiano RosasSMLALTT          1111 1011 1100 .... .... .... 1011 ....      @rnadm
308f0984d40SFabiano Rosas
309f0984d40SFabiano Rosas# usad8 is usada8 w/ ra=15
310f0984d40SFabiano RosasUSADA8           1111 1011 0111 .... .... .... 0000 ....      @rnadm
311f0984d40SFabiano Rosas
312f0984d40SFabiano RosasSMLAD            1111 1011 0010 .... .... .... 0000 ....      @rnadm
313f0984d40SFabiano RosasSMLADX           1111 1011 0010 .... .... .... 0001 ....      @rnadm
314f0984d40SFabiano RosasSMLSD            1111 1011 0100 .... .... .... 0000 ....      @rnadm
315f0984d40SFabiano RosasSMLSDX           1111 1011 0100 .... .... .... 0001 ....      @rnadm
316f0984d40SFabiano Rosas
317f0984d40SFabiano RosasSMLALD           1111 1011 1100 .... .... .... 1100 ....      @rnadm
318f0984d40SFabiano RosasSMLALDX          1111 1011 1100 .... .... .... 1101 ....      @rnadm
319f0984d40SFabiano RosasSMLSLD           1111 1011 1101 .... .... .... 1100 ....      @rnadm
320f0984d40SFabiano RosasSMLSLDX          1111 1011 1101 .... .... .... 1101 ....      @rnadm
321f0984d40SFabiano Rosas
322f0984d40SFabiano RosasSMMLA            1111 1011 0101 .... .... .... 0000 ....      @rnadm
323f0984d40SFabiano RosasSMMLAR           1111 1011 0101 .... .... .... 0001 ....      @rnadm
324f0984d40SFabiano RosasSMMLS            1111 1011 0110 .... .... .... 0000 ....      @rnadm
325f0984d40SFabiano RosasSMMLSR           1111 1011 0110 .... .... .... 0001 ....      @rnadm
326f0984d40SFabiano Rosas
327f0984d40SFabiano RosasSDIV             1111 1011 1001 .... 1111 .... 1111 ....      @rndm
328f0984d40SFabiano RosasUDIV             1111 1011 1011 .... 1111 .... 1111 ....      @rndm
329f0984d40SFabiano Rosas
330f0984d40SFabiano Rosas# Data-processing (two source registers)
331f0984d40SFabiano Rosas
332f0984d40SFabiano RosasQADD             1111 1010 1000 .... 1111 .... 1000 ....      @rndm
333f0984d40SFabiano RosasQSUB             1111 1010 1000 .... 1111 .... 1010 ....      @rndm
334f0984d40SFabiano RosasQDADD            1111 1010 1000 .... 1111 .... 1001 ....      @rndm
335f0984d40SFabiano RosasQDSUB            1111 1010 1000 .... 1111 .... 1011 ....      @rndm
336f0984d40SFabiano Rosas
337f0984d40SFabiano RosasCRC32B           1111 1010 1100 .... 1111 .... 1000 ....      @rndm
338f0984d40SFabiano RosasCRC32H           1111 1010 1100 .... 1111 .... 1001 ....      @rndm
339f0984d40SFabiano RosasCRC32W           1111 1010 1100 .... 1111 .... 1010 ....      @rndm
340f0984d40SFabiano RosasCRC32CB          1111 1010 1101 .... 1111 .... 1000 ....      @rndm
341f0984d40SFabiano RosasCRC32CH          1111 1010 1101 .... 1111 .... 1001 ....      @rndm
342f0984d40SFabiano RosasCRC32CW          1111 1010 1101 .... 1111 .... 1010 ....      @rndm
343f0984d40SFabiano Rosas
344f0984d40SFabiano RosasSEL              1111 1010 1010 .... 1111 .... 1000 ....      @rndm
345f0984d40SFabiano Rosas
346f0984d40SFabiano Rosas# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
347f0984d40SFabiano RosasREV              1111 1010 1001 ---- 1111 .... 1000 ....      @rdm
348f0984d40SFabiano RosasREV16            1111 1010 1001 ---- 1111 .... 1001 ....      @rdm
349f0984d40SFabiano RosasRBIT             1111 1010 1001 ---- 1111 .... 1010 ....      @rdm
350f0984d40SFabiano RosasREVSH            1111 1010 1001 ---- 1111 .... 1011 ....      @rdm
351f0984d40SFabiano RosasCLZ              1111 1010 1011 ---- 1111 .... 1000 ....      @rdm
352f0984d40SFabiano Rosas
353f0984d40SFabiano Rosas# Branches and miscellaneous control
354f0984d40SFabiano Rosas
355f0984d40SFabiano Rosas%msr_sysm        4:1 8:4
356f0984d40SFabiano Rosas%mrs_sysm        4:1 16:4
357f0984d40SFabiano Rosas%imm16_16_0      16:4 0:12
358f0984d40SFabiano Rosas%imm21           26:s1 11:1 13:1 16:6 0:11 !function=times_2
359f0984d40SFabiano Rosas&ci              cond imm
360f0984d40SFabiano Rosas
361f0984d40SFabiano Rosas{
362f0984d40SFabiano Rosas  # Group insn[25:23] = 111, which is cond=111x for the branch below,
363f0984d40SFabiano Rosas  # or unconditional, which would be illegal for the branch.
364f0984d40SFabiano Rosas  [
365f0984d40SFabiano Rosas    # Hints, and CPS
366f0984d40SFabiano Rosas    {
367f0984d40SFabiano Rosas      [
368f0984d40SFabiano Rosas        YIELD    1111 0011 1010 1111 1000 0000 0000 0001
369f0984d40SFabiano Rosas        WFE      1111 0011 1010 1111 1000 0000 0000 0010
370f0984d40SFabiano Rosas        WFI      1111 0011 1010 1111 1000 0000 0000 0011
371f0984d40SFabiano Rosas
372f0984d40SFabiano Rosas        # TODO: Implement SEV, SEVL; may help SMP performance.
373f0984d40SFabiano Rosas        # SEV    1111 0011 1010 1111 1000 0000 0000 0100
374f0984d40SFabiano Rosas        # SEVL   1111 0011 1010 1111 1000 0000 0000 0101
375f0984d40SFabiano Rosas
376f0984d40SFabiano Rosas        ESB      1111 0011 1010 1111 1000 0000 0001 0000
377f0984d40SFabiano Rosas      ]
378f0984d40SFabiano Rosas
379f0984d40SFabiano Rosas      # The canonical nop ends in 0000 0000, but the whole rest
380f0984d40SFabiano Rosas      # of the space is "reserved hint, behaves as nop".
381f0984d40SFabiano Rosas      NOP        1111 0011 1010 1111 1000 0000 ---- ----
382f0984d40SFabiano Rosas
383f0984d40SFabiano Rosas      # If imod == '00' && M == '0' then SEE "Hint instructions", above.
384f0984d40SFabiano Rosas      CPS        1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \
385f0984d40SFabiano Rosas                 &cps
386f0984d40SFabiano Rosas    }
387f0984d40SFabiano Rosas
388f0984d40SFabiano Rosas    # Miscellaneous control
389f0984d40SFabiano Rosas    CLREX        1111 0011 1011 1111 1000 1111 0010 1111
390f0984d40SFabiano Rosas    DSB          1111 0011 1011 1111 1000 1111 0100 ----
391f0984d40SFabiano Rosas    DMB          1111 0011 1011 1111 1000 1111 0101 ----
392f0984d40SFabiano Rosas    ISB          1111 0011 1011 1111 1000 1111 0110 ----
393f0984d40SFabiano Rosas    SB           1111 0011 1011 1111 1000 1111 0111 0000
394f0984d40SFabiano Rosas
395f0984d40SFabiano Rosas    # Note that the v7m insn overlaps both the normal and banked insn.
396f0984d40SFabiano Rosas    {
397f0984d40SFabiano Rosas      MRS_bank   1111 0011 111 r:1 .... 1000 rd:4   001. 0000  \
398f0984d40SFabiano Rosas                 &mrs_bank sysm=%mrs_sysm
399f0984d40SFabiano Rosas      MRS_reg    1111 0011 111 r:1 1111 1000 rd:4   0000 0000  &mrs_reg
400f0984d40SFabiano Rosas      MRS_v7m    1111 0011 111 0   1111 1000 rd:4   sysm:8
401f0984d40SFabiano Rosas    }
402f0984d40SFabiano Rosas    {
403f0984d40SFabiano Rosas      MSR_bank   1111 0011 100 r:1 rn:4 1000 ....   001. 0000  \
404f0984d40SFabiano Rosas                 &msr_bank sysm=%msr_sysm
405f0984d40SFabiano Rosas      MSR_reg    1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000  &msr_reg
406f0984d40SFabiano Rosas      MSR_v7m    1111 0011 100 0   rn:4 1000 mask:2 00 sysm:8
407f0984d40SFabiano Rosas    }
408f0984d40SFabiano Rosas    BXJ          1111 0011 1100 rm:4 1000 1111 0000 0000      &r
409f0984d40SFabiano Rosas    {
410f0984d40SFabiano Rosas      # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for
411f0984d40SFabiano Rosas      # every other encoding of SUBS.  With v7VE, IMM=0 is redefined as ERET.
412f0984d40SFabiano Rosas      # The distinction between the two only matters for Hyp mode.
413f0984d40SFabiano Rosas      ERET       1111 0011 1101 1110 1000 1111 0000 0000
414f0984d40SFabiano Rosas      SUB_rri    1111 0011 1101 1110 1000 1111 imm:8 \
415f0984d40SFabiano Rosas                 &s_rri_rot rot=0 s=1 rd=15 rn=14
416f0984d40SFabiano Rosas    }
417f0984d40SFabiano Rosas    SMC          1111 0111 1111 imm:4 1000 0000 0000 0000     &i
418f0984d40SFabiano Rosas    HVC          1111 0111 1110 ....  1000 .... .... ....     \
419f0984d40SFabiano Rosas                 &i imm=%imm16_16_0
420f0984d40SFabiano Rosas    UDF          1111 0111 1111 ----  1010 ---- ---- ----
421f0984d40SFabiano Rosas  ]
422f0984d40SFabiano Rosas  B_cond_thumb   1111 0. cond:4 ...... 10.0 ............      &ci imm=%imm21
423f0984d40SFabiano Rosas}
424f0984d40SFabiano Rosas
425f0984d40SFabiano Rosas# Load/store (register, immediate, literal)
426f0984d40SFabiano Rosas
427f0984d40SFabiano Rosas@ldst_rr         .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \
428f0984d40SFabiano Rosas                 &ldst_rr p=1 w=0 u=1 shtype=0
429f0984d40SFabiano Rosas@ldst_ri_idx     .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \
430f0984d40SFabiano Rosas                 &ldst_ri w=1
431f0984d40SFabiano Rosas@ldst_ri_neg     .... .... .... rn:4 rt:4 .... imm:8 \
432f0984d40SFabiano Rosas                 &ldst_ri p=1 w=0 u=0
433f0984d40SFabiano Rosas@ldst_ri_unp     .... .... .... rn:4 rt:4 .... imm:8 \
434f0984d40SFabiano Rosas                 &ldst_ri p=1 w=0 u=1
435f0984d40SFabiano Rosas@ldst_ri_pos     .... .... .... rn:4 rt:4 imm:12 \
436f0984d40SFabiano Rosas                 &ldst_ri p=1 w=0 u=1
437f0984d40SFabiano Rosas@ldst_ri_lit     .... .... u:1 ... .... rt:4 imm:12 \
438f0984d40SFabiano Rosas                 &ldst_ri p=1 w=0 rn=15
439f0984d40SFabiano Rosas
440f0984d40SFabiano RosasSTRB_rr          1111 1000 0000 .... .... 000000 .. ....      @ldst_rr
441f0984d40SFabiano RosasSTRB_ri          1111 1000 0000 .... .... 1..1 ........       @ldst_ri_idx
442f0984d40SFabiano RosasSTRB_ri          1111 1000 0000 .... .... 1100 ........       @ldst_ri_neg
443f0984d40SFabiano RosasSTRBT_ri         1111 1000 0000 .... .... 1110 ........       @ldst_ri_unp
444f0984d40SFabiano RosasSTRB_ri          1111 1000 1000 .... .... ............        @ldst_ri_pos
445f0984d40SFabiano Rosas
446f0984d40SFabiano RosasSTRH_rr          1111 1000 0010 .... .... 000000 .. ....      @ldst_rr
447f0984d40SFabiano RosasSTRH_ri          1111 1000 0010 .... .... 1..1 ........       @ldst_ri_idx
448f0984d40SFabiano RosasSTRH_ri          1111 1000 0010 .... .... 1100 ........       @ldst_ri_neg
449f0984d40SFabiano RosasSTRHT_ri         1111 1000 0010 .... .... 1110 ........       @ldst_ri_unp
450f0984d40SFabiano RosasSTRH_ri          1111 1000 1010 .... .... ............        @ldst_ri_pos
451f0984d40SFabiano Rosas
452f0984d40SFabiano RosasSTR_rr           1111 1000 0100 .... .... 000000 .. ....      @ldst_rr
453f0984d40SFabiano RosasSTR_ri           1111 1000 0100 .... .... 1..1 ........       @ldst_ri_idx
454f0984d40SFabiano RosasSTR_ri           1111 1000 0100 .... .... 1100 ........       @ldst_ri_neg
455f0984d40SFabiano RosasSTRT_ri          1111 1000 0100 .... .... 1110 ........       @ldst_ri_unp
456f0984d40SFabiano RosasSTR_ri           1111 1000 1100 .... .... ............        @ldst_ri_pos
457f0984d40SFabiano Rosas
458f0984d40SFabiano Rosas# Note that Load, unsigned (literal) overlaps all other load encodings.
459f0984d40SFabiano Rosas{
460f0984d40SFabiano Rosas  {
461*db36e145SRichard Henderson    PLD          1111 1000 -001 1111 1111 ------------        # (literal)
462f0984d40SFabiano Rosas    LDRB_ri      1111 1000 .001 1111 .... ............        @ldst_ri_lit
463f0984d40SFabiano Rosas  }
464f0984d40SFabiano Rosas  {
465*db36e145SRichard Henderson    PLD          1111 1000 1001 ---- 1111 ------------        # (immediate T1)
466f0984d40SFabiano Rosas    LDRB_ri      1111 1000 1001 .... .... ............        @ldst_ri_pos
467f0984d40SFabiano Rosas  }
468f0984d40SFabiano Rosas  LDRB_ri        1111 1000 0001 .... .... 1..1 ........       @ldst_ri_idx
469f0984d40SFabiano Rosas  {
470*db36e145SRichard Henderson    PLD          1111 1000 0001 ---- 1111 1100 --------       # (immediate T2)
471f0984d40SFabiano Rosas    LDRB_ri      1111 1000 0001 .... .... 1100 ........       @ldst_ri_neg
472f0984d40SFabiano Rosas  }
473f0984d40SFabiano Rosas  LDRBT_ri       1111 1000 0001 .... .... 1110 ........       @ldst_ri_unp
474f0984d40SFabiano Rosas  {
475*db36e145SRichard Henderson    PLD          1111 1000 0001 ---- 1111 000000 -- ----      # (register)
476f0984d40SFabiano Rosas    LDRB_rr      1111 1000 0001 .... .... 000000 .. ....      @ldst_rr
477f0984d40SFabiano Rosas  }
478f0984d40SFabiano Rosas}
479f0984d40SFabiano Rosas{
480f0984d40SFabiano Rosas  {
481*db36e145SRichard Henderson    PLD          1111 1000 -011 1111 1111 ------------        # (literal)
482f0984d40SFabiano Rosas    LDRH_ri      1111 1000 .011 1111 .... ............        @ldst_ri_lit
483f0984d40SFabiano Rosas  }
484f0984d40SFabiano Rosas  {
485*db36e145SRichard Henderson    PLDW         1111 1000 1011 ---- 1111 ------------        # (immediate T1)
486f0984d40SFabiano Rosas    LDRH_ri      1111 1000 1011 .... .... ............        @ldst_ri_pos
487f0984d40SFabiano Rosas  }
488f0984d40SFabiano Rosas  LDRH_ri        1111 1000 0011 .... .... 1..1 ........       @ldst_ri_idx
489f0984d40SFabiano Rosas  {
490*db36e145SRichard Henderson    PLDW         1111 1000 0011 ---- 1111 1100 --------       # (immediate T2)
491f0984d40SFabiano Rosas    LDRH_ri      1111 1000 0011 .... .... 1100 ........       @ldst_ri_neg
492f0984d40SFabiano Rosas  }
493f0984d40SFabiano Rosas  LDRHT_ri       1111 1000 0011 .... .... 1110 ........       @ldst_ri_unp
494f0984d40SFabiano Rosas  {
495*db36e145SRichard Henderson    PLDW         1111 1000 0011 ---- 1111 000000 -- ----      # (register)
496f0984d40SFabiano Rosas    LDRH_rr      1111 1000 0011 .... .... 000000 .. ....      @ldst_rr
497f0984d40SFabiano Rosas  }
498f0984d40SFabiano Rosas}
499f0984d40SFabiano Rosas{
500f0984d40SFabiano Rosas  LDR_ri         1111 1000 .101 1111 .... ............        @ldst_ri_lit
501f0984d40SFabiano Rosas  LDR_ri         1111 1000 1101 .... .... ............        @ldst_ri_pos
502f0984d40SFabiano Rosas  LDR_ri         1111 1000 0101 .... .... 1..1 ........       @ldst_ri_idx
503f0984d40SFabiano Rosas  LDR_ri         1111 1000 0101 .... .... 1100 ........       @ldst_ri_neg
504f0984d40SFabiano Rosas  LDRT_ri        1111 1000 0101 .... .... 1110 ........       @ldst_ri_unp
505f0984d40SFabiano Rosas  LDR_rr         1111 1000 0101 .... .... 000000 .. ....      @ldst_rr
506f0984d40SFabiano Rosas}
507f0984d40SFabiano Rosas{
508f0984d40SFabiano Rosas  {
509*db36e145SRichard Henderson    PLI          1111 1001 -001 1111 1111 ------------        # (literal T3)
510f0984d40SFabiano Rosas    LDRSB_ri     1111 1001 .001 1111 .... ............        @ldst_ri_lit
511f0984d40SFabiano Rosas  }
512f0984d40SFabiano Rosas  {
513*db36e145SRichard Henderson    PLI          1111 1001 1001 ---- 1111 ------------        # (immediate T1)
514f0984d40SFabiano Rosas    LDRSB_ri     1111 1001 1001 .... .... ............        @ldst_ri_pos
515f0984d40SFabiano Rosas  }
516f0984d40SFabiano Rosas  LDRSB_ri       1111 1001 0001 .... .... 1..1 ........       @ldst_ri_idx
517f0984d40SFabiano Rosas  {
518*db36e145SRichard Henderson    PLI          1111 1001 0001 ---- 1111 1100 --------       # (immediate T2)
519f0984d40SFabiano Rosas    LDRSB_ri     1111 1001 0001 .... .... 1100 ........       @ldst_ri_neg
520f0984d40SFabiano Rosas  }
521f0984d40SFabiano Rosas  LDRSBT_ri      1111 1001 0001 .... .... 1110 ........       @ldst_ri_unp
522f0984d40SFabiano Rosas  {
523*db36e145SRichard Henderson    PLI          1111 1001 0001 ---- 1111 000000 -- ----      # (register)
524f0984d40SFabiano Rosas    LDRSB_rr     1111 1001 0001 .... .... 000000 .. ....      @ldst_rr
525f0984d40SFabiano Rosas  }
526f0984d40SFabiano Rosas}
527f0984d40SFabiano Rosas# NOPs here are unallocated memory hints, treated as NOP.
528f0984d40SFabiano Rosas{
529f0984d40SFabiano Rosas  {
530f0984d40SFabiano Rosas    NOP          1111 1001 -011 1111 1111 ------------
531f0984d40SFabiano Rosas    LDRSH_ri     1111 1001 .011 1111 .... ............        @ldst_ri_lit
532f0984d40SFabiano Rosas  }
533f0984d40SFabiano Rosas  {
534f0984d40SFabiano Rosas    NOP          1111 1001 1011 ---- 1111 ------------
535f0984d40SFabiano Rosas    LDRSH_ri     1111 1001 1011 .... .... ............        @ldst_ri_pos
536f0984d40SFabiano Rosas  }
537f0984d40SFabiano Rosas  LDRSH_ri       1111 1001 0011 .... .... 1..1 ........       @ldst_ri_idx
538f0984d40SFabiano Rosas  {
539f0984d40SFabiano Rosas    NOP          1111 1001 0011 ---- 1111 1100 --------
540f0984d40SFabiano Rosas    LDRSH_ri     1111 1001 0011 .... .... 1100 ........       @ldst_ri_neg
541f0984d40SFabiano Rosas  }
542f0984d40SFabiano Rosas  LDRSHT_ri      1111 1001 0011 .... .... 1110 ........       @ldst_ri_unp
543f0984d40SFabiano Rosas  {
544f0984d40SFabiano Rosas    NOP          1111 1001 0011 ---- 1111 000000 -- ----
545f0984d40SFabiano Rosas    LDRSH_rr     1111 1001 0011 .... .... 000000 .. ....      @ldst_rr
546f0984d40SFabiano Rosas  }
547f0984d40SFabiano Rosas}
548f0984d40SFabiano Rosas
549f0984d40SFabiano Rosas%imm8x4          0:8 !function=times_4
550f0984d40SFabiano Rosas&ldst_ri2        p w u rn rt rt2 imm
551f0984d40SFabiano Rosas@ldstd_ri8       .... .... u:1 ... rn:4 rt:4 rt2:4 ........   \
552f0984d40SFabiano Rosas                 &ldst_ri2 imm=%imm8x4
553f0984d40SFabiano Rosas
554f0984d40SFabiano RosasSTRD_ri_t32      1110 1000 .110 .... .... .... ........    @ldstd_ri8 w=1 p=0
555f0984d40SFabiano RosasLDRD_ri_t32      1110 1000 .111 .... .... .... ........    @ldstd_ri8 w=1 p=0
556f0984d40SFabiano Rosas
557f0984d40SFabiano RosasSTRD_ri_t32      1110 1001 .100 .... .... .... ........    @ldstd_ri8 w=0 p=1
558f0984d40SFabiano RosasLDRD_ri_t32      1110 1001 .101 .... .... .... ........    @ldstd_ri8 w=0 p=1
559f0984d40SFabiano Rosas
560f0984d40SFabiano RosasSTRD_ri_t32      1110 1001 .110 .... .... .... ........    @ldstd_ri8 w=1 p=1
561f0984d40SFabiano Rosas{
562f0984d40SFabiano Rosas  SG             1110 1001 0111 1111 1110 1001 01111111
563f0984d40SFabiano Rosas  LDRD_ri_t32    1110 1001 .111 .... .... .... ........    @ldstd_ri8 w=1 p=1
564f0984d40SFabiano Rosas}
565f0984d40SFabiano Rosas
566f0984d40SFabiano Rosas# Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
567f0984d40SFabiano Rosas
568f0984d40SFabiano Rosas@strex_i         .... .... .... rn:4 rt:4 rd:4 .... .... \
569f0984d40SFabiano Rosas                 &strex rt2=15 imm=%imm8x4
570f0984d40SFabiano Rosas@strex_0         .... .... .... rn:4 rt:4 .... .... rd:4 \
571f0984d40SFabiano Rosas                 &strex rt2=15 imm=0
572f0984d40SFabiano Rosas@strex_d         .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
573f0984d40SFabiano Rosas                 &strex imm=0
574f0984d40SFabiano Rosas
575f0984d40SFabiano Rosas@ldrex_i         .... .... .... rn:4 rt:4 .... .... .... \
576f0984d40SFabiano Rosas                 &ldrex rt2=15 imm=%imm8x4
577f0984d40SFabiano Rosas@ldrex_0         .... .... .... rn:4 rt:4 .... .... .... \
578f0984d40SFabiano Rosas                 &ldrex rt2=15 imm=0
579f0984d40SFabiano Rosas@ldrex_d         .... .... .... rn:4 rt:4 rt2:4 .... .... \
580f0984d40SFabiano Rosas                 &ldrex imm=0
581f0984d40SFabiano Rosas
582f0984d40SFabiano Rosas{
583f0984d40SFabiano Rosas  TT             1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000
584f0984d40SFabiano Rosas  STREX          1110 1000 0100 .... .... .... .... ....      @strex_i
585f0984d40SFabiano Rosas}
586f0984d40SFabiano RosasSTREXB           1110 1000 1100 .... .... 1111 0100 ....      @strex_0
587f0984d40SFabiano RosasSTREXH           1110 1000 1100 .... .... 1111 0101 ....      @strex_0
588f0984d40SFabiano RosasSTREXD_t32       1110 1000 1100 .... .... .... 0111 ....      @strex_d
589f0984d40SFabiano Rosas
590f0984d40SFabiano RosasSTLEX            1110 1000 1100 .... .... 1111 1110 ....      @strex_0
591f0984d40SFabiano RosasSTLEXB           1110 1000 1100 .... .... 1111 1100 ....      @strex_0
592f0984d40SFabiano RosasSTLEXH           1110 1000 1100 .... .... 1111 1101 ....      @strex_0
593f0984d40SFabiano RosasSTLEXD_t32       1110 1000 1100 .... .... .... 1111 ....      @strex_d
594f0984d40SFabiano Rosas
595f0984d40SFabiano RosasSTL              1110 1000 1100 .... .... 1111 1010 1111      @ldrex_0
596f0984d40SFabiano RosasSTLB             1110 1000 1100 .... .... 1111 1000 1111      @ldrex_0
597f0984d40SFabiano RosasSTLH             1110 1000 1100 .... .... 1111 1001 1111      @ldrex_0
598f0984d40SFabiano Rosas
599f0984d40SFabiano RosasLDREX            1110 1000 0101 .... .... 1111 .... ....      @ldrex_i
600f0984d40SFabiano RosasLDREXB           1110 1000 1101 .... .... 1111 0100 1111      @ldrex_0
601f0984d40SFabiano RosasLDREXH           1110 1000 1101 .... .... 1111 0101 1111      @ldrex_0
602f0984d40SFabiano RosasLDREXD_t32       1110 1000 1101 .... .... .... 0111 1111      @ldrex_d
603f0984d40SFabiano Rosas
604f0984d40SFabiano RosasLDAEX            1110 1000 1101 .... .... 1111 1110 1111      @ldrex_0
605f0984d40SFabiano RosasLDAEXB           1110 1000 1101 .... .... 1111 1100 1111      @ldrex_0
606f0984d40SFabiano RosasLDAEXH           1110 1000 1101 .... .... 1111 1101 1111      @ldrex_0
607f0984d40SFabiano RosasLDAEXD_t32       1110 1000 1101 .... .... .... 1111 1111      @ldrex_d
608f0984d40SFabiano Rosas
609f0984d40SFabiano RosasLDA              1110 1000 1101 .... .... 1111 1010 1111      @ldrex_0
610f0984d40SFabiano RosasLDAB             1110 1000 1101 .... .... 1111 1000 1111      @ldrex_0
611f0984d40SFabiano RosasLDAH             1110 1000 1101 .... .... 1111 1001 1111      @ldrex_0
612f0984d40SFabiano Rosas
613f0984d40SFabiano Rosas&tbranch         rn rm
614f0984d40SFabiano Rosas@tbranch         .... .... .... rn:4 .... .... .... rm:4      &tbranch
615f0984d40SFabiano Rosas
616f0984d40SFabiano RosasTBB              1110 1000 1101 .... 1111 0000 0000 ....      @tbranch
617f0984d40SFabiano RosasTBH              1110 1000 1101 .... 1111 0000 0001 ....      @tbranch
618f0984d40SFabiano Rosas
619f0984d40SFabiano Rosas# Parallel addition and subtraction
620f0984d40SFabiano Rosas
621f0984d40SFabiano RosasSADD8            1111 1010 1000 .... 1111 .... 0000 ....      @rndm
622f0984d40SFabiano RosasQADD8            1111 1010 1000 .... 1111 .... 0001 ....      @rndm
623f0984d40SFabiano RosasSHADD8           1111 1010 1000 .... 1111 .... 0010 ....      @rndm
624f0984d40SFabiano RosasUADD8            1111 1010 1000 .... 1111 .... 0100 ....      @rndm
625f0984d40SFabiano RosasUQADD8           1111 1010 1000 .... 1111 .... 0101 ....      @rndm
626f0984d40SFabiano RosasUHADD8           1111 1010 1000 .... 1111 .... 0110 ....      @rndm
627f0984d40SFabiano Rosas
628f0984d40SFabiano RosasSADD16           1111 1010 1001 .... 1111 .... 0000 ....      @rndm
629f0984d40SFabiano RosasQADD16           1111 1010 1001 .... 1111 .... 0001 ....      @rndm
630f0984d40SFabiano RosasSHADD16          1111 1010 1001 .... 1111 .... 0010 ....      @rndm
631f0984d40SFabiano RosasUADD16           1111 1010 1001 .... 1111 .... 0100 ....      @rndm
632f0984d40SFabiano RosasUQADD16          1111 1010 1001 .... 1111 .... 0101 ....      @rndm
633f0984d40SFabiano RosasUHADD16          1111 1010 1001 .... 1111 .... 0110 ....      @rndm
634f0984d40SFabiano Rosas
635f0984d40SFabiano RosasSASX             1111 1010 1010 .... 1111 .... 0000 ....      @rndm
636f0984d40SFabiano RosasQASX             1111 1010 1010 .... 1111 .... 0001 ....      @rndm
637f0984d40SFabiano RosasSHASX            1111 1010 1010 .... 1111 .... 0010 ....      @rndm
638f0984d40SFabiano RosasUASX             1111 1010 1010 .... 1111 .... 0100 ....      @rndm
639f0984d40SFabiano RosasUQASX            1111 1010 1010 .... 1111 .... 0101 ....      @rndm
640f0984d40SFabiano RosasUHASX            1111 1010 1010 .... 1111 .... 0110 ....      @rndm
641f0984d40SFabiano Rosas
642f0984d40SFabiano RosasSSUB8            1111 1010 1100 .... 1111 .... 0000 ....      @rndm
643f0984d40SFabiano RosasQSUB8            1111 1010 1100 .... 1111 .... 0001 ....      @rndm
644f0984d40SFabiano RosasSHSUB8           1111 1010 1100 .... 1111 .... 0010 ....      @rndm
645f0984d40SFabiano RosasUSUB8            1111 1010 1100 .... 1111 .... 0100 ....      @rndm
646f0984d40SFabiano RosasUQSUB8           1111 1010 1100 .... 1111 .... 0101 ....      @rndm
647f0984d40SFabiano RosasUHSUB8           1111 1010 1100 .... 1111 .... 0110 ....      @rndm
648f0984d40SFabiano Rosas
649f0984d40SFabiano RosasSSUB16           1111 1010 1101 .... 1111 .... 0000 ....      @rndm
650f0984d40SFabiano RosasQSUB16           1111 1010 1101 .... 1111 .... 0001 ....      @rndm
651f0984d40SFabiano RosasSHSUB16          1111 1010 1101 .... 1111 .... 0010 ....      @rndm
652f0984d40SFabiano RosasUSUB16           1111 1010 1101 .... 1111 .... 0100 ....      @rndm
653f0984d40SFabiano RosasUQSUB16          1111 1010 1101 .... 1111 .... 0101 ....      @rndm
654f0984d40SFabiano RosasUHSUB16          1111 1010 1101 .... 1111 .... 0110 ....      @rndm
655f0984d40SFabiano Rosas
656f0984d40SFabiano RosasSSAX             1111 1010 1110 .... 1111 .... 0000 ....      @rndm
657f0984d40SFabiano RosasQSAX             1111 1010 1110 .... 1111 .... 0001 ....      @rndm
658f0984d40SFabiano RosasSHSAX            1111 1010 1110 .... 1111 .... 0010 ....      @rndm
659f0984d40SFabiano RosasUSAX             1111 1010 1110 .... 1111 .... 0100 ....      @rndm
660f0984d40SFabiano RosasUQSAX            1111 1010 1110 .... 1111 .... 0101 ....      @rndm
661f0984d40SFabiano RosasUHSAX            1111 1010 1110 .... 1111 .... 0110 ....      @rndm
662f0984d40SFabiano Rosas
663f0984d40SFabiano Rosas# Register extends
664f0984d40SFabiano Rosas
665f0984d40SFabiano Rosas@rrr_rot         .... .... .... rn:4 .... rd:4 .. rot:2 rm:4  &rrr_rot
666f0984d40SFabiano Rosas
667f0984d40SFabiano RosasSXTAH            1111 1010 0000 .... 1111 .... 10.. ....      @rrr_rot
668f0984d40SFabiano RosasUXTAH            1111 1010 0001 .... 1111 .... 10.. ....      @rrr_rot
669f0984d40SFabiano RosasSXTAB16          1111 1010 0010 .... 1111 .... 10.. ....      @rrr_rot
670f0984d40SFabiano RosasUXTAB16          1111 1010 0011 .... 1111 .... 10.. ....      @rrr_rot
671f0984d40SFabiano RosasSXTAB            1111 1010 0100 .... 1111 .... 10.. ....      @rrr_rot
672f0984d40SFabiano RosasUXTAB            1111 1010 0101 .... 1111 .... 10.. ....      @rrr_rot
673f0984d40SFabiano Rosas
674f0984d40SFabiano Rosas# Load/store multiple
675f0984d40SFabiano Rosas
676f0984d40SFabiano Rosas@ldstm           .... .... .. w:1 . rn:4 list:16              &ldst_block u=0
677f0984d40SFabiano Rosas
678f0984d40SFabiano RosasSTM_t32          1110 1000 10.0 .... ................         @ldstm i=1 b=0
679f0984d40SFabiano RosasSTM_t32          1110 1001 00.0 .... ................         @ldstm i=0 b=1
680f0984d40SFabiano Rosas{
681f0984d40SFabiano Rosas  # Rn=15 UNDEFs for LDM; M-profile CLRM uses that encoding
682f0984d40SFabiano Rosas  CLRM           1110 1000 1001 1111 list:16
683f0984d40SFabiano Rosas  LDM_t32        1110 1000 10.1 .... ................         @ldstm i=1 b=0
684f0984d40SFabiano Rosas}
685f0984d40SFabiano RosasLDM_t32          1110 1001 00.1 .... ................         @ldstm i=0 b=1
686f0984d40SFabiano Rosas
687f0984d40SFabiano Rosas&rfe             !extern rn w pu
688f0984d40SFabiano Rosas@rfe             .... .... .. w:1 . rn:4 ................     &rfe
689f0984d40SFabiano Rosas
690f0984d40SFabiano RosasRFE              1110 1000 00.1 .... 1100000000000000         @rfe pu=2
691f0984d40SFabiano RosasRFE              1110 1001 10.1 .... 1100000000000000         @rfe pu=1
692f0984d40SFabiano Rosas
693f0984d40SFabiano Rosas&srs             !extern mode w pu
694f0984d40SFabiano Rosas@srs             .... .... .. w:1 . .... ........... mode:5   &srs
695f0984d40SFabiano Rosas
696f0984d40SFabiano RosasSRS              1110 1000 00.0 1101 1100 0000 000. ....      @srs pu=2
697f0984d40SFabiano RosasSRS              1110 1001 10.0 1101 1100 0000 000. ....      @srs pu=1
698f0984d40SFabiano Rosas
699f0984d40SFabiano Rosas# Coprocessor instructions
700f0984d40SFabiano Rosas
701f0984d40SFabiano Rosas# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the
702f0984d40SFabiano Rosas# other coprocessor instructions always UNDEF.
703f0984d40SFabiano Rosas# The trans_ functions for these will ignore cp values 8..13 for v7 or
704f0984d40SFabiano Rosas# earlier, and 0..13 for v8 and later, because those areas of the
705f0984d40SFabiano Rosas# encoding space may be used for other things, such as VFP or Neon.
706f0984d40SFabiano Rosas
707f0984d40SFabiano Rosas@mcr             .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4
708f0984d40SFabiano Rosas@mcrr            .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4
709f0984d40SFabiano Rosas
710f0984d40SFabiano RosasMCRR             1110 1100 0100 .... .... .... .... .... @mcrr
711f0984d40SFabiano RosasMRRC             1110 1100 0101 .... .... .... .... .... @mcrr
712f0984d40SFabiano Rosas
713f0984d40SFabiano RosasMCR              1110 1110 ... 0 .... .... .... ... 1 .... @mcr
714f0984d40SFabiano RosasMRC              1110 1110 ... 1 .... .... .... ... 1 .... @mcr
715f0984d40SFabiano Rosas
716f0984d40SFabiano Rosas# Branches
717f0984d40SFabiano Rosas
718f0984d40SFabiano Rosas%imm24           26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24
719f0984d40SFabiano Rosas@branch24        ................................             &i imm=%imm24
720f0984d40SFabiano Rosas
721f0984d40SFabiano RosasB                1111 0. .......... 10.1 ............         @branch24
722f0984d40SFabiano RosasBL               1111 0. .......... 11.1 ............         @branch24
723f0984d40SFabiano Rosas{
724f0984d40SFabiano Rosas  # BLX_i is non-M-profile only
725f0984d40SFabiano Rosas  BLX_i          1111 0. .......... 11.0 ............         @branch24
726f0984d40SFabiano Rosas  # M-profile only: loop and branch insns
727f0984d40SFabiano Rosas  [
728f0984d40SFabiano Rosas    # All these BF insns have boff != 0b0000; we NOP them all
729f0984d40SFabiano Rosas    BF           1111 0 boff:4  ------- 1100 - ---------- 1    # BFL
730f0984d40SFabiano Rosas    BF           1111 0 boff:4 0 ------ 1110 - ---------- 1    # BFCSEL
731f0984d40SFabiano Rosas    BF           1111 0 boff:4 10 ----- 1110 - ---------- 1    # BF
732f0984d40SFabiano Rosas    BF           1111 0 boff:4 11 ----- 1110 0 0000000000 1    # BFX, BFLX
733f0984d40SFabiano Rosas  ]
734f0984d40SFabiano Rosas  [
735f0984d40SFabiano Rosas    # LE and WLS immediate
736f0984d40SFabiano Rosas    %lob_imm 1:10 11:1 !function=times_2
737f0984d40SFabiano Rosas
738f0984d40SFabiano Rosas    DLS          1111 0 0000 100     rn:4 1110 0000 0000 0001 size=4
739f0984d40SFabiano Rosas    WLS          1111 0 0000 100     rn:4 1100 . .......... 1 imm=%lob_imm size=4
740f0984d40SFabiano Rosas    {
741f0984d40SFabiano Rosas      LE         1111 0 0000 0 f:1 tp:1 1111 1100 . .......... 1 imm=%lob_imm
742f0984d40SFabiano Rosas      # This is WLSTP
743f0984d40SFabiano Rosas      WLS        1111 0 0000 0 size:2 rn:4 1100 . .......... 1 imm=%lob_imm
744f0984d40SFabiano Rosas    }
745f0984d40SFabiano Rosas    {
746f0984d40SFabiano Rosas      LCTP       1111 0 0000 000     1111 1110 0000 0000 0001
747f0984d40SFabiano Rosas      # This is DLSTP
748f0984d40SFabiano Rosas      DLS        1111 0 0000 0 size:2 rn:4 1110 0000 0000 0001
749f0984d40SFabiano Rosas    }
750f0984d40SFabiano Rosas    VCTP         1111 0 0000 0 size:2 rn:4 1110 1000 0000 0001
751f0984d40SFabiano Rosas  ]
752f0984d40SFabiano Rosas}
753