File: TriCore.td

package info (click to toggle)
capstone 5.0.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 58,188 kB
  • sloc: ansic: 96,086; cpp: 67,489; cs: 29,510; python: 25,829; pascal: 24,412; java: 15,582; ml: 14,473; makefile: 1,275; sh: 479; ruby: 386
file content (134 lines) | stat: -rw-r--r-- 6,987 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//===-- TriCore.td - Describe the TriCore Target Machine ---*- tablegen -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This is the top level entry point for the TriCore target.
//
//===----------------------------------------------------------------------===//

//===----------------------------------------------------------------------===//
// Target-independent interfaces which we are implementing
//===----------------------------------------------------------------------===//

include "llvm/Target/Target.td"

//===----------------------------------------------------------------------===//
// Descriptions
//===----------------------------------------------------------------------===//

// Specify whether target support specific TRICORE ISA variants.

def HasV110Ops   : SubtargetFeature<"v1.1", "HasV110Ops", "true",
								   "Support TriCore v1.1 instructions",
								   []>;
def HasV120Ops   : SubtargetFeature<"v1.2", "HasV120Ops", "true",
								   "Support TriCore v1.2 instructions",
								   []>;
def HasV130Ops   : SubtargetFeature<"v1.3", "HasV130Ops", "true",
								   "Support TriCore v1.3 instructions",
								   []>;
def HasV131Ops   : SubtargetFeature<"v1.3.1", "HasV131Ops", "true",
								   "Support TriCore v1.3.1 instructions",
								   []>;
def HasV160Ops   : SubtargetFeature<"v1.6", "HasV160Ops", "true",
								   "Support TriCore v1.6 instructions",
								   []>;
def HasV161Ops   : SubtargetFeature<"v1.6.1", "HasV161Ops", "true",
								   "Support TriCore v1.6.1 instructions",
								   []>;
def HasV162Ops   : SubtargetFeature<"v1.6.2", "HasV162Ops", "true",
								   "Support TriCore v1.6.2 instructions",
								   []>;

def HasV110     : Predicate<"HasV120Ops()">, AssemblerPredicate<(all_of HasV110Ops), "v1.1">;
def HasV120     : Predicate<"HasV120Ops()">, AssemblerPredicate<(all_of HasV120Ops), "v1.2">;
def HasV130     : Predicate<"HasV130Ops()">, AssemblerPredicate<(all_of HasV130Ops), "v1.3">;
def HasV131     : Predicate<"HasV131Ops()">, AssemblerPredicate<(all_of HasV131Ops), "v1.3.1">;
def HasV160     : Predicate<"HasV160Ops()">, AssemblerPredicate<(all_of HasV160Ops), "v1.6">;
def HasV161     : Predicate<"HasV161Ops()">, AssemblerPredicate<(all_of HasV161Ops), "v1.6.1">;
def HasV162     : Predicate<"HasV162Ops()">, AssemblerPredicate<(all_of HasV162Ops), "v1.6.2">;

def HasV120_UP  : Predicate<"HasV120Ops() || HasV130Ops() || HasV131Ops() || HasV160Ops() || HasV161Ops() || HasV162Ops()">
				, AssemblerPredicate<(any_of HasV120Ops, HasV130Ops, HasV131Ops, HasV160Ops, HasV161Ops, HasV162Ops), "v120up">;
def HasV130_UP  : Predicate<"HasV130Ops() || HasV131Ops() || HasV160Ops() || HasV161Ops() || HasV162Ops()">
				, AssemblerPredicate<(any_of HasV130Ops, HasV131Ops, HasV160Ops, HasV161Ops, HasV162Ops), "v130up">;
def HasV131_UP  : Predicate<"HasV131Ops() || HasV160Ops() || HasV161Ops() || HasV162Ops()">
				, AssemblerPredicate<(any_of HasV131Ops, HasV160Ops, HasV161Ops, HasV162Ops), "v131up">;
def HasV160_UP  : Predicate<"HasV160Ops() || HasV161Ops() || HasV162Ops()">
				, AssemblerPredicate<(any_of HasV160Ops, HasV161Ops, HasV162Ops), "v160up">;
def HasV161_UP  : Predicate<"HasV161Ops() || HasV162Ops()">
				, AssemblerPredicate<(any_of HasV161Ops, HasV162Ops), "v161up">;
def HasV162_UP  : Predicate<"HasV162Ops()">
				, AssemblerPredicate<(any_of HasV162Ops), "v162up">;

