2020-08-18 00:42:44 +08:00
|
|
|
#
|
|
|
|
# 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/>.
|
|
|
|
#
|
2020-08-18 13:17:58 +08:00
|
|
|
|
2020-08-18 23:13:35 +08:00
|
|
|
&typea0 rd ra
|
2020-08-18 13:17:58 +08:00
|
|
|
&typea rd ra rb
|
2020-08-24 00:17:22 +08:00
|
|
|
&typea_br rd rb
|
2020-08-18 13:17:58 +08:00
|
|
|
&typeb rd ra imm
|
2020-08-24 00:17:22 +08:00
|
|
|
&typeb_br rd imm
|
2020-08-18 13:17:58 +08:00
|
|
|
|
|
|
|
# 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
|
|
|
|
|
2020-08-18 23:13:35 +08:00
|
|
|
# Officially typea, but with rb==0, which is not used.
|
|
|
|
@typea0 ...... rd:5 ra:5 ................ &typea0
|
|
|
|
|
2020-08-24 00:17:22 +08:00
|
|
|
# Officially typea, but with ra as opcode.
|
|
|
|
@typea_br ...... rd:5 ..... rb:5 ........... &typea_br
|
|
|
|
|
2020-08-18 23:47:38 +08:00
|
|
|
# Officially typeb, but any immediate extension is unused.
|
|
|
|
@typeb_bs ...... rd:5 ra:5 ..... ...... imm:5 &typeb
|
|
|
|
|
2020-08-24 00:17:22 +08:00
|
|
|
# Officially typeb, but with ra as opcode.
|
|
|
|
@typeb_br ...... rd:5 ..... ................ &typeb_br imm=%extimm
|
|
|
|
|
2020-08-18 23:47:38 +08:00
|
|
|
# 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
|
|
|
|
|
2020-08-18 13:17:58 +08:00
|
|
|
###
|
|
|
|
|
|
|
|
{
|
|
|
|
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
|
2020-08-18 02:29:24 +08:00
|
|
|
|
2020-08-18 06:12:55 +08:00
|
|
|
and 100001 ..... ..... ..... 000 0000 0000 @typea
|
|
|
|
andi 101001 ..... ..... ................ @typeb
|
|
|
|
|
|
|
|
andn 100011 ..... ..... ..... 000 0000 0000 @typea
|
|
|
|
andni 101011 ..... ..... ................ @typeb
|
|
|
|
|
2020-08-25 08:38:04 +08:00
|
|
|
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
|
|
|
|
|
2020-08-24 00:17:22 +08:00
|
|
|
brk 100110 ..... 01100 ..... 000 0000 0000 @typea_br
|
|
|
|
brki 101110 ..... 01100 ................ @typeb_br
|
|
|
|
|
2020-08-18 23:47:38 +08:00
|
|
|
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
|
|
|
|
|
2020-08-18 23:13:35 +08:00
|
|
|
clz 100100 ..... ..... 00000 000 1110 0000 @typea0
|
|
|
|
|
2020-08-18 02:29:24 +08:00
|
|
|
cmp 000101 ..... ..... ..... 000 0000 0001 @typea
|
|
|
|
cmpu 000101 ..... ..... ..... 000 0000 0011 @typea
|
|
|
|
|
2020-08-20 00:04:09 +08:00
|
|
|
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
|
|
|
|
|
2020-08-18 14:03:10 +08:00
|
|
|
idiv 010010 ..... ..... ..... 000 0000 0000 @typea
|
|
|
|
idivu 010010 ..... ..... ..... 000 0000 0010 @typea
|
|
|
|
|
2020-08-19 01:22:18 +08:00
|
|
|
imm 101100 00000 00000 imm:16
|
|
|
|
|
2020-08-20 08:38:44 +08:00
|
|
|
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
|
|
|
|
|
2020-08-24 00:38:15 +08:00
|
|
|
mbar 101110 imm:5 00010 0000 0000 0000 0100
|
|
|
|
|
2020-08-18 13:49:20 +08:00
|
|
|
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
|
|
|
|
|
2020-08-18 06:12:55 +08:00
|
|
|
or 100000 ..... ..... ..... 000 0000 0000 @typea
|
|
|
|
ori 101000 ..... ..... ................ @typeb
|
|
|
|
|
2020-08-18 05:19:33 +08:00
|
|
|
pcmpbf 100000 ..... ..... ..... 100 0000 0000 @typea
|
|
|
|
pcmpeq 100010 ..... ..... ..... 100 0000 0000 @typea
|
|
|
|
pcmpne 100011 ..... ..... ..... 100 0000 0000 @typea
|
|
|
|
|
2020-08-18 02:29:24 +08:00
|
|
|
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
|
2020-08-18 06:12:55 +08:00
|
|
|
|
2020-08-20 08:38:44 +08:00
|
|
|
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
|
|
|
|
|
2020-08-18 23:13:35 +08:00
|
|
|
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
|
|
|
|
|
2020-08-18 06:12:55 +08:00
|
|
|
xor 100010 ..... ..... ..... 000 0000 0000 @typea
|
|
|
|
xori 101010 ..... ..... ................ @typeb
|