cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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