xref: /qemu/target/arm/tcg/t32.decode (revision db36e14501e8745a6e23f611f917d40a27cc5dee)
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
51f4ae6c8cSPeter Maydell&mve_shl_ri      rdalo rdahi shim
520aa4b4c3SPeter Maydell&mve_shl_rr      rdalo rdahi rm
5346321d47SPeter Maydell&mve_sh_ri       rda shim
5404ea4d3cSPeter Maydell&mve_sh_rr       rda rm
55f4ae6c8cSPeter Maydell
56f4ae6c8cSPeter Maydell# rdahi: bits [3:1] from insn, bit 0 is 1
57f4ae6c8cSPeter Maydell# rdalo: bits [3:1] from insn, bit 0 is 0
58f4ae6c8cSPeter Maydell%rdahi_9 9:3 !function=times_2_plus_1
59f4ae6c8cSPeter Maydell%rdalo_17 17:3 !function=times_2
60f4ae6c8cSPeter Maydell
6125ae32c5SRichard Henderson# Data-processing (register)
6225ae32c5SRichard Henderson
6325ae32c5SRichard Henderson%imm5_12_6       12:3 6:2
6425ae32c5SRichard Henderson
6525ae32c5SRichard Henderson@s_rrr_shi       ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \
6625ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6
6725ae32c5SRichard Henderson@s_rxr_shi       ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \
6825ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6 rn=0
6925ae32c5SRichard Henderson@S_xrr_shi       ....... .... .   rn:4 .... .... .. shty:2 rm:4 \
7025ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6 s=1 rd=0
7125ae32c5SRichard Henderson
72f4ae6c8cSPeter Maydell@mve_shl_ri      ....... .... . ... . . ... ... . .. .. .... \
73f4ae6c8cSPeter Maydell                 &mve_shl_ri shim=%imm5_12_6 rdalo=%rdalo_17 rdahi=%rdahi_9
740aa4b4c3SPeter Maydell@mve_shl_rr      ....... .... . ... . rm:4  ... . .. .. .... \
750aa4b4c3SPeter Maydell                 &mve_shl_rr rdalo=%rdalo_17 rdahi=%rdahi_9
7646321d47SPeter Maydell@mve_sh_ri       ....... .... . rda:4 . ... ... . .. .. .... \
7746321d47SPeter Maydell                 &mve_sh_ri shim=%imm5_12_6
7804ea4d3cSPeter Maydell@mve_sh_rr       ....... .... . rda:4 rm:4 .... .... .... &mve_sh_rr
79f4ae6c8cSPeter Maydell
8025ae32c5SRichard Henderson{
8125ae32c5SRichard Henderson  TST_xrri       1110101 0000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
8225ae32c5SRichard Henderson  AND_rrri       1110101 0000 . .... 0 ... .... .... ....     @s_rrr_shi
8325ae32c5SRichard Henderson}
8425ae32c5SRichard HendersonBIC_rrri         1110101 0001 . .... 0 ... .... .... ....     @s_rrr_shi
8525ae32c5SRichard Henderson{
86f4ae6c8cSPeter Maydell  # The v8.1M MVE shift insns overlap in encoding with MOVS/ORRS
87f4ae6c8cSPeter Maydell  # and are distinguished by having Rm==13 or 15. Those are UNPREDICTABLE
88f4ae6c8cSPeter Maydell  # cases for MOVS/ORRS. We decode the MVE cases first, ensuring that
89f4ae6c8cSPeter Maydell  # they explicitly call unallocated_encoding() for cases that must UNDEF
90f4ae6c8cSPeter Maydell  # (eg "using a new shift insn on a v8.1M CPU without MVE"), and letting
91f4ae6c8cSPeter Maydell  # the rest fall through (where ORR_rrri and MOV_rxri will end up
92f4ae6c8cSPeter Maydell  # handling them as r13 and r15 accesses with the same semantics as A32).
93f4ae6c8cSPeter Maydell  [
9446321d47SPeter Maydell    {
9546321d47SPeter Maydell      UQSHL_ri   1110101 0010 1 ....  0 ...  1111 .. 00 1111  @mve_sh_ri
96f4ae6c8cSPeter Maydell      LSLL_ri    1110101 0010 1 ... 0 0 ... ... 1 .. 00 1111  @mve_shl_ri
97f4ae6c8cSPeter Maydell      UQSHLL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 00 1111  @mve_shl_ri
9846321d47SPeter Maydell    }
9946321d47SPeter Maydell
10046321d47SPeter Maydell    {
10146321d47SPeter Maydell      URSHR_ri   1110101 0010 1 ....  0 ...  1111 .. 01 1111  @mve_sh_ri
10246321d47SPeter Maydell      LSRL_ri    1110101 0010 1 ... 0 0 ... ... 1 .. 01 1111  @mve_shl_ri
103f4ae6c8cSPeter Maydell      URSHRL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 01 1111  @mve_shl_ri
10446321d47SPeter Maydell    }
10546321d47SPeter Maydell
10646321d47SPeter Maydell    {
10746321d47SPeter Maydell      SRSHR_ri   1110101 0010 1 ....  0 ...  1111 .. 10 1111  @mve_sh_ri
10846321d47SPeter Maydell      ASRL_ri    1110101 0010 1 ... 0 0 ... ... 1 .. 10 1111  @mve_shl_ri
109f4ae6c8cSPeter Maydell      SRSHRL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 10 1111  @mve_shl_ri
11046321d47SPeter Maydell    }
11146321d47SPeter Maydell
11246321d47SPeter Maydell    {
11346321d47SPeter Maydell      SQSHL_ri   1110101 0010 1 ....  0 ...  1111 .. 11 1111  @mve_sh_ri
114f4ae6c8cSPeter Maydell      SQSHLL_ri  1110101 0010 1 ... 1 0 ... ... 1 .. 11 1111  @mve_shl_ri
11546321d47SPeter Maydell    }
1160aa4b4c3SPeter Maydell
11704ea4d3cSPeter Maydell    {
11804ea4d3cSPeter Maydell      UQRSHL_rr    1110101 0010 1 ....  ....  1111 0000 1101  @mve_sh_rr
1190aa4b4c3SPeter Maydell      LSLL_rr      1110101 0010 1 ... 0 .... ... 1 0000 1101  @mve_shl_rr
1200aa4b4c3SPeter Maydell      UQRSHLL64_rr 1110101 0010 1 ... 1 .... ... 1 0000 1101  @mve_shl_rr
12104ea4d3cSPeter Maydell    }
12204ea4d3cSPeter Maydell
12304ea4d3cSPeter Maydell    {
12404ea4d3cSPeter Maydell      SQRSHR_rr    1110101 0010 1 ....  ....  1111 0010 1101  @mve_sh_rr
12504ea4d3cSPeter Maydell      ASRL_rr      1110101 0010 1 ... 0 .... ... 1 0010 1101  @mve_shl_rr
1260aa4b4c3SPeter Maydell      SQRSHRL64_rr 1110101 0010 1 ... 1 .... ... 1 0010 1101  @mve_shl_rr
12704ea4d3cSPeter Maydell    }
12804ea4d3cSPeter Maydell
1290aa4b4c3SPeter Maydell    UQRSHLL48_rr 1110101 0010 1 ... 1 ....  ... 1  1000 1101  @mve_shl_rr
1300aa4b4c3SPeter Maydell    SQRSHRL48_rr 1110101 0010 1 ... 1 ....  ... 1  1010 1101  @mve_shl_rr
131f4ae6c8cSPeter Maydell  ]
132f4ae6c8cSPeter Maydell
13325ae32c5SRichard Henderson  MOV_rxri       1110101 0010 . 1111 0 ... .... .... ....     @s_rxr_shi
13425ae32c5SRichard Henderson  ORR_rrri       1110101 0010 . .... 0 ... .... .... ....     @s_rrr_shi
1350aa4b4c3SPeter Maydell
1360aa4b4c3SPeter Maydell  # v8.1M CSEL and friends
1370aa4b4c3SPeter Maydell  CSEL           1110101 0010 1 rn:4 10 op:2 rd:4 fcond:4 rm:4
13825ae32c5SRichard Henderson}
13925ae32c5SRichard Henderson{
14025ae32c5SRichard Henderson  MVN_rxri       1110101 0011 . 1111 0 ... .... .... ....     @s_rxr_shi
14125ae32c5SRichard Henderson  ORN_rrri       1110101 0011 . .... 0 ... .... .... ....     @s_rrr_shi
14225ae32c5SRichard Henderson}
14325ae32c5SRichard Henderson{
14425ae32c5SRichard Henderson  TEQ_xrri       1110101 0100 1 .... 0 ... 1111 .... ....     @S_xrr_shi
14525ae32c5SRichard Henderson  EOR_rrri       1110101 0100 . .... 0 ... .... .... ....     @s_rrr_shi
14625ae32c5SRichard Henderson}
14746497f6aSRichard HendersonPKH              1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
14846497f6aSRichard Henderson                 &pkh imm=%imm5_12_6
14925ae32c5SRichard Henderson{
15025ae32c5SRichard Henderson  CMN_xrri       1110101 1000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
15125ae32c5SRichard Henderson  ADD_rrri       1110101 1000 . .... 0 ... .... .... ....     @s_rrr_shi
15225ae32c5SRichard Henderson}
15325ae32c5SRichard HendersonADC_rrri         1110101 1010 . .... 0 ... .... .... ....     @s_rrr_shi
15425ae32c5SRichard HendersonSBC_rrri         1110101 1011 . .... 0 ... .... .... ....     @s_rrr_shi
15525ae32c5SRichard Henderson{
15625ae32c5SRichard Henderson  CMP_xrri       1110101 1101 1 .... 0 ... 1111 .... ....     @S_xrr_shi
15725ae32c5SRichard Henderson  SUB_rrri       1110101 1101 . .... 0 ... .... .... ....     @s_rrr_shi
15825ae32c5SRichard Henderson}
15925ae32c5SRichard HendersonRSB_rrri         1110101 1110 . .... 0 ... .... .... ....     @s_rrr_shi
1605be2c123SRichard Henderson
1615be2c123SRichard Henderson# Data-processing (register-shifted register)
1625be2c123SRichard Henderson
1635be2c123SRichard HendersonMOV_rxrr         1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
1645be2c123SRichard Henderson                 &s_rrr_shr rn=0
165581c6ebdSRichard Henderson
166581c6ebdSRichard Henderson# Data-processing (immediate)
167581c6ebdSRichard Henderson
168581c6ebdSRichard Henderson%t32extrot       26:1 12:3 0:8  !function=t32_expandimm_rot
169581c6ebdSRichard Henderson%t32extimm       26:1 12:3 0:8  !function=t32_expandimm_imm
170581c6ebdSRichard Henderson
171581c6ebdSRichard Henderson@s_rri_rot       ....... .... s:1 rn:4 . ... rd:4 ........ \
172581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot
173581c6ebdSRichard Henderson@s_rxi_rot       ....... .... s:1 .... . ... rd:4 ........ \
174581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0
175581c6ebdSRichard Henderson@S_xri_rot       ....... .... .   rn:4 . ... .... ........ \
176581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0
177581c6ebdSRichard Henderson
178581c6ebdSRichard Henderson{
179581c6ebdSRichard Henderson  TST_xri        1111 0.0 0000 1 .... 0 ... 1111 ........     @S_xri_rot
180581c6ebdSRichard Henderson  AND_rri        1111 0.0 0000 . .... 0 ... .... ........     @s_rri_rot
181581c6ebdSRichard Henderson}
182581c6ebdSRichard HendersonBIC_rri          1111 0.0 0001 . .... 0 ... .... ........     @s_rri_rot
183581c6ebdSRichard Henderson{
184581c6ebdSRichard Henderson  MOV_rxi        1111 0.0 0010 . 1111 0 ... .... ........     @s_rxi_rot
185581c6ebdSRichard Henderson  ORR_rri        1111 0.0 0010 . .... 0 ... .... ........     @s_rri_rot
186581c6ebdSRichard Henderson}
187581c6ebdSRichard Henderson{
188581c6ebdSRichard Henderson  MVN_rxi        1111 0.0 0011 . 1111 0 ... .... ........     @s_rxi_rot
189581c6ebdSRichard Henderson  ORN_rri        1111 0.0 0011 . .... 0 ... .... ........     @s_rri_rot
190581c6ebdSRichard Henderson}
191581c6ebdSRichard Henderson{
192581c6ebdSRichard Henderson  TEQ_xri        1111 0.0 0100 1 .... 0 ... 1111 ........     @S_xri_rot
193581c6ebdSRichard Henderson  EOR_rri        1111 0.0 0100 . .... 0 ... .... ........     @s_rri_rot
194581c6ebdSRichard Henderson}
195581c6ebdSRichard Henderson{
196581c6ebdSRichard Henderson  CMN_xri        1111 0.0 1000 1 .... 0 ... 1111 ........     @S_xri_rot
197581c6ebdSRichard Henderson  ADD_rri        1111 0.0 1000 . .... 0 ... .... ........     @s_rri_rot
198581c6ebdSRichard Henderson}
199581c6ebdSRichard HendersonADC_rri          1111 0.0 1010 . .... 0 ... .... ........     @s_rri_rot
200581c6ebdSRichard HendersonSBC_rri          1111 0.0 1011 . .... 0 ... .... ........     @s_rri_rot
201581c6ebdSRichard Henderson{
202581c6ebdSRichard Henderson  CMP_xri        1111 0.0 1101 1 .... 0 ... 1111 ........     @S_xri_rot
203581c6ebdSRichard Henderson  SUB_rri        1111 0.0 1101 . .... 0 ... .... ........     @s_rri_rot
204581c6ebdSRichard Henderson}
205581c6ebdSRichard HendersonRSB_rri          1111 0.0 1110 . .... 0 ... .... ........     @s_rri_rot
206bd92fe35SRichard Henderson
207145952e8SRichard Henderson# Data processing (plain binary immediate)
208145952e8SRichard Henderson
209145952e8SRichard Henderson%imm12_26_12_0   26:1 12:3 0:8
210145952e8SRichard Henderson%neg12_26_12_0   26:1 12:3 0:8 !function=negate
211145952e8SRichard Henderson@s0_rri_12       .... ... .... . rn:4 . ... rd:4 ........ \
212145952e8SRichard Henderson                 &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
213145952e8SRichard Henderson
214145952e8SRichard Henderson{
215145952e8SRichard Henderson  ADR            1111 0.1 0000 0 1111 0 ... rd:4 ........ \
216145952e8SRichard Henderson                 &ri imm=%imm12_26_12_0
217145952e8SRichard Henderson  ADD_rri        1111 0.1 0000 0 .... 0 ... .... ........     @s0_rri_12
218145952e8SRichard Henderson}
219145952e8SRichard Henderson{
220145952e8SRichard Henderson  ADR            1111 0.1 0101 0 1111 0 ... rd:4 ........ \
221145952e8SRichard Henderson                 &ri imm=%neg12_26_12_0
222145952e8SRichard Henderson  SUB_rri        1111 0.1 0101 0 .... 0 ... .... ........     @s0_rri_12
223145952e8SRichard Henderson}
224145952e8SRichard Henderson
2258f445127SRichard Henderson# Move Wide
2268f445127SRichard Henderson
2278f445127SRichard Henderson%imm16_26_16_12_0 16:4 26:1 12:3 0:8
2288f445127SRichard Henderson@mov16           .... .... .... .... .... rd:4 .... .... \
2298f445127SRichard Henderson                 &ri imm=%imm16_26_16_12_0
2308f445127SRichard Henderson
2318f445127SRichard HendersonMOVW             1111 0.10 0100 .... 0 ... .... ........      @mov16
2328f445127SRichard HendersonMOVT             1111 0.10 1100 .... 0 ... .... ........      @mov16
2338f445127SRichard Henderson
23486d21e4bSRichard Henderson# Saturate, bitfield
23586d21e4bSRichard Henderson
23646497f6aSRichard Henderson@sat             .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
23746497f6aSRichard Henderson                 &sat imm=%imm5_12_6
23846497f6aSRichard Henderson@sat16           .... .... .. .    . rn:4 . ... rd:4 .. . satimm:5 \
23946497f6aSRichard Henderson                 &sat sh=0 imm=0
24046497f6aSRichard Henderson
24146497f6aSRichard Henderson{
24246497f6aSRichard Henderson  SSAT16         1111 0011 001 0 .... 0 000 .... 00 0 .....   @sat16
24346497f6aSRichard Henderson  SSAT           1111 0011 00. 0 .... 0 ... .... .. 0 .....   @sat
24446497f6aSRichard Henderson}
24546497f6aSRichard Henderson{
24646497f6aSRichard Henderson  USAT16         1111 0011 101 0 .... 0 000 .... 00 0 .....   @sat16
24746497f6aSRichard Henderson  USAT           1111 0011 10. 0 .... 0 ... .... .. 0 .....   @sat
24846497f6aSRichard Henderson}
24946497f6aSRichard Henderson
25086d21e4bSRichard Henderson@bfx             .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
25186d21e4bSRichard Henderson                 &bfx lsb=%imm5_12_6
25286d21e4bSRichard Henderson@bfi             .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
25386d21e4bSRichard Henderson                 &bfi lsb=%imm5_12_6
25486d21e4bSRichard Henderson
25586d21e4bSRichard HendersonSBFX             1111 0011 010 0 .... 0 ... .... ..0.....     @bfx
25686d21e4bSRichard HendersonUBFX             1111 0011 110 0 .... 0 ... .... ..0.....     @bfx
25786d21e4bSRichard Henderson
25886d21e4bSRichard Henderson# bfc is bfi w/ rn=15
25986d21e4bSRichard HendersonBFCI             1111 0011 011 0 .... 0 ... .... ..0.....     @bfi
26086d21e4bSRichard Henderson
261bd92fe35SRichard Henderson# Multiply and multiply accumulate
262bd92fe35SRichard Henderson
263bd92fe35SRichard Henderson@s0_rnadm        .... .... .... rn:4 ra:4 rd:4 .... rm:4      &s_rrrr s=0
264bd92fe35SRichard Henderson@s0_rn0dm        .... .... .... rn:4 .... rd:4 .... rm:4      &s_rrrr ra=0 s=0
265bd92fe35SRichard Henderson@rnadm           .... .... .... rn:4 ra:4 rd:4 .... rm:4      &rrrr
26626c6923dSRichard Henderson@rn0dm           .... .... .... rn:4 .... rd:4 .... rm:4      &rrrr ra=0
2676d0730a8SRichard Henderson@rndm            .... .... .... rn:4 .... rd:4 .... rm:4      &rrr
2684c97f5b2SRichard Henderson@rdm             .... .... .... .... .... rd:4 .... rm:4      &rr
269bd92fe35SRichard Henderson
270bd92fe35SRichard Henderson{
271bd92fe35SRichard Henderson  MUL            1111 1011 0000 .... 1111 .... 0000 ....      @s0_rn0dm
272bd92fe35SRichard Henderson  MLA            1111 1011 0000 .... .... .... 0000 ....      @s0_rnadm
273bd92fe35SRichard Henderson}
274bd92fe35SRichard HendersonMLS              1111 1011 0000 .... .... .... 0001 ....      @rnadm
275bd92fe35SRichard HendersonSMULL            1111 1011 1000 .... .... .... 0000 ....      @s0_rnadm
276bd92fe35SRichard HendersonUMULL            1111 1011 1010 .... .... .... 0000 ....      @s0_rnadm
277bd92fe35SRichard HendersonSMLAL            1111 1011 1100 .... .... .... 0000 ....      @s0_rnadm
278bd92fe35SRichard HendersonUMLAL            1111 1011 1110 .... .... .... 0000 ....      @s0_rnadm
279bd92fe35SRichard HendersonUMAAL            1111 1011 1110 .... .... .... 0110 ....      @rnadm
28026c6923dSRichard Henderson{
28126c6923dSRichard Henderson  SMULWB         1111 1011 0011 .... 1111 .... 0000 ....      @rn0dm
28226c6923dSRichard Henderson  SMLAWB         1111 1011 0011 .... .... .... 0000 ....      @rnadm
28326c6923dSRichard Henderson}
28426c6923dSRichard Henderson{
28526c6923dSRichard Henderson  SMULWT         1111 1011 0011 .... 1111 .... 0001 ....      @rn0dm
28626c6923dSRichard Henderson  SMLAWT         1111 1011 0011 .... .... .... 0001 ....      @rnadm
28726c6923dSRichard Henderson}
28826c6923dSRichard Henderson{
28926c6923dSRichard Henderson  SMULBB         1111 1011 0001 .... 1111 .... 0000 ....      @rn0dm
29026c6923dSRichard Henderson  SMLABB         1111 1011 0001 .... .... .... 0000 ....      @rnadm
29126c6923dSRichard Henderson}
29226c6923dSRichard Henderson{
29326c6923dSRichard Henderson  SMULBT         1111 1011 0001 .... 1111 .... 0001 ....      @rn0dm
29426c6923dSRichard Henderson  SMLABT         1111 1011 0001 .... .... .... 0001 ....      @rnadm
29526c6923dSRichard Henderson}
29626c6923dSRichard Henderson{
29726c6923dSRichard Henderson  SMULTB         1111 1011 0001 .... 1111 .... 0010 ....      @rn0dm
29826c6923dSRichard Henderson  SMLATB         1111 1011 0001 .... .... .... 0010 ....      @rnadm
29926c6923dSRichard Henderson}
30026c6923dSRichard Henderson{
30126c6923dSRichard Henderson  SMULTT         1111 1011 0001 .... 1111 .... 0011 ....      @rn0dm
30226c6923dSRichard Henderson  SMLATT         1111 1011 0001 .... .... .... 0011 ....      @rnadm
30326c6923dSRichard Henderson}
30426c6923dSRichard HendersonSMLALBB          1111 1011 1100 .... .... .... 1000 ....      @rnadm
30526c6923dSRichard HendersonSMLALBT          1111 1011 1100 .... .... .... 1001 ....      @rnadm
30626c6923dSRichard HendersonSMLALTB          1111 1011 1100 .... .... .... 1010 ....      @rnadm
30726c6923dSRichard HendersonSMLALTT          1111 1011 1100 .... .... .... 1011 ....      @rnadm
3086d0730a8SRichard Henderson
30986d21e4bSRichard Henderson# usad8 is usada8 w/ ra=15
31086d21e4bSRichard HendersonUSADA8           1111 1011 0111 .... .... .... 0000 ....      @rnadm
31186d21e4bSRichard Henderson
3122c7c4e09SRichard HendersonSMLAD            1111 1011 0010 .... .... .... 0000 ....      @rnadm
3132c7c4e09SRichard HendersonSMLADX           1111 1011 0010 .... .... .... 0001 ....      @rnadm
3142c7c4e09SRichard HendersonSMLSD            1111 1011 0100 .... .... .... 0000 ....      @rnadm
3152c7c4e09SRichard HendersonSMLSDX           1111 1011 0100 .... .... .... 0001 ....      @rnadm
3162c7c4e09SRichard Henderson
3172c7c4e09SRichard HendersonSMLALD           1111 1011 1100 .... .... .... 1100 ....      @rnadm
3182c7c4e09SRichard HendersonSMLALDX          1111 1011 1100 .... .... .... 1101 ....      @rnadm
3192c7c4e09SRichard HendersonSMLSLD           1111 1011 1101 .... .... .... 1100 ....      @rnadm
3202c7c4e09SRichard HendersonSMLSLDX          1111 1011 1101 .... .... .... 1101 ....      @rnadm
3212c7c4e09SRichard Henderson
3222c7c4e09SRichard HendersonSMMLA            1111 1011 0101 .... .... .... 0000 ....      @rnadm
3232c7c4e09SRichard HendersonSMMLAR           1111 1011 0101 .... .... .... 0001 ....      @rnadm
3242c7c4e09SRichard HendersonSMMLS            1111 1011 0110 .... .... .... 0000 ....      @rnadm
3252c7c4e09SRichard HendersonSMMLSR           1111 1011 0110 .... .... .... 0001 ....      @rnadm
3262c7c4e09SRichard Henderson
3272c7c4e09SRichard HendersonSDIV             1111 1011 1001 .... 1111 .... 1111 ....      @rndm
3282c7c4e09SRichard HendersonUDIV             1111 1011 1011 .... 1111 .... 1111 ....      @rndm
3292c7c4e09SRichard Henderson
3306d0730a8SRichard Henderson# Data-processing (two source registers)
3316d0730a8SRichard Henderson
3326d0730a8SRichard HendersonQADD             1111 1010 1000 .... 1111 .... 1000 ....      @rndm
3336d0730a8SRichard HendersonQSUB             1111 1010 1000 .... 1111 .... 1010 ....      @rndm
3346d0730a8SRichard HendersonQDADD            1111 1010 1000 .... 1111 .... 1001 ....      @rndm
3356d0730a8SRichard HendersonQDSUB            1111 1010 1000 .... 1111 .... 1011 ....      @rndm
33663130596SRichard Henderson
3376c35d53fSRichard HendersonCRC32B           1111 1010 1100 .... 1111 .... 1000 ....      @rndm
3386c35d53fSRichard HendersonCRC32H           1111 1010 1100 .... 1111 .... 1001 ....      @rndm
3396c35d53fSRichard HendersonCRC32W           1111 1010 1100 .... 1111 .... 1010 ....      @rndm
3406c35d53fSRichard HendersonCRC32CB          1111 1010 1101 .... 1111 .... 1000 ....      @rndm
3416c35d53fSRichard HendersonCRC32CH          1111 1010 1101 .... 1111 .... 1001 ....      @rndm
3426c35d53fSRichard HendersonCRC32CW          1111 1010 1101 .... 1111 .... 1010 ....      @rndm
3436c35d53fSRichard Henderson
34446497f6aSRichard HendersonSEL              1111 1010 1010 .... 1111 .... 1000 ....      @rndm
34546497f6aSRichard Henderson
3464c97f5b2SRichard Henderson# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
34746497f6aSRichard HendersonREV              1111 1010 1001 ---- 1111 .... 1000 ....      @rdm
34846497f6aSRichard HendersonREV16            1111 1010 1001 ---- 1111 .... 1001 ....      @rdm
34946497f6aSRichard HendersonRBIT             1111 1010 1001 ---- 1111 .... 1010 ....      @rdm
35046497f6aSRichard HendersonREVSH            1111 1010 1001 ---- 1111 .... 1011 ....      @rdm
3514c97f5b2SRichard HendersonCLZ              1111 1010 1011 ---- 1111 .... 1000 ....      @rdm
3524c97f5b2SRichard Henderson
35363130596SRichard Henderson# Branches and miscellaneous control
35463130596SRichard Henderson
355d0b26644SRichard Henderson%msr_sysm        4:1 8:4
356d0b26644SRichard Henderson%mrs_sysm        4:1 16:4
3572cde9ea5SRichard Henderson%imm16_16_0      16:4 0:12
358360144f3SRichard Henderson%imm21           26:s1 11:1 13:1 16:6 0:11 !function=times_2
359360144f3SRichard Henderson&ci              cond imm
360d0b26644SRichard Henderson
361d0b26644SRichard Henderson{
362360144f3SRichard Henderson  # Group insn[25:23] = 111, which is cond=111x for the branch below,
363360144f3SRichard Henderson  # or unconditional, which would be illegal for the branch.
36445f11876SPeter Maydell  [
36545f11876SPeter Maydell    # Hints, and CPS
36663130596SRichard Henderson    {
36713954587SRichard Henderson      [
36863130596SRichard Henderson        YIELD    1111 0011 1010 1111 1000 0000 0000 0001
36963130596SRichard Henderson        WFE      1111 0011 1010 1111 1000 0000 0000 0010
37063130596SRichard Henderson        WFI      1111 0011 1010 1111 1000 0000 0000 0011
37163130596SRichard Henderson
37263130596SRichard Henderson        # TODO: Implement SEV, SEVL; may help SMP performance.
37363130596SRichard Henderson        # SEV    1111 0011 1010 1111 1000 0000 0000 0100
37463130596SRichard Henderson        # SEVL   1111 0011 1010 1111 1000 0000 0000 0101
37563130596SRichard Henderson
37613954587SRichard Henderson        ESB      1111 0011 1010 1111 1000 0000 0001 0000
37713954587SRichard Henderson      ]
37846f4976fSPeter Maydell
37963130596SRichard Henderson      # The canonical nop ends in 0000 0000, but the whole rest
38063130596SRichard Henderson      # of the space is "reserved hint, behaves as nop".
38163130596SRichard Henderson      NOP        1111 0011 1010 1111 1000 0000 ---- ----
382519b8471SRichard Henderson
38352f83b9cSRichard Henderson      # If imod == '00' && M == '0' then SEE "Hint instructions", above.
38452f83b9cSRichard Henderson      CPS        1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \
38552f83b9cSRichard Henderson                 &cps
38645f11876SPeter Maydell    }
38752f83b9cSRichard Henderson
388519b8471SRichard Henderson    # Miscellaneous control
389519b8471SRichard Henderson    CLREX        1111 0011 1011 1111 1000 1111 0010 1111
390519b8471SRichard Henderson    DSB          1111 0011 1011 1111 1000 1111 0100 ----
391519b8471SRichard Henderson    DMB          1111 0011 1011 1111 1000 1111 0101 ----
392519b8471SRichard Henderson    ISB          1111 0011 1011 1111 1000 1111 0110 ----
393519b8471SRichard Henderson    SB           1111 0011 1011 1111 1000 1111 0111 0000
394519b8471SRichard Henderson
395d0b26644SRichard Henderson    # Note that the v7m insn overlaps both the normal and banked insn.
396d0b26644SRichard Henderson    {
397d0b26644SRichard Henderson      MRS_bank   1111 0011 111 r:1 .... 1000 rd:4   001. 0000  \
398d0b26644SRichard Henderson                 &mrs_bank sysm=%mrs_sysm
399d0b26644SRichard Henderson      MRS_reg    1111 0011 111 r:1 1111 1000 rd:4   0000 0000  &mrs_reg
400d0b26644SRichard Henderson      MRS_v7m    1111 0011 111 0   1111 1000 rd:4   sysm:8
401d0b26644SRichard Henderson    }
402d0b26644SRichard Henderson    {
403d0b26644SRichard Henderson      MSR_bank   1111 0011 100 r:1 rn:4 1000 ....   001. 0000  \
404d0b26644SRichard Henderson                 &msr_bank sysm=%msr_sysm
405d0b26644SRichard Henderson      MSR_reg    1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000  &msr_reg
406d0b26644SRichard Henderson      MSR_v7m    1111 0011 100 0   rn:4 1000 mask:2 00 sysm:8
407d0b26644SRichard Henderson    }
4084ed95abdSRichard Henderson    BXJ          1111 0011 1100 rm:4 1000 1111 0000 0000      &r
409ef11bc3cSRichard Henderson    {
410ef11bc3cSRichard Henderson      # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for
411ef11bc3cSRichard Henderson      # every other encoding of SUBS.  With v7VE, IMM=0 is redefined as ERET.
412ef11bc3cSRichard Henderson      # The distinction between the two only matters for Hyp mode.
413ef11bc3cSRichard Henderson      ERET       1111 0011 1101 1110 1000 1111 0000 0000
414ef11bc3cSRichard Henderson      SUB_rri    1111 0011 1101 1110 1000 1111 imm:8 \
415ef11bc3cSRichard Henderson                 &s_rri_rot rot=0 s=1 rd=15 rn=14
416ef11bc3cSRichard Henderson    }
4172cde9ea5SRichard Henderson    SMC          1111 0111 1111 imm:4 1000 0000 0000 0000     &i
4182cde9ea5SRichard Henderson    HVC          1111 0111 1110 ....  1000 .... .... ....     \
4192cde9ea5SRichard Henderson                 &i imm=%imm16_16_0
42086d21e4bSRichard Henderson    UDF          1111 0111 1111 ----  1010 ---- ---- ----
42145f11876SPeter Maydell  ]
422360144f3SRichard Henderson  B_cond_thumb   1111 0. cond:4 ...... 10.0 ............      &ci imm=%imm21
423360144f3SRichard Henderson}
4245e291fe1SRichard Henderson
4255e291fe1SRichard Henderson# Load/store (register, immediate, literal)
4265e291fe1SRichard Henderson
4275e291fe1SRichard Henderson@ldst_rr         .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \
4285e291fe1SRichard Henderson                 &ldst_rr p=1 w=0 u=1 shtype=0
4295e291fe1SRichard Henderson@ldst_ri_idx     .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \
4305e291fe1SRichard Henderson                 &ldst_ri w=1
4315e291fe1SRichard Henderson@ldst_ri_neg     .... .... .... rn:4 rt:4 .... imm:8 \
4325e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=0
4335e291fe1SRichard Henderson@ldst_ri_unp     .... .... .... rn:4 rt:4 .... imm:8 \
4345e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=1
4355e291fe1SRichard Henderson@ldst_ri_pos     .... .... .... rn:4 rt:4 imm:12 \
4365e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=1
4375e291fe1SRichard Henderson@ldst_ri_lit     .... .... u:1 ... .... rt:4 imm:12 \
4385e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 rn=15
4395e291fe1SRichard Henderson
4405e291fe1SRichard HendersonSTRB_rr          1111 1000 0000 .... .... 000000 .. ....      @ldst_rr
4415e291fe1SRichard HendersonSTRB_ri          1111 1000 0000 .... .... 1..1 ........       @ldst_ri_idx
4425e291fe1SRichard HendersonSTRB_ri          1111 1000 0000 .... .... 1100 ........       @ldst_ri_neg
4435e291fe1SRichard HendersonSTRBT_ri         1111 1000 0000 .... .... 1110 ........       @ldst_ri_unp
4445e291fe1SRichard HendersonSTRB_ri          1111 1000 1000 .... .... ............        @ldst_ri_pos
4455e291fe1SRichard Henderson
4465e291fe1SRichard HendersonSTRH_rr          1111 1000 0010 .... .... 000000 .. ....      @ldst_rr
4475e291fe1SRichard HendersonSTRH_ri          1111 1000 0010 .... .... 1..1 ........       @ldst_ri_idx
4485e291fe1SRichard HendersonSTRH_ri          1111 1000 0010 .... .... 1100 ........       @ldst_ri_neg
4495e291fe1SRichard HendersonSTRHT_ri         1111 1000 0010 .... .... 1110 ........       @ldst_ri_unp
4505e291fe1SRichard HendersonSTRH_ri          1111 1000 1010 .... .... ............        @ldst_ri_pos
4515e291fe1SRichard Henderson
4525e291fe1SRichard HendersonSTR_rr           1111 1000 0100 .... .... 000000 .. ....      @ldst_rr
4535e291fe1SRichard HendersonSTR_ri           1111 1000 0100 .... .... 1..1 ........       @ldst_ri_idx
4545e291fe1SRichard HendersonSTR_ri           1111 1000 0100 .... .... 1100 ........       @ldst_ri_neg
4555e291fe1SRichard HendersonSTRT_ri          1111 1000 0100 .... .... 1110 ........       @ldst_ri_unp
4565e291fe1SRichard HendersonSTR_ri           1111 1000 1100 .... .... ............        @ldst_ri_pos
4575e291fe1SRichard Henderson
4585e291fe1SRichard Henderson# Note that Load, unsigned (literal) overlaps all other load encodings.
4595e291fe1SRichard Henderson{
4605e291fe1SRichard Henderson  {
461*db36e145SRichard Henderson    PLD          1111 1000 -001 1111 1111 ------------        # (literal)
4625e291fe1SRichard Henderson    LDRB_ri      1111 1000 .001 1111 .... ............        @ldst_ri_lit
4635e291fe1SRichard Henderson  }
4645e291fe1SRichard Henderson  {
465*db36e145SRichard Henderson    PLD          1111 1000 1001 ---- 1111 ------------        # (immediate T1)
4665e291fe1SRichard Henderson    LDRB_ri      1111 1000 1001 .... .... ............        @ldst_ri_pos
4675e291fe1SRichard Henderson  }
4685e291fe1SRichard Henderson  LDRB_ri        1111 1000 0001 .... .... 1..1 ........       @ldst_ri_idx
4695e291fe1SRichard Henderson  {
470*db36e145SRichard Henderson    PLD          1111 1000 0001 ---- 1111 1100 --------       # (immediate T2)
4715e291fe1SRichard Henderson    LDRB_ri      1111 1000 0001 .... .... 1100 ........       @ldst_ri_neg
4725e291fe1SRichard Henderson  }
4735e291fe1SRichard Henderson  LDRBT_ri       1111 1000 0001 .... .... 1110 ........       @ldst_ri_unp
4745e291fe1SRichard Henderson  {
475*db36e145SRichard Henderson    PLD          1111 1000 0001 ---- 1111 000000 -- ----      # (register)
4765e291fe1SRichard Henderson    LDRB_rr      1111 1000 0001 .... .... 000000 .. ....      @ldst_rr
4775e291fe1SRichard Henderson  }
4785e291fe1SRichard Henderson}
4795e291fe1SRichard Henderson{
4805e291fe1SRichard Henderson  {
481*db36e145SRichard Henderson    PLD          1111 1000 -011 1111 1111 ------------        # (literal)
4825e291fe1SRichard Henderson    LDRH_ri      1111 1000 .011 1111 .... ............        @ldst_ri_lit
4835e291fe1SRichard Henderson  }
4845e291fe1SRichard Henderson  {
485*db36e145SRichard Henderson    PLDW         1111 1000 1011 ---- 1111 ------------        # (immediate T1)
4865e291fe1SRichard Henderson    LDRH_ri      1111 1000 1011 .... .... ............        @ldst_ri_pos
4875e291fe1SRichard Henderson  }
4885e291fe1SRichard Henderson  LDRH_ri        1111 1000 0011 .... .... 1..1 ........       @ldst_ri_idx
4895e291fe1SRichard Henderson  {
490*db36e145SRichard Henderson    PLDW         1111 1000 0011 ---- 1111 1100 --------       # (immediate T2)
4915e291fe1SRichard Henderson    LDRH_ri      1111 1000 0011 .... .... 1100 ........       @ldst_ri_neg
4925e291fe1SRichard Henderson  }
4935e291fe1SRichard Henderson  LDRHT_ri       1111 1000 0011 .... .... 1110 ........       @ldst_ri_unp
4945e291fe1SRichard Henderson  {
495*db36e145SRichard Henderson    PLDW         1111 1000 0011 ---- 1111 000000 -- ----      # (register)
4965e291fe1SRichard Henderson    LDRH_rr      1111 1000 0011 .... .... 000000 .. ....      @ldst_rr
4975e291fe1SRichard Henderson  }
4985e291fe1SRichard Henderson}
4995e291fe1SRichard Henderson{
5005e291fe1SRichard Henderson  LDR_ri         1111 1000 .101 1111 .... ............        @ldst_ri_lit
5015e291fe1SRichard Henderson  LDR_ri         1111 1000 1101 .... .... ............        @ldst_ri_pos
5025e291fe1SRichard Henderson  LDR_ri         1111 1000 0101 .... .... 1..1 ........       @ldst_ri_idx
5035e291fe1SRichard Henderson  LDR_ri         1111 1000 0101 .... .... 1100 ........       @ldst_ri_neg
5045e291fe1SRichard Henderson  LDRT_ri        1111 1000 0101 .... .... 1110 ........       @ldst_ri_unp
5055e291fe1SRichard Henderson  LDR_rr         1111 1000 0101 .... .... 000000 .. ....      @ldst_rr
5065e291fe1SRichard Henderson}
5075e291fe1SRichard Henderson{
5085e291fe1SRichard Henderson  {
509*db36e145SRichard Henderson    PLI          1111 1001 -001 1111 1111 ------------        # (literal T3)
5105e291fe1SRichard Henderson    LDRSB_ri     1111 1001 .001 1111 .... ............        @ldst_ri_lit
5115e291fe1SRichard Henderson  }
5125e291fe1SRichard Henderson  {
513*db36e145SRichard Henderson    PLI          1111 1001 1001 ---- 1111 ------------        # (immediate T1)
5145e291fe1SRichard Henderson    LDRSB_ri     1111 1001 1001 .... .... ............        @ldst_ri_pos
5155e291fe1SRichard Henderson  }
5165e291fe1SRichard Henderson  LDRSB_ri       1111 1001 0001 .... .... 1..1 ........       @ldst_ri_idx
5175e291fe1SRichard Henderson  {
518*db36e145SRichard Henderson    PLI          1111 1001 0001 ---- 1111 1100 --------       # (immediate T2)
5195e291fe1SRichard Henderson    LDRSB_ri     1111 1001 0001 .... .... 1100 ........       @ldst_ri_neg
5205e291fe1SRichard Henderson  }
5215e291fe1SRichard Henderson  LDRSBT_ri      1111 1001 0001 .... .... 1110 ........       @ldst_ri_unp
5225e291fe1SRichard Henderson  {
523*db36e145SRichard Henderson    PLI          1111 1001 0001 ---- 1111 000000 -- ----      # (register)
5245e291fe1SRichard Henderson    LDRSB_rr     1111 1001 0001 .... .... 000000 .. ....      @ldst_rr
5255e291fe1SRichard Henderson  }
5265e291fe1SRichard Henderson}
5275e291fe1SRichard Henderson# NOPs here are unallocated memory hints, treated as NOP.
5285e291fe1SRichard Henderson{
5295e291fe1SRichard Henderson  {
5305e291fe1SRichard Henderson    NOP          1111 1001 -011 1111 1111 ------------
5315e291fe1SRichard Henderson    LDRSH_ri     1111 1001 .011 1111 .... ............        @ldst_ri_lit
5325e291fe1SRichard Henderson  }
5335e291fe1SRichard Henderson  {
5345e291fe1SRichard Henderson    NOP          1111 1001 1011 ---- 1111 ------------
5355e291fe1SRichard Henderson    LDRSH_ri     1111 1001 1011 .... .... ............        @ldst_ri_pos
5365e291fe1SRichard Henderson  }
5375e291fe1SRichard Henderson  LDRSH_ri       1111 1001 0011 .... .... 1..1 ........       @ldst_ri_idx
5385e291fe1SRichard Henderson  {
5395e291fe1SRichard Henderson    NOP          1111 1001 0011 ---- 1111 1100 --------
5405e291fe1SRichard Henderson    LDRSH_ri     1111 1001 0011 .... .... 1100 ........       @ldst_ri_neg
5415e291fe1SRichard Henderson  }
5425e291fe1SRichard Henderson  LDRSHT_ri      1111 1001 0011 .... .... 1110 ........       @ldst_ri_unp
5435e291fe1SRichard Henderson  {
5445e291fe1SRichard Henderson    NOP          1111 1001 0011 ---- 1111 000000 -- ----
5455e291fe1SRichard Henderson    LDRSH_rr     1111 1001 0011 .... .... 000000 .. ....      @ldst_rr
5465e291fe1SRichard Henderson  }
5475e291fe1SRichard Henderson}
5485e291fe1SRichard Henderson
5495e291fe1SRichard Henderson%imm8x4          0:8 !function=times_4
5505e291fe1SRichard Henderson&ldst_ri2        p w u rn rt rt2 imm
5515e291fe1SRichard Henderson@ldstd_ri8       .... .... u:1 ... rn:4 rt:4 rt2:4 ........   \
5525e291fe1SRichard Henderson                 &ldst_ri2 imm=%imm8x4
5535e291fe1SRichard Henderson
5545e291fe1SRichard HendersonSTRD_ri_t32      1110 1000 .110 .... .... .... ........    @ldstd_ri8 w=1 p=0
5555e291fe1SRichard HendersonLDRD_ri_t32      1110 1000 .111 .... .... .... ........    @ldstd_ri8 w=1 p=0
5565e291fe1SRichard Henderson
5575e291fe1SRichard HendersonSTRD_ri_t32      1110 1001 .100 .... .... .... ........    @ldstd_ri8 w=0 p=1
5585e291fe1SRichard HendersonLDRD_ri_t32      1110 1001 .101 .... .... .... ........    @ldstd_ri8 w=0 p=1
5595e291fe1SRichard Henderson
5605e291fe1SRichard HendersonSTRD_ri_t32      1110 1001 .110 .... .... .... ........    @ldstd_ri8 w=1 p=1
56135d240acSRichard Henderson{
56235d240acSRichard Henderson  SG             1110 1001 0111 1111 1110 1001 01111111
5635e291fe1SRichard Henderson  LDRD_ri_t32    1110 1001 .111 .... .... .... ........    @ldstd_ri8 w=1 p=1
56435d240acSRichard Henderson}
5651efdd407SRichard Henderson
566808092bbSRichard Henderson# Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
5671efdd407SRichard Henderson
5681efdd407SRichard Henderson@strex_i         .... .... .... rn:4 rt:4 rd:4 .... .... \
5691efdd407SRichard Henderson                 &strex rt2=15 imm=%imm8x4
5701efdd407SRichard Henderson@strex_0         .... .... .... rn:4 rt:4 .... .... rd:4 \
5711efdd407SRichard Henderson                 &strex rt2=15 imm=0
5721efdd407SRichard Henderson@strex_d         .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
5731efdd407SRichard Henderson                 &strex imm=0
5741efdd407SRichard Henderson
5751efdd407SRichard Henderson@ldrex_i         .... .... .... rn:4 rt:4 .... .... .... \
5761efdd407SRichard Henderson                 &ldrex rt2=15 imm=%imm8x4
5771efdd407SRichard Henderson@ldrex_0         .... .... .... rn:4 rt:4 .... .... .... \
5781efdd407SRichard Henderson                 &ldrex rt2=15 imm=0
5791efdd407SRichard Henderson@ldrex_d         .... .... .... rn:4 rt:4 rt2:4 .... .... \
5801efdd407SRichard Henderson                 &ldrex imm=0
5811efdd407SRichard Henderson
582d449f174SRichard Henderson{
583d449f174SRichard Henderson  TT             1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000
5841efdd407SRichard Henderson  STREX          1110 1000 0100 .... .... .... .... ....      @strex_i
585d449f174SRichard Henderson}
5861efdd407SRichard HendersonSTREXB           1110 1000 1100 .... .... 1111 0100 ....      @strex_0
5871efdd407SRichard HendersonSTREXH           1110 1000 1100 .... .... 1111 0101 ....      @strex_0
5881efdd407SRichard HendersonSTREXD_t32       1110 1000 1100 .... .... .... 0111 ....      @strex_d
5891efdd407SRichard Henderson
5901efdd407SRichard HendersonSTLEX            1110 1000 1100 .... .... 1111 1110 ....      @strex_0
5911efdd407SRichard HendersonSTLEXB           1110 1000 1100 .... .... 1111 1100 ....      @strex_0
5921efdd407SRichard HendersonSTLEXH           1110 1000 1100 .... .... 1111 1101 ....      @strex_0
5931efdd407SRichard HendersonSTLEXD_t32       1110 1000 1100 .... .... .... 1111 ....      @strex_d
5941efdd407SRichard Henderson
5951efdd407SRichard HendersonSTL              1110 1000 1100 .... .... 1111 1010 1111      @ldrex_0
5961efdd407SRichard HendersonSTLB             1110 1000 1100 .... .... 1111 1000 1111      @ldrex_0
5971efdd407SRichard HendersonSTLH             1110 1000 1100 .... .... 1111 1001 1111      @ldrex_0
5981efdd407SRichard Henderson
5991efdd407SRichard HendersonLDREX            1110 1000 0101 .... .... 1111 .... ....      @ldrex_i
6001efdd407SRichard HendersonLDREXB           1110 1000 1101 .... .... 1111 0100 1111      @ldrex_0
6011efdd407SRichard HendersonLDREXH           1110 1000 1101 .... .... 1111 0101 1111      @ldrex_0
6021efdd407SRichard HendersonLDREXD_t32       1110 1000 1101 .... .... .... 0111 1111      @ldrex_d
6031efdd407SRichard Henderson
6041efdd407SRichard HendersonLDAEX            1110 1000 1101 .... .... 1111 1110 1111      @ldrex_0
6051efdd407SRichard HendersonLDAEXB           1110 1000 1101 .... .... 1111 1100 1111      @ldrex_0
6061efdd407SRichard HendersonLDAEXH           1110 1000 1101 .... .... 1111 1101 1111      @ldrex_0
6071efdd407SRichard HendersonLDAEXD_t32       1110 1000 1101 .... .... .... 1111 1111      @ldrex_d
6081efdd407SRichard Henderson
6091efdd407SRichard HendersonLDA              1110 1000 1101 .... .... 1111 1010 1111      @ldrex_0
6101efdd407SRichard HendersonLDAB             1110 1000 1101 .... .... 1111 1000 1111      @ldrex_0
6111efdd407SRichard HendersonLDAH             1110 1000 1101 .... .... 1111 1001 1111      @ldrex_0
612adf1a566SRichard Henderson
613808092bbSRichard Henderson&tbranch         rn rm
614808092bbSRichard Henderson@tbranch         .... .... .... rn:4 .... .... .... rm:4      &tbranch
615808092bbSRichard Henderson
616808092bbSRichard HendersonTBB              1110 1000 1101 .... 1111 0000 0000 ....      @tbranch
617808092bbSRichard HendersonTBH              1110 1000 1101 .... 1111 0000 0001 ....      @tbranch
618808092bbSRichard Henderson
619adf1a566SRichard Henderson# Parallel addition and subtraction
620adf1a566SRichard Henderson
621adf1a566SRichard HendersonSADD8            1111 1010 1000 .... 1111 .... 0000 ....      @rndm
622adf1a566SRichard HendersonQADD8            1111 1010 1000 .... 1111 .... 0001 ....      @rndm
623adf1a566SRichard HendersonSHADD8           1111 1010 1000 .... 1111 .... 0010 ....      @rndm
624adf1a566SRichard HendersonUADD8            1111 1010 1000 .... 1111 .... 0100 ....      @rndm
625adf1a566SRichard HendersonUQADD8           1111 1010 1000 .... 1111 .... 0101 ....      @rndm
626adf1a566SRichard HendersonUHADD8           1111 1010 1000 .... 1111 .... 0110 ....      @rndm
627adf1a566SRichard Henderson
628adf1a566SRichard HendersonSADD16           1111 1010 1001 .... 1111 .... 0000 ....      @rndm
629adf1a566SRichard HendersonQADD16           1111 1010 1001 .... 1111 .... 0001 ....      @rndm
630adf1a566SRichard HendersonSHADD16          1111 1010 1001 .... 1111 .... 0010 ....      @rndm
631adf1a566SRichard HendersonUADD16           1111 1010 1001 .... 1111 .... 0100 ....      @rndm
632adf1a566SRichard HendersonUQADD16          1111 1010 1001 .... 1111 .... 0101 ....      @rndm
633adf1a566SRichard HendersonUHADD16          1111 1010 1001 .... 1111 .... 0110 ....      @rndm
634adf1a566SRichard Henderson
635adf1a566SRichard HendersonSASX             1111 1010 1010 .... 1111 .... 0000 ....      @rndm
636adf1a566SRichard HendersonQASX             1111 1010 1010 .... 1111 .... 0001 ....      @rndm
637adf1a566SRichard HendersonSHASX            1111 1010 1010 .... 1111 .... 0010 ....      @rndm
638adf1a566SRichard HendersonUASX             1111 1010 1010 .... 1111 .... 0100 ....      @rndm
639adf1a566SRichard HendersonUQASX            1111 1010 1010 .... 1111 .... 0101 ....      @rndm
640adf1a566SRichard HendersonUHASX            1111 1010 1010 .... 1111 .... 0110 ....      @rndm
641adf1a566SRichard Henderson
642adf1a566SRichard HendersonSSUB8            1111 1010 1100 .... 1111 .... 0000 ....      @rndm
643adf1a566SRichard HendersonQSUB8            1111 1010 1100 .... 1111 .... 0001 ....      @rndm
644adf1a566SRichard HendersonSHSUB8           1111 1010 1100 .... 1111 .... 0010 ....      @rndm
645adf1a566SRichard HendersonUSUB8            1111 1010 1100 .... 1111 .... 0100 ....      @rndm
646adf1a566SRichard HendersonUQSUB8           1111 1010 1100 .... 1111 .... 0101 ....      @rndm
647adf1a566SRichard HendersonUHSUB8           1111 1010 1100 .... 1111 .... 0110 ....      @rndm
648adf1a566SRichard Henderson
649adf1a566SRichard HendersonSSUB16           1111 1010 1101 .... 1111 .... 0000 ....      @rndm
650adf1a566SRichard HendersonQSUB16           1111 1010 1101 .... 1111 .... 0001 ....      @rndm
651adf1a566SRichard HendersonSHSUB16          1111 1010 1101 .... 1111 .... 0010 ....      @rndm
652adf1a566SRichard HendersonUSUB16           1111 1010 1101 .... 1111 .... 0100 ....      @rndm
653adf1a566SRichard HendersonUQSUB16          1111 1010 1101 .... 1111 .... 0101 ....      @rndm
654adf1a566SRichard HendersonUHSUB16          1111 1010 1101 .... 1111 .... 0110 ....      @rndm
655adf1a566SRichard Henderson
656adf1a566SRichard HendersonSSAX             1111 1010 1110 .... 1111 .... 0000 ....      @rndm
657adf1a566SRichard HendersonQSAX             1111 1010 1110 .... 1111 .... 0001 ....      @rndm
658adf1a566SRichard HendersonSHSAX            1111 1010 1110 .... 1111 .... 0010 ....      @rndm
659adf1a566SRichard HendersonUSAX             1111 1010 1110 .... 1111 .... 0100 ....      @rndm
660adf1a566SRichard HendersonUQSAX            1111 1010 1110 .... 1111 .... 0101 ....      @rndm
661adf1a566SRichard HendersonUHSAX            1111 1010 1110 .... 1111 .... 0110 ....      @rndm
66246497f6aSRichard Henderson
66346497f6aSRichard Henderson# Register extends
66446497f6aSRichard Henderson
66546497f6aSRichard Henderson@rrr_rot         .... .... .... rn:4 .... rd:4 .. rot:2 rm:4  &rrr_rot
66646497f6aSRichard Henderson
66746497f6aSRichard HendersonSXTAH            1111 1010 0000 .... 1111 .... 10.. ....      @rrr_rot
66846497f6aSRichard HendersonUXTAH            1111 1010 0001 .... 1111 .... 10.. ....      @rrr_rot
66946497f6aSRichard HendersonSXTAB16          1111 1010 0010 .... 1111 .... 10.. ....      @rrr_rot
67046497f6aSRichard HendersonUXTAB16          1111 1010 0011 .... 1111 .... 10.. ....      @rrr_rot
67146497f6aSRichard HendersonSXTAB            1111 1010 0100 .... 1111 .... 10.. ....      @rrr_rot
67246497f6aSRichard HendersonUXTAB            1111 1010 0101 .... 1111 .... 10.. ....      @rrr_rot
673c5c426d4SRichard Henderson
674c5c426d4SRichard Henderson# Load/store multiple
675c5c426d4SRichard Henderson
676c5c426d4SRichard Henderson@ldstm           .... .... .. w:1 . rn:4 list:16              &ldst_block u=0
677c5c426d4SRichard Henderson
678c5c426d4SRichard HendersonSTM_t32          1110 1000 10.0 .... ................         @ldstm i=1 b=0
679c5c426d4SRichard HendersonSTM_t32          1110 1001 00.0 .... ................         @ldstm i=0 b=1
6806e21a013SPeter Maydell{
6816e21a013SPeter Maydell  # Rn=15 UNDEFs for LDM; M-profile CLRM uses that encoding
6826e21a013SPeter Maydell  CLRM           1110 1000 1001 1111 list:16
683c5c426d4SRichard Henderson  LDM_t32        1110 1000 10.1 .... ................         @ldstm i=1 b=0
6846e21a013SPeter Maydell}
685c5c426d4SRichard HendersonLDM_t32          1110 1001 00.1 .... ................         @ldstm i=0 b=1
686360144f3SRichard Henderson
687885782a7SRichard Henderson&rfe             !extern rn w pu
688885782a7SRichard Henderson@rfe             .... .... .. w:1 . rn:4 ................     &rfe
689885782a7SRichard Henderson
690885782a7SRichard HendersonRFE              1110 1000 00.1 .... 1100000000000000         @rfe pu=2
691885782a7SRichard HendersonRFE              1110 1001 10.1 .... 1100000000000000         @rfe pu=1
692885782a7SRichard Henderson
693885782a7SRichard Henderson&srs             !extern mode w pu
694885782a7SRichard Henderson@srs             .... .... .. w:1 . .... ........... mode:5   &srs
695885782a7SRichard Henderson
696885782a7SRichard HendersonSRS              1110 1000 00.0 1101 1100 0000 000. ....      @srs pu=2
697885782a7SRichard HendersonSRS              1110 1001 10.0 1101 1100 0000 000. ....      @srs pu=1
698885782a7SRichard Henderson
6994c498dcfSPeter Maydell# Coprocessor instructions
7004c498dcfSPeter Maydell
7014c498dcfSPeter Maydell# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the
7024c498dcfSPeter Maydell# other coprocessor instructions always UNDEF.
7034c498dcfSPeter Maydell# The trans_ functions for these will ignore cp values 8..13 for v7 or
7044c498dcfSPeter Maydell# earlier, and 0..13 for v8 and later, because those areas of the
7054c498dcfSPeter Maydell# encoding space may be used for other things, such as VFP or Neon.
7064c498dcfSPeter Maydell
7074c498dcfSPeter Maydell@mcr             .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4
7084c498dcfSPeter Maydell@mcrr            .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4
7094c498dcfSPeter Maydell
7104c498dcfSPeter MaydellMCRR             1110 1100 0100 .... .... .... .... .... @mcrr
7114c498dcfSPeter MaydellMRRC             1110 1100 0101 .... .... .... .... .... @mcrr
7124c498dcfSPeter Maydell
7134c498dcfSPeter MaydellMCR              1110 1110 ... 0 .... .... .... ... 1 .... @mcr
7144c498dcfSPeter MaydellMRC              1110 1110 ... 1 .... .... .... ... 1 .... @mcr
7154c498dcfSPeter Maydell
716360144f3SRichard Henderson# Branches
717360144f3SRichard Henderson
718360144f3SRichard Henderson%imm24           26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24
719360144f3SRichard Henderson@branch24        ................................             &i imm=%imm24
720360144f3SRichard Henderson
721360144f3SRichard HendersonB                1111 0. .......... 10.1 ............         @branch24
722360144f3SRichard HendersonBL               1111 0. .......... 11.1 ............         @branch24
72305903f03SPeter Maydell{
72405903f03SPeter Maydell  # BLX_i is non-M-profile only
725360144f3SRichard Henderson  BLX_i          1111 0. .......... 11.0 ............         @branch24
72605903f03SPeter Maydell  # M-profile only: loop and branch insns
72705903f03SPeter Maydell  [
72805903f03SPeter Maydell    # All these BF insns have boff != 0b0000; we NOP them all
72905903f03SPeter Maydell    BF           1111 0 boff:4  ------- 1100 - ---------- 1    # BFL
73005903f03SPeter Maydell    BF           1111 0 boff:4 0 ------ 1110 - ---------- 1    # BFCSEL
73105903f03SPeter Maydell    BF           1111 0 boff:4 10 ----- 1110 - ---------- 1    # BF
73205903f03SPeter Maydell    BF           1111 0 boff:4 11 ----- 1110 0 0000000000 1    # BFX, BFLX
73305903f03SPeter Maydell  ]
734b7226369SPeter Maydell  [
735b7226369SPeter Maydell    # LE and WLS immediate
736b7226369SPeter Maydell    %lob_imm 1:10 11:1 !function=times_2
737b7226369SPeter Maydell
73840a36f00SPeter Maydell    DLS          1111 0 0000 100     rn:4 1110 0000 0000 0001 size=4
7396822abfdSPeter Maydell    WLS          1111 0 0000 100     rn:4 1100 . .......... 1 imm=%lob_imm size=4
7406822abfdSPeter Maydell    {
741a454ea1eSPeter Maydell      LE         1111 0 0000 0 f:1 tp:1 1111 1100 . .......... 1 imm=%lob_imm
7426822abfdSPeter Maydell      # This is WLSTP
7436822abfdSPeter Maydell      WLS        1111 0 0000 0 size:2 rn:4 1100 . .......... 1 imm=%lob_imm
7446822abfdSPeter Maydell    }
74540a36f00SPeter Maydell    {
74676c32d72SPeter Maydell      LCTP       1111 0 0000 000     1111 1110 0000 0000 0001
74740a36f00SPeter Maydell      # This is DLSTP
74840a36f00SPeter Maydell      DLS        1111 0 0000 0 size:2 rn:4 1110 0000 0000 0001
74940a36f00SPeter Maydell    }
7500f31e37cSPeter Maydell    VCTP         1111 0 0000 0 size:2 rn:4 1110 1000 0000 0001
751b7226369SPeter Maydell  ]
75205903f03SPeter Maydell}
753