2 # MicroBlaze instruction decode definitions.
4 # Copyright (c) 2020 Richard Henderson <rth@twiddle.net>
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.
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.
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/>.
29 # Include any IMM prefix in the value reported.
30 %extimm 0:s16 !function=typeb_imm
32 @typea ...... rd:5 ra:5 rb:5 ... .... .... &typea
33 @typeb ...... rd:5 ra:5 ................ &typeb imm=%extimm
35 # Officially typea, but with rb==0, which is not used.
36 @typea0 ...... rd:5 ra:5 ................ &typea0
38 # Officially typea, but with ra as opcode.
39 @typea_br ...... rd:5 ..... rb:5 ........... &typea_br
41 # Officially typea, but with rd as opcode.
42 @typea_bc ...... ..... ra:5 rb:5 ........... &typea_bc
44 # Officially typeb, but any immediate extension is unused.
45 @typeb_bs ...... rd:5 ra:5 ..... ...... imm:5 &typeb
47 # Officially typeb, but with ra as opcode.
48 @typeb_br ...... rd:5 ..... ................ &typeb_br imm=%extimm
50 # Officially typeb, but with rd as opcode.
51 @typeb_bc ...... ..... ra:5 ................ &typeb_bc imm=%extimm
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.
57 @typeb_ie ...... rd:5 ra:5 ..... ..... . ..... &typeb imm=%ieimm
59 @type_msr ...... rd:5 ...... imm:15 &type_msr
64 zero 000000 00000 00000 00000 000 0000 0000
65 add 000000 ..... ..... ..... 000 0000 0000 @typea
67 addc 000010 ..... ..... ..... 000 0000 0000 @typea
68 addk 000100 ..... ..... ..... 000 0000 0000 @typea
69 addkc 000110 ..... ..... ..... 000 0000 0000 @typea
71 addi 001000 ..... ..... ................ @typeb
72 addic 001010 ..... ..... ................ @typeb
73 addik 001100 ..... ..... ................ @typeb
74 addikc 001110 ..... ..... ................ @typeb
76 and 100001 ..... ..... ..... 000 0000 0000 @typea
77 andi 101001 ..... ..... ................ @typeb
79 andn 100011 ..... ..... ..... 000 0000 0000 @typea
80 andni 101011 ..... ..... ................ @typeb
82 beq 100111 00000 ..... ..... 000 0000 0000 @typea_bc
83 bge 100111 00101 ..... ..... 000 0000 0000 @typea_bc
84 bgt 100111 00100 ..... ..... 000 0000 0000 @typea_bc
85 ble 100111 00011 ..... ..... 000 0000 0000 @typea_bc
86 blt 100111 00010 ..... ..... 000 0000 0000 @typea_bc
87 bne 100111 00001 ..... ..... 000 0000 0000 @typea_bc
89 beqd 100111 10000 ..... ..... 000 0000 0000 @typea_bc
90 bged 100111 10101 ..... ..... 000 0000 0000 @typea_bc
91 bgtd 100111 10100 ..... ..... 000 0000 0000 @typea_bc
92 bled 100111 10011 ..... ..... 000 0000 0000 @typea_bc
93 bltd 100111 10010 ..... ..... 000 0000 0000 @typea_bc
94 bned 100111 10001 ..... ..... 000 0000 0000 @typea_bc
96 beqi 101111 00000 ..... ................ @typeb_bc
97 bgei 101111 00101 ..... ................ @typeb_bc
98 bgti 101111 00100 ..... ................ @typeb_bc
99 blei 101111 00011 ..... ................ @typeb_bc
100 blti 101111 00010 ..... ................ @typeb_bc
101 bnei 101111 00001 ..... ................ @typeb_bc
103 beqid 101111 10000 ..... ................ @typeb_bc
104 bgeid 101111 10101 ..... ................ @typeb_bc
105 bgtid 101111 10100 ..... ................ @typeb_bc
106 bleid 101111 10011 ..... ................ @typeb_bc
107 bltid 101111 10010 ..... ................ @typeb_bc
108 bneid 101111 10001 ..... ................ @typeb_bc
110 br 100110 ..... 00000 ..... 000 0000 0000 @typea_br
111 bra 100110 ..... 01000 ..... 000 0000 0000 @typea_br
112 brd 100110 ..... 10000 ..... 000 0000 0000 @typea_br
113 brad 100110 ..... 11000 ..... 000 0000 0000 @typea_br
114 brld 100110 ..... 10100 ..... 000 0000 0000 @typea_br
115 brald 100110 ..... 11100 ..... 000 0000 0000 @typea_br
117 bri 101110 ..... 00000 ................ @typeb_br
118 brai 101110 ..... 01000 ................ @typeb_br
119 brid 101110 ..... 10000 ................ @typeb_br
120 braid 101110 ..... 11000 ................ @typeb_br
121 brlid 101110 ..... 10100 ................ @typeb_br
122 bralid 101110 ..... 11100 ................ @typeb_br
124 brk 100110 ..... 01100 ..... 000 0000 0000 @typea_br
125 brki 101110 ..... 01100 ................ @typeb_br
127 bsrl 010001 ..... ..... ..... 000 0000 0000 @typea
128 bsra 010001 ..... ..... ..... 010 0000 0000 @typea
129 bsll 010001 ..... ..... ..... 100 0000 0000 @typea
131 bsrli 011001 ..... ..... 00000 000000 ..... @typeb_bs
132 bsrai 011001 ..... ..... 00000 010000 ..... @typeb_bs
133 bslli 011001 ..... ..... 00000 100000 ..... @typeb_bs
135 bsefi 011001 ..... ..... 01000 .....0 ..... @typeb_ie
136 bsifi 011001 ..... ..... 10000 .....0 ..... @typeb_ie
138 clz 100100 ..... ..... 00000 000 1110 0000 @typea0
140 cmp 000101 ..... ..... ..... 000 0000 0001 @typea
141 cmpu 000101 ..... ..... ..... 000 0000 0011 @typea
143 fadd 010110 ..... ..... ..... 0000 000 0000 @typea
144 frsub 010110 ..... ..... ..... 0001 000 0000 @typea
145 fmul 010110 ..... ..... ..... 0010 000 0000 @typea
146 fdiv 010110 ..... ..... ..... 0011 000 0000 @typea
147 fcmp_un 010110 ..... ..... ..... 0100 000 0000 @typea
148 fcmp_lt 010110 ..... ..... ..... 0100 001 0000 @typea
149 fcmp_eq 010110 ..... ..... ..... 0100 010 0000 @typea
150 fcmp_le 010110 ..... ..... ..... 0100 011 0000 @typea
151 fcmp_gt 010110 ..... ..... ..... 0100 100 0000 @typea
152 fcmp_ne 010110 ..... ..... ..... 0100 101 0000 @typea
153 fcmp_ge 010110 ..... ..... ..... 0100 110 0000 @typea
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.
158 flt 010110 ..... ..... ----- 0101 000 0000 @typea0
159 fint 010110 ..... ..... ----- 0110 000 0000 @typea0
160 fsqrt 010110 ..... ..... 00000 0111 000 0000 @typea0
162 get 011011 rd:5 00000 0 ctrl:5 000000 imm:4
163 getd 010011 rd:5 00000 rb:5 0 ctrl:5 00000
165 idiv 010010 ..... ..... ..... 000 0000 0000 @typea
166 idivu 010010 ..... ..... ..... 000 0000 0010 @typea
168 imm 101100 00000 00000 imm:16
170 lbu 110000 ..... ..... ..... 0000 000 0000 @typea
171 lbur 110000 ..... ..... ..... 0100 000 0000 @typea
172 lbuea 110000 ..... ..... ..... 0001 000 0000 @typea
173 lbui 111000 ..... ..... ................ @typeb
175 lhu 110001 ..... ..... ..... 0000 000 0000 @typea
176 lhur 110001 ..... ..... ..... 0100 000 0000 @typea
177 lhuea 110001 ..... ..... ..... 0001 000 0000 @typea
178 lhui 111001 ..... ..... ................ @typeb
180 lw 110010 ..... ..... ..... 0000 000 0000 @typea
181 lwr 110010 ..... ..... ..... 0100 000 0000 @typea
182 lwea 110010 ..... ..... ..... 0001 000 0000 @typea
183 lwx 110010 ..... ..... ..... 1000 000 0000 @typea
184 lwi 111010 ..... ..... ................ @typeb
186 mbar 101110 imm:5 00010 0000 0000 0000 0100
188 mfs 100101 rd:5 0 e:1 000 10 rs:14
189 mts 100101 0 e:1 000 ra:5 11 rs:14
191 msrclr 100101 ..... 100010 ............... @type_msr
192 msrset 100101 ..... 100000 ............... @type_msr
194 mul 010000 ..... ..... ..... 000 0000 0000 @typea
195 mulh 010000 ..... ..... ..... 000 0000 0001 @typea
196 mulhu 010000 ..... ..... ..... 000 0000 0011 @typea
197 mulhsu 010000 ..... ..... ..... 000 0000 0010 @typea
198 muli 011000 ..... ..... ................ @typeb
200 or 100000 ..... ..... ..... 000 0000 0000 @typea
201 ori 101000 ..... ..... ................ @typeb
203 pcmpbf 100000 ..... ..... ..... 100 0000 0000 @typea
204 pcmpeq 100010 ..... ..... ..... 100 0000 0000 @typea
205 pcmpne 100011 ..... ..... ..... 100 0000 0000 @typea
207 put 011011 00000 ra:5 1 ctrl:5 000000 imm:4
208 putd 010011 00000 ra:5 rb:5 1 ctrl:5 00000
210 rsub 000001 ..... ..... ..... 000 0000 0000 @typea
211 rsubc 000011 ..... ..... ..... 000 0000 0000 @typea
212 rsubk 000101 ..... ..... ..... 000 0000 0000 @typea
213 rsubkc 000111 ..... ..... ..... 000 0000 0000 @typea
215 rsubi 001001 ..... ..... ................ @typeb
216 rsubic 001011 ..... ..... ................ @typeb
217 rsubik 001101 ..... ..... ................ @typeb
218 rsubikc 001111 ..... ..... ................ @typeb
220 rtbd 101101 10010 ..... ................ @typeb_bc
221 rtid 101101 10001 ..... ................ @typeb_bc
222 rted 101101 10100 ..... ................ @typeb_bc
223 rtsd 101101 10000 ..... ................ @typeb_bc
225 sb 110100 ..... ..... ..... 0000 000 0000 @typea
226 sbr 110100 ..... ..... ..... 0100 000 0000 @typea
227 sbea 110100 ..... ..... ..... 0001 000 0000 @typea
228 sbi 111100 ..... ..... ................ @typeb
230 sh 110101 ..... ..... ..... 0000 000 0000 @typea
231 shr 110101 ..... ..... ..... 0100 000 0000 @typea
232 shea 110101 ..... ..... ..... 0001 000 0000 @typea
233 shi 111101 ..... ..... ................ @typeb
235 sw 110110 ..... ..... ..... 0000 000 0000 @typea
236 swr 110110 ..... ..... ..... 0100 000 0000 @typea
237 swea 110110 ..... ..... ..... 0001 000 0000 @typea
238 swx 110110 ..... ..... ..... 1000 000 0000 @typea
239 swi 111110 ..... ..... ................ @typeb
241 sext8 100100 ..... ..... 00000 000 0110 0000 @typea0
242 sext16 100100 ..... ..... 00000 000 0110 0001 @typea0
244 sra 100100 ..... ..... 00000 000 0000 0001 @typea0
245 src 100100 ..... ..... 00000 000 0010 0001 @typea0
246 srl 100100 ..... ..... 00000 000 0100 0001 @typea0
248 swapb 100100 ..... ..... 00000 001 1110 0000 @typea0
249 swaph 100100 ..... ..... 00000 001 1110 0010 @typea0
251 # Cache operations have no effect in qemu: discard the arguments.
252 wdic 100100 00000 ----- ----- -00 -11- 01-0 # wdc
253 wdic 100100 00000 ----- ----- 000 0110 1000 # wic
255 xor 100010 ..... ..... ..... 000 0000 0000 @typea
256 xori 101010 ..... ..... ................ @typeb