Support for Hexagon VLIW Packetizer.
[oota-llvm.git] / lib / Target / Hexagon / MCTargetDesc / HexagonBaseInfo.h
1 //===-- HexagonBaseInfo.h - Top level definitions for Hexagon --*- C++ -*--===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains small standalone helper functions and enum definitions for
11 // the Hexagon target useful for the compiler back-end and the MC libraries.
12 // As such, it deliberately does not include references to LLVM core
13 // code gen types, passes, etc..
14 //
15 //===----------------------------------------------------------------------===//
16
17 #ifndef HEXAGONBASEINFO_H
18 #define HEXAGONBASEINFO_H
19
20 namespace llvm {
21
22 /// HexagonII - This namespace holds all of the target specific flags that
23 /// instruction info tracks.
24 ///
25 namespace HexagonII {
26   // *** The code below must match HexagonInstrFormat*.td *** //
27
28   // Insn types.
29   // *** Must match HexagonInstrFormat*.td ***
30   enum Type {
31     TypePSEUDO = 0,
32     TypeALU32  = 1,
33     TypeCR     = 2,
34     TypeJR     = 3,
35     TypeJ      = 4,
36     TypeLD     = 5,
37     TypeST     = 6,
38     TypeSYSTEM = 7,
39     TypeXTYPE  = 8,
40     TypeMEMOP  = 9,
41     TypeNV     = 10,
42     TypePREFIX = 30, // Such as extenders.
43     TypeMARKER = 31  // Such as end of a HW loop.
44   };
45
46
47
48   // MCInstrDesc TSFlags
49   // *** Must match HexagonInstrFormat*.td ***
50   enum {
51     // This 5-bit field describes the insn type.
52     TypePos  = 0,
53     TypeMask = 0x1f,
54
55     // Solo instructions.
56     SoloPos  = 5,
57     SoloMask = 0x1,
58
59     // Predicated instructions.
60     PredicatedPos  = 6,
61     PredicatedMask = 0x1
62   };
63
64   // *** The code above must match HexagonInstrFormat*.td *** //
65
66 } // End namespace HexagonII.
67
68 } // End namespace llvm.
69
70 #endif