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