qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

a32.decode (26543B)


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