summaryrefslogblamecommitdiffstats
path: root/target/microblaze/insns.decode
blob: fb0f0e68386c338eea1f7ef3fa3367ea0e90ac6b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

















                                                                              
 
                     
                        
                     
                     
                         
                      
                      
                      






                                                                          


                                                               


                                                                 


                                                                 


                                                              


                                                                             


                                                                             





                                                                         

                                                                 













                                                              
 





                                                              



























                                                                 













                                                                 


                                                                 










                                                                 

                                                               


                                                              


















                                                                         


                                                        


                                                              

                                         















                                                              

                                                      


                                               


                                                                 





                                                              


                                                              



                                                              


                                                        








                                                              
 




                                                                 















                                                              













                                                                 

                                                              
#
# MicroBlaze instruction decode definitions.
#
# Copyright (c) 2020 Richard Henderson <rth@twiddle.net>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
#

&typea0         rd ra
&typea          rd ra rb
&typea_br       rd rb
&typea_bc       ra rb
&typeb          rd ra imm
&typeb_br       rd imm
&typeb_bc       ra imm
&type_msr       rd imm

# Include any IMM prefix in the value reported.
%extimm         0:s16 !function=typeb_imm

@typea          ...... rd:5 ra:5 rb:5 ... .... ....     &typea
@typeb          ...... rd:5 ra:5 ................       &typeb imm=%extimm

# Officially typea, but with rb==0, which is not used.
@typea0         ...... rd:5 ra:5 ................       &typea0

# Officially typea, but with ra as opcode.
@typea_br       ...... rd:5 ..... rb:5 ...........      &typea_br

# Officially typea, but with rd as opcode.
@typea_bc       ...... ..... ra:5 rb:5 ...........      &typea_bc

# Officially typeb, but any immediate extension is unused.
@typeb_bs       ...... rd:5 ra:5 ..... ...... imm:5     &typeb

# Officially typeb, but with ra as opcode.
@typeb_br       ...... rd:5 ..... ................      &typeb_br imm=%extimm

# Officially typeb, but with rd as opcode.
@typeb_bc       ...... ..... ra:5 ................      &typeb_bc imm=%extimm

# For convenience, extract the two imm_w/imm_s fields, then pack
# them back together as "imm".  Doing this makes it easiest to
# match the required zero at bit 5.
%ieimm          6:5 0:5
@typeb_ie       ...... rd:5 ra:5 ..... ..... . .....    &typeb imm=%ieimm

@type_msr       ...... rd:5 ...... imm:15               &type_msr

###

{
  zero          000000 00000 00000 00000 000 0000 0000
  add           000000 ..... ..... ..... 000 0000 0000  @typea
}
addc            000010 ..... ..... ..... 000 0000 0000  @typea
addk            000100 ..... ..... ..... 000 0000 0000  @typea
addkc           000110 ..... ..... ..... 000 0000 0000  @typea

addi            001000 ..... ..... ................     @typeb
addic           001010 ..... ..... ................     @typeb
addik           001100 ..... ..... ................     @typeb
addikc          001110 ..... ..... ................     @typeb

and             100001 ..... ..... ..... 000 0000 0000  @typea
andi            101001 ..... ..... ................     @typeb

andn            100011 ..... ..... ..... 000 0000 0000  @typea
andni           101011 ..... ..... ................     @typeb

beq             100111 00000 ..... ..... 000 0000 0000  @typea_bc
bge             100111 00101 ..... ..... 000 0000 0000  @typea_bc
bgt             100111 00100 ..... ..... 000 0000 0000  @typea_bc
ble             100111 00011 ..... ..... 000 0000 0000  @typea_bc
blt             100111 00010 ..... ..... 000 0000 0000  @typea_bc
bne             100111 00001 ..... ..... 000 0000 0000  @typea_bc

beqd            100111 10000 ..... ..... 000 0000 0000  @typea_bc
bged            100111 10101 ..... ..... 000 0000 0000  @typea_bc
bgtd            100111 10100 ..... ..... 000 0000 0000  @typea_bc
bled            100111 10011 ..... ..... 000 0000 0000  @typea_bc
bltd            100111 10010 ..... ..... 000 0000 0000  @typea_bc
bned            100111 10001 ..... ..... 000 0000 0000  @typea_bc

