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