3 # Copyright (c) 2019 Linaro, Ltd
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
8 # version 2 of the License, or (at your option) any later version.
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.
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/>.
19 # This file is processed by scripts/decodetree.py
23 &s_rrr_shi !extern s rd rn rm shim shty
24 &s_rrr_shr !extern s rn rd rm rs shty
25 &s_rri_rot !extern s rn rd imm rot
26 &s_rrrr !extern s rd rn rm ra
27 &rrrr !extern rd rn rm ra
28 &rrr_rot !extern rd rn rm rot
34 &msr_reg !extern rn r mask
36 &msr_bank !extern rn r sysm
37 &mrs_bank !extern rd r sysm
38 &ldst_rr !extern p w u rn rt rm shimm shtype
39 &ldst_ri !extern p w u rn rt imm
40 &ldst_block !extern rn i b u w list
41 &strex !extern rn rd rt rt2 imm
42 &ldrex !extern rn rt rt2 imm
43 &bfx !extern rd rn lsb widthm1
44 &bfi !extern rd rn lsb msb
45 &sat !extern rd rn satimm imm sh
46 &pkh !extern rd rn rm imm tb
47 &cps !extern mode imod M A I F
48 &mcr !extern cp opc1 crn crm opc2 rt
49 &mcrr !extern cp opc1 crm rt rt2
51 # Data-processing (register)
55 @s_rrr_shi ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \
56 &s_rrr_shi shim=%imm5_12_6
57 @s_rxr_shi ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \
58 &s_rrr_shi shim=%imm5_12_6 rn=0
59 @S_xrr_shi ....... .... . rn:4 .... .... .. shty:2 rm:4 \
60 &s_rrr_shi shim=%imm5_12_6 s=1 rd=0
63 TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi
64 AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi
66 BIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi
68 MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi
69 ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi
72 MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi
73 ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi
76 TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi
77 EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi
79 PKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
82 CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi
83 ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi
85 ADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi
86 SBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi
88 CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi
89 SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi
91 RSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi
93 # Data-processing (register-shifted register)
95 MOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
98 # Data-processing (immediate)
100 %t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot
101 %t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm
103 @s_rri_rot ....... .... s:1 rn:4 . ... rd:4 ........ \
104 &s_rri_rot imm=%t32extimm rot=%t32extrot
105 @s_rxi_rot ....... .... s:1 .... . ... rd:4 ........ \
106 &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0
107 @S_xri_rot ....... .... . rn:4 . ... .... ........ \
108 &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0
111 TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot
112 AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot
114 BIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot
116 MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot
117 ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot
120 MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot
121 ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot
124 TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot
125 EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot
128 CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot
129 ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot
131 ADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot
132 SBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot
134 CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot
135 SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot
137 RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot
139 # Data processing (plain binary immediate)
141 %imm12_26_12_0 26:1 12:3 0:8
142 %neg12_26_12_0 26:1 12:3 0:8 !function=negate
143 @s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \
144 &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
147 ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \
148 &ri imm=%imm12_26_12_0
149 ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12
152 ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \
153 &ri imm=%neg12_26_12_0
154 SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12
159 %imm16_26_16_12_0 16:4 26:1 12:3 0:8
160 @mov16 .... .... .... .... .... rd:4 .... .... \
161 &ri imm=%imm16_26_16_12_0
163 MOVW 1111 0.10 0100 .... 0 ... .... ........ @mov16
164 MOVT 1111 0.10 1100 .... 0 ... .... ........ @mov16
168 @sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
170 @sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \
174 SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16
175 SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat
178 USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16
179 USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat
182 @bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
184 @bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
187 SBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx
188 UBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx
190 # bfc is bfi w/ rn=15
191 BFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi
193 # Multiply and multiply accumulate
195 @s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0
196 @s0_rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &s_rrrr ra=0 s=0
197 @rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &rrrr
198 @rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0
199 @rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr
200 @rdm .... .... .... .... .... rd:4 .... rm:4 &rr
203 MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm
204 MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm
206 MLS 1111 1011 0000 .... .... .... 0001 .... @rnadm
207 SMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm
208 UMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm
209 SMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm
210 UMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm
211 UMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm
213 SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm
214 SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm
217 SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm
218 SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm
221 SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm
222 SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm
225 SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm
226 SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm
229 SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm
230 SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm
233 SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm
234 SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm
236 SMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm
237 SMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm
238 SMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm
239 SMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm
241 # usad8 is usada8 w/ ra=15
242 USADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm
244 SMLAD 1111 1011 0010 .... .... .... 0000 .... @rnadm
245 SMLADX 1111 1011 0010 .... .... .... 0001 .... @rnadm
246 SMLSD 1111 1011 0100 .... .... .... 0000 .... @rnadm
247 SMLSDX 1111 1011 0100 .... .... .... 0001 .... @rnadm
249 SMLALD 1111 1011 1100 .... .... .... 1100 .... @rnadm
250 SMLALDX 1111 1011 1100 .... .... .... 1101 .... @rnadm
251 SMLSLD 1111 1011 1101 .... .... .... 1100 .... @rnadm
252 SMLSLDX 1111 1011 1101 .... .... .... 1101 .... @rnadm
254 SMMLA 1111 1011 0101 .... .... .... 0000 .... @rnadm
255 SMMLAR 1111 1011 0101 .... .... .... 0001 .... @rnadm
256 SMMLS 1111 1011 0110 .... .... .... 0000 .... @rnadm
257 SMMLSR 1111 1011 0110 .... .... .... 0001 .... @rnadm
259 SDIV 1111 1011 1001 .... 1111 .... 1111 .... @rndm
260 UDIV 1111 1011 1011 .... 1111 .... 1111 .... @rndm
262 # Data-processing (two source registers)
264 QADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm
265 QSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm
266 QDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm
267 QDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm
269 CRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm
270 CRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm
271 CRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm
272 CRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm
273 CRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm
274 CRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm
276 SEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm
278 # Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
279 REV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm
280 REV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm
281 RBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm
282 REVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm
283 CLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm
285 # Branches and miscellaneous control
289 %imm16_16_0 16:4 0:12
290 %imm21 26:s1 11:1 13:1 16:6 0:11 !function=times_2
294 # Group insn[25:23] = 111, which is cond=111x for the branch below,
295 # or unconditional, which would be illegal for the branch.
299 YIELD 1111 0011 1010 1111 1000 0000 0000 0001
300 WFE 1111 0011 1010 1111 1000 0000 0000 0010
301 WFI 1111 0011 1010 1111 1000 0000 0000 0011
303 # TODO: Implement SEV, SEVL; may help SMP performance.
304 # SEV 1111 0011 1010 1111 1000 0000 0000 0100
305 # SEVL 1111 0011 1010 1111 1000 0000 0000 0101
307 # The canonical nop ends in 0000 0000, but the whole rest
308 # of the space is "reserved hint, behaves as nop".
309 NOP 1111 0011 1010 1111 1000 0000 ---- ----
312 # If imod == '00' && M == '0' then SEE "Hint instructions", above.
313 CPS 1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \
316 # Miscellaneous control
318 CLREX 1111 0011 1011 1111 1000 1111 0010 1111
319 DSB 1111 0011 1011 1111 1000 1111 0100 ----
320 DMB 1111 0011 1011 1111 1000 1111 0101 ----
321 ISB 1111 0011 1011 1111 1000 1111 0110 ----
322 SB 1111 0011 1011 1111 1000 1111 0111 0000
325 # Note that the v7m insn overlaps both the normal and banked insn.
327 MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \
328 &mrs_bank sysm=%mrs_sysm
329 MRS_reg 1111 0011 111 r:1 1111 1000 rd:4 0000 0000 &mrs_reg
330 MRS_v7m 1111 0011 111 0 1111 1000 rd:4 sysm:8
333 MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \
334 &msr_bank sysm=%msr_sysm
335 MSR_reg 1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000 &msr_reg
336 MSR_v7m 1111 0011 100 0 rn:4 1000 mask:2 00 sysm:8
338 BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r
340 # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for
341 # every other encoding of SUBS. With v7VE, IMM=0 is redefined as ERET.
342 # The distinction between the two only matters for Hyp mode.
343 ERET 1111 0011 1101 1110 1000 1111 0000 0000
344 SUB_rri 1111 0011 1101 1110 1000 1111 imm:8 \
345 &s_rri_rot rot=0 s=1 rd=15 rn=14
347 SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i
348 HVC 1111 0111 1110 .... 1000 .... .... .... \
350 UDF 1111 0111 1111 ---- 1010 ---- ---- ----
352 B_cond_thumb 1111 0. cond:4 ...... 10.0 ............ &ci imm=%imm21
355 # Load/store (register, immediate, literal)
357 @ldst_rr .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \
358 &ldst_rr p=1 w=0 u=1 shtype=0
359 @ldst_ri_idx .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \
361 @ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \
363 @ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \
365 @ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \
367 @ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \
368 &ldst_ri p=1 w=0 rn=15
370 STRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr
371 STRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx
372 STRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg
373 STRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp
374 STRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos
376 STRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr
377 STRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx
378 STRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg
379 STRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp
380 STRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos
382 STR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr
383 STR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx
384 STR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg
385 STRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp
386 STR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos
388 # Note that Load, unsigned (literal) overlaps all other load encodings.
391 NOP 1111 1000 -001 1111 1111 ------------ # PLD
392 LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit
395 NOP 1111 1000 1001 ---- 1111 ------------ # PLD
396 LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos
398 LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx
400 NOP 1111 1000 0001 ---- 1111 1100 -------- # PLD
401 LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg
403 LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp
405 NOP 1111 1000 0001 ---- 1111 000000 -- ---- # PLD
406 LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr
411 NOP 1111 1000 -011 1111 1111 ------------ # PLD
412 LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit
415 NOP 1111 1000 1011 ---- 1111 ------------ # PLDW
416 LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos
418 LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx
420 NOP 1111 1000 0011 ---- 1111 1100 -------- # PLDW
421 LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg
423 LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp
425 NOP 1111 1000 0011 ---- 1111 000000 -- ---- # PLDW
426 LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr
430 LDR_ri 1111 1000 .101 1111 .... ............ @ldst_ri_lit
431 LDR_ri 1111 1000 1101 .... .... ............ @ldst_ri_pos
432 LDR_ri 1111 1000 0101 .... .... 1..1 ........ @ldst_ri_idx
433 LDR_ri 1111 1000 0101 .... .... 1100 ........ @ldst_ri_neg
434 LDRT_ri 1111 1000 0101 .... .... 1110 ........ @ldst_ri_unp
435 LDR_rr 1111 1000 0101 .... .... 000000 .. .... @ldst_rr
440 NOP 1111 1001 -001 1111 1111 ------------
441 LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit
444 NOP 1111 1001 1001 ---- 1111 ------------
445 LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos
447 LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx
449 NOP 1111 1001 0001 ---- 1111 1100 --------
450 LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg
452 LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp
454 NOP 1111 1001 0001 ---- 1111 000000 -- ----
455 LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr
458 # NOPs here are unallocated memory hints, treated as NOP.
461 NOP 1111 1001 -011 1111 1111 ------------
462 LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit
465 NOP 1111 1001 1011 ---- 1111 ------------
466 LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos
468 LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx
470 NOP 1111 1001 0011 ---- 1111 1100 --------
471 LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg
473 LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp
475 NOP 1111 1001 0011 ---- 1111 000000 -- ----
476 LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr
480 %imm8x4 0:8 !function=times_4
481 &ldst_ri2 p w u rn rt rt2 imm
482 @ldstd_ri8 .... .... u:1 ... rn:4 rt:4 rt2:4 ........ \
483 &ldst_ri2 imm=%imm8x4
485 STRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0
486 LDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0
488 STRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1
489 LDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1
491 STRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1
493 SG 1110 1001 0111 1111 1110 1001 01111111
494 LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1
497 # Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
499 @strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \
500 &strex rt2=15 imm=%imm8x4
501 @strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \
503 @strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
506 @ldrex_i .... .... .... rn:4 rt:4 .... .... .... \
507 &ldrex rt2=15 imm=%imm8x4
508 @ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \
510 @ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \
514 TT 1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000
515 STREX 1110 1000 0100 .... .... .... .... .... @strex_i
517 STREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0
518 STREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0
519 STREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d
521 STLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0
522 STLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0
523 STLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0
524 STLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d
526 STL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0
527 STLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0
528 STLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0
530 LDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i
531 LDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0
532 LDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0
533 LDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d
535 LDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0
536 LDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0
537 LDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0
538 LDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d
540 LDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0
541 LDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0
542 LDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0
545 @tbranch .... .... .... rn:4 .... .... .... rm:4 &tbranch
547 TBB 1110 1000 1101 .... 1111 0000 0000 .... @tbranch
548 TBH 1110 1000 1101 .... 1111 0000 0001 .... @tbranch
550 # Parallel addition and subtraction
552 SADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm
553 QADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm
554 SHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm
555 UADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm
556 UQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm
557 UHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm
559 SADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm
560 QADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm
561 SHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm
562 UADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm
563 UQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm
564 UHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm
566 SASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm
567 QASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm
568 SHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm
569 UASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm
570 UQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm
571 UHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm
573 SSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm
574 QSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm
575 SHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm
576 USUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm
577 UQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm
578 UHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm
580 SSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm
581 QSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm
582 SHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm
583 USUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm
584 UQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm
585 UHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm
587 SSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm
588 QSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm
589 SHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm
590 USAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm
591 UQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm
592 UHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm
596 @rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot
598 SXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot
599 UXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot
600 SXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot
601 UXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot
602 SXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot
603 UXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot
605 # Load/store multiple
607 @ldstm .... .... .. w:1 . rn:4 list:16 &ldst_block u=0
609 STM_t32 1110 1000 10.0 .... ................ @ldstm i=1 b=0
610 STM_t32 1110 1001 00.0 .... ................ @ldstm i=0 b=1
611 LDM_t32 1110 1000 10.1 .... ................ @ldstm i=1 b=0
612 LDM_t32 1110 1001 00.1 .... ................ @ldstm i=0 b=1
615 @rfe .... .... .. w:1 . rn:4 ................ &rfe
617 RFE 1110 1000 00.1 .... 1100000000000000 @rfe pu=2
618 RFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1
620 &srs !extern mode w pu
621 @srs .... .... .. w:1 . .... ........... mode:5 &srs
623 SRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2
624 SRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1
626 # Coprocessor instructions
628 # We decode MCR, MCR, MRRC and MCRR only, because for QEMU the
629 # other coprocessor instructions always UNDEF.
630 # The trans_ functions for these will ignore cp values 8..13 for v7 or
631 # earlier, and 0..13 for v8 and later, because those areas of the
632 # encoding space may be used for other things, such as VFP or Neon.
634 @mcr .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4
635 @mcrr .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4
637 MCRR 1110 1100 0100 .... .... .... .... .... @mcrr
638 MRRC 1110 1100 0101 .... .... .... .... .... @mcrr
640 MCR 1110 1110 ... 0 .... .... .... ... 1 .... @mcr
641 MRC 1110 1110 ... 1 .... .... .... ... 1 .... @mcr
645 %imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24
646 @branch24 ................................ &i imm=%imm24
648 B 1111 0. .......... 10.1 ............ @branch24
649 BL 1111 0. .......... 11.1 ............ @branch24
650 BLX_i 1111 0. .......... 11.0 ............ @branch24