1 //===-- Sparc.td - Describe the Sparc Target Machine -------*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
13 //===----------------------------------------------------------------------===//
14 // Target-independent interfaces which we are implementing
15 //===----------------------------------------------------------------------===//
17 include "llvm/Target/Target.td"
19 //===----------------------------------------------------------------------===//
20 // SPARC Subtarget features.
24 : SubtargetFeature<"soft-mul-div", "UseSoftMulDiv", "true",
25 "Use software emulation for integer multiply and divide">;
28 : SubtargetFeature<"v9", "IsV9", "true",
29 "Enable SPARC-V9 instructions">;
30 def FeatureV8Deprecated
31 : SubtargetFeature<"deprecated-v8", "V8DeprecatedInsts", "true",
32 "Enable deprecated V8 instructions in V9 mode">;
34 : SubtargetFeature<"vis", "IsVIS", "true",
35 "Enable UltraSPARC Visual Instruction Set extensions">;
37 : SubtargetFeature<"vis2", "IsVIS2", "true",
38 "Enable Visual Instruction Set extensions II">;
40 : SubtargetFeature<"vis3", "IsVIS3", "true",
41 "Enable Visual Instruction Set extensions III">;
43 : SubtargetFeature<"leon", "IsLeon", "true",
44 "Enable LEON extensions">;
47 : SubtargetFeature<"hard-quad-float", "HasHardQuad", "true",
48 "Enable quad-word floating point instructions">;
50 def UsePopc : SubtargetFeature<"popc", "UsePopc", "true",
51 "Use the popc (population count) instruction">;
53 def FeatureSoftFloat : SubtargetFeature<"soft-float", "UseSoftFloat", "true",
54 "Use software emulation for floating point">;
56 //==== Features added predmoninantly for LEON subtarget support
57 include "LeonFeatures.td"
59 //===----------------------------------------------------------------------===//
60 // Register File, Calling Conv, Instruction Descriptions
61 //===----------------------------------------------------------------------===//
63 include "SparcRegisterInfo.td"
64 include "SparcCallingConv.td"
65 include "SparcSchedule.td"
66 include "SparcInstrInfo.td"
68 def SparcInstrInfo : InstrInfo;
70 def SparcAsmParser : AsmParser {
71 bit ShouldEmitMatchRegisterName = 0;
74 //===----------------------------------------------------------------------===//
75 // SPARC processors supported.
76 //===----------------------------------------------------------------------===//
78 class Proc<string Name, list<SubtargetFeature> Features>
79 : Processor<Name, NoItineraries, Features>;
81 def : Proc<"generic", []>;
82 def : Proc<"v7", [FeatureSoftMulDiv]>;
84 def : Proc<"supersparc", []>;
85 def : Proc<"sparclite", []>;
86 def : Proc<"f934", []>;
87 def : Proc<"hypersparc", []>;
88 def : Proc<"sparclite86x", []>;
89 def : Proc<"sparclet", []>;
90 def : Proc<"tsc701", []>;
91 def : Proc<"myriad2", [FeatureLeon, LeonCASA]>;
92 def : Proc<"myriad2.1", [FeatureLeon, LeonCASA]>;
93 def : Proc<"myriad2.2", [FeatureLeon, LeonCASA]>;
94 def : Proc<"ma2100", [FeatureLeon, LeonCASA]>;
95 def : Proc<"ma2150", [FeatureLeon, LeonCASA]>;
96 def : Proc<"ma2450", [FeatureLeon, LeonCASA]>;
97 def : Proc<"v9", [FeatureV9]>;
98 def : Proc<"ultrasparc", [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
99 def : Proc<"ultrasparc3", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
101 def : Proc<"niagara", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
103 def : Proc<"niagara2", [FeatureV9, FeatureV8Deprecated, UsePopc,
104 FeatureVIS, FeatureVIS2]>;
105 def : Proc<"niagara3", [FeatureV9, FeatureV8Deprecated, UsePopc,
106 FeatureVIS, FeatureVIS2]>;
107 def : Proc<"niagara4", [FeatureV9, FeatureV8Deprecated, UsePopc,
108 FeatureVIS, FeatureVIS2, FeatureVIS3]>;
111 def : Processor<"leon2", LEON2Itineraries,
114 // LEON 2 FT (AT697E)
115 // TO DO: Place-holder: Processor specific features will be added *very* soon here.
116 def : Processor<"at697e", LEON2Itineraries,
117 [FeatureLeon, ReplaceSDIV, InsertNOPLoad]>;
119 // LEON 2 FT (AT697F)
120 // TO DO: Place-holder: Processor specific features will be added *very* soon here.
121 def : Processor<"at697f", LEON2Itineraries,
122 [FeatureLeon, InsertNOPLoad]>;
126 def : Processor<"leon3", LEON3Itineraries,
127 [FeatureLeon, UMACSMACSupport]>;
129 // LEON 3 FT (UT699). Provides features for the UT699 processor
130 // - covers all the erratum fixes for LEON3, but does not support the CASA instruction.
131 def : Processor<"ut699", LEON3Itineraries,
132 [FeatureLeon, InsertNOPLoad, FixFSMULD, ReplaceFMULS, FixAllFDIVSQRT]>;
134 // LEON3 FT (GR712RC). Provides features for the GR712RC processor.
135 // - covers all the erratum fixed for LEON3 and support for the CASA instruction.
136 def : Processor<"gr712rc", LEON3Itineraries,
137 [FeatureLeon, LeonCASA]>;
140 def : Processor<"leon4", LEON4Itineraries,
141 [FeatureLeon, UMACSMACSupport, LeonCASA]>;
144 // TO DO: Place-holder: Processor specific features will be added *very* soon here.
145 def : Processor<"gr740", LEON4Itineraries,
146 [FeatureLeon, UMACSMACSupport, LeonCASA]>;
148 //===----------------------------------------------------------------------===//
149 // Declare the target which we are implementing
150 //===----------------------------------------------------------------------===//
152 def SparcAsmWriter : AsmWriter {
153 string AsmWriterClassName = "InstPrinter";
154 int PassSubtarget = 1;
159 // Pull in Instruction Info:
160 let InstructionSet = SparcInstrInfo;
161 let AssemblyParsers = [SparcAsmParser];
162 let AssemblyWriters = [SparcAsmWriter];