xref: /qemu/target/arm/tcg/t32.decode (revision f4ae6c8cbda8d9b21290e9b8ae21b785ca24aace)
151409b9eSRichard Henderson# Thumb2 instructions
251409b9eSRichard Henderson#
351409b9eSRichard Henderson#  Copyright (c) 2019 Linaro, Ltd
451409b9eSRichard Henderson#
551409b9eSRichard Henderson# This library is free software; you can redistribute it and/or
651409b9eSRichard Henderson# modify it under the terms of the GNU Lesser General Public
751409b9eSRichard Henderson# License as published by the Free Software Foundation; either
850f57e09SChetan Pant# version 2.1 of the License, or (at your option) any later version.
951409b9eSRichard Henderson#
1051409b9eSRichard Henderson# This library is distributed in the hope that it will be useful,
1151409b9eSRichard Henderson# but WITHOUT ANY WARRANTY; without even the implied warranty of
1251409b9eSRichard Henderson# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1351409b9eSRichard Henderson# Lesser General Public License for more details.
1451409b9eSRichard Henderson#
1551409b9eSRichard Henderson# You should have received a copy of the GNU Lesser General Public
1651409b9eSRichard Henderson# License along with this library; if not, see <http://www.gnu.org/licenses/>.
1751409b9eSRichard Henderson
1851409b9eSRichard Henderson#
1951409b9eSRichard Henderson# This file is processed by scripts/decodetree.py
2051409b9eSRichard Henderson#
2125ae32c5SRichard Henderson
2263130596SRichard Henderson&empty           !extern
2325ae32c5SRichard Henderson&s_rrr_shi       !extern s rd rn rm shim shty
245be2c123SRichard Henderson&s_rrr_shr       !extern s rn rd rm rs shty
25581c6ebdSRichard Henderson&s_rri_rot       !extern s rn rd imm rot
26bd92fe35SRichard Henderson&s_rrrr          !extern s rd rn rm ra
27bd92fe35SRichard Henderson&rrrr            !extern rd rn rm ra
2846497f6aSRichard Henderson&rrr_rot         !extern rd rn rm rot
296d0730a8SRichard Henderson&rrr             !extern rd rn rm
304c97f5b2SRichard Henderson&rr              !extern rd rm
31145952e8SRichard Henderson&ri              !extern rd imm
324ed95abdSRichard Henderson&r               !extern rm
332cde9ea5SRichard Henderson&i               !extern imm
34d0b26644SRichard Henderson&msr_reg         !extern rn r mask
35d0b26644SRichard Henderson&mrs_reg         !extern rd r
36d0b26644SRichard Henderson&msr_bank        !extern rn r sysm
37d0b26644SRichard Henderson&mrs_bank        !extern rd r sysm
385e291fe1SRichard Henderson&ldst_rr         !extern p w u rn rt rm shimm shtype
395e291fe1SRichard Henderson&ldst_ri         !extern p w u rn rt imm
40c5c426d4SRichard Henderson&ldst_block      !extern rn i b u w list
411efdd407SRichard Henderson&strex           !extern rn rd rt rt2 imm
421efdd407SRichard Henderson&ldrex           !extern rn rt rt2 imm
4386d21e4bSRichard Henderson&bfx             !extern rd rn lsb widthm1
4486d21e4bSRichard Henderson&bfi             !extern rd rn lsb msb
4546497f6aSRichard Henderson&sat             !extern rd rn satimm imm sh
4646497f6aSRichard Henderson&pkh             !extern rd rn rm imm tb
4752f83b9cSRichard Henderson&cps             !extern mode imod M A I F
484c498dcfSPeter Maydell&mcr             !extern cp opc1 crn crm opc2 rt
494c498dcfSPeter Maydell&mcrr            !extern cp opc1 crm rt rt2
5025ae32c5SRichard Henderson
51*f4ae6c8cSPeter Maydell&mve_shl_ri      rdalo rdahi shim
52*f4ae6c8cSPeter Maydell
53*f4ae6c8cSPeter Maydell# rdahi: bits [3:1] from insn, bit 0 is 1
54*f4ae6c8cSPeter Maydell# rdalo: bits [3:1] from insn, bit 0 is 0
55*f4ae6c8cSPeter Maydell%rdahi_9 9:3 !function=times_2_plus_1
56*f4ae6c8cSPeter Maydell%rdalo_17 17:3 !function=times_2
57*f4ae6c8cSPeter Maydell
5825ae32c5SRichard Henderson# Data-processing (register)
5925ae32c5SRichard Henderson
6025ae32c5SRichard Henderson%imm5_12_6       12:3 6:2
6125ae32c5SRichard Henderson
6225ae32c5SRichard Henderson@s_rrr_shi       ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \
6325ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6
6425ae32c5SRichard Henderson@s_rxr_shi       ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \
6525ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6 rn=0
6625ae32c5SRichard Henderson@S_xrr_shi       ....... .... .   rn:4 .... .... .. shty:2 rm:4 \
6725ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6 s=1 rd=0
6825ae32c5SRichard Henderson
69*f4ae6c8cSPeter Maydell@mve_shl_ri      ....... .... . ... . . ... ... . .. .. .... \
70*f4ae6c8cSPeter Maydell                 &mve_shl_ri shim=%imm5_12_6 rdalo=%rdalo_17 rdahi=%rdahi_9
71*f4ae6c8cSPeter Maydell
7225ae32c5SRichard Henderson{
7325ae32c5SRichard Henderson  TST_xrri       1110101 0000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
7425ae32c5SRichard Henderson  AND_rrri       1110101 0000 . .... 0 ... .... .... ....     @s_rrr_shi
7525ae32c5SRichard Henderson}
7625ae32c5SRichard HendersonBIC_rrri         1110101 0001 . .... 0 ... .... .... ....     @s_rrr_shi
7725ae32c5SRichard Henderson{
78*f4ae6c8cSPeter Maydell  # The v8.1M MVE shift insns overlap in encoding with MOVS/ORRS
79*f4ae6c8cSPeter Maydell  # and are distinguished by having Rm==13 or 15. Those are UNPREDICTABLE
80*f4ae6c8cSPeter Maydell  # cases for MOVS/ORRS. We decode the MVE cases first, ensuring that
81*f4ae6c8cSPeter Maydell  # they explicitly call unallocated_encoding() for cases that must UNDEF
82*f4ae6c8cSPeter Maydell  # (eg "using a new shift insn on a v8.1M CPU without MVE"), and letting
83*f4ae6c8cSPeter Maydell  # the rest fall through (where ORR_rrri and MOV_rxri will end up
84*f4ae6c8cSPeter Maydell  # handling them as r13 and r15 accesses with the same semantics as A32).
85*f4ae6c8cSPeter Maydell  [
86*f4ae6c8cSPeter Maydell    LSLL_ri      1110101 0010 1 ... 0 0 ... ... 1 .. 00 1111  @mve_shl_ri
87*f4ae6c8cSPeter Maydell    LSRL_ri      1110101 0010 1 ... 0 0 ... ... 1 .. 01 1111  @mve_shl_ri
88*f4ae6c8cSPeter Maydell    ASRL_ri      1110101 0010 1 ... 0 0 ... ... 1 .. 10 1111  @mve_shl_ri
89*f4ae6c8cSPeter Maydell
90*f4ae6c8cSPeter Maydell    UQSHLL_ri    1110101 0010 1 ... 1 0 ... ... 1 .. 00 1111  @mve_shl_ri
91*f4ae6c8cSPeter Maydell    URSHRL_ri    1110101 0010 1 ... 1 0 ... ... 1 .. 01 1111  @mve_shl_ri
92*f4ae6c8cSPeter Maydell    SRSHRL_ri    1110101 0010 1 ... 1 0 ... ... 1 .. 10 1111  @mve_shl_ri
93*f4ae6c8cSPeter Maydell    SQSHLL_ri    1110101 0010 1 ... 1 0 ... ... 1 .. 11 1111  @mve_shl_ri
94*f4ae6c8cSPeter Maydell  ]
95*f4ae6c8cSPeter Maydell
9625ae32c5SRichard Henderson  MOV_rxri       1110101 0010 . 1111 0 ... .... .... ....     @s_rxr_shi
9725ae32c5SRichard Henderson  ORR_rrri       1110101 0010 . .... 0 ... .... .... ....     @s_rrr_shi
9825ae32c5SRichard Henderson}
9925ae32c5SRichard Henderson{
10025ae32c5SRichard Henderson  MVN_rxri       1110101 0011 . 1111 0 ... .... .... ....     @s_rxr_shi
10125ae32c5SRichard Henderson  ORN_rrri       1110101 0011 . .... 0 ... .... .... ....     @s_rrr_shi
10225ae32c5SRichard Henderson}
10325ae32c5SRichard Henderson{
10425ae32c5SRichard Henderson  TEQ_xrri       1110101 0100 1 .... 0 ... 1111 .... ....     @S_xrr_shi
10525ae32c5SRichard Henderson  EOR_rrri       1110101 0100 . .... 0 ... .... .... ....     @s_rrr_shi
10625ae32c5SRichard Henderson}
10746497f6aSRichard HendersonPKH              1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
10846497f6aSRichard Henderson                 &pkh imm=%imm5_12_6
10925ae32c5SRichard Henderson{
11025ae32c5SRichard Henderson  CMN_xrri       1110101 1000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
11125ae32c5SRichard Henderson  ADD_rrri       1110101 1000 . .... 0 ... .... .... ....     @s_rrr_shi
11225ae32c5SRichard Henderson}
11325ae32c5SRichard HendersonADC_rrri         1110101 1010 . .... 0 ... .... .... ....     @s_rrr_shi
11425ae32c5SRichard HendersonSBC_rrri         1110101 1011 . .... 0 ... .... .... ....     @s_rrr_shi
11525ae32c5SRichard Henderson{
11625ae32c5SRichard Henderson  CMP_xrri       1110101 1101 1 .... 0 ... 1111 .... ....     @S_xrr_shi
11725ae32c5SRichard Henderson  SUB_rrri       1110101 1101 . .... 0 ... .... .... ....     @s_rrr_shi
11825ae32c5SRichard Henderson}
11925ae32c5SRichard HendersonRSB_rrri         1110101 1110 . .... 0 ... .... .... ....     @s_rrr_shi
1205be2c123SRichard Henderson
121cc73bbdeSPeter Maydell# v8.1M CSEL and friends
122cc73bbdeSPeter MaydellCSEL             1110101 0010 1 rn:4 10 op:2 rd:4 fcond:4 rm:4
123cc73bbdeSPeter Maydell
1245be2c123SRichard Henderson# Data-processing (register-shifted register)
1255be2c123SRichard Henderson
1265be2c123SRichard HendersonMOV_rxrr         1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
1275be2c123SRichard Henderson                 &s_rrr_shr rn=0
128581c6ebdSRichard Henderson
129581c6ebdSRichard Henderson# Data-processing (immediate)
130581c6ebdSRichard Henderson
131581c6ebdSRichard Henderson%t32extrot       26:1 12:3 0:8  !function=t32_expandimm_rot
132581c6ebdSRichard Henderson%t32extimm       26:1 12:3 0:8  !function=t32_expandimm_imm
133581c6ebdSRichard Henderson
134581c6ebdSRichard Henderson@s_rri_rot       ....... .... s:1 rn:4 . ... rd:4 ........ \
135581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot
136581c6ebdSRichard Henderson@s_rxi_rot       ....... .... s:1 .... . ... rd:4 ........ \
137581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0
138581c6ebdSRichard Henderson@S_xri_rot       ....... .... .   rn:4 . ... .... ........ \
139581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0
140581c6ebdSRichard Henderson
141581c6ebdSRichard Henderson{
142581c6ebdSRichard Henderson  TST_xri        1111 0.0 0000 1 .... 0 ... 1111 ........     @S_xri_rot
143581c6ebdSRichard Henderson  AND_rri        1111 0.0 0000 . .... 0 ... .... ........     @s_rri_rot
144581c6ebdSRichard Henderson}
145581c6ebdSRichard HendersonBIC_rri          1111 0.0 0001 . .... 0 ... .... ........     @s_rri_rot
146581c6ebdSRichard Henderson{
147581c6ebdSRichard Henderson  MOV_rxi        1111 0.0 0010 . 1111 0 ... .... ........     @s_rxi_rot
148581c6ebdSRichard Henderson  ORR_rri        1111 0.0 0010 . .... 0 ... .... ........     @s_rri_rot
149581c6ebdSRichard Henderson}
150581c6ebdSRichard Henderson{
151581c6ebdSRichard Henderson  MVN_rxi        1111 0.0 0011 . 1111 0 ... .... ........     @s_rxi_rot
152581c6ebdSRichard Henderson  ORN_rri        1111 0.0 0011 . .... 0 ... .... ........     @s_rri_rot
153581c6ebdSRichard Henderson}
154581c6ebdSRichard Henderson{
155581c6ebdSRichard Henderson  TEQ_xri        1111 0.0 0100 1 .... 0 ... 1111 ........     @S_xri_rot
156581c6ebdSRichard Henderson  EOR_rri        1111 0.0 0100 . .... 0 ... .... ........     @s_rri_rot
157581c6ebdSRichard Henderson}
158581c6ebdSRichard Henderson{
159581c6ebdSRichard Henderson  CMN_xri        1111 0.0 1000 1 .... 0 ... 1111 ........     @S_xri_rot
160581c6ebdSRichard Henderson  ADD_rri        1111 0.0 1000 . .... 0 ... .... ........     @s_rri_rot
161581c6ebdSRichard Henderson}
162581c6ebdSRichard HendersonADC_rri          1111 0.0 1010 . .... 0 ... .... ........     @s_rri_rot
163581c6ebdSRichard HendersonSBC_rri          1111 0.0 1011 . .... 0 ... .... ........     @s_rri_rot
164581c6ebdSRichard Henderson{
165581c6ebdSRichard Henderson  CMP_xri        1111 0.0 1101 1 .... 0 ... 1111 ........     @S_xri_rot
166581c6ebdSRichard Henderson  SUB_rri        1111 0.0 1101 . .... 0 ... .... ........     @s_rri_rot
167581c6ebdSRichard Henderson}
168581c6ebdSRichard HendersonRSB_rri          1111 0.0 1110 . .... 0 ... .... ........     @s_rri_rot
169bd92fe35SRichard Henderson
170145952e8SRichard Henderson# Data processing (plain binary immediate)
171145952e8SRichard Henderson
172145952e8SRichard Henderson%imm12_26_12_0   26:1 12:3 0:8
173145952e8SRichard Henderson%neg12_26_12_0   26:1 12:3 0:8 !function=negate
174145952e8SRichard Henderson@s0_rri_12       .... ... .... . rn:4 . ... rd:4 ........ \
175145952e8SRichard Henderson                 &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
176145952e8SRichard Henderson
177145952e8SRichard Henderson{
178145952e8SRichard Henderson  ADR            1111 0.1 0000 0 1111 0 ... rd:4 ........ \
179145952e8SRichard Henderson                 &ri imm=%imm12_26_12_0
180145952e8SRichard Henderson  ADD_rri        1111 0.1 0000 0 .... 0 ... .... ........     @s0_rri_12
181145952e8SRichard Henderson}
182145952e8SRichard Henderson{
183145952e8SRichard Henderson  ADR            1111 0.1 0101 0 1111 0 ... rd:4 ........ \
184145952e8SRichard Henderson                 &ri imm=%neg12_26_12_0
185145952e8SRichard Henderson  SUB_rri        1111 0.1 0101 0 .... 0 ... .... ........     @s0_rri_12
186145952e8SRichard Henderson}
187145952e8SRichard Henderson
1888f445127SRichard Henderson# Move Wide
1898f445127SRichard Henderson
1908f445127SRichard Henderson%imm16_26_16_12_0 16:4 26:1 12:3 0:8
1918f445127SRichard Henderson@mov16           .... .... .... .... .... rd:4 .... .... \
1928f445127SRichard Henderson                 &ri imm=%imm16_26_16_12_0
1938f445127SRichard Henderson
1948f445127SRichard HendersonMOVW             1111 0.10 0100 .... 0 ... .... ........      @mov16
1958f445127SRichard HendersonMOVT             1111 0.10 1100 .... 0 ... .... ........      @mov16
1968f445127SRichard Henderson
19786d21e4bSRichard Henderson# Saturate, bitfield
19886d21e4bSRichard Henderson
19946497f6aSRichard Henderson@sat             .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
20046497f6aSRichard Henderson                 &sat imm=%imm5_12_6
20146497f6aSRichard Henderson@sat16           .... .... .. .    . rn:4 . ... rd:4 .. . satimm:5 \
20246497f6aSRichard Henderson                 &sat sh=0 imm=0
20346497f6aSRichard Henderson
20446497f6aSRichard Henderson{
20546497f6aSRichard Henderson  SSAT16         1111 0011 001 0 .... 0 000 .... 00 0 .....   @sat16
20646497f6aSRichard Henderson  SSAT           1111 0011 00. 0 .... 0 ... .... .. 0 .....   @sat
20746497f6aSRichard Henderson}
20846497f6aSRichard Henderson{
20946497f6aSRichard Henderson  USAT16         1111 0011 101 0 .... 0 000 .... 00 0 .....   @sat16
21046497f6aSRichard Henderson  USAT           1111 0011 10. 0 .... 0 ... .... .. 0 .....   @sat
21146497f6aSRichard Henderson}
21246497f6aSRichard Henderson
21386d21e4bSRichard Henderson@bfx             .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
21486d21e4bSRichard Henderson                 &bfx lsb=%imm5_12_6
21586d21e4bSRichard Henderson@bfi             .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
21686d21e4bSRichard Henderson                 &bfi lsb=%imm5_12_6
21786d21e4bSRichard Henderson
21886d21e4bSRichard HendersonSBFX             1111 0011 010 0 .... 0 ... .... ..0.....     @bfx
21986d21e4bSRichard HendersonUBFX             1111 0011 110 0 .... 0 ... .... ..0.....     @bfx
22086d21e4bSRichard Henderson
22186d21e4bSRichard Henderson# bfc is bfi w/ rn=15
22286d21e4bSRichard HendersonBFCI             1111 0011 011 0 .... 0 ... .... ..0.....     @bfi
22386d21e4bSRichard Henderson
224bd92fe35SRichard Henderson# Multiply and multiply accumulate
225bd92fe35SRichard Henderson
226bd92fe35SRichard Henderson@s0_rnadm        .... .... .... rn:4 ra:4 rd:4 .... rm:4      &s_rrrr s=0
227bd92fe35SRichard Henderson@s0_rn0dm        .... .... .... rn:4 .... rd:4 .... rm:4      &s_rrrr ra=0 s=0
228bd92fe35SRichard Henderson@rnadm           .... .... .... rn:4 ra:4 rd:4 .... rm:4      &rrrr
22926c6923dSRichard Henderson@rn0dm           .... .... .... rn:4 .... rd:4 .... rm:4      &rrrr ra=0
2306d0730a8SRichard Henderson@rndm            .... .... .... rn:4 .... rd:4 .... rm:4      &rrr
2314c97f5b2SRichard Henderson@rdm             .... .... .... .... .... rd:4 .... rm:4      &rr
232bd92fe35SRichard Henderson
233bd92fe35SRichard Henderson{
234bd92fe35SRichard Henderson  MUL            1111 1011 0000 .... 1111 .... 0000 ....      @s0_rn0dm
235bd92fe35SRichard Henderson  MLA            1111 1011 0000 .... .... .... 0000 ....      @s0_rnadm
236bd92fe35SRichard Henderson}
237bd92fe35SRichard HendersonMLS              1111 1011 0000 .... .... .... 0001 ....      @rnadm
238bd92fe35SRichard HendersonSMULL            1111 1011 1000 .... .... .... 0000 ....      @s0_rnadm
239bd92fe35SRichard HendersonUMULL            1111 1011 1010 .... .... .... 0000 ....      @s0_rnadm
240bd92fe35SRichard HendersonSMLAL            1111 1011 1100 .... .... .... 0000 ....      @s0_rnadm
241bd92fe35SRichard HendersonUMLAL            1111 1011 1110 .... .... .... 0000 ....      @s0_rnadm
242bd92fe35SRichard HendersonUMAAL            1111 1011 1110 .... .... .... 0110 ....      @rnadm
24326c6923dSRichard Henderson{
24426c6923dSRichard Henderson  SMULWB         1111 1011 0011 .... 1111 .... 0000 ....      @rn0dm
24526c6923dSRichard Henderson  SMLAWB         1111 1011 0011 .... .... .... 0000 ....      @rnadm
24626c6923dSRichard Henderson}
24726c6923dSRichard Henderson{
24826c6923dSRichard Henderson  SMULWT         1111 1011 0011 .... 1111 .... 0001 ....      @rn0dm
24926c6923dSRichard Henderson  SMLAWT         1111 1011 0011 .... .... .... 0001 ....      @rnadm
25026c6923dSRichard Henderson}
25126c6923dSRichard Henderson{
25226c6923dSRichard Henderson  SMULBB         1111 1011 0001 .... 1111 .... 0000 ....      @rn0dm
25326c6923dSRichard Henderson  SMLABB         1111 1011 0001 .... .... .... 0000 ....      @rnadm
25426c6923dSRichard Henderson}
25526c6923dSRichard Henderson{
25626c6923dSRichard Henderson  SMULBT         1111 1011 0001 .... 1111 .... 0001 ....      @rn0dm
25726c6923dSRichard Henderson  SMLABT         1111 1011 0001 .... .... .... 0001 ....      @rnadm
25826c6923dSRichard Henderson}
25926c6923dSRichard Henderson{
26026c6923dSRichard Henderson  SMULTB         1111 1011 0001 .... 1111 .... 0010 ....      @rn0dm
26126c6923dSRichard Henderson  SMLATB         1111 1011 0001 .... .... .... 0010 ....      @rnadm
26226c6923dSRichard Henderson}
26326c6923dSRichard Henderson{
26426c6923dSRichard Henderson  SMULTT         1111 1011 0001 .... 1111 .... 0011 ....      @rn0dm
26526c6923dSRichard Henderson  SMLATT         1111 1011 0001 .... .... .... 0011 ....      @rnadm
26626c6923dSRichard Henderson}
26726c6923dSRichard HendersonSMLALBB          1111 1011 1100 .... .... .... 1000 ....      @rnadm
26826c6923dSRichard HendersonSMLALBT          1111 1011 1100 .... .... .... 1001 ....      @rnadm
26926c6923dSRichard HendersonSMLALTB          1111 1011 1100 .... .... .... 1010 ....      @rnadm
27026c6923dSRichard HendersonSMLALTT          1111 1011 1100 .... .... .... 1011 ....      @rnadm
2716d0730a8SRichard Henderson
27286d21e4bSRichard Henderson# usad8 is usada8 w/ ra=15
27386d21e4bSRichard HendersonUSADA8           1111 1011 0111 .... .... .... 0000 ....      @rnadm
27486d21e4bSRichard Henderson
2752c7c4e09SRichard HendersonSMLAD            1111 1011 0010 .... .... .... 0000 ....      @rnadm
2762c7c4e09SRichard HendersonSMLADX           1111 1011 0010 .... .... .... 0001 ....      @rnadm
2772c7c4e09SRichard HendersonSMLSD            1111 1011 0100 .... .... .... 0000 ....      @rnadm
2782c7c4e09SRichard HendersonSMLSDX           1111 1011 0100 .... .... .... 0001 ....      @rnadm
2792c7c4e09SRichard Henderson
2802c7c4e09SRichard HendersonSMLALD           1111 1011 1100 .... .... .... 1100 ....      @rnadm
2812c7c4e09SRichard HendersonSMLALDX          1111 1011 1100 .... .... .... 1101 ....      @rnadm
2822c7c4e09SRichard HendersonSMLSLD           1111 1011 1101 .... .... .... 1100 ....      @rnadm
2832c7c4e09SRichard HendersonSMLSLDX          1111 1011 1101 .... .... .... 1101 ....      @rnadm
2842c7c4e09SRichard Henderson
2852c7c4e09SRichard HendersonSMMLA            1111 1011 0101 .... .... .... 0000 ....      @rnadm
2862c7c4e09SRichard HendersonSMMLAR           1111 1011 0101 .... .... .... 0001 ....      @rnadm
2872c7c4e09SRichard HendersonSMMLS            1111 1011 0110 .... .... .... 0000 ....      @rnadm
2882c7c4e09SRichard HendersonSMMLSR           1111 1011 0110 .... .... .... 0001 ....      @rnadm
2892c7c4e09SRichard Henderson
2902c7c4e09SRichard HendersonSDIV             1111 1011 1001 .... 1111 .... 1111 ....      @rndm
2912c7c4e09SRichard HendersonUDIV             1111 1011 1011 .... 1111 .... 1111 ....      @rndm
2922c7c4e09SRichard Henderson
2936d0730a8SRichard Henderson# Data-processing (two source registers)
2946d0730a8SRichard Henderson
2956d0730a8SRichard HendersonQADD             1111 1010 1000 .... 1111 .... 1000 ....      @rndm
2966d0730a8SRichard HendersonQSUB             1111 1010 1000 .... 1111 .... 1010 ....      @rndm
2976d0730a8SRichard HendersonQDADD            1111 1010 1000 .... 1111 .... 1001 ....      @rndm
2986d0730a8SRichard HendersonQDSUB            1111 1010 1000 .... 1111 .... 1011 ....      @rndm
29963130596SRichard Henderson
3006c35d53fSRichard HendersonCRC32B           1111 1010 1100 .... 1111 .... 1000 ....      @rndm
3016c35d53fSRichard HendersonCRC32H           1111 1010 1100 .... 1111 .... 1001 ....      @rndm
3026c35d53fSRichard HendersonCRC32W           1111 1010 1100 .... 1111 .... 1010 ....      @rndm
3036c35d53fSRichard HendersonCRC32CB          1111 1010 1101 .... 1111 .... 1000 ....      @rndm
3046c35d53fSRichard HendersonCRC32CH          1111 1010 1101 .... 1111 .... 1001 ....      @rndm
3056c35d53fSRichard HendersonCRC32CW          1111 1010 1101 .... 1111 .... 1010 ....      @rndm
3066c35d53fSRichard Henderson
30746497f6aSRichard HendersonSEL              1111 1010 1010 .... 1111 .... 1000 ....      @rndm
30846497f6aSRichard Henderson
3094c97f5b2SRichard Henderson# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
31046497f6aSRichard HendersonREV              1111 1010 1001 ---- 1111 .... 1000 ....      @rdm
31146497f6aSRichard HendersonREV16            1111 1010 1001 ---- 1111 .... 1001 ....      @rdm
31246497f6aSRichard HendersonRBIT             1111 1010 1001 ---- 1111 .... 1010 ....      @rdm
31346497f6aSRichard HendersonREVSH            1111 1010 1001 ---- 1111 .... 1011 ....      @rdm
3144c97f5b2SRichard HendersonCLZ              1111 1010 1011 ---- 1111 .... 1000 ....      @rdm
3154c97f5b2SRichard Henderson
31663130596SRichard Henderson# Branches and miscellaneous control
31763130596SRichard Henderson
318d0b26644SRichard Henderson%msr_sysm        4:1 8:4
319d0b26644SRichard Henderson%mrs_sysm        4:1 16:4
3202cde9ea5SRichard Henderson%imm16_16_0      16:4 0:12
321360144f3SRichard Henderson%imm21           26:s1 11:1 13:1 16:6 0:11 !function=times_2
322360144f3SRichard Henderson&ci              cond imm
323d0b26644SRichard Henderson
324d0b26644SRichard Henderson{
325360144f3SRichard Henderson  # Group insn[25:23] = 111, which is cond=111x for the branch below,
326360144f3SRichard Henderson  # or unconditional, which would be illegal for the branch.
32745f11876SPeter Maydell  [
32845f11876SPeter Maydell    # Hints, and CPS
32963130596SRichard Henderson    {
33063130596SRichard Henderson      YIELD      1111 0011 1010 1111 1000 0000 0000 0001
33163130596SRichard Henderson      WFE        1111 0011 1010 1111 1000 0000 0000 0010
33263130596SRichard Henderson      WFI        1111 0011 1010 1111 1000 0000 0000 0011
33363130596SRichard Henderson
33463130596SRichard Henderson      # TODO: Implement SEV, SEVL; may help SMP performance.
33563130596SRichard Henderson      # SEV      1111 0011 1010 1111 1000 0000 0000 0100
33663130596SRichard Henderson      # SEVL     1111 0011 1010 1111 1000 0000 0000 0101
33763130596SRichard Henderson
33846f4976fSPeter Maydell      # For M-profile minimal-RAS ESB can be a NOP, which is the
33946f4976fSPeter Maydell      # default behaviour since it is in the hint space.
34046f4976fSPeter Maydell      # ESB      1111 0011 1010 1111 1000 0000 0001 0000
34146f4976fSPeter Maydell
34263130596SRichard Henderson      # The canonical nop ends in 0000 0000, but the whole rest
34363130596SRichard Henderson      # of the space is "reserved hint, behaves as nop".
34463130596SRichard Henderson      NOP        1111 0011 1010 1111 1000 0000 ---- ----
345519b8471SRichard Henderson
34652f83b9cSRichard Henderson      # If imod == '00' && M == '0' then SEE "Hint instructions", above.
34752f83b9cSRichard Henderson      CPS        1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \
34852f83b9cSRichard Henderson                 &cps
34945f11876SPeter Maydell    }
35052f83b9cSRichard Henderson
351519b8471SRichard Henderson    # Miscellaneous control
352519b8471SRichard Henderson    CLREX        1111 0011 1011 1111 1000 1111 0010 1111
353519b8471SRichard Henderson    DSB          1111 0011 1011 1111 1000 1111 0100 ----
354519b8471SRichard Henderson    DMB          1111 0011 1011 1111 1000 1111 0101 ----
355519b8471SRichard Henderson    ISB          1111 0011 1011 1111 1000 1111 0110 ----
356519b8471SRichard Henderson    SB           1111 0011 1011 1111 1000 1111 0111 0000
357519b8471SRichard Henderson
358d0b26644SRichard Henderson    # Note that the v7m insn overlaps both the normal and banked insn.
359d0b26644SRichard Henderson    {
360d0b26644SRichard Henderson      MRS_bank   1111 0011 111 r:1 .... 1000 rd:4   001. 0000  \
361d0b26644SRichard Henderson                 &mrs_bank sysm=%mrs_sysm
362d0b26644SRichard Henderson      MRS_reg    1111 0011 111 r:1 1111 1000 rd:4   0000 0000  &mrs_reg
363d0b26644SRichard Henderson      MRS_v7m    1111 0011 111 0   1111 1000 rd:4   sysm:8
364d0b26644SRichard Henderson    }
365d0b26644SRichard Henderson    {
366d0b26644SRichard Henderson      MSR_bank   1111 0011 100 r:1 rn:4 1000 ....   001. 0000  \
367d0b26644SRichard Henderson                 &msr_bank sysm=%msr_sysm
368d0b26644SRichard Henderson      MSR_reg    1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000  &msr_reg
369d0b26644SRichard Henderson      MSR_v7m    1111 0011 100 0   rn:4 1000 mask:2 00 sysm:8
370d0b26644SRichard Henderson    }
3714ed95abdSRichard Henderson    BXJ          1111 0011 1100 rm:4 1000 1111 0000 0000      &r
372ef11bc3cSRichard Henderson    {
373ef11bc3cSRichard Henderson      # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for
374ef11bc3cSRichard Henderson      # every other encoding of SUBS.  With v7VE, IMM=0 is redefined as ERET.
375ef11bc3cSRichard Henderson      # The distinction between the two only matters for Hyp mode.
376ef11bc3cSRichard Henderson      ERET       1111 0011 1101 1110 1000 1111 0000 0000
377ef11bc3cSRichard Henderson      SUB_rri    1111 0011 1101 1110 1000 1111 imm:8 \
378ef11bc3cSRichard Henderson                 &s_rri_rot rot=0 s=1 rd=15 rn=14
379ef11bc3cSRichard Henderson    }
3802cde9ea5SRichard Henderson    SMC          1111 0111 1111 imm:4 1000 0000 0000 0000     &i
3812cde9ea5SRichard Henderson    HVC          1111 0111 1110 ....  1000 .... .... ....     \
3822cde9ea5SRichard Henderson                 &i imm=%imm16_16_0
38386d21e4bSRichard Henderson    UDF          1111 0111 1111 ----  1010 ---- ---- ----
38445f11876SPeter Maydell  ]
385360144f3SRichard Henderson  B_cond_thumb   1111 0. cond:4 ...... 10.0 ............      &ci imm=%imm21
386360144f3SRichard Henderson}
3875e291fe1SRichard Henderson
3885e291fe1SRichard Henderson# Load/store (register, immediate, literal)
3895e291fe1SRichard Henderson
3905e291fe1SRichard Henderson@ldst_rr         .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \
3915e291fe1SRichard Henderson                 &ldst_rr p=1 w=0 u=1 shtype=0
3925e291fe1SRichard Henderson@ldst_ri_idx     .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \
3935e291fe1SRichard Henderson                 &ldst_ri w=1
3945e291fe1SRichard Henderson@ldst_ri_neg     .... .... .... rn:4 rt:4 .... imm:8 \
3955e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=0
3965e291fe1SRichard Henderson@ldst_ri_unp     .... .... .... rn:4 rt:4 .... imm:8 \
3975e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=1
3985e291fe1SRichard Henderson@ldst_ri_pos     .... .... .... rn:4 rt:4 imm:12 \
3995e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=1
4005e291fe1SRichard Henderson@ldst_ri_lit     .... .... u:1 ... .... rt:4 imm:12 \
4015e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 rn=15
4025e291fe1SRichard Henderson
4035e291fe1SRichard HendersonSTRB_rr          1111 1000 0000 .... .... 000000 .. ....      @ldst_rr
4045e291fe1SRichard HendersonSTRB_ri          1111 1000 0000 .... .... 1..1 ........       @ldst_ri_idx
4055e291fe1SRichard HendersonSTRB_ri          1111 1000 0000 .... .... 1100 ........       @ldst_ri_neg
4065e291fe1SRichard HendersonSTRBT_ri         1111 1000 0000 .... .... 1110 ........       @ldst_ri_unp
4075e291fe1SRichard HendersonSTRB_ri          1111 1000 1000 .... .... ............        @ldst_ri_pos
4085e291fe1SRichard Henderson
4095e291fe1SRichard HendersonSTRH_rr          1111 1000 0010 .... .... 000000 .. ....      @ldst_rr
4105e291fe1SRichard HendersonSTRH_ri          1111 1000 0010 .... .... 1..1 ........       @ldst_ri_idx
4115e291fe1SRichard HendersonSTRH_ri          1111 1000 0010 .... .... 1100 ........       @ldst_ri_neg
4125e291fe1SRichard HendersonSTRHT_ri         1111 1000 0010 .... .... 1110 ........       @ldst_ri_unp
4135e291fe1SRichard HendersonSTRH_ri          1111 1000 1010 .... .... ............        @ldst_ri_pos
4145e291fe1SRichard Henderson
4155e291fe1SRichard HendersonSTR_rr           1111 1000 0100 .... .... 000000 .. ....      @ldst_rr
4165e291fe1SRichard HendersonSTR_ri           1111 1000 0100 .... .... 1..1 ........       @ldst_ri_idx
4175e291fe1SRichard HendersonSTR_ri           1111 1000 0100 .... .... 1100 ........       @ldst_ri_neg
4185e291fe1SRichard HendersonSTRT_ri          1111 1000 0100 .... .... 1110 ........       @ldst_ri_unp
4195e291fe1SRichard HendersonSTR_ri           1111 1000 1100 .... .... ............        @ldst_ri_pos
4205e291fe1SRichard Henderson
4215e291fe1SRichard Henderson# Note that Load, unsigned (literal) overlaps all other load encodings.
4225e291fe1SRichard Henderson{
4235e291fe1SRichard Henderson  {
4245e291fe1SRichard Henderson    NOP          1111 1000 -001 1111 1111 ------------        # PLD
4255e291fe1SRichard Henderson    LDRB_ri      1111 1000 .001 1111 .... ............        @ldst_ri_lit
4265e291fe1SRichard Henderson  }
4275e291fe1SRichard Henderson  {
4285e291fe1SRichard Henderson    NOP          1111 1000 1001 ---- 1111 ------------        # PLD
4295e291fe1SRichard Henderson    LDRB_ri      1111 1000 1001 .... .... ............        @ldst_ri_pos
4305e291fe1SRichard Henderson  }
4315e291fe1SRichard Henderson  LDRB_ri        1111 1000 0001 .... .... 1..1 ........       @ldst_ri_idx
4325e291fe1SRichard Henderson  {
4335e291fe1SRichard Henderson    NOP          1111 1000 0001 ---- 1111 1100 --------       # PLD
4345e291fe1SRichard Henderson    LDRB_ri      1111 1000 0001 .... .... 1100 ........       @ldst_ri_neg
4355e291fe1SRichard Henderson  }
4365e291fe1SRichard Henderson  LDRBT_ri       1111 1000 0001 .... .... 1110 ........       @ldst_ri_unp
4375e291fe1SRichard Henderson  {
4385e291fe1SRichard Henderson    NOP          1111 1000 0001 ---- 1111 000000 -- ----      # PLD
4395e291fe1SRichard Henderson    LDRB_rr      1111 1000 0001 .... .... 000000 .. ....      @ldst_rr
4405e291fe1SRichard Henderson  }
4415e291fe1SRichard Henderson}
4425e291fe1SRichard Henderson{
4435e291fe1SRichard Henderson  {
4445e291fe1SRichard Henderson    NOP          1111 1000 -011 1111 1111 ------------        # PLD
4455e291fe1SRichard Henderson    LDRH_ri      1111 1000 .011 1111 .... ............        @ldst_ri_lit
4465e291fe1SRichard Henderson  }
4475e291fe1SRichard Henderson  {
4485e291fe1SRichard Henderson    NOP          1111 1000 1011 ---- 1111 ------------        # PLDW
4495e291fe1SRichard Henderson    LDRH_ri      1111 1000 1011 .... .... ............        @ldst_ri_pos
4505e291fe1SRichard Henderson  }
4515e291fe1SRichard Henderson  LDRH_ri        1111 1000 0011 .... .... 1..1 ........       @ldst_ri_idx
4525e291fe1SRichard Henderson  {
4535e291fe1SRichard Henderson    NOP          1111 1000 0011 ---- 1111 1100 --------       # PLDW
4545e291fe1SRichard Henderson    LDRH_ri      1111 1000 0011 .... .... 1100 ........       @ldst_ri_neg
4555e291fe1SRichard Henderson  }
4565e291fe1SRichard Henderson  LDRHT_ri       1111 1000 0011 .... .... 1110 ........       @ldst_ri_unp
4575e291fe1SRichard Henderson  {
4585e291fe1SRichard Henderson    NOP          1111 1000 0011 ---- 1111 000000 -- ----      # PLDW
4595e291fe1SRichard Henderson    LDRH_rr      1111 1000 0011 .... .... 000000 .. ....      @ldst_rr
4605e291fe1SRichard Henderson  }
4615e291fe1SRichard Henderson}
4625e291fe1SRichard Henderson{
4635e291fe1SRichard Henderson  LDR_ri         1111 1000 .101 1111 .... ............        @ldst_ri_lit
4645e291fe1SRichard Henderson  LDR_ri         1111 1000 1101 .... .... ............        @ldst_ri_pos
4655e291fe1SRichard Henderson  LDR_ri         1111 1000 0101 .... .... 1..1 ........       @ldst_ri_idx
4665e291fe1SRichard Henderson  LDR_ri         1111 1000 0101 .... .... 1100 ........       @ldst_ri_neg
4675e291fe1SRichard Henderson  LDRT_ri        1111 1000 0101 .... .... 1110 ........       @ldst_ri_unp
4685e291fe1SRichard Henderson  LDR_rr         1111 1000 0101 .... .... 000000 .. ....      @ldst_rr
4695e291fe1SRichard Henderson}
4705e291fe1SRichard Henderson# NOPs here are PLI.
4715e291fe1SRichard Henderson{
4725e291fe1SRichard Henderson  {
4735e291fe1SRichard Henderson    NOP          1111 1001 -001 1111 1111 ------------
4745e291fe1SRichard Henderson    LDRSB_ri     1111 1001 .001 1111 .... ............        @ldst_ri_lit
4755e291fe1SRichard Henderson  }
4765e291fe1SRichard Henderson  {
4775e291fe1SRichard Henderson    NOP          1111 1001 1001 ---- 1111 ------------
4785e291fe1SRichard Henderson    LDRSB_ri     1111 1001 1001 .... .... ............        @ldst_ri_pos
4795e291fe1SRichard Henderson  }
4805e291fe1SRichard Henderson  LDRSB_ri       1111 1001 0001 .... .... 1..1 ........       @ldst_ri_idx
4815e291fe1SRichard Henderson  {
4825e291fe1SRichard Henderson    NOP          1111 1001 0001 ---- 1111 1100 --------
4835e291fe1SRichard Henderson    LDRSB_ri     1111 1001 0001 .... .... 1100 ........       @ldst_ri_neg
4845e291fe1SRichard Henderson  }
4855e291fe1SRichard Henderson  LDRSBT_ri      1111 1001 0001 .... .... 1110 ........       @ldst_ri_unp
4865e291fe1SRichard Henderson  {
4875e291fe1SRichard Henderson    NOP          1111 1001 0001 ---- 1111 000000 -- ----
4885e291fe1SRichard Henderson    LDRSB_rr     1111 1001 0001 .... .... 000000 .. ....      @ldst_rr
4895e291fe1SRichard Henderson  }
4905e291fe1SRichard Henderson}
4915e291fe1SRichard Henderson# NOPs here are unallocated memory hints, treated as NOP.
4925e291fe1SRichard Henderson{
4935e291fe1SRichard Henderson  {
4945e291fe1SRichard Henderson    NOP          1111 1001 -011 1111 1111 ------------
4955e291fe1SRichard Henderson    LDRSH_ri     1111 1001 .011 1111 .... ............        @ldst_ri_lit
4965e291fe1SRichard Henderson  }
4975e291fe1SRichard Henderson  {
4985e291fe1SRichard Henderson    NOP          1111 1001 1011 ---- 1111 ------------
4995e291fe1SRichard Henderson    LDRSH_ri     1111 1001 1011 .... .... ............        @ldst_ri_pos
5005e291fe1SRichard Henderson  }
5015e291fe1SRichard Henderson  LDRSH_ri       1111 1001 0011 .... .... 1..1 ........       @ldst_ri_idx
5025e291fe1SRichard Henderson  {
5035e291fe1SRichard Henderson    NOP          1111 1001 0011 ---- 1111 1100 --------
5045e291fe1SRichard Henderson    LDRSH_ri     1111 1001 0011 .... .... 1100 ........       @ldst_ri_neg
5055e291fe1SRichard Henderson  }
5065e291fe1SRichard Henderson  LDRSHT_ri      1111 1001 0011 .... .... 1110 ........       @ldst_ri_unp
5075e291fe1SRichard Henderson  {
5085e291fe1SRichard Henderson    NOP          1111 1001 0011 ---- 1111 000000 -- ----
5095e291fe1SRichard Henderson    LDRSH_rr     1111 1001 0011 .... .... 000000 .. ....      @ldst_rr
5105e291fe1SRichard Henderson  }
5115e291fe1SRichard Henderson}
5125e291fe1SRichard Henderson
5135e291fe1SRichard Henderson%imm8x4          0:8 !function=times_4
5145e291fe1SRichard Henderson&ldst_ri2        p w u rn rt rt2 imm
5155e291fe1SRichard Henderson@ldstd_ri8       .... .... u:1 ... rn:4 rt:4 rt2:4 ........   \
5165e291fe1SRichard Henderson                 &ldst_ri2 imm=%imm8x4
5175e291fe1SRichard Henderson
5185e291fe1SRichard HendersonSTRD_ri_t32      1110 1000 .110 .... .... .... ........    @ldstd_ri8 w=1 p=0
5195e291fe1SRichard HendersonLDRD_ri_t32      1110 1000 .111 .... .... .... ........    @ldstd_ri8 w=1 p=0
5205e291fe1SRichard Henderson
5215e291fe1SRichard HendersonSTRD_ri_t32      1110 1001 .100 .... .... .... ........    @ldstd_ri8 w=0 p=1
5225e291fe1SRichard HendersonLDRD_ri_t32      1110 1001 .101 .... .... .... ........    @ldstd_ri8 w=0 p=1
5235e291fe1SRichard Henderson
5245e291fe1SRichard HendersonSTRD_ri_t32      1110 1001 .110 .... .... .... ........    @ldstd_ri8 w=1 p=1
52535d240acSRichard Henderson{
52635d240acSRichard Henderson  SG             1110 1001 0111 1111 1110 1001 01111111
5275e291fe1SRichard Henderson  LDRD_ri_t32    1110 1001 .111 .... .... .... ........    @ldstd_ri8 w=1 p=1
52835d240acSRichard Henderson}
5291efdd407SRichard Henderson
530808092bbSRichard Henderson# Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
5311efdd407SRichard Henderson
5321efdd407SRichard Henderson@strex_i         .... .... .... rn:4 rt:4 rd:4 .... .... \
5331efdd407SRichard Henderson                 &strex rt2=15 imm=%imm8x4
5341efdd407SRichard Henderson@strex_0         .... .... .... rn:4 rt:4 .... .... rd:4 \
5351efdd407SRichard Henderson                 &strex rt2=15 imm=0
5361efdd407SRichard Henderson@strex_d         .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
5371efdd407SRichard Henderson                 &strex imm=0
5381efdd407SRichard Henderson
5391efdd407SRichard Henderson@ldrex_i         .... .... .... rn:4 rt:4 .... .... .... \
5401efdd407SRichard Henderson                 &ldrex rt2=15 imm=%imm8x4
5411efdd407SRichard Henderson@ldrex_0         .... .... .... rn:4 rt:4 .... .... .... \
5421efdd407SRichard Henderson                 &ldrex rt2=15 imm=0
5431efdd407SRichard Henderson@ldrex_d         .... .... .... rn:4 rt:4 rt2:4 .... .... \
5441efdd407SRichard Henderson                 &ldrex imm=0
5451efdd407SRichard Henderson
546d449f174SRichard Henderson{
547d449f174SRichard Henderson  TT             1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000
5481efdd407SRichard Henderson  STREX          1110 1000 0100 .... .... .... .... ....      @strex_i
549d449f174SRichard Henderson}
5501efdd407SRichard HendersonSTREXB           1110 1000 1100 .... .... 1111 0100 ....      @strex_0
5511efdd407SRichard HendersonSTREXH           1110 1000 1100 .... .... 1111 0101 ....      @strex_0
5521efdd407SRichard HendersonSTREXD_t32       1110 1000 1100 .... .... .... 0111 ....      @strex_d
5531efdd407SRichard Henderson
5541efdd407SRichard HendersonSTLEX            1110 1000 1100 .... .... 1111 1110 ....      @strex_0
5551efdd407SRichard HendersonSTLEXB           1110 1000 1100 .... .... 1111 1100 ....      @strex_0
5561efdd407SRichard HendersonSTLEXH           1110 1000 1100 .... .... 1111 1101 ....      @strex_0
5571efdd407SRichard HendersonSTLEXD_t32       1110 1000 1100 .... .... .... 1111 ....      @strex_d
5581efdd407SRichard Henderson
5591efdd407SRichard HendersonSTL              1110 1000 1100 .... .... 1111 1010 1111      @ldrex_0
5601efdd407SRichard HendersonSTLB             1110 1000 1100 .... .... 1111 1000 1111      @ldrex_0
5611efdd407SRichard HendersonSTLH             1110 1000 1100 .... .... 1111 1001 1111      @ldrex_0
5621efdd407SRichard Henderson
5631efdd407SRichard HendersonLDREX            1110 1000 0101 .... .... 1111 .... ....      @ldrex_i
5641efdd407SRichard HendersonLDREXB           1110 1000 1101 .... .... 1111 0100 1111      @ldrex_0
5651efdd407SRichard HendersonLDREXH           1110 1000 1101 .... .... 1111 0101 1111      @ldrex_0
5661efdd407SRichard HendersonLDREXD_t32       1110 1000 1101 .... .... .... 0111 1111      @ldrex_d
5671efdd407SRichard Henderson
5681efdd407SRichard HendersonLDAEX            1110 1000 1101 .... .... 1111 1110 1111      @ldrex_0
5691efdd407SRichard HendersonLDAEXB           1110 1000 1101 .... .... 1111 1100 1111      @ldrex_0
5701efdd407SRichard HendersonLDAEXH           1110 1000 1101 .... .... 1111 1101 1111      @ldrex_0
5711efdd407SRichard HendersonLDAEXD_t32       1110 1000 1101 .... .... .... 1111 1111      @ldrex_d
5721efdd407SRichard Henderson
5731efdd407SRichard HendersonLDA              1110 1000 1101 .... .... 1111 1010 1111      @ldrex_0
5741efdd407SRichard HendersonLDAB             1110 1000 1101 .... .... 1111 1000 1111      @ldrex_0
5751efdd407SRichard HendersonLDAH             1110 1000 1101 .... .... 1111 1001 1111      @ldrex_0
576adf1a566SRichard Henderson
577808092bbSRichard Henderson&tbranch         rn rm
578808092bbSRichard Henderson@tbranch         .... .... .... rn:4 .... .... .... rm:4      &tbranch
579808092bbSRichard Henderson
580808092bbSRichard HendersonTBB              1110 1000 1101 .... 1111 0000 0000 ....      @tbranch
581808092bbSRichard HendersonTBH              1110 1000 1101 .... 1111 0000 0001 ....      @tbranch
582808092bbSRichard Henderson
583adf1a566SRichard Henderson# Parallel addition and subtraction
584adf1a566SRichard Henderson
585adf1a566SRichard HendersonSADD8            1111 1010 1000 .... 1111 .... 0000 ....      @rndm
586adf1a566SRichard HendersonQADD8            1111 1010 1000 .... 1111 .... 0001 ....      @rndm
587adf1a566SRichard HendersonSHADD8           1111 1010 1000 .... 1111 .... 0010 ....      @rndm
588adf1a566SRichard HendersonUADD8            1111 1010 1000 .... 1111 .... 0100 ....      @rndm
589adf1a566SRichard HendersonUQADD8           1111 1010 1000 .... 1111 .... 0101 ....      @rndm
590adf1a566SRichard HendersonUHADD8           1111 1010 1000 .... 1111 .... 0110 ....      @rndm
591adf1a566SRichard Henderson
592adf1a566SRichard HendersonSADD16           1111 1010 1001 .... 1111 .... 0000 ....      @rndm
593adf1a566SRichard HendersonQADD16           1111 1010 1001 .... 1111 .... 0001 ....      @rndm
594adf1a566SRichard HendersonSHADD16          1111 1010 1001 .... 1111 .... 0010 ....      @rndm
595adf1a566SRichard HendersonUADD16           1111 1010 1001 .... 1111 .... 0100 ....      @rndm
596adf1a566SRichard HendersonUQADD16          1111 1010 1001 .... 1111 .... 0101 ....      @rndm
597adf1a566SRichard HendersonUHADD16          1111 1010 1001 .... 1111 .... 0110 ....      @rndm
598adf1a566SRichard Henderson
599adf1a566SRichard HendersonSASX             1111 1010 1010 .... 1111 .... 0000 ....      @rndm
600adf1a566SRichard HendersonQASX             1111 1010 1010 .... 1111 .... 0001 ....      @rndm
601adf1a566SRichard HendersonSHASX            1111 1010 1010 .... 1111 .... 0010 ....      @rndm
602adf1a566SRichard HendersonUASX             1111 1010 1010 .... 1111 .... 0100 ....      @rndm
603adf1a566SRichard HendersonUQASX            1111 1010 1010 .... 1111 .... 0101 ....      @rndm
604adf1a566SRichard HendersonUHASX            1111 1010 1010 .... 1111 .... 0110 ....      @rndm
605adf1a566SRichard Henderson
606adf1a566SRichard HendersonSSUB8            1111 1010 1100 .... 1111 .... 0000 ....      @rndm
607adf1a566SRichard HendersonQSUB8            1111 1010 1100 .... 1111 .... 0001 ....      @rndm
608adf1a566SRichard HendersonSHSUB8           1111 1010 1100 .... 1111 .... 0010 ....      @rndm
609adf1a566SRichard HendersonUSUB8            1111 1010 1100 .... 1111 .... 0100 ....      @rndm
610adf1a566SRichard HendersonUQSUB8           1111 1010 1100 .... 1111 .... 0101 ....      @rndm
611adf1a566SRichard HendersonUHSUB8           1111 1010 1100 .... 1111 .... 0110 ....      @rndm
612adf1a566SRichard Henderson
613adf1a566SRichard HendersonSSUB16           1111 1010 1101 .... 1111 .... 0000 ....      @rndm
614adf1a566SRichard HendersonQSUB16           1111 1010 1101 .... 1111 .... 0001 ....      @rndm
615adf1a566SRichard HendersonSHSUB16          1111 1010 1101 .... 1111 .... 0010 ....      @rndm
616adf1a566SRichard HendersonUSUB16           1111 1010 1101 .... 1111 .... 0100 ....      @rndm
617adf1a566SRichard HendersonUQSUB16          1111 1010 1101 .... 1111 .... 0101 ....      @rndm
618adf1a566SRichard HendersonUHSUB16          1111 1010 1101 .... 1111 .... 0110 ....      @rndm
619adf1a566SRichard Henderson
620adf1a566SRichard HendersonSSAX             1111 1010 1110 .... 1111 .... 0000 ....      @rndm
621adf1a566SRichard HendersonQSAX             1111 1010 1110 .... 1111 .... 0001 ....      @rndm
622adf1a566SRichard HendersonSHSAX            1111 1010 1110 .... 1111 .... 0010 ....      @rndm
623adf1a566SRichard HendersonUSAX             1111 1010 1110 .... 1111 .... 0100 ....      @rndm
624adf1a566SRichard HendersonUQSAX            1111 1010 1110 .... 1111 .... 0101 ....      @rndm
625adf1a566SRichard HendersonUHSAX            1111 1010 1110 .... 1111 .... 0110 ....      @rndm
62646497f6aSRichard Henderson
62746497f6aSRichard Henderson# Register extends
62846497f6aSRichard Henderson
62946497f6aSRichard Henderson@rrr_rot         .... .... .... rn:4 .... rd:4 .. rot:2 rm:4  &rrr_rot
63046497f6aSRichard Henderson
63146497f6aSRichard HendersonSXTAH            1111 1010 0000 .... 1111 .... 10.. ....      @rrr_rot
63246497f6aSRichard HendersonUXTAH            1111 1010 0001 .... 1111 .... 10.. ....      @rrr_rot
63346497f6aSRichard HendersonSXTAB16          1111 1010 0010 .... 1111 .... 10.. ....      @rrr_rot
63446497f6aSRichard HendersonUXTAB16          1111 1010 0011 .... 1111 .... 10.. ....      @rrr_rot
63546497f6aSRichard HendersonSXTAB            1111 1010 0100 .... 1111 .... 10.. ....      @rrr_rot
63646497f6aSRichard HendersonUXTAB            1111 1010 0101 .... 1111 .... 10.. ....      @rrr_rot
637c5c426d4SRichard Henderson
638c5c426d4SRichard Henderson# Load/store multiple
639c5c426d4SRichard Henderson
640c5c426d4SRichard Henderson@ldstm           .... .... .. w:1 . rn:4 list:16              &ldst_block u=0
641c5c426d4SRichard Henderson
642c5c426d4SRichard HendersonSTM_t32          1110 1000 10.0 .... ................         @ldstm i=1 b=0
643c5c426d4SRichard HendersonSTM_t32          1110 1001 00.0 .... ................         @ldstm i=0 b=1
6446e21a013SPeter Maydell{
6456e21a013SPeter Maydell  # Rn=15 UNDEFs for LDM; M-profile CLRM uses that encoding
6466e21a013SPeter Maydell  CLRM           1110 1000 1001 1111 list:16
647c5c426d4SRichard Henderson  LDM_t32        1110 1000 10.1 .... ................         @ldstm i=1 b=0
6486e21a013SPeter Maydell}
649c5c426d4SRichard HendersonLDM_t32          1110 1001 00.1 .... ................         @ldstm i=0 b=1
650360144f3SRichard Henderson
651885782a7SRichard Henderson&rfe             !extern rn w pu
652885782a7SRichard Henderson@rfe             .... .... .. w:1 . rn:4 ................     &rfe
653885782a7SRichard Henderson
654885782a7SRichard HendersonRFE              1110 1000 00.1 .... 1100000000000000         @rfe pu=2
655885782a7SRichard HendersonRFE              1110 1001 10.1 .... 1100000000000000         @rfe pu=1
656885782a7SRichard Henderson
657885782a7SRichard Henderson&srs             !extern mode w pu
658885782a7SRichard Henderson@srs             .... .... .. w:1 . .... ........... mode:5   &srs
659885782a7SRichard Henderson
660885782a7SRichard HendersonSRS              1110 1000 00.0 1101 1100 0000 000. ....      @srs pu=2
661885782a7SRichard HendersonSRS              1110 1001 10.0 1101 1100 0000 000. ....      @srs pu=1
662885782a7SRichard Henderson
6634c498dcfSPeter Maydell# Coprocessor instructions
6644c498dcfSPeter Maydell
6654c498dcfSPeter Maydell# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the
6664c498dcfSPeter Maydell# other coprocessor instructions always UNDEF.
6674c498dcfSPeter Maydell# The trans_ functions for these will ignore cp values 8..13 for v7 or
6684c498dcfSPeter Maydell# earlier, and 0..13 for v8 and later, because those areas of the
6694c498dcfSPeter Maydell# encoding space may be used for other things, such as VFP or Neon.
6704c498dcfSPeter Maydell
6714c498dcfSPeter Maydell@mcr             .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4
6724c498dcfSPeter Maydell@mcrr            .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4
6734c498dcfSPeter Maydell
6744c498dcfSPeter MaydellMCRR             1110 1100 0100 .... .... .... .... .... @mcrr
6754c498dcfSPeter MaydellMRRC             1110 1100 0101 .... .... .... .... .... @mcrr
6764c498dcfSPeter Maydell
6774c498dcfSPeter MaydellMCR              1110 1110 ... 0 .... .... .... ... 1 .... @mcr
6784c498dcfSPeter MaydellMRC              1110 1110 ... 1 .... .... .... ... 1 .... @mcr
6794c498dcfSPeter Maydell
680360144f3SRichard Henderson# Branches
681360144f3SRichard Henderson
682360144f3SRichard Henderson%imm24           26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24
683360144f3SRichard Henderson@branch24        ................................             &i imm=%imm24
684360144f3SRichard Henderson
685360144f3SRichard HendersonB                1111 0. .......... 10.1 ............         @branch24
686360144f3SRichard HendersonBL               1111 0. .......... 11.1 ............         @branch24
68705903f03SPeter Maydell{
68805903f03SPeter Maydell  # BLX_i is non-M-profile only
689360144f3SRichard Henderson  BLX_i          1111 0. .......... 11.0 ............         @branch24
69005903f03SPeter Maydell  # M-profile only: loop and branch insns
69105903f03SPeter Maydell  [
69205903f03SPeter Maydell    # All these BF insns have boff != 0b0000; we NOP them all
69305903f03SPeter Maydell    BF           1111 0 boff:4  ------- 1100 - ---------- 1    # BFL
69405903f03SPeter Maydell    BF           1111 0 boff:4 0 ------ 1110 - ---------- 1    # BFCSEL
69505903f03SPeter Maydell    BF           1111 0 boff:4 10 ----- 1110 - ---------- 1    # BF
69605903f03SPeter Maydell    BF           1111 0 boff:4 11 ----- 1110 0 0000000000 1    # BFX, BFLX
69705903f03SPeter Maydell  ]
698b7226369SPeter Maydell  [
699b7226369SPeter Maydell    # LE and WLS immediate
700b7226369SPeter Maydell    %lob_imm 1:10 11:1 !function=times_2
701b7226369SPeter Maydell
70240a36f00SPeter Maydell    DLS          1111 0 0000 100     rn:4 1110 0000 0000 0001 size=4
7036822abfdSPeter Maydell    WLS          1111 0 0000 100     rn:4 1100 . .......... 1 imm=%lob_imm size=4
7046822abfdSPeter Maydell    {
705a454ea1eSPeter Maydell      LE         1111 0 0000 0 f:1 tp:1 1111 1100 . .......... 1 imm=%lob_imm
7066822abfdSPeter Maydell      # This is WLSTP
7076822abfdSPeter Maydell      WLS        1111 0 0000 0 size:2 rn:4 1100 . .......... 1 imm=%lob_imm
7086822abfdSPeter Maydell    }
70940a36f00SPeter Maydell    {
71076c32d72SPeter Maydell      LCTP       1111 0 0000 000     1111 1110 0000 0000 0001
71140a36f00SPeter Maydell      # This is DLSTP
71240a36f00SPeter Maydell      DLS        1111 0 0000 0 size:2 rn:4 1110 0000 0000 0001
71340a36f00SPeter Maydell    }
714b7226369SPeter Maydell  ]
71505903f03SPeter Maydell}
716