xref: /netbsd-src/external/gpl3/binutils.old/dist/include/opcode/tilegx.h (revision e992f068c547fd6e84b3f104dc2340adcc955732)
175fd0b74Schristos /* TILE-Gx opcode information.
275fd0b74Schristos  *
3*e992f068Schristos  *    Copyright (C) 2011-2022 Free Software Foundation, Inc.
475fd0b74Schristos  *
575fd0b74Schristos  *    This program is free software; you can redistribute it and/or modify
675fd0b74Schristos  *    it under the terms of the GNU General Public License as published by
775fd0b74Schristos  *    the Free Software Foundation; either version 3 of the License, or
875fd0b74Schristos  *    (at your option) any later version.
975fd0b74Schristos  *
1075fd0b74Schristos  *    This program is distributed in the hope that it will be useful,
1175fd0b74Schristos  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
1275fd0b74Schristos  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1375fd0b74Schristos  *    GNU General Public License for more details.
1475fd0b74Schristos  *
1575fd0b74Schristos  *    You should have received a copy of the GNU General Public License
1675fd0b74Schristos  *    along with this program; if not, write to the Free Software
1775fd0b74Schristos  *    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
1875fd0b74Schristos  *    MA 02110-1301, USA.
1975fd0b74Schristos  */
2075fd0b74Schristos 
2175fd0b74Schristos #ifndef opcode_tile_h
2275fd0b74Schristos #define opcode_tile_h
2375fd0b74Schristos 
2475fd0b74Schristos #ifdef __cplusplus
2575fd0b74Schristos extern "C" {
2675fd0b74Schristos #endif
2775fd0b74Schristos 
2875fd0b74Schristos typedef unsigned long long tilegx_bundle_bits;
2975fd0b74Schristos 
3075fd0b74Schristos 
3175fd0b74Schristos enum
3275fd0b74Schristos {
3375fd0b74Schristos   TILEGX_MAX_OPERANDS = 4 /* bfexts */
3475fd0b74Schristos };
3575fd0b74Schristos 
3675fd0b74Schristos typedef enum
3775fd0b74Schristos {
3875fd0b74Schristos   TILEGX_OPC_BPT,
3975fd0b74Schristos   TILEGX_OPC_INFO,
4075fd0b74Schristos   TILEGX_OPC_INFOL,
4175fd0b74Schristos   TILEGX_OPC_LD4S_TLS,
4275fd0b74Schristos   TILEGX_OPC_LD_TLS,
4375fd0b74Schristos   TILEGX_OPC_MOVE,
4475fd0b74Schristos   TILEGX_OPC_MOVEI,
4575fd0b74Schristos   TILEGX_OPC_MOVELI,
4675fd0b74Schristos   TILEGX_OPC_PREFETCH,
4775fd0b74Schristos   TILEGX_OPC_PREFETCH_ADD_L1,
4875fd0b74Schristos   TILEGX_OPC_PREFETCH_ADD_L1_FAULT,
4975fd0b74Schristos   TILEGX_OPC_PREFETCH_ADD_L2,
5075fd0b74Schristos   TILEGX_OPC_PREFETCH_ADD_L2_FAULT,
5175fd0b74Schristos   TILEGX_OPC_PREFETCH_ADD_L3,
5275fd0b74Schristos   TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
5375fd0b74Schristos   TILEGX_OPC_PREFETCH_L1,
5475fd0b74Schristos   TILEGX_OPC_PREFETCH_L1_FAULT,
5575fd0b74Schristos   TILEGX_OPC_PREFETCH_L2,
5675fd0b74Schristos   TILEGX_OPC_PREFETCH_L2_FAULT,
5775fd0b74Schristos   TILEGX_OPC_PREFETCH_L3,
5875fd0b74Schristos   TILEGX_OPC_PREFETCH_L3_FAULT,
5975fd0b74Schristos   TILEGX_OPC_RAISE,
6075fd0b74Schristos   TILEGX_OPC_ADD,
6175fd0b74Schristos   TILEGX_OPC_ADDI,
6275fd0b74Schristos   TILEGX_OPC_ADDLI,
6375fd0b74Schristos   TILEGX_OPC_ADDX,
6475fd0b74Schristos   TILEGX_OPC_ADDXI,
6575fd0b74Schristos   TILEGX_OPC_ADDXLI,
6675fd0b74Schristos   TILEGX_OPC_ADDXSC,
6775fd0b74Schristos   TILEGX_OPC_AND,
6875fd0b74Schristos   TILEGX_OPC_ANDI,
6975fd0b74Schristos   TILEGX_OPC_BEQZ,
7075fd0b74Schristos   TILEGX_OPC_BEQZT,
7175fd0b74Schristos   TILEGX_OPC_BFEXTS,
7275fd0b74Schristos   TILEGX_OPC_BFEXTU,
7375fd0b74Schristos   TILEGX_OPC_BFINS,
7475fd0b74Schristos   TILEGX_OPC_BGEZ,
7575fd0b74Schristos   TILEGX_OPC_BGEZT,
7675fd0b74Schristos   TILEGX_OPC_BGTZ,
7775fd0b74Schristos   TILEGX_OPC_BGTZT,
7875fd0b74Schristos   TILEGX_OPC_BLBC,
7975fd0b74Schristos   TILEGX_OPC_BLBCT,
8075fd0b74Schristos   TILEGX_OPC_BLBS,
8175fd0b74Schristos   TILEGX_OPC_BLBST,
8275fd0b74Schristos   TILEGX_OPC_BLEZ,
8375fd0b74Schristos   TILEGX_OPC_BLEZT,
8475fd0b74Schristos   TILEGX_OPC_BLTZ,
8575fd0b74Schristos   TILEGX_OPC_BLTZT,
8675fd0b74Schristos   TILEGX_OPC_BNEZ,
8775fd0b74Schristos   TILEGX_OPC_BNEZT,
8875fd0b74Schristos   TILEGX_OPC_CLZ,
8975fd0b74Schristos   TILEGX_OPC_CMOVEQZ,
9075fd0b74Schristos   TILEGX_OPC_CMOVNEZ,
9175fd0b74Schristos   TILEGX_OPC_CMPEQ,
9275fd0b74Schristos   TILEGX_OPC_CMPEQI,
9375fd0b74Schristos   TILEGX_OPC_CMPEXCH,
9475fd0b74Schristos   TILEGX_OPC_CMPEXCH4,
9575fd0b74Schristos   TILEGX_OPC_CMPLES,
9675fd0b74Schristos   TILEGX_OPC_CMPLEU,
9775fd0b74Schristos   TILEGX_OPC_CMPLTS,
9875fd0b74Schristos   TILEGX_OPC_CMPLTSI,
9975fd0b74Schristos   TILEGX_OPC_CMPLTU,
10075fd0b74Schristos   TILEGX_OPC_CMPLTUI,
10175fd0b74Schristos   TILEGX_OPC_CMPNE,
10275fd0b74Schristos   TILEGX_OPC_CMUL,
10375fd0b74Schristos   TILEGX_OPC_CMULA,
10475fd0b74Schristos   TILEGX_OPC_CMULAF,
10575fd0b74Schristos   TILEGX_OPC_CMULF,
10675fd0b74Schristos   TILEGX_OPC_CMULFR,
10775fd0b74Schristos   TILEGX_OPC_CMULH,
10875fd0b74Schristos   TILEGX_OPC_CMULHR,
10975fd0b74Schristos   TILEGX_OPC_CRC32_32,
11075fd0b74Schristos   TILEGX_OPC_CRC32_8,
11175fd0b74Schristos   TILEGX_OPC_CTZ,
11275fd0b74Schristos   TILEGX_OPC_DBLALIGN,
11375fd0b74Schristos   TILEGX_OPC_DBLALIGN2,
11475fd0b74Schristos   TILEGX_OPC_DBLALIGN4,
11575fd0b74Schristos   TILEGX_OPC_DBLALIGN6,
11675fd0b74Schristos   TILEGX_OPC_DRAIN,
11775fd0b74Schristos   TILEGX_OPC_DTLBPR,
11875fd0b74Schristos   TILEGX_OPC_EXCH,
11975fd0b74Schristos   TILEGX_OPC_EXCH4,
12075fd0b74Schristos   TILEGX_OPC_FDOUBLE_ADD_FLAGS,
12175fd0b74Schristos   TILEGX_OPC_FDOUBLE_ADDSUB,
12275fd0b74Schristos   TILEGX_OPC_FDOUBLE_MUL_FLAGS,
12375fd0b74Schristos   TILEGX_OPC_FDOUBLE_PACK1,
12475fd0b74Schristos   TILEGX_OPC_FDOUBLE_PACK2,
12575fd0b74Schristos   TILEGX_OPC_FDOUBLE_SUB_FLAGS,
12675fd0b74Schristos   TILEGX_OPC_FDOUBLE_UNPACK_MAX,
12775fd0b74Schristos   TILEGX_OPC_FDOUBLE_UNPACK_MIN,
12875fd0b74Schristos   TILEGX_OPC_FETCHADD,
12975fd0b74Schristos   TILEGX_OPC_FETCHADD4,
13075fd0b74Schristos   TILEGX_OPC_FETCHADDGEZ,
13175fd0b74Schristos   TILEGX_OPC_FETCHADDGEZ4,
13275fd0b74Schristos   TILEGX_OPC_FETCHAND,
13375fd0b74Schristos   TILEGX_OPC_FETCHAND4,
13475fd0b74Schristos   TILEGX_OPC_FETCHOR,
13575fd0b74Schristos   TILEGX_OPC_FETCHOR4,
13675fd0b74Schristos   TILEGX_OPC_FINV,
13775fd0b74Schristos   TILEGX_OPC_FLUSH,
13875fd0b74Schristos   TILEGX_OPC_FLUSHWB,
13975fd0b74Schristos   TILEGX_OPC_FNOP,
14075fd0b74Schristos   TILEGX_OPC_FSINGLE_ADD1,
14175fd0b74Schristos   TILEGX_OPC_FSINGLE_ADDSUB2,
14275fd0b74Schristos   TILEGX_OPC_FSINGLE_MUL1,
14375fd0b74Schristos   TILEGX_OPC_FSINGLE_MUL2,
14475fd0b74Schristos   TILEGX_OPC_FSINGLE_PACK1,
14575fd0b74Schristos   TILEGX_OPC_FSINGLE_PACK2,
14675fd0b74Schristos   TILEGX_OPC_FSINGLE_SUB1,
14775fd0b74Schristos   TILEGX_OPC_ICOH,
14875fd0b74Schristos   TILEGX_OPC_ILL,
14975fd0b74Schristos   TILEGX_OPC_INV,
15075fd0b74Schristos   TILEGX_OPC_IRET,
15175fd0b74Schristos   TILEGX_OPC_J,
15275fd0b74Schristos   TILEGX_OPC_JAL,
15375fd0b74Schristos   TILEGX_OPC_JALR,
15475fd0b74Schristos   TILEGX_OPC_JALRP,
15575fd0b74Schristos   TILEGX_OPC_JR,
15675fd0b74Schristos   TILEGX_OPC_JRP,
15775fd0b74Schristos   TILEGX_OPC_LD,
15875fd0b74Schristos   TILEGX_OPC_LD1S,
15975fd0b74Schristos   TILEGX_OPC_LD1S_ADD,
16075fd0b74Schristos   TILEGX_OPC_LD1U,
16175fd0b74Schristos   TILEGX_OPC_LD1U_ADD,
16275fd0b74Schristos   TILEGX_OPC_LD2S,
16375fd0b74Schristos   TILEGX_OPC_LD2S_ADD,
16475fd0b74Schristos   TILEGX_OPC_LD2U,
16575fd0b74Schristos   TILEGX_OPC_LD2U_ADD,
16675fd0b74Schristos   TILEGX_OPC_LD4S,
16775fd0b74Schristos   TILEGX_OPC_LD4S_ADD,
16875fd0b74Schristos   TILEGX_OPC_LD4U,
16975fd0b74Schristos   TILEGX_OPC_LD4U_ADD,
17075fd0b74Schristos   TILEGX_OPC_LD_ADD,
17175fd0b74Schristos   TILEGX_OPC_LDNA,
17275fd0b74Schristos   TILEGX_OPC_LDNA_ADD,
17375fd0b74Schristos   TILEGX_OPC_LDNT,
17475fd0b74Schristos   TILEGX_OPC_LDNT1S,
17575fd0b74Schristos   TILEGX_OPC_LDNT1S_ADD,
17675fd0b74Schristos   TILEGX_OPC_LDNT1U,
17775fd0b74Schristos   TILEGX_OPC_LDNT1U_ADD,
17875fd0b74Schristos   TILEGX_OPC_LDNT2S,
17975fd0b74Schristos   TILEGX_OPC_LDNT2S_ADD,
18075fd0b74Schristos   TILEGX_OPC_LDNT2U,
18175fd0b74Schristos   TILEGX_OPC_LDNT2U_ADD,
18275fd0b74Schristos   TILEGX_OPC_LDNT4S,
18375fd0b74Schristos   TILEGX_OPC_LDNT4S_ADD,
18475fd0b74Schristos   TILEGX_OPC_LDNT4U,
18575fd0b74Schristos   TILEGX_OPC_LDNT4U_ADD,
18675fd0b74Schristos   TILEGX_OPC_LDNT_ADD,
18775fd0b74Schristos   TILEGX_OPC_LNK,
18875fd0b74Schristos   TILEGX_OPC_MF,
18975fd0b74Schristos   TILEGX_OPC_MFSPR,
19075fd0b74Schristos   TILEGX_OPC_MM,
19175fd0b74Schristos   TILEGX_OPC_MNZ,
19275fd0b74Schristos   TILEGX_OPC_MTSPR,
19375fd0b74Schristos   TILEGX_OPC_MUL_HS_HS,
19475fd0b74Schristos   TILEGX_OPC_MUL_HS_HU,
19575fd0b74Schristos   TILEGX_OPC_MUL_HS_LS,
19675fd0b74Schristos   TILEGX_OPC_MUL_HS_LU,
19775fd0b74Schristos   TILEGX_OPC_MUL_HU_HU,
19875fd0b74Schristos   TILEGX_OPC_MUL_HU_LS,
19975fd0b74Schristos   TILEGX_OPC_MUL_HU_LU,
20075fd0b74Schristos   TILEGX_OPC_MUL_LS_LS,
20175fd0b74Schristos   TILEGX_OPC_MUL_LS_LU,
20275fd0b74Schristos   TILEGX_OPC_MUL_LU_LU,
20375fd0b74Schristos   TILEGX_OPC_MULA_HS_HS,
20475fd0b74Schristos   TILEGX_OPC_MULA_HS_HU,
20575fd0b74Schristos   TILEGX_OPC_MULA_HS_LS,
20675fd0b74Schristos   TILEGX_OPC_MULA_HS_LU,
20775fd0b74Schristos   TILEGX_OPC_MULA_HU_HU,
20875fd0b74Schristos   TILEGX_OPC_MULA_HU_LS,
20975fd0b74Schristos   TILEGX_OPC_MULA_HU_LU,
21075fd0b74Schristos   TILEGX_OPC_MULA_LS_LS,
21175fd0b74Schristos   TILEGX_OPC_MULA_LS_LU,
21275fd0b74Schristos   TILEGX_OPC_MULA_LU_LU,
21375fd0b74Schristos   TILEGX_OPC_MULAX,
21475fd0b74Schristos   TILEGX_OPC_MULX,
21575fd0b74Schristos   TILEGX_OPC_MZ,
21675fd0b74Schristos   TILEGX_OPC_NAP,
21775fd0b74Schristos   TILEGX_OPC_NOP,
21875fd0b74Schristos   TILEGX_OPC_NOR,
21975fd0b74Schristos   TILEGX_OPC_OR,
22075fd0b74Schristos   TILEGX_OPC_ORI,
22175fd0b74Schristos   TILEGX_OPC_PCNT,
22275fd0b74Schristos   TILEGX_OPC_REVBITS,
22375fd0b74Schristos   TILEGX_OPC_REVBYTES,
22475fd0b74Schristos   TILEGX_OPC_ROTL,
22575fd0b74Schristos   TILEGX_OPC_ROTLI,
22675fd0b74Schristos   TILEGX_OPC_SHL,
22775fd0b74Schristos   TILEGX_OPC_SHL16INSLI,
22875fd0b74Schristos   TILEGX_OPC_SHL1ADD,
22975fd0b74Schristos   TILEGX_OPC_SHL1ADDX,
23075fd0b74Schristos   TILEGX_OPC_SHL2ADD,
23175fd0b74Schristos   TILEGX_OPC_SHL2ADDX,
23275fd0b74Schristos   TILEGX_OPC_SHL3ADD,
23375fd0b74Schristos   TILEGX_OPC_SHL3ADDX,
23475fd0b74Schristos   TILEGX_OPC_SHLI,
23575fd0b74Schristos   TILEGX_OPC_SHLX,
23675fd0b74Schristos   TILEGX_OPC_SHLXI,
23775fd0b74Schristos   TILEGX_OPC_SHRS,
23875fd0b74Schristos   TILEGX_OPC_SHRSI,
23975fd0b74Schristos   TILEGX_OPC_SHRU,
24075fd0b74Schristos   TILEGX_OPC_SHRUI,
24175fd0b74Schristos   TILEGX_OPC_SHRUX,
24275fd0b74Schristos   TILEGX_OPC_SHRUXI,
24375fd0b74Schristos   TILEGX_OPC_SHUFFLEBYTES,
24475fd0b74Schristos   TILEGX_OPC_ST,
24575fd0b74Schristos   TILEGX_OPC_ST1,
24675fd0b74Schristos   TILEGX_OPC_ST1_ADD,
24775fd0b74Schristos   TILEGX_OPC_ST2,
24875fd0b74Schristos   TILEGX_OPC_ST2_ADD,
24975fd0b74Schristos   TILEGX_OPC_ST4,
25075fd0b74Schristos   TILEGX_OPC_ST4_ADD,
25175fd0b74Schristos   TILEGX_OPC_ST_ADD,
25275fd0b74Schristos   TILEGX_OPC_STNT,
25375fd0b74Schristos   TILEGX_OPC_STNT1,
25475fd0b74Schristos   TILEGX_OPC_STNT1_ADD,
25575fd0b74Schristos   TILEGX_OPC_STNT2,
25675fd0b74Schristos   TILEGX_OPC_STNT2_ADD,
25775fd0b74Schristos   TILEGX_OPC_STNT4,
25875fd0b74Schristos   TILEGX_OPC_STNT4_ADD,
25975fd0b74Schristos   TILEGX_OPC_STNT_ADD,
26075fd0b74Schristos   TILEGX_OPC_SUB,
26175fd0b74Schristos   TILEGX_OPC_SUBX,
26275fd0b74Schristos   TILEGX_OPC_SUBXSC,
26375fd0b74Schristos   TILEGX_OPC_SWINT0,
26475fd0b74Schristos   TILEGX_OPC_SWINT1,
26575fd0b74Schristos   TILEGX_OPC_SWINT2,
26675fd0b74Schristos   TILEGX_OPC_SWINT3,
26775fd0b74Schristos   TILEGX_OPC_TBLIDXB0,
26875fd0b74Schristos   TILEGX_OPC_TBLIDXB1,
26975fd0b74Schristos   TILEGX_OPC_TBLIDXB2,
27075fd0b74Schristos   TILEGX_OPC_TBLIDXB3,
27175fd0b74Schristos   TILEGX_OPC_V1ADD,
27275fd0b74Schristos   TILEGX_OPC_V1ADDI,
27375fd0b74Schristos   TILEGX_OPC_V1ADDUC,
27475fd0b74Schristos   TILEGX_OPC_V1ADIFFU,
27575fd0b74Schristos   TILEGX_OPC_V1AVGU,
27675fd0b74Schristos   TILEGX_OPC_V1CMPEQ,
27775fd0b74Schristos   TILEGX_OPC_V1CMPEQI,
27875fd0b74Schristos   TILEGX_OPC_V1CMPLES,
27975fd0b74Schristos   TILEGX_OPC_V1CMPLEU,
28075fd0b74Schristos   TILEGX_OPC_V1CMPLTS,
28175fd0b74Schristos   TILEGX_OPC_V1CMPLTSI,
28275fd0b74Schristos   TILEGX_OPC_V1CMPLTU,
28375fd0b74Schristos   TILEGX_OPC_V1CMPLTUI,
28475fd0b74Schristos   TILEGX_OPC_V1CMPNE,
28575fd0b74Schristos   TILEGX_OPC_V1DDOTPU,
28675fd0b74Schristos   TILEGX_OPC_V1DDOTPUA,
28775fd0b74Schristos   TILEGX_OPC_V1DDOTPUS,
28875fd0b74Schristos   TILEGX_OPC_V1DDOTPUSA,
28975fd0b74Schristos   TILEGX_OPC_V1DOTP,
29075fd0b74Schristos   TILEGX_OPC_V1DOTPA,
29175fd0b74Schristos   TILEGX_OPC_V1DOTPU,
29275fd0b74Schristos   TILEGX_OPC_V1DOTPUA,
29375fd0b74Schristos   TILEGX_OPC_V1DOTPUS,
29475fd0b74Schristos   TILEGX_OPC_V1DOTPUSA,
29575fd0b74Schristos   TILEGX_OPC_V1INT_H,
29675fd0b74Schristos   TILEGX_OPC_V1INT_L,
29775fd0b74Schristos   TILEGX_OPC_V1MAXU,
29875fd0b74Schristos   TILEGX_OPC_V1MAXUI,
29975fd0b74Schristos   TILEGX_OPC_V1MINU,
30075fd0b74Schristos   TILEGX_OPC_V1MINUI,
30175fd0b74Schristos   TILEGX_OPC_V1MNZ,
30275fd0b74Schristos   TILEGX_OPC_V1MULTU,
30375fd0b74Schristos   TILEGX_OPC_V1MULU,
30475fd0b74Schristos   TILEGX_OPC_V1MULUS,
30575fd0b74Schristos   TILEGX_OPC_V1MZ,
30675fd0b74Schristos   TILEGX_OPC_V1SADAU,
30775fd0b74Schristos   TILEGX_OPC_V1SADU,
30875fd0b74Schristos   TILEGX_OPC_V1SHL,
30975fd0b74Schristos   TILEGX_OPC_V1SHLI,
31075fd0b74Schristos   TILEGX_OPC_V1SHRS,
31175fd0b74Schristos   TILEGX_OPC_V1SHRSI,
31275fd0b74Schristos   TILEGX_OPC_V1SHRU,
31375fd0b74Schristos   TILEGX_OPC_V1SHRUI,
31475fd0b74Schristos   TILEGX_OPC_V1SUB,
31575fd0b74Schristos   TILEGX_OPC_V1SUBUC,
31675fd0b74Schristos   TILEGX_OPC_V2ADD,
31775fd0b74Schristos   TILEGX_OPC_V2ADDI,
31875fd0b74Schristos   TILEGX_OPC_V2ADDSC,
31975fd0b74Schristos   TILEGX_OPC_V2ADIFFS,
32075fd0b74Schristos   TILEGX_OPC_V2AVGS,
32175fd0b74Schristos   TILEGX_OPC_V2CMPEQ,
32275fd0b74Schristos   TILEGX_OPC_V2CMPEQI,
32375fd0b74Schristos   TILEGX_OPC_V2CMPLES,
32475fd0b74Schristos   TILEGX_OPC_V2CMPLEU,
32575fd0b74Schristos   TILEGX_OPC_V2CMPLTS,
32675fd0b74Schristos   TILEGX_OPC_V2CMPLTSI,
32775fd0b74Schristos   TILEGX_OPC_V2CMPLTU,
32875fd0b74Schristos   TILEGX_OPC_V2CMPLTUI,
32975fd0b74Schristos   TILEGX_OPC_V2CMPNE,
33075fd0b74Schristos   TILEGX_OPC_V2DOTP,
33175fd0b74Schristos   TILEGX_OPC_V2DOTPA,
33275fd0b74Schristos   TILEGX_OPC_V2INT_H,
33375fd0b74Schristos   TILEGX_OPC_V2INT_L,
33475fd0b74Schristos   TILEGX_OPC_V2MAXS,
33575fd0b74Schristos   TILEGX_OPC_V2MAXSI,
33675fd0b74Schristos   TILEGX_OPC_V2MINS,
33775fd0b74Schristos   TILEGX_OPC_V2MINSI,
33875fd0b74Schristos   TILEGX_OPC_V2MNZ,
33975fd0b74Schristos   TILEGX_OPC_V2MULFSC,
34075fd0b74Schristos   TILEGX_OPC_V2MULS,
34175fd0b74Schristos   TILEGX_OPC_V2MULTS,
34275fd0b74Schristos   TILEGX_OPC_V2MZ,
34375fd0b74Schristos   TILEGX_OPC_V2PACKH,
34475fd0b74Schristos   TILEGX_OPC_V2PACKL,
34575fd0b74Schristos   TILEGX_OPC_V2PACKUC,
34675fd0b74Schristos   TILEGX_OPC_V2SADAS,
34775fd0b74Schristos   TILEGX_OPC_V2SADAU,
34875fd0b74Schristos   TILEGX_OPC_V2SADS,
34975fd0b74Schristos   TILEGX_OPC_V2SADU,
35075fd0b74Schristos   TILEGX_OPC_V2SHL,
35175fd0b74Schristos   TILEGX_OPC_V2SHLI,
35275fd0b74Schristos   TILEGX_OPC_V2SHLSC,
35375fd0b74Schristos   TILEGX_OPC_V2SHRS,
35475fd0b74Schristos   TILEGX_OPC_V2SHRSI,
35575fd0b74Schristos   TILEGX_OPC_V2SHRU,
35675fd0b74Schristos   TILEGX_OPC_V2SHRUI,
35775fd0b74Schristos   TILEGX_OPC_V2SUB,
35875fd0b74Schristos   TILEGX_OPC_V2SUBSC,
35975fd0b74Schristos   TILEGX_OPC_V4ADD,
36075fd0b74Schristos   TILEGX_OPC_V4ADDSC,
36175fd0b74Schristos   TILEGX_OPC_V4INT_H,
36275fd0b74Schristos   TILEGX_OPC_V4INT_L,
36375fd0b74Schristos   TILEGX_OPC_V4PACKSC,
36475fd0b74Schristos   TILEGX_OPC_V4SHL,
36575fd0b74Schristos   TILEGX_OPC_V4SHLSC,
36675fd0b74Schristos   TILEGX_OPC_V4SHRS,
36775fd0b74Schristos   TILEGX_OPC_V4SHRU,
36875fd0b74Schristos   TILEGX_OPC_V4SUB,
36975fd0b74Schristos   TILEGX_OPC_V4SUBSC,
37075fd0b74Schristos   TILEGX_OPC_WH64,
37175fd0b74Schristos   TILEGX_OPC_XOR,
37275fd0b74Schristos   TILEGX_OPC_XORI,
37375fd0b74Schristos   TILEGX_OPC_NONE
37475fd0b74Schristos } tilegx_mnemonic;
37575fd0b74Schristos 
37675fd0b74Schristos /* 64-bit pattern for a { bpt ; nop } bundle. */
37775fd0b74Schristos #define TILEGX_BPT_BUNDLE 0x286a44ae51485000ULL
37875fd0b74Schristos 
37975fd0b74Schristos 
38075fd0b74Schristos 
38175fd0b74Schristos static __inline unsigned int
get_BFEnd_X0(tilegx_bundle_bits num)38275fd0b74Schristos get_BFEnd_X0(tilegx_bundle_bits num)
38375fd0b74Schristos {
38475fd0b74Schristos   const unsigned int n = (unsigned int)num;
38575fd0b74Schristos   return (((n >> 12)) & 0x3f);
38675fd0b74Schristos }
38775fd0b74Schristos 
38875fd0b74Schristos static __inline unsigned int
get_BFOpcodeExtension_X0(tilegx_bundle_bits num)38975fd0b74Schristos get_BFOpcodeExtension_X0(tilegx_bundle_bits num)
39075fd0b74Schristos {
39175fd0b74Schristos   const unsigned int n = (unsigned int)num;
39275fd0b74Schristos   return (((n >> 24)) & 0xf);
39375fd0b74Schristos }
39475fd0b74Schristos 
39575fd0b74Schristos static __inline unsigned int
get_BFStart_X0(tilegx_bundle_bits num)39675fd0b74Schristos get_BFStart_X0(tilegx_bundle_bits num)
39775fd0b74Schristos {
39875fd0b74Schristos   const unsigned int n = (unsigned int)num;
39975fd0b74Schristos   return (((n >> 18)) & 0x3f);
40075fd0b74Schristos }
40175fd0b74Schristos 
40275fd0b74Schristos static __inline unsigned int
get_BrOff_X1(tilegx_bundle_bits n)40375fd0b74Schristos get_BrOff_X1(tilegx_bundle_bits n)
40475fd0b74Schristos {
40575fd0b74Schristos   return (((unsigned int)(n >> 31)) & 0x0000003f) |
40675fd0b74Schristos          (((unsigned int)(n >> 37)) & 0x0001ffc0);
40775fd0b74Schristos }
40875fd0b74Schristos 
40975fd0b74Schristos static __inline unsigned int
get_BrType_X1(tilegx_bundle_bits n)41075fd0b74Schristos get_BrType_X1(tilegx_bundle_bits n)
41175fd0b74Schristos {
41275fd0b74Schristos   return (((unsigned int)(n >> 54)) & 0x1f);
41375fd0b74Schristos }
41475fd0b74Schristos 
41575fd0b74Schristos static __inline unsigned int
get_Dest_Imm8_X1(tilegx_bundle_bits n)41675fd0b74Schristos get_Dest_Imm8_X1(tilegx_bundle_bits n)
41775fd0b74Schristos {
41875fd0b74Schristos   return (((unsigned int)(n >> 31)) & 0x0000003f) |
41975fd0b74Schristos          (((unsigned int)(n >> 43)) & 0x000000c0);
42075fd0b74Schristos }
42175fd0b74Schristos 
42275fd0b74Schristos static __inline unsigned int
get_Dest_X0(tilegx_bundle_bits num)42375fd0b74Schristos get_Dest_X0(tilegx_bundle_bits num)
42475fd0b74Schristos {
42575fd0b74Schristos   const unsigned int n = (unsigned int)num;
42675fd0b74Schristos   return (((n >> 0)) & 0x3f);
42775fd0b74Schristos }
42875fd0b74Schristos 
42975fd0b74Schristos static __inline unsigned int
get_Dest_X1(tilegx_bundle_bits n)43075fd0b74Schristos get_Dest_X1(tilegx_bundle_bits n)
43175fd0b74Schristos {
43275fd0b74Schristos   return (((unsigned int)(n >> 31)) & 0x3f);
43375fd0b74Schristos }
43475fd0b74Schristos 
43575fd0b74Schristos static __inline unsigned int
get_Dest_Y0(tilegx_bundle_bits num)43675fd0b74Schristos get_Dest_Y0(tilegx_bundle_bits num)
43775fd0b74Schristos {
43875fd0b74Schristos   const unsigned int n = (unsigned int)num;
43975fd0b74Schristos   return (((n >> 0)) & 0x3f);
44075fd0b74Schristos }
44175fd0b74Schristos 
44275fd0b74Schristos static __inline unsigned int
get_Dest_Y1(tilegx_bundle_bits n)44375fd0b74Schristos get_Dest_Y1(tilegx_bundle_bits n)
44475fd0b74Schristos {
44575fd0b74Schristos   return (((unsigned int)(n >> 31)) & 0x3f);
44675fd0b74Schristos }
44775fd0b74Schristos 
44875fd0b74Schristos static __inline unsigned int
get_Imm16_X0(tilegx_bundle_bits num)44975fd0b74Schristos get_Imm16_X0(tilegx_bundle_bits num)
45075fd0b74Schristos {
45175fd0b74Schristos   const unsigned int n = (unsigned int)num;
45275fd0b74Schristos   return (((n >> 12)) & 0xffff);
45375fd0b74Schristos }
45475fd0b74Schristos 
45575fd0b74Schristos static __inline unsigned int
get_Imm16_X1(tilegx_bundle_bits n)45675fd0b74Schristos get_Imm16_X1(tilegx_bundle_bits n)
45775fd0b74Schristos {
45875fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0xffff);
45975fd0b74Schristos }
46075fd0b74Schristos 
46175fd0b74Schristos static __inline unsigned int
get_Imm8OpcodeExtension_X0(tilegx_bundle_bits num)46275fd0b74Schristos get_Imm8OpcodeExtension_X0(tilegx_bundle_bits num)
46375fd0b74Schristos {
46475fd0b74Schristos   const unsigned int n = (unsigned int)num;
46575fd0b74Schristos   return (((n >> 20)) & 0xff);
46675fd0b74Schristos }
46775fd0b74Schristos 
46875fd0b74Schristos static __inline unsigned int
get_Imm8OpcodeExtension_X1(tilegx_bundle_bits n)46975fd0b74Schristos get_Imm8OpcodeExtension_X1(tilegx_bundle_bits n)
47075fd0b74Schristos {
47175fd0b74Schristos   return (((unsigned int)(n >> 51)) & 0xff);
47275fd0b74Schristos }
47375fd0b74Schristos 
47475fd0b74Schristos static __inline unsigned int
get_Imm8_X0(tilegx_bundle_bits num)47575fd0b74Schristos get_Imm8_X0(tilegx_bundle_bits num)
47675fd0b74Schristos {
47775fd0b74Schristos   const unsigned int n = (unsigned int)num;
47875fd0b74Schristos   return (((n >> 12)) & 0xff);
47975fd0b74Schristos }
48075fd0b74Schristos 
48175fd0b74Schristos static __inline unsigned int
get_Imm8_X1(tilegx_bundle_bits n)48275fd0b74Schristos get_Imm8_X1(tilegx_bundle_bits n)
48375fd0b74Schristos {
48475fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0xff);
48575fd0b74Schristos }
48675fd0b74Schristos 
48775fd0b74Schristos static __inline unsigned int
get_Imm8_Y0(tilegx_bundle_bits num)48875fd0b74Schristos get_Imm8_Y0(tilegx_bundle_bits num)
48975fd0b74Schristos {
49075fd0b74Schristos   const unsigned int n = (unsigned int)num;
49175fd0b74Schristos   return (((n >> 12)) & 0xff);
49275fd0b74Schristos }
49375fd0b74Schristos 
49475fd0b74Schristos static __inline unsigned int
get_Imm8_Y1(tilegx_bundle_bits n)49575fd0b74Schristos get_Imm8_Y1(tilegx_bundle_bits n)
49675fd0b74Schristos {
49775fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0xff);
49875fd0b74Schristos }
49975fd0b74Schristos 
50075fd0b74Schristos static __inline unsigned int
get_JumpOff_X1(tilegx_bundle_bits n)50175fd0b74Schristos get_JumpOff_X1(tilegx_bundle_bits n)
50275fd0b74Schristos {
50375fd0b74Schristos   return (((unsigned int)(n >> 31)) & 0x7ffffff);
50475fd0b74Schristos }
50575fd0b74Schristos 
50675fd0b74Schristos static __inline unsigned int
get_JumpOpcodeExtension_X1(tilegx_bundle_bits n)50775fd0b74Schristos get_JumpOpcodeExtension_X1(tilegx_bundle_bits n)
50875fd0b74Schristos {
50975fd0b74Schristos   return (((unsigned int)(n >> 58)) & 0x1);
51075fd0b74Schristos }
51175fd0b74Schristos 
51275fd0b74Schristos static __inline unsigned int
get_MF_Imm14_X1(tilegx_bundle_bits n)51375fd0b74Schristos get_MF_Imm14_X1(tilegx_bundle_bits n)
51475fd0b74Schristos {
51575fd0b74Schristos   return (((unsigned int)(n >> 37)) & 0x3fff);
51675fd0b74Schristos }
51775fd0b74Schristos 
51875fd0b74Schristos static __inline unsigned int
get_MT_Imm14_X1(tilegx_bundle_bits n)51975fd0b74Schristos get_MT_Imm14_X1(tilegx_bundle_bits n)
52075fd0b74Schristos {
52175fd0b74Schristos   return (((unsigned int)(n >> 31)) & 0x0000003f) |
52275fd0b74Schristos          (((unsigned int)(n >> 37)) & 0x00003fc0);
52375fd0b74Schristos }
52475fd0b74Schristos 
52575fd0b74Schristos static __inline unsigned int
get_Mode(tilegx_bundle_bits n)52675fd0b74Schristos get_Mode(tilegx_bundle_bits n)
52775fd0b74Schristos {
52875fd0b74Schristos   return (((unsigned int)(n >> 62)) & 0x3);
52975fd0b74Schristos }
53075fd0b74Schristos 
53175fd0b74Schristos static __inline unsigned int
get_Opcode_X0(tilegx_bundle_bits num)53275fd0b74Schristos get_Opcode_X0(tilegx_bundle_bits num)
53375fd0b74Schristos {
53475fd0b74Schristos   const unsigned int n = (unsigned int)num;
53575fd0b74Schristos   return (((n >> 28)) & 0x7);
53675fd0b74Schristos }
53775fd0b74Schristos 
53875fd0b74Schristos static __inline unsigned int
get_Opcode_X1(tilegx_bundle_bits n)53975fd0b74Schristos get_Opcode_X1(tilegx_bundle_bits n)
54075fd0b74Schristos {
54175fd0b74Schristos   return (((unsigned int)(n >> 59)) & 0x7);
54275fd0b74Schristos }
54375fd0b74Schristos 
54475fd0b74Schristos static __inline unsigned int
get_Opcode_Y0(tilegx_bundle_bits num)54575fd0b74Schristos get_Opcode_Y0(tilegx_bundle_bits num)
54675fd0b74Schristos {
54775fd0b74Schristos   const unsigned int n = (unsigned int)num;
54875fd0b74Schristos   return (((n >> 27)) & 0xf);
54975fd0b74Schristos }
55075fd0b74Schristos 
55175fd0b74Schristos static __inline unsigned int
get_Opcode_Y1(tilegx_bundle_bits n)55275fd0b74Schristos get_Opcode_Y1(tilegx_bundle_bits n)
55375fd0b74Schristos {
55475fd0b74Schristos   return (((unsigned int)(n >> 58)) & 0xf);
55575fd0b74Schristos }
55675fd0b74Schristos 
55775fd0b74Schristos static __inline unsigned int
get_Opcode_Y2(tilegx_bundle_bits n)55875fd0b74Schristos get_Opcode_Y2(tilegx_bundle_bits n)
55975fd0b74Schristos {
56075fd0b74Schristos   return (((n >> 26)) & 0x00000001) |
56175fd0b74Schristos          (((unsigned int)(n >> 56)) & 0x00000002);
56275fd0b74Schristos }
56375fd0b74Schristos 
56475fd0b74Schristos static __inline unsigned int
get_RRROpcodeExtension_X0(tilegx_bundle_bits num)56575fd0b74Schristos get_RRROpcodeExtension_X0(tilegx_bundle_bits num)
56675fd0b74Schristos {
56775fd0b74Schristos   const unsigned int n = (unsigned int)num;
56875fd0b74Schristos   return (((n >> 18)) & 0x3ff);
56975fd0b74Schristos }
57075fd0b74Schristos 
57175fd0b74Schristos static __inline unsigned int
get_RRROpcodeExtension_X1(tilegx_bundle_bits n)57275fd0b74Schristos get_RRROpcodeExtension_X1(tilegx_bundle_bits n)
57375fd0b74Schristos {
57475fd0b74Schristos   return (((unsigned int)(n >> 49)) & 0x3ff);
57575fd0b74Schristos }
57675fd0b74Schristos 
57775fd0b74Schristos static __inline unsigned int
get_RRROpcodeExtension_Y0(tilegx_bundle_bits num)57875fd0b74Schristos get_RRROpcodeExtension_Y0(tilegx_bundle_bits num)
57975fd0b74Schristos {
58075fd0b74Schristos   const unsigned int n = (unsigned int)num;
58175fd0b74Schristos   return (((n >> 18)) & 0x3);
58275fd0b74Schristos }
58375fd0b74Schristos 
58475fd0b74Schristos static __inline unsigned int
get_RRROpcodeExtension_Y1(tilegx_bundle_bits n)58575fd0b74Schristos get_RRROpcodeExtension_Y1(tilegx_bundle_bits n)
58675fd0b74Schristos {
58775fd0b74Schristos   return (((unsigned int)(n >> 49)) & 0x3);
58875fd0b74Schristos }
58975fd0b74Schristos 
59075fd0b74Schristos static __inline unsigned int
get_ShAmt_X0(tilegx_bundle_bits num)59175fd0b74Schristos get_ShAmt_X0(tilegx_bundle_bits num)
59275fd0b74Schristos {
59375fd0b74Schristos   const unsigned int n = (unsigned int)num;
59475fd0b74Schristos   return (((n >> 12)) & 0x3f);
59575fd0b74Schristos }
59675fd0b74Schristos 
59775fd0b74Schristos static __inline unsigned int
get_ShAmt_X1(tilegx_bundle_bits n)59875fd0b74Schristos get_ShAmt_X1(tilegx_bundle_bits n)
59975fd0b74Schristos {
60075fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0x3f);
60175fd0b74Schristos }
60275fd0b74Schristos 
60375fd0b74Schristos static __inline unsigned int
get_ShAmt_Y0(tilegx_bundle_bits num)60475fd0b74Schristos get_ShAmt_Y0(tilegx_bundle_bits num)
60575fd0b74Schristos {
60675fd0b74Schristos   const unsigned int n = (unsigned int)num;
60775fd0b74Schristos   return (((n >> 12)) & 0x3f);
60875fd0b74Schristos }
60975fd0b74Schristos 
61075fd0b74Schristos static __inline unsigned int
get_ShAmt_Y1(tilegx_bundle_bits n)61175fd0b74Schristos get_ShAmt_Y1(tilegx_bundle_bits n)
61275fd0b74Schristos {
61375fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0x3f);
61475fd0b74Schristos }
61575fd0b74Schristos 
61675fd0b74Schristos static __inline unsigned int
get_ShiftOpcodeExtension_X0(tilegx_bundle_bits num)61775fd0b74Schristos get_ShiftOpcodeExtension_X0(tilegx_bundle_bits num)
61875fd0b74Schristos {
61975fd0b74Schristos   const unsigned int n = (unsigned int)num;
62075fd0b74Schristos   return (((n >> 18)) & 0x3ff);
62175fd0b74Schristos }
62275fd0b74Schristos 
62375fd0b74Schristos static __inline unsigned int
get_ShiftOpcodeExtension_X1(tilegx_bundle_bits n)62475fd0b74Schristos get_ShiftOpcodeExtension_X1(tilegx_bundle_bits n)
62575fd0b74Schristos {
62675fd0b74Schristos   return (((unsigned int)(n >> 49)) & 0x3ff);
62775fd0b74Schristos }
62875fd0b74Schristos 
62975fd0b74Schristos static __inline unsigned int
get_ShiftOpcodeExtension_Y0(tilegx_bundle_bits num)63075fd0b74Schristos get_ShiftOpcodeExtension_Y0(tilegx_bundle_bits num)
63175fd0b74Schristos {
63275fd0b74Schristos   const unsigned int n = (unsigned int)num;
63375fd0b74Schristos   return (((n >> 18)) & 0x3);
63475fd0b74Schristos }
63575fd0b74Schristos 
63675fd0b74Schristos static __inline unsigned int
get_ShiftOpcodeExtension_Y1(tilegx_bundle_bits n)63775fd0b74Schristos get_ShiftOpcodeExtension_Y1(tilegx_bundle_bits n)
63875fd0b74Schristos {
63975fd0b74Schristos   return (((unsigned int)(n >> 49)) & 0x3);
64075fd0b74Schristos }
64175fd0b74Schristos 
64275fd0b74Schristos static __inline unsigned int
get_SrcA_X0(tilegx_bundle_bits num)64375fd0b74Schristos get_SrcA_X0(tilegx_bundle_bits num)
64475fd0b74Schristos {
64575fd0b74Schristos   const unsigned int n = (unsigned int)num;
64675fd0b74Schristos   return (((n >> 6)) & 0x3f);
64775fd0b74Schristos }
64875fd0b74Schristos 
64975fd0b74Schristos static __inline unsigned int
get_SrcA_X1(tilegx_bundle_bits n)65075fd0b74Schristos get_SrcA_X1(tilegx_bundle_bits n)
65175fd0b74Schristos {
65275fd0b74Schristos   return (((unsigned int)(n >> 37)) & 0x3f);
65375fd0b74Schristos }
65475fd0b74Schristos 
65575fd0b74Schristos static __inline unsigned int
get_SrcA_Y0(tilegx_bundle_bits num)65675fd0b74Schristos get_SrcA_Y0(tilegx_bundle_bits num)
65775fd0b74Schristos {
65875fd0b74Schristos   const unsigned int n = (unsigned int)num;
65975fd0b74Schristos   return (((n >> 6)) & 0x3f);
66075fd0b74Schristos }
66175fd0b74Schristos 
66275fd0b74Schristos static __inline unsigned int
get_SrcA_Y1(tilegx_bundle_bits n)66375fd0b74Schristos get_SrcA_Y1(tilegx_bundle_bits n)
66475fd0b74Schristos {
66575fd0b74Schristos   return (((unsigned int)(n >> 37)) & 0x3f);
66675fd0b74Schristos }
66775fd0b74Schristos 
66875fd0b74Schristos static __inline unsigned int
get_SrcA_Y2(tilegx_bundle_bits num)66975fd0b74Schristos get_SrcA_Y2(tilegx_bundle_bits num)
67075fd0b74Schristos {
67175fd0b74Schristos   const unsigned int n = (unsigned int)num;
67275fd0b74Schristos   return (((n >> 20)) & 0x3f);
67375fd0b74Schristos }
67475fd0b74Schristos 
67575fd0b74Schristos static __inline unsigned int
get_SrcBDest_Y2(tilegx_bundle_bits n)67675fd0b74Schristos get_SrcBDest_Y2(tilegx_bundle_bits n)
67775fd0b74Schristos {
67875fd0b74Schristos   return (((unsigned int)(n >> 51)) & 0x3f);
67975fd0b74Schristos }
68075fd0b74Schristos 
68175fd0b74Schristos static __inline unsigned int
get_SrcB_X0(tilegx_bundle_bits num)68275fd0b74Schristos get_SrcB_X0(tilegx_bundle_bits num)
68375fd0b74Schristos {
68475fd0b74Schristos   const unsigned int n = (unsigned int)num;
68575fd0b74Schristos   return (((n >> 12)) & 0x3f);
68675fd0b74Schristos }
68775fd0b74Schristos 
68875fd0b74Schristos static __inline unsigned int
get_SrcB_X1(tilegx_bundle_bits n)68975fd0b74Schristos get_SrcB_X1(tilegx_bundle_bits n)
69075fd0b74Schristos {
69175fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0x3f);
69275fd0b74Schristos }
69375fd0b74Schristos 
69475fd0b74Schristos static __inline unsigned int
get_SrcB_Y0(tilegx_bundle_bits num)69575fd0b74Schristos get_SrcB_Y0(tilegx_bundle_bits num)
69675fd0b74Schristos {
69775fd0b74Schristos   const unsigned int n = (unsigned int)num;
69875fd0b74Schristos   return (((n >> 12)) & 0x3f);
69975fd0b74Schristos }
70075fd0b74Schristos 
70175fd0b74Schristos static __inline unsigned int
get_SrcB_Y1(tilegx_bundle_bits n)70275fd0b74Schristos get_SrcB_Y1(tilegx_bundle_bits n)
70375fd0b74Schristos {
70475fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0x3f);
70575fd0b74Schristos }
70675fd0b74Schristos 
70775fd0b74Schristos static __inline unsigned int
get_UnaryOpcodeExtension_X0(tilegx_bundle_bits num)70875fd0b74Schristos get_UnaryOpcodeExtension_X0(tilegx_bundle_bits num)
70975fd0b74Schristos {
71075fd0b74Schristos   const unsigned int n = (unsigned int)num;
71175fd0b74Schristos   return (((n >> 12)) & 0x3f);
71275fd0b74Schristos }
71375fd0b74Schristos 
71475fd0b74Schristos static __inline unsigned int
get_UnaryOpcodeExtension_X1(tilegx_bundle_bits n)71575fd0b74Schristos get_UnaryOpcodeExtension_X1(tilegx_bundle_bits n)
71675fd0b74Schristos {
71775fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0x3f);
71875fd0b74Schristos }
71975fd0b74Schristos 
72075fd0b74Schristos static __inline unsigned int
get_UnaryOpcodeExtension_Y0(tilegx_bundle_bits num)72175fd0b74Schristos get_UnaryOpcodeExtension_Y0(tilegx_bundle_bits num)
72275fd0b74Schristos {
72375fd0b74Schristos   const unsigned int n = (unsigned int)num;
72475fd0b74Schristos   return (((n >> 12)) & 0x3f);
72575fd0b74Schristos }
72675fd0b74Schristos 
72775fd0b74Schristos static __inline unsigned int
get_UnaryOpcodeExtension_Y1(tilegx_bundle_bits n)72875fd0b74Schristos get_UnaryOpcodeExtension_Y1(tilegx_bundle_bits n)
72975fd0b74Schristos {
73075fd0b74Schristos   return (((unsigned int)(n >> 43)) & 0x3f);
73175fd0b74Schristos }
73275fd0b74Schristos 
73375fd0b74Schristos 
73475fd0b74Schristos static __inline int
sign_extend(int n,int num_bits)73575fd0b74Schristos sign_extend(int n, int num_bits)
73675fd0b74Schristos {
73775fd0b74Schristos   int shift = (int)(sizeof(int) * 8 - num_bits);
73875fd0b74Schristos   return (n << shift) >> shift;
73975fd0b74Schristos }
74075fd0b74Schristos 
74175fd0b74Schristos 
74275fd0b74Schristos 
74375fd0b74Schristos static __inline tilegx_bundle_bits
create_BFEnd_X0(int num)74475fd0b74Schristos create_BFEnd_X0(int num)
74575fd0b74Schristos {
74675fd0b74Schristos   const unsigned int n = (unsigned int)num;
74775fd0b74Schristos   return ((n & 0x3f) << 12);
74875fd0b74Schristos }
74975fd0b74Schristos 
75075fd0b74Schristos static __inline tilegx_bundle_bits
create_BFOpcodeExtension_X0(int num)75175fd0b74Schristos create_BFOpcodeExtension_X0(int num)
75275fd0b74Schristos {
75375fd0b74Schristos   const unsigned int n = (unsigned int)num;
75475fd0b74Schristos   return ((n & 0xf) << 24);
75575fd0b74Schristos }
75675fd0b74Schristos 
75775fd0b74Schristos static __inline tilegx_bundle_bits
create_BFStart_X0(int num)75875fd0b74Schristos create_BFStart_X0(int num)
75975fd0b74Schristos {
76075fd0b74Schristos   const unsigned int n = (unsigned int)num;
76175fd0b74Schristos   return ((n & 0x3f) << 18);
76275fd0b74Schristos }
76375fd0b74Schristos 
76475fd0b74Schristos static __inline tilegx_bundle_bits
create_BrOff_X1(int num)76575fd0b74Schristos create_BrOff_X1(int num)
76675fd0b74Schristos {
76775fd0b74Schristos   const unsigned int n = (unsigned int)num;
76875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
76975fd0b74Schristos          (((tilegx_bundle_bits)(n & 0x0001ffc0)) << 37);
77075fd0b74Schristos }
77175fd0b74Schristos 
77275fd0b74Schristos static __inline tilegx_bundle_bits
create_BrType_X1(int num)77375fd0b74Schristos create_BrType_X1(int num)
77475fd0b74Schristos {
77575fd0b74Schristos   const unsigned int n = (unsigned int)num;
77675fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x1f)) << 54);
77775fd0b74Schristos }
77875fd0b74Schristos 
77975fd0b74Schristos static __inline tilegx_bundle_bits
create_Dest_Imm8_X1(int num)78075fd0b74Schristos create_Dest_Imm8_X1(int num)
78175fd0b74Schristos {
78275fd0b74Schristos   const unsigned int n = (unsigned int)num;
78375fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
78475fd0b74Schristos          (((tilegx_bundle_bits)(n & 0x000000c0)) << 43);
78575fd0b74Schristos }
78675fd0b74Schristos 
78775fd0b74Schristos static __inline tilegx_bundle_bits
create_Dest_X0(int num)78875fd0b74Schristos create_Dest_X0(int num)
78975fd0b74Schristos {
79075fd0b74Schristos   const unsigned int n = (unsigned int)num;
79175fd0b74Schristos   return ((n & 0x3f) << 0);
79275fd0b74Schristos }
79375fd0b74Schristos 
79475fd0b74Schristos static __inline tilegx_bundle_bits
create_Dest_X1(int num)79575fd0b74Schristos create_Dest_X1(int num)
79675fd0b74Schristos {
79775fd0b74Schristos   const unsigned int n = (unsigned int)num;
79875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 31);
79975fd0b74Schristos }
80075fd0b74Schristos 
80175fd0b74Schristos static __inline tilegx_bundle_bits
create_Dest_Y0(int num)80275fd0b74Schristos create_Dest_Y0(int num)
80375fd0b74Schristos {
80475fd0b74Schristos   const unsigned int n = (unsigned int)num;
80575fd0b74Schristos   return ((n & 0x3f) << 0);
80675fd0b74Schristos }
80775fd0b74Schristos 
80875fd0b74Schristos static __inline tilegx_bundle_bits
create_Dest_Y1(int num)80975fd0b74Schristos create_Dest_Y1(int num)
81075fd0b74Schristos {
81175fd0b74Schristos   const unsigned int n = (unsigned int)num;
81275fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 31);
81375fd0b74Schristos }
81475fd0b74Schristos 
81575fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm16_X0(int num)81675fd0b74Schristos create_Imm16_X0(int num)
81775fd0b74Schristos {
81875fd0b74Schristos   const unsigned int n = (unsigned int)num;
81975fd0b74Schristos   return ((n & 0xffff) << 12);
82075fd0b74Schristos }
82175fd0b74Schristos 
82275fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm16_X1(int num)82375fd0b74Schristos create_Imm16_X1(int num)
82475fd0b74Schristos {
82575fd0b74Schristos   const unsigned int n = (unsigned int)num;
82675fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0xffff)) << 43);
82775fd0b74Schristos }
82875fd0b74Schristos 
82975fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm8OpcodeExtension_X0(int num)83075fd0b74Schristos create_Imm8OpcodeExtension_X0(int num)
83175fd0b74Schristos {
83275fd0b74Schristos   const unsigned int n = (unsigned int)num;
83375fd0b74Schristos   return ((n & 0xff) << 20);
83475fd0b74Schristos }
83575fd0b74Schristos 
83675fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm8OpcodeExtension_X1(int num)83775fd0b74Schristos create_Imm8OpcodeExtension_X1(int num)
83875fd0b74Schristos {
83975fd0b74Schristos   const unsigned int n = (unsigned int)num;
84075fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0xff)) << 51);
84175fd0b74Schristos }
84275fd0b74Schristos 
84375fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm8_X0(int num)84475fd0b74Schristos create_Imm8_X0(int num)
84575fd0b74Schristos {
84675fd0b74Schristos   const unsigned int n = (unsigned int)num;
84775fd0b74Schristos   return ((n & 0xff) << 12);
84875fd0b74Schristos }
84975fd0b74Schristos 
85075fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm8_X1(int num)85175fd0b74Schristos create_Imm8_X1(int num)
85275fd0b74Schristos {
85375fd0b74Schristos   const unsigned int n = (unsigned int)num;
85475fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0xff)) << 43);
85575fd0b74Schristos }
85675fd0b74Schristos 
85775fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm8_Y0(int num)85875fd0b74Schristos create_Imm8_Y0(int num)
85975fd0b74Schristos {
86075fd0b74Schristos   const unsigned int n = (unsigned int)num;
86175fd0b74Schristos   return ((n & 0xff) << 12);
86275fd0b74Schristos }
86375fd0b74Schristos 
86475fd0b74Schristos static __inline tilegx_bundle_bits
create_Imm8_Y1(int num)86575fd0b74Schristos create_Imm8_Y1(int num)
86675fd0b74Schristos {
86775fd0b74Schristos   const unsigned int n = (unsigned int)num;
86875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0xff)) << 43);
86975fd0b74Schristos }
87075fd0b74Schristos 
87175fd0b74Schristos static __inline tilegx_bundle_bits
create_JumpOff_X1(int num)87275fd0b74Schristos create_JumpOff_X1(int num)
87375fd0b74Schristos {
87475fd0b74Schristos   const unsigned int n = (unsigned int)num;
87575fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x7ffffff)) << 31);
87675fd0b74Schristos }
87775fd0b74Schristos 
87875fd0b74Schristos static __inline tilegx_bundle_bits
create_JumpOpcodeExtension_X1(int num)87975fd0b74Schristos create_JumpOpcodeExtension_X1(int num)
88075fd0b74Schristos {
88175fd0b74Schristos   const unsigned int n = (unsigned int)num;
88275fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x1)) << 58);
88375fd0b74Schristos }
88475fd0b74Schristos 
88575fd0b74Schristos static __inline tilegx_bundle_bits
create_MF_Imm14_X1(int num)88675fd0b74Schristos create_MF_Imm14_X1(int num)
88775fd0b74Schristos {
88875fd0b74Schristos   const unsigned int n = (unsigned int)num;
88975fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3fff)) << 37);
89075fd0b74Schristos }
89175fd0b74Schristos 
89275fd0b74Schristos static __inline tilegx_bundle_bits
create_MT_Imm14_X1(int num)89375fd0b74Schristos create_MT_Imm14_X1(int num)
89475fd0b74Schristos {
89575fd0b74Schristos   const unsigned int n = (unsigned int)num;
89675fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
89775fd0b74Schristos          (((tilegx_bundle_bits)(n & 0x00003fc0)) << 37);
89875fd0b74Schristos }
89975fd0b74Schristos 
90075fd0b74Schristos static __inline tilegx_bundle_bits
create_Mode(int num)90175fd0b74Schristos create_Mode(int num)
90275fd0b74Schristos {
90375fd0b74Schristos   const unsigned int n = (unsigned int)num;
90475fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3)) << 62);
90575fd0b74Schristos }
90675fd0b74Schristos 
90775fd0b74Schristos static __inline tilegx_bundle_bits
create_Opcode_X0(int num)90875fd0b74Schristos create_Opcode_X0(int num)
90975fd0b74Schristos {
91075fd0b74Schristos   const unsigned int n = (unsigned int)num;
91175fd0b74Schristos   return ((n & 0x7) << 28);
91275fd0b74Schristos }
91375fd0b74Schristos 
91475fd0b74Schristos static __inline tilegx_bundle_bits
create_Opcode_X1(int num)91575fd0b74Schristos create_Opcode_X1(int num)
91675fd0b74Schristos {
91775fd0b74Schristos   const unsigned int n = (unsigned int)num;
91875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x7)) << 59);
91975fd0b74Schristos }
92075fd0b74Schristos 
92175fd0b74Schristos static __inline tilegx_bundle_bits
create_Opcode_Y0(int num)92275fd0b74Schristos create_Opcode_Y0(int num)
92375fd0b74Schristos {
92475fd0b74Schristos   const unsigned int n = (unsigned int)num;
92575fd0b74Schristos   return ((n & 0xf) << 27);
92675fd0b74Schristos }
92775fd0b74Schristos 
92875fd0b74Schristos static __inline tilegx_bundle_bits
create_Opcode_Y1(int num)92975fd0b74Schristos create_Opcode_Y1(int num)
93075fd0b74Schristos {
93175fd0b74Schristos   const unsigned int n = (unsigned int)num;
93275fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0xf)) << 58);
93375fd0b74Schristos }
93475fd0b74Schristos 
93575fd0b74Schristos static __inline tilegx_bundle_bits
create_Opcode_Y2(int num)93675fd0b74Schristos create_Opcode_Y2(int num)
93775fd0b74Schristos {
93875fd0b74Schristos   const unsigned int n = (unsigned int)num;
93975fd0b74Schristos   return ((n & 0x00000001) << 26) |
94075fd0b74Schristos          (((tilegx_bundle_bits)(n & 0x00000002)) << 56);
94175fd0b74Schristos }
94275fd0b74Schristos 
94375fd0b74Schristos static __inline tilegx_bundle_bits
create_RRROpcodeExtension_X0(int num)94475fd0b74Schristos create_RRROpcodeExtension_X0(int num)
94575fd0b74Schristos {
94675fd0b74Schristos   const unsigned int n = (unsigned int)num;
94775fd0b74Schristos   return ((n & 0x3ff) << 18);
94875fd0b74Schristos }
94975fd0b74Schristos 
95075fd0b74Schristos static __inline tilegx_bundle_bits
create_RRROpcodeExtension_X1(int num)95175fd0b74Schristos create_RRROpcodeExtension_X1(int num)
95275fd0b74Schristos {
95375fd0b74Schristos   const unsigned int n = (unsigned int)num;
95475fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3ff)) << 49);
95575fd0b74Schristos }
95675fd0b74Schristos 
95775fd0b74Schristos static __inline tilegx_bundle_bits
create_RRROpcodeExtension_Y0(int num)95875fd0b74Schristos create_RRROpcodeExtension_Y0(int num)
95975fd0b74Schristos {
96075fd0b74Schristos   const unsigned int n = (unsigned int)num;
96175fd0b74Schristos   return ((n & 0x3) << 18);
96275fd0b74Schristos }
96375fd0b74Schristos 
96475fd0b74Schristos static __inline tilegx_bundle_bits
create_RRROpcodeExtension_Y1(int num)96575fd0b74Schristos create_RRROpcodeExtension_Y1(int num)
96675fd0b74Schristos {
96775fd0b74Schristos   const unsigned int n = (unsigned int)num;
96875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3)) << 49);
96975fd0b74Schristos }
97075fd0b74Schristos 
97175fd0b74Schristos static __inline tilegx_bundle_bits
create_ShAmt_X0(int num)97275fd0b74Schristos create_ShAmt_X0(int num)
97375fd0b74Schristos {
97475fd0b74Schristos   const unsigned int n = (unsigned int)num;
97575fd0b74Schristos   return ((n & 0x3f) << 12);
97675fd0b74Schristos }
97775fd0b74Schristos 
97875fd0b74Schristos static __inline tilegx_bundle_bits
create_ShAmt_X1(int num)97975fd0b74Schristos create_ShAmt_X1(int num)
98075fd0b74Schristos {
98175fd0b74Schristos   const unsigned int n = (unsigned int)num;
98275fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
98375fd0b74Schristos }
98475fd0b74Schristos 
98575fd0b74Schristos static __inline tilegx_bundle_bits
create_ShAmt_Y0(int num)98675fd0b74Schristos create_ShAmt_Y0(int num)
98775fd0b74Schristos {
98875fd0b74Schristos   const unsigned int n = (unsigned int)num;
98975fd0b74Schristos   return ((n & 0x3f) << 12);
99075fd0b74Schristos }
99175fd0b74Schristos 
99275fd0b74Schristos static __inline tilegx_bundle_bits
create_ShAmt_Y1(int num)99375fd0b74Schristos create_ShAmt_Y1(int num)
99475fd0b74Schristos {
99575fd0b74Schristos   const unsigned int n = (unsigned int)num;
99675fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
99775fd0b74Schristos }
99875fd0b74Schristos 
99975fd0b74Schristos static __inline tilegx_bundle_bits
create_ShiftOpcodeExtension_X0(int num)100075fd0b74Schristos create_ShiftOpcodeExtension_X0(int num)
100175fd0b74Schristos {
100275fd0b74Schristos   const unsigned int n = (unsigned int)num;
100375fd0b74Schristos   return ((n & 0x3ff) << 18);
100475fd0b74Schristos }
100575fd0b74Schristos 
100675fd0b74Schristos static __inline tilegx_bundle_bits
create_ShiftOpcodeExtension_X1(int num)100775fd0b74Schristos create_ShiftOpcodeExtension_X1(int num)
100875fd0b74Schristos {
100975fd0b74Schristos   const unsigned int n = (unsigned int)num;
101075fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3ff)) << 49);
101175fd0b74Schristos }
101275fd0b74Schristos 
101375fd0b74Schristos static __inline tilegx_bundle_bits
create_ShiftOpcodeExtension_Y0(int num)101475fd0b74Schristos create_ShiftOpcodeExtension_Y0(int num)
101575fd0b74Schristos {
101675fd0b74Schristos   const unsigned int n = (unsigned int)num;
101775fd0b74Schristos   return ((n & 0x3) << 18);
101875fd0b74Schristos }
101975fd0b74Schristos 
102075fd0b74Schristos static __inline tilegx_bundle_bits
create_ShiftOpcodeExtension_Y1(int num)102175fd0b74Schristos create_ShiftOpcodeExtension_Y1(int num)
102275fd0b74Schristos {
102375fd0b74Schristos   const unsigned int n = (unsigned int)num;
102475fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3)) << 49);
102575fd0b74Schristos }
102675fd0b74Schristos 
102775fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcA_X0(int num)102875fd0b74Schristos create_SrcA_X0(int num)
102975fd0b74Schristos {
103075fd0b74Schristos   const unsigned int n = (unsigned int)num;
103175fd0b74Schristos   return ((n & 0x3f) << 6);
103275fd0b74Schristos }
103375fd0b74Schristos 
103475fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcA_X1(int num)103575fd0b74Schristos create_SrcA_X1(int num)
103675fd0b74Schristos {
103775fd0b74Schristos   const unsigned int n = (unsigned int)num;
103875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 37);
103975fd0b74Schristos }
104075fd0b74Schristos 
104175fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcA_Y0(int num)104275fd0b74Schristos create_SrcA_Y0(int num)
104375fd0b74Schristos {
104475fd0b74Schristos   const unsigned int n = (unsigned int)num;
104575fd0b74Schristos   return ((n & 0x3f) << 6);
104675fd0b74Schristos }
104775fd0b74Schristos 
104875fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcA_Y1(int num)104975fd0b74Schristos create_SrcA_Y1(int num)
105075fd0b74Schristos {
105175fd0b74Schristos   const unsigned int n = (unsigned int)num;
105275fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 37);
105375fd0b74Schristos }
105475fd0b74Schristos 
105575fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcA_Y2(int num)105675fd0b74Schristos create_SrcA_Y2(int num)
105775fd0b74Schristos {
105875fd0b74Schristos   const unsigned int n = (unsigned int)num;
105975fd0b74Schristos   return ((n & 0x3f) << 20);
106075fd0b74Schristos }
106175fd0b74Schristos 
106275fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcBDest_Y2(int num)106375fd0b74Schristos create_SrcBDest_Y2(int num)
106475fd0b74Schristos {
106575fd0b74Schristos   const unsigned int n = (unsigned int)num;
106675fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 51);
106775fd0b74Schristos }
106875fd0b74Schristos 
106975fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcB_X0(int num)107075fd0b74Schristos create_SrcB_X0(int num)
107175fd0b74Schristos {
107275fd0b74Schristos   const unsigned int n = (unsigned int)num;
107375fd0b74Schristos   return ((n & 0x3f) << 12);
107475fd0b74Schristos }
107575fd0b74Schristos 
107675fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcB_X1(int num)107775fd0b74Schristos create_SrcB_X1(int num)
107875fd0b74Schristos {
107975fd0b74Schristos   const unsigned int n = (unsigned int)num;
108075fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
108175fd0b74Schristos }
108275fd0b74Schristos 
108375fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcB_Y0(int num)108475fd0b74Schristos create_SrcB_Y0(int num)
108575fd0b74Schristos {
108675fd0b74Schristos   const unsigned int n = (unsigned int)num;
108775fd0b74Schristos   return ((n & 0x3f) << 12);
108875fd0b74Schristos }
108975fd0b74Schristos 
109075fd0b74Schristos static __inline tilegx_bundle_bits
create_SrcB_Y1(int num)109175fd0b74Schristos create_SrcB_Y1(int num)
109275fd0b74Schristos {
109375fd0b74Schristos   const unsigned int n = (unsigned int)num;
109475fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
109575fd0b74Schristos }
109675fd0b74Schristos 
109775fd0b74Schristos static __inline tilegx_bundle_bits
create_UnaryOpcodeExtension_X0(int num)109875fd0b74Schristos create_UnaryOpcodeExtension_X0(int num)
109975fd0b74Schristos {
110075fd0b74Schristos   const unsigned int n = (unsigned int)num;
110175fd0b74Schristos   return ((n & 0x3f) << 12);
110275fd0b74Schristos }
110375fd0b74Schristos 
110475fd0b74Schristos static __inline tilegx_bundle_bits
create_UnaryOpcodeExtension_X1(int num)110575fd0b74Schristos create_UnaryOpcodeExtension_X1(int num)
110675fd0b74Schristos {
110775fd0b74Schristos   const unsigned int n = (unsigned int)num;
110875fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
110975fd0b74Schristos }
111075fd0b74Schristos 
111175fd0b74Schristos static __inline tilegx_bundle_bits
create_UnaryOpcodeExtension_Y0(int num)111275fd0b74Schristos create_UnaryOpcodeExtension_Y0(int num)
111375fd0b74Schristos {
111475fd0b74Schristos   const unsigned int n = (unsigned int)num;
111575fd0b74Schristos   return ((n & 0x3f) << 12);
111675fd0b74Schristos }
111775fd0b74Schristos 
111875fd0b74Schristos static __inline tilegx_bundle_bits
create_UnaryOpcodeExtension_Y1(int num)111975fd0b74Schristos create_UnaryOpcodeExtension_Y1(int num)
112075fd0b74Schristos {
112175fd0b74Schristos   const unsigned int n = (unsigned int)num;
112275fd0b74Schristos   return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
112375fd0b74Schristos }
112475fd0b74Schristos 
112575fd0b74Schristos 
112675fd0b74Schristos typedef enum
112775fd0b74Schristos {
112875fd0b74Schristos   TILEGX_PIPELINE_X0,
112975fd0b74Schristos   TILEGX_PIPELINE_X1,
113075fd0b74Schristos   TILEGX_PIPELINE_Y0,
113175fd0b74Schristos   TILEGX_PIPELINE_Y1,
113275fd0b74Schristos   TILEGX_PIPELINE_Y2,
113375fd0b74Schristos   TILEGX_NUM_PIPELINE_ENCODINGS = 5,
113475fd0b74Schristos } tilegx_pipeline;
113575fd0b74Schristos 
113675fd0b74Schristos #define tilegx_is_x_pipeline(p) ((int)(p) <= (int)TILEGX_PIPELINE_X1)
113775fd0b74Schristos 
113875fd0b74Schristos typedef enum
113975fd0b74Schristos {
114075fd0b74Schristos   TILEGX_OP_TYPE_REGISTER,
114175fd0b74Schristos   TILEGX_OP_TYPE_IMMEDIATE,
114275fd0b74Schristos   TILEGX_OP_TYPE_ADDRESS,
114375fd0b74Schristos   TILEGX_OP_TYPE_SPR
114475fd0b74Schristos } tilegx_operand_type;
114575fd0b74Schristos 
114675fd0b74Schristos /* These are the bits that determine if a bundle is in the X encoding. */
114775fd0b74Schristos #define TILEGX_BUNDLE_MODE_MASK ((tilegx_bundle_bits)3 << 62)
114875fd0b74Schristos 
114975fd0b74Schristos enum
115075fd0b74Schristos {
115175fd0b74Schristos   /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
115275fd0b74Schristos   TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
115375fd0b74Schristos 
115475fd0b74Schristos   /* Log base 2 of TILEGX_BUNDLE_SIZE_IN_BYTES. */
115575fd0b74Schristos   TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
115675fd0b74Schristos 
115775fd0b74Schristos   /* Instructions take this many bytes. */
115875fd0b74Schristos   TILEGX_BUNDLE_SIZE_IN_BYTES = 1 << TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES,
115975fd0b74Schristos 
116075fd0b74Schristos   /* Log base 2 of TILEGX_BUNDLE_ALIGNMENT_IN_BYTES. */
116175fd0b74Schristos   TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
116275fd0b74Schristos 
116375fd0b74Schristos   /* Bundles should be aligned modulo this number of bytes. */
116475fd0b74Schristos   TILEGX_BUNDLE_ALIGNMENT_IN_BYTES =
116575fd0b74Schristos     (1 << TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
116675fd0b74Schristos 
116775fd0b74Schristos   /* Number of registers (some are magic, such as network I/O). */
116875fd0b74Schristos   TILEGX_NUM_REGISTERS = 64,
116975fd0b74Schristos };
117075fd0b74Schristos 
117175fd0b74Schristos 
117275fd0b74Schristos struct tilegx_operand
117375fd0b74Schristos {
117475fd0b74Schristos   /* Is this operand a register, immediate or address? */
117575fd0b74Schristos   tilegx_operand_type type;
117675fd0b74Schristos 
117775fd0b74Schristos   /* The default relocation type for this operand.  */
117875fd0b74Schristos   signed int default_reloc : 16;
117975fd0b74Schristos 
118075fd0b74Schristos   /* How many bits is this value? (used for range checking) */
118175fd0b74Schristos   unsigned int num_bits : 5;
118275fd0b74Schristos 
118375fd0b74Schristos   /* Is the value signed? (used for range checking) */
118475fd0b74Schristos   unsigned int is_signed : 1;
118575fd0b74Schristos 
118675fd0b74Schristos   /* Is this operand a source register? */
118775fd0b74Schristos   unsigned int is_src_reg : 1;
118875fd0b74Schristos 
118975fd0b74Schristos   /* Is this operand written? (i.e. is it a destination register) */
119075fd0b74Schristos   unsigned int is_dest_reg : 1;
119175fd0b74Schristos 
119275fd0b74Schristos   /* Is this operand PC-relative? */
119375fd0b74Schristos   unsigned int is_pc_relative : 1;
119475fd0b74Schristos 
119575fd0b74Schristos   /* By how many bits do we right shift the value before inserting? */
119675fd0b74Schristos   unsigned int rightshift : 2;
119775fd0b74Schristos 
119875fd0b74Schristos   /* Return the bits for this operand to be ORed into an existing bundle. */
119975fd0b74Schristos   tilegx_bundle_bits (*insert) (int op);
120075fd0b74Schristos 
120175fd0b74Schristos   /* Extract this operand and return it. */
120275fd0b74Schristos   unsigned int (*extract) (tilegx_bundle_bits bundle);
120375fd0b74Schristos };
120475fd0b74Schristos 
120575fd0b74Schristos 
120675fd0b74Schristos extern const struct tilegx_operand tilegx_operands[];
120775fd0b74Schristos 
120875fd0b74Schristos /* One finite-state machine per pipe for rapid instruction decoding. */
120975fd0b74Schristos extern const unsigned short * const
121075fd0b74Schristos tilegx_bundle_decoder_fsms[TILEGX_NUM_PIPELINE_ENCODINGS];
121175fd0b74Schristos 
121275fd0b74Schristos 
121375fd0b74Schristos struct tilegx_opcode
121475fd0b74Schristos {
121575fd0b74Schristos   /* The opcode mnemonic, e.g. "add" */
121675fd0b74Schristos   const char *name;
121775fd0b74Schristos 
121875fd0b74Schristos   /* The enum value for this mnemonic. */
121975fd0b74Schristos   tilegx_mnemonic mnemonic;
122075fd0b74Schristos 
122175fd0b74Schristos   /* A bit mask of which of the five pipes this instruction
122275fd0b74Schristos      is compatible with:
122375fd0b74Schristos      X0  0x01
122475fd0b74Schristos      X1  0x02
122575fd0b74Schristos      Y0  0x04
122675fd0b74Schristos      Y1  0x08
122775fd0b74Schristos      Y2  0x10 */
122875fd0b74Schristos   unsigned char pipes;
122975fd0b74Schristos 
123075fd0b74Schristos   /* How many operands are there? */
123175fd0b74Schristos   unsigned char num_operands;
123275fd0b74Schristos 
123375fd0b74Schristos   /* Which register does this write implicitly, or TREG_ZERO if none? */
123475fd0b74Schristos   unsigned char implicitly_written_register;
123575fd0b74Schristos 
123675fd0b74Schristos   /* Can this be bundled with other instructions (almost always true). */
123775fd0b74Schristos   unsigned char can_bundle;
123875fd0b74Schristos 
123975fd0b74Schristos   /* The description of the operands. Each of these is an
124075fd0b74Schristos    * index into the tilegx_operands[] table. */
124175fd0b74Schristos   unsigned char operands[TILEGX_NUM_PIPELINE_ENCODINGS][TILEGX_MAX_OPERANDS];
124275fd0b74Schristos 
124375fd0b74Schristos #if !defined(__KERNEL__) && !defined(_LIBC)
124475fd0b74Schristos   /* A mask of which bits have predefined values for each pipeline.
124575fd0b74Schristos    * This is useful for disassembly. */
124675fd0b74Schristos   tilegx_bundle_bits fixed_bit_masks[TILEGX_NUM_PIPELINE_ENCODINGS];
124775fd0b74Schristos 
124875fd0b74Schristos   /* For each bit set in fixed_bit_masks, what the value is for this
124975fd0b74Schristos    * instruction. */
125075fd0b74Schristos   tilegx_bundle_bits fixed_bit_values[TILEGX_NUM_PIPELINE_ENCODINGS];
125175fd0b74Schristos #endif
125275fd0b74Schristos };
125375fd0b74Schristos 
125475fd0b74Schristos extern const struct tilegx_opcode tilegx_opcodes[];
125575fd0b74Schristos 
125675fd0b74Schristos /* Used for non-textual disassembly into structs. */
125775fd0b74Schristos struct tilegx_decoded_instruction
125875fd0b74Schristos {
125975fd0b74Schristos   const struct tilegx_opcode *opcode;
126075fd0b74Schristos   const struct tilegx_operand *operands[TILEGX_MAX_OPERANDS];
126175fd0b74Schristos   long long operand_values[TILEGX_MAX_OPERANDS];
126275fd0b74Schristos };
126375fd0b74Schristos 
126475fd0b74Schristos 
126575fd0b74Schristos /* Disassemble a bundle into a struct for machine processing. */
126675fd0b74Schristos extern int parse_insn_tilegx(tilegx_bundle_bits bits,
126775fd0b74Schristos                              unsigned long long pc,
126875fd0b74Schristos                              struct tilegx_decoded_instruction
126975fd0b74Schristos                              decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE]);
127075fd0b74Schristos 
127175fd0b74Schristos 
127275fd0b74Schristos #if !defined(__KERNEL__) && !defined(_LIBC)
127375fd0b74Schristos /* Canonical names of all the registers. */
127475fd0b74Schristos /* ISSUE: This table lives in "tile-dis.c" */
127575fd0b74Schristos extern const char * const tilegx_register_names[];
127675fd0b74Schristos 
127775fd0b74Schristos /* Descriptor for a special-purpose register. */
127875fd0b74Schristos struct tilegx_spr
127975fd0b74Schristos {
128075fd0b74Schristos   /* The number */
128175fd0b74Schristos   int number;
128275fd0b74Schristos 
128375fd0b74Schristos   /* The name */
128475fd0b74Schristos   const char *name;
128575fd0b74Schristos };
128675fd0b74Schristos 
128775fd0b74Schristos /* List of all the SPRs; ordered by increasing number. */
128875fd0b74Schristos extern const struct tilegx_spr tilegx_sprs[];
128975fd0b74Schristos 
129075fd0b74Schristos /* Number of special-purpose registers. */
129175fd0b74Schristos extern const int tilegx_num_sprs;
129275fd0b74Schristos 
129375fd0b74Schristos extern const char *
129475fd0b74Schristos get_tilegx_spr_name (int num);
129575fd0b74Schristos #endif /* !__KERNEL__ && !_LIBC */
129675fd0b74Schristos 
129775fd0b74Schristos /* Make a few "tile_" variables to simply common code between
129875fd0b74Schristos    architectures.  */
129975fd0b74Schristos 
130075fd0b74Schristos typedef tilegx_bundle_bits tile_bundle_bits;
130175fd0b74Schristos #define TILE_BUNDLE_SIZE_IN_BYTES TILEGX_BUNDLE_SIZE_IN_BYTES
130275fd0b74Schristos #define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEGX_BUNDLE_ALIGNMENT_IN_BYTES
130375fd0b74Schristos #define TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES \
130475fd0b74Schristos   TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES
130575fd0b74Schristos 
130675fd0b74Schristos #ifdef __cplusplus
130775fd0b74Schristos }
130875fd0b74Schristos #endif
130975fd0b74Schristos 
131075fd0b74Schristos #endif /* opcode_tilegx_h */
1311