]>
Commit | Line | Data |
---|---|---|
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 | |
50f57e09 | 8 | # version 2.1 of the License, or (at your option) any later version. |
51409b9e RH |
9 | # |
10 | # This library is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | # Lesser General Public License for more details. | |
14 | # | |
15 | # You should have received a copy of the GNU Lesser General Public | |
16 | # License along with this library; if not, see <http://www.gnu.org/licenses/>. | |
17 | ||
18 | # | |
19 | # This file is processed by scripts/decodetree.py | |
20 | # | |
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 |
4c498dcf PM |
48 | &mcr !extern cp opc1 crn crm opc2 rt |
49 | &mcrr !extern cp opc1 crm rt rt2 | |
25ae32c5 | 50 | |
f4ae6c8c | 51 | &mve_shl_ri rdalo rdahi shim |
0aa4b4c3 | 52 | &mve_shl_rr rdalo rdahi rm |
46321d47 | 53 | &mve_sh_ri rda shim |
04ea4d3c | 54 | &mve_sh_rr rda rm |
f4ae6c8c PM |
55 | |
56 | # rdahi: bits [3:1] from insn, bit 0 is 1 | |
57 | # rdalo: bits [3:1] from insn, bit 0 is 0 | |
58 | %rdahi_9 9:3 !function=times_2_plus_1 | |
59 | %rdalo_17 17:3 !function=times_2 | |
60 | ||
25ae32c5 RH |
61 | # Data-processing (register) |
62 | ||
63 | %imm5_12_6 12:3 6:2 | |
64 | ||
65 | @s_rrr_shi ....... .... s:1 rn:4 .... rd:4 .. shty:2 rm:4 \ | |
66 | &s_rrr_shi shim=%imm5_12_6 | |
67 | @s_rxr_shi ....... .... s:1 .... .... rd:4 .. shty:2 rm:4 \ | |
68 | &s_rrr_shi shim=%imm5_12_6 rn=0 | |
69 | @S_xrr_shi ....... .... . rn:4 .... .... .. shty:2 rm:4 \ | |
70 | &s_rrr_shi shim=%imm5_12_6 s=1 rd=0 | |
71 | ||
f4ae6c8c PM |
72 | @mve_shl_ri ....... .... . ... . . ... ... . .. .. .... \ |
73 | &mve_shl_ri shim=%imm5_12_6 rdalo=%rdalo_17 rdahi=%rdahi_9 | |
0aa4b4c3 PM |
74 | @mve_shl_rr ....... .... . ... . rm:4 ... . .. .. .... \ |
75 | &mve_shl_rr rdalo=%rdalo_17 rdahi=%rdahi_9 | |
46321d47 PM |
76 | @mve_sh_ri ....... .... . rda:4 . ... ... . .. .. .... \ |
77 | &mve_sh_ri shim=%imm5_12_6 | |
04ea4d3c | 78 | @mve_sh_rr ....... .... . rda:4 rm:4 .... .... .... &mve_sh_rr |
f4ae6c8c | 79 | |
25ae32c5 RH |
80 | { |
81 | TST_xrri 1110101 0000 1 .... 0 ... 1111 .... .... @S_xrr_shi | |
82 | AND_rrri 1110101 0000 . .... 0 ... .... .... .... @s_rrr_shi | |
83 | } | |
84 | BIC_rrri 1110101 0001 . .... 0 ... .... .... .... @s_rrr_shi | |
85 | { | |
f4ae6c8c PM |
86 | # The v8.1M MVE shift insns overlap in encoding with MOVS/ORRS |
87 | # and are distinguished by having Rm==13 or 15. Those are UNPREDICTABLE | |
88 | # cases for MOVS/ORRS. We decode the MVE cases first, ensuring that | |
89 | # they explicitly call unallocated_encoding() for cases that must UNDEF | |
90 | # (eg "using a new shift insn on a v8.1M CPU without MVE"), and letting | |
91 | # the rest fall through (where ORR_rrri and MOV_rxri will end up | |
92 | # handling them as r13 and r15 accesses with the same semantics as A32). | |
93 | [ | |
46321d47 PM |
94 | { |
95 | UQSHL_ri 1110101 0010 1 .... 0 ... 1111 .. 00 1111 @mve_sh_ri | |
96 | LSLL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 00 1111 @mve_shl_ri | |
97 | UQSHLL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 00 1111 @mve_shl_ri | |
98 | } | |
f4ae6c8c | 99 | |
46321d47 PM |
100 | { |
101 | URSHR_ri 1110101 0010 1 .... 0 ... 1111 .. 01 1111 @mve_sh_ri | |
102 | LSRL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 01 1111 @mve_shl_ri | |
103 | URSHRL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 01 1111 @mve_shl_ri | |
104 | } | |
105 | ||
106 | { | |
107 | SRSHR_ri 1110101 0010 1 .... 0 ... 1111 .. 10 1111 @mve_sh_ri | |
108 | ASRL_ri 1110101 0010 1 ... 0 0 ... ... 1 .. 10 1111 @mve_shl_ri | |
109 | SRSHRL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 10 1111 @mve_shl_ri | |
110 | } | |
111 | ||
112 | { | |
113 | SQSHL_ri 1110101 0010 1 .... 0 ... 1111 .. 11 1111 @mve_sh_ri | |
114 | SQSHLL_ri 1110101 0010 1 ... 1 0 ... ... 1 .. 11 1111 @mve_shl_ri | |
115 | } | |
0aa4b4c3 | 116 | |
04ea4d3c PM |
117 | { |
118 | UQRSHL_rr 1110101 0010 1 .... .... 1111 0000 1101 @mve_sh_rr | |
119 | LSLL_rr 1110101 0010 1 ... 0 .... ... 1 0000 1101 @mve_shl_rr | |
120 | UQRSHLL64_rr 1110101 0010 1 ... 1 .... ... 1 0000 1101 @mve_shl_rr | |
121 | } | |
122 | ||
123 | { | |
124 | SQRSHR_rr 1110101 0010 1 .... .... 1111 0010 1101 @mve_sh_rr | |
125 | ASRL_rr 1110101 0010 1 ... 0 .... ... 1 0010 1101 @mve_shl_rr | |
126 | SQRSHRL64_rr 1110101 0010 1 ... 1 .... ... 1 0010 1101 @mve_shl_rr | |
127 | } | |
128 | ||
0aa4b4c3 PM |
129 | UQRSHLL48_rr 1110101 0010 1 ... 1 .... ... 1 1000 1101 @mve_shl_rr |
130 | SQRSHRL48_rr 1110101 0010 1 ... 1 .... ... 1 1010 1101 @mve_shl_rr | |
f4ae6c8c PM |
131 | ] |
132 | ||
25ae32c5 RH |
133 | MOV_rxri 1110101 0010 . 1111 0 ... .... .... .... @s_rxr_shi |
134 | ORR_rrri 1110101 0010 . .... 0 ... .... .... .... @s_rrr_shi | |
0aa4b4c3 PM |
135 | |
136 | # v8.1M CSEL and friends | |
137 | CSEL 1110101 0010 1 rn:4 10 op:2 rd:4 fcond:4 rm:4 | |
25ae32c5 RH |
138 | } |
139 | { | |
140 | MVN_rxri 1110101 0011 . 1111 0 ... .... .... .... @s_rxr_shi | |
141 | ORN_rrri 1110101 0011 . .... 0 ... .... .... .... @s_rrr_shi | |
142 | } | |
143 | { | |
144 | TEQ_xrri 1110101 0100 1 .... 0 ... 1111 .... .... @S_xrr_shi | |
145 | EOR_rrri 1110101 0100 . .... 0 ... .... .... .... @s_rrr_shi | |
146 | } | |
46497f6a RH |
147 | PKH 1110101 0110 0 rn:4 0 ... rd:4 .. tb:1 0 rm:4 \ |
148 | &pkh imm=%imm5_12_6 | |
25ae32c5 RH |
149 | { |
150 | CMN_xrri 1110101 1000 1 .... 0 ... 1111 .... .... @S_xrr_shi | |
151 | ADD_rrri 1110101 1000 . .... 0 ... .... .... .... @s_rrr_shi | |
152 | } | |
153 | ADC_rrri 1110101 1010 . .... 0 ... .... .... .... @s_rrr_shi | |
154 | SBC_rrri 1110101 1011 . .... 0 ... .... .... .... @s_rrr_shi | |
155 | { | |
156 | CMP_xrri 1110101 1101 1 .... 0 ... 1111 .... .... @S_xrr_shi | |
157 | SUB_rrri 1110101 1101 . .... 0 ... .... .... .... @s_rrr_shi | |
158 | } | |
159 | RSB_rrri 1110101 1110 . .... 0 ... .... .... .... @s_rrr_shi | |
5be2c123 RH |
160 | |
161 | # Data-processing (register-shifted register) | |
162 | ||
163 | MOV_rxrr 1111 1010 0 shty:2 s:1 rm:4 1111 rd:4 0000 rs:4 \ | |
164 | &s_rrr_shr rn=0 | |
581c6ebd RH |
165 | |
166 | # Data-processing (immediate) | |
167 | ||
168 | %t32extrot 26:1 12:3 0:8 !function=t32_expandimm_rot | |
169 | %t32extimm 26:1 12:3 0:8 !function=t32_expandimm_imm | |
170 | ||
171 | @s_rri_rot ....... .... s:1 rn:4 . ... rd:4 ........ \ | |
172 | &s_rri_rot imm=%t32extimm rot=%t32extrot | |
173 | @s_rxi_rot ....... .... s:1 .... . ... rd:4 ........ \ | |
174 | &s_rri_rot imm=%t32extimm rot=%t32extrot rn=0 | |
175 | @S_xri_rot ....... .... . rn:4 . ... .... ........ \ | |
176 | &s_rri_rot imm=%t32extimm rot=%t32extrot s=1 rd=0 | |
177 | ||
178 | { | |
179 | TST_xri 1111 0.0 0000 1 .... 0 ... 1111 ........ @S_xri_rot | |
180 | AND_rri 1111 0.0 0000 . .... 0 ... .... ........ @s_rri_rot | |
181 | } | |
182 | BIC_rri 1111 0.0 0001 . .... 0 ... .... ........ @s_rri_rot | |
183 | { | |
184 | MOV_rxi 1111 0.0 0010 . 1111 0 ... .... ........ @s_rxi_rot | |
185 | ORR_rri 1111 0.0 0010 . .... 0 ... .... ........ @s_rri_rot | |
186 | } | |
187 | { | |
188 | MVN_rxi 1111 0.0 0011 . 1111 0 ... .... ........ @s_rxi_rot | |
189 | ORN_rri 1111 0.0 0011 . .... 0 ... .... ........ @s_rri_rot | |
190 | } | |
191 | { | |
192 | TEQ_xri 1111 0.0 0100 1 .... 0 ... 1111 ........ @S_xri_rot | |
193 | EOR_rri 1111 0.0 0100 . .... 0 ... .... ........ @s_rri_rot | |
194 | } | |
195 | { | |
196 | CMN_xri 1111 0.0 1000 1 .... 0 ... 1111 ........ @S_xri_rot | |
197 | ADD_rri 1111 0.0 1000 . .... 0 ... .... ........ @s_rri_rot | |
198 | } | |
199 | ADC_rri 1111 0.0 1010 . .... 0 ... .... ........ @s_rri_rot | |
200 | SBC_rri 1111 0.0 1011 . .... 0 ... .... ........ @s_rri_rot | |
201 | { | |
202 | CMP_xri 1111 0.0 1101 1 .... 0 ... 1111 ........ @S_xri_rot | |
203 | SUB_rri 1111 0.0 1101 . .... 0 ... .... ........ @s_rri_rot | |
204 | } | |
205 | RSB_rri 1111 0.0 1110 . .... 0 ... .... ........ @s_rri_rot | |
bd92fe35 | 206 | |
145952e8 RH |
207 | # Data processing (plain binary immediate) |
208 | ||
209 | %imm12_26_12_0 26:1 12:3 0:8 | |
210 | %neg12_26_12_0 26:1 12:3 0:8 !function=negate | |
211 | @s0_rri_12 .... ... .... . rn:4 . ... rd:4 ........ \ | |
212 | &s_rri_rot imm=%imm12_26_12_0 rot=0 s=0 | |
213 | ||
214 | { | |
215 | ADR 1111 0.1 0000 0 1111 0 ... rd:4 ........ \ | |
216 | &ri imm=%imm12_26_12_0 | |
217 | ADD_rri 1111 0.1 0000 0 .... 0 ... .... ........ @s0_rri_12 | |
218 | } | |
219 | { | |
220 | ADR 1111 0.1 0101 0 1111 0 ... rd:4 ........ \ | |
221 | &ri imm=%neg12_26_12_0 | |
222 | SUB_rri 1111 0.1 0101 0 .... 0 ... .... ........ @s0_rri_12 | |
223 | } | |
224 | ||
8f445127 RH |
225 | # Move Wide |
226 | ||
227 | %imm16_26_16_12_0 16:4 26:1 12:3 0:8 | |
228 | @mov16 .... .... .... .... .... rd:4 .... .... \ | |
229 | &ri imm=%imm16_26_16_12_0 | |
230 | ||
231 | MOVW 1111 0.10 0100 .... 0 ... .... ........ @mov16 | |
232 | MOVT 1111 0.10 1100 .... 0 ... .... ........ @mov16 | |
233 | ||
86d21e4b RH |
234 | # Saturate, bitfield |
235 | ||
46497f6a RH |
236 | @sat .... .... .. sh:1 . rn:4 . ... rd:4 .. . satimm:5 \ |
237 | &sat imm=%imm5_12_6 | |
238 | @sat16 .... .... .. . . rn:4 . ... rd:4 .. . satimm:5 \ | |
239 | &sat sh=0 imm=0 | |
240 | ||
241 | { | |
242 | SSAT16 1111 0011 001 0 .... 0 000 .... 00 0 ..... @sat16 | |
243 | SSAT 1111 0011 00. 0 .... 0 ... .... .. 0 ..... @sat | |
244 | } | |
245 | { | |
246 | USAT16 1111 0011 101 0 .... 0 000 .... 00 0 ..... @sat16 | |
247 | USAT 1111 0011 10. 0 .... 0 ... .... .. 0 ..... @sat | |
248 | } | |
249 | ||
86d21e4b RH |
250 | @bfx .... .... ... . rn:4 . ... rd:4 .. . widthm1:5 \ |
251 | &bfx lsb=%imm5_12_6 | |
252 | @bfi .... .... ... . rn:4 . ... rd:4 .. . msb:5 \ | |
253 | &bfi lsb=%imm5_12_6 | |
254 | ||
255 | SBFX 1111 0011 010 0 .... 0 ... .... ..0..... @bfx | |
256 | UBFX 1111 0011 110 0 .... 0 ... .... ..0..... @bfx | |
257 | ||
258 | # bfc is bfi w/ rn=15 | |
259 | BFCI 1111 0011 011 0 .... 0 ... .... ..0..... @bfi | |
260 | ||
bd92fe35 RH |
261 | # Multiply and multiply accumulate |
262 | ||
263 | @s0_rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &s_rrrr s=0 | |
264 | @s0_rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &s_rrrr ra=0 s=0 | |
265 | @rnadm .... .... .... rn:4 ra:4 rd:4 .... rm:4 &rrrr | |
26c6923d | 266 | @rn0dm .... .... .... rn:4 .... rd:4 .... rm:4 &rrrr ra=0 |
6d0730a8 | 267 | @rndm .... .... .... rn:4 .... rd:4 .... rm:4 &rrr |
4c97f5b2 | 268 | @rdm .... .... .... .... .... rd:4 .... rm:4 &rr |
bd92fe35 RH |
269 | |
270 | { | |
271 | MUL 1111 1011 0000 .... 1111 .... 0000 .... @s0_rn0dm | |
272 | MLA 1111 1011 0000 .... .... .... 0000 .... @s0_rnadm | |
273 | } | |
274 | MLS 1111 1011 0000 .... .... .... 0001 .... @rnadm | |
275 | SMULL 1111 1011 1000 .... .... .... 0000 .... @s0_rnadm | |
276 | UMULL 1111 1011 1010 .... .... .... 0000 .... @s0_rnadm | |
277 | SMLAL 1111 1011 1100 .... .... .... 0000 .... @s0_rnadm | |
278 | UMLAL 1111 1011 1110 .... .... .... 0000 .... @s0_rnadm | |
279 | UMAAL 1111 1011 1110 .... .... .... 0110 .... @rnadm | |
26c6923d RH |
280 | { |
281 | SMULWB 1111 1011 0011 .... 1111 .... 0000 .... @rn0dm | |
282 | SMLAWB 1111 1011 0011 .... .... .... 0000 .... @rnadm | |
283 | } | |
284 | { | |
285 | SMULWT 1111 1011 0011 .... 1111 .... 0001 .... @rn0dm | |
286 | SMLAWT 1111 1011 0011 .... .... .... 0001 .... @rnadm | |
287 | } | |
288 | { | |
289 | SMULBB 1111 1011 0001 .... 1111 .... 0000 .... @rn0dm | |
290 | SMLABB 1111 1011 0001 .... .... .... 0000 .... @rnadm | |
291 | } | |
292 | { | |
293 | SMULBT 1111 1011 0001 .... 1111 .... 0001 .... @rn0dm | |
294 | SMLABT 1111 1011 0001 .... .... .... 0001 .... @rnadm | |
295 | } | |
296 | { | |
297 | SMULTB 1111 1011 0001 .... 1111 .... 0010 .... @rn0dm | |
298 | SMLATB 1111 1011 0001 .... .... .... 0010 .... @rnadm | |
299 | } | |
300 | { | |
301 | SMULTT 1111 1011 0001 .... 1111 .... 0011 .... @rn0dm | |
302 | SMLATT 1111 1011 0001 .... .... .... 0011 .... @rnadm | |
303 | } | |
304 | SMLALBB 1111 1011 1100 .... .... .... 1000 .... @rnadm | |
305 | SMLALBT 1111 1011 1100 .... .... .... 1001 .... @rnadm | |
306 | SMLALTB 1111 1011 1100 .... .... .... 1010 .... @rnadm | |
307 | SMLALTT 1111 1011 1100 .... .... .... 1011 .... @rnadm | |
6d0730a8 | 308 | |
86d21e4b RH |
309 | # usad8 is usada8 w/ ra=15 |
310 | USADA8 1111 1011 0111 .... .... .... 0000 .... @rnadm | |
311 | ||
2c7c4e09 RH |
312 | SMLAD 1111 1011 0010 .... .... .... 0000 .... @rnadm |
313 | SMLADX 1111 1011 0010 .... .... .... 0001 .... @rnadm | |
314 | SMLSD 1111 1011 0100 .... .... .... 0000 .... @rnadm | |
315 | SMLSDX 1111 1011 0100 .... .... .... 0001 .... @rnadm | |
316 | ||
317 | SMLALD 1111 1011 1100 .... .... .... 1100 .... @rnadm | |
318 | SMLALDX 1111 1011 1100 .... .... .... 1101 .... @rnadm | |
319 | SMLSLD 1111 1011 1101 .... .... .... 1100 .... @rnadm | |
320 | SMLSLDX 1111 1011 1101 .... .... .... 1101 .... @rnadm | |
321 | ||
322 | SMMLA 1111 1011 0101 .... .... .... 0000 .... @rnadm | |
323 | SMMLAR 1111 1011 0101 .... .... .... 0001 .... @rnadm | |
324 | SMMLS 1111 1011 0110 .... .... .... 0000 .... @rnadm | |
325 | SMMLSR 1111 1011 0110 .... .... .... 0001 .... @rnadm | |
326 | ||
327 | SDIV 1111 1011 1001 .... 1111 .... 1111 .... @rndm | |
328 | UDIV 1111 1011 1011 .... 1111 .... 1111 .... @rndm | |
329 | ||
6d0730a8 RH |
330 | # Data-processing (two source registers) |
331 | ||
332 | QADD 1111 1010 1000 .... 1111 .... 1000 .... @rndm | |
333 | QSUB 1111 1010 1000 .... 1111 .... 1010 .... @rndm | |
334 | QDADD 1111 1010 1000 .... 1111 .... 1001 .... @rndm | |
335 | QDSUB 1111 1010 1000 .... 1111 .... 1011 .... @rndm | |
63130596 | 336 | |
6c35d53f RH |
337 | CRC32B 1111 1010 1100 .... 1111 .... 1000 .... @rndm |
338 | CRC32H 1111 1010 1100 .... 1111 .... 1001 .... @rndm | |
339 | CRC32W 1111 1010 1100 .... 1111 .... 1010 .... @rndm | |
340 | CRC32CB 1111 1010 1101 .... 1111 .... 1000 .... @rndm | |
341 | CRC32CH 1111 1010 1101 .... 1111 .... 1001 .... @rndm | |
342 | CRC32CW 1111 1010 1101 .... 1111 .... 1010 .... @rndm | |
343 | ||
46497f6a RH |
344 | SEL 1111 1010 1010 .... 1111 .... 1000 .... @rndm |
345 | ||
4c97f5b2 | 346 | # Note rn != rm is CONSTRAINED UNPREDICTABLE; we choose to ignore rn. |
46497f6a RH |
347 | REV 1111 1010 1001 ---- 1111 .... 1000 .... @rdm |
348 | REV16 1111 1010 1001 ---- 1111 .... 1001 .... @rdm | |
349 | RBIT 1111 1010 1001 ---- 1111 .... 1010 .... @rdm | |
350 | REVSH 1111 1010 1001 ---- 1111 .... 1011 .... @rdm | |
4c97f5b2 RH |
351 | CLZ 1111 1010 1011 ---- 1111 .... 1000 .... @rdm |
352 | ||
63130596 RH |
353 | # Branches and miscellaneous control |
354 | ||
d0b26644 RH |
355 | %msr_sysm 4:1 8:4 |
356 | %mrs_sysm 4:1 16:4 | |
2cde9ea5 | 357 | %imm16_16_0 16:4 0:12 |
360144f3 RH |
358 | %imm21 26:s1 11:1 13:1 16:6 0:11 !function=times_2 |
359 | &ci cond imm | |
d0b26644 RH |
360 | |
361 | { | |
360144f3 RH |
362 | # Group insn[25:23] = 111, which is cond=111x for the branch below, |
363 | # or unconditional, which would be illegal for the branch. | |
45f11876 PM |
364 | [ |
365 | # Hints, and CPS | |
360144f3 | 366 | { |
13954587 RH |
367 | [ |
368 | YIELD 1111 0011 1010 1111 1000 0000 0000 0001 | |
369 | WFE 1111 0011 1010 1111 1000 0000 0000 0010 | |
370 | WFI 1111 0011 1010 1111 1000 0000 0000 0011 | |
360144f3 | 371 | |
13954587 RH |
372 | # TODO: Implement SEV, SEVL; may help SMP performance. |
373 | # SEV 1111 0011 1010 1111 1000 0000 0000 0100 | |
374 | # SEVL 1111 0011 1010 1111 1000 0000 0000 0101 | |
360144f3 | 375 | |
13954587 RH |
376 | ESB 1111 0011 1010 1111 1000 0000 0001 0000 |
377 | ] | |
46f4976f | 378 | |
360144f3 RH |
379 | # The canonical nop ends in 0000 0000, but the whole rest |
380 | # of the space is "reserved hint, behaves as nop". | |
381 | NOP 1111 0011 1010 1111 1000 0000 ---- ---- | |
519b8471 | 382 | |
45f11876 PM |
383 | # If imod == '00' && M == '0' then SEE "Hint instructions", above. |
384 | CPS 1111 0011 1010 1111 1000 0 imod:2 M:1 A:1 I:1 F:1 mode:5 \ | |
52f83b9c | 385 | &cps |
45f11876 | 386 | } |
52f83b9c | 387 | |
519b8471 | 388 | # Miscellaneous control |
45f11876 PM |
389 | CLREX 1111 0011 1011 1111 1000 1111 0010 1111 |
390 | DSB 1111 0011 1011 1111 1000 1111 0100 ---- | |
391 | DMB 1111 0011 1011 1111 1000 1111 0101 ---- | |
392 | ISB 1111 0011 1011 1111 1000 1111 0110 ---- | |
393 | SB 1111 0011 1011 1111 1000 1111 0111 0000 | |
519b8471 | 394 | |
360144f3 RH |
395 | # Note that the v7m insn overlaps both the normal and banked insn. |
396 | { | |
397 | MRS_bank 1111 0011 111 r:1 .... 1000 rd:4 001. 0000 \ | |
d0b26644 | 398 | &mrs_bank sysm=%mrs_sysm |
360144f3 RH |
399 | MRS_reg 1111 0011 111 r:1 1111 1000 rd:4 0000 0000 &mrs_reg |
400 | MRS_v7m 1111 0011 111 0 1111 1000 rd:4 sysm:8 | |
401 | } | |
402 | { | |
403 | MSR_bank 1111 0011 100 r:1 rn:4 1000 .... 001. 0000 \ | |
d0b26644 | 404 | &msr_bank sysm=%msr_sysm |
360144f3 RH |
405 | MSR_reg 1111 0011 100 r:1 rn:4 1000 mask:4 0000 0000 &msr_reg |
406 | MSR_v7m 1111 0011 100 0 rn:4 1000 mask:2 00 sysm:8 | |
407 | } | |
408 | BXJ 1111 0011 1100 rm:4 1000 1111 0000 0000 &r | |
409 | { | |
410 | # At v6T2, this is the T5 encoding of SUBS PC, LR, #IMM, and works as for | |
411 | # every other encoding of SUBS. With v7VE, IMM=0 is redefined as ERET. | |
412 | # The distinction between the two only matters for Hyp mode. | |
413 | ERET 1111 0011 1101 1110 1000 1111 0000 0000 | |
414 | SUB_rri 1111 0011 1101 1110 1000 1111 imm:8 \ | |
ef11bc3c | 415 | &s_rri_rot rot=0 s=1 rd=15 rn=14 |
360144f3 RH |
416 | } |
417 | SMC 1111 0111 1111 imm:4 1000 0000 0000 0000 &i | |
418 | HVC 1111 0111 1110 .... 1000 .... .... .... \ | |
2cde9ea5 | 419 | &i imm=%imm16_16_0 |
360144f3 | 420 | UDF 1111 0111 1111 ---- 1010 ---- ---- ---- |
45f11876 | 421 | ] |
360144f3 | 422 | B_cond_thumb 1111 0. cond:4 ...... 10.0 ............ &ci imm=%imm21 |
63130596 | 423 | } |
5e291fe1 RH |
424 | |
425 | # Load/store (register, immediate, literal) | |
426 | ||
427 | @ldst_rr .... .... .... rn:4 rt:4 ...... shimm:2 rm:4 \ | |
428 | &ldst_rr p=1 w=0 u=1 shtype=0 | |
429 | @ldst_ri_idx .... .... .... rn:4 rt:4 . p:1 u:1 . imm:8 \ | |
430 | &ldst_ri w=1 | |
431 | @ldst_ri_neg .... .... .... rn:4 rt:4 .... imm:8 \ | |
432 | &ldst_ri p=1 w=0 u=0 | |
433 | @ldst_ri_unp .... .... .... rn:4 rt:4 .... imm:8 \ | |
434 | &ldst_ri p=1 w=0 u=1 | |
435 | @ldst_ri_pos .... .... .... rn:4 rt:4 imm:12 \ | |
436 | &ldst_ri p=1 w=0 u=1 | |
437 | @ldst_ri_lit .... .... u:1 ... .... rt:4 imm:12 \ | |
438 | &ldst_ri p=1 w=0 rn=15 | |
439 | ||
440 | STRB_rr 1111 1000 0000 .... .... 000000 .. .... @ldst_rr | |
441 | STRB_ri 1111 1000 0000 .... .... 1..1 ........ @ldst_ri_idx | |
442 | STRB_ri 1111 1000 0000 .... .... 1100 ........ @ldst_ri_neg | |
443 | STRBT_ri 1111 1000 0000 .... .... 1110 ........ @ldst_ri_unp | |
444 | STRB_ri 1111 1000 1000 .... .... ............ @ldst_ri_pos | |
445 | ||
446 | STRH_rr 1111 1000 0010 .... .... 000000 .. .... @ldst_rr | |
447 | STRH_ri 1111 1000 0010 .... .... 1..1 ........ @ldst_ri_idx | |
448 | STRH_ri 1111 1000 0010 .... .... 1100 ........ @ldst_ri_neg | |
449 | STRHT_ri 1111 1000 0010 .... .... 1110 ........ @ldst_ri_unp | |
450 | STRH_ri 1111 1000 1010 .... .... ............ @ldst_ri_pos | |
451 | ||
452 | STR_rr 1111 1000 0100 .... .... 000000 .. .... @ldst_rr | |
453 | STR_ri 1111 1000 0100 .... .... 1..1 ........ @ldst_ri_idx | |
454 | STR_ri 1111 1000 0100 .... .... 1100 ........ @ldst_ri_neg | |
455 | STRT_ri 1111 1000 0100 .... .... 1110 ........ @ldst_ri_unp | |
456 | STR_ri 1111 1000 1100 .... .... ............ @ldst_ri_pos | |
457 | ||
458 | # Note that Load, unsigned (literal) overlaps all other load encodings. | |
459 | { | |
460 | { | |
461 | NOP 1111 1000 -001 1111 1111 ------------ # PLD | |
462 | LDRB_ri 1111 1000 .001 1111 .... ............ @ldst_ri_lit | |
463 | } | |
464 | { | |
465 | NOP 1111 1000 1001 ---- 1111 ------------ # PLD | |
466 | LDRB_ri 1111 1000 1001 .... .... ............ @ldst_ri_pos | |
467 | } | |
468 | LDRB_ri 1111 1000 0001 .... .... 1..1 ........ @ldst_ri_idx | |
469 | { | |
470 | NOP 1111 1000 0001 ---- 1111 1100 -------- # PLD | |
471 | LDRB_ri 1111 1000 0001 .... .... 1100 ........ @ldst_ri_neg | |
472 | } | |
473 | LDRBT_ri 1111 1000 0001 .... .... 1110 ........ @ldst_ri_unp | |
474 | { | |
475 | NOP 1111 1000 0001 ---- 1111 000000 -- ---- # PLD | |
476 | LDRB_rr 1111 1000 0001 .... .... 000000 .. .... @ldst_rr | |
477 | } | |
478 | } | |
479 | { | |
480 | { | |
481 | NOP 1111 1000 -011 1111 1111 ------------ # PLD | |
482 | LDRH_ri 1111 1000 .011 1111 .... ............ @ldst_ri_lit | |
483 | } | |
484 | { | |
485 | NOP 1111 1000 1011 ---- 1111 ------------ # PLDW | |
486 | LDRH_ri 1111 1000 1011 .... .... ............ @ldst_ri_pos | |
487 | } | |
488 | LDRH_ri 1111 1000 0011 .... .... 1..1 ........ @ldst_ri_idx | |
489 | { | |
490 | NOP 1111 1000 0011 ---- 1111 1100 -------- # PLDW | |
491 | LDRH_ri 1111 1000 0011 .... .... 1100 ........ @ldst_ri_neg | |
492 | } | |
493 | LDRHT_ri 1111 1000 0011 .... .... 1110 ........ @ldst_ri_unp | |
494 | { | |
495 | NOP 1111 1000 0011 ---- 1111 000000 -- ---- # PLDW | |
496 | LDRH_rr 1111 1000 0011 .... .... 000000 .. .... @ldst_rr | |
497 | } | |
498 | } | |
499 | { | |
500 | LDR_ri 1111 1000 .101 1111 .... ............ @ldst_ri_lit | |
501 | LDR_ri 1111 1000 1101 .... .... ............ @ldst_ri_pos | |
502 | LDR_ri 1111 1000 0101 .... .... 1..1 ........ @ldst_ri_idx | |
503 | LDR_ri 1111 1000 0101 .... .... 1100 ........ @ldst_ri_neg | |
504 | LDRT_ri 1111 1000 0101 .... .... 1110 ........ @ldst_ri_unp | |
505 | LDR_rr 1111 1000 0101 .... .... 000000 .. .... @ldst_rr | |
506 | } | |
507 | # NOPs here are PLI. | |
508 | { | |
509 | { | |
510 | NOP 1111 1001 -001 1111 1111 ------------ | |
511 | LDRSB_ri 1111 1001 .001 1111 .... ............ @ldst_ri_lit | |
512 | } | |
513 | { | |
514 | NOP 1111 1001 1001 ---- 1111 ------------ | |
515 | LDRSB_ri 1111 1001 1001 .... .... ............ @ldst_ri_pos | |
516 | } | |
517 | LDRSB_ri 1111 1001 0001 .... .... 1..1 ........ @ldst_ri_idx | |
518 | { | |
519 | NOP 1111 1001 0001 ---- 1111 1100 -------- | |
520 | LDRSB_ri 1111 1001 0001 .... .... 1100 ........ @ldst_ri_neg | |
521 | } | |
522 | LDRSBT_ri 1111 1001 0001 .... .... 1110 ........ @ldst_ri_unp | |
523 | { | |
524 | NOP 1111 1001 0001 ---- 1111 000000 -- ---- | |
525 | LDRSB_rr 1111 1001 0001 .... .... 000000 .. .... @ldst_rr | |
526 | } | |
527 | } | |
528 | # NOPs here are unallocated memory hints, treated as NOP. | |
529 | { | |
530 | { | |
531 | NOP 1111 1001 -011 1111 1111 ------------ | |
532 | LDRSH_ri 1111 1001 .011 1111 .... ............ @ldst_ri_lit | |
533 | } | |
534 | { | |
535 | NOP 1111 1001 1011 ---- 1111 ------------ | |
536 | LDRSH_ri 1111 1001 1011 .... .... ............ @ldst_ri_pos | |
537 | } | |
538 | LDRSH_ri 1111 1001 0011 .... .... 1..1 ........ @ldst_ri_idx | |
539 | { | |
540 | NOP 1111 1001 0011 ---- 1111 1100 -------- | |
541 | LDRSH_ri 1111 1001 0011 .... .... 1100 ........ @ldst_ri_neg | |
542 | } | |
543 | LDRSHT_ri 1111 1001 0011 .... .... 1110 ........ @ldst_ri_unp | |
544 | { | |
545 | NOP 1111 1001 0011 ---- 1111 000000 -- ---- | |
546 | LDRSH_rr 1111 1001 0011 .... .... 000000 .. .... @ldst_rr | |
547 | } | |
548 | } | |
549 | ||
550 | %imm8x4 0:8 !function=times_4 | |
551 | &ldst_ri2 p w u rn rt rt2 imm | |
552 | @ldstd_ri8 .... .... u:1 ... rn:4 rt:4 rt2:4 ........ \ | |
553 | &ldst_ri2 imm=%imm8x4 | |
554 | ||
555 | STRD_ri_t32 1110 1000 .110 .... .... .... ........ @ldstd_ri8 w=1 p=0 | |
556 | LDRD_ri_t32 1110 1000 .111 .... .... .... ........ @ldstd_ri8 w=1 p=0 | |
557 | ||
558 | STRD_ri_t32 1110 1001 .100 .... .... .... ........ @ldstd_ri8 w=0 p=1 | |
559 | LDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1 | |
560 | ||
561 | STRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1 | |
35d240ac RH |
562 | { |
563 | SG 1110 1001 0111 1111 1110 1001 01111111 | |
564 | LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1 | |
565 | } | |
1efdd407 | 566 | |
808092bb | 567 | # Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch |
1efdd407 RH |
568 | |
569 | @strex_i .... .... .... rn:4 rt:4 rd:4 .... .... \ | |
570 | &strex rt2=15 imm=%imm8x4 | |
571 | @strex_0 .... .... .... rn:4 rt:4 .... .... rd:4 \ | |
572 | &strex rt2=15 imm=0 | |
573 | @strex_d .... .... .... rn:4 rt:4 rt2:4 .... rd:4 \ | |
574 | &strex imm=0 | |
575 | ||
576 | @ldrex_i .... .... .... rn:4 rt:4 .... .... .... \ | |
577 | &ldrex rt2=15 imm=%imm8x4 | |
578 | @ldrex_0 .... .... .... rn:4 rt:4 .... .... .... \ | |
579 | &ldrex rt2=15 imm=0 | |
580 | @ldrex_d .... .... .... rn:4 rt:4 rt2:4 .... .... \ | |
581 | &ldrex imm=0 | |
582 | ||
d449f174 RH |
583 | { |
584 | TT 1110 1000 0100 rn:4 1111 rd:4 A:1 T:1 000000 | |
585 | STREX 1110 1000 0100 .... .... .... .... .... @strex_i | |
586 | } | |
1efdd407 RH |
587 | STREXB 1110 1000 1100 .... .... 1111 0100 .... @strex_0 |
588 | STREXH 1110 1000 1100 .... .... 1111 0101 .... @strex_0 | |
589 | STREXD_t32 1110 1000 1100 .... .... .... 0111 .... @strex_d | |
590 | ||
591 | STLEX 1110 1000 1100 .... .... 1111 1110 .... @strex_0 | |
592 | STLEXB 1110 1000 1100 .... .... 1111 1100 .... @strex_0 | |
593 | STLEXH 1110 1000 1100 .... .... 1111 1101 .... @strex_0 | |
594 | STLEXD_t32 1110 1000 1100 .... .... .... 1111 .... @strex_d | |
595 | ||
596 | STL 1110 1000 1100 .... .... 1111 1010 1111 @ldrex_0 | |
597 | STLB 1110 1000 1100 .... .... 1111 1000 1111 @ldrex_0 | |
598 | STLH 1110 1000 1100 .... .... 1111 1001 1111 @ldrex_0 | |
599 | ||
600 | LDREX 1110 1000 0101 .... .... 1111 .... .... @ldrex_i | |
601 | LDREXB 1110 1000 1101 .... .... 1111 0100 1111 @ldrex_0 | |
602 | LDREXH 1110 1000 1101 .... .... 1111 0101 1111 @ldrex_0 | |
603 | LDREXD_t32 1110 1000 1101 .... .... .... 0111 1111 @ldrex_d | |
604 | ||
605 | LDAEX 1110 1000 1101 .... .... 1111 1110 1111 @ldrex_0 | |
606 | LDAEXB 1110 1000 1101 .... .... 1111 1100 1111 @ldrex_0 | |
607 | LDAEXH 1110 1000 1101 .... .... 1111 1101 1111 @ldrex_0 | |
608 | LDAEXD_t32 1110 1000 1101 .... .... .... 1111 1111 @ldrex_d | |
609 | ||
610 | LDA 1110 1000 1101 .... .... 1111 1010 1111 @ldrex_0 | |
611 | LDAB 1110 1000 1101 .... .... 1111 1000 1111 @ldrex_0 | |
612 | LDAH 1110 1000 1101 .... .... 1111 1001 1111 @ldrex_0 | |
adf1a566 | 613 | |
808092bb RH |
614 | &tbranch rn rm |
615 | @tbranch .... .... .... rn:4 .... .... .... rm:4 &tbranch | |
616 | ||
617 | TBB 1110 1000 1101 .... 1111 0000 0000 .... @tbranch | |
618 | TBH 1110 1000 1101 .... 1111 0000 0001 .... @tbranch | |
619 | ||
adf1a566 RH |
620 | # Parallel addition and subtraction |
621 | ||
622 | SADD8 1111 1010 1000 .... 1111 .... 0000 .... @rndm | |
623 | QADD8 1111 1010 1000 .... 1111 .... 0001 .... @rndm | |
624 | SHADD8 1111 1010 1000 .... 1111 .... 0010 .... @rndm | |
625 | UADD8 1111 1010 1000 .... 1111 .... 0100 .... @rndm | |
626 | UQADD8 1111 1010 1000 .... 1111 .... 0101 .... @rndm | |
627 | UHADD8 1111 1010 1000 .... 1111 .... 0110 .... @rndm | |
628 | ||
629 | SADD16 1111 1010 1001 .... 1111 .... 0000 .... @rndm | |
630 | QADD16 1111 1010 1001 .... 1111 .... 0001 .... @rndm | |
631 | SHADD16 1111 1010 1001 .... 1111 .... 0010 .... @rndm | |
632 | UADD16 1111 1010 1001 .... 1111 .... 0100 .... @rndm | |
633 | UQADD16 1111 1010 1001 .... 1111 .... 0101 .... @rndm | |
634 | UHADD16 1111 1010 1001 .... 1111 .... 0110 .... @rndm | |
635 | ||
636 | SASX 1111 1010 1010 .... 1111 .... 0000 .... @rndm | |
637 | QASX 1111 1010 1010 .... 1111 .... 0001 .... @rndm | |
638 | SHASX 1111 1010 1010 .... 1111 .... 0010 .... @rndm | |
639 | UASX 1111 1010 1010 .... 1111 .... 0100 .... @rndm | |
640 | UQASX 1111 1010 1010 .... 1111 .... 0101 .... @rndm | |
641 | UHASX 1111 1010 1010 .... 1111 .... 0110 .... @rndm | |
642 | ||
643 | SSUB8 1111 1010 1100 .... 1111 .... 0000 .... @rndm | |
644 | QSUB8 1111 1010 1100 .... 1111 .... 0001 .... @rndm | |
645 | SHSUB8 1111 1010 1100 .... 1111 .... 0010 .... @rndm | |
646 | USUB8 1111 1010 1100 .... 1111 .... 0100 .... @rndm | |
647 | UQSUB8 1111 1010 1100 .... 1111 .... 0101 .... @rndm | |
648 | UHSUB8 1111 1010 1100 .... 1111 .... 0110 .... @rndm | |
649 | ||
650 | SSUB16 1111 1010 1101 .... 1111 .... 0000 .... @rndm | |
651 | QSUB16 1111 1010 1101 .... 1111 .... 0001 .... @rndm | |
652 | SHSUB16 1111 1010 1101 .... 1111 .... 0010 .... @rndm | |
653 | USUB16 1111 1010 1101 .... 1111 .... 0100 .... @rndm | |
654 | UQSUB16 1111 1010 1101 .... 1111 .... 0101 .... @rndm | |
655 | UHSUB16 1111 1010 1101 .... 1111 .... 0110 .... @rndm | |
656 | ||
657 | SSAX 1111 1010 1110 .... 1111 .... 0000 .... @rndm | |
658 | QSAX 1111 1010 1110 .... 1111 .... 0001 .... @rndm | |
659 | SHSAX 1111 1010 1110 .... 1111 .... 0010 .... @rndm | |
660 | USAX 1111 1010 1110 .... 1111 .... 0100 .... @rndm | |
661 | UQSAX 1111 1010 1110 .... 1111 .... 0101 .... @rndm | |
662 | UHSAX 1111 1010 1110 .... 1111 .... 0110 .... @rndm | |
46497f6a RH |
663 | |
664 | # Register extends | |
665 | ||
666 | @rrr_rot .... .... .... rn:4 .... rd:4 .. rot:2 rm:4 &rrr_rot | |
667 | ||
668 | SXTAH 1111 1010 0000 .... 1111 .... 10.. .... @rrr_rot | |
669 | UXTAH 1111 1010 0001 .... 1111 .... 10.. .... @rrr_rot | |
670 | SXTAB16 1111 1010 0010 .... 1111 .... 10.. .... @rrr_rot | |
671 | UXTAB16 1111 1010 0011 .... 1111 .... 10.. .... @rrr_rot | |
672 | SXTAB 1111 1010 0100 .... 1111 .... 10.. .... @rrr_rot | |
673 | UXTAB 1111 1010 0101 .... 1111 .... 10.. .... @rrr_rot | |
c5c426d4 RH |
674 | |
675 | # Load/store multiple | |
676 | ||
677 | @ldstm .... .... .. w:1 . rn:4 list:16 &ldst_block u=0 | |
678 | ||
679 | STM_t32 1110 1000 10.0 .... ................ @ldstm i=1 b=0 | |
680 | STM_t32 1110 1001 00.0 .... ................ @ldstm i=0 b=1 | |
6e21a013 PM |
681 | { |
682 | # Rn=15 UNDEFs for LDM; M-profile CLRM uses that encoding | |
683 | CLRM 1110 1000 1001 1111 list:16 | |
684 | LDM_t32 1110 1000 10.1 .... ................ @ldstm i=1 b=0 | |
685 | } | |
c5c426d4 | 686 | LDM_t32 1110 1001 00.1 .... ................ @ldstm i=0 b=1 |
360144f3 | 687 | |
885782a7 RH |
688 | &rfe !extern rn w pu |
689 | @rfe .... .... .. w:1 . rn:4 ................ &rfe | |
690 | ||
691 | RFE 1110 1000 00.1 .... 1100000000000000 @rfe pu=2 | |
692 | RFE 1110 1001 10.1 .... 1100000000000000 @rfe pu=1 | |
693 | ||
694 | &srs !extern mode w pu | |
695 | @srs .... .... .. w:1 . .... ........... mode:5 &srs | |
696 | ||
697 | SRS 1110 1000 00.0 1101 1100 0000 000. .... @srs pu=2 | |
698 | SRS 1110 1001 10.0 1101 1100 0000 000. .... @srs pu=1 | |
699 | ||
4c498dcf PM |
700 | # Coprocessor instructions |
701 | ||
702 | # We decode MCR, MCR, MRRC and MCRR only, because for QEMU the | |
703 | # other coprocessor instructions always UNDEF. | |
704 | # The trans_ functions for these will ignore cp values 8..13 for v7 or | |
705 | # earlier, and 0..13 for v8 and later, because those areas of the | |
706 | # encoding space may be used for other things, such as VFP or Neon. | |
707 | ||
708 | @mcr .... .... opc1:3 . crn:4 rt:4 cp:4 opc2:3 . crm:4 | |
709 | @mcrr .... .... .... rt2:4 rt:4 cp:4 opc1:4 crm:4 | |
710 | ||
711 | MCRR 1110 1100 0100 .... .... .... .... .... @mcrr | |
712 | MRRC 1110 1100 0101 .... .... .... .... .... @mcrr | |
713 | ||
714 | MCR 1110 1110 ... 0 .... .... .... ... 1 .... @mcr | |
715 | MRC 1110 1110 ... 1 .... .... .... ... 1 .... @mcr | |
716 | ||
360144f3 RH |
717 | # Branches |
718 | ||
719 | %imm24 26:s1 13:1 11:1 16:10 0:11 !function=t32_branch24 | |
720 | @branch24 ................................ &i imm=%imm24 | |
721 | ||
722 | B 1111 0. .......... 10.1 ............ @branch24 | |
723 | BL 1111 0. .......... 11.1 ............ @branch24 | |
05903f03 PM |
724 | { |
725 | # BLX_i is non-M-profile only | |
726 | BLX_i 1111 0. .......... 11.0 ............ @branch24 | |
727 | # M-profile only: loop and branch insns | |
728 | [ | |
729 | # All these BF insns have boff != 0b0000; we NOP them all | |
730 | BF 1111 0 boff:4 ------- 1100 - ---------- 1 # BFL | |
731 | BF 1111 0 boff:4 0 ------ 1110 - ---------- 1 # BFCSEL | |
732 | BF 1111 0 boff:4 10 ----- 1110 - ---------- 1 # BF | |
733 | BF 1111 0 boff:4 11 ----- 1110 0 0000000000 1 # BFX, BFLX | |
734 | ] | |
b7226369 PM |
735 | [ |
736 | # LE and WLS immediate | |
737 | %lob_imm 1:10 11:1 !function=times_2 | |
738 | ||
40a36f00 | 739 | DLS 1111 0 0000 100 rn:4 1110 0000 0000 0001 size=4 |
6822abfd PM |
740 | WLS 1111 0 0000 100 rn:4 1100 . .......... 1 imm=%lob_imm size=4 |
741 | { | |
a454ea1e | 742 | LE 1111 0 0000 0 f:1 tp:1 1111 1100 . .......... 1 imm=%lob_imm |
6822abfd PM |
743 | # This is WLSTP |
744 | WLS 1111 0 0000 0 size:2 rn:4 1100 . .......... 1 imm=%lob_imm | |
745 | } | |
40a36f00 PM |
746 | { |
747 | LCTP 1111 0 0000 000 1111 1110 0000 0000 0001 | |
748 | # This is DLSTP | |
749 | DLS 1111 0 0000 0 size:2 rn:4 1110 0000 0000 0001 | |
750 | } | |
0f31e37c | 751 | VCTP 1111 0 0000 0 size:2 rn:4 1110 1000 0000 0001 |
b7226369 | 752 | ] |
05903f03 | 753 | } |