166 lines · plain
1//===----------------------------------------------------------------------===//2// Xtensa subtarget features.3//===----------------------------------------------------------------------===//4 5// Xtensa ISA extensions (Xtensa Options).6def FeatureDensity : SubtargetFeature<"density", "HasDensity", "true",7 "Enable Density instructions">;8def HasDensity : Predicate<"Subtarget->hasDensity()">,9 AssemblerPredicate<(all_of FeatureDensity)>;10 11def FeatureSingleFloat : SubtargetFeature<"fp", "HasSingleFloat", "true",12 "Enable Xtensa Single FP instructions">;13def HasSingleFloat : Predicate<"Subtarget->hasSingleFloat()">,14 AssemblerPredicate<(all_of FeatureSingleFloat)>;15 16def FeatureWindowed : SubtargetFeature<"windowed", "HasWindowed", "true",17 "Enable Xtensa Windowed Register option">;18def HasWindowed : Predicate<"Subtarget->hasWindowed()">,19 AssemblerPredicate<(all_of FeatureWindowed)>;20 21def FeatureMAC16 : SubtargetFeature<"mac16", "HasMAC16", "true",22 "Enable Xtensa MAC16 instructions">;23def HasMAC16 : Predicate<"Subtarget->hasMAC16()">,24 AssemblerPredicate<(all_of FeatureMAC16)>;25 26def FeatureBoolean : SubtargetFeature<"bool", "HasBoolean", "true",27 "Enable Xtensa Boolean extension">;28def HasBoolean : Predicate<"Subtarget->hasBoolean()">,29 AssemblerPredicate<(all_of FeatureBoolean)>;30 31def FeatureLoop : SubtargetFeature<"loop", "HasLoop", "true",32 "Enable Xtensa Loop extension">;33def HasLoop : Predicate<"Subtarget->hasLoop()">,34 AssemblerPredicate<(all_of FeatureLoop)>;35 36def FeatureSEXT : SubtargetFeature<"sext", "HasSEXT", "true",37 "Enable Xtensa Sign Extend option">;38def HasSEXT : Predicate<"Subtarget->hasSEXT()">,39 AssemblerPredicate<(all_of FeatureSEXT)>;40 41def FeatureCLAMPS : SubtargetFeature<"clamps", "HasCLAMPS", "true",42 "Enable Xtensa CLAMPS option">;43def HasCLAMPS : Predicate<"Subtarget->hasCLAMPS()">,44 AssemblerPredicate<(all_of FeatureCLAMPS)>;45 46def FeatureNSA : SubtargetFeature<"nsa", "HasNSA", "true",47 "Enable Xtensa NSA option">;48def HasNSA : Predicate<"Subtarget->hasNSA()">,49 AssemblerPredicate<(all_of FeatureNSA)>;50 51def FeatureMINMAX : SubtargetFeature<"minmax", "HasMINMAX", "true",52 "Enable Xtensa MINMAX option">;53def HasMINMAX : Predicate<"Subtarget->hasMINMAX()">,54 AssemblerPredicate<(all_of FeatureMINMAX)>;55 56def FeatureMul16 : SubtargetFeature<"mul16", "HasMul16", "true",57 "Enable Xtensa Mul16 option">;58def HasMul16 : Predicate<"Subtarget->hasMul16()">,59 AssemblerPredicate<(all_of FeatureMul16)>;60 61def FeatureMul32 : SubtargetFeature<"mul32", "HasMul32", "true",62 "Enable Xtensa Mul32 option">;63def HasMul32 : Predicate<"Subtarget->hasMul32()">,64 AssemblerPredicate<(all_of FeatureMul32)>;65 66def FeatureMul32High : SubtargetFeature<"mul32high", "HasMul32High", "true",67 "Enable Xtensa Mul32High option">;68def HasMul32High : Predicate<"Subtarget->hasMul32High()">,69 AssemblerPredicate<(all_of FeatureMul32High)>;70 71def FeatureDiv32 : SubtargetFeature<"div32", "HasDiv32", "true",72 "Enable Xtensa Div32 option">;73def HasDiv32 : Predicate<"Subtarget->hasDiv32()">,74 AssemblerPredicate<(all_of FeatureDiv32)>;75 76def FeatureS32C1I : SubtargetFeature<"s32c1i", "HasS32C1I", "true",77 "Enable Xtensa S32C1I option">;78def HasS32C1I : Predicate<"Subtarget->hasS32C1I()">,79 AssemblerPredicate<(all_of FeatureS32C1I)>;80 81// Assume that lock-free native-width atomics are available, even if the target82// and operating system combination would not usually provide them. The user83// is responsible for providing any necessary __sync implementations. Code84// built with this feature is not ABI-compatible with code built without this85// feature, if atomic variables are exposed across the ABI boundary.86def FeatureForcedAtomics : SubtargetFeature<"forced-atomics", "HasForcedAtomics", "true",87 "Assume that lock-free native-width atomics are available">;88def HasForcedAtomics : Predicate<"Subtarget->hasForcedAtomics()">,89 AssemblerPredicate<(all_of FeatureForcedAtomics)>;90def HasAtomicLdSt : Predicate<"Subtarget->hasS32C1I() || Subtarget->hasForcedAtomics()">;91 92def FeatureRegionProtection : SubtargetFeature<"regprotect", "HasRegionProtection", "true",93 "Enable Xtensa Region Protection option">;94def HasRegionProtection : Predicate<"Subtarget->hasRegionProtection()">,95 AssemblerPredicate<(all_of FeatureRegionProtection)>;96 97def FeatureRelocatableVector : SubtargetFeature<"rvector", "HasRelocatableVector", "true",98 "Enable Xtensa Relocatable Vector option">;99def HasRelocatableVector : Predicate<"Subtarget->hasRelocatableVector()">,100 AssemblerPredicate<(all_of FeatureRelocatableVector)>;101 102def FeatureMiscSR : SubtargetFeature<"miscsr", "HasMiscSR", "true",103 "Enable Xtensa Miscellaneous SR option">;104def HasMiscSR : Predicate<"Subtarget->hasMiscSR()">,105 AssemblerPredicate<(all_of FeatureMiscSR)>;106 107def FeatureExtendedL32R : SubtargetFeature<"extendedl32r", "HasExtendedL32R", "true",108 "Enable Xtensa Extended L32R option">;109def HasExtendedL32R : Predicate<"Subtarget->hasExtendedL32R()">,110 AssemblerPredicate<(all_of FeatureExtendedL32R)>;111 112def FeatureDataCache : SubtargetFeature<"dcache", "HasDataCache", "true",113 "Enable Xtensa Data Cache option">;114def HasDataCache : Predicate<"Subtarget->hasDataCache()">,115 AssemblerPredicate<(all_of FeatureDataCache)>;116 117def FeatureTHREADPTR : SubtargetFeature<"threadptr", "HasTHREADPTR", "true",118 "Enable Xtensa THREADPTR option">;119def HasTHREADPTR : Predicate<"Subtarget->hasTHREADPTR()">,120 AssemblerPredicate<(all_of FeatureTHREADPTR)>;121 122// Xtensa Interrupts Options.123def FeatureHighPriInterrupts : SubtargetFeature<"highpriinterrupts",124 "HasHighPriInterrupts", "true",125 "Enable Xtensa HighPriInterrupts option">;126def HasHighPriInterrupts : Predicate<"Subtarget->hasHighPriInterrupts()">,127 AssemblerPredicate<(all_of FeatureHighPriInterrupts)>;128 129foreach i = {3-7} in130 def FeatureHighPriInterruptsLevel#i : SubtargetFeature<"highpriinterrupts-level"#i,131 "HasHighPriInterruptsLevel"#i#"", "true", "Enable Xtensa HighPriInterrupts Level"#i, [FeatureHighPriInterrupts]>;132 133def FeatureInterrupt : SubtargetFeature<"interrupt", "HasInterrupt", "true",134 "Enable Xtensa Interrupt option">;135def HasInterrupt : Predicate<"Subtarget->hasInterrupt()">,136 AssemblerPredicate<(all_of FeatureInterrupt)>;137 138def FeatureException : SubtargetFeature<"exception", "HasException", "true",139 "Enable Xtensa Exception option">;140def HasException : Predicate<"Subtarget->hasException()">,141 AssemblerPredicate<(all_of FeatureException)>;142 143def FeatureDebug : SubtargetFeature<"debug", "HasDebug", "true",144 "Enable Xtensa Debug option">;145def HasDebug : Predicate<"Subtarget->hasDebug()">,146 AssemblerPredicate<(all_of FeatureDebug)>;147 148foreach i = {1-3} in149 def FeatureTimers#i : SubtargetFeature<"timers"#i,150 "HasTimers"#i#"", "true", "Enable Xtensa Timers "#i>;151 152def FeaturePRID : SubtargetFeature<"prid", "HasPRID", "true",153 "Enable Xtensa Processor ID option">;154def HasPRID : Predicate<"Subtarget->hasPRID()">,155 AssemblerPredicate<(all_of FeaturePRID)>;156 157def FeatureCoprocessor : SubtargetFeature<"coprocessor", "HasCoprocessor", "true",158 "Enable Xtensa Coprocessor option">;159def HasCoprocessor : Predicate<"Subtarget->hasCoprocessor()">,160 AssemblerPredicate<(all_of FeatureCoprocessor)>;161 162def FeatureDFPAccel : SubtargetFeature<"dfpaccel", "HasDFPAccel", "true",163 "Enable Xtensa Double Precision FP acceleration">;164def HasDFPAccel : Predicate<"Subtarget->hasDFPAccel()">,165 AssemblerPredicate<(all_of FeatureDFPAccel)>;166