694 lines · plain
1//===-- CSKY.td - Describe the CSKY Target Machine ---------*- tablegen -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9include "llvm/Target/Target.td"10 11//===----------------------------------------------------------------------===//12// CSKY subtarget features and instruction predicates.13//===----------------------------------------------------------------------===//14def ModeHardFloat :15 SubtargetFeature<"hard-float", "UseHardFloat",16 "true", "Use hard floating point features">;17def ModeHardFloatABI :18 SubtargetFeature<"hard-float-abi", "UseHardFloatABI",19 "true", "Use hard floating point ABI to pass args">;20 21def FeatureFPUV2_SF22 : SubtargetFeature<"fpuv2_sf", "HasFPUv2SingleFloat", "true",23 "Enable FPUv2 single float instructions">;24def HasFPUv2_SF : Predicate<"Subtarget->hasFPUv2SingleFloat()">,25 AssemblerPredicate<(all_of FeatureFPUV2_SF),26 "Enable FPUv2 single float instructions">;27 28def FeatureFPUV2_DF29 : SubtargetFeature<"fpuv2_df", "HasFPUv2DoubleFloat", "true",30 "Enable FPUv2 double float instructions">;31def HasFPUv2_DF : Predicate<"Subtarget->hasFPUv2DoubleFloat()">,32 AssemblerPredicate<(all_of FeatureFPUV2_DF),33 "Enable FPUv2 double float instructions">;34 35def FeatureFdivdu : SubtargetFeature<"fdivdu", "HasFdivdu", "true",36 "Enable float divide instructions">;37def HasFdivdu : Predicate<"Subtarget->hasFdivdu()">,38 AssemblerPredicate<(all_of FeatureFdivdu),39 "Enable float divide instructions">;40 41def FeatureFPUV3_HI42 : SubtargetFeature<"fpuv3_hi", "HasFPUv3HalfWord", "true",43 "Enable FPUv3 half word converting instructions">;44def HasFPUv3_HI : Predicate<"Subtarget->hasFPUv3HalfWord()">,45 AssemblerPredicate<(all_of FeatureFPUV3_HI),46 "Enable FPUv3 half word converting instructions">;47 48def FeatureFPUV3_HF49 : SubtargetFeature<"fpuv3_hf", "HasFPUv3HalfFloat", "true",50 "Enable FPUv3 half precision operate instructions">;51def HasFPUv3_HF : Predicate<"Subtarget->hasFPUv3HalfFloat()">,52 AssemblerPredicate<(all_of FeatureFPUV3_HF),53 "Enable FPUv3 half precision operate instructions">;54 55def FeatureFPUV3_SF56 : SubtargetFeature<"fpuv3_sf", "HasFPUv3SingleFloat", "true",57 "Enable FPUv3 single float instructions">;58def HasFPUv3_SF : Predicate<"Subtarget->hasFPUv3SingleFloat()">,59 AssemblerPredicate<(all_of FeatureFPUV3_SF),60 "Enable FPUv3 single float instructions">;61 62def FeatureFPUV3_DF63 : SubtargetFeature<"fpuv3_df", "HasFPUv3DoubleFloat", "true",64 "Enable FPUv3 double float instructions">;65def HasFPUv3_DF : Predicate<"Subtarget->hasFPUv3DoubleFloat()">,66 AssemblerPredicate<(all_of FeatureFPUV3_DF),67 "Enable FPUv3 double float instructions">;68 69def HasFLOATE170 : SubtargetFeature<"floate1", "HasFLOATE1", "true", "Support CSKY floate1 instructions">;71def iHasFLOATE1 : Predicate<"Subtarget->hasFLOATE1()">,72 AssemblerPredicate<(all_of HasFLOATE1),73 "Support CSKY floate1 instructions">;74 75def HasFLOAT1E276 : SubtargetFeature<"float1e2", "HasFLOAT1E2", "true", "Support CSKY float1e2 instructions">;77def iHasFLOAT1E2 : Predicate<"Subtarget->hasFLOAT1E2()">,78 AssemblerPredicate<(all_of HasFLOAT1E2),79 "Support CSKY float1e2 instructions">;80 81def HasFLOAT1E382 : SubtargetFeature<"float1e3", "HasFLOAT1E3", "true", "Support CSKY float1e3 instructions">;83def iHasFLOAT1E3 : Predicate<"Subtarget->hasFLOAT1E3()">,84 AssemblerPredicate<(all_of HasFLOAT1E3),85 "Support CSKY float1e3 instructions">;86 87def HasFLOAT3E488 : SubtargetFeature<"float3e4", "HasFLOAT3E4", "true", "Support CSKY float3e4 instructions">;89def iHasFLOAT3E4 : Predicate<"Subtarget->hasFLOAT3E4()">,90 AssemblerPredicate<(all_of HasFLOAT3E4),91 "Support CSKY float3e4 instructions">;92 93def HasFLOAT7E6094 : SubtargetFeature<"float7e60", "HasFLOAT7E60", "true", "Support CSKY float7e60 instructions">;95def iHasFLOAT7E60 : Predicate<"Subtarget->hasFLOAT7E60()">,96 AssemblerPredicate<(all_of HasFLOAT7E60),97 "Support CSKY float7e60 instructions">;98 99def FeatureHWDiv : SubtargetFeature<"hwdiv", "HasHardwareDivide", "true",100 "Enable divide instructions">;101def HasHWDiv : Predicate<"Subtarget->hasHardwareDivide()">,102 AssemblerPredicate<(all_of FeatureHWDiv),103 "Enable divide instructions">;104 105def FeatureSTM : SubtargetFeature<"multiple_stld", "HasSTM", "true",106 "Enable multiple load/store instructions">;107def HasSTM : Predicate<"Subtarget->hasSTM()">,108 AssemblerPredicate<(all_of FeatureSTM),109 "Enable multiple load/store instructions">;110 111def FeaturePushPop : SubtargetFeature<"pushpop", "HasPushPop", "true",112 "Enable push/pop instructions">;113def HasPushPop : Predicate<"Subtarget->hasPushPop()">,114 AssemblerPredicate<(all_of FeaturePushPop),115 "Enable push/pop instructions">;116 117def FeatureDSP118 : SubtargetFeature<"edsp", "HasDSP", "true", "Enable DSP instructions">;119def HasDSP : Predicate<"Subtarget->hasDSP()">,120 AssemblerPredicate<(all_of FeatureDSP),121 "Enable DSP instructions">;122 123def HasDSP1E2124 : SubtargetFeature<"dsp1e2", "HasDSP1E2", "true", "Support CSKY dsp1e2 instructions">;125def iHasDSP1E2 : Predicate<"Subtarget->hasDSP1E2()">,126 AssemblerPredicate<(all_of HasDSP1E2),127 "Support CSKY dsp1e2 instructions">;128 129def HasDSPE60130 : SubtargetFeature<"dspe60", "HasDSPE60", "true", "Support CSKY dspe60 instructions">;131def iHasDSPE60 : Predicate<"Subtarget->hasDSPE60()">,132 AssemblerPredicate<(all_of HasDSPE60),133 "Support CSKY dspe60 instructions">;134 135def FeatureDSPV2 : SubtargetFeature<"dspv2", "HasDSPV2", "true",136 "Enable DSP V2.0 instructions">;137def HasDSPV2 : Predicate<"Subtarget->hasDSPV2()">,138 AssemblerPredicate<(all_of FeatureDSPV2),139 "Enable DSP V2.0 instructions">;140 141def FeatureDSP_Silan : SubtargetFeature<"dsp_silan", "HasDSP_Silan", "true",142 "Enable DSP Silan instructions">;143def HasDSP_Silan : Predicate<"Subtarget->hasDSP_Silan()">,144 AssemblerPredicate<(all_of FeatureDSP_Silan),145 "Enable DSP Silan instructions">;146 147// Atomic Support148def FeatureBTST16 : SubtargetFeature<"btst16", "HasBTST16", "true",149 "Use the 16-bit btsti instruction">;150def HasBTST16 : Predicate<"Subtarget->hasBTST16()">,151 AssemblerPredicate<(all_of FeatureBTST16),152 "Use the 16-bit btsti instruction">;153 154// Atomic Support155def FeatureExtendLrw : SubtargetFeature<"elrw", "HasExtendLrw", "true",156 "Use the extend LRW instruction">;157def HasExtendLrw : Predicate<"Subtarget->hasExtendLrw()">,158 AssemblerPredicate<(all_of FeatureExtendLrw),159 "Use the extend LRW instruction">;160 161def FeatureTrust : SubtargetFeature<"trust", "HasTrust", "true",162 "Enable trust instructions">;163def HasTrust : Predicate<"Subtarget->hasTrust()">,164 AssemblerPredicate<(all_of FeatureTrust),165 "Enable trust instructions">;166 167def FeatureJAVA168 : SubtargetFeature<"java", "HasJAVA", "true", "Enable java instructions">;169def HasJAVA : Predicate<"Subtarget->hasJAVA()">,170 AssemblerPredicate<(all_of FeatureJAVA),171 "Enable java instructions">;172 173def FeatureCache174 : SubtargetFeature<"cache", "HasCache", "true", "Enable cache">;175def HasCache : Predicate<"Subtarget->hasCache()">,176 AssemblerPredicate<(all_of FeatureCache),177 "Enable cache">;178 179def FeatureNVIC180 : SubtargetFeature<"nvic", "HasNVIC", "true", "Enable NVIC">;181def HasNVIC : Predicate<"Subtarget->hasNVIC()">,182 AssemblerPredicate<(all_of FeatureNVIC),183 "Enable NVIC">;184 185def FeatureDoloop : SubtargetFeature<"doloop", "HasDoloop", "true",186 "Enable doloop instructions">;187def HasDoloop : Predicate<"Subtarget->hasDoloop()">,188 AssemblerPredicate<(all_of FeatureDoloop),189 "Enable doloop instructions">;190 191// Other features than instructions192def FeatureHighreg : SubtargetFeature<"high-registers", "HasHighRegisters",193 "true", "Enable r16-r31 registers">;194def HasHighRegisters : Predicate<"Subtarget->hasHighRegisters()">,195 AssemblerPredicate<(all_of FeatureHighreg),196 "Enable r16-r31 registers">;197 198def FeatureSmart : SubtargetFeature<"smart", "SmartMode", "true",199 "Let CPU work in Smart Mode">;200def SmartMode : Predicate<"Subtarget->smartMode()">,201 AssemblerPredicate<(all_of FeatureSmart),202 "Let CPU work in Smart Mode">;203 204def FeatureVDSPV2 : SubtargetFeature<"vdspv2", "HasVDSPV2", "true",205 "Enable vdsp-v2 instructions">;206def HasVDSPV2 : Predicate<"Subtarget->hasVDSPV2()">,207 AssemblerPredicate<(all_of FeatureVDSPV2),208 "Enable vdsp-v2 instructions">;209 210def HasVDSPV2_FLOAT : Predicate<"Subtarget->hasVDSPV2_FLOAT()">;211def HasVDSPV2_HALF: Predicate<"Subtarget->hasVDSPV2_HALF()">;212 213def HasVDSP2E3214 : SubtargetFeature<"vdsp2e3", "HasVDSP2E3", "true", "Support CSKY vdsp2e3 instructions">;215def iHasVDSP2E3 : Predicate<"Subtarget->hasVDSP2E3()">,216 AssemblerPredicate<(all_of HasVDSP2E3),217 "Support CSKY vdsp2e3 instructions">;218 219def HasVDSP2E60F220 : SubtargetFeature<"vdsp2e60f", "HasVDSP2E60F", "true", "Support CSKY vdsp2e60f instructions">;221def iHasVDSP2E60F : Predicate<"Subtarget->hasVDSP2E60F()">,222 AssemblerPredicate<(all_of HasVDSP2E60F),223 "Support CSKY vdsp2e60f instructions">;224 225def FeatureHardTP : SubtargetFeature<"hard-tp", "ReadTPHard", "true",226 "Enable TLS Pointer register">;227def ReadTPHard : Predicate<"Subtarget->readTPHard()">,228 AssemblerPredicate<(all_of FeatureHardTP),229 "Enable TLS Pointer register">;230 231def FeatureSoftTP : SubtargetFeature<"soft-tp", "ReadTPHard", "false",232 "Disable TLS Pointer register">;233 234def FeatureIstack : SubtargetFeature<"istack", "EnableInterruptAttribute",235 "true", "Enable interrupt attribute">;236def EnableInterruptAttribute237 : Predicate<"Subtarget->enableInterruptAttribute()">,238 AssemblerPredicate<(all_of FeatureIstack),239 "Enable interrupt attribute">;240 241def FeatureConstPool : SubtargetFeature<"constpool", "DumpConstPool", "true",242 "Dump the constant pool by compiler">;243def DumpConstPool : Predicate<"Subtarget->dumpConstPool()">,244 AssemblerPredicate<(all_of FeatureConstPool),245 "Dump the constant pool by compiler">;246 247def FeatureStackSize : SubtargetFeature<"stack-size", "EnableStackSize", "true",248 "Output stack size information">;249def EnableStackSize : Predicate<"Subtarget->enableStackSize()">,250 AssemblerPredicate<(all_of FeatureStackSize),251 "Output stack size information">;252 253def FeatureCCRT254 : SubtargetFeature<"ccrt", "UseCCRT", "true", "Use CSKY compiler runtime">;255def UseCCRT : Predicate<"Subtarget->useCCRT()">,256 AssemblerPredicate<(all_of FeatureCCRT),257 "Use CSKY compiler runtime">;258 259def FeatureVDSPV1_128 : SubtargetFeature<"vdspv1", "HasVDSPV1_128", "true",260 "Enable 128bit vdsp-v1 instructions">;261def HasVDSPV1_128 : Predicate<"Subtarget->hasVDSPV1_128()">,262 AssemblerPredicate<(all_of FeatureVDSPV1_128),263 "Enable 128bit vdsp-v1 instructions">;264 265def HasE1266 : SubtargetFeature<"e1", "HasE1", "true", "Support CSKY e1 instructions",267 [FeatureExtendLrw]>;268def iHasE1 : Predicate<"Subtarget->hasE1()">,269 AssemblerPredicate<(all_of HasE1),270 "Support CSKY e1 instructions">;271 272def HasE2273 : SubtargetFeature<"e2", "HasE2", "true", "Support CSKY e2 instructions",274 [HasE1]>;275def iHasE2 : Predicate<"Subtarget->hasE2()">,276 AssemblerPredicate<(all_of HasE2),277 "Support CSKY e2 instructions">;278 279def Has2E3 : SubtargetFeature<"2e3", "Has2E3", "true",280 "Support CSKY 2e3 instructions", [HasE2]>;281def iHas2E3 : Predicate<"Subtarget->has2E3()">,282 AssemblerPredicate<(all_of Has2E3),283 "Support CSKY 2e3 instructions">;284 285def HasMP : SubtargetFeature<"mp", "HasMP", "true",286 "Support CSKY mp instructions", [Has2E3]>;287def iHasMP : Predicate<"Subtarget->hasMP()">,288 AssemblerPredicate<(all_of HasMP),289 "Support CSKY mp instructions">;290 291def Has3E3r1 : SubtargetFeature<"3e3r1", "Has3E3r1", "true",292 "Support CSKY 3e3r1 instructions">;293def iHas3E3r1 : Predicate<"Subtarget->has3E3r1()">,294 AssemblerPredicate<(all_of Has3E3r1),295 "Support CSKY 3e3r1 instructions">;296 297def Has3r1E3r2 : SubtargetFeature<"3e3r2", "Has3r1E3r2", "true",298 "Support CSKY 3e3r2 instructions",299 [Has3E3r1, FeatureDoloop]>;300def iHas3r1E3r2 : Predicate<"Subtarget->has3r1E3r2()">,301 AssemblerPredicate<(all_of Has3r1E3r2),302 "Support CSKY 3e3r2 instructions">;303 304def Has3r2E3r3305 : SubtargetFeature<"3e3r3", "Has3r2E3r3", "true",306 "Support CSKY 3e3r3 instructions", [FeatureDoloop]>;307def iHas3r2E3r3 : Predicate<"Subtarget->has3r2E3r3()">,308 AssemblerPredicate<(all_of Has3r2E3r3),309 "Support CSKY 3e3r3 instructions">;310 311def Has3E7 : SubtargetFeature<"3e7", "Has3E7", "true",312 "Support CSKY 3e7 instructions", [Has2E3]>;313def iHas3E7 : Predicate<"Subtarget->has3E7()">,314 AssemblerPredicate<(all_of Has3E7),315 "Support CSKY 3e7 instructions">;316 317def HasMP1E2 : SubtargetFeature<"mp1e2", "HasMP1E2", "true",318 "Support CSKY mp1e2 instructions", [Has3E7]>;319def iHasMP1E2 : Predicate<"Subtarget->hasMP1E2()">,320 AssemblerPredicate<(all_of HasMP1E2),321 "Support CSKY mp1e2 instructions">;322 323def Has7E10 : SubtargetFeature<"7e10", "Has7E10", "true",324 "Support CSKY 7e10 instructions", [Has3E7]>;325def iHas7E10 : Predicate<"Subtarget->has7E10()">,326 AssemblerPredicate<(all_of Has7E10),327 "Support CSKY 7e10 instructions">;328 329def Has10E60 : SubtargetFeature<"10e60", "Has10E60", "true",330 "Support CSKY 10e60 instructions", [Has7E10]>;331def iHas10E60 : Predicate<"Subtarget->has10E60()">,332 AssemblerPredicate<(all_of Has10E60),333 "Support CSKY 10e60 instructions">;334 335//===----------------------------------------------------------------------===//336// CSKY Processor subtarget features.337//===----------------------------------------------------------------------===//338 339def ProcCK801 : SubtargetFeature<"ck801", "CSKYProcFamily", "CK801",340 "CSKY ck801 processors", []>;341def isCK801 : Predicate<"Subtarget->isCK801()">,342 AssemblerPredicate<(all_of ProcCK801)>;343def ProcCK802 : SubtargetFeature<"ck802", "CSKYProcFamily", "CK802",344 "CSKY ck802 processors", []>;345def ProcCK803 : SubtargetFeature<"ck803", "CSKYProcFamily", "CK803",346 "CSKY ck803 processors", []>;347def ProcCK803S : SubtargetFeature<"ck803s", "CSKYProcFamily", "CK803S",348 "CSKY ck803s processors", []>;349def ProcCK804 : SubtargetFeature<"ck804", "CSKYProcFamily", "CK804",350 "CSKY ck804 processors", []>;351def ProcCK805 : SubtargetFeature<"ck805", "CSKYProcFamily", "CK805",352 "CSKY ck805 processors", []>;353def ProcCK807 : SubtargetFeature<"ck807", "CSKYProcFamily", "CK807",354 "CSKY ck807 processors", []>;355def ProcCK810 : SubtargetFeature<"ck810", "CSKYProcFamily", "CK810",356 "CSKY ck810 processors", []>;357def ProcCK810V : SubtargetFeature<"ck810v", "CSKYProcFamily", "CK810V",358 "CSKY ck810v processors", []>;359def ProcCK860 : SubtargetFeature<"ck860", "CSKYProcFamily", "CK860",360 "CSKY ck860 processors", []>;361def ProcCK860V : SubtargetFeature<"ck860v", "CSKYProcFamily", "CK860V",362 "CSKY ck860v processors", []>;363 364//===----------------------------------------------------------------------===//365// Registers, calling conventions, instruction descriptions.366//===----------------------------------------------------------------------===//367 368include "CSKYRegisterInfo.td"369include "CSKYCallingConv.td"370include "CSKYInstrInfo.td"371 372//===----------------------------------------------------------------------===//373// CSKY processors supported.374//===----------------------------------------------------------------------===//375 376// btsti16 is one of most basic instructions should be enable377// even in generic processor to avoid failure codegen.378def : ProcessorModel<"generic", NoSchedModel, [FeatureBTST16]>;379 380// CK801 series381class CK801<string n, SchedMachineModel m, list<SubtargetFeature> f,382 list<SubtargetFeature> tunef = []>383 : ProcessorModel<n, m, !listconcat(f, [HasE1, FeatureTrust, FeatureBTST16, ProcCK801]), !listconcat(tunef, [])>;384 385def : CK801<"ck801", NoSchedModel, []>;386def : CK801<"ck801t", NoSchedModel, []>;387def : CK801<"e801", NoSchedModel, []>;388 389// CK802 series390class CK802<string n, SchedMachineModel m, list<SubtargetFeature> f,391 list<SubtargetFeature> tunef = []>392 : ProcessorModel<n, m, !listconcat(f, [HasE2, FeatureTrust, FeatureBTST16, FeatureNVIC, ProcCK802]), !listconcat(tunef, [])>;393 394def : CK802<"ck802", NoSchedModel, []>;395def : CK802<"ck802t", NoSchedModel, []>;396def : CK802<"ck802j", NoSchedModel, [FeatureJAVA]>;397def : CK802<"e802", NoSchedModel, []>;398def : CK802<"e802t", NoSchedModel, []>;399def : CK802<"s802", NoSchedModel, []>;400def : CK802<"s802t", NoSchedModel, []>;401 402// CK803 series403class CK803<string n, SchedMachineModel m, list<SubtargetFeature> f,404 list<SubtargetFeature> tunef = []>405 : ProcessorModel<n, m, !listconcat(f, [Has2E3, HasMP, FeatureTrust, FeatureBTST16, FeatureNVIC, FeatureHWDiv, ProcCK803]), !listconcat(tunef, [])>;406 407def : CK803<"ck803", NoSchedModel, []>;408def : CK803<"ck803h", NoSchedModel, []>;409def : CK803<"ck803t", NoSchedModel, []>;410def : CK803<"ck803ht", NoSchedModel, []>;411def : CK803<"ck803f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;412def : CK803<"ck803fh", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;413def : CK803<"ck803e", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;414def : CK803<"ck803eh", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;415def : CK803<"ck803et", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;416def : CK803<"ck803eht", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;417def : CK803<"ck803ef", NoSchedModel,418 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;419def : CK803<"ck803efh", NoSchedModel,420 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;421def : CK803<"ck803ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;422def : CK803<"ck803eft", NoSchedModel,423 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;424def : CK803<"ck803efht", NoSchedModel,425 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;426def : CK803<"ck803r1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;427def : CK803<"ck803hr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;428def : CK803<"ck803tr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;429def : CK803<"ck803htr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>;430def : CK803<"ck803fr1", NoSchedModel,431 [Has3E3r1, Has3r2E3r3, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>;432def : CK803<"ck803fhr1", NoSchedModel,433 [Has3E3r1, Has3r2E3r3, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>;434def : CK803<"ck803er1", NoSchedModel,435 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;436def : CK803<"ck803etr1", NoSchedModel,437 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;438def : CK803<"ck803ehr1", NoSchedModel,439 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;440def : CK803<"ck803ehtr1", NoSchedModel,441 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;442def : CK803<"ck803efr1", NoSchedModel,443 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;444def : CK803<"ck803efhr1", NoSchedModel,445 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;446def : CK803<"ck803ftr1", NoSchedModel, [Has3E3r1, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>;447def : CK803<"ck803eftr1", NoSchedModel,448 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;449def : CK803<"ck803efhtr1", NoSchedModel,450 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;451def : CK803<"ck803r2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;452def : CK803<"ck803hr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;453def : CK803<"ck803tr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;454def : CK803<"ck803htr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;455def : CK803<"ck803fr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;456def : CK803<"ck803fhr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;457def : CK803<"ck803er2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;458def : CK803<"ck803etr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;459def : CK803<"ck803ehr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;460def : CK803<"ck803ehtr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;461def : CK803<"ck803efr2", NoSchedModel,462 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;463def : CK803<"ck803efhr2", NoSchedModel,464 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;465def : CK803<"ck803ftr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;466def : CK803<"ck803eftr2", NoSchedModel,467 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;468def : CK803<"ck803efhtr2", NoSchedModel,469 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;470def : CK803<"ck803r3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;471def : CK803<"ck803hr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;472def : CK803<"ck803tr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;473def : CK803<"ck803htr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>;474def : CK803<"ck803fr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;475def : CK803<"ck803fhr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;476def : CK803<"ck803er3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;477def : CK803<"ck803etr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;478def : CK803<"ck803ehr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;479def : CK803<"ck803ehtr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>;480def : CK803<"ck803efr3", NoSchedModel,481 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;482def : CK803<"ck803efhr3", NoSchedModel,483 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;484def : CK803<"ck803ftr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;485def : CK803<"ck803eftr3", NoSchedModel,486 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;487def : CK803<"ck803efhtr3", NoSchedModel,488 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;489def : CK803<"s803", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;490def : CK803<"s803t", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;491def : CK803<"e803", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;492def : CK803<"e803t", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>;493 494// CK803S series495class CK803S<string n, SchedMachineModel m, list<SubtargetFeature> f,496list<SubtargetFeature> tunef = []> : CK803<n, m, !listconcat(f, [Has3E3r1, ProcCK803S]), tunef>;497 498def : CK803S<"ck803s", NoSchedModel, []>;499def : CK803S<"ck803sn", NoSchedModel, [FeatureDSP_Silan]>;500def : CK803S<"ck803st", NoSchedModel, []>;501def : CK803S<"ck803snt", NoSchedModel, [FeatureDSP_Silan]>;502def : CK803S<"ck803sf", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;503def : CK803S<"ck803sfn", NoSchedModel, [FeatureFPUV2_SF, FeatureDSP_Silan, HasFLOATE1, HasFLOAT1E3]>;504def : CK803S<"ck803se", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>;505def : CK803S<"ck803sen", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSP_Silan]>;506def : CK803S<"ck803sef", NoSchedModel,507 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;508def : CK803S<"ck803sefn", NoSchedModel,509 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureDSP_Silan,510 HasFLOATE1, HasFLOAT1E3]>;511def : CK803S<"ck803seft", NoSchedModel,512 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;513def : CK803S<"ck803sefnt", NoSchedModel,514 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureDSP_Silan,515 HasFLOATE1, HasFLOAT1E3]>;516 517// CK804 series518class CK804<string n, SchedMachineModel m, list<SubtargetFeature> f,519 list<SubtargetFeature> tunef = []>520 : CK803<n, m, !listconcat(f, [Has3r1E3r2, Has3r2E3r3, ProcCK804]), !listconcat(tunef, [])>;521 522def : CK804<"ck804", NoSchedModel, []>;523def : CK804<"ck804h", NoSchedModel, []>;524def : CK804<"ck804t", NoSchedModel, []>;525def : CK804<"ck804ht", NoSchedModel, []>;526def : CK804<"ck804f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;527def : CK804<"ck804fh", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;528def : CK804<"ck804e", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;529def : CK804<"ck804et", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;530def : CK804<"ck804eh", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;531def : CK804<"ck804eht", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;532def : CK804<"ck804ef", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;533def : CK804<"ck804efh", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;534def : CK804<"ck804ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;535def : CK804<"ck804eft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;536def : CK804<"ck804efht", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;537def : CK804<"e804d", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;538def : CK804<"e804dt", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>;539def : CK804<"e804f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;540def : CK804<"e804ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;541def : CK804<"e804df", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;542def : CK804<"e804dft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>;543 544// CK805 series545class CK805<string n, SchedMachineModel m, list<SubtargetFeature> f,546 list<SubtargetFeature> tunef = []>547 : CK803<n, m, !listconcat(f, [FeatureHighreg, FeatureVDSPV2, HasVDSP2E3, Has3r1E3r2, Has3r2E3r3, ProcCK805]),548 !listconcat(tunef, [])>;549 550def : CK805<"ck805", NoSchedModel, []>;551def : CK805<"i805", NoSchedModel, []>;552def : CK805<"ck805t", NoSchedModel, []>;553def : CK805<"i805f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;554def : CK805<"ck805f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;555def : CK805<"ck805e", NoSchedModel, [FeatureDSPV2]>;556def : CK805<"ck805ef", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;557def : CK805<"ck805et", NoSchedModel, [FeatureDSPV2]>;558def : CK805<"ck805ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;559def : CK805<"ck805eft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>;560 561// CK807 series562class CK807<string n, SchedMachineModel m, list<SubtargetFeature> f,563 list<SubtargetFeature> tunef = []>564 : ProcessorModel<n, m, !listconcat(f,565 [ Has3E7, HasMP, HasMP1E2, FeatureTrust, FeatureHWDiv, FeatureDSP, HasDSP1E2, HasDSPE60,566 FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK807]), !listconcat(tunef, [])>;567 568def : CK807<"ck807", NoSchedModel, []>;569def : CK807<"c807", NoSchedModel, []>;570def : CK807<"r807", NoSchedModel, []>;571def : CK807<"ck807e", NoSchedModel, []>;572def : CK807<"ck807f", NoSchedModel,573 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,574 HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;575def : CK807<"c807f", NoSchedModel,576 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,577 HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;578def : CK807<"r807f", NoSchedModel,579 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,580 HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;581def : CK807<"ck807ef", NoSchedModel, [582 FeatureFPUV2_SF, FeatureFPUV2_DF,583 FeatureFdivdu, HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>;584 585// CK810 series586class CK810<string n, SchedMachineModel m, list<SubtargetFeature> f,587 list<SubtargetFeature> tunef = []>588 : ProcessorModel<n, m, !listconcat(f,589 [ Has7E10, HasMP, HasMP1E2, FeatureTrust, FeatureHWDiv, FeatureDSP, HasDSP1E2, HasDSPE60,590 FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK810]), !listconcat(tunef, [])>;591 592def : CK810<"ck810", NoSchedModel, []>;593def : CK810<"ck810e", NoSchedModel, []>;594def : CK810<"ck810t", NoSchedModel, []>;595def : CK810<"ck810et", NoSchedModel, []>;596def : CK810<"c810", NoSchedModel,597 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,598 HasFLOATE1, HasFLOAT1E2]>;599def : CK810<"ck810f", NoSchedModel,600 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,601 HasFLOATE1, HasFLOAT1E2]>;602def : CK810<"ck810ef", NoSchedModel,603 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,604 HasFLOATE1, HasFLOAT1E2]>;605def : CK810<"ck810ft", NoSchedModel,606 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,607 HasFLOATE1, HasFLOAT1E2]>;608def : CK810<"ck810eft", NoSchedModel,609 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,610 HasFLOATE1, HasFLOAT1E2]>;611def : CK810<"c810t", NoSchedModel,612 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,613 HasFLOATE1, HasFLOAT1E2]>;614 615class CK810V<string n, SchedMachineModel m, list<SubtargetFeature> f,616 list<SubtargetFeature> tunef = []>617 : CK810<n, m, !listconcat(f, [FeatureVDSPV1_128, ProcCK810V]), !listconcat(tunef, [])>;618 619def : CK810V<"ck810v", NoSchedModel, []>;620def : CK810V<"ck810ev", NoSchedModel, []>;621def : CK810V<"ck810tv", NoSchedModel, []>;622def : CK810V<"ck810etv", NoSchedModel, []>;623def : CK810V<"ck810fv", NoSchedModel, [624 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,625 HasFLOATE1, HasFLOAT1E2626]>;627def : CK810V<"ck810efv", NoSchedModel, [628 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,629 HasFLOATE1, HasFLOAT1E2630]>;631def : CK810V<"c810v", NoSchedModel, [632 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,633 HasFLOATE1, HasFLOAT1E2634]>;635def : CK810V<"ck810ftv", NoSchedModel, [636 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,637 HasFLOATE1, HasFLOAT1E2638]>;639def : CK810V<"ck810eftv", NoSchedModel, [640 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,641 HasFLOATE1, HasFLOAT1E2642]>;643def : CK810V<"c810tv", NoSchedModel, [644 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu,645 HasFLOATE1, HasFLOAT1E2646]>;647 648// CK860 series649class CK860<string n, SchedMachineModel m, list<SubtargetFeature> f,650 list<SubtargetFeature> tunef = []>651 : ProcessorModel<n, m, !listconcat(f,652 [ Has10E60, HasMP, HasMP1E2, Has3r1E3r2, Has3r2E3r3, FeatureTrust, FeatureBTST16, FeatureHWDiv, HasDSPE60,653 FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK860]), !listconcat(tunef, [])>;654 655class CK860V<string n, SchedMachineModel m, list<SubtargetFeature> f,656 list<SubtargetFeature> tunef = []>657 : CK860<n, m, !listconcat(f, [FeatureVDSPV2, HasVDSP2E60F, ProcCK860V]), !listconcat(tunef, [])>;658 659def : CK860<"ck860", NoSchedModel, []>;660def : CK860<"ck860f", NoSchedModel,661 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;662def : CK860<"c860", NoSchedModel,663 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;664def : CK860V<"c860v", NoSchedModel,665 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;666def : CK860V<"ck860v", NoSchedModel, []>;667def : CK860V<"ck860fv", NoSchedModel,668 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>;669 670//===----------------------------------------------------------------------===//671// Define the CSKY target.672//===----------------------------------------------------------------------===//673 674defm : RemapAllTargetPseudoPointerOperands<GPR>;675 676def CSKYInstrInfo : InstrInfo;677 678 679def CSKYAsmParser : AsmParser {680 let ShouldEmitMatchRegisterAltName = 1;681 let AllowDuplicateRegisterNames = 1;682}683 684def CSKYAsmWriter : AsmWriter {685 int PassSubtarget = 1;686}687 688def CSKY : Target {689 let InstructionSet = CSKYInstrInfo;690 let AssemblyParsers = [CSKYAsmParser];691 let AssemblyWriters = [CSKYAsmWriter];692 let AllowRegisterRenaming = 1;693}694