xref: /qemu/target/arm/tcg/t32.decode (revision 46497f6af73bb33c1064d43a28a48cbb4d233a23)
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
851409b9eSRichard Henderson# version 2 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
28*46497f6aSRichard 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
401efdd407SRichard Henderson&strex           !extern rn rd rt rt2 imm
411efdd407SRichard Henderson&ldrex           !extern rn rt rt2 imm
4286d21e4bSRichard Henderson&bfx             !extern rd rn lsb widthm1
4386d21e4bSRichard Henderson&bfi             !extern rd rn lsb msb
44*46497f6aSRichard Henderson&sat             !extern rd rn satimm imm sh
45*46497f6aSRichard Henderson&pkh             !extern rd rn rm imm tb
4625ae32c5SRichard Henderson
4725ae32c5SRichard Henderson# Data-processing (register)
4825ae32c5SRichard Henderson
4925ae32c5SRichard Henderson%imm5_12_6       12:3 6:2
5025ae32c5SRichard Henderson
5125ae32c5SRichard Henderson@s_rrr_shi       ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \
5225ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6
5325ae32c5SRichard Henderson@s_rxr_shi       ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \
5425ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6 rn=0
5525ae32c5SRichard Henderson@S_xrr_shi       ....... .... .   rn:4 .... .... .. shty:2 rm:4 \
5625ae32c5SRichard Henderson                 &s_rrr_shi shim=%imm5_12_6 s=1 rd=0
5725ae32c5SRichard Henderson
5825ae32c5SRichard Henderson{
5925ae32c5SRichard Henderson  TST_xrri       1110101 0000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
6025ae32c5SRichard Henderson  AND_rrri       1110101 0000 . .... 0 ... .... .... ....     @s_rrr_shi
6125ae32c5SRichard Henderson}
6225ae32c5SRichard HendersonBIC_rrri         1110101 0001 . .... 0 ... .... .... ....     @s_rrr_shi
6325ae32c5SRichard Henderson{
6425ae32c5SRichard Henderson  MOV_rxri       1110101 0010 . 1111 0 ... .... .... ....     @s_rxr_shi
6525ae32c5SRichard Henderson  ORR_rrri       1110101 0010 . .... 0 ... .... .... ....     @s_rrr_shi
6625ae32c5SRichard Henderson}
6725ae32c5SRichard Henderson{
6825ae32c5SRichard Henderson  MVN_rxri       1110101 0011 . 1111 0 ... .... .... ....     @s_rxr_shi
6925ae32c5SRichard Henderson  ORN_rrri       1110101 0011 . .... 0 ... .... .... ....     @s_rrr_shi
7025ae32c5SRichard Henderson}
7125ae32c5SRichard Henderson{
7225ae32c5SRichard Henderson  TEQ_xrri       1110101 0100 1 .... 0 ... 1111 .... ....     @S_xrr_shi
7325ae32c5SRichard Henderson  EOR_rrri       1110101 0100 . .... 0 ... .... .... ....     @s_rrr_shi
7425ae32c5SRichard Henderson}
75*46497f6aSRichard HendersonPKH              1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
76*46497f6aSRichard Henderson                 &pkh imm=%imm5_12_6
7725ae32c5SRichard Henderson{
7825ae32c5SRichard Henderson  CMN_xrri       1110101 1000 1 .... 0 ... 1111 .... ....     @S_xrr_shi
7925ae32c5SRichard Henderson  ADD_rrri       1110101 1000 . .... 0 ... .... .... ....     @s_rrr_shi
8025ae32c5SRichard Henderson}
8125ae32c5SRichard HendersonADC_rrri         1110101 1010 . .... 0 ... .... .... ....     @s_rrr_shi
8225ae32c5SRichard HendersonSBC_rrri         1110101 1011 . .... 0 ... .... .... ....     @s_rrr_shi
8325ae32c5SRichard Henderson{
8425ae32c5SRichard Henderson  CMP_xrri       1110101 1101 1 .... 0 ... 1111 .... ....     @S_xrr_shi
8525ae32c5SRichard Henderson  SUB_rrri       1110101 1101 . .... 0 ... .... .... ....     @s_rrr_shi
8625ae32c5SRichard Henderson}
8725ae32c5SRichard HendersonRSB_rrri         1110101 1110 . .... 0 ... .... .... ....     @s_rrr_shi
885be2c123SRichard Henderson
895be2c123SRichard Henderson# Data-processing (register-shifted register)
905be2c123SRichard Henderson
915be2c123SRichard HendersonMOV_rxrr         1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
925be2c123SRichard Henderson                 &s_rrr_shr rn=0
93581c6ebdSRichard Henderson
94581c6ebdSRichard Henderson# Data-processing (immediate)
95581c6ebdSRichard Henderson
96581c6ebdSRichard Henderson%t32extrot       26:1 12:3 0:8  !function=t32_expandimm_rot
97581c6ebdSRichard Henderson%t32extimm       26:1 12:3 0:8  !function=t32_expandimm_imm
98581c6ebdSRichard Henderson
99581c6ebdSRichard Henderson@s_rri_rot       ....... .... s:1 rn:4 . ... rd:4 ........ \
100581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot
101581c6ebdSRichard Henderson@s_rxi_rot       ....... .... s:1 .... . ... rd:4 ........ \
102581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0
103581c6ebdSRichard Henderson@S_xri_rot       ....... .... .   rn:4 . ... .... ........ \
104581c6ebdSRichard Henderson                 &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0
105581c6ebdSRichard Henderson
106581c6ebdSRichard Henderson{
107581c6ebdSRichard Henderson  TST_xri        1111 0.0 0000 1 .... 0 ... 1111 ........     @S_xri_rot
108581c6ebdSRichard Henderson  AND_rri        1111 0.0 0000 . .... 0 ... .... ........     @s_rri_rot
109581c6ebdSRichard Henderson}
110581c6ebdSRichard HendersonBIC_rri          1111 0.0 0001 . .... 0 ... .... ........     @s_rri_rot
111581c6ebdSRichard Henderson{
112581c6ebdSRichard Henderson  MOV_rxi        1111 0.0 0010 . 1111 0 ... .... ........     @s_rxi_rot
113581c6ebdSRichard Henderson  ORR_rri        1111 0.0 0010 . .... 0 ... .... ........     @s_rri_rot
114581c6ebdSRichard Henderson}
115581c6ebdSRichard Henderson{
116581c6ebdSRichard Henderson  MVN_rxi        1111 0.0 0011 . 1111 0 ... .... ........     @s_rxi_rot
117581c6ebdSRichard Henderson  ORN_rri        1111 0.0 0011 . .... 0 ... .... ........     @s_rri_rot
118581c6ebdSRichard Henderson}
119581c6ebdSRichard Henderson{
120581c6ebdSRichard Henderson  TEQ_xri        1111 0.0 0100 1 .... 0 ... 1111 ........     @S_xri_rot
121581c6ebdSRichard Henderson  EOR_rri        1111 0.0 0100 . .... 0 ... .... ........     @s_rri_rot
122581c6ebdSRichard Henderson}
123581c6ebdSRichard Henderson{
124581c6ebdSRichard Henderson  CMN_xri        1111 0.0 1000 1 .... 0 ... 1111 ........     @S_xri_rot
125581c6ebdSRichard Henderson  ADD_rri        1111 0.0 1000 . .... 0 ... .... ........     @s_rri_rot
126581c6ebdSRichard Henderson}
127581c6ebdSRichard HendersonADC_rri          1111 0.0 1010 . .... 0 ... .... ........     @s_rri_rot
128581c6ebdSRichard HendersonSBC_rri          1111 0.0 1011 . .... 0 ... .... ........     @s_rri_rot
129581c6ebdSRichard Henderson{
130581c6ebdSRichard Henderson  CMP_xri        1111 0.0 1101 1 .... 0 ... 1111 ........     @S_xri_rot
131581c6ebdSRichard Henderson  SUB_rri        1111 0.0 1101 . .... 0 ... .... ........     @s_rri_rot
132581c6ebdSRichard Henderson}
133581c6ebdSRichard HendersonRSB_rri          1111 0.0 1110 . .... 0 ... .... ........     @s_rri_rot
134bd92fe35SRichard Henderson
135145952e8SRichard Henderson# Data processing (plain binary immediate)
136145952e8SRichard Henderson
137145952e8SRichard Henderson%imm12_26_12_0   26:1 12:3 0:8
138145952e8SRichard Henderson%neg12_26_12_0   26:1 12:3 0:8 !function=negate
139145952e8SRichard Henderson@s0_rri_12       .... ... .... . rn:4 . ... rd:4 ........ \
140145952e8SRichard Henderson                 &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
141145952e8SRichard Henderson
142145952e8SRichard Henderson{
143145952e8SRichard Henderson  ADR            1111 0.1 0000 0 1111 0 ... rd:4 ........ \
144145952e8SRichard Henderson                 &ri imm=%imm12_26_12_0
145145952e8SRichard Henderson  ADD_rri        1111 0.1 0000 0 .... 0 ... .... ........     @s0_rri_12
146145952e8SRichard Henderson}
147145952e8SRichard Henderson{
148145952e8SRichard Henderson  ADR            1111 0.1 0101 0 1111 0 ... rd:4 ........ \
149145952e8SRichard Henderson                 &ri imm=%neg12_26_12_0
150145952e8SRichard Henderson  SUB_rri        1111 0.1 0101 0 .... 0 ... .... ........     @s0_rri_12
151145952e8SRichard Henderson}
152145952e8SRichard Henderson
15386d21e4bSRichard Henderson# Saturate, bitfield
15486d21e4bSRichard Henderson
155*46497f6aSRichard Henderson@sat             .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
156*46497f6aSRichard Henderson                 &sat imm=%imm5_12_6
157*46497f6aSRichard Henderson@sat16           .... .... .. .    . rn:4 . ... rd:4 .. . satimm:5 \
158*46497f6aSRichard Henderson                 &sat sh=0 imm=0
159*46497f6aSRichard Henderson
160*46497f6aSRichard Henderson{
161*46497f6aSRichard Henderson  SSAT16         1111 0011 001 0 .... 0 000 .... 00 0 .....   @sat16
162*46497f6aSRichard Henderson  SSAT           1111 0011 00. 0 .... 0 ... .... .. 0 .....   @sat
163*46497f6aSRichard Henderson}
164*46497f6aSRichard Henderson{
165*46497f6aSRichard Henderson  USAT16         1111 0011 101 0 .... 0 000 .... 00 0 .....   @sat16
166*46497f6aSRichard Henderson  USAT           1111 0011 10. 0 .... 0 ... .... .. 0 .....   @sat
167*46497f6aSRichard Henderson}
168*46497f6aSRichard Henderson
16986d21e4bSRichard Henderson@bfx             .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
17086d21e4bSRichard Henderson                 &bfx lsb=%imm5_12_6
17186d21e4bSRichard Henderson@bfi             .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
17286d21e4bSRichard Henderson                 &bfi lsb=%imm5_12_6
17386d21e4bSRichard Henderson
17486d21e4bSRichard HendersonSBFX             1111 0011 010 0 .... 0 ... .... ..0.....     @bfx
17586d21e4bSRichard HendersonUBFX             1111 0011 110 0 .... 0 ... .... ..0.....     @bfx
17686d21e4bSRichard Henderson
17786d21e4bSRichard Henderson# bfc is bfi w/ rn=15
17886d21e4bSRichard HendersonBFCI             1111 0011 011 0 .... 0 ... .... ..0.....     @bfi
17986d21e4bSRichard Henderson
180bd92fe35SRichard Henderson# Multiply and multiply accumulate
181bd92fe35SRichard Henderson
182bd92fe35SRichard Henderson@s0_rnadm        .... .... .... rn:4 ra:4 rd:4 .... rm:4      &s_rrrr s=0
183bd92fe35SRichard Henderson@s0_rn0dm        .... .... .... rn:4 .... rd:4 .... rm:4      &s_rrrr ra=0 s=0
184bd92fe35SRichard Henderson@rnadm           .... .... .... rn:4 ra:4 rd:4 .... rm:4      &rrrr
18526c6923dSRichard Henderson@rn0dm           .... .... .... rn:4 .... rd:4 .... rm:4      &rrrr ra=0
1866d0730a8SRichard Henderson@rndm            .... .... .... rn:4 .... rd:4 .... rm:4      &rrr
1874c97f5b2SRichard Henderson@rdm             .... .... .... .... .... rd:4 .... rm:4      &rr
188bd92fe35SRichard Henderson
189bd92fe35SRichard Henderson{
190bd92fe35SRichard Henderson  MUL            1111 1011 0000 .... 1111 .... 0000 ....      @s0_rn0dm
191bd92fe35SRichard Henderson  MLA            1111 1011 0000 .... .... .... 0000 ....      @s0_rnadm
192bd92fe35SRichard Henderson}
193bd92fe35SRichard HendersonMLS              1111 1011 0000 .... .... .... 0001 ....      @rnadm
194bd92fe35SRichard HendersonSMULL            1111 1011 1000 .... .... .... 0000 ....      @s0_rnadm
195bd92fe35SRichard HendersonUMULL            1111 1011 1010 .... .... .... 0000 ....      @s0_rnadm
196bd92fe35SRichard HendersonSMLAL            1111 1011 1100 .... .... .... 0000 ....      @s0_rnadm
197bd92fe35SRichard HendersonUMLAL            1111 1011 1110 .... .... .... 0000 ....      @s0_rnadm
198bd92fe35SRichard HendersonUMAAL            1111 1011 1110 .... .... .... 0110 ....      @rnadm
19926c6923dSRichard Henderson{
20026c6923dSRichard Henderson  SMULWB         1111 1011 0011 .... 1111 .... 0000 ....      @rn0dm
20126c6923dSRichard Henderson  SMLAWB         1111 1011 0011 .... .... .... 0000 ....      @rnadm
20226c6923dSRichard Henderson}
20326c6923dSRichard Henderson{
20426c6923dSRichard Henderson  SMULWT         1111 1011 0011 .... 1111 .... 0001 ....      @rn0dm
20526c6923dSRichard Henderson  SMLAWT         1111 1011 0011 .... .... .... 0001 ....      @rnadm
20626c6923dSRichard Henderson}
20726c6923dSRichard Henderson{
20826c6923dSRichard Henderson  SMULBB         1111 1011 0001 .... 1111 .... 0000 ....      @rn0dm
20926c6923dSRichard Henderson  SMLABB         1111 1011 0001 .... .... .... 0000 ....      @rnadm
21026c6923dSRichard Henderson}
21126c6923dSRichard Henderson{
21226c6923dSRichard Henderson  SMULBT         1111 1011 0001 .... 1111 .... 0001 ....      @rn0dm
21326c6923dSRichard Henderson  SMLABT         1111 1011 0001 .... .... .... 0001 ....      @rnadm
21426c6923dSRichard Henderson}
21526c6923dSRichard Henderson{
21626c6923dSRichard Henderson  SMULTB         1111 1011 0001 .... 1111 .... 0010 ....      @rn0dm
21726c6923dSRichard Henderson  SMLATB         1111 1011 0001 .... .... .... 0010 ....      @rnadm
21826c6923dSRichard Henderson}
21926c6923dSRichard Henderson{
22026c6923dSRichard Henderson  SMULTT         1111 1011 0001 .... 1111 .... 0011 ....      @rn0dm
22126c6923dSRichard Henderson  SMLATT         1111 1011 0001 .... .... .... 0011 ....      @rnadm
22226c6923dSRichard Henderson}
22326c6923dSRichard HendersonSMLALBB          1111 1011 1100 .... .... .... 1000 ....      @rnadm
22426c6923dSRichard HendersonSMLALBT          1111 1011 1100 .... .... .... 1001 ....      @rnadm
22526c6923dSRichard HendersonSMLALTB          1111 1011 1100 .... .... .... 1010 ....      @rnadm
22626c6923dSRichard HendersonSMLALTT          1111 1011 1100 .... .... .... 1011 ....      @rnadm
2276d0730a8SRichard Henderson
22886d21e4bSRichard Henderson# usad8 is usada8 w/ ra=15
22986d21e4bSRichard HendersonUSADA8           1111 1011 0111 .... .... .... 0000 ....      @rnadm
23086d21e4bSRichard Henderson
2316d0730a8SRichard Henderson# Data-processing (two source registers)
2326d0730a8SRichard Henderson
2336d0730a8SRichard HendersonQADD             1111 1010 1000 .... 1111 .... 1000 ....      @rndm
2346d0730a8SRichard HendersonQSUB             1111 1010 1000 .... 1111 .... 1010 ....      @rndm
2356d0730a8SRichard HendersonQDADD            1111 1010 1000 .... 1111 .... 1001 ....      @rndm
2366d0730a8SRichard HendersonQDSUB            1111 1010 1000 .... 1111 .... 1011 ....      @rndm
23763130596SRichard Henderson
2386c35d53fSRichard HendersonCRC32B           1111 1010 1100 .... 1111 .... 1000 ....      @rndm
2396c35d53fSRichard HendersonCRC32H           1111 1010 1100 .... 1111 .... 1001 ....      @rndm
2406c35d53fSRichard HendersonCRC32W           1111 1010 1100 .... 1111 .... 1010 ....      @rndm
2416c35d53fSRichard HendersonCRC32CB          1111 1010 1101 .... 1111 .... 1000 ....      @rndm
2426c35d53fSRichard HendersonCRC32CH          1111 1010 1101 .... 1111 .... 1001 ....      @rndm
2436c35d53fSRichard HendersonCRC32CW          1111 1010 1101 .... 1111 .... 1010 ....      @rndm
2446c35d53fSRichard Henderson
245*46497f6aSRichard HendersonSEL              1111 1010 1010 .... 1111 .... 1000 ....      @rndm
246*46497f6aSRichard Henderson
2474c97f5b2SRichard Henderson# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
248*46497f6aSRichard HendersonREV              1111 1010 1001 ---- 1111 .... 1000 ....      @rdm
249*46497f6aSRichard HendersonREV16            1111 1010 1001 ---- 1111 .... 1001 ....      @rdm
250*46497f6aSRichard HendersonRBIT             1111 1010 1001 ---- 1111 .... 1010 ....      @rdm
251*46497f6aSRichard HendersonREVSH            1111 1010 1001 ---- 1111 .... 1011 ....      @rdm
2524c97f5b2SRichard HendersonCLZ              1111 1010 1011 ---- 1111 .... 1000 ....      @rdm
2534c97f5b2SRichard Henderson
25463130596SRichard Henderson# Branches and miscellaneous control
25563130596SRichard Henderson
256d0b26644SRichard Henderson%msr_sysm        4:1 8:4
257d0b26644SRichard Henderson%mrs_sysm        4:1 16:4
2582cde9ea5SRichard Henderson%imm16_16_0      16:4 0:12
259d0b26644SRichard Henderson
260d0b26644SRichard Henderson{
26163130596SRichard Henderson  {
26263130596SRichard Henderson    YIELD        1111 0011 1010 1111 1000 0000 0000 0001
26363130596SRichard Henderson    WFE          1111 0011 1010 1111 1000 0000 0000 0010
26463130596SRichard Henderson    WFI          1111 0011 1010 1111 1000 0000 0000 0011
26563130596SRichard Henderson
26663130596SRichard Henderson    # TODO: Implement SEV, SEVL; may help SMP performance.
26763130596SRichard Henderson    # SEV        1111 0011 1010 1111 1000 0000 0000 0100
26863130596SRichard Henderson    # SEVL       1111 0011 1010 1111 1000 0000 0000 0101
26963130596SRichard Henderson
27063130596SRichard Henderson    # The canonical nop ends in 0000 0000, but the whole rest
27163130596SRichard Henderson    # of the space is "reserved hint, behaves as nop".
27263130596SRichard Henderson    NOP          1111 0011 1010 1111 1000 0000 ---- ----
27363130596SRichard Henderson  }
274d0b26644SRichard Henderson  # Note that the v7m insn overlaps both the normal and banked insn.
275d0b26644SRichard Henderson  {
276d0b26644SRichard Henderson    MRS_bank     1111 0011 111 r:1 .... 1000 rd:4   001. 0000  \
277d0b26644SRichard Henderson                 &mrs_bank sysm=%mrs_sysm
278d0b26644SRichard Henderson    MRS_reg      1111 0011 111 r:1 1111 1000 rd:4   0000 0000  &mrs_reg
279d0b26644SRichard Henderson    MRS_v7m      1111 0011 111 0   1111 1000 rd:4   sysm:8
280d0b26644SRichard Henderson  }
281d0b26644SRichard Henderson  {
282d0b26644SRichard Henderson    MSR_bank     1111 0011 100 r:1 rn:4 1000 ....   001. 0000  \
283d0b26644SRichard Henderson                 &msr_bank sysm=%msr_sysm
284d0b26644SRichard Henderson    MSR_reg      1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000  &msr_reg
285d0b26644SRichard Henderson    MSR_v7m      1111 0011 100 0   rn:4 1000 mask:2 00 sysm:8
286d0b26644SRichard Henderson  }
2874ed95abdSRichard Henderson  BXJ            1111 0011 1100 rm:4 1000 1111 0000 0000      &r
288ef11bc3cSRichard Henderson  {
289ef11bc3cSRichard Henderson    # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for
290ef11bc3cSRichard Henderson    # every other encoding of SUBS.  With v7VE, IMM=0 is redefined as ERET.
291ef11bc3cSRichard Henderson    # The distinction between the two only matters for Hyp mode.
292ef11bc3cSRichard Henderson    ERET         1111 0011 1101 1110 1000 1111 0000 0000
293ef11bc3cSRichard Henderson    SUB_rri      1111 0011 1101 1110 1000 1111 imm:8 \
294ef11bc3cSRichard Henderson                 &s_rri_rot rot=0 s=1 rd=15 rn=14
295ef11bc3cSRichard Henderson  }
2962cde9ea5SRichard Henderson  SMC            1111 0111 1111 imm:4 1000 0000 0000 0000     &i
2972cde9ea5SRichard Henderson  HVC            1111 0111 1110 ....  1000 .... .... ....     \
2982cde9ea5SRichard Henderson                 &i imm=%imm16_16_0
29986d21e4bSRichard Henderson  UDF            1111 0111 1111 ---- 1010 ---- ---- ----
300d0b26644SRichard Henderson}
3015e291fe1SRichard Henderson
3025e291fe1SRichard Henderson# Load/store (register, immediate, literal)
3035e291fe1SRichard Henderson
3045e291fe1SRichard Henderson@ldst_rr         .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \
3055e291fe1SRichard Henderson                 &ldst_rr p=1 w=0 u=1 shtype=0
3065e291fe1SRichard Henderson@ldst_ri_idx     .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \
3075e291fe1SRichard Henderson                 &ldst_ri w=1
3085e291fe1SRichard Henderson@ldst_ri_neg     .... .... .... rn:4 rt:4 .... imm:8 \
3095e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=0
3105e291fe1SRichard Henderson@ldst_ri_unp     .... .... .... rn:4 rt:4 .... imm:8 \
3115e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=1
3125e291fe1SRichard Henderson@ldst_ri_pos     .... .... .... rn:4 rt:4 imm:12 \
3135e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 u=1
3145e291fe1SRichard Henderson@ldst_ri_lit     .... .... u:1 ... .... rt:4 imm:12 \
3155e291fe1SRichard Henderson                 &ldst_ri p=1 w=0 rn=15
3165e291fe1SRichard Henderson
3175e291fe1SRichard HendersonSTRB_rr          1111 1000 0000 .... .... 000000 .. ....      @ldst_rr
3185e291fe1SRichard HendersonSTRB_ri          1111 1000 0000 .... .... 1..1 ........       @ldst_ri_idx
3195e291fe1SRichard HendersonSTRB_ri          1111 1000 0000 .... .... 1100 ........       @ldst_ri_neg
3205e291fe1SRichard HendersonSTRBT_ri         1111 1000 0000 .... .... 1110 ........       @ldst_ri_unp
3215e291fe1SRichard HendersonSTRB_ri          1111 1000 1000 .... .... ............        @ldst_ri_pos
3225e291fe1SRichard Henderson
3235e291fe1SRichard HendersonSTRH_rr          1111 1000 0010 .... .... 000000 .. ....      @ldst_rr
3245e291fe1SRichard HendersonSTRH_ri          1111 1000 0010 .... .... 1..1 ........       @ldst_ri_idx
3255e291fe1SRichard HendersonSTRH_ri          1111 1000 0010 .... .... 1100 ........       @ldst_ri_neg
3265e291fe1SRichard HendersonSTRHT_ri         1111 1000 0010 .... .... 1110 ........       @ldst_ri_unp
3275e291fe1SRichard HendersonSTRH_ri          1111 1000 1010 .... .... ............        @ldst_ri_pos
3285e291fe1SRichard Henderson
3295e291fe1SRichard HendersonSTR_rr           1111 1000 0100 .... .... 000000 .. ....      @ldst_rr
3305e291fe1SRichard HendersonSTR_ri           1111 1000 0100 .... .... 1..1 ........       @ldst_ri_idx
3315e291fe1SRichard HendersonSTR_ri           1111 1000 0100 .... .... 1100 ........       @ldst_ri_neg
3325e291fe1SRichard HendersonSTRT_ri          1111 1000 0100 .... .... 1110 ........       @ldst_ri_unp
3335e291fe1SRichard HendersonSTR_ri           1111 1000 1100 .... .... ............        @ldst_ri_pos
3345e291fe1SRichard Henderson
3355e291fe1SRichard Henderson# Note that Load, unsigned (literal) overlaps all other load encodings.
3365e291fe1SRichard Henderson{
3375e291fe1SRichard Henderson  {
3385e291fe1SRichard Henderson    NOP          1111 1000 -001 1111 1111 ------------        # PLD
3395e291fe1SRichard Henderson    LDRB_ri      1111 1000 .001 1111 .... ............        @ldst_ri_lit
3405e291fe1SRichard Henderson  }
3415e291fe1SRichard Henderson  {
3425e291fe1SRichard Henderson    NOP          1111 1000 1001 ---- 1111 ------------        # PLD
3435e291fe1SRichard Henderson    LDRB_ri      1111 1000 1001 .... .... ............        @ldst_ri_pos
3445e291fe1SRichard Henderson  }
3455e291fe1SRichard Henderson  LDRB_ri        1111 1000 0001 .... .... 1..1 ........       @ldst_ri_idx
3465e291fe1SRichard Henderson  {
3475e291fe1SRichard Henderson    NOP          1111 1000 0001 ---- 1111 1100 --------       # PLD
3485e291fe1SRichard Henderson    LDRB_ri      1111 1000 0001 .... .... 1100 ........       @ldst_ri_neg
3495e291fe1SRichard Henderson  }
3505e291fe1SRichard Henderson  LDRBT_ri       1111 1000 0001 .... .... 1110 ........       @ldst_ri_unp
3515e291fe1SRichard Henderson  {
3525e291fe1SRichard Henderson    NOP          1111 1000 0001 ---- 1111 000000 -- ----      # PLD
3535e291fe1SRichard Henderson    LDRB_rr      1111 1000 0001 .... .... 000000 .. ....      @ldst_rr
3545e291fe1SRichard Henderson  }
3555e291fe1SRichard Henderson}
3565e291fe1SRichard Henderson{
3575e291fe1SRichard Henderson  {
3585e291fe1SRichard Henderson    NOP          1111 1000 -011 1111 1111 ------------        # PLD
3595e291fe1SRichard Henderson    LDRH_ri      1111 1000 .011 1111 .... ............        @ldst_ri_lit
3605e291fe1SRichard Henderson  }
3615e291fe1SRichard Henderson  {
3625e291fe1SRichard Henderson    NOP          1111 1000 1011 ---- 1111 ------------        # PLDW
3635e291fe1SRichard Henderson    LDRH_ri      1111 1000 1011 .... .... ............        @ldst_ri_pos
3645e291fe1SRichard Henderson  }
3655e291fe1SRichard Henderson  LDRH_ri        1111 1000 0011 .... .... 1..1 ........       @ldst_ri_idx
3665e291fe1SRichard Henderson  {
3675e291fe1SRichard Henderson    NOP          1111 1000 0011 ---- 1111 1100 --------       # PLDW
3685e291fe1SRichard Henderson    LDRH_ri      1111 1000 0011 .... .... 1100 ........       @ldst_ri_neg
3695e291fe1SRichard Henderson  }
3705e291fe1SRichard Henderson  LDRHT_ri       1111 1000 0011 .... .... 1110 ........       @ldst_ri_unp
3715e291fe1SRichard Henderson  {
3725e291fe1SRichard Henderson    NOP          1111 1000 0011 ---- 1111 000000 -- ----      # PLDW
3735e291fe1SRichard Henderson    LDRH_rr      1111 1000 0011 .... .... 000000 .. ....      @ldst_rr
3745e291fe1SRichard Henderson  }
3755e291fe1SRichard Henderson}
3765e291fe1SRichard Henderson{
3775e291fe1SRichard Henderson  LDR_ri         1111 1000 .101 1111 .... ............        @ldst_ri_lit
3785e291fe1SRichard Henderson  LDR_ri         1111 1000 1101 .... .... ............        @ldst_ri_pos
3795e291fe1SRichard Henderson  LDR_ri         1111 1000 0101 .... .... 1..1 ........       @ldst_ri_idx
3805e291fe1SRichard Henderson  LDR_ri         1111 1000 0101 .... .... 1100 ........       @ldst_ri_neg
3815e291fe1SRichard Henderson  LDRT_ri        1111 1000 0101 .... .... 1110 ........       @ldst_ri_unp
3825e291fe1SRichard Henderson  LDR_rr         1111 1000 0101 .... .... 000000 .. ....      @ldst_rr
3835e291fe1SRichard Henderson}
3845e291fe1SRichard Henderson# NOPs here are PLI.
3855e291fe1SRichard Henderson{
3865e291fe1SRichard Henderson  {
3875e291fe1SRichard Henderson    NOP          1111 1001 -001 1111 1111 ------------
3885e291fe1SRichard Henderson    LDRSB_ri     1111 1001 .001 1111 .... ............        @ldst_ri_lit
3895e291fe1SRichard Henderson  }
3905e291fe1SRichard Henderson  {
3915e291fe1SRichard Henderson    NOP          1111 1001 1001 ---- 1111 ------------
3925e291fe1SRichard Henderson    LDRSB_ri     1111 1001 1001 .... .... ............        @ldst_ri_pos
3935e291fe1SRichard Henderson  }
3945e291fe1SRichard Henderson  LDRSB_ri       1111 1001 0001 .... .... 1..1 ........       @ldst_ri_idx
3955e291fe1SRichard Henderson  {
3965e291fe1SRichard Henderson    NOP          1111 1001 0001 ---- 1111 1100 --------
3975e291fe1SRichard Henderson    LDRSB_ri     1111 1001 0001 .... .... 1100 ........       @ldst_ri_neg
3985e291fe1SRichard Henderson  }
3995e291fe1SRichard Henderson  LDRSBT_ri      1111 1001 0001 .... .... 1110 ........       @ldst_ri_unp
4005e291fe1SRichard Henderson  {
4015e291fe1SRichard Henderson    NOP          1111 1001 0001 ---- 1111 000000 -- ----
4025e291fe1SRichard Henderson    LDRSB_rr     1111 1001 0001 .... .... 000000 .. ....      @ldst_rr
4035e291fe1SRichard Henderson  }
4045e291fe1SRichard Henderson}
4055e291fe1SRichard Henderson# NOPs here are unallocated memory hints, treated as NOP.
4065e291fe1SRichard Henderson{
4075e291fe1SRichard Henderson  {
4085e291fe1SRichard Henderson    NOP          1111 1001 -011 1111 1111 ------------
4095e291fe1SRichard Henderson    LDRSH_ri     1111 1001 .011 1111 .... ............        @ldst_ri_lit
4105e291fe1SRichard Henderson  }
4115e291fe1SRichard Henderson  {
4125e291fe1SRichard Henderson    NOP          1111 1001 1011 ---- 1111 ------------
4135e291fe1SRichard Henderson    LDRSH_ri     1111 1001 1011 .... .... ............        @ldst_ri_pos
4145e291fe1SRichard Henderson  }
4155e291fe1SRichard Henderson  LDRSH_ri       1111 1001 0011 .... .... 1..1 ........       @ldst_ri_idx
4165e291fe1SRichard Henderson  {
4175e291fe1SRichard Henderson    NOP          1111 1001 0011 ---- 1111 1100 --------
4185e291fe1SRichard Henderson    LDRSH_ri     1111 1001 0011 .... .... 1100 ........       @ldst_ri_neg
4195e291fe1SRichard Henderson  }
4205e291fe1SRichard Henderson  LDRSHT_ri      1111 1001 0011 .... .... 1110 ........       @ldst_ri_unp
4215e291fe1SRichard Henderson  {
4225e291fe1SRichard Henderson    NOP          1111 1001 0011 ---- 1111 000000 -- ----
4235e291fe1SRichard Henderson    LDRSH_rr     1111 1001 0011 .... .... 000000 .. ....      @ldst_rr
4245e291fe1SRichard Henderson  }
4255e291fe1SRichard Henderson}
4265e291fe1SRichard Henderson
4275e291fe1SRichard Henderson%imm8x4          0:8 !function=times_4
4285e291fe1SRichard Henderson&ldst_ri2        p w u rn rt rt2 imm
4295e291fe1SRichard Henderson@ldstd_ri8       .... .... u:1 ... rn:4 rt:4 rt2:4 ........   \
4305e291fe1SRichard Henderson                 &ldst_ri2 imm=%imm8x4
4315e291fe1SRichard Henderson
4325e291fe1SRichard HendersonSTRD_ri_t32      1110 1000 .110 .... .... .... ........    @ldstd_ri8 w=1 p=0
4335e291fe1SRichard HendersonLDRD_ri_t32      1110 1000 .111 .... .... .... ........    @ldstd_ri8 w=1 p=0
4345e291fe1SRichard Henderson
4355e291fe1SRichard HendersonSTRD_ri_t32      1110 1001 .100 .... .... .... ........    @ldstd_ri8 w=0 p=1
4365e291fe1SRichard HendersonLDRD_ri_t32      1110 1001 .101 .... .... .... ........    @ldstd_ri8 w=0 p=1
4375e291fe1SRichard Henderson
4385e291fe1SRichard HendersonSTRD_ri_t32      1110 1001 .110 .... .... .... ........    @ldstd_ri8 w=1 p=1
4395e291fe1SRichard HendersonLDRD_ri_t32      1110 1001 .111 .... .... .... ........    @ldstd_ri8 w=1 p=1
4401efdd407SRichard Henderson
4411efdd407SRichard Henderson# Load/Store Exclusive and Load-Acquire/Store-Release
4421efdd407SRichard Henderson
4431efdd407SRichard Henderson@strex_i         .... .... .... rn:4 rt:4 rd:4 .... .... \
4441efdd407SRichard Henderson                 &strex rt2=15 imm=%imm8x4
4451efdd407SRichard Henderson@strex_0         .... .... .... rn:4 rt:4 .... .... rd:4 \
4461efdd407SRichard Henderson                 &strex rt2=15 imm=0
4471efdd407SRichard Henderson@strex_d         .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
4481efdd407SRichard Henderson                 &strex imm=0
4491efdd407SRichard Henderson
4501efdd407SRichard Henderson@ldrex_i         .... .... .... rn:4 rt:4 .... .... .... \
4511efdd407SRichard Henderson                 &ldrex rt2=15 imm=%imm8x4
4521efdd407SRichard Henderson@ldrex_0         .... .... .... rn:4 rt:4 .... .... .... \
4531efdd407SRichard Henderson                 &ldrex rt2=15 imm=0
4541efdd407SRichard Henderson@ldrex_d         .... .... .... rn:4 rt:4 rt2:4 .... .... \
4551efdd407SRichard Henderson                 &ldrex imm=0
4561efdd407SRichard Henderson
4571efdd407SRichard HendersonSTREX            1110 1000 0100 .... .... .... .... ....      @strex_i
4581efdd407SRichard HendersonSTREXB           1110 1000 1100 .... .... 1111 0100 ....      @strex_0
4591efdd407SRichard HendersonSTREXH           1110 1000 1100 .... .... 1111 0101 ....      @strex_0
4601efdd407SRichard HendersonSTREXD_t32       1110 1000 1100 .... .... .... 0111 ....      @strex_d
4611efdd407SRichard Henderson
4621efdd407SRichard HendersonSTLEX            1110 1000 1100 .... .... 1111 1110 ....      @strex_0
4631efdd407SRichard HendersonSTLEXB           1110 1000 1100 .... .... 1111 1100 ....      @strex_0
4641efdd407SRichard HendersonSTLEXH           1110 1000 1100 .... .... 1111 1101 ....      @strex_0
4651efdd407SRichard HendersonSTLEXD_t32       1110 1000 1100 .... .... .... 1111 ....      @strex_d
4661efdd407SRichard Henderson
4671efdd407SRichard HendersonSTL              1110 1000 1100 .... .... 1111 1010 1111      @ldrex_0
4681efdd407SRichard HendersonSTLB             1110 1000 1100 .... .... 1111 1000 1111      @ldrex_0
4691efdd407SRichard HendersonSTLH             1110 1000 1100 .... .... 1111 1001 1111      @ldrex_0
4701efdd407SRichard Henderson
4711efdd407SRichard HendersonLDREX            1110 1000 0101 .... .... 1111 .... ....      @ldrex_i
4721efdd407SRichard HendersonLDREXB           1110 1000 1101 .... .... 1111 0100 1111      @ldrex_0
4731efdd407SRichard HendersonLDREXH           1110 1000 1101 .... .... 1111 0101 1111      @ldrex_0
4741efdd407SRichard HendersonLDREXD_t32       1110 1000 1101 .... .... .... 0111 1111      @ldrex_d
4751efdd407SRichard Henderson
4761efdd407SRichard HendersonLDAEX            1110 1000 1101 .... .... 1111 1110 1111      @ldrex_0
4771efdd407SRichard HendersonLDAEXB           1110 1000 1101 .... .... 1111 1100 1111      @ldrex_0
4781efdd407SRichard HendersonLDAEXH           1110 1000 1101 .... .... 1111 1101 1111      @ldrex_0
4791efdd407SRichard HendersonLDAEXD_t32       1110 1000 1101 .... .... .... 1111 1111      @ldrex_d
4801efdd407SRichard Henderson
4811efdd407SRichard HendersonLDA              1110 1000 1101 .... .... 1111 1010 1111      @ldrex_0
4821efdd407SRichard HendersonLDAB             1110 1000 1101 .... .... 1111 1000 1111      @ldrex_0
4831efdd407SRichard HendersonLDAH             1110 1000 1101 .... .... 1111 1001 1111      @ldrex_0
484adf1a566SRichard Henderson
485adf1a566SRichard Henderson# Parallel addition and subtraction
486adf1a566SRichard Henderson
487adf1a566SRichard HendersonSADD8            1111 1010 1000 .... 1111 .... 0000 ....      @rndm
488adf1a566SRichard HendersonQADD8            1111 1010 1000 .... 1111 .... 0001 ....      @rndm
489adf1a566SRichard HendersonSHADD8           1111 1010 1000 .... 1111 .... 0010 ....      @rndm
490adf1a566SRichard HendersonUADD8            1111 1010 1000 .... 1111 .... 0100 ....      @rndm
491adf1a566SRichard HendersonUQADD8           1111 1010 1000 .... 1111 .... 0101 ....      @rndm
492adf1a566SRichard HendersonUHADD8           1111 1010 1000 .... 1111 .... 0110 ....      @rndm
493adf1a566SRichard Henderson
494adf1a566SRichard HendersonSADD16           1111 1010 1001 .... 1111 .... 0000 ....      @rndm
495adf1a566SRichard HendersonQADD16           1111 1010 1001 .... 1111 .... 0001 ....      @rndm
496adf1a566SRichard HendersonSHADD16          1111 1010 1001 .... 1111 .... 0010 ....      @rndm
497adf1a566SRichard HendersonUADD16           1111 1010 1001 .... 1111 .... 0100 ....      @rndm
498adf1a566SRichard HendersonUQADD16          1111 1010 1001 .... 1111 .... 0101 ....      @rndm
499adf1a566SRichard HendersonUHADD16          1111 1010 1001 .... 1111 .... 0110 ....      @rndm
500adf1a566SRichard Henderson
501adf1a566SRichard HendersonSASX             1111 1010 1010 .... 1111 .... 0000 ....      @rndm
502adf1a566SRichard HendersonQASX             1111 1010 1010 .... 1111 .... 0001 ....      @rndm
503adf1a566SRichard HendersonSHASX            1111 1010 1010 .... 1111 .... 0010 ....      @rndm
504adf1a566SRichard HendersonUASX             1111 1010 1010 .... 1111 .... 0100 ....      @rndm
505adf1a566SRichard HendersonUQASX            1111 1010 1010 .... 1111 .... 0101 ....      @rndm
506adf1a566SRichard HendersonUHASX            1111 1010 1010 .... 1111 .... 0110 ....      @rndm
507adf1a566SRichard Henderson
508adf1a566SRichard HendersonSSUB8            1111 1010 1100 .... 1111 .... 0000 ....      @rndm
509adf1a566SRichard HendersonQSUB8            1111 1010 1100 .... 1111 .... 0001 ....      @rndm
510adf1a566SRichard HendersonSHSUB8           1111 1010 1100 .... 1111 .... 0010 ....      @rndm
511adf1a566SRichard HendersonUSUB8            1111 1010 1100 .... 1111 .... 0100 ....      @rndm
512adf1a566SRichard HendersonUQSUB8           1111 1010 1100 .... 1111 .... 0101 ....      @rndm
513adf1a566SRichard HendersonUHSUB8           1111 1010 1100 .... 1111 .... 0110 ....      @rndm
514adf1a566SRichard Henderson
515adf1a566SRichard HendersonSSUB16           1111 1010 1101 .... 1111 .... 0000 ....      @rndm
516adf1a566SRichard HendersonQSUB16           1111 1010 1101 .... 1111 .... 0001 ....      @rndm
517adf1a566SRichard HendersonSHSUB16          1111 1010 1101 .... 1111 .... 0010 ....      @rndm
518adf1a566SRichard HendersonUSUB16           1111 1010 1101 .... 1111 .... 0100 ....      @rndm
519adf1a566SRichard HendersonUQSUB16          1111 1010 1101 .... 1111 .... 0101 ....      @rndm
520adf1a566SRichard HendersonUHSUB16          1111 1010 1101 .... 1111 .... 0110 ....      @rndm
521adf1a566SRichard Henderson
522adf1a566SRichard HendersonSSAX             1111 1010 1110 .... 1111 .... 0000 ....      @rndm
523adf1a566SRichard HendersonQSAX             1111 1010 1110 .... 1111 .... 0001 ....      @rndm
524adf1a566SRichard HendersonSHSAX            1111 1010 1110 .... 1111 .... 0010 ....      @rndm
525adf1a566SRichard HendersonUSAX             1111 1010 1110 .... 1111 .... 0100 ....      @rndm
526adf1a566SRichard HendersonUQSAX            1111 1010 1110 .... 1111 .... 0101 ....      @rndm
527adf1a566SRichard HendersonUHSAX            1111 1010 1110 .... 1111 .... 0110 ....      @rndm
528*46497f6aSRichard Henderson
529*46497f6aSRichard Henderson# Register extends
530*46497f6aSRichard Henderson
531*46497f6aSRichard Henderson@rrr_rot         .... .... .... rn:4 .... rd:4 .. rot:2 rm:4  &rrr_rot
532*46497f6aSRichard Henderson
533*46497f6aSRichard HendersonSXTAH            1111 1010 0000 .... 1111 .... 10.. ....      @rrr_rot
534*46497f6aSRichard HendersonUXTAH            1111 1010 0001 .... 1111 .... 10.. ....      @rrr_rot
535*46497f6aSRichard HendersonSXTAB16          1111 1010 0010 .... 1111 .... 10.. ....      @rrr_rot
536*46497f6aSRichard HendersonUXTAB16          1111 1010 0011 .... 1111 .... 10.. ....      @rrr_rot
537*46497f6aSRichard HendersonSXTAB            1111 1010 0100 .... 1111 .... 10.. ....      @rrr_rot
538*46497f6aSRichard HendersonUXTAB            1111 1010 0101 .... 1111 .... 10.. ....      @rrr_rot
539