aboutsummaryrefslogtreecommitdiff
path: root/target/microblaze/insns.decode
blob: 87e8f5679bda7a19ed84673a76501b70d37bd1b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#
# 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

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

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