#
# 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
&typeb          rd ra 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 typeb, but any immediate extension is unused.
@typeb_bs       ...... rd:5 ra:5 ..... ...... imm:5     &typeb

# 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

###

{
  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

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

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

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

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

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
