Home | History | Annotate | Download | only in opcode
      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
    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
    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
    492 get_BrType_X1(tilepro_bundle_bits n)
    493 {
    494   return (((unsigned int)(n >> 31)) & 0xf);
    495 }
    496 
    497 static __inline unsigned int
    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
    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
    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
    519 get_Dest_X1(tilepro_bundle_bits n)
    520 {
    521   return (((unsigned int)(n >> 31)) & 0x3f);
    522 }
    523 
    524 static __inline unsigned int
    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
    532 get_Dest_Y1(tilepro_bundle_bits n)
    533 {
    534   return (((unsigned int)(n >> 31)) & 0x3f);
    535 }
    536 
    537 static __inline unsigned int
    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
    545 get_Imm16_X1(tilepro_bundle_bits n)
    546 {
    547   return (((unsigned int)(n >> 43)) & 0xffff);
    548 }
    549 
    550 static __inline unsigned int
    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
    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
    565 get_Imm8_X1(tilepro_bundle_bits n)
    566 {
    567   return (((unsigned int)(n >> 43)) & 0xff);
    568 }
    569 
    570 static __inline unsigned int
    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
    578 get_Imm8_Y1(tilepro_bundle_bits n)
    579 {
    580   return (((unsigned int)(n >> 43)) & 0xff);
    581 }
    582 
    583 static __inline unsigned int
    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
    591 get_ImmOpcodeExtension_X1(tilepro_bundle_bits n)
    592 {
    593   return (((unsigned int)(n >> 51)) & 0x7f);
    594 }
    595 
    596 static __inline unsigned int
    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
    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
    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
    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
    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
    638 get_MMEnd_X1(tilepro_bundle_bits n)
    639 {
    640   return (((unsigned int)(n >> 49)) & 0x1f);
    641 }
    642 
    643 static __inline unsigned int
    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
    651 get_MMStart_X1(tilepro_bundle_bits n)
    652 {
    653   return (((unsigned int)(n >> 54)) & 0x1f);
    654 }
    655 
    656 static __inline unsigned int
    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
    665 get_Mode(tilepro_bundle_bits n)
    666 {
    667   return (((unsigned int)(n >> 63)) & 0x1);
    668 }
    669 
    670 static __inline unsigned int
    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
    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
    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
    692 get_Opcode_X1(tilepro_bundle_bits n)
    693 {
    694   return (((unsigned int)(n >> 59)) & 0xf);
    695 }
    696 
    697 static __inline unsigned int
    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
    705 get_Opcode_Y1(tilepro_bundle_bits n)
    706 {
    707   return (((unsigned int)(n >> 59)) & 0xf);
    708 }
    709 
    710 static __inline unsigned int
    711 get_Opcode_Y2(tilepro_bundle_bits n)
    712 {
    713   return (((unsigned int)(n >> 56)) & 0x7);
    714 }
    715 
    716 static __inline unsigned int
    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
    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
    731 get_RRROpcodeExtension_X1(tilepro_bundle_bits n)
    732 {
    733   return (((unsigned int)(n >> 49)) & 0x1ff);
    734 }
    735 
    736 static __inline unsigned int
    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
    744 get_RRROpcodeExtension_Y1(tilepro_bundle_bits n)
    745 {
    746   return (((unsigned int)(n >> 49)) & 0x3);
    747 }
    748 
    749 static __inline unsigned int
    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
    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
    764 get_S_X1(tilepro_bundle_bits n)
    765 {
    766   return (((unsigned int)(n >> 58)) & 0x1);
    767 }
    768 
    769 static __inline unsigned int
    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
    777 get_ShAmt_X1(tilepro_bundle_bits n)
    778 {
    779   return (((unsigned int)(n >> 43)) & 0x1f);
    780 }
    781 
    782 static __inline unsigned int
    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
    790 get_ShAmt_Y1(tilepro_bundle_bits n)
    791 {
    792   return (((unsigned int)(n >> 43)) & 0x1f);
    793 }
    794 
    795 static __inline unsigned int
    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
    803 get_SrcA_X1(tilepro_bundle_bits n)
    804 {
    805   return (((unsigned int)(n >> 37)) & 0x3f);
    806 }
    807 
    808 static __inline unsigned int
    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
    816 get_SrcA_Y1(tilepro_bundle_bits n)
    817 {
    818   return (((unsigned int)(n >> 37)) & 0x3f);
    819 }
    820 
    821 static __inline unsigned int
    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
    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
    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
    843 get_SrcB_X1(tilepro_bundle_bits n)
    844 {
    845   return (((unsigned int)(n >> 43)) & 0x3f);
    846 }
    847 
    848 static __inline unsigned int
    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
    856 get_SrcB_Y1(tilepro_bundle_bits n)
    857 {
    858   return (((unsigned int)(n >> 43)) & 0x3f);
    859 }
    860 
    861 static __inline unsigned int
    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
    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
    876 get_UnOpcodeExtension_X1(tilepro_bundle_bits n)
    877 {
    878   return (((unsigned int)(n >> 43)) & 0x1f);
    879 }
    880 
    881 static __inline unsigned int
    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
    889 get_UnOpcodeExtension_Y1(tilepro_bundle_bits n)
    890 {
    891   return (((unsigned int)(n >> 43)) & 0x1f);
    892 }
    893 
    894 static __inline unsigned int
    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
    902 get_UnShOpcodeExtension_X1(tilepro_bundle_bits n)
    903 {
    904   return (((unsigned int)(n >> 48)) & 0x3ff);
    905 }
    906 
    907 static __inline unsigned int
    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
    915 get_UnShOpcodeExtension_Y1(tilepro_bundle_bits n)
    916 {
    917   return (((unsigned int)(n >> 48)) & 0x7);
    918 }
    919 
    920 
    921 static __inline int
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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