]> git.proxmox.com Git - mirror_qemu.git/blame - target/arm/a32.decode
target/ppc: Remove last user of .load_state_old
[mirror_qemu.git] / target / arm / a32.decode
CommitLineData
51409b9e
RH
1# A32 conditional instructions
2#
3# Copyright (c) 2019 Linaro, Ltd
4#
5# This library is free software; you can redistribute it and/or
6# modify it under the terms of the GNU Lesser General Public
7# License as published by the Free Software Foundation; either
50f57e09 8# version 2.1 of the License, or (at your option) any later version.
51409b9e
RH
9#
10# This library is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13# Lesser General Public License for more details.
14#
15# You should have received a copy of the GNU Lesser General Public
16# License along with this library; if not, see <http://www.gnu.org/licenses/>.
17
18#
19# This file is processed by scripts/decodetree.py
20#
21# All of the insn that have a COND field in insn[31:28] are here.
22# All insns that have 0xf in insn[31:28] are in a32-uncond.decode.
23#
25ae32c5 24
63130596 25&empty
25ae32c5 26&s_rrr_shi s rd rn rm shim shty
5be2c123 27&s_rrr_shr s rn rd rm rs shty
581c6ebd 28&s_rri_rot s rn rd imm rot
bd92fe35
RH
29&s_rrrr s rd rn rm ra
30&rrrr rd rn rm ra
46497f6a 31&rrr_rot rd rn rm rot
6d0730a8 32&rrr rd rn rm
4c97f5b2 33&rr rd rm
145952e8 34&ri rd imm
4ed95abd 35&r rm
2cde9ea5 36&i imm
d0b26644
RH
37&msr_reg rn r mask
38&mrs_reg rd r
39&msr_bank rn r sysm
40&mrs_bank rd r sysm
5e291fe1
RH
41&ldst_rr p w u rn rt rm shimm shtype
42&ldst_ri p w u rn rt imm
c5c426d4 43&ldst_block rn i b u w list
1efdd407
RH
44&strex rn rd rt rt2 imm
45&ldrex rn rt rt2 imm
86d21e4b
RH
46&bfx rd rn lsb widthm1
47&bfi rd rn lsb msb
46497f6a
RH
48&sat rd rn satimm imm sh
49&pkh rd rn rm imm tb
cd8be50e
PM
50&mcr cp opc1 crn crm opc2 rt
51&mcrr cp opc1 crm rt rt2
25ae32c5
RH
52
53# Data-processing (register)
54
55@s_rrr_shi ---- ... .... s:1 rn:4 rd:4 shim:5 shty:2 . rm:4 \
56 &s_rrr_shi
57@s_rxr_shi ---- ... .... s:1 .... rd:4 shim:5 shty:2 . rm:4 \
58 &s_rrr_shi rn=0
59@S_xrr_shi ---- ... .... . rn:4 .... shim:5 shty:2 . rm:4 \
60 &s_rrr_shi s=1 rd=0
61
62AND_rrri .... 000 0000 . .... .... ..... .. 0 .... @s_rrr_shi
63EOR_rrri .... 000 0001 . .... .... ..... .. 0 .... @s_rrr_shi
64SUB_rrri .... 000 0010 . .... .... ..... .. 0 .... @s_rrr_shi
65RSB_rrri .... 000 0011 . .... .... ..... .. 0 .... @s_rrr_shi
66ADD_rrri .... 000 0100 . .... .... ..... .. 0 .... @s_rrr_shi
67ADC_rrri .... 000 0101 . .... .... ..... .. 0 .... @s_rrr_shi
68SBC_rrri .... 000 0110 . .... .... ..... .. 0 .... @s_rrr_shi
69RSC_rrri .... 000 0111 . .... .... ..... .. 0 .... @s_rrr_shi
70TST_xrri .... 000 1000 1 .... 0000 ..... .. 0 .... @S_xrr_shi
71TEQ_xrri .... 000 1001 1 .... 0000 ..... .. 0 .... @S_xrr_shi
72CMP_xrri .... 000 1010 1 .... 0000 ..... .. 0 .... @S_xrr_shi
73CMN_xrri .... 000 1011 1 .... 0000 ..... .. 0 .... @S_xrr_shi
74ORR_rrri .... 000 1100 . .... .... ..... .. 0 .... @s_rrr_shi
75MOV_rxri .... 000 1101 . 0000 .... ..... .. 0 .... @s_rxr_shi
76BIC_rrri .... 000 1110 . .... .... ..... .. 0 .... @s_rrr_shi
77MVN_rxri .... 000 1111 . 0000 .... ..... .. 0 .... @s_rxr_shi
5be2c123 78
8f445127
RH
79%imm16 16:4 0:12
80@mov16 ---- .... .... .... rd:4 ............ &ri imm=%imm16
81
82MOVW .... 0011 0000 .... .... ............ @mov16
83MOVT .... 0011 0100 .... .... ............ @mov16
84
5be2c123
RH
85# Data-processing (register-shifted register)
86
87@s_rrr_shr ---- ... .... s:1 rn:4 rd:4 rs:4 . shty:2 . rm:4 \
88 &s_rrr_shr
89@s_rxr_shr ---- ... .... s:1 .... rd:4 rs:4 . shty:2 . rm:4 \
90 &s_rrr_shr rn=0
91@S_xrr_shr ---- ... .... . rn:4 .... rs:4 . shty:2 . rm:4 \
92 &s_rrr_shr rd=0 s=1
93
94AND_rrrr .... 000 0000 . .... .... .... 0 .. 1 .... @s_rrr_shr
95EOR_rrrr .... 000 0001 . .... .... .... 0 .. 1 .... @s_rrr_shr
96SUB_rrrr .... 000 0010 . .... .... .... 0 .. 1 .... @s_rrr_shr
97RSB_rrrr .... 000 0011 . .... .... .... 0 .. 1 .... @s_rrr_shr
98ADD_rrrr .... 000 0100 . .... .... .... 0 .. 1 .... @s_rrr_shr
99ADC_rrrr .... 000 0101 . .... .... .... 0 .. 1 .... @s_rrr_shr
100SBC_rrrr .... 000 0110 . .... .... .... 0 .. 1 .... @s_rrr_shr
101RSC_rrrr .... 000 0111 . .... .... .... 0 .. 1 .... @s_rrr_shr
102TST_xrrr .... 000 1000 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr
103TEQ_xrrr .... 000 1001 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr
104CMP_xrrr .... 000 1010 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr
105CMN_xrrr .... 000 1011 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr
106ORR_rrrr .... 000 1100 . .... .... .... 0 .. 1 .... @s_rrr_shr
107MOV_rxrr .... 000 1101 . 0000 .... .... 0 .. 1 .... @s_rxr_shr
108BIC_rrrr .... 000 1110 . .... .... .... 0 .. 1 .... @s_rrr_shr
109MVN_rxrr .... 000 1111 . 0000 .... .... 0 .. 1 .... @s_rxr_shr
581c6ebd
RH
110
111# Data-processing (immediate)
112
113%a32extrot 8:4 !function=times_2
114
115@s_rri_rot ---- ... .... s:1 rn:4 rd:4 .... imm:8 \
116 &s_rri_rot rot=%a32extrot
117@s_rxi_rot ---- ... .... s:1 .... rd:4 .... imm:8 \
118 &s_rri_rot rot=%a32extrot rn=0
119@S_xri_rot ---- ... .... . rn:4 .... .... imm:8 \
120 &s_rri_rot rot=%a32extrot rd=0 s=1
121
122AND_rri .... 001 0000 . .... .... ............ @s_rri_rot
123EOR_rri .... 001 0001 . .... .... ............ @s_rri_rot
124SUB_rri .... 001 0010 . .... .... ............ @s_rri_rot
125RSB_rri .... 001 0011 . .... .... ............ @s_rri_rot
126ADD_rri .... 001 0100 . .... .... ............ @s_rri_rot
127ADC_rri .... 001 0101 . .... .... ............ @s_rri_rot
128SBC_rri .... 001 0110 . .... .... ............ @s_rri_rot
129RSC_rri .... 001 0111 . .... .... ............ @s_rri_rot
130TST_xri .... 001 1000 1 .... 0000 ............ @S_xri_rot
131TEQ_xri .... 001 1001 1 .... 0000 ............ @S_xri_rot
132CMP_xri .... 001 1010 1 .... 0000 ............ @S_xri_rot
133CMN_xri .... 001 1011 1 .... 0000 ............ @S_xri_rot
134ORR_rri .... 001 1100 . .... .... ............ @s_rri_rot
135MOV_rxi .... 001 1101 . 0000 .... ............ @s_rxi_rot
136BIC_rri .... 001 1110 . .... .... ............ @s_rri_rot
137MVN_rxi .... 001 1111 . 0000 .... ............ @s_rxi_rot
bd92fe35
RH
138
139# Multiply and multiply accumulate
140
141@s_rdamn ---- .... ... s:1 rd:4 ra:4 rm:4 .... rn:4 &s_rrrr
142@s_rd0mn ---- .... ... s:1 rd:4 .... rm:4 .... rn:4 &s_rrrr ra=0
143@rdamn ---- .... ... . rd:4 ra:4 rm:4 .... rn:4 &rrrr
26c6923d 144@rd0mn ---- .... ... . rd:4 .... rm:4 .... rn:4 &rrrr ra=0
bd92fe35
RH
145
146MUL .... 0000 000 . .... 0000 .... 1001 .... @s_rd0mn
147MLA .... 0000 001 . .... .... .... 1001 .... @s_rdamn
148UMAAL .... 0000 010 0 .... .... .... 1001 .... @rdamn
149MLS .... 0000 011 0 .... .... .... 1001 .... @rdamn
150UMULL .... 0000 100 . .... .... .... 1001 .... @s_rdamn
151UMLAL .... 0000 101 . .... .... .... 1001 .... @s_rdamn
152SMULL .... 0000 110 . .... .... .... 1001 .... @s_rdamn
153SMLAL .... 0000 111 . .... .... .... 1001 .... @s_rdamn
6d0730a8
RH
154
155# Saturating addition and subtraction
156
157@rndm ---- .... .... rn:4 rd:4 .... .... rm:4 &rrr
158
159QADD .... 0001 0000 .... .... 0000 0101 .... @rndm
160QSUB .... 0001 0010 .... .... 0000 0101 .... @rndm
161QDADD .... 0001 0100 .... .... 0000 0101 .... @rndm
162QDSUB .... 0001 0110 .... .... 0000 0101 .... @rndm
26c6923d
RH
163
164# Halfword multiply and multiply accumulate
165
166SMLABB .... 0001 0000 .... .... .... 1000 .... @rdamn
167SMLABT .... 0001 0000 .... .... .... 1100 .... @rdamn
168SMLATB .... 0001 0000 .... .... .... 1010 .... @rdamn
169SMLATT .... 0001 0000 .... .... .... 1110 .... @rdamn
170SMLAWB .... 0001 0010 .... .... .... 1000 .... @rdamn
171SMULWB .... 0001 0010 .... 0000 .... 1010 .... @rd0mn
172SMLAWT .... 0001 0010 .... .... .... 1100 .... @rdamn
173SMULWT .... 0001 0010 .... 0000 .... 1110 .... @rd0mn
174SMLALBB .... 0001 0100 .... .... .... 1000 .... @rdamn
175SMLALBT .... 0001 0100 .... .... .... 1100 .... @rdamn
176SMLALTB .... 0001 0100 .... .... .... 1010 .... @rdamn
177SMLALTT .... 0001 0100 .... .... .... 1110 .... @rdamn
178SMULBB .... 0001 0110 .... 0000 .... 1000 .... @rd0mn
179SMULBT .... 0001 0110 .... 0000 .... 1100 .... @rd0mn
180SMULTB .... 0001 0110 .... 0000 .... 1010 .... @rd0mn
181SMULTT .... 0001 0110 .... 0000 .... 1110 .... @rd0mn
63130596
RH
182
183# MSR (immediate) and hints
184
185&msr_i r mask rot imm
186@msr_i ---- .... .... mask:4 .... rot:4 imm:8 &msr_i
187
188{
189 {
190 YIELD ---- 0011 0010 0000 1111 ---- 0000 0001
191 WFE ---- 0011 0010 0000 1111 ---- 0000 0010
192 WFI ---- 0011 0010 0000 1111 ---- 0000 0011
193
194 # TODO: Implement SEV, SEVL; may help SMP performance.
195 # SEV ---- 0011 0010 0000 1111 ---- 0000 0100
196 # SEVL ---- 0011 0010 0000 1111 ---- 0000 0101
197
198 # The canonical nop ends in 00000000, but the whole of the
199 # rest of the space executes as nop if otherwise unsupported.
200 NOP ---- 0011 0010 0000 1111 ---- ---- ----
201 }
202 # Note mask = 0 is covered by NOP
203 MSR_imm .... 0011 0010 .... 1111 .... .... .... @msr_i r=0
204}
205MSR_imm .... 0011 0110 .... 1111 .... .... .... @msr_i r=1
d0b26644 206
6c35d53f
RH
207# Cyclic Redundancy Check
208
209CRC32B .... 0001 0000 .... .... 0000 0100 .... @rndm
210CRC32H .... 0001 0010 .... .... 0000 0100 .... @rndm
211CRC32W .... 0001 0100 .... .... 0000 0100 .... @rndm
212CRC32CB .... 0001 0000 .... .... 0010 0100 .... @rndm
213CRC32CH .... 0001 0010 .... .... 0010 0100 .... @rndm
214CRC32CW .... 0001 0100 .... .... 0010 0100 .... @rndm
215
d0b26644
RH
216# Miscellaneous instructions
217
218%sysm 8:1 16:4
2cde9ea5 219%imm16_8_0 8:12 0:4
d0b26644 220
4ed95abd 221@rm ---- .... .... .... .... .... .... rm:4 &r
4c97f5b2 222@rdm ---- .... .... .... rd:4 .... .... rm:4 &rr
2cde9ea5 223@i16 ---- .... .... .... .... .... .... .... &i imm=%imm16_8_0
4ed95abd 224
d0b26644
RH
225MRS_bank ---- 0001 0 r:1 00 .... rd:4 001. 0000 0000 &mrs_bank %sysm
226MSR_bank ---- 0001 0 r:1 10 .... 1111 001. 0000 rn:4 &msr_bank %sysm
227
228MRS_reg ---- 0001 0 r:1 00 1111 rd:4 0000 0000 0000 &mrs_reg
229MSR_reg ---- 0001 0 r:1 10 mask:4 1111 0000 0000 rn:4 &msr_reg
4ed95abd
RH
230
231BX .... 0001 0010 1111 1111 1111 0001 .... @rm
232BXJ .... 0001 0010 1111 1111 1111 0010 .... @rm
233BLX_r .... 0001 0010 1111 1111 1111 0011 .... @rm
4c97f5b2
RH
234
235CLZ .... 0001 0110 1111 .... 1111 0001 .... @rdm
ef11bc3c
RH
236
237ERET ---- 0001 0110 0000 0000 0000 0110 1110
2cde9ea5
RH
238
239HLT .... 0001 0000 .... .... .... 0111 .... @i16
240BKPT .... 0001 0010 .... .... .... 0111 .... @i16
241HVC .... 0001 0100 .... .... .... 0111 .... @i16
242SMC ---- 0001 0110 0000 0000 0000 0111 imm:4 &i
5e291fe1
RH
243
244# Load/Store Dual, Half, Signed Byte (register)
245
246@ldst_rr_p1w ---- ...1 u:1 . w:1 . rn:4 rt:4 .... .... rm:4 \
247 &ldst_rr p=1 shimm=0 shtype=0
248@ldst_rr_pw0 ---- ...0 u:1 . 0 . rn:4 rt:4 .... .... rm:4 \
249 &ldst_rr p=0 w=0 shimm=0 shtype=0
250
251STRH_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_pw0
252STRH_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_p1w
253
254LDRD_rr .... 000. .0.0 .... .... 0000 1101 .... @ldst_rr_pw0
255LDRD_rr .... 000. .0.0 .... .... 0000 1101 .... @ldst_rr_p1w
256
257STRD_rr .... 000. .0.0 .... .... 0000 1111 .... @ldst_rr_pw0
258STRD_rr .... 000. .0.0 .... .... 0000 1111 .... @ldst_rr_p1w
259
260LDRH_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_pw0
261LDRH_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_p1w
262
263LDRSB_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_pw0
264LDRSB_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_p1w
265
266LDRSH_rr .... 000. .0.1 .... .... 0000 1111 .... @ldst_rr_pw0
267LDRSH_rr .... 000. .0.1 .... .... 0000 1111 .... @ldst_rr_p1w
268
269# Note the unpriv load/stores use the previously invalid P=0, W=1 encoding,
270# and act as normal post-indexed (P=0, W=0).
271@ldst_rr_p0w1 ---- ...0 u:1 . 1 . rn:4 rt:4 .... .... rm:4 \
272 &ldst_rr p=0 w=0 shimm=0 shtype=0
273
274STRHT_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_p0w1
275LDRHT_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_p0w1
276LDRSBT_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_p0w1
277LDRSHT_rr .... 000. .0.1 .... .... 0000 1111 .... @ldst_rr_p0w1
278
279# Load/Store word and unsigned byte (register)
280
281@ldst_rs_p1w ---- ...1 u:1 . w:1 . rn:4 rt:4 shimm:5 shtype:2 . rm:4 \
282 &ldst_rr p=1
283@ldst_rs_pw0 ---- ...0 u:1 . 0 . rn:4 rt:4 shimm:5 shtype:2 . rm:4 \
284 &ldst_rr p=0 w=0
285
286STR_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_pw0
287STR_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_p1w
288STRB_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_pw0
289STRB_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_p1w
290
291LDR_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_pw0
292LDR_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_p1w
293LDRB_rr .... 011. .1.1 .... .... .... ...0 .... @ldst_rs_pw0
294LDRB_rr .... 011. .1.1 .... .... .... ...0 .... @ldst_rs_p1w
295
296@ldst_rs_p0w1 ---- ...0 u:1 . 1 . rn:4 rt:4 shimm:5 shtype:2 . rm:4 \
297 &ldst_rr p=0 w=0
298
299STRT_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_p0w1
300STRBT_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_p0w1
301LDRT_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_p0w1
302LDRBT_rr .... 011. .1.1 .... .... .... ...0 .... @ldst_rs_p0w1
303
304# Load/Store Dual, Half, Signed Byte (immediate)
305
306%imm8s_8_0 8:4 0:4
307@ldst_ri8_p1w ---- ...1 u:1 . w:1 . rn:4 rt:4 .... .... .... \
308 &ldst_ri imm=%imm8s_8_0 p=1
309@ldst_ri8_pw0 ---- ...0 u:1 . 0 . rn:4 rt:4 .... .... .... \
310 &ldst_ri imm=%imm8s_8_0 p=0 w=0
311
312STRH_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_pw0
313STRH_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_p1w
314
315LDRD_ri_a32 .... 000. .1.0 .... .... .... 1101 .... @ldst_ri8_pw0
316LDRD_ri_a32 .... 000. .1.0 .... .... .... 1101 .... @ldst_ri8_p1w
317
318STRD_ri_a32 .... 000. .1.0 .... .... .... 1111 .... @ldst_ri8_pw0
319STRD_ri_a32 .... 000. .1.0 .... .... .... 1111 .... @ldst_ri8_p1w
320
321LDRH_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_pw0
322LDRH_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_p1w
323
324LDRSB_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_pw0
325LDRSB_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_p1w
326
327LDRSH_ri .... 000. .1.1 .... .... .... 1111 .... @ldst_ri8_pw0
328LDRSH_ri .... 000. .1.1 .... .... .... 1111 .... @ldst_ri8_p1w
329
330# Note the unpriv load/stores use the previously invalid P=0, W=1 encoding,
331# and act as normal post-indexed (P=0, W=0).
332@ldst_ri8_p0w1 ---- ...0 u:1 . 1 . rn:4 rt:4 .... .... .... \
333 &ldst_ri imm=%imm8s_8_0 p=0 w=0
334
335STRHT_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_p0w1
336LDRHT_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_p0w1
337LDRSBT_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_p0w1
338LDRSHT_ri .... 000. .1.1 .... .... .... 1111 .... @ldst_ri8_p0w1
339
340# Load/Store word and unsigned byte (immediate)
341
342@ldst_ri12_p1w ---- ...1 u:1 . w:1 . rn:4 rt:4 imm:12 &ldst_ri p=1
343@ldst_ri12_pw0 ---- ...0 u:1 . 0 . rn:4 rt:4 imm:12 &ldst_ri p=0 w=0
344
345STR_ri .... 010. .0.0 .... .... ............ @ldst_ri12_p1w
346STR_ri .... 010. .0.0 .... .... ............ @ldst_ri12_pw0
347STRB_ri .... 010. .1.0 .... .... ............ @ldst_ri12_p1w
348STRB_ri .... 010. .1.0 .... .... ............ @ldst_ri12_pw0
349
350LDR_ri .... 010. .0.1 .... .... ............ @ldst_ri12_p1w
351LDR_ri .... 010. .0.1 .... .... ............ @ldst_ri12_pw0
352LDRB_ri .... 010. .1.1 .... .... ............ @ldst_ri12_p1w
353LDRB_ri .... 010. .1.1 .... .... ............ @ldst_ri12_pw0
354
355@ldst_ri12_p0w1 ---- ...0 u:1 . 1 . rn:4 rt:4 imm:12 &ldst_ri p=0 w=0
356
357STRT_ri .... 010. .0.0 .... .... ............ @ldst_ri12_p0w1
358STRBT_ri .... 010. .1.0 .... .... ............ @ldst_ri12_p0w1
359LDRT_ri .... 010. .0.1 .... .... ............ @ldst_ri12_p0w1
360LDRBT_ri .... 010. .1.1 .... .... ............ @ldst_ri12_p0w1
1efdd407
RH
361
362# Synchronization primitives
363
364@swp ---- .... .... rn:4 rt:4 .... .... rt2:4
365
366SWP .... 0001 0000 .... .... 0000 1001 .... @swp
367SWPB .... 0001 0100 .... .... 0000 1001 .... @swp
368
369# Load/Store Exclusive and Load-Acquire/Store-Release
370#
371# Note rt2 for STREXD/LDREXD is set by the helper after checking rt is even.
372
373@strex ---- .... .... rn:4 rd:4 .... .... rt:4 \
374 &strex imm=0 rt2=15
375@ldrex ---- .... .... rn:4 rt:4 .... .... .... \
376 &ldrex imm=0 rt2=15
377@stl ---- .... .... rn:4 .... .... .... rt:4 \
378 &ldrex imm=0 rt2=15
379
380STREX .... 0001 1000 .... .... 1111 1001 .... @strex
381STREXD_a32 .... 0001 1010 .... .... 1111 1001 .... @strex
382STREXB .... 0001 1100 .... .... 1111 1001 .... @strex
383STREXH .... 0001 1110 .... .... 1111 1001 .... @strex
384
385STLEX .... 0001 1000 .... .... 1110 1001 .... @strex
386STLEXD_a32 .... 0001 1010 .... .... 1110 1001 .... @strex
387STLEXB .... 0001 1100 .... .... 1110 1001 .... @strex
388STLEXH .... 0001 1110 .... .... 1110 1001 .... @strex
389
390STL .... 0001 1000 .... 1111 1100 1001 .... @stl
391STLB .... 0001 1100 .... 1111 1100 1001 .... @stl
392STLH .... 0001 1110 .... 1111 1100 1001 .... @stl
393
394LDREX .... 0001 1001 .... .... 1111 1001 1111 @ldrex
395LDREXD_a32 .... 0001 1011 .... .... 1111 1001 1111 @ldrex
396LDREXB .... 0001 1101 .... .... 1111 1001 1111 @ldrex
397LDREXH .... 0001 1111 .... .... 1111 1001 1111 @ldrex
398
399LDAEX .... 0001 1001 .... .... 1110 1001 1111 @ldrex
400LDAEXD_a32 .... 0001 1011 .... .... 1110 1001 1111 @ldrex
401LDAEXB .... 0001 1101 .... .... 1110 1001 1111 @ldrex
402LDAEXH .... 0001 1111 .... .... 1110 1001 1111 @ldrex
403
404LDA .... 0001 1001 .... .... 1100 1001 1111 @ldrex
405LDAB .... 0001 1101 .... .... 1100 1001 1111 @ldrex
406LDAH .... 0001 1111 .... .... 1100 1001 1111 @ldrex
86d21e4b
RH
407
408# Media instructions
409
410# usad8 is usada8 w/ ra=15
411USADA8 ---- 0111 1000 rd:4 ra:4 rm:4 0001 rn:4
412
413# ubfx and sbfx
414@bfx ---- .... ... widthm1:5 rd:4 lsb:5 ... rn:4 &bfx
415
416SBFX .... 0111 101 ..... .... ..... 101 .... @bfx
417UBFX .... 0111 111 ..... .... ..... 101 .... @bfx
418
419# bfc is bfi w/ rn=15
420BFCI ---- 0111 110 msb:5 rd:4 lsb:5 001 rn:4 &bfi
421
422# While we could get UDEF by not including this, add the pattern for
423# documentation and to conflict with any other typos in this file.
424UDF 1110 0111 1111 ---- ---- ---- 1111 ----
adf1a566
RH
425
426# Parallel addition and subtraction
427
428SADD16 .... 0110 0001 .... .... 1111 0001 .... @rndm
429SASX .... 0110 0001 .... .... 1111 0011 .... @rndm
430SSAX .... 0110 0001 .... .... 1111 0101 .... @rndm
431SSUB16 .... 0110 0001 .... .... 1111 0111 .... @rndm
432SADD8 .... 0110 0001 .... .... 1111 1001 .... @rndm
433SSUB8 .... 0110 0001 .... .... 1111 1111 .... @rndm
434
435QADD16 .... 0110 0010 .... .... 1111 0001 .... @rndm
436QASX .... 0110 0010 .... .... 1111 0011 .... @rndm
437QSAX .... 0110 0010 .... .... 1111 0101 .... @rndm
438QSUB16 .... 0110 0010 .... .... 1111 0111 .... @rndm
439QADD8 .... 0110 0010 .... .... 1111 1001 .... @rndm
440QSUB8 .... 0110 0010 .... .... 1111 1111 .... @rndm
441
442SHADD16 .... 0110 0011 .... .... 1111 0001 .... @rndm
443SHASX .... 0110 0011 .... .... 1111 0011 .... @rndm
444SHSAX .... 0110 0011 .... .... 1111 0101 .... @rndm
445SHSUB16 .... 0110 0011 .... .... 1111 0111 .... @rndm
446SHADD8 .... 0110 0011 .... .... 1111 1001 .... @rndm
447SHSUB8 .... 0110 0011 .... .... 1111 1111 .... @rndm
448
449UADD16 .... 0110 0101 .... .... 1111 0001 .... @rndm
450UASX .... 0110 0101 .... .... 1111 0011 .... @rndm
451USAX .... 0110 0101 .... .... 1111 0101 .... @rndm
452USUB16 .... 0110 0101 .... .... 1111 0111 .... @rndm
453UADD8 .... 0110 0101 .... .... 1111 1001 .... @rndm
454USUB8 .... 0110 0101 .... .... 1111 1111 .... @rndm
455
456UQADD16 .... 0110 0110 .... .... 1111 0001 .... @rndm
457UQASX .... 0110 0110 .... .... 1111 0011 .... @rndm
458UQSAX .... 0110 0110 .... .... 1111 0101 .... @rndm
459UQSUB16 .... 0110 0110 .... .... 1111 0111 .... @rndm
460UQADD8 .... 0110 0110 .... .... 1111 1001 .... @rndm
461UQSUB8 .... 0110 0110 .... .... 1111 1111 .... @rndm
462
463UHADD16 .... 0110 0111 .... .... 1111 0001 .... @rndm
464UHASX .... 0110 0111 .... .... 1111 0011 .... @rndm
465UHSAX .... 0110 0111 .... .... 1111 0101 .... @rndm
466UHSUB16 .... 0110 0111 .... .... 1111 0111 .... @rndm
467UHADD8 .... 0110 0111 .... .... 1111 1001 .... @rndm
468UHSUB8 .... 0110 0111 .... .... 1111 1111 .... @rndm
46497f6a
RH
469
470# Packing, unpacking, saturation, and reversal
471
472PKH ---- 0110 1000 rn:4 rd:4 imm:5 tb:1 01 rm:4 &pkh
473
474@sat ---- .... ... satimm:5 rd:4 imm:5 sh:1 .. rn:4 &sat
475@sat16 ---- .... .... satimm:4 rd:4 .... .... rn:4 \
476 &sat imm=0 sh=0
477
478SSAT .... 0110 101. .... .... .... ..01 .... @sat
479USAT .... 0110 111. .... .... .... ..01 .... @sat
480
481SSAT16 .... 0110 1010 .... .... 1111 0011 .... @sat16
482USAT16 .... 0110 1110 .... .... 1111 0011 .... @sat16
483
484@rrr_rot ---- .... .... rn:4 rd:4 rot:2 ...... rm:4 &rrr_rot
485
486SXTAB16 .... 0110 1000 .... .... ..00 0111 .... @rrr_rot
487SXTAB .... 0110 1010 .... .... ..00 0111 .... @rrr_rot
488SXTAH .... 0110 1011 .... .... ..00 0111 .... @rrr_rot
489UXTAB16 .... 0110 1100 .... .... ..00 0111 .... @rrr_rot
490UXTAB .... 0110 1110 .... .... ..00 0111 .... @rrr_rot
491UXTAH .... 0110 1111 .... .... ..00 0111 .... @rrr_rot
492
493SEL .... 0110 1000 .... .... 1111 1011 .... @rndm
494REV .... 0110 1011 1111 .... 1111 0011 .... @rdm
495REV16 .... 0110 1011 1111 .... 1111 1011 .... @rdm
496REVSH .... 0110 1111 1111 .... 1111 1011 .... @rdm
497RBIT .... 0110 1111 1111 .... 1111 0011 .... @rdm
2c7c4e09
RH
498
499# Signed multiply, signed and unsigned divide
500
501@rdmn ---- .... .... rd:4 .... rm:4 .... rn:4 &rrr
502
503SMLAD .... 0111 0000 .... .... .... 0001 .... @rdamn
504SMLADX .... 0111 0000 .... .... .... 0011 .... @rdamn
505SMLSD .... 0111 0000 .... .... .... 0101 .... @rdamn
506SMLSDX .... 0111 0000 .... .... .... 0111 .... @rdamn
507
508SDIV .... 0111 0001 .... 1111 .... 0001 .... @rdmn
509UDIV .... 0111 0011 .... 1111 .... 0001 .... @rdmn
510
511SMLALD .... 0111 0100 .... .... .... 0001 .... @rdamn
512SMLALDX .... 0111 0100 .... .... .... 0011 .... @rdamn
513SMLSLD .... 0111 0100 .... .... .... 0101 .... @rdamn
514SMLSLDX .... 0111 0100 .... .... .... 0111 .... @rdamn
515
516SMMLA .... 0111 0101 .... .... .... 0001 .... @rdamn
517SMMLAR .... 0111 0101 .... .... .... 0011 .... @rdamn
518SMMLS .... 0111 0101 .... .... .... 1101 .... @rdamn
519SMMLSR .... 0111 0101 .... .... .... 1111 .... @rdamn
c5c426d4
RH
520
521# Block data transfer
522
523STM ---- 100 b:1 i:1 u:1 w:1 0 rn:4 list:16 &ldst_block
524LDM_a32 ---- 100 b:1 i:1 u:1 w:1 1 rn:4 list:16 &ldst_block
360144f3
RH
525
526# Branch, branch with link
527
528%imm26 0:s24 !function=times_4
529@branch ---- .... ........................ &i imm=%imm26
530
531B .... 1010 ........................ @branch
532BL .... 1011 ........................ @branch
542f5188 533
cd8be50e
PM
534# Coprocessor instructions
535
536# We decode MCR, MCR, MRRC and MCRR only, because for QEMU the
537# other coprocessor instructions always UNDEF.
538# The trans_ functions for these will ignore cp values 8..13 for v7 or
539# earlier, and 0..13 for v8 and later, because those areas of the
540# encoding space may be used for other things, such as VFP or Neon.
541
542@mcr ---- .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4 &mcr
543@mcrr ---- .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4 &mcrr
544
545MCRR .... 1100 0100 .... .... .... .... .... @mcrr
546MRRC .... 1100 0101 .... .... .... .... .... @mcrr
547
548MCR .... 1110 ... 0 .... .... .... ... 1 .... @mcr
549MRC .... 1110 ... 1 .... .... .... ... 1 .... @mcr
550
542f5188
RH
551# Supervisor call
552
553SVC ---- 1111 imm:24 &i