linux/arch/tile/include/asm/opcode-tile_32.h
<<
>>
Prefs
   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
   8typedef unsigned long long tile_bundle_bits;
   9
  10
  11enum
  12{
  13  TILE_MAX_OPERANDS = 5 /* mm */
  14};
  15
  16typedef 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
 424static __inline unsigned int
 425get_BrOff_SN(tile_bundle_bits num)
 426{
 427  const unsigned int n = (unsigned int)num;
 428  return (((n >> 0)) & 0x3ff);
 429}
 430
 431static __inline unsigned int
 432get_BrOff_X1(tile_bundle_bits n)
 433{
 434  return (((unsigned int)(n >> 43)) & 0x00007fff) |
 435         (((unsigned int)(n >> 20)) & 0x00018000);
 436}
 437
 438static __inline unsigned int
 439get_BrType_X1(tile_bundle_bits n)
 440{
 441  return (((unsigned int)(n >> 31)) & 0xf);
 442}
 443
 444static __inline unsigned int
 445get_Dest_Imm8_X1(tile_bundle_bits n)
 446{
 447  return (((unsigned int)(n >> 31)) & 0x0000003f) |
 448         (((unsigned int)(n >> 43)) & 0x000000c0);
 449}
 450
 451static __inline unsigned int
 452get_Dest_SN(tile_bundle_bits num)
 453{
 454  const unsigned int n = (unsigned int)num;
 455  return (((n >> 2)) & 0x3);
 456}
 457
 458static __inline unsigned int
 459get_Dest_X0(tile_bundle_bits num)
 460{
 461  const unsigned int n = (unsigned int)num;
 462  return (((n >> 0)) & 0x3f);
 463}
 464
 465static __inline unsigned int
 466get_Dest_X1(tile_bundle_bits n)
 467{
 468  return (((unsigned int)(n >> 31)) & 0x3f);
 469}
 470
 471static __inline unsigned int
 472get_Dest_Y0(tile_bundle_bits num)
 473{
 474  const unsigned int n = (unsigned int)num;
 475  return (((n >> 0)) & 0x3f);
 476}
 477
 478static __inline unsigned int
 479get_Dest_Y1(tile_bundle_bits n)
 480{
 481  return (((unsigned int)(n >> 31)) & 0x3f);
 482}
 483
 484static __inline unsigned int
 485get_Imm16_X0(tile_bundle_bits num)
 486{
 487  const unsigned int n = (unsigned int)num;
 488  return (((n >> 12)) & 0xffff);
 489}
 490
 491static __inline unsigned int
 492get_Imm16_X1(tile_bundle_bits n)
 493{
 494  return (((unsigned int)(n >> 43)) & 0xffff);
 495}
 496
 497static __inline unsigned int
 498get_Imm8_SN(tile_bundle_bits num)
 499{
 500  const unsigned int n = (unsigned int)num;
 501  return (((n >> 0)) & 0xff);
 502}
 503
 504static __inline unsigned int
 505get_Imm8_X0(tile_bundle_bits num)
 506{
 507  const unsigned int n = (unsigned int)num;
 508  return (((n >> 12)) & 0xff);
 509}
 510
 511static __inline unsigned int
 512get_Imm8_X1(tile_bundle_bits n)
 513{
 514  return (((unsigned int)(n >> 43)) & 0xff);
 515}
 516
 517static __inline unsigned int
 518get_Imm8_Y0(tile_bundle_bits num)
 519{
 520  const unsigned int n = (unsigned int)num;
 521  return (((n >> 12)) & 0xff);
 522}
 523
 524static __inline unsigned int
 525get_Imm8_Y1(tile_bundle_bits n)
 526{
 527  return (((unsigned int)(n >> 43)) & 0xff);
 528}
 529
 530static __inline unsigned int
 531get_ImmOpcodeExtension_X0(tile_bundle_bits num)
 532{
 533  const unsigned int n = (unsigned int)num;
 534  return (((n >> 20)) & 0x7f);
 535}
 536
 537static __inline unsigned int
 538get_ImmOpcodeExtension_X1(tile_bundle_bits n)
 539{
 540  return (((unsigned int)(n >> 51)) & 0x7f);
 541}
 542
 543static __inline unsigned int
 544get_ImmRROpcodeExtension_SN(tile_bundle_bits num)
 545{
 546  const unsigned int n = (unsigned int)num;
 547  return (((n >> 8)) & 0x3);
 548}
 549
 550static __inline unsigned int
 551get_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
 560static __inline unsigned int
 561get_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
 570static __inline unsigned int
 571get_MF_Imm15_X1(tile_bundle_bits n)
 572{
 573  return (((unsigned int)(n >> 37)) & 0x00003fff) |
 574         (((unsigned int)(n >> 44)) & 0x00004000);
 575}
 576
 577static __inline unsigned int
 578get_MMEnd_X0(tile_bundle_bits num)
 579{
 580  const unsigned int n = (unsigned int)num;
 581  return (((n >> 18)) & 0x1f);
 582}
 583
 584static __inline unsigned int
 585get_MMEnd_X1(tile_bundle_bits n)
 586{
 587  return (((unsigned int)(n >> 49)) & 0x1f);
 588}
 589
 590static __inline unsigned int
 591get_MMStart_X0(tile_bundle_bits num)
 592{
 593  const unsigned int n = (unsigned int)num;
 594  return (((n >> 23)) & 0x1f);
 595}
 596
 597static __inline unsigned int
 598get_MMStart_X1(tile_bundle_bits n)
 599{
 600  return (((unsigned int)(n >> 54)) & 0x1f);
 601}
 602
 603static __inline unsigned int
 604get_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
 611static __inline unsigned int
 612get_Mode(tile_bundle_bits n)
 613{
 614  return (((unsigned int)(n >> 63)) & 0x1);
 615}
 616
 617static __inline unsigned int
 618get_NoRegOpcodeExtension_SN(tile_bundle_bits num)
 619{
 620  const unsigned int n = (unsigned int)num;
 621  return (((n >> 0)) & 0xf);
 622}
 623
 624static __inline unsigned int
 625get_Opcode_SN(tile_bundle_bits num)
 626{
 627  const unsigned int n = (unsigned int)num;
 628  return (((n >> 10)) & 0x3f);
 629}
 630
 631static __inline unsigned int
 632get_Opcode_X0(tile_bundle_bits num)
 633{
 634  const unsigned int n = (unsigned int)num;
 635  return (((n >> 28)) & 0x7);
 636}
 637
 638static __inline unsigned int
 639get_Opcode_X1(tile_bundle_bits n)
 640{
 641  return (((unsigned int)(n >> 59)) & 0xf);
 642}
 643
 644static __inline unsigned int
 645get_Opcode_Y0(tile_bundle_bits num)
 646{
 647  const unsigned int n = (unsigned int)num;
 648  return (((n >> 27)) & 0xf);
 649}
 650
 651static __inline unsigned int
 652get_Opcode_Y1(tile_bundle_bits n)
 653{
 654  return (((unsigned int)(n >> 59)) & 0xf);
 655}
 656
 657static __inline unsigned int
 658get_Opcode_Y2(tile_bundle_bits n)
 659{
 660  return (((unsigned int)(n >> 56)) & 0x7);
 661}
 662
 663static __inline unsigned int
 664get_RROpcodeExtension_SN(tile_bundle_bits num)
 665{
 666  const unsigned int n = (unsigned int)num;
 667  return (((n >> 4)) & 0xf);
 668}
 669
 670static __inline unsigned int
 671get_RRROpcodeExtension_X0(tile_bundle_bits num)
 672{
 673  const unsigned int n = (unsigned int)num;
 674  return (((n >> 18)) & 0x1ff);
 675}
 676
 677static __inline unsigned int
 678get_RRROpcodeExtension_X1(tile_bundle_bits n)
 679{
 680  return (((unsigned int)(n >> 49)) & 0x1ff);
 681}
 682
 683static __inline unsigned int
 684get_RRROpcodeExtension_Y0(tile_bundle_bits num)
 685{
 686  const unsigned int n = (unsigned int)num;
 687  return (((n >> 18)) & 0x3);
 688}
 689
 690static __inline unsigned int
 691get_RRROpcodeExtension_Y1(tile_bundle_bits n)
 692{
 693  return (((unsigned int)(n >> 49)) & 0x3);
 694}
 695
 696static __inline unsigned int
 697get_RouteOpcodeExtension_SN(tile_bundle_bits num)
 698{
 699  const unsigned int n = (unsigned int)num;
 700  return (((n >> 0)) & 0x3ff);
 701}
 702
 703static __inline unsigned int
 704get_S_X0(tile_bundle_bits num)
 705{
 706  const unsigned int n = (unsigned int)num;
 707  return (((n >> 27)) & 0x1);
 708}
 709
 710static __inline unsigned int
 711get_S_X1(tile_bundle_bits n)
 712{
 713  return (((unsigned int)(n >> 58)) & 0x1);
 714}
 715
 716static __inline unsigned int
 717get_ShAmt_X0(tile_bundle_bits num)
 718{
 719  const unsigned int n = (unsigned int)num;
 720  return (((n >> 12)) & 0x1f);
 721}
 722
 723static __inline unsigned int
 724get_ShAmt_X1(tile_bundle_bits n)
 725{
 726  return (((unsigned int)(n >> 43)) & 0x1f);
 727}
 728
 729static __inline unsigned int
 730get_ShAmt_Y0(tile_bundle_bits num)
 731{
 732  const unsigned int n = (unsigned int)num;
 733  return (((n >> 12)) & 0x1f);
 734}
 735
 736static __inline unsigned int
 737get_ShAmt_Y1(tile_bundle_bits n)
 738{
 739  return (((unsigned int)(n >> 43)) & 0x1f);
 740}
 741
 742static __inline unsigned int
 743get_SrcA_X0(tile_bundle_bits num)
 744{
 745  const unsigned int n = (unsigned int)num;
 746  return (((n >> 6)) & 0x3f);
 747}
 748
 749static __inline unsigned int
 750get_SrcA_X1(tile_bundle_bits n)
 751{
 752  return (((unsigned int)(n >> 37)) & 0x3f);
 753}
 754
 755static __inline unsigned int
 756get_SrcA_Y0(tile_bundle_bits num)
 757{
 758  const unsigned int n = (unsigned int)num;
 759  return (((n >> 6)) & 0x3f);
 760}
 761
 762static __inline unsigned int
 763get_SrcA_Y1(tile_bundle_bits n)
 764{
 765  return (((unsigned int)(n >> 37)) & 0x3f);
 766}
 767
 768static __inline unsigned int
 769get_SrcA_Y2(tile_bundle_bits n)
 770{
 771  return (((n >> 26)) & 0x00000001) |
 772         (((unsigned int)(n >> 50)) & 0x0000003e);
 773}
 774
 775static __inline unsigned int
 776get_SrcBDest_Y2(tile_bundle_bits num)
 777{
 778  const unsigned int n = (unsigned int)num;
 779  return (((n >> 20)) & 0x3f);
 780}
 781
 782static __inline unsigned int
 783get_SrcB_X0(tile_bundle_bits num)
 784{
 785  const unsigned int n = (unsigned int)num;
 786  return (((n >> 12)) & 0x3f);
 787}
 788
 789static __inline unsigned int
 790get_SrcB_X1(tile_bundle_bits n)
 791{
 792  return (((unsigned int)(n >> 43)) & 0x3f);
 793}
 794
 795static __inline unsigned int
 796get_SrcB_Y0(tile_bundle_bits num)
 797{
 798  const unsigned int n = (unsigned int)num;
 799  return (((n >> 12)) & 0x3f);
 800}
 801
 802static __inline unsigned int
 803get_SrcB_Y1(tile_bundle_bits n)
 804{
 805  return (((unsigned int)(n >> 43)) & 0x3f);
 806}
 807
 808static __inline unsigned int
 809get_Src_SN(tile_bundle_bits num)
 810{
 811  const unsigned int n = (unsigned int)num;
 812  return (((n >> 0)) & 0x3);
 813}
 814
 815static __inline unsigned int
 816get_UnOpcodeExtension_X0(tile_bundle_bits num)
 817{
 818  const unsigned int n = (unsigned int)num;
 819  return (((n >> 12)) & 0x1f);
 820}
 821
 822static __inline unsigned int
 823get_UnOpcodeExtension_X1(tile_bundle_bits n)
 824{
 825  return (((unsigned int)(n >> 43)) & 0x1f);
 826}
 827
 828static __inline unsigned int
 829get_UnOpcodeExtension_Y0(tile_bundle_bits num)
 830{
 831  const unsigned int n = (unsigned int)num;
 832  return (((n >> 12)) & 0x1f);
 833}
 834
 835static __inline unsigned int
 836get_UnOpcodeExtension_Y1(tile_bundle_bits n)
 837{
 838  return (((unsigned int)(n >> 43)) & 0x1f);
 839}
 840
 841static __inline unsigned int
 842get_UnShOpcodeExtension_X0(tile_bundle_bits num)
 843{
 844  const unsigned int n = (unsigned int)num;
 845  return (((n >> 17)) & 0x3ff);
 846}
 847
 848static __inline unsigned int
 849get_UnShOpcodeExtension_X1(tile_bundle_bits n)
 850{
 851  return (((unsigned int)(n >> 48)) & 0x3ff);
 852}
 853
 854static __inline unsigned int
 855get_UnShOpcodeExtension_Y0(tile_bundle_bits num)
 856{
 857  const unsigned int n = (unsigned int)num;
 858  return (((n >> 17)) & 0x7);
 859}
 860
 861static __inline unsigned int
 862get_UnShOpcodeExtension_Y1(tile_bundle_bits n)
 863{
 864  return (((unsigned int)(n >> 48)) & 0x7);
 865}
 866
 867
 868static __inline int
 869sign_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
 877static __inline tile_bundle_bits
 878create_BrOff_SN(int num)
 879{
 880  const unsigned int n = (unsigned int)num;
 881  return ((n & 0x3ff) << 0);
 882}
 883
 884static __inline tile_bundle_bits
 885create_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
 892static __inline tile_bundle_bits
 893create_BrType_X1(int num)
 894{
 895  const unsigned int n = (unsigned int)num;
 896  return (((tile_bundle_bits)(n & 0xf)) << 31);
 897}
 898
 899static __inline tile_bundle_bits
 900create_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
 907static __inline tile_bundle_bits
 908create_Dest_SN(int num)
 909{
 910  const unsigned int n = (unsigned int)num;
 911  return ((n & 0x3) << 2);
 912}
 913
 914static __inline tile_bundle_bits
 915create_Dest_X0(int num)
 916{
 917  const unsigned int n = (unsigned int)num;
 918  return ((n & 0x3f) << 0);
 919}
 920
 921static __inline tile_bundle_bits
 922create_Dest_X1(int num)
 923{
 924  const unsigned int n = (unsigned int)num;
 925  return (((tile_bundle_bits)(n & 0x3f)) << 31);
 926}
 927
 928static __inline tile_bundle_bits
 929create_Dest_Y0(int num)
 930{
 931  const unsigned int n = (unsigned int)num;
 932  return ((n & 0x3f) << 0);
 933}
 934
 935static __inline tile_bundle_bits
 936create_Dest_Y1(int num)
 937{
 938  const unsigned int n = (unsigned int)num;
 939  return (((tile_bundle_bits)(n & 0x3f)) << 31);
 940}
 941
 942static __inline tile_bundle_bits
 943create_Imm16_X0(int num)
 944{
 945  const unsigned int n = (unsigned int)num;
 946  return ((n & 0xffff) << 12);
 947}
 948
 949static __inline tile_bundle_bits
 950create_Imm16_X1(int num)
 951{
 952  const unsigned int n = (unsigned int)num;
 953  return (((tile_bundle_bits)(n & 0xffff)) << 43);
 954}
 955
 956static __inline tile_bundle_bits
 957create_Imm8_SN(int num)
 958{
 959  const unsigned int n = (unsigned int)num;
 960  return ((n & 0xff) << 0);
 961}
 962
 963static __inline tile_bundle_bits
 964create_Imm8_X0(int num)
 965{
 966  const unsigned int n = (unsigned int)num;
 967  return ((n & 0xff) << 12);
 968}
 969
 970static __inline tile_bundle_bits
 971create_Imm8_X1(int num)
 972{
 973  const unsigned int n = (unsigned int)num;
 974  return (((tile_bundle_bits)(n & 0xff)) << 43);
 975}
 976
 977static __inline tile_bundle_bits
 978create_Imm8_Y0(int num)
 979{
 980  const unsigned int n = (unsigned int)num;
 981  return ((n & 0xff) << 12);
 982}
 983
 984static __inline tile_bundle_bits
 985create_Imm8_Y1(int num)
 986{
 987  const unsigned int n = (unsigned int)num;
 988  return (((tile_bundle_bits)(n & 0xff)) << 43);
 989}
 990
 991static __inline tile_bundle_bits
 992create_ImmOpcodeExtension_X0(int num)
 993{
 994  const unsigned int n = (unsigned int)num;
 995  return ((n & 0x7f) << 20);
 996}
 997
 998static __inline tile_bundle_bits
 999create_ImmOpcodeExtension_X1(int num)
