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