Commit | Line | Data |
---|---|---|
eb7c792d CM |
1 | /* TILEPro opcode information. |
2 | * | |
3 | * Copyright 2011 Tilera Corporation. All Rights Reserved. | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or | |
6 | * modify it under the terms of the GNU General Public License | |
7 | * as published by the Free Software Foundation, version 2. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, but | |
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | |
12 | * NON INFRINGEMENT. See the GNU General Public License for | |
13 | * more details. | |
14 | * | |
15 | * | |
16 | * | |
17 | * | |
18 | * | |
19 | */ | |
20 | ||
21 | #ifndef opcode_tilepro_h | |
22 | #define opcode_tilepro_h | |
23 | ||
24 | #include <arch/opcode.h> | |
25 | ||
26 | ||
27 | enum | |
28 | { | |
29 | TILEPRO_MAX_OPERANDS = 5 /* mm */ | |
30 | }; | |
31 | ||
32 | typedef enum | |
33 | { | |
34 | TILEPRO_OPC_BPT, | |
35 | TILEPRO_OPC_INFO, | |
36 | TILEPRO_OPC_INFOL, | |
37 | TILEPRO_OPC_J, | |
38 | TILEPRO_OPC_JAL, | |
39 | TILEPRO_OPC_MOVE, | |
40 | TILEPRO_OPC_MOVE_SN, | |
41 | TILEPRO_OPC_MOVEI, | |
42 | TILEPRO_OPC_MOVEI_SN, | |
43 | TILEPRO_OPC_MOVELI, | |
44 | TILEPRO_OPC_MOVELI_SN, | |
45 | TILEPRO_OPC_MOVELIS, | |
46 | TILEPRO_OPC_PREFETCH, | |
47 | TILEPRO_OPC_RAISE, | |
48 | TILEPRO_OPC_ADD, | |
49 | TILEPRO_OPC_ADD_SN, | |
50 | TILEPRO_OPC_ADDB, | |
51 | TILEPRO_OPC_ADDB_SN, | |
52 | TILEPRO_OPC_ADDBS_U, | |
53 | TILEPRO_OPC_ADDBS_U_SN, | |
54 | TILEPRO_OPC_ADDH, | |
55 | TILEPRO_OPC_ADDH_SN, | |
56 | TILEPRO_OPC_ADDHS, | |
57 | TILEPRO_OPC_ADDHS_SN, | |
58 | TILEPRO_OPC_ADDI, | |
59 | TILEPRO_OPC_ADDI_SN, | |
60 | TILEPRO_OPC_ADDIB, | |
61 | TILEPRO_OPC_ADDIB_SN, | |
62 | TILEPRO_OPC_ADDIH, | |
63 | TILEPRO_OPC_ADDIH_SN, | |
64 | TILEPRO_OPC_ADDLI, | |
65 | TILEPRO_OPC_ADDLI_SN, | |
66 | TILEPRO_OPC_ADDLIS, | |
67 | TILEPRO_OPC_ADDS, | |
68 | TILEPRO_OPC_ADDS_SN, | |
69 | TILEPRO_OPC_ADIFFB_U, | |
70 | TILEPRO_OPC_ADIFFB_U_SN, | |
71 | TILEPRO_OPC_ADIFFH, | |
72 | TILEPRO_OPC_ADIFFH_SN, | |
73 | TILEPRO_OPC_AND, | |
74 | TILEPRO_OPC_AND_SN, | |
75 | TILEPRO_OPC_ANDI, | |
76 | TILEPRO_OPC_ANDI_SN, | |
77 | TILEPRO_OPC_AULI, | |
78 | TILEPRO_OPC_AVGB_U, | |
79 | TILEPRO_OPC_AVGB_U_SN, | |
80 | TILEPRO_OPC_AVGH, | |
81 | TILEPRO_OPC_AVGH_SN, | |
82 | TILEPRO_OPC_BBNS, | |
83 | TILEPRO_OPC_BBNS_SN, | |
84 | TILEPRO_OPC_BBNST, | |
85 | TILEPRO_OPC_BBNST_SN, | |
86 | TILEPRO_OPC_BBS, | |
87 | TILEPRO_OPC_BBS_SN, | |
88 | TILEPRO_OPC_BBST, | |
89 | TILEPRO_OPC_BBST_SN, | |
90 | TILEPRO_OPC_BGEZ, | |
91 | TILEPRO_OPC_BGEZ_SN, | |
92 | TILEPRO_OPC_BGEZT, | |
93 | TILEPRO_OPC_BGEZT_SN, | |
94 | TILEPRO_OPC_BGZ, | |
95 | TILEPRO_OPC_BGZ_SN, | |
96 | TILEPRO_OPC_BGZT, | |
97 | TILEPRO_OPC_BGZT_SN, | |
98 | TILEPRO_OPC_BITX, | |
99 | TILEPRO_OPC_BITX_SN, | |
100 | TILEPRO_OPC_BLEZ, | |
101 | TILEPRO_OPC_BLEZ_SN, | |
102 | TILEPRO_OPC_BLEZT, | |
103 | TILEPRO_OPC_BLEZT_SN, | |
104 | TILEPRO_OPC_BLZ, | |
105 | TILEPRO_OPC_BLZ_SN, | |
106 | TILEPRO_OPC_BLZT, | |
107 | TILEPRO_OPC_BLZT_SN, | |
108 | TILEPRO_OPC_BNZ, | |
109 | TILEPRO_OPC_BNZ_SN, | |
110 | TILEPRO_OPC_BNZT, | |
111 | TILEPRO_OPC_BNZT_SN, | |
112 | TILEPRO_OPC_BYTEX, | |
113 | TILEPRO_OPC_BYTEX_SN, | |
114 | TILEPRO_OPC_BZ, | |
115 | TILEPRO_OPC_BZ_SN, | |
116 | TILEPRO_OPC_BZT, | |
117 | TILEPRO_OPC_BZT_SN, | |
118 | TILEPRO_OPC_CLZ, | |
119 | TILEPRO_OPC_CLZ_SN, | |
120 | TILEPRO_OPC_CRC32_32, | |
121 | TILEPRO_OPC_CRC32_32_SN, | |
122 | TILEPRO_OPC_CRC32_8, | |
123 | TILEPRO_OPC_CRC32_8_SN, | |
124 | TILEPRO_OPC_CTZ, | |
125 | TILEPRO_OPC_CTZ_SN, | |
126 | TILEPRO_OPC_DRAIN, | |
127 | TILEPRO_OPC_DTLBPR, | |
128 | TILEPRO_OPC_DWORD_ALIGN, | |
129 | TILEPRO_OPC_DWORD_ALIGN_SN, | |
130 | TILEPRO_OPC_FINV, | |
131 | TILEPRO_OPC_FLUSH, | |
132 | TILEPRO_OPC_FNOP, | |
133 | TILEPRO_OPC_ICOH, | |
134 | TILEPRO_OPC_ILL, | |
135 | TILEPRO_OPC_INTHB, | |
136 | TILEPRO_OPC_INTHB_SN, | |
137 | TILEPRO_OPC_INTHH, | |
138 | TILEPRO_OPC_INTHH_SN, | |
139 | TILEPRO_OPC_INTLB, | |
140 | TILEPRO_OPC_INTLB_SN, | |
141 | TILEPRO_OPC_INTLH, | |
142 | TILEPRO_OPC_INTLH_SN, | |
143 | TILEPRO_OPC_INV, | |
144 | TILEPRO_OPC_IRET, | |
145 | TILEPRO_OPC_JALB, | |
146 | TILEPRO_OPC_JALF, | |
147 | TILEPRO_OPC_JALR, | |
148 | TILEPRO_OPC_JALRP, | |
149 | TILEPRO_OPC_JB, | |
150 | TILEPRO_OPC_JF, | |
151 | TILEPRO_OPC_JR, | |
152 | TILEPRO_OPC_JRP, | |
153 | TILEPRO_OPC_LB, | |
154 | TILEPRO_OPC_LB_SN, | |
155 | TILEPRO_OPC_LB_U, | |
156 | TILEPRO_OPC_LB_U_SN, | |
157 | TILEPRO_OPC_LBADD, | |
158 | TILEPRO_OPC_LBADD_SN, | |
159 | TILEPRO_OPC_LBADD_U, | |
160 | TILEPRO_OPC_LBADD_U_SN, | |
161 | TILEPRO_OPC_LH, | |
162 | TILEPRO_OPC_LH_SN, | |
163 | TILEPRO_OPC_LH_U, | |
164 | TILEPRO_OPC_LH_U_SN, | |
165 | TILEPRO_OPC_LHADD, | |
166 | TILEPRO_OPC_LHADD_SN, | |
167 | TILEPRO_OPC_LHADD_U, | |
168 | TILEPRO_OPC_LHADD_U_SN, | |
169 | TILEPRO_OPC_LNK, | |
170 | TILEPRO_OPC_LNK_SN, | |
171 | TILEPRO_OPC_LW, | |
172 | TILEPRO_OPC_LW_SN, | |
173 | TILEPRO_OPC_LW_NA, | |
174 | TILEPRO_OPC_LW_NA_SN, | |
175 | TILEPRO_OPC_LWADD, | |
176 | TILEPRO_OPC_LWADD_SN, | |
177 | TILEPRO_OPC_LWADD_NA, | |
178 | TILEPRO_OPC_LWADD_NA_SN, | |
179 | TILEPRO_OPC_MAXB_U, | |
180 | TILEPRO_OPC_MAXB_U_SN, | |
181 | TILEPRO_OPC_MAXH, | |
182 | TILEPRO_OPC_MAXH_SN, | |
183 | TILEPRO_OPC_MAXIB_U, | |
184 | TILEPRO_OPC_MAXIB_U_SN, | |
185 | TILEPRO_OPC_MAXIH, | |
186 | TILEPRO_OPC_MAXIH_SN, | |
187 | TILEPRO_OPC_MF, | |
188 | TILEPRO_OPC_MFSPR, | |
189 | TILEPRO_OPC_MINB_U, | |
190 | TILEPRO_OPC_MINB_U_SN, | |
191 | TILEPRO_OPC_MINH, | |
192 | TILEPRO_OPC_MINH_SN, | |
193 | TILEPRO_OPC_MINIB_U, | |
194 | TILEPRO_OPC_MINIB_U_SN, | |
195 | TILEPRO_OPC_MINIH, | |
196 | TILEPRO_OPC_MINIH_SN, | |
197 | TILEPRO_OPC_MM, | |
198 | TILEPRO_OPC_MNZ, | |
199 | TILEPRO_OPC_MNZ_SN, | |
200 | TILEPRO_OPC_MNZB, | |
201 | TILEPRO_OPC_MNZB_SN, | |
202 | TILEPRO_OPC_MNZH, | |
203 | TILEPRO_OPC_MNZH_SN, | |
204 | TILEPRO_OPC_MTSPR, | |
205 | TILEPRO_OPC_MULHH_SS, | |
206 | TILEPRO_OPC_MULHH_SS_SN, | |
207 | TILEPRO_OPC_MULHH_SU, | |
208 | TILEPRO_OPC_MULHH_SU_SN, | |
209 | TILEPRO_OPC_MULHH_UU, | |
210 | TILEPRO_OPC_MULHH_UU_SN, | |
211 | TILEPRO_OPC_MULHHA_SS, | |
212 | TILEPRO_OPC_MULHHA_SS_SN, | |
213 | TILEPRO_OPC_MULHHA_SU, | |
214 | TILEPRO_OPC_MULHHA_SU_SN, | |
215 | TILEPRO_OPC_MULHHA_UU, | |
216 | TILEPRO_OPC_MULHHA_UU_SN, | |
217 | TILEPRO_OPC_MULHHSA_UU, | |
218 | TILEPRO_OPC_MULHHSA_UU_SN, | |
219 | TILEPRO_OPC_MULHL_SS, | |
220 | TILEPRO_OPC_MULHL_SS_SN, | |
221 | TILEPRO_OPC_MULHL_SU, | |
222 | TILEPRO_OPC_MULHL_SU_SN, | |
223 | TILEPRO_OPC_MULHL_US, | |
224 | TILEPRO_OPC_MULHL_US_SN, | |
225 | TILEPRO_OPC_MULHL_UU, | |
226 | TILEPRO_OPC_MULHL_UU_SN, | |
227 | TILEPRO_OPC_MULHLA_SS, | |
228 | TILEPRO_OPC_MULHLA_SS_SN, | |
229 | TILEPRO_OPC_MULHLA_SU, | |
230 | TILEPRO_OPC_MULHLA_SU_SN, | |
231 | TILEPRO_OPC_MULHLA_US, | |
232 | TILEPRO_OPC_MULHLA_US_SN, | |
233 | TILEPRO_OPC_MULHLA_UU, | |
234 | TILEPRO_OPC_MULHLA_UU_SN, | |
235 | TILEPRO_OPC_MULHLSA_UU, | |
236 | TILEPRO_OPC_MULHLSA_UU_SN, | |
237 | TILEPRO_OPC_MULLL_SS, | |
238 | TILEPRO_OPC_MULLL_SS_SN, | |
239 | TILEPRO_OPC_MULLL_SU, | |
240 | TILEPRO_OPC_MULLL_SU_SN, | |
241 | TILEPRO_OPC_MULLL_UU, | |
242 | TILEPRO_OPC_MULLL_UU_SN, | |
243 | TILEPRO_OPC_MULLLA_SS, | |
244 | TILEPRO_OPC_MULLLA_SS_SN, | |
245 | TILEPRO_OPC_MULLLA_SU, | |
246 | TILEPRO_OPC_MULLLA_SU_SN, | |
247 | TILEPRO_OPC_MULLLA_UU, | |
248 | TILEPRO_OPC_MULLLA_UU_SN, | |
249 | TILEPRO_OPC_MULLLSA_UU, | |
250 | TILEPRO_OPC_MULLLSA_UU_SN, | |
251 | TILEPRO_OPC_MVNZ, | |
252 | TILEPRO_OPC_MVNZ_SN, | |
253 | TILEPRO_OPC_MVZ, | |
254 | TILEPRO_OPC_MVZ_SN, | |
255 | TILEPRO_OPC_MZ, | |
256 | TILEPRO_OPC_MZ_SN, | |
257 | TILEPRO_OPC_MZB, | |
258 | TILEPRO_OPC_MZB_SN, | |
259 | TILEPRO_OPC_MZH, | |
260 | TILEPRO_OPC_MZH_SN, | |
261 | TILEPRO_OPC_NAP, | |
262 | TILEPRO_OPC_NOP, | |
263 | TILEPRO_OPC_NOR, | |
264 | TILEPRO_OPC_NOR_SN, | |
265 | TILEPRO_OPC_OR, | |
266 | TILEPRO_OPC_OR_SN, | |
267 | TILEPRO_OPC_ORI, | |
268 | TILEPRO_OPC_ORI_SN, | |
269 | TILEPRO_OPC_PACKBS_U, | |
270 | TILEPRO_OPC_PACKBS_U_SN, | |
271 | TILEPRO_OPC_PACKHB, | |
272 | TILEPRO_OPC_PACKHB_SN, | |
273 | TILEPRO_OPC_PACKHS, | |
274 | TILEPRO_OPC_PACKHS_SN, | |
275 | TILEPRO_OPC_PACKLB, | |
276 | TILEPRO_OPC_PACKLB_SN, | |
277 | TILEPRO_OPC_PCNT, | |
278 | TILEPRO_OPC_PCNT_SN, | |
279 | TILEPRO_OPC_RL, | |
280 | TILEPRO_OPC_RL_SN, | |
281 | TILEPRO_OPC_RLI, | |
282 | TILEPRO_OPC_RLI_SN, | |
283 | TILEPRO_OPC_S1A, | |
284 | TILEPRO_OPC_S1A_SN, | |
285 | TILEPRO_OPC_S2A, | |
286 | TILEPRO_OPC_S2A_SN, | |
287 | TILEPRO_OPC_S3A, | |
288 | TILEPRO_OPC_S3A_SN, | |
289 | TILEPRO_OPC_SADAB_U, | |
290 | TILEPRO_OPC_SADAB_U_SN, | |
291 | TILEPRO_OPC_SADAH, | |
292 | TILEPRO_OPC_SADAH_SN, | |
293 | TILEPRO_OPC_SADAH_U, | |
294 | TILEPRO_OPC_SADAH_U_SN, | |
295 | TILEPRO_OPC_SADB_U, | |
296 | TILEPRO_OPC_SADB_U_SN, | |
297 | TILEPRO_OPC_SADH, | |
298 | TILEPRO_OPC_SADH_SN, | |
299 | TILEPRO_OPC_SADH_U, | |
300 | TILEPRO_OPC_SADH_U_SN, | |
301 | TILEPRO_OPC_SB, | |
302 | TILEPRO_OPC_SBADD, | |
303 | TILEPRO_OPC_SEQ, | |
304 | TILEPRO_OPC_SEQ_SN, | |
305 | TILEPRO_OPC_SEQB, | |
306 | TILEPRO_OPC_SEQB_SN, | |
307 | TILEPRO_OPC_SEQH, | |
308 | TILEPRO_OPC_SEQH_SN, | |
309 | TILEPRO_OPC_SEQI, | |
310 | TILEPRO_OPC_SEQI_SN, | |
311 | TILEPRO_OPC_SEQIB, | |
312 | TILEPRO_OPC_SEQIB_SN, | |
313 | TILEPRO_OPC_SEQIH, | |
314 | TILEPRO_OPC_SEQIH_SN, | |
315 | TILEPRO_OPC_SH, | |
316 | TILEPRO_OPC_SHADD, | |
317 | TILEPRO_OPC_SHL, | |
318 | TILEPRO_OPC_SHL_SN, | |
319 | TILEPRO_OPC_SHLB, | |
320 | TILEPRO_OPC_SHLB_SN, | |
321 | TILEPRO_OPC_SHLH, | |
322 | TILEPRO_OPC_SHLH_SN, | |
323 | TILEPRO_OPC_SHLI, | |
324 | TILEPRO_OPC_SHLI_SN, | |
325 | TILEPRO_OPC_SHLIB, | |
326 | TILEPRO_OPC_SHLIB_SN, | |
327 | TILEPRO_OPC_SHLIH, | |
328 | TILEPRO_OPC_SHLIH_SN, | |
329 | TILEPRO_OPC_SHR, | |
330 | TILEPRO_OPC_SHR_SN, | |
331 | TILEPRO_OPC_SHRB, | |
332 | TILEPRO_OPC_SHRB_SN, | |
333 | TILEPRO_OPC_SHRH, | |
334 | TILEPRO_OPC_SHRH_SN, | |
335 | TILEPRO_OPC_SHRI, | |
336 | TILEPRO_OPC_SHRI_SN, | |
337 | TILEPRO_OPC_SHRIB, | |
338 | TILEPRO_OPC_SHRIB_SN, | |
339 | TILEPRO_OPC_SHRIH, | |
340 | TILEPRO_OPC_SHRIH_SN, | |
341 | TILEPRO_OPC_SLT, | |
342 | TILEPRO_OPC_SLT_SN, | |
343 | TILEPRO_OPC_SLT_U, | |
344 | TILEPRO_OPC_SLT_U_SN, | |
345 | TILEPRO_OPC_SLTB, | |
346 | TILEPRO_OPC_SLTB_SN, | |
347 | TILEPRO_OPC_SLTB_U, | |
348 | TILEPRO_OPC_SLTB_U_SN, | |
349 | TILEPRO_OPC_SLTE, | |
350 | TILEPRO_OPC_SLTE_SN, | |
351 | TILEPRO_OPC_SLTE_U, | |
352 | TILEPRO_OPC_SLTE_U_SN, | |
353 | TILEPRO_OPC_SLTEB, | |
354 | TILEPRO_OPC_SLTEB_SN, | |
355 | TILEPRO_OPC_SLTEB_U, | |
356 | TILEPRO_OPC_SLTEB_U_SN, | |
357 | TILEPRO_OPC_SLTEH, | |
358 | TILEPRO_OPC_SLTEH_SN, | |
359 | TILEPRO_OPC_SLTEH_U, | |
360 | TILEPRO_OPC_SLTEH_U_SN, | |
361 | TILEPRO_OPC_SLTH, | |
362 | TILEPRO_OPC_SLTH_SN, | |
363 | TILEPRO_OPC_SLTH_U, | |
364 | TILEPRO_OPC_SLTH_U_SN, | |
365 | TILEPRO_OPC_SLTI, | |
366 | TILEPRO_OPC_SLTI_SN, | |
367 | TILEPRO_OPC_SLTI_U, | |
368 | TILEPRO_OPC_SLTI_U_SN, | |
369 | TILEPRO_OPC_SLTIB, | |
370 | TILEPRO_OPC_SLTIB_SN, | |
371 | TILEPRO_OPC_SLTIB_U, | |
372 | TILEPRO_OPC_SLTIB_U_SN, | |
373 | TILEPRO_OPC_SLTIH, | |
374 | TILEPRO_OPC_SLTIH_SN, | |
375 | TILEPRO_OPC_SLTIH_U, | |
376 | TILEPRO_OPC_SLTIH_U_SN, | |
377 | TILEPRO_OPC_SNE, | |
378 | TILEPRO_OPC_SNE_SN, | |
379 | TILEPRO_OPC_SNEB, | |
380 | TILEPRO_OPC_SNEB_SN, | |
381 | TILEPRO_OPC_SNEH, | |
382 | TILEPRO_OPC_SNEH_SN, | |
383 | TILEPRO_OPC_SRA, | |
384 | TILEPRO_OPC_SRA_SN, | |
385 | TILEPRO_OPC_SRAB, | |
386 | TILEPRO_OPC_SRAB_SN, | |
387 | TILEPRO_OPC_SRAH, | |
388 | TILEPRO_OPC_SRAH_SN, | |
389 | TILEPRO_OPC_SRAI, | |
390 | TILEPRO_OPC_SRAI_SN, | |
391 | TILEPRO_OPC_SRAIB, | |
392 | TILEPRO_OPC_SRAIB_SN, | |
393 | TILEPRO_OPC_SRAIH, | |
394 | TILEPRO_OPC_SRAIH_SN, | |
395 | TILEPRO_OPC_SUB, | |
396 | TILEPRO_OPC_SUB_SN, | |
397 | TILEPRO_OPC_SUBB, | |
398 | TILEPRO_OPC_SUBB_SN, | |
399 | TILEPRO_OPC_SUBBS_U, | |
400 | TILEPRO_OPC_SUBBS_U_SN, | |
401 | TILEPRO_OPC_SUBH, | |
402 | TILEPRO_OPC_SUBH_SN, | |
403 | TILEPRO_OPC_SUBHS, | |
404 | TILEPRO_OPC_SUBHS_SN, | |
405 | TILEPRO_OPC_SUBS, | |
406 | TILEPRO_OPC_SUBS_SN, | |
407 | TILEPRO_OPC_SW, | |
408 | TILEPRO_OPC_SWADD, | |
409 | TILEPRO_OPC_SWINT0, | |
410 | TILEPRO_OPC_SWINT1, | |
411 | TILEPRO_OPC_SWINT2, | |
412 | TILEPRO_OPC_SWINT3, | |
413 | TILEPRO_OPC_TBLIDXB0, | |
414 | TILEPRO_OPC_TBLIDXB0_SN, | |
415 | TILEPRO_OPC_TBLIDXB1, | |
416 | TILEPRO_OPC_TBLIDXB1_SN, | |
417 | TILEPRO_OPC_TBLIDXB2, | |
418 | TILEPRO_OPC_TBLIDXB2_SN, | |
419 | TILEPRO_OPC_TBLIDXB3, | |
420 | TILEPRO_OPC_TBLIDXB3_SN, | |
421 | TILEPRO_OPC_TNS, | |
422 | TILEPRO_OPC_TNS_SN, | |
423 | TILEPRO_OPC_WH64, | |
424 | TILEPRO_OPC_XOR, | |
425 | TILEPRO_OPC_XOR_SN, | |
426 | TILEPRO_OPC_XORI, | |
427 | TILEPRO_OPC_XORI_SN, | |
428 | TILEPRO_OPC_NONE | |
429 | } tilepro_mnemonic; | |
430 | ||
431 | ||
432 | ||
433 | ||
434 | typedef enum | |
435 | { | |
436 | TILEPRO_PIPELINE_X0, | |
437 | TILEPRO_PIPELINE_X1, | |
438 | TILEPRO_PIPELINE_Y0, | |
439 | TILEPRO_PIPELINE_Y1, | |
440 | TILEPRO_PIPELINE_Y2, | |
441 | } tilepro_pipeline; | |
442 | ||
443 | #define tilepro_is_x_pipeline(p) ((int)(p) <= (int)TILEPRO_PIPELINE_X1) | |
444 | ||
445 | typedef enum | |
446 | { | |
447 | TILEPRO_OP_TYPE_REGISTER, | |
448 | TILEPRO_OP_TYPE_IMMEDIATE, | |
449 | TILEPRO_OP_TYPE_ADDRESS, | |
450 | TILEPRO_OP_TYPE_SPR | |
451 | } tilepro_operand_type; | |
452 | ||
453 | struct tilepro_operand | |
454 | { | |
455 | /* Is this operand a register, immediate or address? */ | |
456 | tilepro_operand_type type; | |
457 | ||
458 | /* The default relocation type for this operand. */ | |
459 | signed int default_reloc : 16; | |
460 | ||
461 | /* How many bits is this value? (used for range checking) */ | |
462 | unsigned int num_bits : 5; | |
463 | ||
464 | /* Is the value signed? (used for range checking) */ | |
465 | unsigned int is_signed : 1; | |
466 | ||
467 | /* Is this operand a source register? */ | |
468 | unsigned int is_src_reg : 1; | |
469 | ||
470 | /* Is this operand written? (i.e. is it a destination register) */ | |
471 | unsigned int is_dest_reg : 1; | |
472 | ||
473 | /* Is this operand PC-relative? */ | |
474 | unsigned int is_pc_relative : 1; | |
475 | ||
476 | /* By how many bits do we right shift the value before inserting? */ | |
477 | unsigned int rightshift : 2; | |
478 | ||
479 | /* Return the bits for this operand to be ORed into an existing bundle. */ | |
480 | tilepro_bundle_bits (*insert) (int op); | |
481 | ||
482 | /* Extract this operand and return it. */ | |
483 | unsigned int (*extract) (tilepro_bundle_bits bundle); | |
484 | }; | |
485 | ||
486 | ||
487 | extern const struct tilepro_operand tilepro_operands[]; | |
488 | ||
489 | /* One finite-state machine per pipe for rapid instruction decoding. */ | |
490 | extern const unsigned short * const | |
491 | tilepro_bundle_decoder_fsms[TILEPRO_NUM_PIPELINE_ENCODINGS]; | |
492 | ||
493 | ||
494 | struct tilepro_opcode | |
495 | { | |
496 | /* The opcode mnemonic, e.g. "add" */ | |
497 | const char *name; | |
498 | ||
499 | /* The enum value for this mnemonic. */ | |
500 | tilepro_mnemonic mnemonic; | |
501 | ||
502 | /* A bit mask of which of the five pipes this instruction | |
503 | is compatible with: | |
504 | X0 0x01 | |
505 | X1 0x02 | |
506 | Y0 0x04 | |
507 | Y1 0x08 | |
508 | Y2 0x10 */ | |
509 | unsigned char pipes; | |
510 | ||
511 | /* How many operands are there? */ | |
512 | unsigned char num_operands; | |
513 | ||
514 | /* Which register does this write implicitly, or TREG_ZERO if none? */ | |
515 | unsigned char implicitly_written_register; | |
516 | ||
517 | /* Can this be bundled with other instructions (almost always true). */ | |
518 | unsigned char can_bundle; | |
519 | ||
520 | /* The description of the operands. Each of these is an | |
521 | * index into the tilepro_operands[] table. */ | |
522 | unsigned char operands[TILEPRO_NUM_PIPELINE_ENCODINGS][TILEPRO_MAX_OPERANDS]; | |
523 | ||
524 | }; | |
525 | ||
526 | extern const struct tilepro_opcode tilepro_opcodes[]; | |
527 | ||
528 | ||
529 | /* Used for non-textual disassembly into structs. */ | |
530 | struct tilepro_decoded_instruction | |
531 | { | |
532 | const struct tilepro_opcode *opcode; | |
533 | const struct tilepro_operand *operands[TILEPRO_MAX_OPERANDS]; | |
534 | int operand_values[TILEPRO_MAX_OPERANDS]; | |
535 | }; | |
536 | ||
537 | ||
538 | /* Disassemble a bundle into a struct for machine processing. */ | |
539 | extern int parse_insn_tilepro(tilepro_bundle_bits bits, | |
540 | unsigned int pc, | |
541 | struct tilepro_decoded_instruction | |
542 | decoded[TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE]); | |
543 | ||
544 | ||
545 | /* Given a set of bundle bits and a specific pipe, returns which | |
546 | * instruction the bundle contains in that pipe. | |
547 | */ | |
548 | extern const struct tilepro_opcode * | |
549 | find_opcode(tilepro_bundle_bits bits, tilepro_pipeline pipe); | |
550 | ||
551 | ||
552 | ||
553 | #endif /* opcode_tilepro_h */ |