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
49 # Data-processing (register)
53 @s_rrr_shi ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \
54 &s_rrr_shi shim=%imm5_12_6
55 @s_rxr_shi ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \
56 &s_rrr_shi shim=%imm5_12_6 rn=0
57 @S_xrr_shi ....... .... . rn:4 .... .... .. shty:2 rm:4 \
58 &s_rrr_shi shim=%imm5_12_6 s=1 rd=0
61 TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi
62 AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi
64 BIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi
66 MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi
67 ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi
70 MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi
71 ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi
74 TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi
75 EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi
77 PKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
80 CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi
81 ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi
83 ADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi
84 SBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi
86 CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi
87 SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi
89 RSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi
91 # Data-processing (register-shifted register)
93 MOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
96 # Data-processing (immediate)
98 %t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot
99 %t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm
101 @s_rri_rot ....... .... s:1 rn:4 . ... rd:4 ........ \
102 &s_rri_rot imm=%t32extimm rot=%t32extrot
103 @s_rxi_rot ....... .... s:1 .... . ... rd:4 ........ \
104 &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0
105 @S_xri_rot ....... .... . rn:4 . ... .... ........ \
106 &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0
109 TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot
110 AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot
112 BIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot
114 MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot
115 ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot
118 MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot
119 ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot
122 TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot
123 EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot
126 CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot
127 ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot
129 ADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot
130 SBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot
132 CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot
133 SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot
135 RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot
137 # Data processing (plain binary immediate)
139 %imm12_26_12_0 26:1 12:3 0:8
140 %neg12_26_12_0 26:1 12:3 0:8 !function=negate
141 @s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \
142 &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0
145 ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \
146 &ri imm=%imm12_26_12_0
147 ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12
150 ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \
151 &ri imm=%neg12_26_12_0
152 SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12
157 %imm16_26_16_12_0 16:4 26:1 12:3 0:8
158 @mov16 .... .... .... .... .... rd:4 .... .... \
159 &ri imm=%imm16_26_16_12_0
161 MOVW 1111 0.10 0100 .... 0 ... .... ........ @mov16
162 MOVT 1111 0.10 1100 .... 0 ... .... ........ @mov16
166 @sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
168 @sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \
172 SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16
173 SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat
176 USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16
177 USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat
180 @bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
182 @bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
185 SBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx
186 UBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx
188 # bfc is bfi w/ rn=15
189 BFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi
191 # Multiply and multiply accumulate
193 @s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0
194 @s0_rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &s_rrrr ra=0 s=0
195 @rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &rrrr
196 @rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0
197 @rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr
198 @rdm .... .... .... .... .... rd:4 .... rm:4 &rr
201 MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm
202 MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm
204 MLS 1111 1011 0000 .... .... .... 0001 .... @rnadm
205 SMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm
206 UMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm
207 SMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm
208 UMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm
209 UMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm
211 SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm
212 SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm
215 SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm
216 SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm
219 SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm
220 SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm
223 SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm
224 SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm
227 SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm
228 SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm
231 SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm
232 SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm
234 SMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm
235 SMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm
236 SMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm
237 SMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm
239 # usad8 is usada8 w/ ra=15
240 USADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm
242 SMLAD 1111 1011 0010 .... .... .... 0000 .... @rnadm
243 SMLADX 1111 1011 0010 .... .... .... 0001 .... @rnadm
244 SMLSD 1111 1011 0100 .... .... .... 0000 .... @rnadm
245 SMLSDX 1111 1011 0100 .... .... .... 0001 .... @rnadm
247 SMLALD 1111 1011 1100 .... .... .... 1100 .... @rnadm
248 SMLALDX 1111 1011 1100 .... .... .... 1101 .... @rnadm
249 SMLSLD 1111 1011 1101 .... .... .... 1100 .... @rnadm
250 SMLSLDX 1111 1011 1101 .... .... .... 1101 .... @rnadm
252 SMMLA 1111 1011 0101 .... .... .... 0000 .... @rnadm
253 SMMLAR 1111 1011 0101 .... .... .... 0001 .... @rnadm
254 SMMLS 1111 1011 0110 .... .... .... 0000 .... @rnadm
255 SMMLSR 1111 1011 0110 .... .... .... 0001 .... @rnadm
257 SDIV 1111 1011 1001 .... 1111 .... 1111 .... @rndm
258 UDIV 1111 1011 1011 .... 1111 .... 1111 .... @rndm
260 # Data-processing (two source registers)
262 QADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm
263 QSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm
264 QDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm
265 QDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm
267 CRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm
268 CRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm
269 CRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm
270 CRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm
271 CRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm
272 CRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm
274 SEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm
276 # Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
277 REV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm
278 REV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm
279 RBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm
280 REVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm
281 CLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm
283 # Branches and miscellaneous control
287 %imm16_16_0 16:4 0:12
288 %imm21 26:s1 11:1 13:1 16:6 0:11 !function=times_2
292 # Group insn[25:23] = 111, which is cond=111x for the branch below,
293 # or unconditional, which would be illegal for the branch.
297 YIELD 1111 0011 1010 1111 1000 0000 0000 0001
298 WFE 1111 0011 1010 1111 1000 0000 0000 0010
299 WFI 1111 0011 1010 1111 1000 0000 0000 0011
301 # TODO: Implement SEV, SEVL; may help SMP performance.
302 # SEV 1111 0011 1010 1111 1000 0000 0000 0100
303 # SEVL 1111 0011 1010 1111 1000 0000 0000 0101
305 # The canonical nop ends in 0000 0000, but the whole rest
306 # of the space is "reserved hint, behaves as nop".
307 NOP 1111 0011 1010 1111 1000 0000 ---- ----
310 # If imod == '00' && M == '0' then SEE "Hint instructions", above.
311 CPS 1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \
314 # Miscellaneous control
316 CLREX 1111 0011 1011 1111 1000 1111 0010 1111
317 DSB 1111 0011 1011 1111 1000 1111 0100 ----
318 DMB 1111 0011 1011 1111 1000 1111 0101 ----
319 ISB 1111 0011 1011 1111 1000 1111 0110 ----
320 SB 1111 0011 1011 1111 1000 1111 0111 0000
323 # Note that the v7m insn overlaps both the normal and banked insn.
325 MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \
326 &mrs_bank sysm=%mrs_sysm
327 MRS_reg 1111 0011 111 r:1 1111 1000 rd:4 0000 0000 &mrs_reg
328 MRS_v7m 1111 0011 111 0 1111 1000 rd:4 sysm:8
331 MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \
332 &msr_bank sysm=%msr_sysm
333 MSR_reg 1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000 &msr_reg
334 MSR_v7m 1111 0011 100 0 rn:4 1000 mask:2 00 sysm:8
336 BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r
338 # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for
339 # every other encoding of SUBS. With v7VE, IMM=0 is redefined as ERET.
340 # The distinction between the two only matters for Hyp mode.
341 ERET 1111 0011 1101 1110 1000 1111 0000 0000
342 SUB_rri 1111 0011 1101 1110 1000 1111 imm:8 \
343 &s_rri_rot rot=0 s=1 rd=15 rn=14
345 SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i
346 HVC 1111 0111 1110 .... 1000 .... .... .... \
348 UDF 1111 0111 1111 ---- 1010 ---- ---- ----
350 B_cond_thumb 1111 0. cond:4 ...... 10.0 ............ &ci imm=%imm21
353 # Load/store (register, immediate, literal)
355 @ldst_rr .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \
356 &ldst_rr p=1 w=0 u=1 shtype=0
357 @ldst_ri_idx .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \
359 @ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \
361 @ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \
363 @ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \
365 @ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \
366 &ldst_ri p=1 w=0 rn=15
368 STRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr
369 STRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx
370 STRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg
371 STRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp
372 STRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos
374 STRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr
375 STRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx
376 STRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg
377 STRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp
378 STRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos
380 STR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr
381 STR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx
382 STR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg
383 STRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp
384 STR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos
386 # Note that Load, unsigned (literal) overlaps all other load encodings.
389 NOP 1111 1000 -001 1111 1111 ------------ # PLD
390 LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit
393 NOP 1111 1000 1001 ---- 1111 ------------ # PLD
394 LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos
396 LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx
398 NOP 1111 1000 0001 ---- 1111 1100 -------- # PLD
399 LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg
401 LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp
403 NOP 1111 1000 0001 ---- 1111 000000 -- ---- # PLD
404 LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr
409 NOP 1111 1000 -011 1111 1111 ------------ # PLD
410 LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit
413 NOP 1111 1000 1011 ---- 1111 ------------ # PLDW
414 LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos
416 LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx
418 NOP 1111 1000 0011 ---- 1111 1100 -------- # PLDW
419 LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg
421 LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp
423 NOP 1111 1000 0011 ---- 1111 000000 -- ---- # PLDW
424 LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr
428 LDR_ri 1111 1000 .101 1111 .... ............ @ldst_ri_lit
429 LDR_ri 1111 1000 1101 .... .... ............ @ldst_ri_pos
430 LDR_ri 1111 1000 0101 .... .... 1..1 ........ @ldst_ri_idx
431 LDR_ri 1111 1000 0101 .... .... 1100 ........ @ldst_ri_neg
432 LDRT_ri 1111 1000 0101 .... .... 1110 ........ @ldst_ri_unp
433 LDR_rr 1111 1000 0101 .... .... 000000 .. .... @ldst_rr
438 NOP 1111 1001 -001 1111 1111 ------------
439 LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit
442 NOP 1111 1001 1001 ---- 1111 ------------
443 LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos
445 LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx
447 NOP 1111 1001 0001 ---- 1111 1100 --------
448 LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg
450 LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp
452 NOP 1111 1001 0001 ---- 1111 000000 -- ----
453 LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr
456 # NOPs here are unallocated memory hints, treated as NOP.
459 NOP 1111 1001 -011 1111 1111 ------------
460 LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit
463 NOP 1111 1001 1011 ---- 1111 ------------
464 LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos
466 LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx
468 NOP 1111 1001 0011 ---- 1111 1100 --------
469 LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg
471 LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp
473 NOP 1111 1001 0011 ---- 1111 000000 -- ----
474 LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr
478 %imm8x4 0:8 !function=times_4
479 &ldst_ri2 p w u rn rt rt2 imm
480 @ldstd_ri8 .... .... u:1 ... rn:4 rt:4 rt2:4 ........ \
481 &ldst_ri2 imm=%imm8x4
483 STRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0
484 LDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0
486 STRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1
487 LDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1
489 STRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1
491 SG 1110 1001 0111 1111 1110 1001 01111111
492 LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1
495 # Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
497 @strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \
498 &strex rt2=15 imm=%imm8x4
499 @strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \
501 @strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
504 @ldrex_i .... .... .... rn:4 rt:4 .... .... .... \
505 &ldrex rt2=15 imm=%imm8x4
506 @ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \
508 @ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \
512 TT 1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000
513 STREX 1110 1000 0100 .... .... .... .... .... @strex_i
515 STREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0
516 STREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0
517 STREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d
519 STLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0
520 STLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0
521 STLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0
522 STLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d
524 STL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0
525 STLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0
526 STLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0
528 LDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i
529 LDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0
530 LDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0
531 LDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d
533 LDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0
534 LDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0
535 LDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0
536 LDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d
538 LDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0
539 LDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0
540 LDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0
543 @tbranch .... .... .... rn:4 .... .... .... rm:4 &tbranch
545 TBB 1110 1000 1101 .... 1111 0000 0000 .... @tbranch
546 TBH 1110 1000 1101 .... 1111 0000 0001 .... @tbranch
548 # Parallel addition and subtraction
550 SADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm
551 QADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm
552 SHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm
553 UADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm
554 UQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm
555 UHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm
557 SADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm
558 QADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm
559 SHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm
560 UADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm
561 UQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm
562 UHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm
564 SASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm
565 QASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm
566 SHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm
567 UASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm
568 UQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm
569 UHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm
571 SSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm
572 QSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm
573 SHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm
574 USUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm
575 UQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm
576 UHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm
578 SSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm
579 QSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm
580 SHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm
581 USUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm
582 UQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm
583 UHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm
585 SSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm
586 QSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm
587 SHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm
588 USAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm
589 UQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm
590 UHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm
594 @rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot
596 SXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot
597 UXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot
598 SXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot
599 UXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot
600 SXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot
601 UXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot
603 # Load/store multiple
605 @ldstm .... .... .. w:1 . rn:4 list:16 &ldst_block u=0
607 STM_t32 1110 1000 10.0 .... ................ @ldstm i=1 b=0
608 STM_t32 1110 1001 00.0 .... ................ @ldstm i=0 b=1
609 LDM_t32 1110 1000 10.1 .... ................ @ldstm i=1 b=0
610 LDM_t32 1110 1001 00.1 .... ................ @ldstm i=0 b=1
613 @rfe .... .... .. w:1 . rn:4 ................ &rfe
615 RFE 1110 1000 00.1 .... 1100000000000000 @rfe pu=2
616 RFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1
618 &srs !extern mode w pu
619 @srs .... .... .. w:1 . .... ........... mode:5 &srs
621 SRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2
622 SRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1
626 %imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24
627 @branch24 ................................ &i imm=%imm24
629 B 1111 0. .......... 10.1 ............ @branch24
630 BL 1111 0. .......... 11.1 ............ @branch24
631 BLX_i 1111 0. .......... 11.0 ............ @branch24