blob: c0633466cd5ce49c9739c953268fea79ffcee559 [file] [log] [blame]
Chris Metcalf867e3592010-05-28 23:09:12 -04001/* 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
Chris Metcalf18aecc22011-05-04 14:38:26 -04008typedef unsigned long long tilegx_bundle_bits;
Chris Metcalf867e3592010-05-28 23:09:12 -04009
10
11enum
12{
Chris Metcalf18aecc22011-05-04 14:38:26 -040013 TILEGX_MAX_OPERANDS = 4 /* bfexts */
Chris Metcalf867e3592010-05-28 23:09:12 -040014};
15
16typedef enum
17{
Chris Metcalf18aecc22011-05-04 14:38:26 -040018 TILEGX_OPC_BPT,
19 TILEGX_OPC_INFO,
20 TILEGX_OPC_INFOL,
21 TILEGX_OPC_MOVE,
22 TILEGX_OPC_MOVEI,
23 TILEGX_OPC_MOVELI,
24 TILEGX_OPC_PREFETCH,
25 TILEGX_OPC_PREFETCH_ADD_L1,
26 TILEGX_OPC_PREFETCH_ADD_L1_FAULT,
27 TILEGX_OPC_PREFETCH_ADD_L2,
28 TILEGX_OPC_PREFETCH_ADD_L2_FAULT,
29 TILEGX_OPC_PREFETCH_ADD_L3,
30 TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
31 TILEGX_OPC_PREFETCH_L1,
32 TILEGX_OPC_PREFETCH_L1_FAULT,
33 TILEGX_OPC_PREFETCH_L2,
34 TILEGX_OPC_PREFETCH_L2_FAULT,
35 TILEGX_OPC_PREFETCH_L3,
36 TILEGX_OPC_PREFETCH_L3_FAULT,
37 TILEGX_OPC_RAISE,
38 TILEGX_OPC_ADD,
39 TILEGX_OPC_ADDI,
40 TILEGX_OPC_ADDLI,
41 TILEGX_OPC_ADDX,
42 TILEGX_OPC_ADDXI,
43 TILEGX_OPC_ADDXLI,
44 TILEGX_OPC_ADDXSC,
45 TILEGX_OPC_AND,
46 TILEGX_OPC_ANDI,
47 TILEGX_OPC_BEQZ,
48 TILEGX_OPC_BEQZT,
49 TILEGX_OPC_BFEXTS,
50 TILEGX_OPC_BFEXTU,
51 TILEGX_OPC_BFINS,
52 TILEGX_OPC_BGEZ,
53 TILEGX_OPC_BGEZT,
54 TILEGX_OPC_BGTZ,
55 TILEGX_OPC_BGTZT,
56 TILEGX_OPC_BLBC,
57 TILEGX_OPC_BLBCT,
58 TILEGX_OPC_BLBS,
59 TILEGX_OPC_BLBST,
60 TILEGX_OPC_BLEZ,
61 TILEGX_OPC_BLEZT,
62 TILEGX_OPC_BLTZ,
63 TILEGX_OPC_BLTZT,
64 TILEGX_OPC_BNEZ,
65 TILEGX_OPC_BNEZT,
66 TILEGX_OPC_CLZ,
67 TILEGX_OPC_CMOVEQZ,
68 TILEGX_OPC_CMOVNEZ,
69 TILEGX_OPC_CMPEQ,
70 TILEGX_OPC_CMPEQI,
71 TILEGX_OPC_CMPEXCH,
72 TILEGX_OPC_CMPEXCH4,
73 TILEGX_OPC_CMPLES,
74 TILEGX_OPC_CMPLEU,
75 TILEGX_OPC_CMPLTS,
76 TILEGX_OPC_CMPLTSI,
77 TILEGX_OPC_CMPLTU,
78 TILEGX_OPC_CMPLTUI,
79 TILEGX_OPC_CMPNE,
80 TILEGX_OPC_CMUL,
81 TILEGX_OPC_CMULA,
82 TILEGX_OPC_CMULAF,
83 TILEGX_OPC_CMULF,
84 TILEGX_OPC_CMULFR,
85 TILEGX_OPC_CMULH,
86 TILEGX_OPC_CMULHR,
87 TILEGX_OPC_CRC32_32,
88 TILEGX_OPC_CRC32_8,
89 TILEGX_OPC_CTZ,
90 TILEGX_OPC_DBLALIGN,
91 TILEGX_OPC_DBLALIGN2,
92 TILEGX_OPC_DBLALIGN4,
93 TILEGX_OPC_DBLALIGN6,
94 TILEGX_OPC_DRAIN,
95 TILEGX_OPC_DTLBPR,
96 TILEGX_OPC_EXCH,
97 TILEGX_OPC_EXCH4,
98 TILEGX_OPC_FDOUBLE_ADD_FLAGS,
99 TILEGX_OPC_FDOUBLE_ADDSUB,
100 TILEGX_OPC_FDOUBLE_MUL_FLAGS,
101 TILEGX_OPC_FDOUBLE_PACK1,
102 TILEGX_OPC_FDOUBLE_PACK2,
103 TILEGX_OPC_FDOUBLE_SUB_FLAGS,
104 TILEGX_OPC_FDOUBLE_UNPACK_MAX,
105 TILEGX_OPC_FDOUBLE_UNPACK_MIN,
106 TILEGX_OPC_FETCHADD,
107 TILEGX_OPC_FETCHADD4,
108 TILEGX_OPC_FETCHADDGEZ,
109 TILEGX_OPC_FETCHADDGEZ4,
110 TILEGX_OPC_FETCHAND,
111 TILEGX_OPC_FETCHAND4,
112 TILEGX_OPC_FETCHOR,
113 TILEGX_OPC_FETCHOR4,
114 TILEGX_OPC_FINV,
115 TILEGX_OPC_FLUSH,
116 TILEGX_OPC_FLUSHWB,
117 TILEGX_OPC_FNOP,
118 TILEGX_OPC_FSINGLE_ADD1,
119 TILEGX_OPC_FSINGLE_ADDSUB2,
120 TILEGX_OPC_FSINGLE_MUL1,
121 TILEGX_OPC_FSINGLE_MUL2,
122 TILEGX_OPC_FSINGLE_PACK1,
123 TILEGX_OPC_FSINGLE_PACK2,
124 TILEGX_OPC_FSINGLE_SUB1,
125 TILEGX_OPC_ICOH,
126 TILEGX_OPC_ILL,
127 TILEGX_OPC_INV,
128 TILEGX_OPC_IRET,
129 TILEGX_OPC_J,
130 TILEGX_OPC_JAL,
131 TILEGX_OPC_JALR,
132 TILEGX_OPC_JALRP,
133 TILEGX_OPC_JR,
134 TILEGX_OPC_JRP,
135 TILEGX_OPC_LD,
136 TILEGX_OPC_LD1S,
137 TILEGX_OPC_LD1S_ADD,
138 TILEGX_OPC_LD1U,
139 TILEGX_OPC_LD1U_ADD,
140 TILEGX_OPC_LD2S,
141 TILEGX_OPC_LD2S_ADD,
142 TILEGX_OPC_LD2U,
143 TILEGX_OPC_LD2U_ADD,
144 TILEGX_OPC_LD4S,
145 TILEGX_OPC_LD4S_ADD,
146 TILEGX_OPC_LD4U,
147 TILEGX_OPC_LD4U_ADD,
148 TILEGX_OPC_LD_ADD,
149 TILEGX_OPC_LDNA,
150 TILEGX_OPC_LDNA_ADD,
151 TILEGX_OPC_LDNT,
152 TILEGX_OPC_LDNT1S,
153 TILEGX_OPC_LDNT1S_ADD,
154 TILEGX_OPC_LDNT1U,
155 TILEGX_OPC_LDNT1U_ADD,
156 TILEGX_OPC_LDNT2S,
157 TILEGX_OPC_LDNT2S_ADD,
158 TILEGX_OPC_LDNT2U,
159 TILEGX_OPC_LDNT2U_ADD,
160 TILEGX_OPC_LDNT4S,
161 TILEGX_OPC_LDNT4S_ADD,
162 TILEGX_OPC_LDNT4U,
163 TILEGX_OPC_LDNT4U_ADD,
164 TILEGX_OPC_LDNT_ADD,
165 TILEGX_OPC_LNK,
166 TILEGX_OPC_MF,
167 TILEGX_OPC_MFSPR,
168 TILEGX_OPC_MM,
169 TILEGX_OPC_MNZ,
170 TILEGX_OPC_MTSPR,
171 TILEGX_OPC_MUL_HS_HS,
172 TILEGX_OPC_MUL_HS_HU,
173 TILEGX_OPC_MUL_HS_LS,
174 TILEGX_OPC_MUL_HS_LU,
175 TILEGX_OPC_MUL_HU_HU,
176 TILEGX_OPC_MUL_HU_LS,
177 TILEGX_OPC_MUL_HU_LU,
178 TILEGX_OPC_MUL_LS_LS,
179 TILEGX_OPC_MUL_LS_LU,
180 TILEGX_OPC_MUL_LU_LU,
181 TILEGX_OPC_MULA_HS_HS,
182 TILEGX_OPC_MULA_HS_HU,
183 TILEGX_OPC_MULA_HS_LS,
184 TILEGX_OPC_MULA_HS_LU,
185 TILEGX_OPC_MULA_HU_HU,
186 TILEGX_OPC_MULA_HU_LS,
187 TILEGX_OPC_MULA_HU_LU,
188 TILEGX_OPC_MULA_LS_LS,
189 TILEGX_OPC_MULA_LS_LU,
190 TILEGX_OPC_MULA_LU_LU,
191 TILEGX_OPC_MULAX,
192 TILEGX_OPC_MULX,
193 TILEGX_OPC_MZ,
194 TILEGX_OPC_NAP,
195 TILEGX_OPC_NOP,
196 TILEGX_OPC_NOR,
197 TILEGX_OPC_OR,
198 TILEGX_OPC_ORI,
199 TILEGX_OPC_PCNT,
200 TILEGX_OPC_REVBITS,
201 TILEGX_OPC_REVBYTES,
202 TILEGX_OPC_ROTL,
203 TILEGX_OPC_ROTLI,
204 TILEGX_OPC_SHL,
205 TILEGX_OPC_SHL16INSLI,
206 TILEGX_OPC_SHL1ADD,
207 TILEGX_OPC_SHL1ADDX,
208 TILEGX_OPC_SHL2ADD,
209 TILEGX_OPC_SHL2ADDX,
210 TILEGX_OPC_SHL3ADD,
211 TILEGX_OPC_SHL3ADDX,
212 TILEGX_OPC_SHLI,
213 TILEGX_OPC_SHLX,
214 TILEGX_OPC_SHLXI,
215 TILEGX_OPC_SHRS,
216 TILEGX_OPC_SHRSI,
217 TILEGX_OPC_SHRU,
218 TILEGX_OPC_SHRUI,
219 TILEGX_OPC_SHRUX,
220 TILEGX_OPC_SHRUXI,
221 TILEGX_OPC_SHUFFLEBYTES,
222 TILEGX_OPC_ST,
223 TILEGX_OPC_ST1,
224 TILEGX_OPC_ST1_ADD,
225 TILEGX_OPC_ST2,
226 TILEGX_OPC_ST2_ADD,
227 TILEGX_OPC_ST4,
228 TILEGX_OPC_ST4_ADD,
229 TILEGX_OPC_ST_ADD,
230 TILEGX_OPC_STNT,
231 TILEGX_OPC_STNT1,
232 TILEGX_OPC_STNT1_ADD,
233 TILEGX_OPC_STNT2,
234 TILEGX_OPC_STNT2_ADD,
235 TILEGX_OPC_STNT4,
236 TILEGX_OPC_STNT4_ADD,
237 TILEGX_OPC_STNT_ADD,
238 TILEGX_OPC_SUB,
239 TILEGX_OPC_SUBX,
240 TILEGX_OPC_SUBXSC,
241 TILEGX_OPC_SWINT0,
242 TILEGX_OPC_SWINT1,
243 TILEGX_OPC_SWINT2,
244 TILEGX_OPC_SWINT3,
245 TILEGX_OPC_TBLIDXB0,
246 TILEGX_OPC_TBLIDXB1,
247 TILEGX_OPC_TBLIDXB2,
248 TILEGX_OPC_TBLIDXB3,
249 TILEGX_OPC_V1ADD,
250 TILEGX_OPC_V1ADDI,
251 TILEGX_OPC_V1ADDUC,
252 TILEGX_OPC_V1ADIFFU,
253 TILEGX_OPC_V1AVGU,
254 TILEGX_OPC_V1CMPEQ,
255 TILEGX_OPC_V1CMPEQI,
256 TILEGX_OPC_V1CMPLES,
257 TILEGX_OPC_V1CMPLEU,
258 TILEGX_OPC_V1CMPLTS,
259 TILEGX_OPC_V1CMPLTSI,
260 TILEGX_OPC_V1CMPLTU,
261 TILEGX_OPC_V1CMPLTUI,
262 TILEGX_OPC_V1CMPNE,
263 TILEGX_OPC_V1DDOTPU,
264 TILEGX_OPC_V1DDOTPUA,
265 TILEGX_OPC_V1DDOTPUS,
266 TILEGX_OPC_V1DDOTPUSA,
267 TILEGX_OPC_V1DOTP,
268 TILEGX_OPC_V1DOTPA,
269 TILEGX_OPC_V1DOTPU,
270 TILEGX_OPC_V1DOTPUA,
271 TILEGX_OPC_V1DOTPUS,
272 TILEGX_OPC_V1DOTPUSA,
273 TILEGX_OPC_V1INT_H,
274 TILEGX_OPC_V1INT_L,
275 TILEGX_OPC_V1MAXU,
276 TILEGX_OPC_V1MAXUI,
277 TILEGX_OPC_V1MINU,
278 TILEGX_OPC_V1MINUI,
279 TILEGX_OPC_V1MNZ,
280 TILEGX_OPC_V1MULTU,
281 TILEGX_OPC_V1MULU,
282 TILEGX_OPC_V1MULUS,
283 TILEGX_OPC_V1MZ,
284 TILEGX_OPC_V1SADAU,
285 TILEGX_OPC_V1SADU,
286 TILEGX_OPC_V1SHL,
287 TILEGX_OPC_V1SHLI,
288 TILEGX_OPC_V1SHRS,
289 TILEGX_OPC_V1SHRSI,
290 TILEGX_OPC_V1SHRU,
291 TILEGX_OPC_V1SHRUI,
292 TILEGX_OPC_V1SUB,
293 TILEGX_OPC_V1SUBUC,
294 TILEGX_OPC_V2ADD,
295 TILEGX_OPC_V2ADDI,
296 TILEGX_OPC_V2ADDSC,
297 TILEGX_OPC_V2ADIFFS,
298 TILEGX_OPC_V2AVGS,
299 TILEGX_OPC_V2CMPEQ,
300 TILEGX_OPC_V2CMPEQI,
301 TILEGX_OPC_V2CMPLES,
302 TILEGX_OPC_V2CMPLEU,
303 TILEGX_OPC_V2CMPLTS,
304 TILEGX_OPC_V2CMPLTSI,
305 TILEGX_OPC_V2CMPLTU,
306 TILEGX_OPC_V2CMPLTUI,
307 TILEGX_OPC_V2CMPNE,
308 TILEGX_OPC_V2DOTP,
309 TILEGX_OPC_V2DOTPA,
310 TILEGX_OPC_V2INT_H,
311 TILEGX_OPC_V2INT_L,
312 TILEGX_OPC_V2MAXS,
313 TILEGX_OPC_V2MAXSI,
314 TILEGX_OPC_V2MINS,
315 TILEGX_OPC_V2MINSI,
316 TILEGX_OPC_V2MNZ,
317 TILEGX_OPC_V2MULFSC,
318 TILEGX_OPC_V2MULS,
319 TILEGX_OPC_V2MULTS,
320 TILEGX_OPC_V2MZ,
321 TILEGX_OPC_V2PACKH,
322 TILEGX_OPC_V2PACKL,
323 TILEGX_OPC_V2PACKUC,
324 TILEGX_OPC_V2SADAS,
325 TILEGX_OPC_V2SADAU,
326 TILEGX_OPC_V2SADS,
327 TILEGX_OPC_V2SADU,
328 TILEGX_OPC_V2SHL,
329 TILEGX_OPC_V2SHLI,
330 TILEGX_OPC_V2SHLSC,
331 TILEGX_OPC_V2SHRS,
332 TILEGX_OPC_V2SHRSI,
333 TILEGX_OPC_V2SHRU,
334 TILEGX_OPC_V2SHRUI,
335 TILEGX_OPC_V2SUB,
336 TILEGX_OPC_V2SUBSC,
337 TILEGX_OPC_V4ADD,
338 TILEGX_OPC_V4ADDSC,
339 TILEGX_OPC_V4INT_H,
340 TILEGX_OPC_V4INT_L,
341 TILEGX_OPC_V4PACKSC,
342 TILEGX_OPC_V4SHL,
343 TILEGX_OPC_V4SHLSC,
344 TILEGX_OPC_V4SHRS,
345 TILEGX_OPC_V4SHRU,
346 TILEGX_OPC_V4SUB,
347 TILEGX_OPC_V4SUBSC,
348 TILEGX_OPC_WH64,
349 TILEGX_OPC_XOR,
350 TILEGX_OPC_XORI,
351 TILEGX_OPC_NONE
352} tilegx_mnemonic;
Chris Metcalf867e3592010-05-28 23:09:12 -0400353
354/* 64-bit pattern for a { bpt ; nop } bundle. */
Chris Metcalf18aecc22011-05-04 14:38:26 -0400355#define TILEGX_BPT_BUNDLE 0x286a44ae51485000ULL
Chris Metcalf867e3592010-05-28 23:09:12 -0400356
357
Chris Metcalf18aecc22011-05-04 14:38:26 -0400358#define TILE_ELF_MACHINE_CODE EM_TILE64
Chris Metcalf867e3592010-05-28 23:09:12 -0400359
Chris Metcalf18aecc22011-05-04 14:38:26 -0400360#define TILE_ELF_NAME "elf32-tile64"
Chris Metcalf867e3592010-05-28 23:09:12 -0400361
Chris Metcalf867e3592010-05-28 23:09:12 -0400362
363static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400364get_BFEnd_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400365{
366 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400367 return (((n >> 12)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400368}
369
370static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400371get_BFOpcodeExtension_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400372{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400373 const unsigned int n = (unsigned int)num;
374 return (((n >> 24)) & 0xf);
Chris Metcalf867e3592010-05-28 23:09:12 -0400375}
376
377static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400378get_BFStart_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400379{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400380 const unsigned int n = (unsigned int)num;
381 return (((n >> 18)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400382}
383
384static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400385get_BrOff_X1(tilegx_bundle_bits n)
386{
387 return (((unsigned int)(n >> 31)) & 0x0000003f) |
388 (((unsigned int)(n >> 37)) & 0x0001ffc0);
389}
390
391static __inline unsigned int
392get_BrType_X1(tilegx_bundle_bits n)
393{
394 return (((unsigned int)(n >> 54)) & 0x1f);
395}
396
397static __inline unsigned int
398get_Dest_Imm8_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400399{
400 return (((unsigned int)(n >> 31)) & 0x0000003f) |
401 (((unsigned int)(n >> 43)) & 0x000000c0);
402}
403
404static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400405get_Dest_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400406{
407 const unsigned int n = (unsigned int)num;
408 return (((n >> 0)) & 0x3f);
409}
410
411static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400412get_Dest_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400413{
414 return (((unsigned int)(n >> 31)) & 0x3f);
415}
416
417static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400418get_Dest_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400419{
420 const unsigned int n = (unsigned int)num;
421 return (((n >> 0)) & 0x3f);
422}
423
424static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400425get_Dest_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400426{
427 return (((unsigned int)(n >> 31)) & 0x3f);
428}
429
430static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400431get_Imm16_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400432{
433 const unsigned int n = (unsigned int)num;
434 return (((n >> 12)) & 0xffff);
435}
436
437static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400438get_Imm16_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400439{
440 return (((unsigned int)(n >> 43)) & 0xffff);
441}
442
443static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400444get_Imm8OpcodeExtension_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400445{
446 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400447 return (((n >> 20)) & 0xff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400448}
449
450static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400451get_Imm8OpcodeExtension_X1(tilegx_bundle_bits n)
452{
453 return (((unsigned int)(n >> 51)) & 0xff);
454}
455
456static __inline unsigned int
457get_Imm8_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400458{
459 const unsigned int n = (unsigned int)num;
460 return (((n >> 12)) & 0xff);
461}
462
463static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400464get_Imm8_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400465{
466 return (((unsigned int)(n >> 43)) & 0xff);
467}
468
469static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400470get_Imm8_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400471{
472 const unsigned int n = (unsigned int)num;
473 return (((n >> 12)) & 0xff);
474}
475
476static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400477get_Imm8_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400478{
479 return (((unsigned int)(n >> 43)) & 0xff);
480}
481
482static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400483get_JumpOff_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400484{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400485 return (((unsigned int)(n >> 31)) & 0x7ffffff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400486}
487
488static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400489get_JumpOpcodeExtension_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400490{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400491 return (((unsigned int)(n >> 58)) & 0x1);
Chris Metcalf867e3592010-05-28 23:09:12 -0400492}
493
494static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400495get_MF_Imm14_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400496{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400497 return (((unsigned int)(n >> 37)) & 0x3fff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400498}
499
500static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400501get_MT_Imm14_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400502{
503 return (((unsigned int)(n >> 31)) & 0x0000003f) |
Chris Metcalf18aecc22011-05-04 14:38:26 -0400504 (((unsigned int)(n >> 37)) & 0x00003fc0);
Chris Metcalf867e3592010-05-28 23:09:12 -0400505}
506
507static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400508get_Mode(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400509{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400510 return (((unsigned int)(n >> 62)) & 0x3);
Chris Metcalf867e3592010-05-28 23:09:12 -0400511}
512
513static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400514get_Opcode_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400515{
516 const unsigned int n = (unsigned int)num;
517 return (((n >> 28)) & 0x7);
518}
519
520static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400521get_Opcode_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400522{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400523 return (((unsigned int)(n >> 59)) & 0x7);
Chris Metcalf867e3592010-05-28 23:09:12 -0400524}
525
526static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400527get_Opcode_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400528{
529 const unsigned int n = (unsigned int)num;
530 return (((n >> 27)) & 0xf);
531}
532
533static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400534get_Opcode_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400535{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400536 return (((unsigned int)(n >> 58)) & 0xf);
Chris Metcalf867e3592010-05-28 23:09:12 -0400537}
538
539static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400540get_Opcode_Y2(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400541{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400542 return (((n >> 26)) & 0x00000001) |
543 (((unsigned int)(n >> 56)) & 0x00000002);
Chris Metcalf867e3592010-05-28 23:09:12 -0400544}
545
546static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400547get_RRROpcodeExtension_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400548{
549 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400550 return (((n >> 18)) & 0x3ff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400551}
552
553static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400554get_RRROpcodeExtension_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400555{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400556 return (((unsigned int)(n >> 49)) & 0x3ff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400557}
558
559static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400560get_RRROpcodeExtension_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400561{
562 const unsigned int n = (unsigned int)num;
563 return (((n >> 18)) & 0x3);
564}
565
566static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400567get_RRROpcodeExtension_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400568{
569 return (((unsigned int)(n >> 49)) & 0x3);
570}
571
572static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400573get_ShAmt_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400574{
575 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400576 return (((n >> 12)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400577}
578
579static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400580get_ShAmt_X1(tilegx_bundle_bits n)
581{
582 return (((unsigned int)(n >> 43)) & 0x3f);
583}
584
585static __inline unsigned int
586get_ShAmt_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400587{
588 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400589 return (((n >> 12)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400590}
591
592static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400593get_ShAmt_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400594{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400595 return (((unsigned int)(n >> 43)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400596}
597
598static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400599get_ShiftOpcodeExtension_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400600{
601 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400602 return (((n >> 18)) & 0x3ff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400603}
604
605static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400606get_ShiftOpcodeExtension_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400607{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400608 return (((unsigned int)(n >> 49)) & 0x3ff);
Chris Metcalf867e3592010-05-28 23:09:12 -0400609}
610
611static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400612get_ShiftOpcodeExtension_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400613{
614 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400615 return (((n >> 18)) & 0x3);
Chris Metcalf867e3592010-05-28 23:09:12 -0400616}
617
618static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400619get_ShiftOpcodeExtension_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400620{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400621 return (((unsigned int)(n >> 49)) & 0x3);
Chris Metcalf867e3592010-05-28 23:09:12 -0400622}
623
624static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400625get_SrcA_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400626{
627 const unsigned int n = (unsigned int)num;
628 return (((n >> 6)) & 0x3f);
629}
630
631static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400632get_SrcA_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400633{
634 return (((unsigned int)(n >> 37)) & 0x3f);
635}
636
637static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400638get_SrcA_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400639{
640 const unsigned int n = (unsigned int)num;
641 return (((n >> 6)) & 0x3f);
642}
643
644static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400645get_SrcA_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400646{
647 return (((unsigned int)(n >> 37)) & 0x3f);
648}
649
650static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400651get_SrcA_Y2(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400652{
653 const unsigned int n = (unsigned int)num;
654 return (((n >> 20)) & 0x3f);
655}
656
657static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400658get_SrcBDest_Y2(tilegx_bundle_bits n)
659{
660 return (((unsigned int)(n >> 51)) & 0x3f);
661}
662
663static __inline unsigned int
664get_SrcB_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400665{
666 const unsigned int n = (unsigned int)num;
667 return (((n >> 12)) & 0x3f);
668}
669
670static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400671get_SrcB_X1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400672{
673 return (((unsigned int)(n >> 43)) & 0x3f);
674}
675
676static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400677get_SrcB_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400678{
679 const unsigned int n = (unsigned int)num;
680 return (((n >> 12)) & 0x3f);
681}
682
683static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400684get_SrcB_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400685{
686 return (((unsigned int)(n >> 43)) & 0x3f);
687}
688
689static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400690get_UnaryOpcodeExtension_X0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400691{
692 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400693 return (((n >> 12)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400694}
695
696static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400697get_UnaryOpcodeExtension_X1(tilegx_bundle_bits n)
698{
699 return (((unsigned int)(n >> 43)) & 0x3f);
700}
701
702static __inline unsigned int
703get_UnaryOpcodeExtension_Y0(tilegx_bundle_bits num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400704{
705 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400706 return (((n >> 12)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400707}
708
709static __inline unsigned int
Chris Metcalf18aecc22011-05-04 14:38:26 -0400710get_UnaryOpcodeExtension_Y1(tilegx_bundle_bits n)
Chris Metcalf867e3592010-05-28 23:09:12 -0400711{
Chris Metcalf18aecc22011-05-04 14:38:26 -0400712 return (((unsigned int)(n >> 43)) & 0x3f);
Chris Metcalf867e3592010-05-28 23:09:12 -0400713}
714
715
716static __inline int
717sign_extend(int n, int num_bits)
718{
719 int shift = (int)(sizeof(int) * 8 - num_bits);
720 return (n << shift) >> shift;
721}
722
723
724
Chris Metcalf18aecc22011-05-04 14:38:26 -0400725static __inline tilegx_bundle_bits
726create_BFEnd_X0(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400727{
728 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400729 return ((n & 0x3f) << 12);
Chris Metcalf867e3592010-05-28 23:09:12 -0400730}
731
Chris Metcalf18aecc22011-05-04 14:38:26 -0400732static __inline tilegx_bundle_bits
733create_BFOpcodeExtension_X0(int num)
734{
735 const unsigned int n = (unsigned int)num;
736 return ((n & 0xf) << 24);
737}
738
739static __inline tilegx_bundle_bits
740create_BFStart_X0(int num)
741{
742 const unsigned int n = (unsigned int)num;
743 return ((n & 0x3f) << 18);
744}
745
746static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400747create_BrOff_X1(int num)
748{
749 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400750 return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
751 (((tilegx_bundle_bits)(n & 0x0001ffc0)) << 37);
Chris Metcalf867e3592010-05-28 23:09:12 -0400752}
753
Chris Metcalf18aecc22011-05-04 14:38:26 -0400754static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400755create_BrType_X1(int num)
756{
757 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400758 return (((tilegx_bundle_bits)(n & 0x1f)) << 54);
Chris Metcalf867e3592010-05-28 23:09:12 -0400759}
760
Chris Metcalf18aecc22011-05-04 14:38:26 -0400761static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400762create_Dest_Imm8_X1(int num)
763{
764 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400765 return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
766 (((tilegx_bundle_bits)(n & 0x000000c0)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -0400767}
768
Chris Metcalf18aecc22011-05-04 14:38:26 -0400769static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400770create_Dest_X0(int num)
771{
772 const unsigned int n = (unsigned int)num;
773 return ((n & 0x3f) << 0);
774}
775
Chris Metcalf18aecc22011-05-04 14:38:26 -0400776static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400777create_Dest_X1(int num)
778{
779 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400780 return (((tilegx_bundle_bits)(n & 0x3f)) << 31);
Chris Metcalf867e3592010-05-28 23:09:12 -0400781}
782
Chris Metcalf18aecc22011-05-04 14:38:26 -0400783static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400784create_Dest_Y0(int num)
785{
786 const unsigned int n = (unsigned int)num;
787 return ((n & 0x3f) << 0);
788}
789
Chris Metcalf18aecc22011-05-04 14:38:26 -0400790static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400791create_Dest_Y1(int num)
792{
793 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400794 return (((tilegx_bundle_bits)(n & 0x3f)) << 31);
Chris Metcalf867e3592010-05-28 23:09:12 -0400795}
796
Chris Metcalf18aecc22011-05-04 14:38:26 -0400797static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400798create_Imm16_X0(int num)
799{
800 const unsigned int n = (unsigned int)num;
801 return ((n & 0xffff) << 12);
802}
803
Chris Metcalf18aecc22011-05-04 14:38:26 -0400804static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400805create_Imm16_X1(int num)
806{
807 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400808 return (((tilegx_bundle_bits)(n & 0xffff)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -0400809}
810
Chris Metcalf18aecc22011-05-04 14:38:26 -0400811static __inline tilegx_bundle_bits
812create_Imm8OpcodeExtension_X0(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400813{
814 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400815 return ((n & 0xff) << 20);
Chris Metcalf867e3592010-05-28 23:09:12 -0400816}
817
Chris Metcalf18aecc22011-05-04 14:38:26 -0400818static __inline tilegx_bundle_bits
819create_Imm8OpcodeExtension_X1(int num)
820{
821 const unsigned int n = (unsigned int)num;
822 return (((tilegx_bundle_bits)(n & 0xff)) << 51);
823}
824
825static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400826create_Imm8_X0(int num)
827{
828 const unsigned int n = (unsigned int)num;
829 return ((n & 0xff) << 12);
830}
831
Chris Metcalf18aecc22011-05-04 14:38:26 -0400832static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400833create_Imm8_X1(int num)
834{
835 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400836 return (((tilegx_bundle_bits)(n & 0xff)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -0400837}
838
Chris Metcalf18aecc22011-05-04 14:38:26 -0400839static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400840create_Imm8_Y0(int num)
841{
842 const unsigned int n = (unsigned int)num;
843 return ((n & 0xff) << 12);
844}
845
Chris Metcalf18aecc22011-05-04 14:38:26 -0400846static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400847create_Imm8_Y1(int num)
848{
849 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400850 return (((tilegx_bundle_bits)(n & 0xff)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -0400851}
852
Chris Metcalf18aecc22011-05-04 14:38:26 -0400853static __inline tilegx_bundle_bits
854create_JumpOff_X1(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400855{
856 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400857 return (((tilegx_bundle_bits)(n & 0x7ffffff)) << 31);
Chris Metcalf867e3592010-05-28 23:09:12 -0400858}
859
Chris Metcalf18aecc22011-05-04 14:38:26 -0400860static __inline tilegx_bundle_bits
861create_JumpOpcodeExtension_X1(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400862{
863 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400864 return (((tilegx_bundle_bits)(n & 0x1)) << 58);
Chris Metcalf867e3592010-05-28 23:09:12 -0400865}
866
Chris Metcalf18aecc22011-05-04 14:38:26 -0400867static __inline tilegx_bundle_bits
868create_MF_Imm14_X1(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400869{
870 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400871 return (((tilegx_bundle_bits)(n & 0x3fff)) << 37);
Chris Metcalf867e3592010-05-28 23:09:12 -0400872}
873
Chris Metcalf18aecc22011-05-04 14:38:26 -0400874static __inline tilegx_bundle_bits
875create_MT_Imm14_X1(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -0400876{
877 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400878 return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) |
879 (((tilegx_bundle_bits)(n & 0x00003fc0)) << 37);
Chris Metcalf867e3592010-05-28 23:09:12 -0400880}
881
Chris Metcalf18aecc22011-05-04 14:38:26 -0400882static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400883create_Mode(int num)
884{
885 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400886 return (((tilegx_bundle_bits)(n & 0x3)) << 62);
Chris Metcalf867e3592010-05-28 23:09:12 -0400887}
888
Chris Metcalf18aecc22011-05-04 14:38:26 -0400889static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400890create_Opcode_X0(int num)
891{
892 const unsigned int n = (unsigned int)num;
893 return ((n & 0x7) << 28);
894}
895
Chris Metcalf18aecc22011-05-04 14:38:26 -0400896static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400897create_Opcode_X1(int num)
898{
899 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400900 return (((tilegx_bundle_bits)(n & 0x7)) << 59);
Chris Metcalf867e3592010-05-28 23:09:12 -0400901}
902
Chris Metcalf18aecc22011-05-04 14:38:26 -0400903static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400904create_Opcode_Y0(int num)
905{
906 const unsigned int n = (unsigned int)num;
907 return ((n & 0xf) << 27);
908}
909
Chris Metcalf18aecc22011-05-04 14:38:26 -0400910static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400911create_Opcode_Y1(int num)
912{
913 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400914 return (((tilegx_bundle_bits)(n & 0xf)) << 58);
Chris Metcalf867e3592010-05-28 23:09:12 -0400915}
916
Chris Metcalf18aecc22011-05-04 14:38:26 -0400917static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400918create_Opcode_Y2(int num)
919{
920 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400921 return ((n & 0x00000001) << 26) |
922 (((tilegx_bundle_bits)(n & 0x00000002)) << 56);
Chris Metcalf867e3592010-05-28 23:09:12 -0400923}
924
Chris Metcalf18aecc22011-05-04 14:38:26 -0400925static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400926create_RRROpcodeExtension_X0(int num)
927{
928 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400929 return ((n & 0x3ff) << 18);
Chris Metcalf867e3592010-05-28 23:09:12 -0400930}
931
Chris Metcalf18aecc22011-05-04 14:38:26 -0400932static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400933create_RRROpcodeExtension_X1(int num)
934{
935 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400936 return (((tilegx_bundle_bits)(n & 0x3ff)) << 49);
Chris Metcalf867e3592010-05-28 23:09:12 -0400937}
938
Chris Metcalf18aecc22011-05-04 14:38:26 -0400939static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400940create_RRROpcodeExtension_Y0(int num)
941{
942 const unsigned int n = (unsigned int)num;
943 return ((n & 0x3) << 18);
944}
945
Chris Metcalf18aecc22011-05-04 14:38:26 -0400946static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400947create_RRROpcodeExtension_Y1(int num)
948{
949 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400950 return (((tilegx_bundle_bits)(n & 0x3)) << 49);
Chris Metcalf867e3592010-05-28 23:09:12 -0400951}
952
Chris Metcalf18aecc22011-05-04 14:38:26 -0400953static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400954create_ShAmt_X0(int num)
955{
956 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400957 return ((n & 0x3f) << 12);
Chris Metcalf867e3592010-05-28 23:09:12 -0400958}
959
Chris Metcalf18aecc22011-05-04 14:38:26 -0400960static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400961create_ShAmt_X1(int num)
962{
963 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400964 return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -0400965}
966
Chris Metcalf18aecc22011-05-04 14:38:26 -0400967static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400968create_ShAmt_Y0(int num)
969{
970 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400971 return ((n & 0x3f) << 12);
Chris Metcalf867e3592010-05-28 23:09:12 -0400972}
973
Chris Metcalf18aecc22011-05-04 14:38:26 -0400974static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -0400975create_ShAmt_Y1(int num)
976{
977 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -0400978 return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -0400979}
980
Chris Metcalf18aecc22011-05-04 14:38:26 -0400981static __inline tilegx_bundle_bits
982create_ShiftOpcodeExtension_X0(int num)
983{
984 const unsigned int n = (unsigned int)num;
985 return ((n & 0x3ff) << 18);
986}
987
988static __inline tilegx_bundle_bits
989create_ShiftOpcodeExtension_X1(int num)
990{
991 const unsigned int n = (unsigned int)num;
992 return (((tilegx_bundle_bits)(n & 0x3ff)) << 49);
993}
994
995static __inline tilegx_bundle_bits
996create_ShiftOpcodeExtension_Y0(int num)
997{
998 const unsigned int n = (unsigned int)num;
999 return ((n & 0x3) << 18);
1000}
1001
1002static __inline tilegx_bundle_bits
1003create_ShiftOpcodeExtension_Y1(int num)
1004{
1005 const unsigned int n = (unsigned int)num;
1006 return (((tilegx_bundle_bits)(n & 0x3)) << 49);
1007}
1008
1009static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001010create_SrcA_X0(int num)
1011{
1012 const unsigned int n = (unsigned int)num;
1013 return ((n & 0x3f) << 6);
1014}
1015
Chris Metcalf18aecc22011-05-04 14:38:26 -04001016static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001017create_SrcA_X1(int num)
1018{
1019 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001020 return (((tilegx_bundle_bits)(n & 0x3f)) << 37);
Chris Metcalf867e3592010-05-28 23:09:12 -04001021}
1022
Chris Metcalf18aecc22011-05-04 14:38:26 -04001023static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001024create_SrcA_Y0(int num)
1025{
1026 const unsigned int n = (unsigned int)num;
1027 return ((n & 0x3f) << 6);
1028}
1029
Chris Metcalf18aecc22011-05-04 14:38:26 -04001030static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001031create_SrcA_Y1(int num)
1032{
1033 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001034 return (((tilegx_bundle_bits)(n & 0x3f)) << 37);
Chris Metcalf867e3592010-05-28 23:09:12 -04001035}
1036
Chris Metcalf18aecc22011-05-04 14:38:26 -04001037static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001038create_SrcA_Y2(int num)
1039{
1040 const unsigned int n = (unsigned int)num;
Chris Metcalf867e3592010-05-28 23:09:12 -04001041 return ((n & 0x3f) << 20);
1042}
1043
Chris Metcalf18aecc22011-05-04 14:38:26 -04001044static __inline tilegx_bundle_bits
1045create_SrcBDest_Y2(int num)
1046{
1047 const unsigned int n = (unsigned int)num;
1048 return (((tilegx_bundle_bits)(n & 0x3f)) << 51);
1049}
1050
1051static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001052create_SrcB_X0(int num)
1053{
1054 const unsigned int n = (unsigned int)num;
1055 return ((n & 0x3f) << 12);
1056}
1057
Chris Metcalf18aecc22011-05-04 14:38:26 -04001058static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001059create_SrcB_X1(int num)
1060{
1061 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001062 return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -04001063}
1064
Chris Metcalf18aecc22011-05-04 14:38:26 -04001065static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001066create_SrcB_Y0(int num)
1067{
1068 const unsigned int n = (unsigned int)num;
1069 return ((n & 0x3f) << 12);
1070}
1071
Chris Metcalf18aecc22011-05-04 14:38:26 -04001072static __inline tilegx_bundle_bits
Chris Metcalf867e3592010-05-28 23:09:12 -04001073create_SrcB_Y1(int num)
1074{
1075 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001076 return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -04001077}
1078
Chris Metcalf18aecc22011-05-04 14:38:26 -04001079static __inline tilegx_bundle_bits
1080create_UnaryOpcodeExtension_X0(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -04001081{
1082 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001083 return ((n & 0x3f) << 12);
Chris Metcalf867e3592010-05-28 23:09:12 -04001084}
1085
Chris Metcalf18aecc22011-05-04 14:38:26 -04001086static __inline tilegx_bundle_bits
1087create_UnaryOpcodeExtension_X1(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -04001088{
1089 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001090 return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -04001091}
1092
Chris Metcalf18aecc22011-05-04 14:38:26 -04001093static __inline tilegx_bundle_bits
1094create_UnaryOpcodeExtension_Y0(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -04001095{
1096 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001097 return ((n & 0x3f) << 12);
Chris Metcalf867e3592010-05-28 23:09:12 -04001098}
1099
Chris Metcalf18aecc22011-05-04 14:38:26 -04001100static __inline tilegx_bundle_bits
1101create_UnaryOpcodeExtension_Y1(int num)
Chris Metcalf867e3592010-05-28 23:09:12 -04001102{
1103 const unsigned int n = (unsigned int)num;
Chris Metcalf18aecc22011-05-04 14:38:26 -04001104 return (((tilegx_bundle_bits)(n & 0x3f)) << 43);
Chris Metcalf867e3592010-05-28 23:09:12 -04001105}
1106
Chris Metcalf867e3592010-05-28 23:09:12 -04001107
1108typedef enum
1109{
Chris Metcalf18aecc22011-05-04 14:38:26 -04001110 TILEGX_PIPELINE_X0,
1111 TILEGX_PIPELINE_X1,
1112 TILEGX_PIPELINE_Y0,
1113 TILEGX_PIPELINE_Y1,
1114 TILEGX_PIPELINE_Y2,
1115} tilegx_pipeline;
Chris Metcalf867e3592010-05-28 23:09:12 -04001116
Chris Metcalf18aecc22011-05-04 14:38:26 -04001117#define tilegx_is_x_pipeline(p) ((int)(p) <= (int)TILEGX_PIPELINE_X1)
Chris Metcalf867e3592010-05-28 23:09:12 -04001118
1119typedef enum
1120{
Chris Metcalf18aecc22011-05-04 14:38:26 -04001121 TILEGX_OP_TYPE_REGISTER,
1122 TILEGX_OP_TYPE_IMMEDIATE,
1123 TILEGX_OP_TYPE_ADDRESS,
1124 TILEGX_OP_TYPE_SPR
1125} tilegx_operand_type;
Chris Metcalf867e3592010-05-28 23:09:12 -04001126
Chris Metcalf18aecc22011-05-04 14:38:26 -04001127/* These are the bits that determine if a bundle is in the X encoding. */
1128#define TILEGX_BUNDLE_MODE_MASK ((tilegx_bundle_bits)3 << 62)
Chris Metcalf867e3592010-05-28 23:09:12 -04001129
1130enum
1131{
1132 /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001133 TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
Chris Metcalf867e3592010-05-28 23:09:12 -04001134
1135 /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001136 TILEGX_NUM_PIPELINE_ENCODINGS = 5,
Chris Metcalf867e3592010-05-28 23:09:12 -04001137
Chris Metcalf18aecc22011-05-04 14:38:26 -04001138 /* Log base 2 of TILEGX_BUNDLE_SIZE_IN_BYTES. */
1139 TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
Chris Metcalf867e3592010-05-28 23:09:12 -04001140
1141 /* Instructions take this many bytes. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001142 TILEGX_BUNDLE_SIZE_IN_BYTES = 1 << TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES,
Chris Metcalf867e3592010-05-28 23:09:12 -04001143
Chris Metcalf18aecc22011-05-04 14:38:26 -04001144 /* Log base 2 of TILEGX_BUNDLE_ALIGNMENT_IN_BYTES. */
1145 TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
Chris Metcalf867e3592010-05-28 23:09:12 -04001146
1147 /* Bundles should be aligned modulo this number of bytes. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001148 TILEGX_BUNDLE_ALIGNMENT_IN_BYTES =
1149 (1 << TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
Chris Metcalf867e3592010-05-28 23:09:12 -04001150
1151 /* Number of registers (some are magic, such as network I/O). */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001152 TILEGX_NUM_REGISTERS = 64,
Chris Metcalf867e3592010-05-28 23:09:12 -04001153};
1154
1155
Chris Metcalf18aecc22011-05-04 14:38:26 -04001156struct tilegx_operand
Chris Metcalf867e3592010-05-28 23:09:12 -04001157{
1158 /* Is this operand a register, immediate or address? */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001159 tilegx_operand_type type;
Chris Metcalf867e3592010-05-28 23:09:12 -04001160
1161 /* The default relocation type for this operand. */
1162 signed int default_reloc : 16;
1163
1164 /* How many bits is this value? (used for range checking) */
1165 unsigned int num_bits : 5;
1166
1167 /* Is the value signed? (used for range checking) */
1168 unsigned int is_signed : 1;
1169
1170 /* Is this operand a source register? */
1171 unsigned int is_src_reg : 1;
1172
1173 /* Is this operand written? (i.e. is it a destination register) */
1174 unsigned int is_dest_reg : 1;
1175
1176 /* Is this operand PC-relative? */
1177 unsigned int is_pc_relative : 1;
1178
1179 /* By how many bits do we right shift the value before inserting? */
1180 unsigned int rightshift : 2;
1181
1182 /* Return the bits for this operand to be ORed into an existing bundle. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001183 tilegx_bundle_bits (*insert) (int op);
Chris Metcalf867e3592010-05-28 23:09:12 -04001184
1185 /* Extract this operand and return it. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001186 unsigned int (*extract) (tilegx_bundle_bits bundle);
Chris Metcalf867e3592010-05-28 23:09:12 -04001187};
1188
1189
Chris Metcalf18aecc22011-05-04 14:38:26 -04001190extern const struct tilegx_operand tilegx_operands[];
Chris Metcalf867e3592010-05-28 23:09:12 -04001191
1192/* One finite-state machine per pipe for rapid instruction decoding. */
1193extern const unsigned short * const
Chris Metcalf18aecc22011-05-04 14:38:26 -04001194tilegx_bundle_decoder_fsms[TILEGX_NUM_PIPELINE_ENCODINGS];
Chris Metcalf867e3592010-05-28 23:09:12 -04001195
1196
Chris Metcalf18aecc22011-05-04 14:38:26 -04001197struct tilegx_opcode
Chris Metcalf867e3592010-05-28 23:09:12 -04001198{
1199 /* The opcode mnemonic, e.g. "add" */
1200 const char *name;
1201
1202 /* The enum value for this mnemonic. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001203 tilegx_mnemonic mnemonic;
Chris Metcalf867e3592010-05-28 23:09:12 -04001204
1205 /* A bit mask of which of the five pipes this instruction
1206 is compatible with:
1207 X0 0x01
1208 X1 0x02
1209 Y0 0x04
1210 Y1 0x08
1211 Y2 0x10 */
1212 unsigned char pipes;
1213
1214 /* How many operands are there? */
1215 unsigned char num_operands;
1216
1217 /* Which register does this write implicitly, or TREG_ZERO if none? */
1218 unsigned char implicitly_written_register;
1219
1220 /* Can this be bundled with other instructions (almost always true). */
1221 unsigned char can_bundle;
1222
1223 /* The description of the operands. Each of these is an
Chris Metcalf18aecc22011-05-04 14:38:26 -04001224 * index into the tilegx_operands[] table. */
1225 unsigned char operands[TILEGX_NUM_PIPELINE_ENCODINGS][TILEGX_MAX_OPERANDS];
Chris Metcalf867e3592010-05-28 23:09:12 -04001226
Chris Metcalf867e3592010-05-28 23:09:12 -04001227};
1228
Chris Metcalf18aecc22011-05-04 14:38:26 -04001229extern const struct tilegx_opcode tilegx_opcodes[];
Chris Metcalf867e3592010-05-28 23:09:12 -04001230
1231/* Used for non-textual disassembly into structs. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001232struct tilegx_decoded_instruction
Chris Metcalf867e3592010-05-28 23:09:12 -04001233{
Chris Metcalf18aecc22011-05-04 14:38:26 -04001234 const struct tilegx_opcode *opcode;
1235 const struct tilegx_operand *operands[TILEGX_MAX_OPERANDS];
1236 long long operand_values[TILEGX_MAX_OPERANDS];
Chris Metcalf867e3592010-05-28 23:09:12 -04001237};
1238
1239
1240/* Disassemble a bundle into a struct for machine processing. */
Chris Metcalf18aecc22011-05-04 14:38:26 -04001241extern int parse_insn_tilegx(tilegx_bundle_bits bits,
1242 unsigned long long pc,
1243 struct tilegx_decoded_instruction
1244 decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE]);
Chris Metcalf93013a02011-05-02 13:49:14 -04001245
1246
Chris Metcalf867e3592010-05-28 23:09:12 -04001247
Chris Metcalf18aecc22011-05-04 14:38:26 -04001248#endif /* opcode_tilegx_h */