]> git.proxmox.com Git - mirror_qemu.git/blame - target/microblaze/insns.decode
Merge tag 'pull-loongarch-20231103' of https://gitlab.com/gaosong/qemu into staging
[mirror_qemu.git] / target / microblaze / insns.decode
CommitLineData
44d1432b
RH
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#
20800179 19
39cf3864 20&typea0 rd ra
20800179 21&typea rd ra rb
f5235314 22&typea_br rd rb
fd779113 23&typea_bc ra rb
20800179 24&typeb rd ra imm
f5235314 25&typeb_br rd imm
fd779113 26&typeb_bc ra imm
536e340f 27&type_msr rd imm
20800179
RH
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
39cf3864
RH
35# Officially typea, but with rb==0, which is not used.
36@typea0 ...... rd:5 ra:5 ................ &typea0
37
f5235314
RH
38# Officially typea, but with ra as opcode.
39@typea_br ...... rd:5 ..... rb:5 ........... &typea_br
40
fd779113
RH
41# Officially typea, but with rd as opcode.
42@typea_bc ...... ..... ra:5 rb:5 ........... &typea_bc
43
081d8e02
RH
44# Officially typeb, but any immediate extension is unused.
45@typeb_bs ...... rd:5 ra:5 ..... ...... imm:5 &typeb
46
f5235314
RH
47# Officially typeb, but with ra as opcode.
48@typeb_br ...... rd:5 ..... ................ &typeb_br imm=%extimm
49
fd779113
RH
50# Officially typeb, but with rd as opcode.
51@typeb_bc ...... ..... ra:5 ................ &typeb_bc imm=%extimm
52
081d8e02
RH
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
536e340f
RH
59@type_msr ...... rd:5 ...... imm:15 &type_msr
60
20800179
RH
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
a2b0b90e 75
cb0a0a4c
RH
76and 100001 ..... ..... ..... 000 0000 0000 @typea
77andi 101001 ..... ..... ................ @typeb
78
79andn 100011 ..... ..... ..... 000 0000 0000 @typea
80andni 101011 ..... ..... ................ @typeb
81
fd779113
RH
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
16bbbbc9
RH
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
f5235314
RH
124brk 100110 ..... 01100 ..... 000 0000 0000 @typea_br
125brki 101110 ..... 01100 ................ @typeb_br
126
081d8e02
RH
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
39cf3864
RH
138clz 100100 ..... ..... 00000 000 1110 0000 @typea0
139
a2b0b90e
RH
140cmp 000101 ..... ..... ..... 000 0000 0001 @typea
141cmpu 000101 ..... ..... ..... 000 0000 0011 @typea
142
d5aead3d
RH
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
52065d8f
RH
162get 011011 rd:5 00000 0 ctrl:5 000000 imm:4
163getd 010011 rd:5 00000 rb:5 0 ctrl:5 00000
164
b1354342
RH
165idiv 010010 ..... ..... ..... 000 0000 0000 @typea
166idivu 010010 ..... ..... ..... 000 0000 0010 @typea
167
e64b2e5c
RH
168imm 101100 00000 00000 imm:16
169
d8e59c4a
RH
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
ee8c7f9f
RH
186mbar 101110 imm:5 00010 0000 0000 0000 0100
187
9df297a2
RH
188mfs 100101 rd:5 0 e:1 000 10 rs:14
189mts 100101 0 e:1 000 ra:5 11 rs:14
190
536e340f
RH
191msrclr 100101 ..... 100010 ............... @type_msr
192msrset 100101 ..... 100000 ............... @type_msr
193
97955ceb
RH
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
cb0a0a4c
RH
200or 100000 ..... ..... ..... 000 0000 0000 @typea
201ori 101000 ..... ..... ................ @typeb
202
607f5767
RH
203pcmpbf 100000 ..... ..... ..... 100 0000 0000 @typea
204pcmpeq 100010 ..... ..... ..... 100 0000 0000 @typea
205pcmpne 100011 ..... ..... ..... 100 0000 0000 @typea
206
52065d8f
RH
207put 011011 00000 ra:5 1 ctrl:5 000000 imm:4
208putd 010011 00000 ra:5 rb:5 1 ctrl:5 00000
209
a2b0b90e
RH
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
cb0a0a4c 219
e6cb0354
RH
220rtbd 101101 10010 ..... ................ @typeb_bc
221rtid 101101 10001 ..... ................ @typeb_bc
222rted 101101 10100 ..... ................ @typeb_bc
223rtsd 101101 10000 ..... ................ @typeb_bc
224
d8e59c4a
RH
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
39cf3864
RH
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
cb0a0a4c
RH
255xor 100010 ..... ..... ..... 000 0000 0000 @typea
256xori 101010 ..... ..... ................ @typeb