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