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

insns.decode (11851B)


      1#
      2# MicroBlaze instruction decode definitions.
      3#
      4# Copyright (c) 2020 Richard Henderson <rth@twiddle.net>
      5#
      6# This library is free software; you can redistribute it and/or
      7# modify it under the terms of the GNU Lesser General Public
      8# License as published by the Free Software Foundation; either
      9# version 2.1 of the License, or (at your option) any later version.
     10#
     11# This library is distributed in the hope that it will be useful,
     12# but WITHOUT ANY WARRANTY; without even the implied warranty of
     13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14# Lesser General Public License for more details.
     15#
     16# You should have received a copy of the GNU Lesser General Public
     17# License along with this library; if not, see <http://www.gnu.org/licenses/>.
     18#
     19
     20&typea0         rd ra
     21&typea          rd ra rb
     22&typea_br       rd rb
     23&typea_bc       ra rb
     24&typeb          rd ra imm
     25&typeb_br       rd imm
     26&typeb_bc       ra imm
     27&type_msr       rd imm
     28
     29# Include any IMM prefix in the value reported.
     30%extimm         0:s16 !function=typeb_imm
     31
     32@typea          ...... rd:5 ra:5 rb:5 ... .... ....     &typea
     33@typeb          ...... rd:5 ra:5 ................       &typeb imm=%extimm
     34
     35# Officially typea, but with rb==0, which is not used.
     36@typea0         ...... rd:5 ra:5 ................       &typea0
     37
     38# Officially typea, but with ra as opcode.
     39@typea_br       ...... rd:5 ..... rb:5 ...........      &typea_br
     40
     41# Officially typea, but with rd as opcode.
     42@typea_bc       ...... ..... ra:5 rb:5 ...........      &typea_bc
     43
     44# Officially typeb, but any immediate extension is unused.
     45@typeb_bs       ...... rd:5 ra:5 ..... ...... imm:5     &typeb
     46
     47# Officially typeb, but with ra as opcode.
     48@typeb_br       ...... rd:5 ..... ................      &typeb_br imm=%extimm
     49
     50# Officially typeb, but with rd as opcode.
     51@typeb_bc       ...... ..... ra:5 ................      &typeb_bc imm=%extimm
     52
     53# For convenience, extract the two imm_w/imm_s fields, then pack
     54# them back together as "imm".  Doing this makes it easiest to
     55# match the required zero at bit 5.
     56%ieimm          6:5 0:5
     57@typeb_ie       ...... rd:5 ra:5 ..... ..... . .....    &typeb imm=%ieimm
     58
     59@type_msr       ...... rd:5 ...... imm:15               &type_msr
     60
     61###
     62
     63{
     64  zero          000000 00000 00000 00000 000 0000 0000
     65  add           000000 ..... ..... ..... 000 0000 0000  @typea
     66}
     67addc            000010 ..... ..... ..... 000 0000 0000  @typea
     68addk            000100 ..... ..... ..... 000 0000 0000  @typea
     69addkc           000110 ..... ..... ..... 000 0000 0000  @typea
     70
     71addi            001000 ..... ..... ................     @typeb
     72addic           001010 ..... ..... ................     @typeb
     73addik           001100 ..... ..... ................     @typeb
     74addikc          001110 ..... ..... ................     @typeb
     75
     76and             100001 ..... ..... ..... 000 0000 0000  @typea
     77andi            101001 ..... ..... ................     @typeb
     78
     79andn            100011 ..... ..... ..... 000 0000 0000  @typea
     80andni           101011 ..... ..... ................     @typeb
     81
     82beq             100111 00000 ..... ..... 000 0000 0000  @typea_bc
     83bge             100111 00101 ..... ..... 000 0000 0000  @typea_bc
     84bgt             100111 00100 ..... ..... 000 0000 0000  @typea_bc
     85ble             100111 00011 ..... ..... 000 0000 0000  @typea_bc
     86blt             100111 00010 ..... ..... 000 0000 0000  @typea_bc
     87bne             100111 00001 ..... ..... 000 0000 0000  @typea_bc
     88
     89beqd            100111 10000 ..... ..... 000 0000 0000  @typea_bc
     90bged            100111 10101 ..... ..... 000 0000 0000  @typea_bc
     91bgtd            100111 10100 ..... ..... 000 0000 0000  @typea_bc
     92bled            100111 10011 ..... ..... 000 0000 0000  @typea_bc
     93bltd            100111 10010 ..... ..... 000 0000 0000  @typea_bc
     94bned            100111 10001 ..... ..... 000 0000 0000  @typea_bc
     95
     96beqi            101111 00000 ..... ................     @typeb_bc
     97bgei            101111 00101 ..... ................     @typeb_bc
     98bgti            101111 00100 ..... ................     @typeb_bc
     99blei            101111 00011 ..... ................     @typeb_bc
    100blti            101111 00010 ..... ................     @typeb_bc
    101bnei            101111 00001 ..... ................     @typeb_bc
    102
    103beqid           101111 10000 ..... ................     @typeb_bc
    104bgeid           101111 10101 ..... ................     @typeb_bc
    105bgtid           101111 10100 ..... ................     @typeb_bc
    106bleid           101111 10011 ..... ................     @typeb_bc
    107bltid           101111 10010 ..... ................     @typeb_bc
    108bneid           101111 10001 ..... ................     @typeb_bc
    109
    110br              100110 ..... 00000 ..... 000 0000 0000  @typea_br
    111bra             100110 ..... 01000 ..... 000 0000 0000  @typea_br
    112brd             100110 ..... 10000 ..... 000 0000 0000  @typea_br
    113brad            100110 ..... 11000 ..... 000 0000 0000  @typea_br
    114brld            100110 ..... 10100 ..... 000 0000 0000  @typea_br
    115brald           100110 ..... 11100 ..... 000 0000 0000  @typea_br
    116
    117bri             101110 ..... 00000 ................     @typeb_br
    118brai            101110 ..... 01000 ................     @typeb_br
    119brid            101110 ..... 10000 ................     @typeb_br
    120braid           101110 ..... 11000 ................     @typeb_br
    121brlid           101110 ..... 10100 ................     @typeb_br
    122bralid          101110 ..... 11100 ................     @typeb_br
    123
    124brk             100110 ..... 01100 ..... 000 0000 0000  @typea_br
    125brki            101110 ..... 01100 ................     @typeb_br
    126
    127bsrl            010001 ..... ..... ..... 000 0000 0000  @typea
    128bsra            010001 ..... ..... ..... 010 0000 0000  @typea
    129bsll            010001 ..... ..... ..... 100 0000 0000  @typea
    130
    131bsrli           011001 ..... ..... 00000 000000 .....   @typeb_bs
    132bsrai           011001 ..... ..... 00000 010000 .....   @typeb_bs
    133bslli           011001 ..... ..... 00000 100000 .....   @typeb_bs
    134
    135bsefi           011001 ..... ..... 01000 .....0 .....   @typeb_ie
    136bsifi           011001 ..... ..... 10000 .....0 .....   @typeb_ie
    137
    138clz             100100 ..... ..... 00000 000 1110 0000  @typea0
    139
    140cmp             000101 ..... ..... ..... 000 0000 0001  @typea
    141cmpu            000101 ..... ..... ..... 000 0000 0011  @typea
    142
    143fadd            010110 ..... ..... ..... 0000 000 0000  @typea
    144frsub           010110 ..... ..... ..... 0001 000 0000  @typea
    145fmul            010110 ..... ..... ..... 0010 000 0000  @typea
    146fdiv            010110 ..... ..... ..... 0011 000 0000  @typea
    147fcmp_un         010110 ..... ..... ..... 0100 000 0000  @typea
    148fcmp_lt         010110 ..... ..... ..... 0100 001 0000  @typea
    149fcmp_eq         010110 ..... ..... ..... 0100 010 0000  @typea
    150fcmp_le         010110 ..... ..... ..... 0100 011 0000  @typea
    151fcmp_gt         010110 ..... ..... ..... 0100 100 0000  @typea
    152fcmp_ne         010110 ..... ..... ..... 0100 101 0000  @typea
    153fcmp_ge         010110 ..... ..... ..... 0100 110 0000  @typea
    154
    155# Note that flt and fint, unlike fsqrt, are documented as having the RB
    156# operand which is unused.  So allow the field to be non-zero but discard
    157# the value and treat as 2-operand insns.
    158flt             010110 ..... ..... ----- 0101 000 0000  @typea0
    159fint            010110 ..... ..... ----- 0110 000 0000  @typea0
    160fsqrt           010110 ..... ..... 00000 0111 000 0000  @typea0
    161
    162get             011011 rd:5  00000 0 ctrl:5 000000 imm:4
    163getd            010011 rd:5  00000 rb:5  0 ctrl:5  00000
    164
    165idiv            010010 ..... ..... ..... 000 0000 0000  @typea
    166idivu           010010 ..... ..... ..... 000 0000 0010  @typea
    167
    168imm             101100 00000 00000 imm:16
    169
    170lbu             110000 ..... ..... ..... 0000 000 0000  @typea
    171lbur            110000 ..... ..... ..... 0100 000 0000  @typea
    172lbuea           110000 ..... ..... ..... 0001 000 0000  @typea
    173lbui            111000 ..... ..... ................     @typeb
    174
    175lhu             110001 ..... ..... ..... 0000 000 0000  @typea
    176lhur            110001 ..... ..... ..... 0100 000 0000  @typea
    177lhuea           110001 ..... ..... ..... 0001 000 0000  @typea
    178lhui            111001 ..... ..... ................     @typeb
    179
    180lw              110010 ..... ..... ..... 0000 000 0000  @typea
    181lwr             110010 ..... ..... ..... 0100 000 0000  @typea
    182lwea            110010 ..... ..... ..... 0001 000 0000  @typea
    183lwx             110010 ..... ..... ..... 1000 000 0000  @typea
    184lwi             111010 ..... ..... ................     @typeb
    185
    186mbar            101110 imm:5 00010 0000 0000 0000 0100
    187
    188mfs             100101 rd:5  0 e:1 000 10 rs:14
    189mts             100101 0 e:1 000 ra:5  11 rs:14
    190
    191msrclr          100101 ..... 100010 ...............     @type_msr
    192msrset          100101 ..... 100000 ...............     @type_msr
    193
    194mul             010000 ..... ..... ..... 000 0000 0000  @typea
    195mulh            010000 ..... ..... ..... 000 0000 0001  @typea
    196mulhu           010000 ..... ..... ..... 000 0000 0011  @typea
    197mulhsu          010000 ..... ..... ..... 000 0000 0010  @typea
    198muli            011000 ..... ..... ................     @typeb
    199
    200or              100000 ..... ..... ..... 000 0000 0000  @typea
    201ori             101000 ..... ..... ................     @typeb
    202
    203pcmpbf          100000 ..... ..... ..... 100 0000 0000  @typea
    204pcmpeq          100010 ..... ..... ..... 100 0000 0000  @typea
    205pcmpne          100011 ..... ..... ..... 100 0000 0000  @typea
    206
    207put             011011 00000 ra:5  1 ctrl:5 000000 imm:4
    208putd            010011 00000 ra:5  rb:5  1 ctrl:5  00000
    209
    210rsub            000001 ..... ..... ..... 000 0000 0000  @typea
    211rsubc           000011 ..... ..... ..... 000 0000 0000  @typea
    212rsubk           000101 ..... ..... ..... 000 0000 0000  @typea
    213rsubkc          000111 ..... ..... ..... 000 0000 0000  @typea
    214
    215rsubi           001001 ..... ..... ................     @typeb
    216rsubic          001011 ..... ..... ................     @typeb
    217rsubik          001101 ..... ..... ................     @typeb
    218rsubikc         001111 ..... ..... ................     @typeb
    219
    220rtbd            101101 10010 ..... ................     @typeb_bc
    221rtid            101101 10001 ..... ................     @typeb_bc
    222rted            101101 10100 ..... ................     @typeb_bc
    223rtsd            101101 10000 ..... ................     @typeb_bc
    224
    225sb              110100 ..... ..... ..... 0000 000 0000  @typea
    226sbr             110100 ..... ..... ..... 0100 000 0000  @typea
    227sbea            110100 ..... ..... ..... 0001 000 0000  @typea
    228sbi             111100 ..... ..... ................     @typeb
    229
    230sh              110101 ..... ..... ..... 0000 000 0000  @typea
    231shr             110101 ..... ..... ..... 0100 000 0000  @typea
    232shea            110101 ..... ..... ..... 0001 000 0000  @typea
    233shi             111101 ..... ..... ................     @typeb
    234
    235sw              110110 ..... ..... ..... 0000 000 0000  @typea
    236swr             110110 ..... ..... ..... 0100 000 0000  @typea
    237swea            110110 ..... ..... ..... 0001 000 0000  @typea
    238swx             110110 ..... ..... ..... 1000 000 0000  @typea
    239swi             111110 ..... ..... ................     @typeb
    240
    241sext8           100100 ..... ..... 00000 000 0110 0000  @typea0
    242sext16          100100 ..... ..... 00000 000 0110 0001  @typea0
    243
    244sra             100100 ..... ..... 00000 000 0000 0001  @typea0
    245src             100100 ..... ..... 00000 000 0010 0001  @typea0
    246srl             100100 ..... ..... 00000 000 0100 0001  @typea0
    247
    248swapb           100100 ..... ..... 00000 001 1110 0000  @typea0
    249swaph           100100 ..... ..... 00000 001 1110 0010  @typea0
    250
    251# Cache operations have no effect in qemu: discard the arguments.
    252wdic            100100 00000 ----- ----- -00 -11- 01-0  # wdc
    253wdic            100100 00000 ----- ----- 000 0110 1000  # wic
    254
    255xor             100010 ..... ..... ..... 000 0000 0000  @typea
    256xori            101010 ..... ..... ................     @typeb