]>
Commit | Line | Data |
---|---|---|
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 | } | |
67 | addc 000010 ..... ..... ..... 000 0000 0000 @typea | |
68 | addk 000100 ..... ..... ..... 000 0000 0000 @typea | |
69 | addkc 000110 ..... ..... ..... 000 0000 0000 @typea | |
70 | ||
71 | addi 001000 ..... ..... ................ @typeb | |
72 | addic 001010 ..... ..... ................ @typeb | |
73 | addik 001100 ..... ..... ................ @typeb | |
74 | addikc 001110 ..... ..... ................ @typeb | |
a2b0b90e | 75 | |
cb0a0a4c RH |
76 | and 100001 ..... ..... ..... 000 0000 0000 @typea |
77 | andi 101001 ..... ..... ................ @typeb | |
78 | ||
79 | andn 100011 ..... ..... ..... 000 0000 0000 @typea | |
80 | andni 101011 ..... ..... ................ @typeb | |
81 | ||
fd779113 RH |
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 | |
88 | ||
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 | |
95 | ||
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 | |
102 | ||
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 | |
109 | ||
16bbbbc9 RH |
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 | |
116 | ||
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 | |
123 | ||
f5235314 RH |
124 | brk 100110 ..... 01100 ..... 000 0000 0000 @typea_br |
125 | brki 101110 ..... 01100 ................ @typeb_br | |
126 | ||
081d8e02 RH |
127 | bsrl 010001 ..... ..... ..... 000 0000 0000 @typea |
128 | bsra 010001 ..... ..... ..... 010 0000 0000 @typea | |
129 | bsll 010001 ..... ..... ..... 100 0000 0000 @typea | |
130 | ||
131 | bsrli 011001 ..... ..... 00000 000000 ..... @typeb_bs | |
132 | bsrai 011001 ..... ..... 00000 010000 ..... @typeb_bs | |
133 | bslli 011001 ..... ..... 00000 100000 ..... @typeb_bs | |
134 | ||
135 | bsefi 011001 ..... ..... 01000 .....0 ..... @typeb_ie | |
136 | bsifi 011001 ..... ..... 10000 .....0 ..... @typeb_ie | |
137 | ||
39cf3864 RH |
138 | clz 100100 ..... ..... 00000 000 1110 0000 @typea0 |
139 | ||
a2b0b90e RH |
140 | cmp 000101 ..... ..... ..... 000 0000 0001 @typea |
141 | cmpu 000101 ..... ..... ..... 000 0000 0011 @typea | |
142 | ||
d5aead3d RH |
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 | |
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. | |
158 | flt 010110 ..... ..... ----- 0101 000 0000 @typea0 | |
159 | fint 010110 ..... ..... ----- 0110 000 0000 @typea0 | |
160 | fsqrt 010110 ..... ..... 00000 0111 000 0000 @typea0 | |
161 | ||
52065d8f RH |
162 | get 011011 rd:5 00000 0 ctrl:5 000000 imm:4 |
163 | getd 010011 rd:5 00000 rb:5 0 ctrl:5 00000 | |
164 | ||
b1354342 RH |
165 | idiv 010010 ..... ..... ..... 000 0000 0000 @typea |
166 | idivu 010010 ..... ..... ..... 000 0000 0010 @typea | |
167 | ||
e64b2e5c RH |
168 | imm 101100 00000 00000 imm:16 |
169 | ||
d8e59c4a RH |
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 | |
174 | ||
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 | |
179 | ||
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 | |
185 | ||
ee8c7f9f RH |
186 | mbar 101110 imm:5 00010 0000 0000 0000 0100 |
187 | ||
9df297a2 RH |
188 | mfs 100101 rd:5 0 e:1 000 10 rs:14 |
189 | mts 100101 0 e:1 000 ra:5 11 rs:14 | |
190 | ||
536e340f RH |
191 | msrclr 100101 ..... 100010 ............... @type_msr |
192 | msrset 100101 ..... 100000 ............... @type_msr | |
193 | ||
97955ceb RH |
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 | |
199 | ||
cb0a0a4c RH |
200 | or 100000 ..... ..... ..... 000 0000 0000 @typea |
201 | ori 101000 ..... ..... ................ @typeb | |
202 | ||
607f5767 RH |
203 | pcmpbf 100000 ..... ..... ..... 100 0000 0000 @typea |
204 | pcmpeq 100010 ..... ..... ..... 100 0000 0000 @typea | |
205 | pcmpne 100011 ..... ..... ..... 100 0000 0000 @typea | |
206 | ||
52065d8f RH |
207 | put 011011 00000 ra:5 1 ctrl:5 000000 imm:4 |
208 | putd 010011 00000 ra:5 rb:5 1 ctrl:5 00000 | |
209 | ||
a2b0b90e RH |
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 | |
214 | ||
215 | rsubi 001001 ..... ..... ................ @typeb | |
216 | rsubic 001011 ..... ..... ................ @typeb | |
217 | rsubik 001101 ..... ..... ................ @typeb | |
218 | rsubikc 001111 ..... ..... ................ @typeb | |
cb0a0a4c | 219 | |
e6cb0354 RH |
220 | rtbd 101101 10010 ..... ................ @typeb_bc |
221 | rtid 101101 10001 ..... ................ @typeb_bc | |
222 | rted 101101 10100 ..... ................ @typeb_bc | |
223 | rtsd 101101 10000 ..... ................ @typeb_bc | |
224 | ||
d8e59c4a RH |
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 | |
229 | ||
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 | |
234 | ||
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 | |
240 | ||
39cf3864 RH |
241 | sext8 100100 ..... ..... 00000 000 0110 0000 @typea0 |
242 | sext16 100100 ..... ..... 00000 000 0110 0001 @typea0 | |
243 | ||
244 | sra 100100 ..... ..... 00000 000 0000 0001 @typea0 | |
245 | src 100100 ..... ..... 00000 000 0010 0001 @typea0 | |
246 | srl 100100 ..... ..... 00000 000 0100 0001 @typea0 | |
247 | ||
248 | swapb 100100 ..... ..... 00000 001 1110 0000 @typea0 | |
249 | swaph 100100 ..... ..... 00000 001 1110 0010 @typea0 | |
250 | ||
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 | |
254 | ||
cb0a0a4c RH |
255 | xor 100010 ..... ..... ..... 000 0000 0000 @typea |
256 | xori 101010 ..... ..... ................ @typeb |