beqi            101111 00000 ..... ................     @typeb_bc
bgei            101111 00101 ..... ................     @typeb_bc
bgti            101111 00100 ..... ................     @typeb_bc
blei            101111 00011 ..... ................     @typeb_bc
blti            101111 00010 ..... ................     @typeb_bc
bnei            101111 00001 ..... ................     @typeb_bc

beqid           101111 10000 ..... ................     @typeb_bc
bgeid           101111 10101 ..... ................     @typeb_bc
bgtid           101111 10100 ..... ................     @typeb_bc
bleid           101111 10011 ..... ................     @typeb_bc
bltid           101111 10010 ..... ................     @typeb_bc
bneid           101111 10001 ..... ................     @typeb_bc

br              100110 ..... 00000 ..... 000 0000 0000  @typea_br
bra             100110 ..... 01000 ..... 000 0000 0000  @typea_br
brd             100110 ..... 10000 ..... 000 0000 0000  @typea_br
brad            100110 ..... 11000 ..... 000 0000 0000  @typea_br
brld            100110 ..... 10100 ..... 000 0000 0000  @typea_br
brald           100110 ..... 11100 ..... 000 0000 0000  @typea_br

bri             101110 ..... 00000 ................     @typeb_br
brai            101110 ..... 01000 ................     @typeb_br
brid            101110 ..... 10000 ................     @typeb_br
braid           101110 ..... 11000 ................     @typeb_br
brlid           101110 ..... 10100 ................     @typeb_br
bralid          101110 ..... 11100 ................     @typeb_br

brk             100110 ..... 01100 ..... 000 0000 0000  @typea_br
brki            101110 ..... 01100 ................     @typeb_br

bsrl            010001 ..... ..... ..... 000 0000 0000  @typea
bsra            010001 ..... ..... ..... 010 0000 0000  @typea
bsll            010001 ..... ..... ..... 100 0000 0000  @typea

bsrli           011001 ..... ..... 00000 000000 .....   @typeb_bs
bsrai           011001 ..... ..... 00000 010000 .....   @typeb_bs
bslli           011001 ..... ..... 00000 100000 .....   @typeb_bs

bsefi           011001 ..... ..... 01000 .....0 .....   @typeb_ie
bsifi           011001 ..... ..... 10000 .....0 .....   @typeb_ie

clz             100100 ..... ..... 00000 000 1110 0000  @typea0

cmp             000101 ..... ..... ..... 000 0000 0001  @typea
cmpu            000101 ..... ..... ..... 000 0000 0011  @typea

fadd            010110 ..... ..... ..... 0000 000 0000  @typea
frsub           010110 ..... ..... ..... 0001 000 0000  @typea
fmul            010110 ..... ..... ..... 0010 000 0000  @typea
fdiv            010110 ..... ..... ..... 0011 000 0000  @typea
fcmp_un         010110 ..... ..... ..... 0100 000 0000  @typea
fcmp_lt         010110 ..... ..... ..... 0100 001 0000  @typea
fcmp_eq         010110 ..... ..... ..... 0100 010 0000  @typea
fcmp_le         010110 ..... ..... ..... 0100 011 0000  @typea
fcmp_gt         010110 ..... ..... ..... 0100 100 0000  @typea
fcmp_ne         010110 ..... ..... ..... 0100 101 0000  @typea
fcmp_ge         010110 ..... ..... ..... 0100 110 0000  @typea

# Note that flt and fint, unlike fsqrt, are documented as having the RB
# operand which is unused.  So allow the field to be non-zero but discard
# the value and treat as 2-operand insns.
flt             010110 ..... ..... ----- 0101 000 0000  @typea0
fint            010110 ..... ..... ----- 0110 000 0000  @typea0
fsqrt           010110 ..... ..... 00000 0111 000 0000  @typea0

get             011011 rd:5  00000 0 ctrl:5 000000 imm:4
getd            010011 rd:5  00000 rb:5  0 ctrl:5  00000

idiv            010010 ..... ..... ..... 000 0000 0000  @typea
idivu           010010 ..... ..... ..... 000 0000 0010  @typea

imm             101100 00000 00000 imm:16

lbu             110000 ..... ..... ..... 0000 000 0000  @typea
lbur            110000 ..... ..... ..... 0100 000 0000  @typea
lbuea           110000 ..... ..... ..... 0001 000 0000  @typea
lbui            111000 ..... ..... ................     @typeb

