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