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 [ 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} 209MSR_imm .... 0011 0110 .... 1111 .... .... .... @msr_i r=1 210 211# Cyclic Redundancy Check 212 213CRC32B .... 0001 0000 .... .... 0000 0100 .... @rndm 214CRC32H .... 0001 0010 .... .... 0000 0100 .... @rndm 215CRC32W .... 0001 0100 .... .... 0000 0100 .... @rndm 216CRC32CB .... 0001 0000 .... .... 0010 0100 .... @rndm 217CRC32CH .... 0001 0010 .... .... 0010 0100 .... @rndm 218CRC32CW .... 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 229MRS_bank ---- 0001 0 r:1 00 .... rd:4 001. 0000 0000 &mrs_bank %sysm 230MSR_bank ---- 0001 0 r:1 10 .... 1111 001. 0000 rn:4 &msr_bank %sysm 231 232MRS_reg ---- 0001 0 r:1 00 1111 rd:4 0000 0000 0000 &mrs_reg 233MSR_reg ---- 0001 0 r:1 10 mask:4 1111 0000 0000 rn:4 &msr_reg 234 235BX .... 0001 0010 1111 1111 1111 0001 .... @rm 236BXJ .... 0001 0010 1111 1111 1111 0010 .... @rm 237BLX_r .... 0001 0010 1111 1111 1111 0011 .... @rm 238 239CLZ .... 0001 0110 1111 .... 1111 0001 .... @rdm 240 241ERET ---- 0001 0110 0000 0000 0000 0110 1110 242 243HLT .... 0001 0000 .... .... .... 0111 .... @i16 244BKPT .... 0001 0010 .... .... .... 0111 .... @i16 245HVC .... 0001 0100 .... .... .... 0111 .... @i16 246SMC ---- 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 255STRH_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_pw0 256STRH_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_p1w 257 258LDRD_rr .... 000. .0.0 .... .... 0000 1101 .... @ldst_rr_pw0 259LDRD_rr .... 000. .0.0 .... .... 0000 1101 .... @ldst_rr_p1w 260 261STRD_rr .... 000. .0.0 .... .... 0000 1111 .... @ldst_rr_pw0 262STRD_rr .... 000. .0.0 .... .... 0000 1111 .... @ldst_rr_p1w 263 264LDRH_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_pw0 265LDRH_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_p1w 266 267LDRSB_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_pw0 268LDRSB_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_p1w 269 270LDRSH_rr .... 000. .0.1 .... .... 0000 1111 .... @ldst_rr_pw0 271LDRSH_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 278STRHT_rr .... 000. .0.0 .... .... 0000 1011 .... @ldst_rr_p0w1 279LDRHT_rr .... 000. .0.1 .... .... 0000 1011 .... @ldst_rr_p0w1 280LDRSBT_rr .... 000. .0.1 .... .... 0000 1101 .... @ldst_rr_p0w1 281LDRSHT_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 290STR_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_pw0 291STR_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_p1w 292STRB_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_pw0 293STRB_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_p1w 294 295LDR_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_pw0 296LDR_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_p1w 297LDRB_rr .... 011. .1.1 .... .... .... ...0 .... @ldst_rs_pw0 298LDRB_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 303STRT_rr .... 011. .0.0 .... .... .... ...0 .... @ldst_rs_p0w1 304STRBT_rr .... 011. .1.0 .... .... .... ...0 .... @ldst_rs_p0w1 305LDRT_rr .... 011. .0.1 .... .... .... ...0 .... @ldst_rs_p0w1 306LDRBT_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 316STRH_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_pw0 317STRH_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_p1w 318 319LDRD_ri_a32 .... 000. .1.0 .... .... .... 1101 .... @ldst_ri8_pw0 320LDRD_ri_a32 .... 000. .1.0 .... .... .... 1101 .... @ldst_ri8_p1w 321 322STRD_ri_a32 .... 000. .1.0 .... .... .... 1111 .... @ldst_ri8_pw0 323STRD_ri_a32 .... 000. .1.0 .... .... .... 1111 .... @ldst_ri8_p1w 324 325LDRH_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_pw0 326LDRH_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_p1w 327 328LDRSB_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_pw0 329LDRSB_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_p1w 330 331LDRSH_ri .... 000. .1.1 .... .... .... 1111 .... @ldst_ri8_pw0 332LDRSH_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 339STRHT_ri .... 000. .1.0 .... .... .... 1011 .... @ldst_ri8_p0w1 340LDRHT_ri .... 000. .1.1 .... .... .... 1011 .... @ldst_ri8_p0w1 341LDRSBT_ri .... 000. .1.1 .... .... .... 1101 .... @ldst_ri8_p0w1 342LDRSHT_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 349STR_ri .... 010. .0.0 .... .... ............ @ldst_ri12_p1w 350STR_ri .... 010. .0.0 .... .... ............ @ldst_ri12_pw0 351STRB_ri .... 010. .1.0 .... .... ............ @ldst_ri12_p1w 352STRB_ri .... 010. .1.0 .... .... ............ @ldst_ri12_pw0 353 354LDR_ri .... 010. .0.1 .... .... ............ @ldst_ri12_p1w 355LDR_ri .... 010. .0.1 .... .... ............ @ldst_ri12_pw0 356LDRB_ri .... 010. .1.1 .... .... ............ @ldst_ri12_p1w 357LDRB_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 361STRT_ri .... 010. .0.0 .... .... ............ @ldst_ri12_p0w1 362STRBT_ri .... 010. .1.0 .... .... ............ @ldst_ri12_p0w1 363LDRT_ri .... 010. .0.1 .... .... ............ @ldst_ri12_p0w1 364LDRBT_ri .... 010. .1.1 .... .... ............ @ldst_ri12_p0w1 365 366# Synchronization primitives 367 368@swp ---- .... .... rn:4 rt:4 .... .... rt2:4 369 370SWP .... 0001 0000 .... .... 0000 1001 .... @swp 371SWPB .... 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 384STREX .... 0001 1000 .... .... 1111 1001 .... @strex 385STREXD_a32 .... 0001 1010 .... .... 1111 1001 .... @strex 386STREXB .... 0001 1100 .... .... 1111 1001 .... @strex 387STREXH .... 0001 1110 .... .... 1111 1001 .... @strex 388 389STLEX .... 0001 1000 .... .... 1110 1001 .... @strex 390STLEXD_a32 .... 0001 1010 .... .... 1110 1001 .... @strex 391STLEXB .... 0001 1100 .... .... 1110 1001 .... @strex 392STLEXH .... 0001 1110 .... .... 1110 1001 .... @strex 393 394STL .... 0001 1000 .... 1111 1100 1001 .... @stl 395STLB .... 0001 1100 .... 1111 1100 1001 .... @stl 396STLH .... 0001 1110 .... 1111 1100 1001 .... @stl 397 398LDREX .... 0001 1001 .... .... 1111 1001 1111 @ldrex 399LDREXD_a32 .... 0001 1011 .... .... 1111 1001 1111 @ldrex 400LDREXB .... 0001 1101 .... .... 1111 1001 1111 @ldrex 401LDREXH .... 0001 1111 .... .... 1111 1001 1111 @ldrex 402 403LDAEX .... 0001 1001 .... .... 1110 1001 1111 @ldrex 404LDAEXD_a32 .... 0001 1011 .... .... 1110 1001 1111 @ldrex 405LDAEXB .... 0001 1101 .... .... 1110 1001 1111 @ldrex 406LDAEXH .... 0001 1111 .... .... 1110 1001 1111 @ldrex 407 408LDA .... 0001 1001 .... .... 1100 1001 1111 @ldrex 409LDAB .... 0001 1101 .... .... 1100 1001 1111 @ldrex 410LDAH .... 0001 1111 .... .... 1100 1001 1111 @ldrex 411 412# Media instructions 413 414# usad8 is usada8 w/ ra=15 415USADA8 ---- 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 420SBFX .... 0111 101 ..... .... ..... 101 .... @bfx 421UBFX .... 0111 111 ..... .... ..... 101 .... @bfx 422 423# bfc is bfi w/ rn=15 424BFCI ---- 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. 428UDF 1110 0111 1111 ---- ---- ---- 1111 ---- 429 430# Parallel addition and subtraction 431 432SADD16 .... 0110 0001 .... .... 1111 0001 .... @rndm 433SASX .... 0110 0001 .... .... 1111 0011 .... @rndm 434SSAX .... 0110 0001 .... .... 1111 0101 .... @rndm 435SSUB16 .... 0110 0001 .... .... 1111 0111 .... @rndm 436SADD8 .... 0110 0001 .... .... 1111 1001 .... @rndm 437SSUB8 .... 0110 0001 .... .... 1111 1111 .... @rndm 438 439QADD16 .... 0110 0010 .... .... 1111 0001 .... @rndm 440QASX .... 0110 0010 .... .... 1111 0011 .... @rndm 441QSAX .... 0110 0010 .... .... 1111 0101 .... @rndm 442QSUB16 .... 0110 0010 .... .... 1111 0111 .... @rndm 443QADD8 .... 0110 0010 .... .... 1111 1001 .... @rndm 444QSUB8 .... 0110 0010 .... .... 1111 1111 .... @rndm 445 446SHADD16 .... 0110 0011 .... .... 1111 0001 .... @rndm 447SHASX .... 0110 0011 .... .... 1111 0011 .... @rndm 448SHSAX .... 0110 0011 .... .... 1111 0101 .... @rndm 449SHSUB16 .... 0110 0011 .... .... 1111 0111 .... @rndm 450SHADD8 .... 0110 0011 .... .... 1111 1001 .... @rndm 451SHSUB8 .... 0110 0011 .... .... 1111 1111 .... @rndm 452 453UADD16 .... 0110 0101 .... .... 1111 0001 .... @rndm 454UASX .... 0110 0101 .... .... 1111 0011 .... @rndm 455USAX .... 0110 0101 .... .... 1111 0101 .... @rndm 456USUB16 .... 0110 0101 .... .... 1111 0111 .... @rndm 457UADD8 .... 0110 0101 .... .... 1111 1001 .... @rndm 458USUB8 .... 0110 0101 .... .... 1111 1111 .... @rndm 459 460UQADD16 .... 0110 0110 .... .... 1111 0001 .... @rndm 461UQASX .... 0110 0110 .... .... 1111 0011 .... @rndm 462UQSAX .... 0110 0110 .... .... 1111 0101 .... @rndm 463UQSUB16 .... 0110 0110 .... .... 1111 0111 .... @rndm 464UQADD8 .... 0110 0110 .... .... 1111 1001 .... @rndm 465UQSUB8 .... 0110 0110 .... .... 1111 1111 .... @rndm 466 467UHADD16 .... 0110 0111 .... .... 1111 0001 .... @rndm 468UHASX .... 0110 0111 .... .... 1111 0011 .... @rndm 469UHSAX .... 0110 0111 .... .... 1111 0101 .... @rndm 470UHSUB16 .... 0110 0111 .... .... 1111 0111 .... @rndm 471UHADD8 .... 0110 0111 .... .... 1111 1001 .... @rndm 472UHSUB8 .... 0110 0111 .... .... 1111 1111 .... @rndm 473 474# Packing, unpacking, saturation, and reversal 475 476PKH ---- 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 482SSAT .... 0110 101. .... .... .... ..01 .... @sat 483USAT .... 0110 111. .... .... .... ..01 .... @sat 484 485SSAT16 .... 0110 1010 .... .... 1111 0011 .... @sat16 486USAT16 .... 0110 1110 .... .... 1111 0011 .... @sat16 487 488@rrr_rot ---- .... .... rn:4 rd:4 rot:2 ...... rm:4 &rrr_rot 489 490SXTAB16 .... 0110 1000 .... .... ..00 0111 .... @rrr_rot 491SXTAB .... 0110 1010 .... .... ..00 0111 .... @rrr_rot 492SXTAH .... 0110 1011 .... .... ..00 0111 .... @rrr_rot 493UXTAB16 .... 0110 1100 .... .... ..00 0111 .... @rrr_rot 494UXTAB .... 0110 1110 .... .... ..00 0111 .... @rrr_rot 495UXTAH .... 0110 1111 .... .... ..00 0111 .... @rrr_rot 496 497SEL .... 0110 1000 .... .... 1111 1011 .... @rndm 498REV .... 0110 1011 1111 .... 1111 0011 .... @rdm 499REV16 .... 0110 1011 1111 .... 1111 1011 .... @rdm 500REVSH .... 0110 1111 1111 .... 1111 1011 .... @rdm 501RBIT .... 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 507SMLAD .... 0111 0000 .... .... .... 0001 .... @rdamn 508SMLADX .... 0111 0000 .... .... .... 0011 .... @rdamn 509SMLSD .... 0111 0000 .... .... .... 0101 .... @rdamn 510SMLSDX .... 0111 0000 .... .... .... 0111 .... @rdamn 511 512SDIV .... 0111 0001 .... 1111 .... 0001 .... @rdmn 513UDIV .... 0111 0011 .... 1111 .... 0001 .... @rdmn 514 515SMLALD .... 0111 0100 .... .... .... 0001 .... @rdamn 516SMLALDX .... 0111 0100 .... .... .... 0011 .... @rdamn 517SMLSLD .... 0111 0100 .... .... .... 0101 .... @rdamn 518SMLSLDX .... 0111 0100 .... .... .... 0111 .... @rdamn 519 520SMMLA .... 0111 0101 .... .... .... 0001 .... @rdamn 521SMMLAR .... 0111 0101 .... .... .... 0011 .... @rdamn 522SMMLS .... 0111 0101 .... .... .... 1101 .... @rdamn 523SMMLSR .... 0111 0101 .... .... .... 1111 .... @rdamn 524 525# Block data transfer 526 527STM ---- 100 b:1 i:1 u:1 w:1 0 rn:4 list:16 &ldst_block 528LDM_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 535B .... 1010 ........................ @branch 536BL .... 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 549MCRR .... 1100 0100 .... .... .... .... .... @mcrr 550MRRC .... 1100 0101 .... .... .... .... .... @mcrr 551 552MCR .... 1110 ... 0 .... .... .... ... 1 .... @mcr 553MRC .... 1110 ... 1 .... .... .... ... 1 .... @mcr 554 555# Supervisor call 556 557SVC ---- 1111 imm:24 &i 558