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 FeatureRegionProtection : SubtargetFeature<"regprotect", "HasRegionProtection", "true", 77 "Enable Xtensa Region Protection option">; 78def HasRegionProtection : Predicate<"Subtarget->hasRegionProtection()">, 79 AssemblerPredicate<(all_of FeatureRegionProtection)>; 80 81def FeatureRelocatableVector : SubtargetFeature<"rvector", "HasRelocatableVector", "true", 82 "Enable Xtensa Relocatable Vector option">; 83def HasRelocatableVector : Predicate<"Subtarget->hasRelocatableVector()">, 84 AssemblerPredicate<(all_of FeatureRelocatableVector)>; 85 86def FeatureMiscSR : SubtargetFeature<"miscsr", "HasMiscSR", "true", 87 "Enable Xtensa Miscellaneous SR option">; 88def HasMiscSR : Predicate<"Subtarget->hasMiscSR()">, 89 AssemblerPredicate<(all_of FeatureMiscSR)>; 90 91def FeatureExtendedL32R : SubtargetFeature<"extendedl32r", "HasExtendedL32R", "true", 92 "Enable Xtensa Extended L32R option">; 93def HasExtendedL32R : Predicate<"Subtarget->hasExtendedL32R()">, 94 AssemblerPredicate<(all_of FeatureExtendedL32R)>; 95 96def FeatureDataCache : SubtargetFeature<"dcache", "HasDataCache", "true", 97 "Enable Xtensa Data Cache option">; 98def HasDataCache : Predicate<"Subtarget->hasDataCache()">, 99 AssemblerPredicate<(all_of FeatureDataCache)>; 100 101def FeatureTHREADPTR : SubtargetFeature<"threadptr", "HasTHREADPTR", "true", 102 "Enable Xtensa THREADPTR option">; 103def HasTHREADPTR : Predicate<"Subtarget->hasTHREADPTR()">, 104 AssemblerPredicate<(all_of FeatureTHREADPTR)>; 105 106// Xtensa Interrupts Options. 107def FeatureHighPriInterrupts : SubtargetFeature<"highpriinterrupts", 108 "HasHighPriInterrupts", "true", 109 "Enable Xtensa HighPriInterrupts option">; 110def HasHighPriInterrupts : Predicate<"Subtarget->hasHighPriInterrupts()">, 111 AssemblerPredicate<(all_of FeatureHighPriInterrupts)>; 112 113foreach i = {3-7} in 114 def FeatureHighPriInterruptsLevel#i : SubtargetFeature<"highpriinterrupts-level"#i, 115 "HasHighPriInterruptsLevel"#i#"", "true", "Enable Xtensa HighPriInterrupts Level"#i, [FeatureHighPriInterrupts]>; 116 117def FeatureInterrupt : SubtargetFeature<"interrupt", "HasInterrupt", "true", 118 "Enable Xtensa Interrupt option">; 119def HasInterrupt : Predicate<"Subtarget->hasInterrupt()">, 120 AssemblerPredicate<(all_of FeatureInterrupt)>; 121 122def FeatureException : SubtargetFeature<"exception", "HasException", "true", 123 "Enable Xtensa Exception option">; 124def HasException : Predicate<"Subtarget->hasException()">, 125 AssemblerPredicate<(all_of FeatureException)>; 126 127def FeatureDebug : SubtargetFeature<"debug", "HasDebug", "true", 128 "Enable Xtensa Debug option">; 129def HasDebug : Predicate<"Subtarget->hasDebug()">, 130 AssemblerPredicate<(all_of FeatureDebug)>; 131 132foreach i = {1-3} in 133 def FeatureTimers#i : SubtargetFeature<"timers"#i, 134 "HasTimers"#i#"", "true", "Enable Xtensa Timers "#i>; 135 136def FeaturePRID : SubtargetFeature<"prid", "HasPRID", "true", 137 "Enable Xtensa Processor ID option">; 138def HasPRID : Predicate<"Subtarget->hasPRID()">, 139 AssemblerPredicate<(all_of FeaturePRID)>; 140 141def FeatureCoprocessor : SubtargetFeature<"coprocessor", "HasCoprocessor", "true", 142 "Enable Xtensa Coprocessor option">; 143def HasCoprocessor : Predicate<"Subtarget->hasCoprocessor()">, 144 AssemblerPredicate<(all_of FeatureCoprocessor)>; 145 146def FeatureDFPAccel : SubtargetFeature<"dfpaccel", "HasDFPAccel", "true", 147 "Enable Xtensa Double Precision FP acceleration">; 148def HasDFPAccel : Predicate<"Subtarget->hasDFPAccel()">, 149 AssemblerPredicate<(all_of FeatureDFPAccel)>; 150