Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / arch / tile / include / asm / opcode-tile_64.h
1 /* tile.h -- Header file for TILE opcode table
2    Copyright (C) 2005 Free Software Foundation, Inc.
3    Contributed by Tilera Corp. */
4
5 #ifndef opcode_tile_h
6 #define opcode_tile_h
7
8 typedef unsigned long long tile_bundle_bits;
9
10
11 enum
12 {
13   TILE_MAX_OPERANDS = 5 /* mm */
14 };
15
16 typedef enum
17 {
18   TILE_OPC_BPT,
19   TILE_OPC_INFO,
20   TILE_OPC_INFOL,
21   TILE_OPC_J,
22   TILE_OPC_JAL,
23   TILE_OPC_MOVE,
24   TILE_OPC_MOVE_SN,
25   TILE_OPC_MOVEI,
26   TILE_OPC_MOVEI_SN,
27   TILE_OPC_MOVELI,
28   TILE_OPC_MOVELI_SN,
29   TILE_OPC_MOVELIS,
30   TILE_OPC_PREFETCH,
31   TILE_OPC_RAISE,
32   TILE_OPC_ADD,
33   TILE_OPC_ADD_SN,
34   TILE_OPC_ADDB,
35   TILE_OPC_ADDB_SN,
36   TILE_OPC_ADDBS_U,
37   TILE_OPC_ADDBS_U_SN,
38   TILE_OPC_ADDH,
39   TILE_OPC_ADDH_SN,
40   TILE_OPC_ADDHS,
41   TILE_OPC_ADDHS_SN,
42   TILE_OPC_ADDI,
43   TILE_OPC_ADDI_SN,
44   TILE_OPC_ADDIB,
45   TILE_OPC_ADDIB_SN,
46   TILE_OPC_ADDIH,
47   TILE_OPC_ADDIH_SN,
48   TILE_OPC_ADDLI,
49   TILE_OPC_ADDLI_SN,
50   TILE_OPC_ADDLIS,
51   TILE_OPC_ADDS,
52   TILE_OPC_ADDS_SN,
53   TILE_OPC_ADIFFB_U,
54   TILE_OPC_ADIFFB_U_SN,
55   TILE_OPC_ADIFFH,
56   TILE_OPC_ADIFFH_SN,
57   TILE_OPC_AND,
58   TILE_OPC_AND_SN,
59   TILE_OPC_ANDI,
60   TILE_OPC_ANDI_SN,
61   TILE_OPC_AULI,
62   TILE_OPC_AVGB_U,
63   TILE_OPC_AVGB_U_SN,
64   TILE_OPC_AVGH,
65   TILE_OPC_AVGH_SN,
66   TILE_OPC_BBNS,
67   TILE_OPC_BBNS_SN,
68   TILE_OPC_BBNST,
69   TILE_OPC_BBNST_SN,
70   TILE_OPC_BBS,
71   TILE_OPC_BBS_SN,
72   TILE_OPC_BBST,
73   TILE_OPC_BBST_SN,
74   TILE_OPC_BGEZ,
75   TILE_OPC_BGEZ_SN,
76   TILE_OPC_BGEZT,
77   TILE_OPC_BGEZT_SN,
78   TILE_OPC_BGZ,
79   TILE_OPC_BGZ_SN,
80   TILE_OPC_BGZT,
81   TILE_OPC_BGZT_SN,
82   TILE_OPC_BITX,
83   TILE_OPC_BITX_SN,
84   TILE_OPC_BLEZ,
85   TILE_OPC_BLEZ_SN,
86   TILE_OPC_BLEZT,
87   TILE_OPC_BLEZT_SN,
88   TILE_OPC_BLZ,
89   TILE_OPC_BLZ_SN,
90   TILE_OPC_BLZT,
91   TILE_OPC_BLZT_SN,
92   TILE_OPC_BNZ,
93   TILE_OPC_BNZ_SN,
94   TILE_OPC_BNZT,
95   TILE_OPC_BNZT_SN,
96   TILE_OPC_BYTEX,
97   TILE_OPC_BYTEX_SN,
98   TILE_OPC_BZ,
99   TILE_OPC_BZ_SN,
100   TILE_OPC_BZT,
101   TILE_OPC_BZT_SN,
102   TILE_OPC_CLZ,
103   TILE_OPC_CLZ_SN,
104   TILE_OPC_CRC32_32,
105   TILE_OPC_CRC32_32_SN,
106   TILE_OPC_CRC32_8,
107   TILE_OPC_CRC32_8_SN,
108   TILE_OPC_CTZ,
109   TILE_OPC_CTZ_SN,
110   TILE_OPC_DRAIN,
111   TILE_OPC_DTLBPR,
112   TILE_OPC_DWORD_ALIGN,
113   TILE_OPC_DWORD_ALIGN_SN,
114   TILE_OPC_FINV,
115   TILE_OPC_FLUSH,
116   TILE_OPC_FNOP,
117   TILE_OPC_ICOH,
118   TILE_OPC_ILL,
119   TILE_OPC_INTHB,
120   TILE_OPC_INTHB_SN,
121   TILE_OPC_INTHH,
122   TILE_OPC_INTHH_SN,
123   TILE_OPC_INTLB,
124   TILE_OPC_INTLB_SN,
125   TILE_OPC_INTLH,
126   TILE_OPC_INTLH_SN,
127   TILE_OPC_INV,
128   TILE_OPC_IRET,
129   TILE_OPC_JALB,
130   TILE_OPC_JALF,
131   TILE_OPC_JALR,
132   TILE_OPC_JALRP,
133   TILE_OPC_JB,
134   TILE_OPC_JF,
135   TILE_OPC_JR,
136   TILE_OPC_JRP,
137   TILE_OPC_LB,
138   TILE_OPC_LB_SN,
139   TILE_OPC_LB_U,
140   TILE_OPC_LB_U_SN,
141   TILE_OPC_LBADD,
142   TILE_OPC_LBADD_SN,
143   TILE_OPC_LBADD_U,
144   TILE_OPC_LBADD_U_SN,
145   TILE_OPC_LH,
146   TILE_OPC_LH_SN,
147   TILE_OPC_LH_U,
148   TILE_OPC_LH_U_SN,
149   TILE_OPC_LHADD,
150   TILE_OPC_LHADD_SN,
151   TILE_OPC_LHADD_U,
152   TILE_OPC_LHADD_U_SN,
153   TILE_OPC_LNK,
154   TILE_OPC_LNK_SN,
155   TILE_OPC_LW,
156   TILE_OPC_LW_SN,
157   TILE_OPC_LW_NA,
158   TILE_OPC_LW_NA_SN,
159   TILE_OPC_LWADD,
160   TILE_OPC_LWADD_SN,
161   TILE_OPC_LWADD_NA,
162   TILE_OPC_LWADD_NA_SN,
163   TILE_OPC_MAXB_U,
164   TILE_OPC_MAXB_U_SN,
165   TILE_OPC_MAXH,
166   TILE_OPC_MAXH_SN,
167   TILE_OPC_MAXIB_U,
168   TILE_OPC_MAXIB_U_SN,
169   TILE_OPC_MAXIH,
170   TILE_OPC_MAXIH_SN,
171   TILE_OPC_MF,
172   TILE_OPC_MFSPR,
173   TILE_OPC_MINB_U,
174   TILE_OPC_MINB_U_SN,
175   TILE_OPC_MINH,
176   TILE_OPC_MINH_SN,
177   TILE_OPC_MINIB_U,
178   TILE_OPC_MINIB_U_SN,
179   TILE_OPC_MINIH,
180   TILE_OPC_MINIH_SN,
181   TILE_OPC_MM,
182   TILE_OPC_MNZ,
183   TILE_OPC_MNZ_SN,
184   TILE_OPC_MNZB,
185   TILE_OPC_MNZB_SN,
186   TILE_OPC_MNZH,
187   TILE_OPC_MNZH_SN,
188   TILE_OPC_MTSPR,
189   TILE_OPC_MULHH_SS,
190   TILE_OPC_MULHH_SS_SN,
191   TILE_OPC_MULHH_SU,
192   TILE_OPC_MULHH_SU_SN,
193   TILE_OPC_MULHH_UU,
194   TILE_OPC_MULHH_UU_SN,
195   TILE_OPC_MULHHA_SS,
196   TILE_OPC_MULHHA_SS_SN,
197   TILE_OPC_MULHHA_SU,
198   TILE_OPC_MULHHA_SU_SN,
199   TILE_OPC_MULHHA_UU,
200   TILE_OPC_MULHHA_UU_SN,
201   TILE_OPC_MULHHSA_UU,
202   TILE_OPC_MULHHSA_UU_SN,
203   TILE_OPC_MULHL_SS,
204   TILE_OPC_MULHL_SS_SN,
205   TILE_OPC_MULHL_SU,
206   TILE_OPC_MULHL_SU_SN,
207   TILE_OPC_MULHL_US,
208   TILE_OPC_MULHL_US_SN,
209   TILE_OPC_MULHL_UU,
210   TILE_OPC_MULHL_UU_SN,
211   TILE_OPC_MULHLA_SS,
212   TILE_OPC_MULHLA_SS_SN,
213   TILE_OPC_MULHLA_SU,
214   TILE_OPC_MULHLA_SU_SN,
215   TILE_OPC_MULHLA_US,
216   TILE_OPC_MULHLA_US_SN,
217   TILE_OPC_MULHLA_UU,
218   TILE_OPC_MULHLA_UU_SN,
219   TILE_OPC_MULHLSA_UU,
220   TILE_OPC_MULHLSA_UU_SN,
221   TILE_OPC_MULLL_SS,
222   TILE_OPC_MULLL_SS_SN,
223   TILE_OPC_MULLL_SU,
224   TILE_OPC_MULLL_SU_SN,
225   TILE_OPC_MULLL_UU,
226   TILE_OPC_MULLL_UU_SN,
227   TILE_OPC_MULLLA_SS,
228   TILE_OPC_MULLLA_SS_SN,
229   TILE_OPC_MULLLA_SU,
230   TILE_OPC_MULLLA_SU_SN,
231   TILE_OPC_MULLLA_UU,
232   TILE_OPC_MULLLA_UU_SN,
233   TILE_OPC_MULLLSA_UU,
234   TILE_OPC_MULLLSA_UU_SN,
235   TILE_OPC_MVNZ,
236   TILE_OPC_MVNZ_SN,
237   TILE_OPC_MVZ,
238   TILE_OPC_MVZ_SN,
239   TILE_OPC_MZ,
240   TILE_OPC_MZ_SN,
241   TILE_OPC_MZB,
242   TILE_OPC_MZB_SN,
243   TILE_OPC_MZH,
244   TILE_OPC_MZH_SN,
245   TILE_OPC_NAP,
246   TILE_OPC_NOP,
247   TILE_OPC_NOR,
248   TILE_OPC_NOR_SN,
249   TILE_OPC_OR,
250   TILE_OPC_OR_SN,
251   TILE_OPC_ORI,
252   TILE_OPC_ORI_SN,
253   TILE_OPC_PACKBS_U,
254   TILE_OPC_PACKBS_U_SN,
255   TILE_OPC_PACKHB,
256   TILE_OPC_PACKHB_SN,
257   TILE_OPC_PACKHS,
258   TILE_OPC_PACKHS_SN,
259   TILE_OPC_PACKLB,
260   TILE_OPC_PACKLB_SN,
261   TILE_OPC_PCNT,
262   TILE_OPC_PCNT_SN,
263   TILE_OPC_RL,
264   TILE_OPC_RL_SN,
265   TILE_OPC_RLI,
266   TILE_OPC_RLI_SN,
267   TILE_OPC_S1A,
268   TILE_OPC_S1A_SN,
269   TILE_OPC_S2A,
270   TILE_OPC_S2A_SN,
271   TILE_OPC_S3A,
272   TILE_OPC_S3A_SN,
273   TILE_OPC_SADAB_U,
274   TILE_OPC_SADAB_U_SN,
275   TILE_OPC_SADAH,
276   TILE_OPC_SADAH_SN,
277   TILE_OPC_SADAH_U,
278   TILE_OPC_SADAH_U_SN,
279   TILE_OPC_SADB_U,
280   TILE_OPC_SADB_U_SN,
281   TILE_OPC_SADH,
282   TILE_OPC_SADH_SN,
283   TILE_OPC_SADH_U,
284   TILE_OPC_SADH_U_SN,
285   TILE_OPC_SB,
286   TILE_OPC_SBADD,
287   TILE_OPC_SEQ,
288   TILE_OPC_SEQ_SN,
289   TILE_OPC_SEQB,
290   TILE_OPC_SEQB_SN,
291   TILE_OPC_SEQH,
292   TILE_OPC_SEQH_SN,
293   TILE_OPC_SEQI,
294   TILE_OPC_SEQI_SN,
295   TILE_OPC_SEQIB,
296   TILE_OPC_SEQIB_SN,
297   TILE_OPC_SEQIH,
298   TILE_OPC_SEQIH_SN,
299   TILE_OPC_SH,
300   TILE_OPC_SHADD,
301   TILE_OPC_SHL,
302   TILE_OPC_SHL_SN,
303   TILE_OPC_SHLB,
304   TILE_OPC_SHLB_SN,
305   TILE_OPC_SHLH,
306   TILE_OPC_SHLH_SN,
307   TILE_OPC_SHLI,
308   TILE_OPC_SHLI_SN,
309   TILE_OPC_SHLIB,
310   TILE_OPC_SHLIB_SN,
311   TILE_OPC_SHLIH,
312   TILE_OPC_SHLIH_SN,
313   TILE_OPC_SHR,
314   TILE_OPC_SHR_SN,
315   TILE_OPC_SHRB,
316   TILE_OPC_SHRB_SN,
317   TILE_OPC_SHRH,
318   TILE_OPC_SHRH_SN,
319   TILE_OPC_SHRI,
320   TILE_OPC_SHRI_SN,
321   TILE_OPC_SHRIB,
322   TILE_OPC_SHRIB_SN,
323   TILE_OPC_SHRIH,
324   TILE_OPC_SHRIH_SN,
325   TILE_OPC_SLT,
326   TILE_OPC_SLT_SN,
327   TILE_OPC_SLT_U,
328   TILE_OPC_SLT_U_SN,
329   TILE_OPC_SLTB,
330   TILE_OPC_SLTB_SN,
331   TILE_OPC_SLTB_U,
332   TILE_OPC_SLTB_U_SN,
333   TILE_OPC_SLTE,
334   TILE_OPC_SLTE_SN,
335   TILE_OPC_SLTE_U,
336   TILE_OPC_SLTE_U_SN,
337   TILE_OPC_SLTEB,
338   TILE_OPC_SLTEB_SN,
339   TILE_OPC_SLTEB_U,
340   TILE_OPC_SLTEB_U_SN,
341   TILE_OPC_SLTEH,
342   TILE_OPC_SLTEH_SN,
343   TILE_OPC_SLTEH_U,
344   TILE_OPC_SLTEH_U_SN,
345   TILE_OPC_SLTH,
346   TILE_OPC_SLTH_SN,
347   TILE_OPC_SLTH_U,
348   TILE_OPC_SLTH_U_SN,
349   TILE_OPC_SLTI,
350   TILE_OPC_SLTI_SN,
351   TILE_OPC_SLTI_U,
352   TILE_OPC_SLTI_U_SN,
353   TILE_OPC_SLTIB,
354   TILE_OPC_SLTIB_SN,
355   TILE_OPC_SLTIB_U,
356   TILE_OPC_SLTIB_U_SN,
357   TILE_OPC_SLTIH,
358   TILE_OPC_SLTIH_SN,
359   TILE_OPC_SLTIH_U,
360   TILE_OPC_SLTIH_U_SN,
361   TILE_OPC_SNE,
362   TILE_OPC_SNE_SN,
363   TILE_OPC_SNEB,
364   TILE_OPC_SNEB_SN,
365   TILE_OPC_SNEH,
366   TILE_OPC_SNEH_SN,
367   TILE_OPC_SRA,
368   TILE_OPC_SRA_SN,
369   TILE_OPC_SRAB,
370   TILE_OPC_SRAB_SN,
371   TILE_OPC_SRAH,
372   TILE_OPC_SRAH_SN,
373   TILE_OPC_SRAI,
374   TILE_OPC_SRAI_SN,
375   TILE_OPC_SRAIB,
376   TILE_OPC_SRAIB_SN,
377   TILE_OPC_SRAIH,
378   TILE_OPC_SRAIH_SN,
379   TILE_OPC_SUB,
380   TILE_OPC_SUB_SN,
381   TILE_OPC_SUBB,
382   TILE_OPC_SUBB_SN,
383   TILE_OPC_SUBBS_U,
384   TILE_OPC_SUBBS_U_SN,
385   TILE_OPC_SUBH,
386   TILE_OPC_SUBH_SN,
387   TILE_OPC_SUBHS,
388   TILE_OPC_SUBHS_SN,
389   TILE_OPC_SUBS,
390   TILE_OPC_SUBS_SN,
391   TILE_OPC_SW,
392   TILE_OPC_SWADD,
393   TILE_OPC_SWINT0,
394   TILE_OPC_SWINT1,
395   TILE_OPC_SWINT2,
396   TILE_OPC_SWINT3,
397   TILE_OPC_TBLIDXB0,
398   TILE_OPC_TBLIDXB0_SN,
399   TILE_OPC_TBLIDXB1,
400   TILE_OPC_TBLIDXB1_SN,
401   TILE_OPC_TBLIDXB2,
402   TILE_OPC_TBLIDXB2_SN,
403   TILE_OPC_TBLIDXB3,
404   TILE_OPC_TBLIDXB3_SN,
405   TILE_OPC_TNS,
406   TILE_OPC_TNS_SN,
407   TILE_OPC_WH64,
408   TILE_OPC_XOR,
409   TILE_OPC_XOR_SN,
410   TILE_OPC_XORI,
411   TILE_OPC_XORI_SN,
412   TILE_OPC_NONE
413 } tile_mnemonic;
414
415 /* 64-bit pattern for a { bpt ; nop } bundle. */
416 #define TILE_BPT_BUNDLE 0x400b3cae70166000ULL
417
418
419 #define TILE_ELF_MACHINE_CODE EM_TILEPRO
420
421 #define TILE_ELF_NAME "elf32-tilepro"
422
423
424 static __inline unsigned int
425 get_BrOff_SN(tile_bundle_bits num)
426 {
427   const unsigned int n = (unsigned int)num;
428   return (((n >> 0)) & 0x3ff);
429 }
430
431 static __inline unsigned int
432 get_BrOff_X1(tile_bundle_bits n)
433 {
434   return (((unsigned int)(n >> 43)) & 0x00007fff) |
435          (((unsigned int)(n >> 20)) & 0x00018000);
436 }
437
438 static __inline unsigned int
439 get_BrType_X1(tile_bundle_bits n)
440 {
441   return (((unsigned int)(n >> 31)) & 0xf);
442 }
443
444 static __inline unsigned int
445 get_Dest_Imm8_X1(tile_bundle_bits n)
446 {
447   return (((unsigned int)(n >> 31)) & 0x0000003f) |
448          (((unsigned int)(n >> 43)) & 0x000000c0);
449 }
450
451 static __inline unsigned int
452 get_Dest_SN(tile_bundle_bits num)
453 {
454   const unsigned int n = (unsigned int)num;
455   return (((n >> 2)) & 0x3);
456 }
457
458 static __inline unsigned int
459 get_Dest_X0(tile_bundle_bits num)
460 {
461   const unsigned int n = (unsigned int)num;
462   return (((n >> 0)) & 0x3f);
463 }
464
465 static __inline unsigned int
466 get_Dest_X1(tile_bundle_bits n)
467 {
468   return (((unsigned int)(n >> 31)) & 0x3f);
469 }
470
471 static __inline unsigned int
472 get_Dest_Y0(tile_bundle_bits num)
473 {
474   const unsigned int n = (unsigned int)num;
475   return (((n >> 0)) & 0x3f);
476 }
477
478 static __inline unsigned int
479 get_Dest_Y1(tile_bundle_bits n)
480 {
481   return (((unsigned int)(n >> 31)) & 0x3f);
482 }
483
484 static __inline unsigned int
485 get_Imm16_X0(tile_bundle_bits num)
486 {
487   const unsigned int n = (unsigned int)num;
488   return (((n >> 12)) & 0xffff);
489 }
490
491 static __inline unsigned int
492 get_Imm16_X1(tile_bundle_bits n)
493 {
494   return (((unsigned int)(n >> 43)) & 0xffff);
495 }
496
497 static __inline unsigned int
498 get_Imm8_SN(tile_bundle_bits num)
499 {
500   const unsigned int n = (unsigned int)num;
501   return (((n >> 0)) & 0xff);
502 }
503
504 static __inline unsigned int
505 get_Imm8_X0(tile_bundle_bits num)
506 {
507   const unsigned int n = (unsigned int)num;
508   return (((n >> 12)) & 0xff);
509 }
510
511 static __inline unsigned int
512 get_Imm8_X1(tile_bundle_bits n)
513 {
514   return (((unsigned int)(n >> 43)) & 0xff);
515 }
516
517 static __inline unsigned int
518 get_Imm8_Y0(tile_bundle_bits num)
519 {
520   const unsigned int n = (unsigned int)num;
521   return (((n >> 12)) & 0xff);
522 }
523
524 static __inline unsigned int
525 get_Imm8_Y1(tile_bundle_bits n)
526 {
527   return (((unsigned int)(n >> 43)) & 0xff);
528 }
529
530 static __inline unsigned int
531 get_ImmOpcodeExtension_X0(tile_bundle_bits num)
532 {
533   const unsigned int n = (unsigned int)num;
534   return (((n >> 20)) & 0x7f);
535 }
536
537 static __inline unsigned int
538 get_ImmOpcodeExtension_X1(tile_bundle_bits n)
539 {
540   return (((unsigned int)(n >> 51)) & 0x7f);
541 }
542
543 static __inline unsigned int
544 get_ImmRROpcodeExtension_SN(tile_bundle_bits num)
545 {
546   const unsigned int n = (unsigned int)num;
547   return (((n >> 8)) & 0x3);
548 }
549
550 static __inline unsigned int
551 get_JOffLong_X1(tile_bundle_bits n)
552 {
553   return (((unsigned int)(n >> 43)) & 0x00007fff) |
554          (((unsigned int)(n >> 20)) & 0x00018000) |
555          (((unsigned int)(n >> 14)) & 0x001e0000) |
556          (((unsigned int)(n >> 16)) & 0x07e00000) |
557          (((unsigned int)(n >> 31)) & 0x18000000);
558 }
559
560 static __inline unsigned int
561 get_JOff_X1(tile_bundle_bits n)
562 {
563   return (((unsigned int)(n >> 43)) & 0x00007fff) |
564          (((unsigned int)(n >> 20)) & 0x00018000) |
565          (((unsigned int)(n >> 14)) & 0x001e0000) |
566          (((unsigned int)(n >> 16)) & 0x07e00000) |
567          (((unsigned int)(n >> 31)) & 0x08000000);
568 }
569
570 static __inline unsigned int
571 get_MF_Imm15_X1(tile_bundle_bits n)
572 {
573   return (((unsigned int)(n >> 37)) & 0x00003fff) |
574          (((unsigned int)(n >> 44)) & 0x00004000);
575 }
576
577 static __inline unsigned int
578 get_MMEnd_X0(tile_bundle_bits num)
579 {
580   const unsigned int n = (unsigned int)num;
581   return (((n >> 18)) & 0x1f);
582 }
583
584 static __inline unsigned int
585 get_MMEnd_X1(tile_bundle_bits n)
586 {
587   return (((unsigned int)(n >> 49)) & 0x1f);
588 }
589
590 static __inline unsigned int
591 get_MMStart_X0(tile_bundle_bits num)
592 {
593   const unsigned int n = (unsigned int)num;
594   return (((n >> 23)) & 0x1f);
595 }
596
597 static __inline unsigned int
598 get_MMStart_X1(tile_bundle_bits n)
599 {
600   return (((unsigned int)(n >> 54)) & 0x1f);
601 }
602
603 static __inline unsigned int
604 get_MT_Imm15_X1(tile_bundle_bits n)
605 {
606   return (((unsigned int)(n >> 31)) & 0x0000003f) |
607          (((unsigned int)(n >> 37)) & 0x00003fc0) |
608          (((unsigned int)(n >> 44)) & 0x00004000);
609 }
610
611 static __inline unsigned int
612 get_Mode(tile_bundle_bits n)
613 {
614   return (((unsigned int)(n >> 63)) & 0x1);
615 }
616
617 static __inline unsigned int
618 get_NoRegOpcodeExtension_SN(tile_bundle_bits num)
619 {
620   const unsigned int n = (unsigned int)num;
621   return (((n >> 0)) & 0xf);
622 }
623
624 static __inline unsigned int
625 get_Opcode_SN(tile_bundle_bits num)
626 {
627   const unsigned int n = (unsigned int)num;
628   return (((n >> 10)) & 0x3f);
629 }
630
631 static __inline unsigned int
632 get_Opcode_X0(tile_bundle_bits num)
633 {
634   const unsigned int n = (unsigned int)num;
635   return (((n >> 28)) & 0x7);
636 }
637
638 static __inline unsigned int
639 get_Opcode_X1(tile_bundle_bits n)
640 {
641   return (((unsigned int)(n >> 59)) & 0xf);
642 }
643
644 static __inline unsigned int
645 get_Opcode_Y0(tile_bundle_bits num)
646 {
647   const unsigned int n = (unsigned int)num;
648   return (((n >> 27)) & 0xf);
649 }
650
651 static __inline unsigned int
652 get_Opcode_Y1(tile_bundle_bits n)
653 {
654   return (((unsigned int)(n >> 59)) & 0xf);
655 }
656
657 static __inline unsigned int
658 get_Opcode_Y2(tile_bundle_bits n)
659 {
660   return (((unsigned int)(n >> 56)) & 0x7);
661 }
662
663 static __inline unsigned int
664 get_RROpcodeExtension_SN(tile_bundle_bits num)
665 {
666   const unsigned int n = (unsigned int)num;
667   return (((n >> 4)) & 0xf);
668 }
669
670 static __inline unsigned int
671 get_RRROpcodeExtension_X0(tile_bundle_bits num)
672 {
673   const unsigned int n = (unsigned int)num;
674   return (((n >> 18)) & 0x1ff);
675 }
676
677 static __inline unsigned int
678 get_RRROpcodeExtension_X1(tile_bundle_bits n)
679 {
680   return (((unsigned int)(n >> 49)) & 0x1ff);
681 }
682
683 static __inline unsigned int
684 get_RRROpcodeExtension_Y0(tile_bundle_bits num)
685 {
686   const unsigned int n = (unsigned int)num;
687   return (((n >> 18)) & 0x3);
688 }
689
690 static __inline unsigned int
691 get_RRROpcodeExtension_Y1(tile_bundle_bits n)
692 {
693   return (((unsigned int)(n >> 49)) & 0x3);
694 }
695
696 static __inline unsigned int
697 get_RouteOpcodeExtension_SN(tile_bundle_bits num)
698 {
699   const unsigned int n = (unsigned int)num;
700   return (((n >> 0)) & 0x3ff);
701 }
702
703 static __inline unsigned int
704 get_S_X0(tile_bundle_bits num)
705 {
706   const unsigned int n = (unsigned int)num;
707   return (((n >> 27)) & 0x1);
708 }
709
710 static __inline unsigned int
711 get_S_X1(tile_bundle_bits n)
712 {
713   return (((unsigned int)(n >> 58)) & 0x1);
714 }
715
716 static __inline unsigned int
717 get_ShAmt_X0(tile_bundle_bits num)
718 {
719   const unsigned int n = (unsigned int)num;
720   return (((n >> 12)) & 0x1f);
721 }
722
723 static __inline unsigned int
724 get_ShAmt_X1(tile_bundle_bits n)
725 {
726   return (((unsigned int)(n >> 43)) & 0x1f);
727 }
728
729 static __inline unsigned int
730 get_ShAmt_Y0(tile_bundle_bits num)
731 {
732   const unsigned int n = (unsigned int)num;
733   return (((n >> 12)) & 0x1f);
734 }
735
736 static __inline unsigned int
737 get_ShAmt_Y1(tile_bundle_bits n)
738 {
739   return (((unsigned int)(n >> 43)) & 0x1f);
740 }
741
742 static __inline unsigned int
743 get_SrcA_X0(tile_bundle_bits num)
744 {
745   const unsigned int n = (unsigned int)num;
746   return (((n >> 6)) & 0x3f);
747 }
748
749 static __inline unsigned int
750 get_SrcA_X1(tile_bundle_bits n)
751 {
752   return (((unsigned int)(n >> 37)) & 0x3f);
753 }
754
755 static __inline unsigned int
756 get_SrcA_Y0(tile_bundle_bits num)
757 {
758   const unsigned int n = (unsigned int)num;
759   return (((n >> 6)) & 0x3f);
760 }
761
762 static __inline unsigned int
763 get_SrcA_Y1(tile_bundle_bits n)
764 {
765   return (((unsigned int)(n >> 37)) & 0x3f);
766 }
767
768 static __inline unsigned int
769 get_SrcA_Y2(tile_bundle_bits n)
770 {
771   return (((n >> 26)) & 0x00000001) |
772          (((unsigned int)(n >> 50)) & 0x0000003e);
773 }
774
775 static __inline unsigned int
776 get_SrcBDest_Y2(tile_bundle_bits num)
777 {
778   const unsigned int n = (unsigned int)num;
779   return (((n >> 20)) & 0x3f);
780 }
781
782 static __inline unsigned int
783 get_SrcB_X0(tile_bundle_bits num)
784 {
785   const unsigned int n = (unsigned int)num;
786   return (((n >> 12)) & 0x3f);
787 }
788
789 static __inline unsigned int
790 get_SrcB_X1(tile_bundle_bits n)
791 {
792   return (((unsigned int)(n >> 43)) & 0x3f);
793 }
794
795 static __inline unsigned int
796 get_SrcB_Y0(tile_bundle_bits num)
797 {
798   const unsigned int n = (unsigned int)num;
799   return (((n >> 12)) & 0x3f);
800 }
801
802 static __inline unsigned int
803 get_SrcB_Y1(tile_bundle_bits n)
804 {
805   return (((unsigned int)(n >> 43)) & 0x3f);
806 }
807
808 static __inline unsigned int
809 get_Src_SN(tile_bundle_bits num)
810 {
811   const unsigned int n = (unsigned int)num;
812   return (((n >> 0)) & 0x3);
813 }
814
815 static __inline unsigned int
816 get_UnOpcodeExtension_X0(tile_bundle_bits num)
817 {
818   const unsigned int n = (unsigned int)num;
819   return (((n >> 12)) & 0x1f);
820 }
821
822 static __inline unsigned int
823 get_UnOpcodeExtension_X1(tile_bundle_bits n)
824 {
825   return (((unsigned int)(n >> 43)) & 0x1f);
826 }
827
828 static __inline unsigned int
829 get_UnOpcodeExtension_Y0(tile_bundle_bits num)
830 {
831   const unsigned int n = (unsigned int)num;
832   return (((n >> 12)) & 0x1f);
833 }
834
835 static __inline unsigned int
836 get_UnOpcodeExtension_Y1(tile_bundle_bits n)
837 {
838   return (((unsigned int)(n >> 43)) & 0x1f);
839 }
840
841 static __inline unsigned int
842 get_UnShOpcodeExtension_X0(tile_bundle_bits num)
843 {
844   const unsigned int n = (unsigned int)num;
845   return (((n >> 17)) & 0x3ff);
846 }
847
848 static __inline unsigned int
849 get_UnShOpcodeExtension_X1(tile_bundle_bits n)
850 {
851   return (((unsigned int)(n >> 48)) & 0x3ff);
852 }
853
854 static __inline unsigned int
855 get_UnShOpcodeExtension_Y0(tile_bundle_bits num)
856 {
857   const unsigned int n = (unsigned int)num;
858   return (((n >> 17)) & 0x7);
859 }
860
861 static __inline unsigned int
862 get_UnShOpcodeExtension_Y1(tile_bundle_bits n)
863 {
864   return (((unsigned int)(n >> 48)) & 0x7);
865 }
866
867
868 static __inline int
869 sign_extend(int n, int num_bits)
870 {
871   int shift = (int)(sizeof(int) * 8 - num_bits);
872   return (n << shift) >> shift;
873 }
874
875
876
877 static __inline tile_bundle_bits
878 create_BrOff_SN(int num)
879 {
880   const unsigned int n = (unsigned int)num;
881   return ((n & 0x3ff) << 0);
882 }
883
884 static __inline tile_bundle_bits
885 create_BrOff_X1(int num)
886 {
887   const unsigned int n = (unsigned int)num;
888   return (((tile_bundle_bits)(n & 0x00007fff)) << 43) |
889          (((tile_bundle_bits)(n & 0x00018000)) << 20);
890 }
891
892 static __inline tile_bundle_bits
893 create_BrType_X1(int num)
894 {
895   const unsigned int n = (unsigned int)num;
896   return (((tile_bundle_bits)(n & 0xf)) << 31);
897 }
898
899 static __inline tile_bundle_bits
900 create_Dest_Imm8_X1(int num)
901 {
902   const unsigned int n = (unsigned int)num;
903   return (((tile_bundle_bits)(n & 0x0000003f)) << 31) |
904          (((tile_bundle_bits)(n & 0x000000c0)) << 43);
905 }
906
907 static __inline tile_bundle_bits
908 create_Dest_SN(int num)
909 {
910   const unsigned int n = (unsigned int)num;
911   return ((n & 0x3) << 2);
912 }
913
914 static __inline tile_bundle_bits
915 create_Dest_X0(int num)
916 {
917   const unsigned int n = (unsigned int)num;
918   return ((n & 0x3f) << 0);
919 }
920
921 static __inline tile_bundle_bits
922 create_Dest_X1(int num)
923 {
924   const unsigned int n = (unsigned int)num;
925   return (((tile_bundle_bits)(n & 0x3f)) << 31);
926 }
927
928 static __inline tile_bundle_bits
929 create_Dest_Y0(int num)
930 {
931   const unsigned int n = (unsigned int)num;
932   return ((n & 0x3f) << 0);
933 }
934
935 static __inline tile_bundle_bits
936 create_Dest_Y1(int num)
937 {
938   const unsigned int n = (unsigned int)num;
939   return (((tile_bundle_bits)(n & 0x3f)) << 31);
940 }
941
942 static __inline tile_bundle_bits
943 create_Imm16_X0(int num)
944 {
945   const unsigned int n = (unsigned int)num;
946   return ((n & 0xffff) << 12);
947 }
948
949 static __inline tile_bundle_bits
950 create_Imm16_X1(int num)
951 {
952   const unsigned int n = (unsigned int)num;
953   return (((tile_bundle_bits)(n & 0xffff)) << 43);
954 }
955
956 static __inline tile_bundle_bits
957 create_Imm8_SN(int num)
958 {
959   const unsigned int n = (unsigned int)num;
960   return ((n & 0xff) << 0);
961 }
962
963 static __inline tile_bundle_bits
964 create_Imm8_X0(int num)
965 {
966   const unsigned int n = (unsigned int)num;
967   return ((n & 0xff) << 12);
968 }
969
970 static __inline tile_bundle_bits
971 create_Imm8_X1(int num)
972 {
973   const unsigned int n = (unsigned int)num;
974   return (((tile_bundle_bits)(n & 0xff)) << 43);
975 }
976
977 static __inline tile_bundle_bits
978 create_Imm8_Y0(int num)
979 {
980   const unsigned int n = (unsigned int)num;
981   return ((n & 0xff) << 12);
982 }
983
984 static __inline tile_bundle_bits
985 create_Imm8_Y1(int num)
986 {
987   const unsigned int n = (unsigned int)num;
988   return (((tile_bundle_bits)(n & 0xff)) << 43);
989 }
990
991 static __inline tile_bundle_bits
992 create_ImmOpcodeExtension_X0(int num)
993 {
994   const unsigned int n = (unsigned int)num;
995   return ((n & 0x7f) << 20);
996 }
997
998 static __inline tile_bundle_bits
999 create_ImmOpcodeExtension_X1(int num)
1000 {
1001   const unsigned int n = (unsigned int)num;
1002   return (((tile_bundle_bits)(n & 0x7f)) << 51);
1003 }
1004
1005 static __inline tile_bundle_bits
1006 create_ImmRROpcodeExtension_SN(int num)
1007 {
1008   const unsigned int n = (unsigned int)num;
1009   return ((n & 0x3) << 8);
1010 }
1011
1012 static __inline tile_bundle_bits
1013 create_JOffLong_X1(int num)
1014 {
1015   const unsigned int n = (unsigned int)num;
1016   return (((tile_bundle_bits)(n & 0x00007fff)) << 43) |
1017          (((tile_bundle_bits)(n & 0x00018000)) << 20) |
1018          (((tile_bundle_bits)(n & 0x001e0000)) << 14) |
1019          (((tile_bundle_bits)(n & 0x07e00000)) << 16) |
1020          (((tile_bundle_bits)(n & 0x18000000)) << 31);
1021 }
1022
1023 static __inline tile_bundle_bits
1024 create_JOff_X1(int num)
1025 {
1026   const unsigned int n = (unsigned int)num;
1027   return (((tile_bundle_bits)(n & 0x00007fff)) << 43) |
1028          (((tile_bundle_bits)(n & 0x00018000)) << 20) |
1029          (((tile_bundle_bits)(n & 0x001e0000)) << 14) |
1030          (((tile_bundle_bits)(n & 0x07e00000)) << 16) |
1031          (((tile_bundle_bits)(n & 0x08000000)) << 31);
1032 }
1033
1034 static __inline tile_bundle_bits
1035 create_MF_Imm15_X1(int num)
1036 {
1037   const unsigned int n = (unsigned int)num;
1038   return (((tile_bundle_bits)(n & 0x00003fff)) << 37) |
1039          (((tile_bundle_bits)(n & 0x00004000)) << 44);
1040 }
1041
1042 static __inline tile_bundle_bits
1043 create_MMEnd_X0(int num)
1044 {
1045   const unsigned int n = (unsigned int)num;
1046   return ((n & 0x1f) << 18);
1047 }
1048
1049 static __inline tile_bundle_bits
1050 create_MMEnd_X1(int num)
1051 {
1052   const unsigned int n = (unsigned int)num;
1053   return (((tile_bundle_bits)(n & 0x1f)) << 49);
1054 }
1055
1056 static __inline tile_bundle_bits
1057 create_MMStart_X0(int num)
1058 {
1059   const unsigned int n = (unsigned int)num;
1060   return ((n & 0x1f) << 23);
1061 }
1062
1063 static __inline tile_bundle_bits
1064 create_MMStart_X1(int num)
1065 {
1066   const unsigned int n = (unsigned int)num;
1067   return (((tile_bundle_bits)(n & 0x1f)) << 54);
1068 }
1069
1070 static __inline tile_bundle_bits
1071 create_MT_Imm15_X1(int num)
1072 {
1073   const unsigned int n = (unsigned int)num;
1074   return (((tile_bundle_bits)(n & 0x0000003f)) << 31) |
1075          (((tile_bundle_bits)(n & 0x00003fc0)) << 37) |
1076          (((tile_bundle_bits)(n & 0x00004000)) << 44);
1077 }
1078
1079 static __inline tile_bundle_bits
1080 create_Mode(int num)
1081 {
1082   const unsigned int n = (unsigned int)num;
1083   return (((tile_bundle_bits)(n & 0x1)) << 63);
1084 }
1085
1086 static __inline tile_bundle_bits
1087 create_NoRegOpcodeExtension_SN(int num)
1088 {
1089   const unsigned int n = (unsigned int)num;
1090   return ((n & 0xf) << 0);
1091 }
1092
1093 static __inline tile_bundle_bits
1094 create_Opcode_SN(int num)
1095 {
1096   const unsigned int n = (unsigned int)num;
1097   return ((n & 0x3f) << 10);
1098 }
1099
1100 static __inline tile_bundle_bits
1101 create_Opcode_X0(int num)
1102 {
1103   const unsigned int n = (unsigned int)num;
1104   return ((n & 0x7) << 28);
1105 }
1106
1107 static __inline tile_bundle_bits
1108 create_Opcode_X1(int num)
1109 {
1110   const unsigned int n = (unsigned int)num;
1111   return (((tile_bundle_bits)(n & 0xf)) << 59);
1112 }
1113
1114 static __inline tile_bundle_bits
1115 create_Opcode_Y0(int num)
1116 {
1117   const unsigned int n = (unsigned int)num;
1118   return ((n & 0xf) << 27);
1119 }
1120
1121 static __inline tile_bundle_bits
1122 create_Opcode_Y1(int num)
1123 {
1124   const unsigned int n = (unsigned int)num;
1125   return (((tile_bundle_bits)(n & 0xf)) << 59);
1126 }
1127
1128 static __inline tile_bundle_bits
1129 create_Opcode_Y2(int num)
1130 {
1131   const unsigned int n = (unsigned int)num;
1132   return (((tile_bundle_bits)(n & 0x7)) << 56);
1133 }
1134
1135 static __inline tile_bundle_bits
1136 create_RROpcodeExtension_SN(int num)
1137 {
1138   const unsigned int n = (unsigned int)num;
1139   return ((n & 0xf) << 4);
1140 }
1141
1142 static __inline tile_bundle_bits
1143 create_RRROpcodeExtension_X0(int num)
1144 {
1145   const unsigned int n = (unsigned int)num;
1146   return ((n & 0x1ff) << 18);
1147 }
1148
1149 static __inline tile_bundle_bits
1150 create_RRROpcodeExtension_X1(int num)
1151 {
1152   const unsigned int n = (unsigned int)num;
1153   return (((tile_bundle_bits)(n & 0x1ff)) << 49);
1154 }
1155
1156 static __inline tile_bundle_bits
1157 create_RRROpcodeExtension_Y0(int num)
1158 {
1159   const unsigned int n = (unsigned int)num;
1160   return ((n & 0x3) << 18);
1161 }
1162
1163 static __inline tile_bundle_bits
1164 create_RRROpcodeExtension_Y1(int num)
1165 {
1166   const unsigned int n = (unsigned int)num;
1167   return (((tile_bundle_bits)(n & 0x3)) << 49);
1168 }
1169
1170 static __inline tile_bundle_bits
1171 create_RouteOpcodeExtension_SN(int num)
1172 {
1173   const unsigned int n = (unsigned int)num;
1174   return ((n & 0x3ff) << 0);
1175 }
1176
1177 static __inline tile_bundle_bits
1178 create_S_X0(int num)
1179 {
1180   const unsigned int n = (unsigned int)num;
1181   return ((n & 0x1) << 27);
1182 }
1183
1184 static __inline tile_bundle_bits
1185 create_S_X1(int num)
1186 {
1187   const unsigned int n = (unsigned int)num;
1188   return (((tile_bundle_bits)(n & 0x1)) << 58);
1189 }
1190
1191 static __inline tile_bundle_bits
1192 create_ShAmt_X0(int num)
1193 {
1194   const unsigned int n = (unsigned int)num;
1195   return ((n & 0x1f) << 12);
1196 }
1197
1198 static __inline tile_bundle_bits
1199 create_ShAmt_X1(int num)
1200 {
1201   const unsigned int n = (unsigned int)num;
1202   return (((tile_bundle_bits)(n & 0x1f)) << 43);
1203 }
1204
1205 static __inline tile_bundle_bits
1206 create_ShAmt_Y0(int num)
1207 {
1208   const unsigned int n = (unsigned int)num;
1209   return ((n & 0x1f) << 12);
1210 }
1211
1212 static __inline tile_bundle_bits
1213 create_ShAmt_Y1(int num)
1214 {
1215   const unsigned int n = (unsigned int)num;
1216   return (((tile_bundle_bits)(n & 0x1f)) << 43);
1217 }
1218
1219 static __inline tile_bundle_bits
1220 create_SrcA_X0(int num)
1221 {
1222   const unsigned int n = (unsigned int)num;
1223   return ((n & 0x3f) << 6);
1224 }
1225
1226 static __inline tile_bundle_bits
1227 create_SrcA_X1(int num)
1228 {
1229   const unsigned int n = (unsigned int)num;
1230   return (((tile_bundle_bits)(n & 0x3f)) << 37);
1231 }
1232
1233 static __inline tile_bundle_bits
1234 create_SrcA_Y0(int num)
1235 {
1236   const unsigned int n = (unsigned int)num;
1237   return ((n & 0x3f) << 6);
1238 }
1239
1240 static __inline tile_bundle_bits
1241 create_SrcA_Y1(int num)
1242 {
1243   const unsigned int n = (unsigned int)num;
1244   return (((tile_bundle_bits)(n & 0x3f)) << 37);
1245 }
1246
1247 static __inline tile_bundle_bits
1248 create_SrcA_Y2(int num)
1249 {
1250   const unsigned int n = (unsigned int)num;
1251   return ((n & 0x00000001) << 26) |
1252          (((tile_bundle_bits)(n & 0x0000003e)) << 50);
1253 }
1254
1255 static __inline tile_bundle_bits
1256 create_SrcBDest_Y2(int num)
1257 {
1258   const unsigned int n = (unsigned int)num;
1259   return ((n & 0x3f) << 20);
1260 }
1261
1262 static __inline tile_bundle_bits
1263 create_SrcB_X0(int num)
1264 {
1265   const unsigned int n = (unsigned int)num;
1266   return ((n & 0x3f) << 12);
1267 }
1268
1269 static __inline tile_bundle_bits
1270 create_SrcB_X1(int num)
1271 {
1272   const unsigned int n = (unsigned int)num;
1273   return (((tile_bundle_bits)(n & 0x3f)) << 43);
1274 }
1275
1276 static __inline tile_bundle_bits
1277 create_SrcB_Y0(int num)
1278 {
1279   const unsigned int n = (unsigned int)num;
1280   return ((n & 0x3f) << 12);
1281 }
1282
1283 static __inline tile_bundle_bits
1284 create_SrcB_Y1(int num)
1285 {
1286   const unsigned int n = (unsigned int)num;
1287   return (((tile_bundle_bits)(n & 0x3f)) << 43);
1288 }
1289
1290 static __inline tile_bundle_bits
1291 create_Src_SN(int num)
1292 {
1293   const unsigned int n = (unsigned int)num;
1294   return ((n & 0x3) << 0);
1295 }
1296
1297 static __inline tile_bundle_bits
1298 create_UnOpcodeExtension_X0(int num)
1299 {
1300   const unsigned int n = (unsigned int)num;
1301   return ((n & 0x1f) << 12);
1302 }
1303
1304 static __inline tile_bundle_bits
1305 create_UnOpcodeExtension_X1(int num)
1306 {
1307   const unsigned int n = (unsigned int)num;
1308   return (((tile_bundle_bits)(n & 0x1f)) << 43);
1309 }
1310
1311 static __inline tile_bundle_bits
1312 create_UnOpcodeExtension_Y0(int num)
1313 {
1314   const unsigned int n = (unsigned int)num;
1315   return ((n & 0x1f) << 12);
1316 }
1317
1318 static __inline tile_bundle_bits
1319 create_UnOpcodeExtension_Y1(int num)
1320 {
1321   const unsigned int n = (unsigned int)num;
1322   return (((tile_bundle_bits)(n & 0x1f)) << 43);
1323 }
1324
1325 static __inline tile_bundle_bits
1326 create_UnShOpcodeExtension_X0(int num)
1327 {
1328   const unsigned int n = (unsigned int)num;
1329   return ((n & 0x3ff) << 17);
1330 }
1331
1332 static __inline tile_bundle_bits
1333 create_UnShOpcodeExtension_X1(int num)
1334 {
1335   const unsigned int n = (unsigned int)num;
1336   return (((tile_bundle_bits)(n & 0x3ff)) << 48);
1337 }
1338
1339 static __inline tile_bundle_bits
1340 create_UnShOpcodeExtension_Y0(int num)
1341 {
1342   const unsigned int n = (unsigned int)num;
1343   return ((n & 0x7) << 17);
1344 }
1345
1346 static __inline tile_bundle_bits
1347 create_UnShOpcodeExtension_Y1(int num)
1348 {
1349   const unsigned int n = (unsigned int)num;
1350   return (((tile_bundle_bits)(n & 0x7)) << 48);
1351 }
1352
1353
1354
1355 typedef enum
1356 {
1357   TILE_PIPELINE_X0,
1358   TILE_PIPELINE_X1,
1359   TILE_PIPELINE_Y0,
1360   TILE_PIPELINE_Y1,
1361   TILE_PIPELINE_Y2,
1362 } tile_pipeline;
1363
1364 #define tile_is_x_pipeline(p) ((int)(p) <= (int)TILE_PIPELINE_X1)
1365
1366 typedef enum
1367 {
1368   TILE_OP_TYPE_REGISTER,
1369   TILE_OP_TYPE_IMMEDIATE,
1370   TILE_OP_TYPE_ADDRESS,
1371   TILE_OP_TYPE_SPR
1372 } tile_operand_type;
1373
1374 /* This is the bit that determines if a bundle is in the Y encoding. */
1375 #define TILE_BUNDLE_Y_ENCODING_MASK ((tile_bundle_bits)1 << 63)
1376
1377 enum
1378 {
1379   /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
1380   TILE_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
1381
1382   /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */
1383   TILE_NUM_PIPELINE_ENCODINGS = 5,
1384
1385   /* Log base 2 of TILE_BUNDLE_SIZE_IN_BYTES. */
1386   TILE_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
1387
1388   /* Instructions take this many bytes. */
1389   TILE_BUNDLE_SIZE_IN_BYTES = 1 << TILE_LOG2_BUNDLE_SIZE_IN_BYTES,
1390
1391   /* Log base 2 of TILE_BUNDLE_ALIGNMENT_IN_BYTES. */
1392   TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
1393
1394   /* Bundles should be aligned modulo this number of bytes. */
1395   TILE_BUNDLE_ALIGNMENT_IN_BYTES =
1396     (1 << TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
1397
1398   /* Log base 2 of TILE_SN_INSTRUCTION_SIZE_IN_BYTES. */
1399   TILE_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES = 1,
1400
1401   /* Static network instructions take this many bytes. */
1402   TILE_SN_INSTRUCTION_SIZE_IN_BYTES =
1403     (1 << TILE_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES),
1404
1405   /* Number of registers (some are magic, such as network I/O). */
1406   TILE_NUM_REGISTERS = 64,
1407
1408   /* Number of static network registers. */
1409   TILE_NUM_SN_REGISTERS = 4
1410 };
1411
1412
1413 struct tile_operand
1414 {
1415   /* Is this operand a register, immediate or address? */
1416   tile_operand_type type;
1417
1418   /* The default relocation type for this operand.  */
1419   signed int default_reloc : 16;
1420
1421   /* How many bits is this value? (used for range checking) */
1422   unsigned int num_bits : 5;
1423
1424   /* Is the value signed? (used for range checking) */
1425   unsigned int is_signed : 1;
1426
1427   /* Is this operand a source register? */
1428   unsigned int is_src_reg : 1;
1429
1430   /* Is this operand written? (i.e. is it a destination register) */
1431   unsigned int is_dest_reg : 1;
1432
1433   /* Is this operand PC-relative? */
1434   unsigned int is_pc_relative : 1;
1435
1436   /* By how many bits do we right shift the value before inserting? */
1437   unsigned int rightshift : 2;
1438
1439   /* Return the bits for this operand to be ORed into an existing bundle. */
1440   tile_bundle_bits (*insert) (int op);
1441
1442   /* Extract this operand and return it. */
1443   unsigned int (*extract) (tile_bundle_bits bundle);
1444 };
1445
1446
1447 extern const struct tile_operand tile_operands[];
1448
1449 /* One finite-state machine per pipe for rapid instruction decoding. */
1450 extern const unsigned short * const
1451 tile_bundle_decoder_fsms[TILE_NUM_PIPELINE_ENCODINGS];
1452
1453
1454 struct tile_opcode
1455 {
1456   /* The opcode mnemonic, e.g. "add" */
1457   const char *name;
1458
1459   /* The enum value for this mnemonic. */
1460   tile_mnemonic mnemonic;
1461
1462   /* A bit mask of which of the five pipes this instruction
1463      is compatible with:
1464      X0  0x01
1465      X1  0x02
1466      Y0  0x04
1467      Y1  0x08
1468      Y2  0x10 */
1469   unsigned char pipes;
1470
1471   /* How many operands are there? */
1472   unsigned char num_operands;
1473
1474   /* Which register does this write implicitly, or TREG_ZERO if none? */
1475   unsigned char implicitly_written_register;
1476
1477   /* Can this be bundled with other instructions (almost always true). */
1478   unsigned char can_bundle;
1479
1480   /* The description of the operands. Each of these is an
1481    * index into the tile_operands[] table. */
1482   unsigned char operands[TILE_NUM_PIPELINE_ENCODINGS][TILE_MAX_OPERANDS];
1483
1484 };
1485
1486 extern const struct tile_opcode tile_opcodes[];
1487
1488
1489 /* Used for non-textual disassembly into structs. */
1490 struct tile_decoded_instruction
1491 {
1492   const struct tile_opcode *opcode;
1493   const struct tile_operand *operands[TILE_MAX_OPERANDS];
1494   int operand_values[TILE_MAX_OPERANDS];
1495 };
1496
1497
1498 /* Disassemble a bundle into a struct for machine processing. */
1499 extern int parse_insn_tile(tile_bundle_bits bits,
1500                            unsigned int pc,
1501                            struct tile_decoded_instruction
1502                            decoded[TILE_MAX_INSTRUCTIONS_PER_BUNDLE]);
1503
1504
1505
1506 #endif /* opcode_tile_h */