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