Support for Hexagon architectural feature, new value jump.
[oota-llvm.git] / lib / Target / Hexagon / Hexagon.td
1 //===-- Hexagon.td - Describe the Hexagon Target Machine --*- tablegen -*--===//
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 is the top level entry point for the Hexagon target.
11 //
12 //===----------------------------------------------------------------------===//
13
14 //===----------------------------------------------------------------------===//
15 // Target-independent interfaces which we are implementing
16 //===----------------------------------------------------------------------===//
17
18 include "llvm/Target/Target.td"
19
20 //===----------------------------------------------------------------------===//
21 // Hexagon Subtarget features.
22 //===----------------------------------------------------------------------===//
23
24 // Hexagon Archtectures
25 def ArchV2       : SubtargetFeature<"v2", "HexagonArchVersion", "V2",
26                                     "Hexagon v2">;
27 def ArchV3       : SubtargetFeature<"v3", "HexagonArchVersion", "V3",
28                                     "Hexagon v3">;
29 def ArchV4       : SubtargetFeature<"v4", "HexagonArchVersion", "V4",
30                                     "Hexagon v4">;
31
32 //===----------------------------------------------------------------------===//
33 // Register File, Calling Conv, Instruction Descriptions
34 //===----------------------------------------------------------------------===//
35 include "HexagonSchedule.td"
36 include "HexagonRegisterInfo.td"
37 include "HexagonCallingConv.td"
38 include "HexagonInstrInfo.td"
39 include "HexagonIntrinsics.td"
40 include "HexagonIntrinsicsDerived.td"
41
42 def HexagonInstrInfo : InstrInfo;
43
44 //===----------------------------------------------------------------------===//
45 // Hexagon processors supported.
46 //===----------------------------------------------------------------------===//
47
48 class Proc<string Name, ProcessorItineraries Itin,
49            list<SubtargetFeature> Features>
50  : Processor<Name, Itin, Features>;
51
52 def : Proc<"hexagonv2", HexagonItineraries,   [ArchV2]>;
53 def : Proc<"hexagonv3", HexagonItineraries,   [ArchV2, ArchV3]>;
54 def : Proc<"hexagonv4", HexagonItinerariesV4, [ArchV2, ArchV3, ArchV4]>;
55
56 // Hexagon Uses the MC printer for assembler output, so make sure the TableGen
57 // AsmWriter bits get associated with the correct class.
58 def HexagonAsmWriter : AsmWriter {
59   string AsmWriterClassName  = "InstPrinter";
60   bit isMCAsmWriter = 1;
61 }
62
63 //===----------------------------------------------------------------------===//
64 // Declare the target which we are implementing
65 //===----------------------------------------------------------------------===//
66
67 def Hexagon : Target {
68   // Pull in Instruction Info:
69   let InstructionSet = HexagonInstrInfo;
70
71   let AssemblyWriters = [HexagonAsmWriter];
72 }