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
20namespace llvm {
21
22/// HexagonII - This namespace holds all of the target specific flags that
23/// instruction info tracks.
24///
25namespace 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
71