]> git.proxmox.com Git - mirror_qemu.git/blame - target/arm/t32.decode
target/arm: Move helper_dc_zva to helper-a64.c
[mirror_qemu.git] / target / arm / t32.decode
CommitLineData
51409b9e
RH
1# Thumb2 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
8# version 2 of the License, or (at your option) any later version.
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#
25ae32c5 21
63130596 22&empty !extern
25ae32c5 23&s_rrr_shi !extern s rd rn rm shim shty
5be2c123 24&s_rrr_shr !extern s rn rd rm rs shty
581c6ebd 25&s_rri_rot !extern s rn rd imm rot
bd92fe35
RH
26&s_rrrr !extern s rd rn rm ra
27&rrrr !extern rd rn rm ra
46497f6a 28&rrr_rot !extern rd rn rm rot
6d0730a8 29&rrr !extern rd rn rm
4c97f5b2 30&rr !extern rd rm
145952e8 31&ri !extern rd imm
4ed95abd 32&r !extern rm
2cde9ea5 33&i !extern imm
d0b26644
RH
34&msr_reg !extern rn r mask
35&mrs_reg !extern rd r
36&msr_bank !extern rn r sysm
37&mrs_bank !extern rd r sysm
5e291fe1
RH
38&ldst_rr !extern p w u rn rt rm shimm shtype
39&ldst_ri !extern p w u rn rt imm
c5c426d4 40&ldst_block !extern rn i b u w list
1efdd407
RH
41&strex !extern rn rd rt rt2 imm
42&ldrex !extern rn rt rt2 imm
86d21e4b
RH
43&bfx !extern rd rn lsb widthm1
44&bfi !extern rd rn lsb msb
46497f6a
RH
45&sat !extern rd rn satimm imm sh
46&pkh !extern rd rn rm imm tb
52f83b9c 47&cps !extern mode imod M A I F
25ae32c5
RH
48
49# Data-processing (register)
50
51%imm5_12_6 12:3 6:2
52
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
59
60{
61 TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi
62 AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi
63}
64BIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi
65{
66 MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi
67 ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi
68}
69{
70 MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi
71 ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi
72}
73{
74 TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi
75 EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi
76}
46497f6a
RH
77PKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \
78 &pkh imm=%imm5_12_6
25ae32c5
RH
79{
80 CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi
81 ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi
82}
83ADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi
84SBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi
85{
86 CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi
87 SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi
88}
89RSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi
5be2c123
RH
90
91# Data-processing (register-shifted register)
92
93MOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \
94 &s_rrr_shr rn=0
581c6ebd
RH
95
96# Data-processing (immediate)
97
98%t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot
99%t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm
100
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
107
108{
109 TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot
110 AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot
111}
112BIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot
113{
114 MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot
115 ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot
116}
117{
118 MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot
119 ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot
120}
121{
122 TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot
123 EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot
124}
125{
126 CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot
127 ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot
128}
129ADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot
130SBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot
131{
132 CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot
133 SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot
134}
135RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot
bd92fe35 136
145952e8
RH
137# Data processing (plain binary immediate)
138
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
143
144{
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
148}
149{
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
153}
154
8f445127
RH
155# Move Wide
156
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
160
161MOVW 1111 0.10 0100 .... 0 ... .... ........ @mov16
162MOVT 1111 0.10 1100 .... 0 ... .... ........ @mov16
163
86d21e4b
RH
164# Saturate, bitfield
165
46497f6a
RH
166@sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \
167 &sat imm=%imm5_12_6
168@sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \
169 &sat sh=0 imm=0
170
171{
172 SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16
173 SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat
174}
175{
176 USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16
177 USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat
178}
179
86d21e4b
RH
180@bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \
181 &bfx lsb=%imm5_12_6
182@bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \
183 &bfi lsb=%imm5_12_6
184
185SBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx
186UBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx
187
188# bfc is bfi w/ rn=15
189BFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi
190
bd92fe35
RH
191# Multiply and multiply accumulate
192
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
26c6923d 196@rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0
6d0730a8 197@rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr
4c97f5b2 198@rdm .... .... .... .... .... rd:4 .... rm:4 &rr
bd92fe35
RH
199
200{
201 MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm
202 MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm
203}
204MLS 1111 1011 0000 .... .... .... 0001 .... @rnadm
205SMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm
206UMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm
207SMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm
208UMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm
209UMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm
26c6923d
RH
210{
211 SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm
212 SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm
213}
214{
215 SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm
216 SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm
217}
218{
219 SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm
220 SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm
221}
222{
223 SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm
224 SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm
225}
226{
227 SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm
228 SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm
229}
230{
231 SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm
232 SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm
233}
234SMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm
235SMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm
236SMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm
237SMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm
6d0730a8 238
86d21e4b
RH
239# usad8 is usada8 w/ ra=15
240USADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm
241
2c7c4e09
RH
242SMLAD 1111 1011 0010 .... .... .... 0000 .... @rnadm
243SMLADX 1111 1011 0010 .... .... .... 0001 .... @rnadm
244SMLSD 1111 1011 0100 .... .... .... 0000 .... @rnadm
245SMLSDX 1111 1011 0100 .... .... .... 0001 .... @rnadm
246
247SMLALD 1111 1011 1100 .... .... .... 1100 .... @rnadm
248SMLALDX 1111 1011 1100 .... .... .... 1101 .... @rnadm
249SMLSLD 1111 1011 1101 .... .... .... 1100 .... @rnadm
250SMLSLDX 1111 1011 1101 .... .... .... 1101 .... @rnadm
251
252SMMLA 1111 1011 0101 .... .... .... 0000 .... @rnadm
253SMMLAR 1111 1011 0101 .... .... .... 0001 .... @rnadm
254SMMLS 1111 1011 0110 .... .... .... 0000 .... @rnadm
255SMMLSR 1111 1011 0110 .... .... .... 0001 .... @rnadm
256
257SDIV 1111 1011 1001 .... 1111 .... 1111 .... @rndm
258UDIV 1111 1011 1011 .... 1111 .... 1111 .... @rndm
259
6d0730a8
RH
260# Data-processing (two source registers)
261
262QADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm
263QSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm
264QDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm
265QDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm
63130596 266
6c35d53f
RH
267CRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm
268CRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm
269CRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm
270CRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm
271CRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm
272CRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm
273
46497f6a
RH
274SEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm
275
4c97f5b2 276# Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn.
46497f6a
RH
277REV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm
278REV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm
279RBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm
280REVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm
4c97f5b2
RH
281CLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm
282
63130596
RH
283# Branches and miscellaneous control
284
d0b26644
RH
285%msr_sysm 4:1 8:4
286%mrs_sysm 4:1 16:4
2cde9ea5 287%imm16_16_0 16:4 0:12
360144f3
RH
288%imm21 26:s1 11:1 13:1 16:6 0:11 !function=times_2
289&ci cond imm
d0b26644
RH
290
291{
360144f3
RH
292 # Group insn[25:23] = 111, which is cond=111x for the branch below,
293 # or unconditional, which would be illegal for the branch.
d0b26644 294 {
360144f3
RH
295 # Hints
296 {
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
300
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
304
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 ---- ----
308 }
519b8471 309
52f83b9c
RH
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 \
312 &cps
313
519b8471
RH
314 # Miscellaneous control
315 {
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
321 }
322
360144f3
RH
323 # Note that the v7m insn overlaps both the normal and banked insn.
324 {
325 MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \
d0b26644 326 &mrs_bank sysm=%mrs_sysm
360144f3
RH
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
329 }
330 {
331 MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \
d0b26644 332 &msr_bank sysm=%msr_sysm
360144f3
RH
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
335 }
336 BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r
337 {
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 \
ef11bc3c 343 &s_rri_rot rot=0 s=1 rd=15 rn=14
360144f3
RH
344 }
345 SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i
346 HVC 1111 0111 1110 .... 1000 .... .... .... \
2cde9ea5 347 &i imm=%imm16_16_0
360144f3
RH
348 UDF 1111 0111 1111 ---- 1010 ---- ---- ----
349 }
350 B_cond_thumb 1111 0. cond:4 ...... 10.0 ............ &ci imm=%imm21
63130596 351}
5e291fe1
RH
352
353# Load/store (register, immediate, literal)
354
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 \
358 &ldst_ri w=1
359@ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \
360 &ldst_ri p=1 w=0 u=0
361@ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \
362 &ldst_ri p=1 w=0 u=1
363@ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \
364 &ldst_ri p=1 w=0 u=1
365@ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \
366 &ldst_ri p=1 w=0 rn=15
367
368STRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr
369STRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx
370STRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg
371STRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp
372STRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos
373
374STRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr
375STRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx
376STRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg
377STRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp
378STRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos
379
380STR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr
381STR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx
382STR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg
383STRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp
384STR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos
385
386# Note that Load, unsigned (literal) overlaps all other load encodings.
387{
388 {
389 NOP 1111 1000 -001 1111 1111 ------------ # PLD
390 LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit
391 }
392 {
393 NOP 1111 1000 1001 ---- 1111 ------------ # PLD
394 LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos
395 }
396 LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx
397 {
398 NOP 1111 1000 0001 ---- 1111 1100 -------- # PLD
399 LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg
400 }
401 LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp
402 {
403 NOP 1111 1000 0001 ---- 1111 000000 -- ---- # PLD
404 LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr
405 }
406}
407{
408 {
409 NOP 1111 1000 -011 1111 1111 ------------ # PLD
410 LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit
411 }
412 {
413 NOP 1111 1000 1011 ---- 1111 ------------ # PLDW
414 LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos
415 }
416 LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx
417 {
418 NOP 1111 1000 0011 ---- 1111 1100 -------- # PLDW
419 LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg
420 }
421 LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp
422 {
423 NOP 1111 1000 0011 ---- 1111 000000 -- ---- # PLDW
424 LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr
425 }
426}
427{
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
434}
435# NOPs here are PLI.
436{
437 {
438 NOP 1111 1001 -001 1111 1111 ------------
439 LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit
440 }
441 {
442 NOP 1111 1001 1001 ---- 1111 ------------
443 LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos
444 }
445 LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx
446 {
447 NOP 1111 1001 0001 ---- 1111 1100 --------
448 LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg
449 }
450 LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp
451 {
452 NOP 1111 1001 0001 ---- 1111 000000 -- ----
453 LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr
454 }
455}
456# NOPs here are unallocated memory hints, treated as NOP.
457{
458 {
459 NOP 1111 1001 -011 1111 1111 ------------
460 LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit
461 }
462 {
463 NOP 1111 1001 1011 ---- 1111 ------------
464 LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos
465 }
466 LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx
467 {
468 NOP 1111 1001 0011 ---- 1111 1100 --------
469 LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg
470 }
471 LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp
472 {
473 NOP 1111 1001 0011 ---- 1111 000000 -- ----
474 LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr
475 }
476}
477
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
482
483STRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0
484LDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0
485
486STRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1
487LDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1
488
489STRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1
35d240ac
RH
490{
491 SG 1110 1001 0111 1111 1110 1001 01111111
492 LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1
493}
1efdd407 494
808092bb 495# Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
1efdd407
RH
496
497@strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \
498 &strex rt2=15 imm=%imm8x4
499@strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \
500 &strex rt2=15 imm=0
501@strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \
502 &strex imm=0
503
504@ldrex_i .... .... .... rn:4 rt:4 .... .... .... \
505 &ldrex rt2=15 imm=%imm8x4
506@ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \
507 &ldrex rt2=15 imm=0
508@ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \
509 &ldrex imm=0
510
d449f174
RH
511{
512 TT 1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000
513 STREX 1110 1000 0100 .... .... .... .... .... @strex_i
514}
1efdd407
RH
515STREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0
516STREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0
517STREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d
518
519STLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0
520STLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0
521STLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0
522STLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d
523
524STL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0
525STLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0
526STLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0
527
528LDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i
529LDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0
530LDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0
531LDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d
532
533LDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0
534LDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0
535LDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0
536LDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d
537
538LDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0
539LDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0
540LDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0
adf1a566 541
808092bb
RH
542&tbranch rn rm
543@tbranch .... .... .... rn:4 .... .... .... rm:4 &tbranch
544
545TBB 1110 1000 1101 .... 1111 0000 0000 .... @tbranch
546TBH 1110 1000 1101 .... 1111 0000 0001 .... @tbranch
547
adf1a566
RH
548# Parallel addition and subtraction
549
550SADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm
551QADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm
552SHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm
553UADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm
554UQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm
555UHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm
556
557SADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm
558QADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm
559SHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm
560UADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm
561UQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm
562UHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm
563
564SASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm
565QASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm
566SHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm
567UASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm
568UQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm
569UHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm
570
571SSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm
572QSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm
573SHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm
574USUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm
575UQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm
576UHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm
577
578SSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm
579QSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm
580SHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm
581USUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm
582UQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm
583UHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm
584
585SSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm
586QSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm
587SHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm
588USAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm
589UQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm
590UHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm
46497f6a
RH
591
592# Register extends
593
594@rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot
595
596SXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot
597UXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot
598SXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot
599UXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot
600SXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot
601UXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot
c5c426d4
RH
602
603# Load/store multiple
604
605@ldstm .... .... .. w:1 . rn:4 list:16 &ldst_block u=0
606
607STM_t32 1110 1000 10.0 .... ................ @ldstm i=1 b=0
608STM_t32 1110 1001 00.0 .... ................ @ldstm i=0 b=1
609LDM_t32 1110 1000 10.1 .... ................ @ldstm i=1 b=0
610LDM_t32 1110 1001 00.1 .... ................ @ldstm i=0 b=1
360144f3 611
885782a7
RH
612&rfe !extern rn w pu
613@rfe .... .... .. w:1 . rn:4 ................ &rfe
614
615RFE 1110 1000 00.1 .... 1100000000000000 @rfe pu=2
616RFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1
617
618&srs !extern mode w pu
619@srs .... .... .. w:1 . .... ........... mode:5 &srs
620
621SRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2
622SRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1
623
360144f3
RH
624# Branches
625
626%imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24
627@branch24 ................................ &i imm=%imm24
628
629B 1111 0. .......... 10.1 ............ @branch24
630BL 1111 0. .......... 11.1 ............ @branch24
631BLX_i 1111 0. .......... 11.0 ............ @branch24