1000{
1001  const unsigned int n = (unsigned int)num;
1002  return (((tile_bundle_bits)(n & 0x7f)) << 51);
1003}
1004
1005static __inline tile_bundle_bits
1006create_ImmRROpcodeExtension_SN(int num)
1007{
1008  const unsigned int n = (unsigned int)num;
1009  return ((n & 0x3) << 8);
1010}
1011
1012static __inline tile_bundle_bits
1013create_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
1023static __inline tile_bundle_bits
1024create_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
1034static __inline tile_bundle_bits
1035create_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
1042static __inline tile_bundle_bits
1043create_MMEnd_X0(int num)
1044{
1045  const unsigned int n = (unsigned int)num;
1046  return ((n & 0x1f) << 18);
1047}
1048
1049static __inline tile_bundle_bits
1050create_MMEnd_X1(int num)
1051{
1052  const unsigned int n = (unsigned int)num;
1053  return (((tile_bundle_bits)(n & 0x1f)) << 49);
1054}
1055
1056static __inline tile_bundle_bits
1057create_MMStart_X0(int num)
1058{
1059  const unsigned int n = (unsigned int)num;
1060  return ((n & 0x1f) << 23);
1061}
1062
1063static __inline tile_bundle_bits
1064create_MMStart_X1(int num)
1065{
1066  const unsigned int n = (unsigned int)num;
1067  return (((tile_bundle_bits)(n & 0x1f)) << 54);
1068}
1069
1070static __inline tile_bundle_bits
1071create_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
1079static __inline tile_bundle_bits
1080create_Mode(int num)
1081{
1082  const unsigned int n = (unsigned int)num;
1083  return (((tile_bundle_bits)(n & 0x1)) << 63);
1084}
1085
1086static __inline tile_bundle_bits
1087create_NoRegOpcodeExtension_SN(int num)
1088{
1089  const unsigned int n = (unsigned int)num;
1090  return ((n & 0xf) << 0);
1091}
1092
1093static __inline tile_bundle_bits
1094create_Opcode_SN(int num)
1095{
1096  const unsigned int n = (unsigned int)num;
1097  return ((n & 0x3f) << 10);
1098}
1099
1100static __inline tile_bundle_bits
1101create_Opcode_X0(int num)
1102{
1103  const unsigned int n = (unsigned int)num;
1104  return ((n & 0x7) << 28);
1105}
1106
1107static __inline tile_bundle_bits
1108create_Opcode_X1(int num)
1109{
1110  const unsigned int n = (unsigned int)num;
1111  return (((tile_bundle_bits)(n & 0xf)) << 59);
1112}
1113
1114static __inline tile_bundle_bits
1115create_Opcode_Y0(int num)
1116{
1117  const unsigned int n = (unsigned int)num;
1118  return ((n & 0xf) << 27);
1119}
1120
1121static __inline tile_bundle_bits
1122create_Opcode_Y1(int num)
1123{
1124  const unsigned int n = (unsigned int)num;
1125  return (((tile_bundle_bits)(n & 0xf)) << 59);
1126}
1127
1128static __inline tile_bundle_bits
1129create_Opcode_Y2(int num)
1130{
1131  const unsigned int n = (unsigned int)num;
1132  return (((tile_bundle_bits)(n & 0x7)) << 56);
1133}
1134
1135static __inline tile_bundle_bits
1136create_RROpcodeExtension_SN(int num)
1137{
1138  const unsigned int n = (unsigned int)num;
1139  return ((n & 0xf) << 4);
1140}
1141
1142static __inline tile_bundle_bits
1143create_RRROpcodeExtension_X0(int num)
1144{
1145  const unsigned int n = (unsigned int)num;
1146  return ((n & 0x1ff) << 18);
1147}
1148
1149static __inline tile_bundle_bits
1150create_RRROpcodeExtension_X1(int num)
1151{
1152  const unsigned int n = (unsigned int)num;
1153  return (((tile_bundle_bits)(n & 0x1ff)) << 49);
1154}
1155
1156static __inline tile_bundle_bits
1157create_RRROpcodeExtension_Y0(int num)
1158{
1159  const unsigned int n = (unsigned int)num;
1160  return ((n & 0x3) << 18);
1161}
1162
1163static __inline tile_bundle_bits
1164create_RRROpcodeExtension_Y1(int num)
1165{
1166  const unsigned int n = (unsigned int)num;
1167  return (((tile_bundle_bits)(n & 0x3)) << 49);
1168}
1169
1170static __inline tile_bundle_bits
1171create_RouteOpcodeExtension_SN(int num)
1172{
1173  const unsigned int n = (unsigned int)num;
1174  return ((n & 0x3ff) << 0);
1175}
1176
1177static __inline tile_bundle_bits
1178create_S_X0(int num)
1179{
1180  const unsigned int n = (unsigned int)num;
1181  return ((n & 0x1) << 27);
1182}
1183
1184static __inline tile_bundle_bits
1185create_S_X1(int num)
1186{
1187  const unsigned int n = (unsigned int)num;
1188  return (((tile_bundle_bits)(n & 0x1)) << 58);
1189}
1190
1191static __inline tile_bundle_bits
1192create_ShAmt_X0(int num)
1193{
1194  const unsigned int n = (unsigned int)num;
1195  return ((n & 0x1f) << 12);
1196}
1197
1198static __inline tile_bundle_bits
1199create_ShAmt_X1(int num)
1200{
1201  const unsigned int n = (unsigned int)num;
1202  return (((tile_bundle_bits)(n & 0x1f)) << 43);
1203}
1204
1205static __inline tile_bundle_bits
1206create_ShAmt_Y0(int num)
1207{
1208  const unsigned int n = (unsigned int)num;
1209  return ((n & 0x1f) << 12);
1210}
1211
1212static __inline tile_bundle_bits
1213create_ShAmt_Y1(int num)
1214{
1215  const unsigned int n = (unsigned int)num;
1216  return (((tile_bundle_bits)(n & 0x1f)) << 43);
1217}
1218
1219static __inline tile_bundle_bits
1220create_SrcA_X0(int num)
1221{
1222  const unsigned int n = (unsigned int)num;
1223  return ((n & 0x3f) << 6);
1224}
1225
1226static __inline tile_bundle_bits
1227create_SrcA_X1(int num)
1228{
1229  const unsigned int n = (unsigned int)num;
1230  return (((tile_bundle_bits)(n & 0x3f)) << 37);
1231}
1232
1233static __inline tile_bundle_bits
1234create_SrcA_Y0(int num)
1235{
1236  const unsigned int n = (unsigned int)num;
1237  return ((n & 0x3f) << 6);
1238}
1239
1240static __inline tile_bundle_bits
1241create_SrcA_Y1(int num)
1242{
1243  const unsigned int n = (unsigned int)num;
1244  return (((tile_bundle_bits)(n & 0x3f)) << 37);
1245}
1246
1247static __inline tile_bundle_bits
1248create_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
1255static __inline tile_bundle_bits
1256create_SrcBDest_Y2(int num)
1257{
1258  const unsigned int n = (unsigned int)num;
1259  return ((n & 0x3f) << 20);
1260}
1261
1262static __inline tile_bundle_bits
1263create_SrcB_X0(int num)
1264{
1265  const unsigned int n = (unsigned int)num;
1266  return ((n & 0x3f) << 12);
1267}
1268
1269static __inline tile_bundle_bits
1270create_SrcB_X1(int num)
1271{
1272  const unsigned int n = (unsigned int)num;
1273  return (((tile_bundle_bits)(n & 0x3f)) << 43);
1274}
1275
1276static __inline tile_bundle_bits
1277create_SrcB_Y0(int num)
1278{
1279  const unsigned int n = (unsigned int)num;
1280  return ((n & 0x3f) << 12);
1281}
1282
1283static __inline tile_bundle_bits
1284create_SrcB_Y1(int num)
1285{
1286  const unsigned int n = (unsigned int)num;
1287  return (((tile_bundle_bits)(n & 0x3f)) << 43);
1288}
1289
1290static __inline tile_bundle_bits
1291create_Src_SN(int num)
1292{
1293  const unsigned int n = (unsigned int)num;
1294  return ((n & 0x3) << 0);
1295}
1296
1297static __inline tile_bundle_bits
1298create_UnOpcodeExtension_X0(int num)
1299{
1300  const unsigned int n = (unsigned int)num;
1301  return ((n & 0x1f) << 12);
1302}
1303
1304static __inline tile_bundle_bits
1305create_UnOpcodeExtension_X1(int num)
1306{
1307  const unsigned int n = (unsigned int)num;
1308  return (((tile_bundle_bits)(n & 0x1f)) << 43);
1309}
1310
1311static __inline tile_bundle_bits
1312create_UnOpcodeExtension_Y0(int num)
1313{
1314  const unsigned int n = (unsigned int)num;
1315  return ((n & 0x1f) << 12);
1316}
1317
1318static __inline tile_bundle_bits
1319create_UnOpcodeExtension_Y1(int num)
1320{
1321  const unsigned int n = (unsigned int)num;
1322  return (((tile_bundle_bits)(n & 0x1f)) << 43);
1323}
1324
1325static __inline tile_bundle_bits
1326create_UnShOpcodeExtension_X0(int num)
1327{
1328  const unsigned int n = (unsigned int)num;
1329  return ((n & 0x3ff) << 17);
1330}
1331
1332static __inline tile_bundle_bits
1333create_UnShOpcodeExtension_X1(int num)
1334{
1335  const unsigned int n = (unsigned int)num;
1336  return (((tile_bundle_bits)(n & 0x3ff)) << 48);
1337}
1338
1339static __inline tile_bundle_bits
1340create_UnShOpcodeExtension_Y0(int num)
1341{
1342  const unsigned int n = (unsigned int)num;
1343  return ((n & 0x7) << 17);
1344}
1345
1346static __inline tile_bundle_bits
1347create_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
1355typedef 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
1366typedef 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
1377enum
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
1413struct 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
1447extern const struct tile_operand tile_operands[];
1448
1449/* One finite-state machine per pipe for rapid instruction decoding. */
1450extern const unsigned short * const
1451tile_bundle_decoder_fsms[TILE_NUM_PIPELINE_ENCODINGS];
1452
1453
1454struct 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
1486extern const struct tile_opcode tile_opcodes[];
1487
1488
1489/* Used for non-textual disassembly into structs. */
1490struct 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. */
1499extern 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 */
1507