lhu             110001 ..... ..... ..... 0000 000 0000  @typea
lhur            110001 ..... ..... ..... 0100 000 0000  @typea
lhuea           110001 ..... ..... ..... 0001 000 0000  @typea
lhui            111001 ..... ..... ................     @typeb

lw              110010 ..... ..... ..... 0000 000 0000  @typea
lwr             110010 ..... ..... ..... 0100 000 0000  @typea
lwea            110010 ..... ..... ..... 0001 000 0000  @typea
lwx             110010 ..... ..... ..... 1000 000 0000  @typea
lwi             111010 ..... ..... ................     @typeb

mbar            101110 imm:5 00010 0000 0000 0000 0100

mfs             100101 rd:5  0 e:1 000 10 rs:14
mts             100101 0 e:1 000 ra:5  11 rs:14

msrclr          100101 ..... 100010 ...............     @type_msr
msrset          100101 ..... 100000 ...............     @type_msr

mul             010000 ..... ..... ..... 000 0000 0000  @typea
mulh            010000 ..... ..... ..... 000 0000 0001  @typea
mulhu           010000 ..... ..... ..... 000 0000 0011  @typea
mulhsu          010000 ..... ..... ..... 000 0000 0010  @typea
muli            011000 ..... ..... ................     @typeb

or              100000 ..... ..... ..... 000 0000 0000  @typea
ori             101000 ..... ..... ................     @typeb

pcmpbf          100000 ..... ..... ..... 100 0000 0000  @typea
pcmpeq          100010 ..... ..... ..... 100 0000 0000  @typea
pcmpne          100011 ..... ..... ..... 100 0000 0000  @typea

put             011011 00000 ra:5  1 ctrl:5 000000 imm:4
putd            010011 00000 ra:5  rb:5  1 ctrl:5  00000

rsub            000001 ..... ..... ..... 000 0000 0000  @typea
rsubc           000011 ..... ..... ..... 000 0000 0000  @typea
rsubk           000101 ..... ..... ..... 000 0000 0000  @typea
rsubkc          000111 ..... ..... ..... 000 0000 0000  @typea

rsubi           001001 ..... ..... ................     @typeb
rsubic          001011 ..... ..... ................     @typeb
rsubik          001101 ..... ..... ................     @typeb
rsubikc         001111 ..... ..... ................     @typeb

rtbd            101101 10010 ..... ................     @typeb_bc
rtid            101101 10001 ..... ................     @typeb_bc
rted            101101 10100 ..... ................     @typeb_bc
rtsd            101101 10000 ..... ................     @typeb_bc

sb              110100 ..... ..... ..... 0000 000 0000  @typea
sbr             110100 ..... ..... ..... 0100 000 0000  @typea
sbea            110100 ..... ..... ..... 0001 000 0000  @typea
sbi             111100 ..... ..... ................     @typeb

sh              110101 ..... ..... ..... 0000 000 0000  @typea
shr             110101 ..... ..... ..... 0100 000 0000  @typea
shea            110101 ..... ..... ..... 0001 000 0000  @typea
shi             111101 ..... ..... ................     @typeb

sw              110110 ..... ..... ..... 0000 000 0000  @typea
swr             110110 ..... ..... ..... 0100 000 0000  @typea
swea            110110 ..... ..... ..... 0001 000 0000  @typea
swx             110110 ..... ..... ..... 1000 000 0000  @typea
swi             111110 ..... ..... ................     @typeb

sext8           100100 ..... ..... 00000 000 0110 0000  @typea0
sext16          100100 ..... ..... 00000 000 0110 0001  @typea0

sra             100100 ..... ..... 00000 000 0000 0001  @typea0
src             100100 ..... ..... 00000 000 0010 0001  @typea0
srl             100100 ..... ..... 00000 000 0100 0001  @typea0

swapb           100100 ..... ..... 00000 001 1110 0000  @typea0
swaph           100100 ..... ..... 00000 001 1110 0010  @typea0

# Cache operations have no effect in qemu: discard the arguments.
wdic            100100 00000 ----- ----- -00 -11- 01-0  # wdc
wdic            100100 00000 ----- ----- 000 0110 1000  # wic

xor             100010 ..... ..... ..... 000 0000 0000  @typea
xori            101010 ..... ..... ................     @typeb