xref: /aosp_15_r20/external/llvm/lib/Target/Sparc/Sparc.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- Sparc.td - Describe the Sparc Target Machine -------*- tablegen -*-===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker//
11*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
14*9880d681SAndroid Build Coastguard Worker// Target-independent interfaces which we are implementing
15*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerinclude "llvm/Target/Target.td"
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
20*9880d681SAndroid Build Coastguard Worker// SPARC Subtarget features.
21*9880d681SAndroid Build Coastguard Worker//
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdef FeatureV9
24*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"v9", "IsV9", "true", "Enable SPARC-V9 instructions">;
25*9880d681SAndroid Build Coastguard Workerdef FeatureV8Deprecated
26*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"deprecated-v8", "V8DeprecatedInsts", "true",
27*9880d681SAndroid Build Coastguard Worker                       "Enable deprecated V8 instructions in V9 mode">;
28*9880d681SAndroid Build Coastguard Workerdef FeatureVIS
29*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"vis", "IsVIS", "true",
30*9880d681SAndroid Build Coastguard Worker                       "Enable UltraSPARC Visual Instruction Set extensions">;
31*9880d681SAndroid Build Coastguard Workerdef FeatureVIS2
32*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"vis2", "IsVIS2", "true",
33*9880d681SAndroid Build Coastguard Worker                       "Enable Visual Instruction Set extensions II">;
34*9880d681SAndroid Build Coastguard Workerdef FeatureVIS3
35*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"vis3", "IsVIS3", "true",
36*9880d681SAndroid Build Coastguard Worker                       "Enable Visual Instruction Set extensions III">;
37*9880d681SAndroid Build Coastguard Workerdef FeatureLeon
38*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"leon", "IsLeon", "true", "Enable LEON extensions">;
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerdef FeatureHardQuad
41*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"hard-quad-float", "HasHardQuad", "true",
42*9880d681SAndroid Build Coastguard Worker                       "Enable quad-word floating point instructions">;
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdef UsePopc : SubtargetFeature<"popc", "UsePopc", "true",
45*9880d681SAndroid Build Coastguard Worker                               "Use the popc (population count) instruction">;
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Workerdef FeatureSoftFloat
48*9880d681SAndroid Build Coastguard Worker    : SubtargetFeature<"soft-float", "UseSoftFloat", "true",
49*9880d681SAndroid Build Coastguard Worker                       "Use software emulation for floating point">;
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker//==== Features added predmoninantly for LEON subtarget support
52*9880d681SAndroid Build Coastguard Workerinclude "LeonFeatures.td"
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
55*9880d681SAndroid Build Coastguard Worker// Register File, Calling Conv, Instruction Descriptions
56*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerinclude "SparcRegisterInfo.td"
59*9880d681SAndroid Build Coastguard Workerinclude "SparcCallingConv.td"
60*9880d681SAndroid Build Coastguard Workerinclude "SparcSchedule.td"
61*9880d681SAndroid Build Coastguard Workerinclude "SparcInstrInfo.td"
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdef SparcInstrInfo : InstrInfo;
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerdef SparcAsmParser : AsmParser { bit ShouldEmitMatchRegisterName = 0; }
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
68*9880d681SAndroid Build Coastguard Worker// SPARC processors supported.
69*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerclass Proc<string Name, list<SubtargetFeature> Features>
72*9880d681SAndroid Build Coastguard Worker    : Processor<Name, NoItineraries, Features>;
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdef : Proc<"generic", []>;
75*9880d681SAndroid Build Coastguard Workerdef : Proc<"v7", []>;
76*9880d681SAndroid Build Coastguard Workerdef : Proc<"v8", []>;
77*9880d681SAndroid Build Coastguard Workerdef : Proc<"supersparc", []>;
78*9880d681SAndroid Build Coastguard Workerdef : Proc<"sparclite", []>;
79*9880d681SAndroid Build Coastguard Workerdef : Proc<"f934", []>;
80*9880d681SAndroid Build Coastguard Workerdef : Proc<"hypersparc", []>;
81*9880d681SAndroid Build Coastguard Workerdef : Proc<"sparclite86x", []>;
82*9880d681SAndroid Build Coastguard Workerdef : Proc<"sparclet", []>;
83*9880d681SAndroid Build Coastguard Workerdef : Proc<"tsc701", []>;
84*9880d681SAndroid Build Coastguard Workerdef : Proc<"myriad2", []>;
85*9880d681SAndroid Build Coastguard Workerdef : Proc<"myriad2.1", []>;
86*9880d681SAndroid Build Coastguard Workerdef : Proc<"myriad2.2", []>;
87*9880d681SAndroid Build Coastguard Workerdef : Proc<"v9", [ FeatureV9 ]>;
88*9880d681SAndroid Build Coastguard Workerdef : Proc<"ultrasparc", [ FeatureV9, FeatureV8Deprecated, FeatureVIS ]>;
89*9880d681SAndroid Build Coastguard Workerdef : Proc<"ultrasparc3",
90*9880d681SAndroid Build Coastguard Worker           [ FeatureV9, FeatureV8Deprecated, FeatureVIS, FeatureVIS2 ]>;
91*9880d681SAndroid Build Coastguard Workerdef : Proc<"niagara",
92*9880d681SAndroid Build Coastguard Worker           [ FeatureV9, FeatureV8Deprecated, FeatureVIS, FeatureVIS2 ]>;
93*9880d681SAndroid Build Coastguard Workerdef : Proc<"niagara2", [
94*9880d681SAndroid Build Coastguard Worker  FeatureV9, FeatureV8Deprecated, UsePopc, FeatureVIS, FeatureVIS2
95*9880d681SAndroid Build Coastguard Worker]>;
96*9880d681SAndroid Build Coastguard Workerdef : Proc<"niagara3", [
97*9880d681SAndroid Build Coastguard Worker  FeatureV9, FeatureV8Deprecated, UsePopc, FeatureVIS, FeatureVIS2
98*9880d681SAndroid Build Coastguard Worker]>;
99*9880d681SAndroid Build Coastguard Workerdef : Proc<"niagara4", [
100*9880d681SAndroid Build Coastguard Worker  FeatureV9, FeatureV8Deprecated, UsePopc, FeatureVIS, FeatureVIS2, FeatureVIS3
101*9880d681SAndroid Build Coastguard Worker]>;
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker// LEON 2 FT generic
104*9880d681SAndroid Build Coastguard Workerdef : Processor<"leon2", LEON2Itineraries, [ FeatureLeon ]>;
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker// LEON 2 FT (AT697E)
107*9880d681SAndroid Build Coastguard Worker// AT697E: Provides full coverage of AT697E - covers all the erratum fixes for
108*9880d681SAndroid Build Coastguard Worker// LEON2 AT697E
109*9880d681SAndroid Build Coastguard Workerdef : Processor<"at697e", LEON2Itineraries, [
110*9880d681SAndroid Build Coastguard Worker  FeatureLeon, ReplaceSDIV, FixCALL, IgnoreZeroFlag, InsertNOPDoublePrecision
111*9880d681SAndroid Build Coastguard Worker]>;
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker// LEON 2 FT (AT697F)
114*9880d681SAndroid Build Coastguard Worker// AT697F: Provides full coverage of AT697F - covers all the erratum fixes for
115*9880d681SAndroid Build Coastguard Worker// LEON2 AT697F
116*9880d681SAndroid Build Coastguard Workerdef : Processor<"at697f", LEON2Itineraries,
117*9880d681SAndroid Build Coastguard Worker                [ FeatureLeon, InsertNOPDoublePrecision ]>;
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker// LEON 3 FT generic
120*9880d681SAndroid Build Coastguard Workerdef : Processor<"leon3", LEON3Itineraries, [ FeatureLeon, UMACSMACSupport ]>;
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Worker// LEON 3 FT (UT699). Provides features for the UT699 processor
123*9880d681SAndroid Build Coastguard Worker// - covers all the erratum fixes for LEON3, but does not support the CASA
124*9880d681SAndroid Build Coastguard Worker// instruction.
125*9880d681SAndroid Build Coastguard Workerdef : Processor<"ut699", LEON3Itineraries, [
126*9880d681SAndroid Build Coastguard Worker  FeatureLeon, FixFSMULD, ReplaceFMULS, PreventRoundChange,
127*9880d681SAndroid Build Coastguard Worker  FixAllFDIVSQRT, InsertNOPLoad, FlushCacheLineSWAP, InsertNOPsLoadStore
128*9880d681SAndroid Build Coastguard Worker]>;
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker// LEON3 FT (GR712RC). Provides features for the GR712RC processor.
131*9880d681SAndroid Build Coastguard Worker// - covers all the erratum fixed for LEON3 and support for the CASA
132*9880d681SAndroid Build Coastguard Worker// instruction.
133*9880d681SAndroid Build Coastguard Workerdef : Processor<"gr712rc", LEON3Itineraries,
134*9880d681SAndroid Build Coastguard Worker                [ FeatureLeon, LeonCASA ]>;
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker// LEON 4 FT generic
137*9880d681SAndroid Build Coastguard Workerdef : Processor<"leon4", LEON4Itineraries,
138*9880d681SAndroid Build Coastguard Worker                [ FeatureLeon, LeonCASA ]>;
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker// GR740: Provides full coverage of GR740 - covers all the erratum fixes for
141*9880d681SAndroid Build Coastguard Worker// LEON3 + support to CASA + LEON 4 instruction timings
142*9880d681SAndroid Build Coastguard Workerdef : Processor<"gr740", LEON4Itineraries,
143*9880d681SAndroid Build Coastguard Worker                [ FeatureLeon, LeonCASA ]> {}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
146*9880d681SAndroid Build Coastguard Worker// Declare the target which we are implementing
147*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdef SparcAsmWriter : AsmWriter {
150*9880d681SAndroid Build Coastguard Worker  string AsmWriterClassName = "InstPrinter";
151*9880d681SAndroid Build Coastguard Worker  int PassSubtarget = 1;
152*9880d681SAndroid Build Coastguard Worker  int Variant = 0;
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Workerdef Sparc : Target {
156*9880d681SAndroid Build Coastguard Worker  // Pull in Instruction Info:
157*9880d681SAndroid Build Coastguard Worker  let InstructionSet = SparcInstrInfo;
158*9880d681SAndroid Build Coastguard Worker  let AssemblyParsers = [ SparcAsmParser ];
159*9880d681SAndroid Build Coastguard Worker  let AssemblyWriters = [ SparcAsmWriter ];
160*9880d681SAndroid Build Coastguard Worker}
161