def HasV120_DN : Predicate<"HasV120Ops() || HasV110Ops()">,
				AssemblerPredicate<(any_of HasV120Ops, HasV110Ops), "v120dn">;
def HasV130_DN : Predicate<"HasV130Ops() || HasV120Ops() || HasV110Ops()">,
				AssemblerPredicate<(any_of HasV130Ops, HasV120Ops, HasV110Ops), "v130dn">;
def HasV131_DN : Predicate<"HasV131Ops() || HasV130Ops() || HasV120Ops() || HasV110Ops()">,
				AssemblerPredicate<(any_of HasV131Ops, HasV130Ops, HasV120Ops, HasV110Ops), "v131dn">;
def HasV160_DN : Predicate<"HasV160Ops() || HasV131Ops() || HasV130Ops() || HasV120Ops() || HasV110Ops()">,
				AssemblerPredicate<(any_of HasV160Ops, HasV131Ops, HasV130Ops, HasV120Ops, HasV110Ops), "v160dn">;
def HasV161_DN : Predicate<"HasV161Ops() || HasV160Ops() || HasV131Ops() || HasV130Ops() || HasV120Ops() || HasV110Ops()">,
				AssemblerPredicate<(any_of HasV161Ops, HasV160Ops, HasV131Ops, HasV130Ops, HasV120Ops, HasV110Ops), "v161dn">;
def HasV162_DN : Predicate<"HasV162Ops() || HasV161Ops() || HasV160Ops() || HasV131Ops() || HasV130Ops() || HasV120Ops() || HasV110Ops()">,
				AssemblerPredicate<(any_of HasV162Ops, HasV161Ops, HasV160Ops, HasV131Ops, HasV130Ops, HasV120Ops, HasV110Ops), "v162dn">;


class Architecture<string fname, string aname, list<SubtargetFeature> features = []>
  : SubtargetFeature<fname, "TriCoreArch", aname,
					 !strconcat(aname, " architecture"), features>;

class ProcNoItin<string Name, list<SubtargetFeature> Features>
  : Processor<Name, NoItineraries, Features>;


def TRICORE_V1_1    : Architecture<"tricore-v1.1",    "TRICOREv110", [HasV110Ops]>;
def TRICORE_V1_2    : Architecture<"tricore-V1.2",    "TRICOREv120", [HasV120Ops]>;
def TRICORE_V1_3    : Architecture<"tricore-V1.3",    "TRICOREv130", [HasV130Ops]>;
def TRICORE_V1_3_1  : Architecture<"tricore-V1.3.1",  "TRICOREv131", [HasV131Ops]>;
def TRICORE_V1_6    : Architecture<"tricore-V1.6",    "TRICOREv160", [HasV160Ops]>;
def TRICORE_V1_6_1  : Architecture<"tricore-V1.6.1",  "TRICOREv161", [HasV161Ops]>;
def TRICORE_V1_6_2  : Architecture<"tricore-V1.6.2",  "TRICOREv162", [HasV162Ops]>;
def TRICORE_PCP     : Architecture<"tricore-PCP",     "TRICOREpcp">;
def TRICORE_PCP2    : Architecture<"tricore-PCP2",    "TRICOREpcp2">;

def TRICORE_RIDER_A : Architecture<"tricore-rider-a", "TRICOREv110", [TRICORE_V1_1]>;


include "TriCoreRegisterInfo.td"
include "TriCoreInstrInfo.td"
include "TriCoreCallingConv.td"

//===----------------------------------------------------------------------===//
// TriCore processors supported.
//===----------------------------------------------------------------------===//

def : ProcNoItin<"tc1796",  [TRICORE_V1_3]>;
def : ProcNoItin<"tc1797",  [TRICORE_V1_3_1]>;
def : ProcNoItin<"tc27x",   [TRICORE_V1_6_1]>;
def : ProcNoItin<"tc161",   [TRICORE_V1_6_1]>;
def : ProcNoItin<"tc162",   [TRICORE_V1_6_2]>;
def : ProcNoItin<"tc16",    [TRICORE_V1_6]>;
def : ProcNoItin<"tc131",   [TRICORE_V1_3_1]>;
def : ProcNoItin<"tc13",    [TRICORE_V1_3]>;

def TriCoreAsmWriter : AsmWriter {
  int PassSubtarget = 1;
}

def TriCoreInstrInfo : InstrInfo;

//===----------------------------------------------------------------------===//
// Declare the target which we are implementing
//===----------------------------------------------------------------------===//

def TriCore : Target {
  let InstructionSet = TriCoreInstrInfo;
  let AssemblyWriters = [TriCoreAsmWriter];
}