Files
clang-p2996/llvm/lib/Target/Xtensa/XtensaFeatures.td
Andrei Safronov 3dc09fbf29 [Xtensa] Implement THREADPTR and DFPAccel Xtensa Options. (#145543)
Implment base support of the TLS functionality using Xtensa THREADPTR
Option. Implement basic functionality of the DFPAccel Option(registers
support).
2025-07-02 17:47:07 +03:00

150 lines
7.9 KiB
TableGen

//===----------------------------------------------------------------------===//
// Xtensa subtarget features.
//===----------------------------------------------------------------------===//
// Xtensa ISA extensions (Xtensa Options).
def FeatureDensity : SubtargetFeature<"density", "HasDensity", "true",
"Enable Density instructions">;
def HasDensity : Predicate<"Subtarget->hasDensity()">,
AssemblerPredicate<(all_of FeatureDensity)>;
def FeatureSingleFloat : SubtargetFeature<"fp", "HasSingleFloat", "true",
"Enable Xtensa Single FP instructions">;
def HasSingleFloat : Predicate<"Subtarget->hasSingleFloat()">,
AssemblerPredicate<(all_of FeatureSingleFloat)>;
def FeatureWindowed : SubtargetFeature<"windowed", "HasWindowed", "true",
"Enable Xtensa Windowed Register option">;
def HasWindowed : Predicate<"Subtarget->hasWindowed()">,
AssemblerPredicate<(all_of FeatureWindowed)>;
def FeatureMAC16 : SubtargetFeature<"mac16", "HasMAC16", "true",
"Enable Xtensa MAC16 instructions">;
def HasMAC16 : Predicate<"Subtarget->hasMAC16()">,
AssemblerPredicate<(all_of FeatureMAC16)>;
def FeatureBoolean : SubtargetFeature<"bool", "HasBoolean", "true",
"Enable Xtensa Boolean extension">;
def HasBoolean : Predicate<"Subtarget->hasBoolean()">,
AssemblerPredicate<(all_of FeatureBoolean)>;
def FeatureLoop : SubtargetFeature<"loop", "HasLoop", "true",
"Enable Xtensa Loop extension">;
def HasLoop : Predicate<"Subtarget->hasLoop()">,
AssemblerPredicate<(all_of FeatureLoop)>;
def FeatureSEXT : SubtargetFeature<"sext", "HasSEXT", "true",
"Enable Xtensa Sign Extend option">;
def HasSEXT : Predicate<"Subtarget->hasSEXT()">,
AssemblerPredicate<(all_of FeatureSEXT)>;
def FeatureCLAMPS : SubtargetFeature<"clamps", "HasCLAMPS", "true",
"Enable Xtensa CLAMPS option">;
def HasCLAMPS : Predicate<"Subtarget->hasCLAMPS()">,
AssemblerPredicate<(all_of FeatureCLAMPS)>;
def FeatureNSA : SubtargetFeature<"nsa", "HasNSA", "true",
"Enable Xtensa NSA option">;
def HasNSA : Predicate<"Subtarget->hasNSA()">,
AssemblerPredicate<(all_of FeatureNSA)>;
def FeatureMINMAX : SubtargetFeature<"minmax", "HasMINMAX", "true",
"Enable Xtensa MINMAX option">;
def HasMINMAX : Predicate<"Subtarget->hasMINMAX()">,
AssemblerPredicate<(all_of FeatureMINMAX)>;
def FeatureMul16 : SubtargetFeature<"mul16", "HasMul16", "true",
"Enable Xtensa Mul16 option">;
def HasMul16 : Predicate<"Subtarget->hasMul16()">,
AssemblerPredicate<(all_of FeatureMul16)>;
def FeatureMul32 : SubtargetFeature<"mul32", "HasMul32", "true",
"Enable Xtensa Mul32 option">;
def HasMul32 : Predicate<"Subtarget->hasMul32()">,
AssemblerPredicate<(all_of FeatureMul32)>;
def FeatureMul32High : SubtargetFeature<"mul32high", "HasMul32High", "true",
"Enable Xtensa Mul32High option">;
def HasMul32High : Predicate<"Subtarget->hasMul32High()">,
AssemblerPredicate<(all_of FeatureMul32High)>;
def FeatureDiv32 : SubtargetFeature<"div32", "HasDiv32", "true",
"Enable Xtensa Div32 option">;
def HasDiv32 : Predicate<"Subtarget->hasDiv32()">,
AssemblerPredicate<(all_of FeatureDiv32)>;
def FeatureRegionProtection : SubtargetFeature<"regprotect", "HasRegionProtection", "true",
"Enable Xtensa Region Protection option">;
def HasRegionProtection : Predicate<"Subtarget->hasRegionProtection()">,
AssemblerPredicate<(all_of FeatureRegionProtection)>;
def FeatureRelocatableVector : SubtargetFeature<"rvector", "HasRelocatableVector", "true",
"Enable Xtensa Relocatable Vector option">;
def HasRelocatableVector : Predicate<"Subtarget->hasRelocatableVector()">,
AssemblerPredicate<(all_of FeatureRelocatableVector)>;
def FeatureMiscSR : SubtargetFeature<"miscsr", "HasMiscSR", "true",
"Enable Xtensa Miscellaneous SR option">;
def HasMiscSR : Predicate<"Subtarget->hasMiscSR()">,
AssemblerPredicate<(all_of FeatureMiscSR)>;
def FeatureExtendedL32R : SubtargetFeature<"extendedl32r", "HasExtendedL32R", "true",
"Enable Xtensa Extended L32R option">;
def HasExtendedL32R : Predicate<"Subtarget->hasExtendedL32R()">,
AssemblerPredicate<(all_of FeatureExtendedL32R)>;
def FeatureDataCache : SubtargetFeature<"dcache", "HasDataCache", "true",
"Enable Xtensa Data Cache option">;
def HasDataCache : Predicate<"Subtarget->hasDataCache()">,
AssemblerPredicate<(all_of FeatureDataCache)>;
def FeatureTHREADPTR : SubtargetFeature<"threadptr", "HasTHREADPTR", "true",
"Enable Xtensa THREADPTR option">;
def HasTHREADPTR : Predicate<"Subtarget->hasTHREADPTR()">,
AssemblerPredicate<(all_of FeatureTHREADPTR)>;
// Xtensa Interrupts Options.
def FeatureHighPriInterrupts : SubtargetFeature<"highpriinterrupts",
"HasHighPriInterrupts", "true",
"Enable Xtensa HighPriInterrupts option">;
def HasHighPriInterrupts : Predicate<"Subtarget->hasHighPriInterrupts()">,
AssemblerPredicate<(all_of FeatureHighPriInterrupts)>;
foreach i = {3-7} in
def FeatureHighPriInterruptsLevel#i : SubtargetFeature<"highpriinterrupts-level"#i,
"HasHighPriInterruptsLevel"#i#"", "true", "Enable Xtensa HighPriInterrupts Level"#i, [FeatureHighPriInterrupts]>;
def FeatureInterrupt : SubtargetFeature<"interrupt", "HasInterrupt", "true",
"Enable Xtensa Interrupt option">;
def HasInterrupt : Predicate<"Subtarget->hasInterrupt()">,
AssemblerPredicate<(all_of FeatureInterrupt)>;
def FeatureException : SubtargetFeature<"exception", "HasException", "true",
"Enable Xtensa Exception option">;
def HasException : Predicate<"Subtarget->hasException()">,
AssemblerPredicate<(all_of FeatureException)>;
def FeatureDebug : SubtargetFeature<"debug", "HasDebug", "true",
"Enable Xtensa Debug option">;
def HasDebug : Predicate<"Subtarget->hasDebug()">,
AssemblerPredicate<(all_of FeatureDebug)>;
foreach i = {1-3} in
def FeatureTimers#i : SubtargetFeature<"timers"#i,
"HasTimers"#i#"", "true", "Enable Xtensa Timers "#i>;
def FeaturePRID : SubtargetFeature<"prid", "HasPRID", "true",
"Enable Xtensa Processor ID option">;
def HasPRID : Predicate<"Subtarget->hasPRID()">,
AssemblerPredicate<(all_of FeaturePRID)>;
def FeatureCoprocessor : SubtargetFeature<"coprocessor", "HasCoprocessor", "true",
"Enable Xtensa Coprocessor option">;
def HasCoprocessor : Predicate<"Subtarget->hasCoprocessor()">,
AssemblerPredicate<(all_of FeatureCoprocessor)>;
def FeatureDFPAccel : SubtargetFeature<"dfpaccel", "HasDFPAccel", "true",
"Enable Xtensa Double Precision FP acceleration">;
def HasDFPAccel : Predicate<"Subtarget->hasDFPAccel()">,
AssemblerPredicate<(all_of FeatureDFPAccel)>;