~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/tile/include/asm/tile-desc_64.h

Version: ~ [ linux-5.13-rc1 ] ~ [ linux-5.12.2 ] ~ [ linux-5.11.19 ] ~ [ linux-5.10.35 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.117 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.190 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.232 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.268 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.268 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* TILE-Gx opcode information.
  2  *
  3  * Copyright 2011 Tilera Corporation. All Rights Reserved.
  4  *
  5  *   This program is free software; you can redistribute it and/or
  6  *   modify it under the terms of the GNU General Public License
  7  *   as published by the Free Software Foundation, version 2.
  8  *
  9  *   This program is distributed in the hope that it will be useful, but
 10  *   WITHOUT ANY WARRANTY; without even the implied warranty of
 11  *   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
 12  *   NON INFRINGEMENT.  See the GNU General Public License for
 13  *   more details.
 14  *
 15  *
 16  *
 17  *
 18  *
 19  */
 20 
 21 #ifndef opcode_tile_h
 22 #define opcode_tile_h
 23 
 24 #include <arch/opcode.h>
 25 
 26 
 27 enum
 28 {
 29   TILEGX_MAX_OPERANDS = 4 /* bfexts */
 30 };
 31 
 32 typedef enum
 33 {
 34   TILEGX_OPC_BPT,
 35   TILEGX_OPC_INFO,
 36   TILEGX_OPC_INFOL,
 37   TILEGX_OPC_MOVE,
 38   TILEGX_OPC_MOVEI,
 39   TILEGX_OPC_MOVELI,
 40   TILEGX_OPC_PREFETCH,
 41   TILEGX_OPC_PREFETCH_ADD_L1,
 42   TILEGX_OPC_PREFETCH_ADD_L1_FAULT,
 43   TILEGX_OPC_PREFETCH_ADD_L2,
 44   TILEGX_OPC_PREFETCH_ADD_L2_FAULT,
 45   TILEGX_OPC_PREFETCH_ADD_L3,
 46   TILEGX_OPC_PREFETCH_ADD_L3_FAULT,
 47   TILEGX_OPC_PREFETCH_L1,
 48   TILEGX_OPC_PREFETCH_L1_FAULT,
 49   TILEGX_OPC_PREFETCH_L2,
 50   TILEGX_OPC_PREFETCH_L2_FAULT,
 51   TILEGX_OPC_PREFETCH_L3,
 52   TILEGX_OPC_PREFETCH_L3_FAULT,
 53   TILEGX_OPC_RAISE,
 54   TILEGX_OPC_ADD,
 55   TILEGX_OPC_ADDI,
 56   TILEGX_OPC_ADDLI,
 57   TILEGX_OPC_ADDX,
 58   TILEGX_OPC_ADDXI,
 59   TILEGX_OPC_ADDXLI,
 60   TILEGX_OPC_ADDXSC,
 61   TILEGX_OPC_AND,
 62   TILEGX_OPC_ANDI,
 63   TILEGX_OPC_BEQZ,
 64   TILEGX_OPC_BEQZT,
 65   TILEGX_OPC_BFEXTS,
 66   TILEGX_OPC_BFEXTU,
 67   TILEGX_OPC_BFINS,
 68   TILEGX_OPC_BGEZ,
 69   TILEGX_OPC_BGEZT,
 70   TILEGX_OPC_BGTZ,
 71   TILEGX_OPC_BGTZT,
 72   TILEGX_OPC_BLBC,
 73   TILEGX_OPC_BLBCT,
 74   TILEGX_OPC_BLBS,
 75   TILEGX_OPC_BLBST,
 76   TILEGX_OPC_BLEZ,
 77   TILEGX_OPC_BLEZT,
 78   TILEGX_OPC_BLTZ,
 79   TILEGX_OPC_BLTZT,
 80   TILEGX_OPC_BNEZ,
 81   TILEGX_OPC_BNEZT,
 82   TILEGX_OPC_CLZ,
 83   TILEGX_OPC_CMOVEQZ,
 84   TILEGX_OPC_CMOVNEZ,
 85   TILEGX_OPC_CMPEQ,
 86   TILEGX_OPC_CMPEQI,
 87   TILEGX_OPC_CMPEXCH,
 88   TILEGX_OPC_CMPEXCH4,
 89   TILEGX_OPC_CMPLES,
 90   TILEGX_OPC_CMPLEU,
 91   TILEGX_OPC_CMPLTS,
 92   TILEGX_OPC_CMPLTSI,
 93   TILEGX_OPC_CMPLTU,
 94   TILEGX_OPC_CMPLTUI,
 95   TILEGX_OPC_CMPNE,
 96   TILEGX_OPC_CMUL,
 97   TILEGX_OPC_CMULA,
 98   TILEGX_OPC_CMULAF,
 99   TILEGX_OPC_CMULF,
100   TILEGX_OPC_CMULFR,
101   TILEGX_OPC_CMULH,
102   TILEGX_OPC_CMULHR,
103   TILEGX_OPC_CRC32_32,
104   TILEGX_OPC_CRC32_8,
105   TILEGX_OPC_CTZ,
106   TILEGX_OPC_DBLALIGN,
107   TILEGX_OPC_DBLALIGN2,
108   TILEGX_OPC_DBLALIGN4,
109   TILEGX_OPC_DBLALIGN6,
110   TILEGX_OPC_DRAIN,
111   TILEGX_OPC_DTLBPR,
112   TILEGX_OPC_EXCH,
113   TILEGX_OPC_EXCH4,
114   TILEGX_OPC_FDOUBLE_ADD_FLAGS,
115   TILEGX_OPC_FDOUBLE_ADDSUB,
116   TILEGX_OPC_FDOUBLE_MUL_FLAGS,
117   TILEGX_OPC_FDOUBLE_PACK1,
118   TILEGX_OPC_FDOUBLE_PACK2,
119   TILEGX_OPC_FDOUBLE_SUB_FLAGS,
120   TILEGX_OPC_FDOUBLE_UNPACK_MAX,
121   TILEGX_OPC_FDOUBLE_UNPACK_MIN,
122   TILEGX_OPC_FETCHADD,
123   TILEGX_OPC_FETCHADD4,
124   TILEGX_OPC_FETCHADDGEZ,
125   TILEGX_OPC_FETCHADDGEZ4,
126   TILEGX_OPC_FETCHAND,
127   TILEGX_OPC_FETCHAND4,
128   TILEGX_OPC_FETCHOR,
129   TILEGX_OPC_FETCHOR4,
130   TILEGX_OPC_FINV,
131   TILEGX_OPC_FLUSH,
132   TILEGX_OPC_FLUSHWB,
133   TILEGX_OPC_FNOP,
134   TILEGX_OPC_FSINGLE_ADD1,
135   TILEGX_OPC_FSINGLE_ADDSUB2,
136   TILEGX_OPC_FSINGLE_MUL1,
137   TILEGX_OPC_FSINGLE_MUL2,
138   TILEGX_OPC_FSINGLE_PACK1,
139   TILEGX_OPC_FSINGLE_PACK2,
140   TILEGX_OPC_FSINGLE_SUB1,
141   TILEGX_OPC_ICOH,
142   TILEGX_OPC_ILL,
143   TILEGX_OPC_INV,
144   TILEGX_OPC_IRET,
145   TILEGX_OPC_J,
146   TILEGX_OPC_JAL,
147   TILEGX_OPC_JALR,
148   TILEGX_OPC_JALRP,
149   TILEGX_OPC_JR,
150   TILEGX_OPC_JRP,
151   TILEGX_OPC_LD,
152   TILEGX_OPC_LD1S,
153   TILEGX_OPC_LD1S_ADD,
154   TILEGX_OPC_LD1U,
155   TILEGX_OPC_LD1U_ADD,
156   TILEGX_OPC_LD2S,
157   TILEGX_OPC_LD2S_ADD,
158   TILEGX_OPC_LD2U,
159   TILEGX_OPC_LD2U_ADD,
160   TILEGX_OPC_LD4S,
161   TILEGX_OPC_LD4S_ADD,
162   TILEGX_OPC_LD4U,
163   TILEGX_OPC_LD4U_ADD,
164   TILEGX_OPC_LD_ADD,
165   TILEGX_OPC_LDNA,
166   TILEGX_OPC_LDNA_ADD,
167   TILEGX_OPC_LDNT,
168   TILEGX_OPC_LDNT1S,
169   TILEGX_OPC_LDNT1S_ADD,
170   TILEGX_OPC_LDNT1U,
171   TILEGX_OPC_LDNT1U_ADD,
172   TILEGX_OPC_LDNT2S,
173   TILEGX_OPC_LDNT2S_ADD,
174   TILEGX_OPC_LDNT2U,
175   TILEGX_OPC_LDNT2U_ADD,
176   TILEGX_OPC_LDNT4S,
177   TILEGX_OPC_LDNT4S_ADD,
178   TILEGX_OPC_LDNT4U,
179   TILEGX_OPC_LDNT4U_ADD,
180   TILEGX_OPC_LDNT_ADD,
181   TILEGX_OPC_LNK,
182   TILEGX_OPC_MF,
183   TILEGX_OPC_MFSPR,
184   TILEGX_OPC_MM,
185   TILEGX_OPC_MNZ,
186   TILEGX_OPC_MTSPR,
187   TILEGX_OPC_MUL_HS_HS,
188   TILEGX_OPC_MUL_HS_HU,
189   TILEGX_OPC_MUL_HS_LS,
190   TILEGX_OPC_MUL_HS_LU,
191   TILEGX_OPC_MUL_HU_HU,
192   TILEGX_OPC_MUL_HU_LS,
193   TILEGX_OPC_MUL_HU_LU,
194   TILEGX_OPC_MUL_LS_LS,
195   TILEGX_OPC_MUL_LS_LU,
196   TILEGX_OPC_MUL_LU_LU,
197   TILEGX_OPC_MULA_HS_HS,
198   TILEGX_OPC_MULA_HS_HU,
199   TILEGX_OPC_MULA_HS_LS,
200   TILEGX_OPC_MULA_HS_LU,
201   TILEGX_OPC_MULA_HU_HU,
202   TILEGX_OPC_MULA_HU_LS,
203   TILEGX_OPC_MULA_HU_LU,
204   TILEGX_OPC_MULA_LS_LS,
205   TILEGX_OPC_MULA_LS_LU,
206   TILEGX_OPC_MULA_LU_LU,
207   TILEGX_OPC_MULAX,
208   TILEGX_OPC_MULX,
209   TILEGX_OPC_MZ,
210   TILEGX_OPC_NAP,
211   TILEGX_OPC_NOP,
212   TILEGX_OPC_NOR,
213   TILEGX_OPC_OR,
214   TILEGX_OPC_ORI,
215   TILEGX_OPC_PCNT,
216   TILEGX_OPC_REVBITS,
217   TILEGX_OPC_REVBYTES,
218   TILEGX_OPC_ROTL,
219   TILEGX_OPC_ROTLI,
220   TILEGX_OPC_SHL,
221   TILEGX_OPC_SHL16INSLI,
222   TILEGX_OPC_SHL1ADD,
223   TILEGX_OPC_SHL1ADDX,
224   TILEGX_OPC_SHL2ADD,
225   TILEGX_OPC_SHL2ADDX,
226   TILEGX_OPC_SHL3ADD,
227   TILEGX_OPC_SHL3ADDX,
228   TILEGX_OPC_SHLI,
229   TILEGX_OPC_SHLX,
230   TILEGX_OPC_SHLXI,
231   TILEGX_OPC_SHRS,
232   TILEGX_OPC_SHRSI,
233   TILEGX_OPC_SHRU,
234   TILEGX_OPC_SHRUI,
235   TILEGX_OPC_SHRUX,
236   TILEGX_OPC_SHRUXI,
237   TILEGX_OPC_SHUFFLEBYTES,
238   TILEGX_OPC_ST,
239   TILEGX_OPC_ST1,
240   TILEGX_OPC_ST1_ADD,
241   TILEGX_OPC_ST2,
242   TILEGX_OPC_ST2_ADD,
243   TILEGX_OPC_ST4,
244   TILEGX_OPC_ST4_ADD,
245   TILEGX_OPC_ST_ADD,
246   TILEGX_OPC_STNT,
247   TILEGX_OPC_STNT1,
248   TILEGX_OPC_STNT1_ADD,
249   TILEGX_OPC_STNT2,
250   TILEGX_OPC_STNT2_ADD,
251   TILEGX_OPC_STNT4,
252   TILEGX_OPC_STNT4_ADD,
253   TILEGX_OPC_STNT_ADD,
254   TILEGX_OPC_SUB,
255   TILEGX_OPC_SUBX,
256   TILEGX_OPC_SUBXSC,
257   TILEGX_OPC_SWINT0,
258   TILEGX_OPC_SWINT1,
259   TILEGX_OPC_SWINT2,
260   TILEGX_OPC_SWINT3,
261   TILEGX_OPC_TBLIDXB0,
262   TILEGX_OPC_TBLIDXB1,
263   TILEGX_OPC_TBLIDXB2,
264   TILEGX_OPC_TBLIDXB3,
265   TILEGX_OPC_V1ADD,
266   TILEGX_OPC_V1ADDI,
267   TILEGX_OPC_V1ADDUC,
268   TILEGX_OPC_V1ADIFFU,
269   TILEGX_OPC_V1AVGU,
270   TILEGX_OPC_V1CMPEQ,
271   TILEGX_OPC_V1CMPEQI,
272   TILEGX_OPC_V1CMPLES,
273   TILEGX_OPC_V1CMPLEU,
274   TILEGX_OPC_V1CMPLTS,
275   TILEGX_OPC_V1CMPLTSI,
276   TILEGX_OPC_V1CMPLTU,
277   TILEGX_OPC_V1CMPLTUI,
278   TILEGX_OPC_V1CMPNE,
279   TILEGX_OPC_V1DDOTPU,
280   TILEGX_OPC_V1DDOTPUA,
281   TILEGX_OPC_V1DDOTPUS,
282   TILEGX_OPC_V1DDOTPUSA,
283   TILEGX_OPC_V1DOTP,
284   TILEGX_OPC_V1DOTPA,
285   TILEGX_OPC_V1DOTPU,
286   TILEGX_OPC_V1DOTPUA,
287   TILEGX_OPC_V1DOTPUS,
288   TILEGX_OPC_V1DOTPUSA,
289   TILEGX_OPC_V1INT_H,
290   TILEGX_OPC_V1INT_L,
291   TILEGX_OPC_V1MAXU,
292   TILEGX_OPC_V1MAXUI,
293   TILEGX_OPC_V1MINU,
294   TILEGX_OPC_V1MINUI,
295   TILEGX_OPC_V1MNZ,
296   TILEGX_OPC_V1MULTU,
297   TILEGX_OPC_V1MULU,
298   TILEGX_OPC_V1MULUS,
299   TILEGX_OPC_V1MZ,
300   TILEGX_OPC_V1SADAU,
301   TILEGX_OPC_V1SADU,
302   TILEGX_OPC_V1SHL,
303   TILEGX_OPC_V1SHLI,
304   TILEGX_OPC_V1SHRS,
305   TILEGX_OPC_V1SHRSI,
306   TILEGX_OPC_V1SHRU,
307   TILEGX_OPC_V1SHRUI,
308   TILEGX_OPC_V1SUB,
309   TILEGX_OPC_V1SUBUC,
310   TILEGX_OPC_V2ADD,
311   TILEGX_OPC_V2ADDI,
312   TILEGX_OPC_V2ADDSC,
313   TILEGX_OPC_V2ADIFFS,
314   TILEGX_OPC_V2AVGS,
315   TILEGX_OPC_V2CMPEQ,
316   TILEGX_OPC_V2CMPEQI,
317   TILEGX_OPC_V2CMPLES,
318   TILEGX_OPC_V2CMPLEU,
319   TILEGX_OPC_V2CMPLTS,
320   TILEGX_OPC_V2CMPLTSI,
321   TILEGX_OPC_V2CMPLTU,
322   TILEGX_OPC_V2CMPLTUI,
323   TILEGX_OPC_V2CMPNE,
324   TILEGX_OPC_V2DOTP,
325   TILEGX_OPC_V2DOTPA,
326   TILEGX_OPC_V2INT_H,
327   TILEGX_OPC_V2INT_L,
328   TILEGX_OPC_V2MAXS,
329   TILEGX_OPC_V2MAXSI,
330   TILEGX_OPC_V2MINS,
331   TILEGX_OPC_V2MINSI,
332   TILEGX_OPC_V2MNZ,
333   TILEGX_OPC_V2MULFSC,
334   TILEGX_OPC_V2MULS,
335   TILEGX_OPC_V2MULTS,
336   TILEGX_OPC_V2MZ,
337   TILEGX_OPC_V2PACKH,
338   TILEGX_OPC_V2PACKL,
339   TILEGX_OPC_V2PACKUC,
340   TILEGX_OPC_V2SADAS,
341   TILEGX_OPC_V2SADAU,
342   TILEGX_OPC_V2SADS,
343   TILEGX_OPC_V2SADU,
344   TILEGX_OPC_V2SHL,
345   TILEGX_OPC_V2SHLI,
346   TILEGX_OPC_V2SHLSC,
347   TILEGX_OPC_V2SHRS,
348   TILEGX_OPC_V2SHRSI,
349   TILEGX_OPC_V2SHRU,
350   TILEGX_OPC_V2SHRUI,
351   TILEGX_OPC_V2SUB,
352   TILEGX_OPC_V2SUBSC,
353   TILEGX_OPC_V4ADD,
354   TILEGX_OPC_V4ADDSC,
355   TILEGX_OPC_V4INT_H,
356   TILEGX_OPC_V4INT_L,
357   TILEGX_OPC_V4PACKSC,
358   TILEGX_OPC_V4SHL,
359   TILEGX_OPC_V4SHLSC,
360   TILEGX_OPC_V4SHRS,
361   TILEGX_OPC_V4SHRU,
362   TILEGX_OPC_V4SUB,
363   TILEGX_OPC_V4SUBSC,
364   TILEGX_OPC_WH64,
365   TILEGX_OPC_XOR,
366   TILEGX_OPC_XORI,
367   TILEGX_OPC_NONE
368 } tilegx_mnemonic;
369 
370 
371 
372 typedef enum
373 {
374   TILEGX_PIPELINE_X0,
375   TILEGX_PIPELINE_X1,
376   TILEGX_PIPELINE_Y0,
377   TILEGX_PIPELINE_Y1,
378   TILEGX_PIPELINE_Y2,
379 } tilegx_pipeline;
380 
381 #define tilegx_is_x_pipeline(p) ((int)(p) <= (int)TILEGX_PIPELINE_X1)
382 
383 typedef enum
384 {
385   TILEGX_OP_TYPE_REGISTER,
386   TILEGX_OP_TYPE_IMMEDIATE,
387   TILEGX_OP_TYPE_ADDRESS,
388   TILEGX_OP_TYPE_SPR
389 } tilegx_operand_type;
390 
391 struct tilegx_operand
392 {
393   /* Is this operand a register, immediate or address? */
394   tilegx_operand_type type;
395 
396   /* The default relocation type for this operand.  */
397   signed int default_reloc : 16;
398 
399   /* How many bits is this value? (used for range checking) */
400   unsigned int num_bits : 5;
401 
402   /* Is the value signed? (used for range checking) */
403   unsigned int is_signed : 1;
404 
405   /* Is this operand a source register? */
406   unsigned int is_src_reg : 1;
407 
408   /* Is this operand written? (i.e. is it a destination register) */
409   unsigned int is_dest_reg : 1;
410 
411   /* Is this operand PC-relative? */
412   unsigned int is_pc_relative : 1;
413 
414   /* By how many bits do we right shift the value before inserting? */
415   unsigned int rightshift : 2;
416 
417   /* Return the bits for this operand to be ORed into an existing bundle. */
418   tilegx_bundle_bits (*insert) (int op);
419 
420   /* Extract this operand and return it. */
421   unsigned int (*extract) (tilegx_bundle_bits bundle);
422 };
423 
424 
425 extern const struct tilegx_operand tilegx_operands[];
426 
427 /* One finite-state machine per pipe for rapid instruction decoding. */
428 extern const unsigned short * const
429 tilegx_bundle_decoder_fsms[TILEGX_NUM_PIPELINE_ENCODINGS];
430 
431 
432 struct tilegx_opcode
433 {
434   /* The opcode mnemonic, e.g. "add" */
435   const char *name;
436 
437   /* The enum value for this mnemonic. */
438   tilegx_mnemonic mnemonic;
439 
440   /* A bit mask of which of the five pipes this instruction
441      is compatible with:
442      X0  0x01
443      X1  0x02
444      Y0  0x04
445      Y1  0x08
446      Y2  0x10 */
447   unsigned char pipes;
448 
449   /* How many operands are there? */
450   unsigned char num_operands;
451 
452   /* Which register does this write implicitly, or TREG_ZERO if none? */
453   unsigned char implicitly_written_register;
454 
455   /* Can this be bundled with other instructions (almost always true). */
456   unsigned char can_bundle;
457 
458   /* The description of the operands. Each of these is an
459    * index into the tilegx_operands[] table. */
460   unsigned char operands[TILEGX_NUM_PIPELINE_ENCODINGS][TILEGX_MAX_OPERANDS];
461 
462 };
463 
464 extern const struct tilegx_opcode tilegx_opcodes[];
465 
466 /* Used for non-textual disassembly into structs. */
467 struct tilegx_decoded_instruction
468 {
469   const struct tilegx_opcode *opcode;
470   const struct tilegx_operand *operands[TILEGX_MAX_OPERANDS];
471   long long operand_values[TILEGX_MAX_OPERANDS];
472 };
473 
474 
475 /* Disassemble a bundle into a struct for machine processing. */
476 extern int parse_insn_tilegx(tilegx_bundle_bits bits,
477                              unsigned long long pc,
478                              struct tilegx_decoded_instruction
479                              decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE]);
480 
481 
482 
483 #endif /* opcode_tilegx_h */
484 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp