qemu/target/arm/a32.decode
<<
>>
Prefs
   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
 554