]>
Commit | Line | Data |
---|---|---|
51409b9e RH |
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 | # | |
25ae32c5 | 24 | |
63130596 | 25 | &empty |
25ae32c5 | 26 | &s_rrr_shi s rd rn rm shim shty |
5be2c123 | 27 | &s_rrr_shr s rn rd rm rs shty |
581c6ebd | 28 | &s_rri_rot s rn rd imm rot |
bd92fe35 RH |
29 | &s_rrrr s rd rn rm ra |
30 | &rrrr rd rn rm ra | |
46497f6a | 31 | &rrr_rot rd rn rm rot |
6d0730a8 | 32 | &rrr rd rn rm |
4c97f5b2 | 33 | &rr rd rm |
145952e8 | 34 | &ri rd imm |
4ed95abd | 35 | &r rm |
2cde9ea5 | 36 | &i imm |
d0b26644 RH |
37 | &msr_reg rn r mask |
38 | &mrs_reg rd r | |
39 | &msr_bank rn r sysm | |
40 | &mrs_bank rd r sysm | |
5e291fe1 RH |
41 | &ldst_rr p w u rn rt rm shimm shtype |
42 | &ldst_ri p w u rn rt imm | |
c5c426d4 | 43 | &ldst_block rn i b u w list |
1efdd407 RH |
44 | &strex rn rd rt rt2 imm |
45 | &ldrex rn rt rt2 imm | |
86d21e4b RH |
46 | &bfx rd rn lsb widthm1 |
47 | &bfi rd rn lsb msb | |
46497f6a RH |
48 | &sat rd rn satimm imm sh |
49 | &pkh rd rn rm imm tb | |
25ae32c5 RH |
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 | ||
60 | AND_rrri .... 000 0000 . .... .... ..... .. 0 .... @s_rrr_shi | |
61 | EOR_rrri .... 000 0001 . .... .... ..... .. 0 .... @s_rrr_shi | |
62 | SUB_rrri .... 000 0010 . .... .... ..... .. 0 .... @s_rrr_shi | |
63 | RSB_rrri .... 000 0011 . .... .... ..... .. 0 .... @s_rrr_shi | |
64 | ADD_rrri .... 000 0100 . .... .... ..... .. 0 .... @s_rrr_shi | |
65 | ADC_rrri .... 000 0101 . .... .... ..... .. 0 .... @s_rrr_shi | |
66 | SBC_rrri .... 000 0110 . .... .... ..... .. 0 .... @s_rrr_shi | |
67 | RSC_rrri .... 000 0111 . .... .... ..... .. 0 .... @s_rrr_shi | |
68 | TST_xrri .... 000 1000 1 .... 0000 ..... .. 0 .... @S_xrr_shi | |
69 | TEQ_xrri .... 000 1001 1 .... 0000 ..... .. 0 .... @S_xrr_shi | |
70 | CMP_xrri .... 000 1010 1 .... 0000 ..... .. 0 .... @S_xrr_shi | |
71 | CMN_xrri .... 000 1011 1 .... 0000 ..... .. 0 .... @S_xrr_shi | |
72 | ORR_rrri .... 000 1100 . .... .... ..... .. 0 .... @s_rrr_shi | |
73 | MOV_rxri .... 000 1101 . 0000 .... ..... .. 0 .... @s_rxr_shi | |
74 | BIC_rrri .... 000 1110 . .... .... ..... .. 0 .... @s_rrr_shi | |
75 | MVN_rxri .... 000 1111 . 0000 .... ..... .. 0 .... @s_rxr_shi | |
5be2c123 | 76 | |
8f445127 RH |
77 | %imm16 16:4 0:12 |
78 | @mov16 ---- .... .... .... rd:4 ............ &ri imm=%imm16 | |
79 | ||
80 | MOVW .... 0011 0000 .... .... ............ @mov16 | |
81 | MOVT .... 0011 0100 .... .... ............ @mov16 | |
82 | ||
5be2c123 RH |
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 | ||
92 | AND_rrrr .... 000 0000 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
93 | EOR_rrrr .... 000 0001 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
94 | SUB_rrrr .... 000 0010 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
95 | RSB_rrrr .... 000 0011 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
96 | ADD_rrrr .... 000 0100 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
97 | ADC_rrrr .... 000 0101 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
98 | SBC_rrrr .... 000 0110 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
99 | RSC_rrrr .... 000 0111 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
100 | TST_xrrr .... 000 1000 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr | |
101 | TEQ_xrrr .... 000 1001 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr | |
102 | CMP_xrrr .... 000 1010 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr | |
103 | CMN_xrrr .... 000 1011 1 .... 0000 .... 0 .. 1 .... @S_xrr_shr | |
104 | ORR_rrrr .... 000 1100 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
105 | MOV_rxrr .... 000 1101 . 0000 .... .... 0 .. 1 .... @s_rxr_shr | |
106 | BIC_rrrr .... 000 1110 . .... .... .... 0 .. 1 .... @s_rrr_shr | |
107 | MVN_rxrr .... 000 1111 . 0000 .... .... 0 .. 1 .... @s_rxr_shr | |
581c6ebd RH |
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 | ||
120 | AND_rri .... 001 0000 . .... .... ............ @s_rri_rot | |
121 | EOR_rri .... 001 0001 . .... .... ............ @s_rri_rot | |
122 | SUB_rri .... 001 0010 . .... .... ............ @s_rri_rot | |
123 | RSB_rri .... 001 0011 . .... .... ............ @s_rri_rot | |
124 | ADD_rri .... 001 0100 . .... .... ............ @s_rri_rot | |
125 | ADC_rri .... 001 0101 . .... .... ............ @s_rri_rot | |
126 | SBC_rri .... 001 0110 . .... .... ............ @s_rri_rot | |
127 | RSC_rri .... 001 0111 . .... .... ............ @s_rri_rot | |
128 | TST_xri .... 001 1000 1 .... 0000 ............ @S_xri_rot | |
129 | TEQ_xri .... 001 1001 1 .... 0000 ............ @S_xri_rot | |
130 | CMP_xri .... 001 1010 1 .... 0000 ............ @S_xri_rot | |
131 | CMN_xri .... 001 1011 1 .... 0000 ............ @S_xri_rot | |
132 | ORR_rri .... 001 1100 . .... .... ............ @s_rri_rot | |
133 | MOV_rxi .... 001 1101 . 0000 .... ............ @s_rxi_rot | |
134 | BIC_rri .... 001 1110 . .... .... ............ @s_rri_rot | |
135 | MVN_rxi .... 001 1111 . 0000 .... ............ @s_rxi_rot | |
bd92fe35 RH |
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 | |
26c6923d | 142 | @rd0mn ---- .... ... . rd:4 .... rm:4 .... rn:4 &rrrr ra=0 |
bd92fe35 RH |
143 | |
144 | MUL .... 0000 000 . .... 0000 .... 1001 .... @s_rd0mn | |
145 | MLA .... 0000 001 . .... .... .... 1001 .... @s_rdamn | |
146 | UMAAL .... 0000 010 0 .... .... .... 1001 .... @rdamn | |
147 | MLS .... 0000 011 0 .... .... .... 1001 .... @rdamn | |
148 | UMULL .... 0000 100 . .... .... .... 1001 .... @s_rdamn | |
149 | UMLAL .... 0000 101 . .... .... .... 1001 .... @s_rdamn | |
150 | SMULL .... 0000 110 . .... .... .... 1001 .... @s_rdamn | |
151 | SMLAL .... 0000 111 . .... .... .... 1001 .... @s_rdamn | |
6d0730a8 RH |
152 | |
153 | # Saturating addition and subtraction | |
154 | ||
155 | @rndm ---- .... .... rn:4 rd:4 .... .... rm:4 &rrr | |
156 | ||
157 | QADD .... 0001 0000 .... .... 0000 0101 .... @rndm | |
158 | QSUB .... 0001 0010 .... .... 0000 0101 .... @rndm | |
159 | QDADD .... 0001 0100 .... .... 0000 0101 .... @rndm | |
160 | QDSUB .... 0001 0110 .... .... 0000 0101 .... @rndm | |
26c6923d RH |
161 | |
162 | # Halfword multiply and multiply accumulate | |
163 | ||
164 | SMLABB .... 0001 0000 .... .... .... 1000 .... @rdamn | |
165 | SMLABT .... 0001 0000 .... .... .... 1100 .... @rdamn | |
166 | SMLATB .... 0001 0000 .... .... .... 1010 .... @rdamn | |
167 | SMLATT .... 0001 0000 .... .... .... 1110 .... @rdamn | |
168 | SMLAWB .... 0001 0010 .... .... .... 1000 .... @rdamn | |
169 | SMULWB .... 0001 0010 .... 0000 .... 1010 .... @rd0mn | |
170 | SMLAWT .... 0001 0010 .... .... .... 1100 .... @rdamn | |
171 | SMULWT .... 0001 0010 .... 0000 .... 1110 .... @rd0mn | |
172 | SMLALBB .... 0001 0100 .... .... .... 1000 .... @rdamn | |
173 | SMLALBT .... 0001 0100 .... .... .... 1100 .... @rdamn | |
174 | SMLALTB .... 0001 0100 .... .... .... 1010 .... @rdamn | |
175 | SMLALTT .... 0001 0100 .... .... .... 1110 .... @rdamn | |
176 | SMULBB .... 0001 0110 .... 0000 .... 1000 .... @rd0mn | |
177 | SMULBT .... 0001 0110 .... 0000 .... 1100 .... @rd0mn | |
178 | SMULTB .... 0001 0110 .... 0000 .... 1010 .... @rd0mn | |
179 | SMULTT .... 0001 0110 .... 0000 .... 1110 .... @rd0mn | |
63130596 RH |
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 | } | |
203 | MSR_imm .... 0011 0110 .... 1111 .... .... .... @msr_i r=1 | |
d0b26644 | 204 | |
6c35d53f RH |
205 | # Cyclic Redundancy Check |
206 | ||
207 | CRC32B .... 0001 0000 .... .... 0000 0100 .... @rndm | |
208 | CRC32H .... 0001 0010 .... .... 0000 0100 .... @rndm | |
209 | CRC32W .... 0001 0100 .... .... 0000 0100 .... @rndm | |
210 | CRC32CB .... 0001 0000 .... .... 0010 0100 .... @rndm | |
211 | CRC32CH .... 0001 0010 .... .... 0010 0100 .... @rndm | |
212 | CRC32CW .... 0001 0100 .... .... 0010 0100 .... @rndm | |
213 | ||
d0b26644 RH |
214 | # Miscellaneous instructions |
215 | ||
216 | %sysm 8:1 16:4 | |
2cde9ea5 | 217 | %imm16_8_0 8:12 0:4 |
d0b26644 | 218 | |
4ed95abd | 219 | @rm ---- .... .... .... .... .... .... rm:4 &r |
4c97f5b2 | 220 | @rdm ---- .... .... .... rd:4 .... .... rm:4 &rr |
2cde9ea5 | 221 | @i16 ---- .... .... .... .... .... .... .... &i imm=%imm16_8_0 |
4ed95abd | 222 | |
d0b26644 RH |
223 | MRS_bank ---- 0001 0 r:1 00 .... rd:4 001. 0000 0000 &mrs_bank %sysm |
224 | MSR_bank ---- 0001 0 r:1 10 .... 1111 001. 0000 rn:4 &msr_bank %sysm | |
225 | ||
226 | MRS_reg ---- 0001 0 r:1 00 1111 rd:4 0000 0000 0000 &mrs_reg | |
227 | MSR_reg ---- 0001 0 r:1 10 mask:4 1111 0000 0000 rn:4 &msr_reg | |
4ed95abd RH |
228 | |
229 | BX .... 0001 0010 1111 1111 1111 0001 .... @rm | |
230 | BXJ .... 0001 0010 1111 1111 1111 0010 .... @rm | |
231 | BLX_r .... 0001 0010 1111 1111 1111 0011 .... @rm | |
4c97f5b2 RH |
232 | |
233 | CLZ .... 0001 0110 1111 .... 1111 0001 .... @rdm | |
ef11bc3c RH |
234 | |
235 | ERET ---- 0001 0110 0000 0000 0000 0110 1110 | |
2cde9ea5 RH |
236 | |
237 | HLT .... 0001 0000 .... .... .... 0111 .... @i16 | |
238 | BKPT .... 0001 0010 .... .... .... 0111 .... @i16 | |
239 | HVC .... 0001 0100 .... .... .... 0111 .... @i16 | |
240 | SMC ---- 0001 0110 0000 0000 0000 0111 imm:4 &i | |
5e291fe1 RH |
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 | ||
249 | STRH_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_pw0 | |
250 | STRH_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_p1w | |
251 | ||
252 | LDRD_rr .... 000. .0.0 .... .... 0000 1101 .... @ldst_rr_pw0 | |
253 | LDRD_rr .... 000. .0.0 .... .... 0000 1101 .... @ldst_rr_p1w | |
254 | ||
255 | STRD_rr .... 000. .0.0 .... .... 0000 1111 .... @ldst_rr_pw0 | |
256 | STRD_rr .... 000. .0.0 .... .... 0000 1111 .... @ldst_rr_p1w | |
257 | ||
258 | LDRH_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_pw0 | |
259 | LDRH_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_p1w | |
260 | ||
261 | LDRSB_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_pw0 | |
262 | LDRSB_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_p1w | |
263 | ||
264 | LDRSH_rr .... 000. .0.1 .... .... 0000 1111 .... @ldst_rr_pw0 | |
265 | LDRSH_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 | ||
272 | STRHT_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_p0w1 | |
273 | LDRHT_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_p0w1 | |
274 | LDRSBT_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_p0w1 | |
275 | LDRSHT_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 | ||
284 | STR_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_pw0 | |
285 | STR_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_p1w | |
286 | STRB_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_pw0 | |
287 | STRB_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_p1w | |
288 | ||
289 | LDR_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_pw0 | |
290 | LDR_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_p1w | |
291 | LDRB_rr .... 011. .1.1 .... .... .... ...0 .... @ldst_rs_pw0 | |
292 | LDRB_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 | ||
297 | STRT_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_p0w1 | |
298 | STRBT_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_p0w1 | |
299 | LDRT_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_p0w1 | |
300 | LDRBT_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 | ||
310 | STRH_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_pw0 | |
311 | STRH_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_p1w | |
312 | ||
313 | LDRD_ri_a32 .... 000. .1.0 .... .... .... 1101 .... @ldst_ri8_pw0 | |
314 | LDRD_ri_a32 .... 000. .1.0 .... .... .... 1101 .... @ldst_ri8_p1w | |
315 | ||
316 | STRD_ri_a32 .... 000. .1.0 .... .... .... 1111 .... @ldst_ri8_pw0 | |
317 | STRD_ri_a32 .... 000. .1.0 .... .... .... 1111 .... @ldst_ri8_p1w | |
318 | ||
319 | LDRH_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_pw0 | |
320 | LDRH_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_p1w | |
321 | ||
322 | LDRSB_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_pw0 | |
323 | LDRSB_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_p1w | |
324 | ||
325 | LDRSH_ri .... 000. .1.1 .... .... .... 1111 .... @ldst_ri8_pw0 | |
326 | LDRSH_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 | ||
333 | STRHT_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_p0w1 | |
334 | LDRHT_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_p0w1 | |
335 | LDRSBT_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_p0w1 | |
336 | LDRSHT_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 | ||
343 | STR_ri .... 010. .0.0 .... .... ............ @ldst_ri12_p1w | |
344 | STR_ri .... 010. .0.0 .... .... ............ @ldst_ri12_pw0 | |
345 | STRB_ri .... 010. .1.0 .... .... ............ @ldst_ri12_p1w | |
346 | STRB_ri .... 010. .1.0 .... .... ............ @ldst_ri12_pw0 | |
347 | ||
348 | LDR_ri .... 010. .0.1 .... .... ............ @ldst_ri12_p1w | |
349 | LDR_ri .... 010. .0.1 .... .... ............ @ldst_ri12_pw0 | |
350 | LDRB_ri .... 010. .1.1 .... .... ............ @ldst_ri12_p1w | |
351 | LDRB_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 | ||
355 | STRT_ri .... 010. .0.0 .... .... ............ @ldst_ri12_p0w1 | |
356 | STRBT_ri .... 010. .1.0 .... .... ............ @ldst_ri12_p0w1 | |
357 | LDRT_ri .... 010. .0.1 .... .... ............ @ldst_ri12_p0w1 | |
358 | LDRBT_ri .... 010. .1.1 .... .... ............ @ldst_ri12_p0w1 | |
1efdd407 RH |
359 | |
360 | # Synchronization primitives | |
361 | ||
362 | @swp ---- .... .... rn:4 rt:4 .... .... rt2:4 | |
363 | ||
364 | SWP .... 0001 0000 .... .... 0000 1001 .... @swp | |
365 | SWPB .... 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 | ||
378 | STREX .... 0001 1000 .... .... 1111 1001 .... @strex | |
379 | STREXD_a32 .... 0001 1010 .... .... 1111 1001 .... @strex | |
380 | STREXB .... 0001 1100 .... .... 1111 1001 .... @strex | |
381 | STREXH .... 0001 1110 .... .... 1111 1001 .... @strex | |
382 | ||
383 | STLEX .... 0001 1000 .... .... 1110 1001 .... @strex | |
384 | STLEXD_a32 .... 0001 1010 .... .... 1110 1001 .... @strex | |
385 | STLEXB .... 0001 1100 .... .... 1110 1001 .... @strex | |
386 | STLEXH .... 0001 1110 .... .... 1110 1001 .... @strex | |
387 | ||
388 | STL .... 0001 1000 .... 1111 1100 1001 .... @stl | |
389 | STLB .... 0001 1100 .... 1111 1100 1001 .... @stl | |
390 | STLH .... 0001 1110 .... 1111 1100 1001 .... @stl | |
391 | ||
392 | LDREX .... 0001 1001 .... .... 1111 1001 1111 @ldrex | |
393 | LDREXD_a32 .... 0001 1011 .... .... 1111 1001 1111 @ldrex | |
394 | LDREXB .... 0001 1101 .... .... 1111 1001 1111 @ldrex | |
395 | LDREXH .... 0001 1111 .... .... 1111 1001 1111 @ldrex | |
396 | ||
397 | LDAEX .... 0001 1001 .... .... 1110 1001 1111 @ldrex | |
398 | LDAEXD_a32 .... 0001 1011 .... .... 1110 1001 1111 @ldrex | |
399 | LDAEXB .... 0001 1101 .... .... 1110 1001 1111 @ldrex | |
400 | LDAEXH .... 0001 1111 .... .... 1110 1001 1111 @ldrex | |
401 | ||
402 | LDA .... 0001 1001 .... .... 1100 1001 1111 @ldrex | |
403 | LDAB .... 0001 1101 .... .... 1100 1001 1111 @ldrex | |
404 | LDAH .... 0001 1111 .... .... 1100 1001 1111 @ldrex | |
86d21e4b RH |
405 | |
406 | # Media instructions | |
407 | ||
408 | # usad8 is usada8 w/ ra=15 | |
409 | USADA8 ---- 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 | ||
414 | SBFX .... 0111 101 ..... .... ..... 101 .... @bfx | |
415 | UBFX .... 0111 111 ..... .... ..... 101 .... @bfx | |
416 | ||
417 | # bfc is bfi w/ rn=15 | |
418 | BFCI ---- 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. | |
422 | UDF 1110 0111 1111 ---- ---- ---- 1111 ---- | |
adf1a566 RH |
423 | |
424 | # Parallel addition and subtraction | |
425 | ||
426 | SADD16 .... 0110 0001 .... .... 1111 0001 .... @rndm | |
427 | SASX .... 0110 0001 .... .... 1111 0011 .... @rndm | |
428 | SSAX .... 0110 0001 .... .... 1111 0101 .... @rndm | |
429 | SSUB16 .... 0110 0001 .... .... 1111 0111 .... @rndm | |
430 | SADD8 .... 0110 0001 .... .... 1111 1001 .... @rndm | |
431 | SSUB8 .... 0110 0001 .... .... 1111 1111 .... @rndm | |
432 | ||
433 | QADD16 .... 0110 0010 .... .... 1111 0001 .... @rndm | |
434 | QASX .... 0110 0010 .... .... 1111 0011 .... @rndm | |
435 | QSAX .... 0110 0010 .... .... 1111 0101 .... @rndm | |
436 | QSUB16 .... 0110 0010 .... .... 1111 0111 .... @rndm | |
437 | QADD8 .... 0110 0010 .... .... 1111 1001 .... @rndm | |
438 | QSUB8 .... 0110 0010 .... .... 1111 1111 .... @rndm | |
439 | ||
440 | SHADD16 .... 0110 0011 .... .... 1111 0001 .... @rndm | |
441 | SHASX .... 0110 0011 .... .... 1111 0011 .... @rndm | |
442 | SHSAX .... 0110 0011 .... .... 1111 0101 .... @rndm | |
443 | SHSUB16 .... 0110 0011 .... .... 1111 0111 .... @rndm | |
444 | SHADD8 .... 0110 0011 .... .... 1111 1001 .... @rndm | |
445 | SHSUB8 .... 0110 0011 .... .... 1111 1111 .... @rndm | |
446 | ||
447 | UADD16 .... 0110 0101 .... .... 1111 0001 .... @rndm | |
448 | UASX .... 0110 0101 .... .... 1111 0011 .... @rndm | |
449 | USAX .... 0110 0101 .... .... 1111 0101 .... @rndm | |
450 | USUB16 .... 0110 0101 .... .... 1111 0111 .... @rndm | |
451 | UADD8 .... 0110 0101 .... .... 1111 1001 .... @rndm | |
452 | USUB8 .... 0110 0101 .... .... 1111 1111 .... @rndm | |
453 | ||
454 | UQADD16 .... 0110 0110 .... .... 1111 0001 .... @rndm | |
455 | UQASX .... 0110 0110 .... .... 1111 0011 .... @rndm | |
456 | UQSAX .... 0110 0110 .... .... 1111 0101 .... @rndm | |
457 | UQSUB16 .... 0110 0110 .... .... 1111 0111 .... @rndm | |
458 | UQADD8 .... 0110 0110 .... .... 1111 1001 .... @rndm | |
459 | UQSUB8 .... 0110 0110 .... .... 1111 1111 .... @rndm | |
460 | ||
461 | UHADD16 .... 0110 0111 .... .... 1111 0001 .... @rndm | |
462 | UHASX .... 0110 0111 .... .... 1111 0011 .... @rndm | |
463 | UHSAX .... 0110 0111 .... .... 1111 0101 .... @rndm | |
464 | UHSUB16 .... 0110 0111 .... .... 1111 0111 .... @rndm | |
465 | UHADD8 .... 0110 0111 .... .... 1111 1001 .... @rndm | |
466 | UHSUB8 .... 0110 0111 .... .... 1111 1111 .... @rndm | |
46497f6a RH |
467 | |
468 | # Packing, unpacking, saturation, and reversal | |
469 | ||
470 | PKH ---- 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 | ||
476 | SSAT .... 0110 101. .... .... .... ..01 .... @sat | |
477 | USAT .... 0110 111. .... .... .... ..01 .... @sat | |
478 | ||
479 | SSAT16 .... 0110 1010 .... .... 1111 0011 .... @sat16 | |
480 | USAT16 .... 0110 1110 .... .... 1111 0011 .... @sat16 | |
481 | ||
482 | @rrr_rot ---- .... .... rn:4 rd:4 rot:2 ...... rm:4 &rrr_rot | |
483 | ||
484 | SXTAB16 .... 0110 1000 .... .... ..00 0111 .... @rrr_rot | |
485 | SXTAB .... 0110 1010 .... .... ..00 0111 .... @rrr_rot | |
486 | SXTAH .... 0110 1011 .... .... ..00 0111 .... @rrr_rot | |
487 | UXTAB16 .... 0110 1100 .... .... ..00 0111 .... @rrr_rot | |
488 | UXTAB .... 0110 1110 .... .... ..00 0111 .... @rrr_rot | |
489 | UXTAH .... 0110 1111 .... .... ..00 0111 .... @rrr_rot | |
490 | ||
491 | SEL .... 0110 1000 .... .... 1111 1011 .... @rndm | |
492 | REV .... 0110 1011 1111 .... 1111 0011 .... @rdm | |
493 | REV16 .... 0110 1011 1111 .... 1111 1011 .... @rdm | |
494 | REVSH .... 0110 1111 1111 .... 1111 1011 .... @rdm | |
495 | RBIT .... 0110 1111 1111 .... 1111 0011 .... @rdm | |
2c7c4e09 RH |
496 | |
497 | # Signed multiply, signed and unsigned divide | |
498 | ||
499 | @rdmn ---- .... .... rd:4 .... rm:4 .... rn:4 &rrr | |
500 | ||
501 | SMLAD .... 0111 0000 .... .... .... 0001 .... @rdamn | |
502 | SMLADX .... 0111 0000 .... .... .... 0011 .... @rdamn | |
503 | SMLSD .... 0111 0000 .... .... .... 0101 .... @rdamn | |
504 | SMLSDX .... 0111 0000 .... .... .... 0111 .... @rdamn | |
505 | ||
506 | SDIV .... 0111 0001 .... 1111 .... 0001 .... @rdmn | |
507 | UDIV .... 0111 0011 .... 1111 .... 0001 .... @rdmn | |
508 | ||
509 | SMLALD .... 0111 0100 .... .... .... 0001 .... @rdamn | |
510 | SMLALDX .... 0111 0100 .... .... .... 0011 .... @rdamn | |
511 | SMLSLD .... 0111 0100 .... .... .... 0101 .... @rdamn | |
512 | SMLSLDX .... 0111 0100 .... .... .... 0111 .... @rdamn | |
513 | ||
514 | SMMLA .... 0111 0101 .... .... .... 0001 .... @rdamn | |
515 | SMMLAR .... 0111 0101 .... .... .... 0011 .... @rdamn | |
516 | SMMLS .... 0111 0101 .... .... .... 1101 .... @rdamn | |
517 | SMMLSR .... 0111 0101 .... .... .... 1111 .... @rdamn | |
c5c426d4 RH |
518 | |
519 | # Block data transfer | |
520 | ||
521 | STM ---- 100 b:1 i:1 u:1 w:1 0 rn:4 list:16 &ldst_block | |
522 | LDM_a32 ---- 100 b:1 i:1 u:1 w:1 1 rn:4 list:16 &ldst_block | |
360144f3 RH |
523 | |
524 | # Branch, branch with link | |
525 | ||
526 | %imm26 0:s24 !function=times_4 | |
527 | @branch ---- .... ........................ &i imm=%imm26 | |
528 | ||
529 | B .... 1010 ........................ @branch | |
530 | BL .... 1011 ........................ @branch | |
542f5188 RH |
531 | |
532 | # Supervisor call | |
533 | ||
534 | SVC ---- 1111 imm:24 &i |