blob: 9e0a297c88123dad43700c898e59502e2567c25a [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//===-- Sparc.td - Describe the Sparc Target Machine -------*- tablegen -*-===//
2//
Chris Lattner158e1f52006-02-05 05:50:24 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jia Liub22310f2012-02-18 12:03:15 +00007//
Chris Lattner158e1f52006-02-05 05:50:24 +00008//===----------------------------------------------------------------------===//
9//
10//
11//===----------------------------------------------------------------------===//
12
13//===----------------------------------------------------------------------===//
14// Target-independent interfaces which we are implementing
15//===----------------------------------------------------------------------===//
16
Evan Cheng977e7be2008-11-24 07:34:46 +000017include "llvm/Target/Target.td"
Chris Lattner158e1f52006-02-05 05:50:24 +000018
19//===----------------------------------------------------------------------===//
20// SPARC Subtarget features.
21//
Venkatraman Govindarajua54533ed2013-06-04 18:33:25 +000022
James Y Knightdda87ca2017-07-18 19:08:38 +000023def FeatureSoftMulDiv
24 : SubtargetFeature<"soft-mul-div", "UseSoftMulDiv", "true",
25 "Use software emulation for integer multiply and divide">;
26
James Y Knightbb76d482017-07-20 20:09:11 +000027def FeatureNoFSMULD
28 : SubtargetFeature<"no-fsmuld", "HasNoFSMULD", "true",
29 "Disable the fsmuld instruction.">;
30def FeatureNoFMULS
31 : SubtargetFeature<"no-fmuls", "HasNoFMULS", "true",
32 "Disable the fmuls instruction.">;
33
Chris Lattner158e1f52006-02-05 05:50:24 +000034def FeatureV9
James Y Knight2cc9da92016-08-12 14:48:09 +000035 : SubtargetFeature<"v9", "IsV9", "true",
36 "Enable SPARC-V9 instructions">;
Chris Lattner158e1f52006-02-05 05:50:24 +000037def FeatureV8Deprecated
James Y Knight2cc9da92016-08-12 14:48:09 +000038 : SubtargetFeature<"deprecated-v8", "V8DeprecatedInsts", "true",
39 "Enable deprecated V8 instructions in V9 mode">;
Chris Lattner158e1f52006-02-05 05:50:24 +000040def FeatureVIS
James Y Knight2cc9da92016-08-12 14:48:09 +000041 : SubtargetFeature<"vis", "IsVIS", "true",
42 "Enable UltraSPARC Visual Instruction Set extensions">;
Venkatraman Govindarajuf9a202a2014-03-02 19:31:21 +000043def FeatureVIS2
James Y Knight2cc9da92016-08-12 14:48:09 +000044 : SubtargetFeature<"vis2", "IsVIS2", "true",
45 "Enable Visual Instruction Set extensions II">;
Venkatraman Govindarajuf9a202a2014-03-02 19:31:21 +000046def FeatureVIS3
James Y Knight2cc9da92016-08-12 14:48:09 +000047 : SubtargetFeature<"vis3", "IsVIS3", "true",
48 "Enable Visual Instruction Set extensions III">;
Chris Dewhurst60197022016-04-22 08:17:17 +000049def FeatureLeon
James Y Knight2cc9da92016-08-12 14:48:09 +000050 : SubtargetFeature<"leon", "IsLeon", "true",
51 "Enable LEON extensions">;
Chris Lattner158e1f52006-02-05 05:50:24 +000052
Venkatraman Govindaraju35e0c382013-08-25 18:30:06 +000053def FeatureHardQuad
James Y Knight2cc9da92016-08-12 14:48:09 +000054 : SubtargetFeature<"hard-quad-float", "HasHardQuad", "true",
55 "Enable quad-word floating point instructions">;
Venkatraman Govindaraju35e0c382013-08-25 18:30:06 +000056
Jakob Stoklund Olesenead3b3d2014-01-26 06:09:59 +000057def UsePopc : SubtargetFeature<"popc", "UsePopc", "true",
58 "Use the popc (population count) instruction">;
59
James Y Knight2cc9da92016-08-12 14:48:09 +000060def FeatureSoftFloat : SubtargetFeature<"soft-float", "UseSoftFloat", "true",
James Y Knightbb76d482017-07-20 20:09:11 +000061 "Use software emulation for floating point">;
Chris Dewhurst68388a02016-05-18 09:14:13 +000062
James Y Knightbb76d482017-07-20 20:09:11 +000063//==== Features added predmoninantly for LEON subtarget support
Chris Dewhurste3b86452016-05-09 11:55:15 +000064include "LeonFeatures.td"
65
Chris Lattner158e1f52006-02-05 05:50:24 +000066//===----------------------------------------------------------------------===//
Chris Lattner49b269d2008-03-17 05:41:48 +000067// Register File, Calling Conv, Instruction Descriptions
Chris Lattner158e1f52006-02-05 05:50:24 +000068//===----------------------------------------------------------------------===//
69
70include "SparcRegisterInfo.td"
Chris Lattner49b269d2008-03-17 05:41:48 +000071include "SparcCallingConv.td"
Chris Dewhurst60197022016-04-22 08:17:17 +000072include "SparcSchedule.td"
Chris Lattner158e1f52006-02-05 05:50:24 +000073include "SparcInstrInfo.td"
74
Jakob Stoklund Olesenb93331f2010-04-05 03:10:20 +000075def SparcInstrInfo : InstrInfo;
Chris Lattner158e1f52006-02-05 05:50:24 +000076
James Y Knight2cc9da92016-08-12 14:48:09 +000077def SparcAsmParser : AsmParser {
78 bit ShouldEmitMatchRegisterName = 0;
79}
Venkatraman Govindarajuc2dee7d2014-01-04 11:30:13 +000080
Chris Lattner158e1f52006-02-05 05:50:24 +000081//===----------------------------------------------------------------------===//
82// SPARC processors supported.
83//===----------------------------------------------------------------------===//
84
85class Proc<string Name, list<SubtargetFeature> Features>
James Y Knight2cc9da92016-08-12 14:48:09 +000086 : Processor<Name, NoItineraries, Features>;
Chris Lattner158e1f52006-02-05 05:50:24 +000087
James Y Knight2cc9da92016-08-12 14:48:09 +000088def : Proc<"generic", []>;
James Y Knightbb76d482017-07-20 20:09:11 +000089def : Proc<"v7", [FeatureSoftMulDiv, FeatureNoFSMULD]>;
James Y Knight2cc9da92016-08-12 14:48:09 +000090def : Proc<"v8", []>;
91def : Proc<"supersparc", []>;
92def : Proc<"sparclite", []>;
93def : Proc<"f934", []>;
94def : Proc<"hypersparc", []>;
95def : Proc<"sparclite86x", []>;
96def : Proc<"sparclet", []>;
97def : Proc<"tsc701", []>;
Douglas Katzman8ea02f42016-09-13 17:51:41 +000098def : Proc<"myriad2", [FeatureLeon, LeonCASA]>;
99def : Proc<"myriad2.1", [FeatureLeon, LeonCASA]>;
100def : Proc<"myriad2.2", [FeatureLeon, LeonCASA]>;
Walter Lee35b09cb2017-10-02 18:50:48 +0000101def : Proc<"myriad2.3", [FeatureLeon, LeonCASA]>;
Douglas Katzman8ea02f42016-09-13 17:51:41 +0000102def : Proc<"ma2100", [FeatureLeon, LeonCASA]>;
103def : Proc<"ma2150", [FeatureLeon, LeonCASA]>;
Walter Lee35b09cb2017-10-02 18:50:48 +0000104def : Proc<"ma2155", [FeatureLeon, LeonCASA]>;
Douglas Katzman8ea02f42016-09-13 17:51:41 +0000105def : Proc<"ma2450", [FeatureLeon, LeonCASA]>;
Walter Lee35b09cb2017-10-02 18:50:48 +0000106def : Proc<"ma2455", [FeatureLeon, LeonCASA]>;
107def : Proc<"ma2x5x", [FeatureLeon, LeonCASA]>;
108def : Proc<"ma2080", [FeatureLeon, LeonCASA]>;
109def : Proc<"ma2085", [FeatureLeon, LeonCASA]>;
110def : Proc<"ma2480", [FeatureLeon, LeonCASA]>;
111def : Proc<"ma2485", [FeatureLeon, LeonCASA]>;
112def : Proc<"ma2x8x", [FeatureLeon, LeonCASA]>;
James Y Knight2cc9da92016-08-12 14:48:09 +0000113def : Proc<"v9", [FeatureV9]>;
114def : Proc<"ultrasparc", [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
115def : Proc<"ultrasparc3", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
116 FeatureVIS2]>;
117def : Proc<"niagara", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
118 FeatureVIS2]>;
119def : Proc<"niagara2", [FeatureV9, FeatureV8Deprecated, UsePopc,
120 FeatureVIS, FeatureVIS2]>;
121def : Proc<"niagara3", [FeatureV9, FeatureV8Deprecated, UsePopc,
122 FeatureVIS, FeatureVIS2]>;
123def : Proc<"niagara4", [FeatureV9, FeatureV8Deprecated, UsePopc,
124 FeatureVIS, FeatureVIS2, FeatureVIS3]>;
Chris Lattner158e1f52006-02-05 05:50:24 +0000125
Chris Dewhurst60197022016-04-22 08:17:17 +0000126// LEON 2 FT generic
James Y Knight2cc9da92016-08-12 14:48:09 +0000127def : Processor<"leon2", LEON2Itineraries,
128 [FeatureLeon]>;
Chris Dewhurst60197022016-04-22 08:17:17 +0000129
130// LEON 2 FT (AT697E)
James Y Knight2cc9da92016-08-12 14:48:09 +0000131// TO DO: Place-holder: Processor specific features will be added *very* soon here.
132def : Processor<"at697e", LEON2Itineraries,
Chris Dewhurst85013122016-10-10 08:53:06 +0000133 [FeatureLeon, ReplaceSDIV, InsertNOPLoad]>;
Chris Dewhurst60197022016-04-22 08:17:17 +0000134
135// LEON 2 FT (AT697F)
James Y Knight2cc9da92016-08-12 14:48:09 +0000136// TO DO: Place-holder: Processor specific features will be added *very* soon here.
Chris Dewhurst60197022016-04-22 08:17:17 +0000137def : Processor<"at697f", LEON2Itineraries,
James Y Knight2cc9da92016-08-12 14:48:09 +0000138 [FeatureLeon, InsertNOPLoad]>;
139
Chris Dewhurst60197022016-04-22 08:17:17 +0000140
141// LEON 3 FT generic
James Y Knight2cc9da92016-08-12 14:48:09 +0000142def : Processor<"leon3", LEON3Itineraries,
143 [FeatureLeon, UMACSMACSupport]>;
Chris Dewhurst60197022016-04-22 08:17:17 +0000144
Chris Dewhurst7d8412f2016-05-16 11:02:00 +0000145// LEON 3 FT (UT699). Provides features for the UT699 processor
James Y Knight2cc9da92016-08-12 14:48:09 +0000146// - covers all the erratum fixes for LEON3, but does not support the CASA instruction.
James Y Knightbb76d482017-07-20 20:09:11 +0000147def : Processor<"ut699", LEON3Itineraries,
148 [FeatureLeon, InsertNOPLoad, FeatureNoFSMULD, FeatureNoFMULS, FixAllFDIVSQRT]>;
Chris Dewhurst60197022016-04-22 08:17:17 +0000149
Chris Dewhurst7d8412f2016-05-16 11:02:00 +0000150// LEON3 FT (GR712RC). Provides features for the GR712RC processor.
James Y Knight2cc9da92016-08-12 14:48:09 +0000151// - covers all the erratum fixed for LEON3 and support for the CASA instruction.
Chris Dewhurst60197022016-04-22 08:17:17 +0000152def : Processor<"gr712rc", LEON3Itineraries,
James Y Knight2cc9da92016-08-12 14:48:09 +0000153 [FeatureLeon, LeonCASA]>;
Chris Dewhurst60197022016-04-22 08:17:17 +0000154
155// LEON 4 FT generic
156def : Processor<"leon4", LEON4Itineraries,
James Y Knight2cc9da92016-08-12 14:48:09 +0000157 [FeatureLeon, UMACSMACSupport, LeonCASA]>;
Chris Dewhurst60197022016-04-22 08:17:17 +0000158
James Y Knight2cc9da92016-08-12 14:48:09 +0000159// LEON 4 FT (GR740)
160// TO DO: Place-holder: Processor specific features will be added *very* soon here.
161def : Processor<"gr740", LEON4Itineraries,
162 [FeatureLeon, UMACSMACSupport, LeonCASA]>;
Chris Lattner158e1f52006-02-05 05:50:24 +0000163
164//===----------------------------------------------------------------------===//
165// Declare the target which we are implementing
166//===----------------------------------------------------------------------===//
167
Akira Hatanaka725657b2015-03-28 04:03:51 +0000168def SparcAsmWriter : AsmWriter {
James Y Knight2cc9da92016-08-12 14:48:09 +0000169 string AsmWriterClassName = "InstPrinter";
Akira Hatanaka725657b2015-03-28 04:03:51 +0000170 int PassSubtarget = 1;
171 int Variant = 0;
172}
173
Chris Lattner158e1f52006-02-05 05:50:24 +0000174def Sparc : Target {
Chris Lattner158e1f52006-02-05 05:50:24 +0000175 // Pull in Instruction Info:
176 let InstructionSet = SparcInstrInfo;
James Y Knight2cc9da92016-08-12 14:48:09 +0000177 let AssemblyParsers = [SparcAsmParser];
178 let AssemblyWriters = [SparcAsmWriter];
Chris Lattner158e1f52006-02-05 05:50:24 +0000179}