2012-02-18 20:03:15 +08:00
|
|
|
//===-- Sparc.td - Describe the Sparc Target Machine -------*- tablegen -*-===//
|
|
|
|
//
|
2006-02-05 13:50:24 +08:00
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
2007-12-30 04:36:04 +08:00
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
2012-02-18 20:03:15 +08:00
|
|
|
//
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Target-independent interfaces which we are implementing
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2008-11-24 15:34:46 +08:00
|
|
|
include "llvm/Target/Target.td"
|
2006-02-05 13:50:24 +08:00
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// SPARC Subtarget features.
|
|
|
|
//
|
2013-06-05 02:33:25 +08:00
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
def FeatureV9
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"v9", "IsV9", "true",
|
|
|
|
"Enable SPARC-V9 instructions">;
|
2006-02-05 13:50:24 +08:00
|
|
|
def FeatureV8Deprecated
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"deprecated-v8", "V8DeprecatedInsts", "true",
|
|
|
|
"Enable deprecated V8 instructions in V9 mode">;
|
2006-02-05 13:50:24 +08:00
|
|
|
def FeatureVIS
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"vis", "IsVIS", "true",
|
|
|
|
"Enable UltraSPARC Visual Instruction Set extensions">;
|
2014-03-03 03:31:21 +08:00
|
|
|
def FeatureVIS2
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"vis2", "IsVIS2", "true",
|
|
|
|
"Enable Visual Instruction Set extensions II">;
|
2014-03-03 03:31:21 +08:00
|
|
|
def FeatureVIS3
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"vis3", "IsVIS3", "true",
|
|
|
|
"Enable Visual Instruction Set extensions III">;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
def FeatureLeon
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"leon", "IsLeon", "true",
|
|
|
|
"Enable LEON extensions">;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
2013-08-26 02:30:06 +08:00
|
|
|
def FeatureHardQuad
|
2016-08-12 22:48:09 +08:00
|
|
|
: SubtargetFeature<"hard-quad-float", "HasHardQuad", "true",
|
|
|
|
"Enable quad-word floating point instructions">;
|
2013-08-26 02:30:06 +08:00
|
|
|
|
2014-01-26 14:09:59 +08:00
|
|
|
def UsePopc : SubtargetFeature<"popc", "UsePopc", "true",
|
|
|
|
"Use the popc (population count) instruction">;
|
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
def FeatureSoftFloat : SubtargetFeature<"soft-float", "UseSoftFloat", "true",
|
|
|
|
"Use software emulation for floating point">;
|
2016-05-18 17:14:13 +08:00
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
//==== Features added predmoninantly for LEON subtarget support
|
2016-05-09 19:55:15 +08:00
|
|
|
include "LeonFeatures.td"
|
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
2008-03-17 13:41:48 +08:00
|
|
|
// Register File, Calling Conv, Instruction Descriptions
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
include "SparcRegisterInfo.td"
|
2008-03-17 13:41:48 +08:00
|
|
|
include "SparcCallingConv.td"
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
include "SparcSchedule.td"
|
2006-02-05 13:50:24 +08:00
|
|
|
include "SparcInstrInfo.td"
|
|
|
|
|
2010-04-05 11:10:20 +08:00
|
|
|
def SparcInstrInfo : InstrInfo;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
def SparcAsmParser : AsmParser {
|
|
|
|
bit ShouldEmitMatchRegisterName = 0;
|
|
|
|
}
|
2014-01-04 19:30:13 +08:00
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// SPARC processors supported.
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
class Proc<string Name, list<SubtargetFeature> Features>
|
2016-08-12 22:48:09 +08:00
|
|
|
: Processor<Name, NoItineraries, Features>;
|
|
|
|
|
|
|
|
def : Proc<"generic", []>;
|
|
|
|
def : Proc<"v7", []>;
|
|
|
|
def : Proc<"v8", []>;
|
|
|
|
def : Proc<"supersparc", []>;
|
|
|
|
def : Proc<"sparclite", []>;
|
|
|
|
def : Proc<"f934", []>;
|
|
|
|
def : Proc<"hypersparc", []>;
|
|
|
|
def : Proc<"sparclite86x", []>;
|
|
|
|
def : Proc<"sparclet", []>;
|
|
|
|
def : Proc<"tsc701", []>;
|
2016-09-14 01:51:41 +08:00
|
|
|
def : Proc<"myriad2", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"myriad2.1", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"myriad2.2", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2100", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2150", [FeatureLeon, LeonCASA]>;
|
|
|
|
def : Proc<"ma2450", [FeatureLeon, LeonCASA]>;
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Proc<"v9", [FeatureV9]>;
|
|
|
|
def : Proc<"ultrasparc", [FeatureV9, FeatureV8Deprecated, FeatureVIS]>;
|
|
|
|
def : Proc<"ultrasparc3", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
|
|
|
|
FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara", [FeatureV9, FeatureV8Deprecated, FeatureVIS,
|
|
|
|
FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara2", [FeatureV9, FeatureV8Deprecated, UsePopc,
|
|
|
|
FeatureVIS, FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara3", [FeatureV9, FeatureV8Deprecated, UsePopc,
|
|
|
|
FeatureVIS, FeatureVIS2]>;
|
|
|
|
def : Proc<"niagara4", [FeatureV9, FeatureV8Deprecated, UsePopc,
|
|
|
|
FeatureVIS, FeatureVIS2, FeatureVIS3]>;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
// LEON 2 FT generic
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Processor<"leon2", LEON2Itineraries,
|
|
|
|
[FeatureLeon]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 2 FT (AT697E)
|
2016-08-12 22:48:09 +08:00
|
|
|
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
|
|
|
|
def : Processor<"at697e", LEON2Itineraries,
|
2016-10-10 16:53:06 +08:00
|
|
|
[FeatureLeon, ReplaceSDIV, InsertNOPLoad]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 2 FT (AT697F)
|
2016-08-12 22:48:09 +08:00
|
|
|
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
def : Processor<"at697f", LEON2Itineraries,
|
2016-08-12 22:48:09 +08:00
|
|
|
[FeatureLeon, InsertNOPLoad]>;
|
|
|
|
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 3 FT generic
|
2016-08-12 22:48:09 +08:00
|
|
|
def : Processor<"leon3", LEON3Itineraries,
|
|
|
|
[FeatureLeon, UMACSMACSupport]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
2016-05-16 19:02:00 +08:00
|
|
|
// LEON 3 FT (UT699). Provides features for the UT699 processor
|
2016-08-12 22:48:09 +08:00
|
|
|
// - covers all the erratum fixes for LEON3, but does not support the CASA instruction.
|
|
|
|
def : Processor<"ut699", LEON3Itineraries,
|
|
|
|
[FeatureLeon, InsertNOPLoad, FixFSMULD, ReplaceFMULS, FixAllFDIVSQRT]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
2016-05-16 19:02:00 +08:00
|
|
|
// LEON3 FT (GR712RC). Provides features for the GR712RC processor.
|
2016-08-12 22:48:09 +08:00
|
|
|
// - covers all the erratum fixed for LEON3 and support for the CASA instruction.
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
def : Processor<"gr712rc", LEON3Itineraries,
|
2016-08-12 22:48:09 +08:00
|
|
|
[FeatureLeon, LeonCASA]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
|
|
|
// LEON 4 FT generic
|
|
|
|
def : Processor<"leon4", LEON4Itineraries,
|
2016-08-12 22:48:09 +08:00
|
|
|
[FeatureLeon, UMACSMACSupport, LeonCASA]>;
|
[Sparc] This provides support for itineraries on Sparc.
Specifically, itineraries for LEON processors has been added, along with several LEON processor Subtargets. Although currently all these targets are pretty much identical, support for features that will differ among these processors will be added in the very near future.
The different Instruction Itinerary Classes (IICs) added are sufficient to differentiate between the instruction timings used by LEON and, quite probably, by generic Sparc processors too, but the focus of the exercise has been for LEON processors, as the requirement of my project. If the IICs are not sufficient for other Sparc processor types and you want to add a new itinerary for one of those, it should be relatively trivial to adapt this.
As none of the LEON processors has Quad Floats, or is a Version 9 processor, none of those instructions have itinerary classes defined and revert to the default "NoItinerary" instruction itinerary.
Phabricator Review: http://reviews.llvm.org/D19359
llvm-svn: 267121
2016-04-22 16:17:17 +08:00
|
|
|
|
2016-08-12 22:48:09 +08:00
|
|
|
// LEON 4 FT (GR740)
|
|
|
|
// TO DO: Place-holder: Processor specific features will be added *very* soon here.
|
|
|
|
def : Processor<"gr740", LEON4Itineraries,
|
|
|
|
[FeatureLeon, UMACSMACSupport, LeonCASA]>;
|
2006-02-05 13:50:24 +08:00
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Declare the target which we are implementing
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2015-03-28 12:03:51 +08:00
|
|
|
def SparcAsmWriter : AsmWriter {
|
2016-08-12 22:48:09 +08:00
|
|
|
string AsmWriterClassName = "InstPrinter";
|
2015-03-28 12:03:51 +08:00
|
|
|
int PassSubtarget = 1;
|
|
|
|
int Variant = 0;
|
|
|
|
}
|
|
|
|
|
2006-02-05 13:50:24 +08:00
|
|
|
def Sparc : Target {
|
|
|
|
// Pull in Instruction Info:
|
|
|
|
let InstructionSet = SparcInstrInfo;
|
2016-08-12 22:48:09 +08:00
|
|
|
let AssemblyParsers = [SparcAsmParser];
|
|
|
|
let AssemblyWriters = [SparcAsmWriter];
|
2006-02-05 13:50:24 +08:00
|
|
|
}
|