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-exception 6// 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_SF 22 : 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_DF 29 : 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_HI 42 : SubtargetFeature<"fpuv3_hi", "HasFPUv3HalfWord", "true", 43 "Enable FPUv3 harf word converting instructions">; 44def HasFPUv3_HI : Predicate<"Subtarget->hasFPUv3HalfWord()">, 45 AssemblerPredicate<(all_of FeatureFPUV3_HI), 46 "Enable FPUv3 harf word converting instructions">; 47 48def FeatureFPUV3_HF 49 : SubtargetFeature<"fpuv3_hf", "HasFPUv3HalfFloat", "true", 50 "Enable FPUv3 harf precision operate instructions">; 51def HasFPUv3_HF : Predicate<"Subtarget->hasFPUv3HalfFloat()">, 52 AssemblerPredicate<(all_of FeatureFPUV3_HF), 53 "Enable FPUv3 harf precision operate instructions">; 54 55def FeatureFPUV3_SF 56 : 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_DF 63 : 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 HasFLOATE1 70 : 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 HasFLOAT1E2 76 : 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 HasFLOAT1E3 82 : 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 HasFLOAT3E4 88 : 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 HasFLOAT7E60 94 : 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 instrutions">; 101def HasHWDiv : Predicate<"Subtarget->hasHardwareDivide()">, 102 AssemblerPredicate<(all_of FeatureHWDiv), 103 "Enable divide instrutions">; 104 105def FeatureSTM : SubtargetFeature<"multiple_stld", "HasSTM", "true", 106 "Enable multiple load/store instrutions">; 107def HasSTM : Predicate<"Subtarget->hasSTM()">, 108 AssemblerPredicate<(all_of FeatureSTM), 109 "Enable multiple load/store instrutions">; 110 111def FeaturePushPop : SubtargetFeature<"pushpop", "HasPushPop", "true", 112 "Enable push/pop instrutions">; 113def HasPushPop : Predicate<"Subtarget->hasPushPop()">, 114 AssemblerPredicate<(all_of FeaturePushPop), 115 "Enable push/pop instrutions">; 116 117def FeatureDSP 118 : SubtargetFeature<"edsp", "HasDSP", "true", "Enable DSP instrutions">; 119def HasDSP : Predicate<"Subtarget->hasDSP()">, 120 AssemblerPredicate<(all_of FeatureDSP), 121 "Enable DSP instrutions">; 122 123def HasDSP1E2 124 : 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 HasDSPE60 130 : 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 instrutions">; 137def HasDSPV2 : Predicate<"Subtarget->hasDSPV2()">, 138 AssemblerPredicate<(all_of FeatureDSPV2), 139 "Enable DSP V2.0 instrutions">; 140 141def FeatureDSP_Silan : SubtargetFeature<"dsp_silan", "HasDSP_Silan", "true", 142 "Enable DSP Silan instrutions">; 143def HasDSP_Silan : Predicate<"Subtarget->hasDSP_Silan()">, 144 AssemblerPredicate<(all_of FeatureDSP_Silan), 145 "Enable DSP Silan instrutions">; 146 147// Atomic Support 148def 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 Support 155def 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 FeatureJAVA 168 : SubtargetFeature<"java", "HasJAVA", "true", "Enable java instructions">; 169def HasJAVA : Predicate<"Subtarget->hasJAVA()">, 170 AssemblerPredicate<(all_of FeatureJAVA), 171 "Enable java instructions">; 172 173def FeatureCache 174 : SubtargetFeature<"cache", "HasCache", "true", "Enable cache">; 175def HasCache : Predicate<"Subtarget->hasCache()">, 176 AssemblerPredicate<(all_of FeatureCache), 177 "Enable cache">; 178 179def FeatureNVIC 180 : 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 instructions 192def 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 HasVDSP2E3 214 : 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 HasVDSP2E60F 220 : 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 interrput attribute">; 236def EnableInterruptAttribute 237 : Predicate<"Subtarget->enableInterruptAttribute()">, 238 AssemblerPredicate<(all_of FeatureIstack), 239 "Enable interrput 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 FeatureCCRT 254 : 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 HasE1 266 : 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 HasE2 273 : 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 Has3r2E3r3 305 : 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 376def : ProcessorModel<"generic", NoSchedModel, []>; 377 378// CK801 series 379class CK801<string n, SchedMachineModel m, list<SubtargetFeature> f, 380 list<SubtargetFeature> tunef = []> 381 : ProcessorModel<n, m, !listconcat(f, [HasE1, FeatureTrust, FeatureBTST16, ProcCK801]), !listconcat(tunef, [])>; 382 383def : CK801<"ck801", NoSchedModel, []>; 384def : CK801<"ck801t", NoSchedModel, []>; 385def : CK801<"e801", NoSchedModel, []>; 386 387// CK802 series 388class CK802<string n, SchedMachineModel m, list<SubtargetFeature> f, 389 list<SubtargetFeature> tunef = []> 390 : ProcessorModel<n, m, !listconcat(f, [HasE2, FeatureTrust, FeatureBTST16, FeatureNVIC, ProcCK802]), !listconcat(tunef, [])>; 391 392def : CK802<"ck802", NoSchedModel, []>; 393def : CK802<"ck802t", NoSchedModel, []>; 394def : CK802<"ck802j", NoSchedModel, [FeatureJAVA]>; 395def : CK802<"e802", NoSchedModel, []>; 396def : CK802<"e802t", NoSchedModel, []>; 397def : CK802<"s802", NoSchedModel, []>; 398def : CK802<"s802t", NoSchedModel, []>; 399 400// CK803 series 401class CK803<string n, SchedMachineModel m, list<SubtargetFeature> f, 402 list<SubtargetFeature> tunef = []> 403 : ProcessorModel<n, m, !listconcat(f, [Has2E3, HasMP, FeatureTrust, FeatureBTST16, FeatureNVIC, FeatureHWDiv, ProcCK803]), !listconcat(tunef, [])>; 404 405def : CK803<"ck803", NoSchedModel, []>; 406def : CK803<"ck803h", NoSchedModel, []>; 407def : CK803<"ck803t", NoSchedModel, []>; 408def : CK803<"ck803ht", NoSchedModel, []>; 409def : CK803<"ck803f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 410def : CK803<"ck803fh", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 411def : CK803<"ck803e", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>; 412def : CK803<"ck803eh", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>; 413def : CK803<"ck803et", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>; 414def : CK803<"ck803eht", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>; 415def : CK803<"ck803ef", NoSchedModel, 416 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 417def : CK803<"ck803efh", NoSchedModel, 418 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 419def : CK803<"ck803ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 420def : CK803<"ck803eft", NoSchedModel, 421 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 422def : CK803<"ck803efht", NoSchedModel, 423 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 424def : CK803<"ck803r1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>; 425def : CK803<"ck803hr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>; 426def : CK803<"ck803tr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>; 427def : CK803<"ck803htr1", NoSchedModel, [Has3E3r1, Has3r2E3r3, FeatureDSPV2]>; 428def : CK803<"ck803fr1", NoSchedModel, 429 [Has3E3r1, Has3r2E3r3, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>; 430def : CK803<"ck803fhr1", NoSchedModel, 431 [Has3E3r1, Has3r2E3r3, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>; 432def : CK803<"ck803er1", NoSchedModel, 433 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 434def : CK803<"ck803etr1", NoSchedModel, 435 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 436def : CK803<"ck803ehr1", NoSchedModel, 437 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 438def : CK803<"ck803ehtr1", NoSchedModel, 439 [Has3E3r1, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 440def : CK803<"ck803efr1", NoSchedModel, 441 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 442def : CK803<"ck803efhr1", NoSchedModel, 443 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 444def : CK803<"ck803ftr1", NoSchedModel, [Has3E3r1, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureDSPV2]>; 445def : CK803<"ck803eftr1", NoSchedModel, 446 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 447def : CK803<"ck803efhtr1", NoSchedModel, 448 [Has3E3r1, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 449def : CK803<"ck803r2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 450def : CK803<"ck803hr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 451def : CK803<"ck803tr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 452def : CK803<"ck803htr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 453def : CK803<"ck803fr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 454def : CK803<"ck803fhr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 455def : CK803<"ck803er2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 456def : CK803<"ck803etr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 457def : CK803<"ck803ehr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 458def : CK803<"ck803ehtr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 459def : CK803<"ck803efr2", NoSchedModel, 460 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 461def : CK803<"ck803efhr2", NoSchedModel, 462 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 463def : CK803<"ck803ftr2", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 464def : CK803<"ck803eftr2", NoSchedModel, 465 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 466def : CK803<"ck803efhtr2", NoSchedModel, 467 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 468def : CK803<"ck803r3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 469def : CK803<"ck803hr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 470def : CK803<"ck803tr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 471def : CK803<"ck803htr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2]>; 472def : CK803<"ck803fr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 473def : CK803<"ck803fhr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 474def : CK803<"ck803er3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 475def : CK803<"ck803etr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 476def : CK803<"ck803ehr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 477def : CK803<"ck803ehtr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureHighreg]>; 478def : CK803<"ck803efr3", NoSchedModel, 479 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 480def : CK803<"ck803efhr3", NoSchedModel, 481 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 482def : CK803<"ck803ftr3", NoSchedModel, [Has3r1E3r2, Has3r2E3r3, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 483def : CK803<"ck803eftr3", NoSchedModel, 484 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 485def : CK803<"ck803efhtr3", NoSchedModel, 486 [Has3r1E3r2, Has3r2E3r3, FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 487def : CK803<"s803", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>; 488def : CK803<"s803t", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>; 489def : CK803<"e803", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>; 490def : CK803<"e803t", NoSchedModel, [Has3r1E3r2, Has3r2E3r3]>; 491 492// CK803S series 493class CK803S<string n, SchedMachineModel m, list<SubtargetFeature> f, 494list<SubtargetFeature> tunef = []> : CK803<n, m, !listconcat(f, [Has3E3r1, ProcCK803S]), tunef>; 495 496def : CK803S<"ck803s", NoSchedModel, []>; 497def : CK803S<"ck803sn", NoSchedModel, [FeatureDSP_Silan]>; 498def : CK803S<"ck803st", NoSchedModel, []>; 499def : CK803S<"ck803snt", NoSchedModel, [FeatureDSP_Silan]>; 500def : CK803S<"ck803sf", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 501def : CK803S<"ck803sfn", NoSchedModel, [FeatureFPUV2_SF, FeatureDSP_Silan, HasFLOATE1, HasFLOAT1E3]>; 502def : CK803S<"ck803se", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>; 503def : CK803S<"ck803sen", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureDSP_Silan]>; 504def : CK803S<"ck803sef", NoSchedModel, 505 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 506def : CK803S<"ck803sefn", NoSchedModel, 507 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureDSP_Silan, 508 HasFLOATE1, HasFLOAT1E3]>; 509def : CK803S<"ck803seft", NoSchedModel, 510 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 511def : CK803S<"ck803sefnt", NoSchedModel, 512 [FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureDSP_Silan, 513 HasFLOATE1, HasFLOAT1E3]>; 514 515// CK804 series 516class CK804<string n, SchedMachineModel m, list<SubtargetFeature> f, 517 list<SubtargetFeature> tunef = []> 518 : CK803<n, m, !listconcat(f, [Has3r1E3r2, Has3r2E3r3, ProcCK804]), !listconcat(tunef, [])>; 519 520def : CK804<"ck804", NoSchedModel, []>; 521def : CK804<"ck804h", NoSchedModel, []>; 522def : CK804<"ck804t", NoSchedModel, []>; 523def : CK804<"ck804ht", NoSchedModel, []>; 524def : CK804<"ck804f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 525def : CK804<"ck804fh", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 526def : CK804<"ck804e", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>; 527def : CK804<"ck804et", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>; 528def : CK804<"ck804eh", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>; 529def : CK804<"ck804eht", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>; 530def : CK804<"ck804ef", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 531def : CK804<"ck804efh", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 532def : CK804<"ck804ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 533def : CK804<"ck804eft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 534def : CK804<"ck804efht", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 535def : CK804<"e804d", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>; 536def : CK804<"e804dt", NoSchedModel, [FeatureDSPV2, FeatureHighreg]>; 537def : CK804<"e804f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 538def : CK804<"e804ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 539def : CK804<"e804df", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 540def : CK804<"e804dft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3, FeatureHighreg]>; 541 542// CK805 series 543class CK805<string n, SchedMachineModel m, list<SubtargetFeature> f, 544 list<SubtargetFeature> tunef = []> 545 : CK803<n, m, !listconcat(f, [FeatureHighreg, FeatureVDSPV2, HasVDSP2E3, Has3r1E3r2, Has3r2E3r3, ProcCK805]), 546 !listconcat(tunef, [])>; 547 548def : CK805<"ck805", NoSchedModel, []>; 549def : CK805<"i805", NoSchedModel, []>; 550def : CK805<"ck805t", NoSchedModel, []>; 551def : CK805<"i805f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 552def : CK805<"ck805f", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 553def : CK805<"ck805e", NoSchedModel, [FeatureDSPV2]>; 554def : CK805<"ck805ef", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 555def : CK805<"ck805et", NoSchedModel, [FeatureDSPV2]>; 556def : CK805<"ck805ft", NoSchedModel, [FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 557def : CK805<"ck805eft", NoSchedModel, [FeatureDSPV2, FeatureFPUV2_SF, HasFLOATE1, HasFLOAT1E3]>; 558 559// CK807 series 560class CK807<string n, SchedMachineModel m, list<SubtargetFeature> f, 561 list<SubtargetFeature> tunef = []> 562 : ProcessorModel<n, m, !listconcat(f, 563 [ Has3E7, HasMP, HasMP1E2, FeatureTrust, FeatureHWDiv, FeatureDSP, HasDSP1E2, HasDSPE60, 564 FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK807]), !listconcat(tunef, [])>; 565 566def : CK807<"ck807", NoSchedModel, []>; 567def : CK807<"c807", NoSchedModel, []>; 568def : CK807<"r807", NoSchedModel, []>; 569def : CK807<"ck807e", NoSchedModel, [FeatureDSP, HasDSP1E2, HasDSPE60]>; 570def : CK807<"ck807f", NoSchedModel, 571 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 572 HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>; 573def : CK807<"c807f", NoSchedModel, 574 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 575 HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>; 576def : CK807<"r807f", NoSchedModel, 577 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 578 HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>; 579def : CK807<"ck807ef", NoSchedModel, [ 580 FeatureDSP, HasDSP1E2, HasDSPE60, FeatureFPUV2_SF, FeatureFPUV2_DF, 581 FeatureFdivdu, HasFLOATE1, HasFLOAT1E2, HasFLOAT1E3, HasFLOAT3E4]>; 582 583// CK810 series 584class CK810<string n, SchedMachineModel m, list<SubtargetFeature> f, 585 list<SubtargetFeature> tunef = []> 586 : ProcessorModel<n, m, !listconcat(f, 587 [ Has7E10, HasMP, HasMP1E2, FeatureTrust, FeatureHWDiv, FeatureDSP, HasDSP1E2, HasDSPE60, 588 FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK810]), !listconcat(tunef, [])>; 589 590def : CK810<"ck810", NoSchedModel, []>; 591def : CK810<"ck810e", NoSchedModel, []>; 592def : CK810<"ck810t", NoSchedModel, []>; 593def : CK810<"ck810et", NoSchedModel, []>; 594def : CK810<"c810", NoSchedModel, 595 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 596 HasFLOATE1, HasFLOAT1E2]>; 597def : CK810<"ck810f", NoSchedModel, 598 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 599 HasFLOATE1, HasFLOAT1E2]>; 600def : CK810<"ck810ef", NoSchedModel, 601 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 602 HasFLOATE1, HasFLOAT1E2]>; 603def : CK810<"ck810ft", NoSchedModel, 604 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 605 HasFLOATE1, HasFLOAT1E2]>; 606def : CK810<"ck810eft", NoSchedModel, 607 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 608 HasFLOATE1, HasFLOAT1E2]>; 609def : CK810<"c810t", NoSchedModel, 610 [FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 611 HasFLOATE1, HasFLOAT1E2]>; 612 613class CK810V<string n, SchedMachineModel m, list<SubtargetFeature> f, 614 list<SubtargetFeature> tunef = []> 615 : CK810<n, m, !listconcat(f, [FeatureVDSPV1_128, ProcCK810V]), !listconcat(tunef, [])>; 616 617def : CK810V<"ck810v", NoSchedModel, []>; 618def : CK810V<"ck810ev", NoSchedModel, []>; 619def : CK810V<"ck810tv", NoSchedModel, []>; 620def : CK810V<"ck810etv", NoSchedModel, []>; 621def : CK810V<"ck810fv", NoSchedModel, [ 622 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 623 HasFLOATE1, HasFLOAT1E2 624]>; 625def : CK810V<"ck810efv", NoSchedModel, [ 626 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 627 HasFLOATE1, HasFLOAT1E2 628]>; 629def : CK810V<"c810v", NoSchedModel, [ 630 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 631 HasFLOATE1, HasFLOAT1E2 632]>; 633def : CK810V<"ck810ftv", NoSchedModel, [ 634 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 635 HasFLOATE1, HasFLOAT1E2 636]>; 637def : CK810V<"ck810eftv", NoSchedModel, [ 638 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 639 HasFLOATE1, HasFLOAT1E2 640]>; 641def : CK810V<"c810tv", NoSchedModel, [ 642 FeatureFPUV2_SF, FeatureFPUV2_DF, FeatureFdivdu, 643 HasFLOATE1, HasFLOAT1E2 644]>; 645 646// CK860 series 647class CK860<string n, SchedMachineModel m, list<SubtargetFeature> f, 648 list<SubtargetFeature> tunef = []> 649 : ProcessorModel<n, m, !listconcat(f, 650 [ Has10E60, HasMP, HasMP1E2, Has3r1E3r2, Has3r2E3r3, FeatureTrust, FeatureBTST16, FeatureHWDiv, HasDSPE60, 651 FeatureHighreg, FeatureHardTP, FeatureNVIC, FeatureCache, ProcCK860]), !listconcat(tunef, [])>; 652 653class CK860V<string n, SchedMachineModel m, list<SubtargetFeature> f, 654 list<SubtargetFeature> tunef = []> 655 : CK860<n, m, !listconcat(f, [FeatureVDSPV2, HasVDSP2E60F, ProcCK860V]), !listconcat(tunef, [])>; 656 657def : CK860<"ck860", NoSchedModel, []>; 658def : CK860<"ck860f", NoSchedModel, 659 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>; 660def : CK860<"c860", NoSchedModel, 661 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>; 662def : CK860V<"c860v", NoSchedModel, 663 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>; 664def : CK860V<"ck860v", NoSchedModel, []>; 665def : CK860V<"ck860fv", NoSchedModel, 666 [FeatureFPUV3_HI, FeatureFPUV3_HF, FeatureFPUV3_SF, FeatureFPUV3_DF, HasFLOAT7E60]>; 667 668//===----------------------------------------------------------------------===// 669// Define the CSKY target. 670//===----------------------------------------------------------------------===// 671 672def CSKYInstrInfo : InstrInfo; 673 674 675def CSKYAsmParser : AsmParser { 676 let ShouldEmitMatchRegisterAltName = 1; 677 let AllowDuplicateRegisterNames = 1; 678} 679 680def CSKYAsmWriter : AsmWriter { 681 int PassSubtarget = 1; 682} 683 684def CSKY : Target { 685 let InstructionSet = CSKYInstrInfo; 686 let AssemblyParsers = [CSKYAsmParser]; 687 let AssemblyWriters = [CSKYAsmWriter]; 688 let AllowRegisterRenaming = 1; 689} 690