• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* TILEPro opcode information.
2   *
3   *    Copyright (C) 2011-2014 Free Software Foundation, Inc.
4   *
5   *    This program is free software; you can redistribute it and/or modify
6   *    it under the terms of the GNU General Public License as published by
7   *    the Free Software Foundation; either version 3 of the License, or
8   *    (at your option) any later version.
9   *
10   *    This program is distributed in the hope that it will be useful,
11   *    but WITHOUT ANY WARRANTY; without even the implied warranty of
12   *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   *    GNU General Public License for more details.
14   *
15   *    You should have received a copy of the GNU General Public License
16   *    along with this program; if not, write to the Free Software
17   *    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
18   *    MA 02110-1301, USA.
19   */
20  
21  #ifndef opcode_tilepro_h
22  #define opcode_tilepro_h
23  
24  typedef unsigned long long tilepro_bundle_bits;
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_LW_TLS,
40    TILEPRO_OPC_LW_TLS_SN,
41    TILEPRO_OPC_MOVE,
42    TILEPRO_OPC_MOVE_SN,
43    TILEPRO_OPC_MOVEI,
44    TILEPRO_OPC_MOVEI_SN,
45    TILEPRO_OPC_MOVELI,
46    TILEPRO_OPC_MOVELI_SN,
47    TILEPRO_OPC_MOVELIS,
48    TILEPRO_OPC_PREFETCH,
49    TILEPRO_OPC_RAISE,
50    TILEPRO_OPC_ADD,
51    TILEPRO_OPC_ADD_SN,
52    TILEPRO_OPC_ADDB,
53    TILEPRO_OPC_ADDB_SN,
54    TILEPRO_OPC_ADDBS_U,
55    TILEPRO_OPC_ADDBS_U_SN,
56    TILEPRO_OPC_ADDH,
57    TILEPRO_OPC_ADDH_SN,
58    TILEPRO_OPC_ADDHS,
59    TILEPRO_OPC_ADDHS_SN,
60    TILEPRO_OPC_ADDI,
61    TILEPRO_OPC_ADDI_SN,
62    TILEPRO_OPC_ADDIB,
63    TILEPRO_OPC_ADDIB_SN,
64    TILEPRO_OPC_ADDIH,
65    TILEPRO_OPC_ADDIH_SN,
66    TILEPRO_OPC_ADDLI,
67    TILEPRO_OPC_ADDLI_SN,
68    TILEPRO_OPC_ADDLIS,
69    TILEPRO_OPC_ADDS,
70    TILEPRO_OPC_ADDS_SN,
71    TILEPRO_OPC_ADIFFB_U,
72    TILEPRO_OPC_ADIFFB_U_SN,
73    TILEPRO_OPC_ADIFFH,
74    TILEPRO_OPC_ADIFFH_SN,
75    TILEPRO_OPC_AND,
76    TILEPRO_OPC_AND_SN,
77    TILEPRO_OPC_ANDI,
78    TILEPRO_OPC_ANDI_SN,
79    TILEPRO_OPC_AULI,
80    TILEPRO_OPC_AVGB_U,
81    TILEPRO_OPC_AVGB_U_SN,
82    TILEPRO_OPC_AVGH,
83    TILEPRO_OPC_AVGH_SN,
84    TILEPRO_OPC_BBNS,
85    TILEPRO_OPC_BBNS_SN,
86    TILEPRO_OPC_BBNST,
87    TILEPRO_OPC_BBNST_SN,
88    TILEPRO_OPC_BBS,
89    TILEPRO_OPC_BBS_SN,
90    TILEPRO_OPC_BBST,
91    TILEPRO_OPC_BBST_SN,
92    TILEPRO_OPC_BGEZ,
93    TILEPRO_OPC_BGEZ_SN,
94    TILEPRO_OPC_BGEZT,
95    TILEPRO_OPC_BGEZT_SN,
96    TILEPRO_OPC_BGZ,
97    TILEPRO_OPC_BGZ_SN,
98    TILEPRO_OPC_BGZT,
99    TILEPRO_OPC_BGZT_SN,
100    TILEPRO_OPC_BITX,
101    TILEPRO_OPC_BITX_SN,
102    TILEPRO_OPC_BLEZ,
103    TILEPRO_OPC_BLEZ_SN,
104    TILEPRO_OPC_BLEZT,
105    TILEPRO_OPC_BLEZT_SN,
106    TILEPRO_OPC_BLZ,
107    TILEPRO_OPC_BLZ_SN,
108    TILEPRO_OPC_BLZT,
109    TILEPRO_OPC_BLZT_SN,
110    TILEPRO_OPC_BNZ,
111    TILEPRO_OPC_BNZ_SN,
112    TILEPRO_OPC_BNZT,
113    TILEPRO_OPC_BNZT_SN,
114    TILEPRO_OPC_BYTEX,
115    TILEPRO_OPC_BYTEX_SN,
116    TILEPRO_OPC_BZ,
117    TILEPRO_OPC_BZ_SN,
118    TILEPRO_OPC_BZT,
119    TILEPRO_OPC_BZT_SN,
120    TILEPRO_OPC_CLZ,
121    TILEPRO_OPC_CLZ_SN,
122    TILEPRO_OPC_CRC32_32,
123    TILEPRO_OPC_CRC32_32_SN,
124    TILEPRO_OPC_CRC32_8,
125    TILEPRO_OPC_CRC32_8_SN,
126    TILEPRO_OPC_CTZ,
127    TILEPRO_OPC_CTZ_SN,
128    TILEPRO_OPC_DRAIN,
129    TILEPRO_OPC_DTLBPR,
130    TILEPRO_OPC_DWORD_ALIGN,
131    TILEPRO_OPC_DWORD_ALIGN_SN,
132    TILEPRO_OPC_FINV,
133    TILEPRO_OPC_FLUSH,
134    TILEPRO_OPC_FNOP,
135    TILEPRO_OPC_ICOH,
136    TILEPRO_OPC_ILL,
137    TILEPRO_OPC_INTHB,
138    TILEPRO_OPC_INTHB_SN,
139    TILEPRO_OPC_INTHH,
140    TILEPRO_OPC_INTHH_SN,
141    TILEPRO_OPC_INTLB,
142    TILEPRO_OPC_INTLB_SN,
143    TILEPRO_OPC_INTLH,
144    TILEPRO_OPC_INTLH_SN,
145    TILEPRO_OPC_INV,
146    TILEPRO_OPC_IRET,
147    TILEPRO_OPC_JALB,
148    TILEPRO_OPC_JALF,
149    TILEPRO_OPC_JALR,
150    TILEPRO_OPC_JALRP,
151    TILEPRO_OPC_JB,
152    TILEPRO_OPC_JF,
153    TILEPRO_OPC_JR,
154    TILEPRO_OPC_JRP,
155    TILEPRO_OPC_LB,
156    TILEPRO_OPC_LB_SN,
157    TILEPRO_OPC_LB_U,
158    TILEPRO_OPC_LB_U_SN,
159    TILEPRO_OPC_LBADD,
160    TILEPRO_OPC_LBADD_SN,
161    TILEPRO_OPC_LBADD_U,
162    TILEPRO_OPC_LBADD_U_SN,
163    TILEPRO_OPC_LH,
164    TILEPRO_OPC_LH_SN,
165    TILEPRO_OPC_LH_U,
166    TILEPRO_OPC_LH_U_SN,
167    TILEPRO_OPC_LHADD,
168    TILEPRO_OPC_LHADD_SN,
169    TILEPRO_OPC_LHADD_U,
170    TILEPRO_OPC_LHADD_U_SN,
171    TILEPRO_OPC_LNK,
172    TILEPRO_OPC_LNK_SN,
173    TILEPRO_OPC_LW,
174    TILEPRO_OPC_LW_SN,
175    TILEPRO_OPC_LW_NA,
176    TILEPRO_OPC_LW_NA_SN,
177    TILEPRO_OPC_LWADD,
178    TILEPRO_OPC_LWADD_SN,
179    TILEPRO_OPC_LWADD_NA,
180    TILEPRO_OPC_LWADD_NA_SN,
181    TILEPRO_OPC_MAXB_U,
182    TILEPRO_OPC_MAXB_U_SN,
183    TILEPRO_OPC_MAXH,
184    TILEPRO_OPC_MAXH_SN,
185    TILEPRO_OPC_MAXIB_U,
186    TILEPRO_OPC_MAXIB_U_SN,
187    TILEPRO_OPC_MAXIH,
188    TILEPRO_OPC_MAXIH_SN,
189    TILEPRO_OPC_MF,
190    TILEPRO_OPC_MFSPR,
191    TILEPRO_OPC_MINB_U,
192    TILEPRO_OPC_MINB_U_SN,
193    TILEPRO_OPC_MINH,
194    TILEPRO_OPC_MINH_SN,
195    TILEPRO_OPC_MINIB_U,
196    TILEPRO_OPC_MINIB_U_SN,
197    TILEPRO_OPC_MINIH,
198    TILEPRO_OPC_MINIH_SN,
199    TILEPRO_OPC_MM,
200    TILEPRO_OPC_MNZ,
201    TILEPRO_OPC_MNZ_SN,
202    TILEPRO_OPC_MNZB,
203    TILEPRO_OPC_MNZB_SN,
204    TILEPRO_OPC_MNZH,
205    TILEPRO_OPC_MNZH_SN,
206    TILEPRO_OPC_MTSPR,
207    TILEPRO_OPC_MULHH_SS,
208    TILEPRO_OPC_MULHH_SS_SN,
209    TILEPRO_OPC_MULHH_SU,
210    TILEPRO_OPC_MULHH_SU_SN,
211    TILEPRO_OPC_MULHH_UU,
212    TILEPRO_OPC_MULHH_UU_SN,
213    TILEPRO_OPC_MULHHA_SS,
214    TILEPRO_OPC_MULHHA_SS_SN,
215    TILEPRO_OPC_MULHHA_SU,
216    TILEPRO_OPC_MULHHA_SU_SN,
217    TILEPRO_OPC_MULHHA_UU,
218    TILEPRO_OPC_MULHHA_UU_SN,
219    TILEPRO_OPC_MULHHSA_UU,
220    TILEPRO_OPC_MULHHSA_UU_SN,
221    TILEPRO_OPC_MULHL_SS,
222    TILEPRO_OPC_MULHL_SS_SN,
223    TILEPRO_OPC_MULHL_SU,
224    TILEPRO_OPC_MULHL_SU_SN,
225    TILEPRO_OPC_MULHL_US,
226    TILEPRO_OPC_MULHL_US_SN,
227    TILEPRO_OPC_MULHL_UU,
228    TILEPRO_OPC_MULHL_UU_SN,
229    TILEPRO_OPC_MULHLA_SS,
230    TILEPRO_OPC_MULHLA_SS_SN,
231    TILEPRO_OPC_MULHLA_SU,
232    TILEPRO_OPC_MULHLA_SU_SN,
233    TILEPRO_OPC_MULHLA_US,
234    TILEPRO_OPC_MULHLA_US_SN,
235    TILEPRO_OPC_MULHLA_UU,
236    TILEPRO_OPC_MULHLA_UU_SN,
237    TILEPRO_OPC_MULHLSA_UU,
238    TILEPRO_OPC_MULHLSA_UU_SN,
239    TILEPRO_OPC_MULLL_SS,
240    TILEPRO_OPC_MULLL_SS_SN,
241    TILEPRO_OPC_MULLL_SU,
242    TILEPRO_OPC_MULLL_SU_SN,
243    TILEPRO_OPC_MULLL_UU,
244    TILEPRO_OPC_MULLL_UU_SN,
245    TILEPRO_OPC_MULLLA_SS,
246    TILEPRO_OPC_MULLLA_SS_SN,
247    TILEPRO_OPC_MULLLA_SU,
248    TILEPRO_OPC_MULLLA_SU_SN,
249    TILEPRO_OPC_MULLLA_UU,
250    TILEPRO_OPC_MULLLA_UU_SN,
251    TILEPRO_OPC_MULLLSA_UU,
252    TILEPRO_OPC_MULLLSA_UU_SN,
253    TILEPRO_OPC_MVNZ,
254    TILEPRO_OPC_MVNZ_SN,
255    TILEPRO_OPC_MVZ,
256    TILEPRO_OPC_MVZ_SN,
257    TILEPRO_OPC_MZ,
258    TILEPRO_OPC_MZ_SN,
259    TILEPRO_OPC_MZB,
260    TILEPRO_OPC_MZB_SN,
261    TILEPRO_OPC_MZH,
262    TILEPRO_OPC_MZH_SN,
263    TILEPRO_OPC_NAP,
264    TILEPRO_OPC_NOP,
265    TILEPRO_OPC_NOR,
266    TILEPRO_OPC_NOR_SN,
267    TILEPRO_OPC_OR,
268    TILEPRO_OPC_OR_SN,
269    TILEPRO_OPC_ORI,
270    TILEPRO_OPC_ORI_SN,
271    TILEPRO_OPC_PACKBS_U,
272    TILEPRO_OPC_PACKBS_U_SN,
273    TILEPRO_OPC_PACKHB,
274    TILEPRO_OPC_PACKHB_SN,
275    TILEPRO_OPC_PACKHS,
276    TILEPRO_OPC_PACKHS_SN,
277    TILEPRO_OPC_PACKLB,
278    TILEPRO_OPC_PACKLB_SN,
279    TILEPRO_OPC_PCNT,
280    TILEPRO_OPC_PCNT_SN,
281    TILEPRO_OPC_RL,
282    TILEPRO_OPC_RL_SN,
283    TILEPRO_OPC_RLI,
284    TILEPRO_OPC_RLI_SN,
285    TILEPRO_OPC_S1A,
286    TILEPRO_OPC_S1A_SN,
287    TILEPRO_OPC_S2A,
288    TILEPRO_OPC_S2A_SN,
289    TILEPRO_OPC_S3A,
290    TILEPRO_OPC_S3A_SN,
291    TILEPRO_OPC_SADAB_U,
292    TILEPRO_OPC_SADAB_U_SN,
293    TILEPRO_OPC_SADAH,
294    TILEPRO_OPC_SADAH_SN,
295    TILEPRO_OPC_SADAH_U,
296    TILEPRO_OPC_SADAH_U_SN,
297    TILEPRO_OPC_SADB_U,
298    TILEPRO_OPC_SADB_U_SN,
299    TILEPRO_OPC_SADH,
300    TILEPRO_OPC_SADH_SN,
301    TILEPRO_OPC_SADH_U,
302    TILEPRO_OPC_SADH_U_SN,
303    TILEPRO_OPC_SB,
304    TILEPRO_OPC_SBADD,
305    TILEPRO_OPC_SEQ,
306    TILEPRO_OPC_SEQ_SN,
307    TILEPRO_OPC_SEQB,
308    TILEPRO_OPC_SEQB_SN,
309    TILEPRO_OPC_SEQH,
310    TILEPRO_OPC_SEQH_SN,
311    TILEPRO_OPC_SEQI,
312    TILEPRO_OPC_SEQI_SN,
313    TILEPRO_OPC_SEQIB,
314    TILEPRO_OPC_SEQIB_SN,
315    TILEPRO_OPC_SEQIH,
316    TILEPRO_OPC_SEQIH_SN,
317    TILEPRO_OPC_SH,
318    TILEPRO_OPC_SHADD,
319    TILEPRO_OPC_SHL,
320    TILEPRO_OPC_SHL_SN,
321    TILEPRO_OPC_SHLB,
322    TILEPRO_OPC_SHLB_SN,
323    TILEPRO_OPC_SHLH,
324    TILEPRO_OPC_SHLH_SN,
325    TILEPRO_OPC_SHLI,
326    TILEPRO_OPC_SHLI_SN,
327    TILEPRO_OPC_SHLIB,
328    TILEPRO_OPC_SHLIB_SN,
329    TILEPRO_OPC_SHLIH,
330    TILEPRO_OPC_SHLIH_SN,
331    TILEPRO_OPC_SHR,
332    TILEPRO_OPC_SHR_SN,
333    TILEPRO_OPC_SHRB,
334    TILEPRO_OPC_SHRB_SN,
335    TILEPRO_OPC_SHRH,
336    TILEPRO_OPC_SHRH_SN,
337    TILEPRO_OPC_SHRI,
338    TILEPRO_OPC_SHRI_SN,
339    TILEPRO_OPC_SHRIB,
340    TILEPRO_OPC_SHRIB_SN,
341    TILEPRO_OPC_SHRIH,
342    TILEPRO_OPC_SHRIH_SN,
343    TILEPRO_OPC_SLT,
344    TILEPRO_OPC_SLT_SN,
345    TILEPRO_OPC_SLT_U,
346    TILEPRO_OPC_SLT_U_SN,
347    TILEPRO_OPC_SLTB,
348    TILEPRO_OPC_SLTB_SN,
349    TILEPRO_OPC_SLTB_U,
350    TILEPRO_OPC_SLTB_U_SN,
351    TILEPRO_OPC_SLTE,
352    TILEPRO_OPC_SLTE_SN,
353    TILEPRO_OPC_SLTE_U,
354    TILEPRO_OPC_SLTE_U_SN,
355    TILEPRO_OPC_SLTEB,
356    TILEPRO_OPC_SLTEB_SN,
357    TILEPRO_OPC_SLTEB_U,
358    TILEPRO_OPC_SLTEB_U_SN,
359    TILEPRO_OPC_SLTEH,
360    TILEPRO_OPC_SLTEH_SN,
361    TILEPRO_OPC_SLTEH_U,
362    TILEPRO_OPC_SLTEH_U_SN,
363    TILEPRO_OPC_SLTH,
364    TILEPRO_OPC_SLTH_SN,
365    TILEPRO_OPC_SLTH_U,
366    TILEPRO_OPC_SLTH_U_SN,
367    TILEPRO_OPC_SLTI,
368    TILEPRO_OPC_SLTI_SN,
369    TILEPRO_OPC_SLTI_U,
370    TILEPRO_OPC_SLTI_U_SN,
371    TILEPRO_OPC_SLTIB,
372    TILEPRO_OPC_SLTIB_SN,
373    TILEPRO_OPC_SLTIB_U,
374    TILEPRO_OPC_SLTIB_U_SN,
375    TILEPRO_OPC_SLTIH,
376    TILEPRO_OPC_SLTIH_SN,
377    TILEPRO_OPC_SLTIH_U,
378    TILEPRO_OPC_SLTIH_U_SN,
379    TILEPRO_OPC_SNE,
380    TILEPRO_OPC_SNE_SN,
381    TILEPRO_OPC_SNEB,
382    TILEPRO_OPC_SNEB_SN,
383    TILEPRO_OPC_SNEH,
384    TILEPRO_OPC_SNEH_SN,
385    TILEPRO_OPC_SRA,
386    TILEPRO_OPC_SRA_SN,
387    TILEPRO_OPC_SRAB,
388    TILEPRO_OPC_SRAB_SN,
389    TILEPRO_OPC_SRAH,
390    TILEPRO_OPC_SRAH_SN,
391    TILEPRO_OPC_SRAI,
392    TILEPRO_OPC_SRAI_SN,
393    TILEPRO_OPC_SRAIB,
394    TILEPRO_OPC_SRAIB_SN,
395    TILEPRO_OPC_SRAIH,
396    TILEPRO_OPC_SRAIH_SN,
397    TILEPRO_OPC_SUB,
398    TILEPRO_OPC_SUB_SN,
399    TILEPRO_OPC_SUBB,
400    TILEPRO_OPC_SUBB_SN,
401    TILEPRO_OPC_SUBBS_U,
402    TILEPRO_OPC_SUBBS_U_SN,
403    TILEPRO_OPC_SUBH,
404    TILEPRO_OPC_SUBH_SN,
405    TILEPRO_OPC_SUBHS,
406    TILEPRO_OPC_SUBHS_SN,
407    TILEPRO_OPC_SUBS,
408    TILEPRO_OPC_SUBS_SN,
409    TILEPRO_OPC_SW,
410    TILEPRO_OPC_SWADD,
411    TILEPRO_OPC_SWINT0,
412    TILEPRO_OPC_SWINT1,
413    TILEPRO_OPC_SWINT2,
414    TILEPRO_OPC_SWINT3,
415    TILEPRO_OPC_TBLIDXB0,
416    TILEPRO_OPC_TBLIDXB0_SN,
417    TILEPRO_OPC_TBLIDXB1,
418    TILEPRO_OPC_TBLIDXB1_SN,
419    TILEPRO_OPC_TBLIDXB2,
420    TILEPRO_OPC_TBLIDXB2_SN,
421    TILEPRO_OPC_TBLIDXB3,
422    TILEPRO_OPC_TBLIDXB3_SN,
423    TILEPRO_OPC_TNS,
424    TILEPRO_OPC_TNS_SN,
425    TILEPRO_OPC_WH64,
426    TILEPRO_OPC_XOR,
427    TILEPRO_OPC_XOR_SN,
428    TILEPRO_OPC_XORI,
429    TILEPRO_OPC_XORI_SN,
430    TILEPRO_OPC_NONE
431  } tilepro_mnemonic;
432  
433  /* 64-bit pattern for a { bpt ; nop } bundle. */
434  #define TILEPRO_BPT_BUNDLE 0x400b3cae70166000ULL
435  
436  #ifndef DISASM_ONLY
437  
438  enum
439  {
440    TILEPRO_SN_MAX_OPERANDS = 6 /* route */
441  };
442  
443  typedef enum
444  {
445    TILEPRO_SN_OPC_BZ,
446    TILEPRO_SN_OPC_BNZ,
447    TILEPRO_SN_OPC_JRR,
448    TILEPRO_SN_OPC_FNOP,
449    TILEPRO_SN_OPC_BLZ,
450    TILEPRO_SN_OPC_NOP,
451    TILEPRO_SN_OPC_MOVEI,
452    TILEPRO_SN_OPC_MOVE,
453    TILEPRO_SN_OPC_BGEZ,
454    TILEPRO_SN_OPC_JR,
455    TILEPRO_SN_OPC_BLEZ,
456    TILEPRO_SN_OPC_BBNS,
457    TILEPRO_SN_OPC_JALRR,
458    TILEPRO_SN_OPC_BPT,
459    TILEPRO_SN_OPC_JALR,
460    TILEPRO_SN_OPC_SHR1,
461    TILEPRO_SN_OPC_BGZ,
462    TILEPRO_SN_OPC_BBS,
463    TILEPRO_SN_OPC_SHL8II,
464    TILEPRO_SN_OPC_ADDI,
465    TILEPRO_SN_OPC_HALT,
466    TILEPRO_SN_OPC_ROUTE,
467    TILEPRO_SN_OPC_NONE
468  } tilepro_sn_mnemonic;
469  
470  extern const unsigned char tilepro_sn_route_encode[6 * 6 * 6];
471  extern const signed char tilepro_sn_route_decode[256][3];
472  extern const char tilepro_sn_direction_names[6][5];
473  extern const signed char tilepro_sn_dest_map[6][6];
474  #endif /* DISASM_ONLY */
475  
476  
477  static __inline unsigned int
get_BrOff_SN(tilepro_bundle_bits num)478  get_BrOff_SN(tilepro_bundle_bits num)
479  {
480    const unsigned int n = (unsigned int)num;
481    return (((n >> 0)) & 0x3ff);
482  }
483  
484  static __inline unsigned int
get_BrOff_X1(tilepro_bundle_bits n)485  get_BrOff_X1(tilepro_bundle_bits n)
486  {
487    return (((unsigned int)(n >> 43)) & 0x00007fff) |
488           (((unsigned int)(n >> 20)) & 0x00018000);
489  }
490  
491  static __inline unsigned int
get_BrType_X1(tilepro_bundle_bits n)492  get_BrType_X1(tilepro_bundle_bits n)
493  {
494    return (((unsigned int)(n >> 31)) & 0xf);
495  }
496  
497  static __inline unsigned int
get_Dest_Imm8_X1(tilepro_bundle_bits n)498  get_Dest_Imm8_X1(tilepro_bundle_bits n)
499  {
500    return (((unsigned int)(n >> 31)) & 0x0000003f) |
501           (((unsigned int)(n >> 43)) & 0x000000c0);
502  }
503  
504  static __inline unsigned int
get_Dest_SN(tilepro_bundle_bits num)505  get_Dest_SN(tilepro_bundle_bits num)
506  {
507    const unsigned int n = (unsigned int)num;
508    return (((n >> 2)) & 0x3);
509  }
510  
511  static __inline unsigned int
get_Dest_X0(tilepro_bundle_bits num)512  get_Dest_X0(tilepro_bundle_bits num)
513  {
514    const unsigned int n = (unsigned int)num;
515    return (((n >> 0)) & 0x3f);
516  }
517  
518  static __inline unsigned int
get_Dest_X1(tilepro_bundle_bits n)519  get_Dest_X1(tilepro_bundle_bits n)
520  {
521    return (((unsigned int)(n >> 31)) & 0x3f);
522  }
523  
524  static __inline unsigned int
get_Dest_Y0(tilepro_bundle_bits num)525  get_Dest_Y0(tilepro_bundle_bits num)
526  {
527    const unsigned int n = (unsigned int)num;
528    return (((n >> 0)) & 0x3f);
529  }
530  
531  static __inline unsigned int
get_Dest_Y1(tilepro_bundle_bits n)532  get_Dest_Y1(tilepro_bundle_bits n)
533  {
534    return (((unsigned int)(n >> 31)) & 0x3f);
535  }
536  
537  static __inline unsigned int
get_Imm16_X0(tilepro_bundle_bits num)538  get_Imm16_X0(tilepro_bundle_bits num)
539  {
540    const unsigned int n = (unsigned int)num;
541    return (((n >> 12)) & 0xffff);
542  }
543  
544  static __inline unsigned int
get_Imm16_X1(tilepro_bundle_bits n)545  get_Imm16_X1(tilepro_bundle_bits n)
546  {
547    return (((unsigned int)(n >> 43)) & 0xffff);
548  }
549  
550  static __inline unsigned int
get_Imm8_SN(tilepro_bundle_bits num)551  get_Imm8_SN(tilepro_bundle_bits num)
552  {
553    const unsigned int n = (unsigned int)num;
554    return (((n >> 0)) & 0xff);
555  }
556  
557  static __inline unsigned int
get_Imm8_X0(tilepro_bundle_bits num)558  get_Imm8_X0(tilepro_bundle_bits num)
559  {
560    const unsigned int n = (unsigned int)num;
561    return (((n >> 12)) & 0xff);
562  }
563  
564  static __inline unsigned int
get_Imm8_X1(tilepro_bundle_bits n)565  get_Imm8_X1(tilepro_bundle_bits n)
566  {
567    return (((unsigned int)(n >> 43)) & 0xff);
568  }
569  
570  static __inline unsigned int
get_Imm8_Y0(tilepro_bundle_bits num)571  get_Imm8_Y0(tilepro_bundle_bits num)
572  {
573    const unsigned int n = (unsigned int)num;
574    return (((n >> 12)) & 0xff);
575  }
576  
577  static __inline unsigned int
get_Imm8_Y1(tilepro_bundle_bits n)578  get_Imm8_Y1(tilepro_bundle_bits n)
579  {
580    return (((unsigned int)(n >> 43)) & 0xff);
581  }
582  
583  static __inline unsigned int
get_ImmOpcodeExtension_X0(tilepro_bundle_bits num)584  get_ImmOpcodeExtension_X0(tilepro_bundle_bits num)
585  {
586    const unsigned int n = (unsigned int)num;
587    return (((n >> 20)) & 0x7f);
588  }
589  
590  static __inline unsigned int
get_ImmOpcodeExtension_X1(tilepro_bundle_bits n)591  get_ImmOpcodeExtension_X1(tilepro_bundle_bits n)
592  {
593    return (((unsigned int)(n >> 51)) & 0x7f);
594  }
595  
596  static __inline unsigned int
get_ImmRROpcodeExtension_SN(tilepro_bundle_bits num)597  get_ImmRROpcodeExtension_SN(tilepro_bundle_bits num)
598  {
599    const unsigned int n = (unsigned int)num;
600    return (((n >> 8)) & 0x3);
601  }
602  
603  static __inline unsigned int
get_JOffLong_X1(tilepro_bundle_bits n)604  get_JOffLong_X1(tilepro_bundle_bits n)
605  {
606    return (((unsigned int)(n >> 43)) & 0x00007fff) |
607           (((unsigned int)(n >> 20)) & 0x00018000) |
608           (((unsigned int)(n >> 14)) & 0x001e0000) |
609           (((unsigned int)(n >> 16)) & 0x07e00000) |
610           (((unsigned int)(n >> 31)) & 0x18000000);
611  }
612  
613  static __inline unsigned int
get_JOff_X1(tilepro_bundle_bits n)614  get_JOff_X1(tilepro_bundle_bits n)
615  {
616    return (((unsigned int)(n >> 43)) & 0x00007fff) |
617           (((unsigned int)(n >> 20)) & 0x00018000) |
618           (((unsigned int)(n >> 14)) & 0x001e0000) |
619           (((unsigned int)(n >> 16)) & 0x07e00000) |
620           (((unsigned int)(n >> 31)) & 0x08000000);
621  }
622  
623  static __inline unsigned int
get_MF_Imm15_X1(tilepro_bundle_bits n)624  get_MF_Imm15_X1(tilepro_bundle_bits n)
625  {
626    return (((unsigned int)(n >> 37)) & 0x00003fff) |
627           (((unsigned int)(n >> 44)) & 0x00004000);
628  }
629  
630  static __inline unsigned int
get_MMEnd_X0(tilepro_bundle_bits num)631  get_MMEnd_X0(tilepro_bundle_bits num)
632  {
633    const unsigned int n = (unsigned int)num;
634    return (((n >> 18)) & 0x1f);
635  }
636  
637  static __inline unsigned int
get_MMEnd_X1(tilepro_bundle_bits n)638  get_MMEnd_X1(tilepro_bundle_bits n)
639  {
640    return (((unsigned int)(n >> 49)) & 0x1f);
641  }
642  
643  static __inline unsigned int
get_MMStart_X0(tilepro_bundle_bits num)644  get_MMStart_X0(tilepro_bundle_bits num)
645  {
646    const unsigned int n = (unsigned int)num;
647    return (((n >> 23)) & 0x1f);
648  }
649  
650  static __inline unsigned int
get_MMStart_X1(tilepro_bundle_bits n)651  get_MMStart_X1(tilepro_bundle_bits n)
652  {
653    return (((unsigned int)(n >> 54)) & 0x1f);
654  }
655  
656  static __inline unsigned int
get_MT_Imm15_X1(tilepro_bundle_bits n)657  get_MT_Imm15_X1(tilepro_bundle_bits n)
658  {
659    return (((unsigned int)(n >> 31)) & 0x0000003f) |
660           (((unsigned int)(n >> 37)) & 0x00003fc0) |
661           (((unsigned int)(n >> 44)) & 0x00004000);
662  }
663  
664  static __inline unsigned int
get_Mode(tilepro_bundle_bits n)665  get_Mode(tilepro_bundle_bits n)
666  {
667    return (((unsigned int)(n >> 63)) & 0x1);
668  }
669  
670  static __inline unsigned int
get_NoRegOpcodeExtension_SN(tilepro_bundle_bits num)671  get_NoRegOpcodeExtension_SN(tilepro_bundle_bits num)
672  {
673    const unsigned int n = (unsigned int)num;
674    return (((n >> 0)) & 0xf);
675  }
676  
677  static __inline unsigned int
get_Opcode_SN(tilepro_bundle_bits num)678  get_Opcode_SN(tilepro_bundle_bits num)
679  {
680    const unsigned int n = (unsigned int)num;
681    return (((n >> 10)) & 0x3f);
682  }
683  
684  static __inline unsigned int
get_Opcode_X0(tilepro_bundle_bits num)685  get_Opcode_X0(tilepro_bundle_bits num)
686  {
687    const unsigned int n = (unsigned int)num;
688    return (((n >> 28)) & 0x7);
689  }
690  
691  static __inline unsigned int
get_Opcode_X1(tilepro_bundle_bits n)692  get_Opcode_X1(tilepro_bundle_bits n)
693  {
694    return (((unsigned int)(n >> 59)) & 0xf);
695  }
696  
697  static __inline unsigned int
get_Opcode_Y0(tilepro_bundle_bits num)698  get_Opcode_Y0(tilepro_bundle_bits num)
699  {
700    const unsigned int n = (unsigned int)num;
701    return (((n >> 27)) & 0xf);
702  }
703  
704  static __inline unsigned int
get_Opcode_Y1(tilepro_bundle_bits n)705  get_Opcode_Y1(tilepro_bundle_bits n)
706  {
707    return (((unsigned int)(n >> 59)) & 0xf);
708  }
709  
710  static __inline unsigned int
get_Opcode_Y2(tilepro_bundle_bits n)711  get_Opcode_Y2(tilepro_bundle_bits n)
712  {
713    return (((unsigned int)(n >> 56)) & 0x7);
714  }
715  
716  static __inline unsigned int
get_RROpcodeExtension_SN(tilepro_bundle_bits num)717  get_RROpcodeExtension_SN(tilepro_bundle_bits num)
718  {
719    const unsigned int n = (unsigned int)num;
720    return (((n >> 4)) & 0xf);
721  }
722  
723  static __inline unsigned int
get_RRROpcodeExtension_X0(tilepro_bundle_bits num)724  get_RRROpcodeExtension_X0(tilepro_bundle_bits num)
725  {
726    const unsigned int n = (unsigned int)num;
727    return (((n >> 18)) & 0x1ff);
728  }
729  
730  static __inline unsigned int
get_RRROpcodeExtension_X1(tilepro_bundle_bits n)731  get_RRROpcodeExtension_X1(tilepro_bundle_bits n)
732  {
733    return (((unsigned int)(n >> 49)) & 0x1ff);
734  }
735  
736  static __inline unsigned int
get_RRROpcodeExtension_Y0(tilepro_bundle_bits num)737  get_RRROpcodeExtension_Y0(tilepro_bundle_bits num)
738  {
739    const unsigned int n = (unsigned int)num;
740    return (((n >> 18)) & 0x3);
741  }
742  
743  static __inline unsigned int
get_RRROpcodeExtension_Y1(tilepro_bundle_bits n)744  get_RRROpcodeExtension_Y1(tilepro_bundle_bits n)
745  {
746    return (((unsigned int)(n >> 49)) & 0x3);
747  }
748  
749  static __inline unsigned int
get_RouteOpcodeExtension_SN(tilepro_bundle_bits num)750  get_RouteOpcodeExtension_SN(tilepro_bundle_bits num)
751  {
752    const unsigned int n = (unsigned int)num;
753    return (((n >> 0)) & 0x3ff);
754  }
755  
756  static __inline unsigned int
get_S_X0(tilepro_bundle_bits num)757  get_S_X0(tilepro_bundle_bits num)
758  {
759    const unsigned int n = (unsigned int)num;
760    return (((n >> 27)) & 0x1);
761  }
762  
763  static __inline unsigned int
get_S_X1(tilepro_bundle_bits n)764  get_S_X1(tilepro_bundle_bits n)
765  {
766    return (((unsigned int)(n >> 58)) & 0x1);
767  }
768  
769  static __inline unsigned int
get_ShAmt_X0(tilepro_bundle_bits num)770  get_ShAmt_X0(tilepro_bundle_bits num)
771  {
772    const unsigned int n = (unsigned int)num;
773    return (((n >> 12)) & 0x1f);
774  }
775  
776  static __inline unsigned int
get_ShAmt_X1(tilepro_bundle_bits n)777  get_ShAmt_X1(tilepro_bundle_bits n)
778  {
779    return (((unsigned int)(n >> 43)) & 0x1f);
780  }
781  
782  static __inline unsigned int
get_ShAmt_Y0(tilepro_bundle_bits num)783  get_ShAmt_Y0(tilepro_bundle_bits num)
784  {
785    const unsigned int n = (unsigned int)num;
786    return (((n >> 12)) & 0x1f);
787  }
788  
789  static __inline unsigned int
get_ShAmt_Y1(tilepro_bundle_bits n)790  get_ShAmt_Y1(tilepro_bundle_bits n)
791  {
792    return (((unsigned int)(n >> 43)) & 0x1f);
793  }
794  
795  static __inline unsigned int
get_SrcA_X0(tilepro_bundle_bits num)796  get_SrcA_X0(tilepro_bundle_bits num)
797  {
798    const unsigned int n = (unsigned int)num;
799    return (((n >> 6)) & 0x3f);
800  }
801  
802  static __inline unsigned int
get_SrcA_X1(tilepro_bundle_bits n)803  get_SrcA_X1(tilepro_bundle_bits n)
804  {
805    return (((unsigned int)(n >> 37)) & 0x3f);
806  }
807  
808  static __inline unsigned int
get_SrcA_Y0(tilepro_bundle_bits num)809  get_SrcA_Y0(tilepro_bundle_bits num)
810  {
811    const unsigned int n = (unsigned int)num;
812    return (((n >> 6)) & 0x3f);
813  }
814  
815  static __inline unsigned int
get_SrcA_Y1(tilepro_bundle_bits n)816  get_SrcA_Y1(tilepro_bundle_bits n)
817  {
818    return (((unsigned int)(n >> 37)) & 0x3f);
819  }
820  
821  static __inline unsigned int
get_SrcA_Y2(tilepro_bundle_bits n)822  get_SrcA_Y2(tilepro_bundle_bits n)
823  {
824    return (((n >> 26)) & 0x00000001) |
825           (((unsigned int)(n >> 50)) & 0x0000003e);
826  }
827  
828  static __inline unsigned int
get_SrcBDest_Y2(tilepro_bundle_bits num)829  get_SrcBDest_Y2(tilepro_bundle_bits num)
830  {
831    const unsigned int n = (unsigned int)num;
832    return (((n >> 20)) & 0x3f);
833  }
834  
835  static __inline unsigned int
get_SrcB_X0(tilepro_bundle_bits num)836  get_SrcB_X0(tilepro_bundle_bits num)
837  {
838    const unsigned int n = (unsigned int)num;
839    return (((n >> 12)) & 0x3f);
840  }
841  
842  static __inline unsigned int
get_SrcB_X1(tilepro_bundle_bits n)843  get_SrcB_X1(tilepro_bundle_bits n)
844  {
845    return (((unsigned int)(n >> 43)) & 0x3f);
846  }
847  
848  static __inline unsigned int
get_SrcB_Y0(tilepro_bundle_bits num)849  get_SrcB_Y0(tilepro_bundle_bits num)
850  {
851    const unsigned int n = (unsigned int)num;
852    return (((n >> 12)) & 0x3f);
853  }
854  
855  static __inline unsigned int
get_SrcB_Y1(tilepro_bundle_bits n)856  get_SrcB_Y1(tilepro_bundle_bits n)
857  {
858    return (((unsigned int)(n >> 43)) & 0x3f);
859  }
860  
861  static __inline unsigned int
get_Src_SN(tilepro_bundle_bits num)862  get_Src_SN(tilepro_bundle_bits num)
863  {
864    const unsigned int n = (unsigned int)num;
865    return (((n >> 0)) & 0x3);
866  }
867  
868  static __inline unsigned int
get_UnOpcodeExtension_X0(tilepro_bundle_bits num)869  get_UnOpcodeExtension_X0(tilepro_bundle_bits num)
870  {
871    const unsigned int n = (unsigned int)num;
872    return (((n >> 12)) & 0x1f);
873  }
874  
875  static __inline unsigned int
get_UnOpcodeExtension_X1(tilepro_bundle_bits n)876  get_UnOpcodeExtension_X1(tilepro_bundle_bits n)
877  {
878    return (((unsigned int)(n >> 43)) & 0x1f);
879  }
880  
881  static __inline unsigned int
get_UnOpcodeExtension_Y0(tilepro_bundle_bits num)882  get_UnOpcodeExtension_Y0(tilepro_bundle_bits num)
883  {
884    const unsigned int n = (unsigned int)num;
885    return (((n >> 12)) & 0x1f);
886  }
887  
888  static __inline unsigned int
get_UnOpcodeExtension_Y1(tilepro_bundle_bits n)889  get_UnOpcodeExtension_Y1(tilepro_bundle_bits n)
890  {
891    return (((unsigned int)(n >> 43)) & 0x1f);
892  }
893  
894  static __inline unsigned int
get_UnShOpcodeExtension_X0(tilepro_bundle_bits num)895  get_UnShOpcodeExtension_X0(tilepro_bundle_bits num)
896  {
897    const unsigned int n = (unsigned int)num;
898    return (((n >> 17)) & 0x3ff);
899  }
900  
901  static __inline unsigned int
get_UnShOpcodeExtension_X1(tilepro_bundle_bits n)902  get_UnShOpcodeExtension_X1(tilepro_bundle_bits n)
903  {
904    return (((unsigned int)(n >> 48)) & 0x3ff);
905  }
906  
907  static __inline unsigned int
get_UnShOpcodeExtension_Y0(tilepro_bundle_bits num)908  get_UnShOpcodeExtension_Y0(tilepro_bundle_bits num)
909  {
910    const unsigned int n = (unsigned int)num;
911    return (((n >> 17)) & 0x7);
912  }
913  
914  static __inline unsigned int
get_UnShOpcodeExtension_Y1(tilepro_bundle_bits n)915  get_UnShOpcodeExtension_Y1(tilepro_bundle_bits n)
916  {
917    return (((unsigned int)(n >> 48)) & 0x7);
918  }
919  
920  
921  static __inline int
sign_extend(int n,int num_bits)922  sign_extend(int n, int num_bits)
923  {
924    int shift = (int)(sizeof(int) * 8 - num_bits);
925    return (n << shift) >> shift;
926  }
927  
928  
929  
930  static __inline tilepro_bundle_bits
create_BrOff_SN(int num)931  create_BrOff_SN(int num)
932  {
933    const unsigned int n = (unsigned int)num;
934    return ((n & 0x3ff) << 0);
935  }
936  
937  static __inline tilepro_bundle_bits
create_BrOff_X1(int num)938  create_BrOff_X1(int num)
939  {
940    const unsigned int n = (unsigned int)num;
941    return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
942           (((tilepro_bundle_bits)(n & 0x00018000)) << 20);
943  }
944  
945  static __inline tilepro_bundle_bits
create_BrType_X1(int num)946  create_BrType_X1(int num)
947  {
948    const unsigned int n = (unsigned int)num;
949    return (((tilepro_bundle_bits)(n & 0xf)) << 31);
950  }
951  
952  static __inline tilepro_bundle_bits
create_Dest_Imm8_X1(int num)953  create_Dest_Imm8_X1(int num)
954  {
955    const unsigned int n = (unsigned int)num;
956    return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) |
957           (((tilepro_bundle_bits)(n & 0x000000c0)) << 43);
958  }
959  
960  static __inline tilepro_bundle_bits
create_Dest_SN(int num)961  create_Dest_SN(int num)
962  {
963    const unsigned int n = (unsigned int)num;
964    return ((n & 0x3) << 2);
965  }
966  
967  static __inline tilepro_bundle_bits
create_Dest_X0(int num)968  create_Dest_X0(int num)
969  {
970    const unsigned int n = (unsigned int)num;
971    return ((n & 0x3f) << 0);
972  }
973  
974  static __inline tilepro_bundle_bits
create_Dest_X1(int num)975  create_Dest_X1(int num)
976  {
977    const unsigned int n = (unsigned int)num;
978    return (((tilepro_bundle_bits)(n & 0x3f)) << 31);
979  }
980  
981  static __inline tilepro_bundle_bits
create_Dest_Y0(int num)982  create_Dest_Y0(int num)
983  {
984    const unsigned int n = (unsigned int)num;
985    return ((n & 0x3f) << 0);
986  }
987  
988  static __inline tilepro_bundle_bits
create_Dest_Y1(int num)989  create_Dest_Y1(int num)
990  {
991    const unsigned int n = (unsigned int)num;
992    return (((tilepro_bundle_bits)(n & 0x3f)) << 31);
993  }
994  
995  static __inline tilepro_bundle_bits
create_Imm16_X0(int num)996  create_Imm16_X0(int num)
997  {
998    const unsigned int n = (unsigned int)num;
999    return ((n & 0xffff) << 12);
1000  }
1001  
1002  static __inline tilepro_bundle_bits
create_Imm16_X1(int num)1003  create_Imm16_X1(int num)
1004  {
1005    const unsigned int n = (unsigned int)num;
1006    return (((tilepro_bundle_bits)(n & 0xffff)) << 43);
1007  }
1008  
1009  static __inline tilepro_bundle_bits
create_Imm8_SN(int num)1010  create_Imm8_SN(int num)
1011  {
1012    const unsigned int n = (unsigned int)num;
1013    return ((n & 0xff) << 0);
1014  }
1015  
1016  static __inline tilepro_bundle_bits
create_Imm8_X0(int num)1017  create_Imm8_X0(int num)
1018  {
1019    const unsigned int n = (unsigned int)num;
1020    return ((n & 0xff) << 12);
1021  }
1022  
1023  static __inline tilepro_bundle_bits
create_Imm8_X1(int num)1024  create_Imm8_X1(int num)
1025  {
1026    const unsigned int n = (unsigned int)num;
1027    return (((tilepro_bundle_bits)(n & 0xff)) << 43);
1028  }
1029  
1030  static __inline tilepro_bundle_bits
create_Imm8_Y0(int num)1031  create_Imm8_Y0(int num)
1032  {
1033    const unsigned int n = (unsigned int)num;
1034    return ((n & 0xff) << 12);
1035  }
1036  
1037  static __inline tilepro_bundle_bits
create_Imm8_Y1(int num)1038  create_Imm8_Y1(int num)
1039  {
1040    const unsigned int n = (unsigned int)num;
1041    return (((tilepro_bundle_bits)(n & 0xff)) << 43);
1042  }
1043  
1044  static __inline tilepro_bundle_bits
create_ImmOpcodeExtension_X0(int num)1045  create_ImmOpcodeExtension_X0(int num)
1046  {
1047    const unsigned int n = (unsigned int)num;
1048    return ((n & 0x7f) << 20);
1049  }
1050  
1051  static __inline tilepro_bundle_bits
create_ImmOpcodeExtension_X1(int num)1052  create_ImmOpcodeExtension_X1(int num)
1053  {
1054    const unsigned int n = (unsigned int)num;
1055    return (((tilepro_bundle_bits)(n & 0x7f)) << 51);
1056  }
1057  
1058  static __inline tilepro_bundle_bits
create_ImmRROpcodeExtension_SN(int num)1059  create_ImmRROpcodeExtension_SN(int num)
1060  {
1061    const unsigned int n = (unsigned int)num;
1062    return ((n & 0x3) << 8);
1063  }
1064  
1065  static __inline tilepro_bundle_bits
create_JOffLong_X1(int num)1066  create_JOffLong_X1(int num)
1067  {
1068    const unsigned int n = (unsigned int)num;
1069    return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
1070           (((tilepro_bundle_bits)(n & 0x00018000)) << 20) |
1071           (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) |
1072           (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) |
1073           (((tilepro_bundle_bits)(n & 0x18000000)) << 31);
1074  }
1075  
1076  static __inline tilepro_bundle_bits
create_JOff_X1(int num)1077  create_JOff_X1(int num)
1078  {
1079    const unsigned int n = (unsigned int)num;
1080    return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
1081           (((tilepro_bundle_bits)(n & 0x00018000)) << 20) |
1082           (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) |
1083           (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) |
1084           (((tilepro_bundle_bits)(n & 0x08000000)) << 31);
1085  }
1086  
1087  static __inline tilepro_bundle_bits
create_MF_Imm15_X1(int num)1088  create_MF_Imm15_X1(int num)
1089  {
1090    const unsigned int n = (unsigned int)num;
1091    return (((tilepro_bundle_bits)(n & 0x00003fff)) << 37) |
1092           (((tilepro_bundle_bits)(n & 0x00004000)) << 44);
1093  }
1094  
1095  static __inline tilepro_bundle_bits
create_MMEnd_X0(int num)1096  create_MMEnd_X0(int num)
1097  {
1098    const unsigned int n = (unsigned int)num;
1099    return ((n & 0x1f) << 18);
1100  }
1101  
1102  static __inline tilepro_bundle_bits
create_MMEnd_X1(int num)1103  create_MMEnd_X1(int num)
1104  {
1105    const unsigned int n = (unsigned int)num;
1106    return (((tilepro_bundle_bits)(n & 0x1f)) << 49);
1107  }
1108  
1109  static __inline tilepro_bundle_bits
create_MMStart_X0(int num)1110  create_MMStart_X0(int num)
1111  {
1112    const unsigned int n = (unsigned int)num;
1113    return ((n & 0x1f) << 23);
1114  }
1115  
1116  static __inline tilepro_bundle_bits
create_MMStart_X1(int num)1117  create_MMStart_X1(int num)
1118  {
1119    const unsigned int n = (unsigned int)num;
1120    return (((tilepro_bundle_bits)(n & 0x1f)) << 54);
1121  }
1122  
1123  static __inline tilepro_bundle_bits
create_MT_Imm15_X1(int num)1124  create_MT_Imm15_X1(int num)
1125  {
1126    const unsigned int n = (unsigned int)num;
1127    return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) |
1128           (((tilepro_bundle_bits)(n & 0x00003fc0)) << 37) |
1129           (((tilepro_bundle_bits)(n & 0x00004000)) << 44);
1130  }
1131  
1132  static __inline tilepro_bundle_bits
create_Mode(int num)1133  create_Mode(int num)
1134  {
1135    const unsigned int n = (unsigned int)num;
1136    return (((tilepro_bundle_bits)(n & 0x1)) << 63);
1137  }
1138  
1139  static __inline tilepro_bundle_bits
create_NoRegOpcodeExtension_SN(int num)1140  create_NoRegOpcodeExtension_SN(int num)
1141  {
1142    const unsigned int n = (unsigned int)num;
1143    return ((n & 0xf) << 0);
1144  }
1145  
1146  static __inline tilepro_bundle_bits
create_Opcode_SN(int num)1147  create_Opcode_SN(int num)
1148  {
1149    const unsigned int n = (unsigned int)num;
1150    return ((n & 0x3f) << 10);
1151  }
1152  
1153  static __inline tilepro_bundle_bits
create_Opcode_X0(int num)1154  create_Opcode_X0(int num)
1155  {
1156    const unsigned int n = (unsigned int)num;
1157    return ((n & 0x7) << 28);
1158  }
1159  
1160  static __inline tilepro_bundle_bits
create_Opcode_X1(int num)1161  create_Opcode_X1(int num)
1162  {
1163    const unsigned int n = (unsigned int)num;
1164    return (((tilepro_bundle_bits)(n & 0xf)) << 59);
1165  }
1166  
1167  static __inline tilepro_bundle_bits
create_Opcode_Y0(int num)1168  create_Opcode_Y0(int num)
1169  {
1170    const unsigned int n = (unsigned int)num;
1171    return ((n & 0xf) << 27);
1172  }
1173  
1174  static __inline tilepro_bundle_bits
create_Opcode_Y1(int num)1175  create_Opcode_Y1(int num)
1176  {
1177    const unsigned int n = (unsigned int)num;
1178    return (((tilepro_bundle_bits)(n & 0xf)) << 59);
1179  }
1180  
1181  static __inline tilepro_bundle_bits
create_Opcode_Y2(int num)1182  create_Opcode_Y2(int num)
1183  {
1184    const unsigned int n = (unsigned int)num;
1185    return (((tilepro_bundle_bits)(n & 0x7)) << 56);
1186  }
1187  
1188  static __inline tilepro_bundle_bits
create_RROpcodeExtension_SN(int num)1189  create_RROpcodeExtension_SN(int num)
1190  {
1191    const unsigned int n = (unsigned int)num;
1192    return ((n & 0xf) << 4);
1193  }
1194  
1195  static __inline tilepro_bundle_bits
create_RRROpcodeExtension_X0(int num)1196  create_RRROpcodeExtension_X0(int num)
1197  {
1198    const unsigned int n = (unsigned int)num;
1199    return ((n & 0x1ff) << 18);
1200  }
1201  
1202  static __inline tilepro_bundle_bits
create_RRROpcodeExtension_X1(int num)1203  create_RRROpcodeExtension_X1(int num)
1204  {
1205    const unsigned int n = (unsigned int)num;
1206    return (((tilepro_bundle_bits)(n & 0x1ff)) << 49);
1207  }
1208  
1209  static __inline tilepro_bundle_bits
create_RRROpcodeExtension_Y0(int num)1210  create_RRROpcodeExtension_Y0(int num)
1211  {
1212    const unsigned int n = (unsigned int)num;
1213    return ((n & 0x3) << 18);
1214  }
1215  
1216  static __inline tilepro_bundle_bits
create_RRROpcodeExtension_Y1(int num)1217  create_RRROpcodeExtension_Y1(int num)
1218  {
1219    const unsigned int n = (unsigned int)num;
1220    return (((tilepro_bundle_bits)(n & 0x3)) << 49);
1221  }
1222  
1223  static __inline tilepro_bundle_bits
create_RouteOpcodeExtension_SN(int num)1224  create_RouteOpcodeExtension_SN(int num)
1225  {
1226    const unsigned int n = (unsigned int)num;
1227    return ((n & 0x3ff) << 0);
1228  }
1229  
1230  static __inline tilepro_bundle_bits
create_S_X0(int num)1231  create_S_X0(int num)
1232  {
1233    const unsigned int n = (unsigned int)num;
1234    return ((n & 0x1) << 27);
1235  }
1236  
1237  static __inline tilepro_bundle_bits
create_S_X1(int num)1238  create_S_X1(int num)
1239  {
1240    const unsigned int n = (unsigned int)num;
1241    return (((tilepro_bundle_bits)(n & 0x1)) << 58);
1242  }
1243  
1244  static __inline tilepro_bundle_bits
create_ShAmt_X0(int num)1245  create_ShAmt_X0(int num)
1246  {
1247    const unsigned int n = (unsigned int)num;
1248    return ((n & 0x1f) << 12);
1249  }
1250  
1251  static __inline tilepro_bundle_bits
create_ShAmt_X1(int num)1252  create_ShAmt_X1(int num)
1253  {
1254    const unsigned int n = (unsigned int)num;
1255    return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1256  }
1257  
1258  static __inline tilepro_bundle_bits
create_ShAmt_Y0(int num)1259  create_ShAmt_Y0(int num)
1260  {
1261    const unsigned int n = (unsigned int)num;
1262    return ((n & 0x1f) << 12);
1263  }
1264  
1265  static __inline tilepro_bundle_bits
create_ShAmt_Y1(int num)1266  create_ShAmt_Y1(int num)
1267  {
1268    const unsigned int n = (unsigned int)num;
1269    return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1270  }
1271  
1272  static __inline tilepro_bundle_bits
create_SrcA_X0(int num)1273  create_SrcA_X0(int num)
1274  {
1275    const unsigned int n = (unsigned int)num;
1276    return ((n & 0x3f) << 6);
1277  }
1278  
1279  static __inline tilepro_bundle_bits
create_SrcA_X1(int num)1280  create_SrcA_X1(int num)
1281  {
1282    const unsigned int n = (unsigned int)num;
1283    return (((tilepro_bundle_bits)(n & 0x3f)) << 37);
1284  }
1285  
1286  static __inline tilepro_bundle_bits
create_SrcA_Y0(int num)1287  create_SrcA_Y0(int num)
1288  {
1289    const unsigned int n = (unsigned int)num;
1290    return ((n & 0x3f) << 6);
1291  }
1292  
1293  static __inline tilepro_bundle_bits
create_SrcA_Y1(int num)1294  create_SrcA_Y1(int num)
1295  {
1296    const unsigned int n = (unsigned int)num;
1297    return (((tilepro_bundle_bits)(n & 0x3f)) << 37);
1298  }
1299  
1300  static __inline tilepro_bundle_bits
create_SrcA_Y2(int num)1301  create_SrcA_Y2(int num)
1302  {
1303    const unsigned int n = (unsigned int)num;
1304    return ((n & 0x00000001) << 26) |
1305           (((tilepro_bundle_bits)(n & 0x0000003e)) << 50);
1306  }
1307  
1308  static __inline tilepro_bundle_bits
create_SrcBDest_Y2(int num)1309  create_SrcBDest_Y2(int num)
1310  {
1311    const unsigned int n = (unsigned int)num;
1312    return ((n & 0x3f) << 20);
1313  }
1314  
1315  static __inline tilepro_bundle_bits
create_SrcB_X0(int num)1316  create_SrcB_X0(int num)
1317  {
1318    const unsigned int n = (unsigned int)num;
1319    return ((n & 0x3f) << 12);
1320  }
1321  
1322  static __inline tilepro_bundle_bits
create_SrcB_X1(int num)1323  create_SrcB_X1(int num)
1324  {
1325    const unsigned int n = (unsigned int)num;
1326    return (((tilepro_bundle_bits)(n & 0x3f)) << 43);
1327  }
1328  
1329  static __inline tilepro_bundle_bits
create_SrcB_Y0(int num)1330  create_SrcB_Y0(int num)
1331  {
1332    const unsigned int n = (unsigned int)num;
1333    return ((n & 0x3f) << 12);
1334  }
1335  
1336  static __inline tilepro_bundle_bits
create_SrcB_Y1(int num)1337  create_SrcB_Y1(int num)
1338  {
1339    const unsigned int n = (unsigned int)num;
1340    return (((tilepro_bundle_bits)(n & 0x3f)) << 43);
1341  }
1342  
1343  static __inline tilepro_bundle_bits
create_Src_SN(int num)1344  create_Src_SN(int num)
1345  {
1346    const unsigned int n = (unsigned int)num;
1347    return ((n & 0x3) << 0);
1348  }
1349  
1350  static __inline tilepro_bundle_bits
create_UnOpcodeExtension_X0(int num)1351  create_UnOpcodeExtension_X0(int num)
1352  {
1353    const unsigned int n = (unsigned int)num;
1354    return ((n & 0x1f) << 12);
1355  }
1356  
1357  static __inline tilepro_bundle_bits
create_UnOpcodeExtension_X1(int num)1358  create_UnOpcodeExtension_X1(int num)
1359  {
1360    const unsigned int n = (unsigned int)num;
1361    return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1362  }
1363  
1364  static __inline tilepro_bundle_bits
create_UnOpcodeExtension_Y0(int num)1365  create_UnOpcodeExtension_Y0(int num)
1366  {
1367    const unsigned int n = (unsigned int)num;
1368    return ((n & 0x1f) << 12);
1369  }
1370  
1371  static __inline tilepro_bundle_bits
create_UnOpcodeExtension_Y1(int num)1372  create_UnOpcodeExtension_Y1(int num)
1373  {
1374    const unsigned int n = (unsigned int)num;
1375    return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1376  }
1377  
1378  static __inline tilepro_bundle_bits
create_UnShOpcodeExtension_X0(int num)1379  create_UnShOpcodeExtension_X0(int num)
1380  {
1381    const unsigned int n = (unsigned int)num;
1382    return ((n & 0x3ff) << 17);
1383  }
1384  
1385  static __inline tilepro_bundle_bits
create_UnShOpcodeExtension_X1(int num)1386  create_UnShOpcodeExtension_X1(int num)
1387  {
1388    const unsigned int n = (unsigned int)num;
1389    return (((tilepro_bundle_bits)(n & 0x3ff)) << 48);
1390  }
1391  
1392  static __inline tilepro_bundle_bits
create_UnShOpcodeExtension_Y0(int num)1393  create_UnShOpcodeExtension_Y0(int num)
1394  {
1395    const unsigned int n = (unsigned int)num;
1396    return ((n & 0x7) << 17);
1397  }
1398  
1399  static __inline tilepro_bundle_bits
create_UnShOpcodeExtension_Y1(int num)1400  create_UnShOpcodeExtension_Y1(int num)
1401  {
1402    const unsigned int n = (unsigned int)num;
1403    return (((tilepro_bundle_bits)(n & 0x7)) << 48);
1404  }
1405  
1406  
1407  
1408  typedef enum
1409  {
1410    TILEPRO_PIPELINE_X0,
1411    TILEPRO_PIPELINE_X1,
1412    TILEPRO_PIPELINE_Y0,
1413    TILEPRO_PIPELINE_Y1,
1414    TILEPRO_PIPELINE_Y2,
1415  } tilepro_pipeline;
1416  
1417  #define tilepro_is_x_pipeline(p) ((int)(p) <= (int)TILEPRO_PIPELINE_X1)
1418  
1419  typedef enum
1420  {
1421    TILEPRO_OP_TYPE_REGISTER,
1422    TILEPRO_OP_TYPE_IMMEDIATE,
1423    TILEPRO_OP_TYPE_ADDRESS,
1424    TILEPRO_OP_TYPE_SPR
1425  } tilepro_operand_type;
1426  
1427  /* This is the bit that determines if a bundle is in the Y encoding. */
1428  #define TILEPRO_BUNDLE_Y_ENCODING_MASK ((tilepro_bundle_bits)1 << 63)
1429  
1430  enum
1431  {
1432    /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
1433    TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
1434  
1435    /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */
1436    TILEPRO_NUM_PIPELINE_ENCODINGS = 5,
1437  
1438    /* Log base 2 of TILEPRO_BUNDLE_SIZE_IN_BYTES. */
1439    TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
1440  
1441    /* Instructions take this many bytes. */
1442    TILEPRO_BUNDLE_SIZE_IN_BYTES = 1 << TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES,
1443  
1444    /* Log base 2 of TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES. */
1445    TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
1446  
1447    /* Bundles should be aligned modulo this number of bytes. */
1448    TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES =
1449      (1 << TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
1450  
1451    /* Log base 2 of TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES. */
1452    TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES = 1,
1453  
1454    /* Static network instructions take this many bytes. */
1455    TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES =
1456      (1 << TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES),
1457  
1458    /* Number of registers (some are magic, such as network I/O). */
1459    TILEPRO_NUM_REGISTERS = 64,
1460  
1461    /* Number of static network registers. */
1462    TILEPRO_NUM_SN_REGISTERS = 4
1463  };
1464  
1465  
1466  struct tilepro_operand
1467  {
1468    /* Is this operand a register, immediate or address? */
1469    tilepro_operand_type type;
1470  
1471    /* The default relocation type for this operand.  */
1472    signed int default_reloc : 16;
1473  
1474    /* How many bits is this value? (used for range checking) */
1475    unsigned int num_bits : 5;
1476  
1477    /* Is the value signed? (used for range checking) */
1478    unsigned int is_signed : 1;
1479  
1480    /* Is this operand a source register? */
1481    unsigned int is_src_reg : 1;
1482  
1483    /* Is this operand written? (i.e. is it a destination register) */
1484    unsigned int is_dest_reg : 1;
1485  
1486    /* Is this operand PC-relative? */
1487    unsigned int is_pc_relative : 1;
1488  
1489    /* By how many bits do we right shift the value before inserting? */
1490    unsigned int rightshift : 2;
1491  
1492    /* Return the bits for this operand to be ORed into an existing bundle. */
1493    tilepro_bundle_bits (*insert) (int op);
1494  
1495    /* Extract this operand and return it. */
1496    unsigned int (*extract) (tilepro_bundle_bits bundle);
1497  };
1498  
1499  
1500  extern const struct tilepro_operand tilepro_operands[];
1501  
1502  /* One finite-state machine per pipe for rapid instruction decoding. */
1503  extern const unsigned short * const
1504  tilepro_bundle_decoder_fsms[TILEPRO_NUM_PIPELINE_ENCODINGS];
1505  
1506  
1507  struct tilepro_opcode
1508  {
1509    /* The opcode mnemonic, e.g. "add" */
1510    const char *name;
1511  
1512    /* The enum value for this mnemonic. */
1513    tilepro_mnemonic mnemonic;
1514  
1515    /* A bit mask of which of the five pipes this instruction
1516       is compatible with:
1517       X0  0x01
1518       X1  0x02
1519       Y0  0x04
1520       Y1  0x08
1521       Y2  0x10 */
1522    unsigned char pipes;
1523  
1524    /* How many operands are there? */
1525    unsigned char num_operands;
1526  
1527    /* Which register does this write implicitly, or TREG_ZERO if none? */
1528    unsigned char implicitly_written_register;
1529  
1530    /* Can this be bundled with other instructions (almost always true). */
1531    unsigned char can_bundle;
1532  
1533    /* The description of the operands. Each of these is an
1534     * index into the tilepro_operands[] table. */
1535    unsigned char operands[TILEPRO_NUM_PIPELINE_ENCODINGS][TILEPRO_MAX_OPERANDS];
1536  
1537  #if !defined(__KERNEL__) && !defined(_LIBC)
1538    /* A mask of which bits have predefined values for each pipeline.
1539     * This is useful for disassembly. */
1540    tilepro_bundle_bits fixed_bit_masks[TILEPRO_NUM_PIPELINE_ENCODINGS];
1541  
1542    /* For each bit set in fixed_bit_masks, what the value is for this
1543     * instruction. */
1544    tilepro_bundle_bits fixed_bit_values[TILEPRO_NUM_PIPELINE_ENCODINGS];
1545  #endif
1546  };
1547  
1548  extern const struct tilepro_opcode tilepro_opcodes[];
1549  
1550  #if !defined(__KERNEL__) && !defined(_LIBC)
1551  
1552  typedef unsigned short tilepro_sn_instruction_bits;
1553  
1554  struct tilepro_sn_opcode
1555  {
1556    /* The opcode mnemonic, e.g. "add" */
1557    const char *name;
1558  
1559    /* The enum value for this mnemonic. */
1560    tilepro_sn_mnemonic mnemonic;
1561  
1562    /* How many operands are there? */
1563    unsigned char num_operands;
1564  
1565    /* The description of the operands. Each of these is an
1566     * index into the tilepro_operands[] table. */
1567    unsigned char operands[TILEPRO_SN_MAX_OPERANDS];
1568  
1569    /* A mask of which bits have predefined values.
1570     * This is useful for disassembly. */
1571    tilepro_sn_instruction_bits fixed_bit_mask;
1572  
1573    /* For each bit set in fixed_bit_masks, what its value is. */
1574    tilepro_sn_instruction_bits fixed_bit_values;
1575  };
1576  
1577  extern const struct tilepro_sn_opcode tilepro_sn_opcodes[];
1578  
1579  #endif /* !__KERNEL__ && !_LIBC */
1580  
1581  /* Used for non-textual disassembly into structs. */
1582  struct tilepro_decoded_instruction
1583  {
1584    const struct tilepro_opcode *opcode;
1585    const struct tilepro_operand *operands[TILEPRO_MAX_OPERANDS];
1586    int operand_values[TILEPRO_MAX_OPERANDS];
1587  };
1588  
1589  
1590  /* Disassemble a bundle into a struct for machine processing. */
1591  extern int parse_insn_tilepro(tilepro_bundle_bits bits,
1592                                unsigned int pc,
1593                                struct tilepro_decoded_instruction
1594                                decoded[TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE]);
1595  
1596  
1597  /* Given a set of bundle bits and a specific pipe, returns which
1598   * instruction the bundle contains in that pipe.
1599   */
1600  extern const struct tilepro_opcode *
1601  find_opcode(tilepro_bundle_bits bits, tilepro_pipeline pipe);
1602  
1603  
1604  #if !defined(__KERNEL__) && !defined(_LIBC)
1605  /* Canonical names of all the registers. */
1606  /* ISSUE: This table lives in "tilepro-dis.c" */
1607  extern const char * const tilepro_register_names[];
1608  
1609  /* Descriptor for a special-purpose register. */
1610  struct tilepro_spr
1611  {
1612    /* The number */
1613    int number;
1614  
1615    /* The name */
1616    const char *name;
1617  };
1618  
1619  /* List of all the SPRs; ordered by increasing number. */
1620  extern const struct tilepro_spr tilepro_sprs[];
1621  
1622  /* Number of special-purpose registers. */
1623  extern const int tilepro_num_sprs;
1624  
1625  extern const char *
1626  get_tilepro_spr_name (int num);
1627  #endif /* !__KERNEL__ && !_LIBC */
1628  
1629  /* Make a few "tile_" variables to simply common code between
1630     architectures.  */
1631  
1632  typedef tilepro_bundle_bits tile_bundle_bits;
1633  #define TILE_BUNDLE_SIZE_IN_BYTES TILEPRO_BUNDLE_SIZE_IN_BYTES
1634  #define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES
1635  #define TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES \
1636    TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES
1637  
1638  #endif /* opcode_tilepro_h */
1639