xref: /freebsd/contrib/llvm-project/llvm/lib/Target/Xtensa/XtensaFeatures.td (revision 700637cbb5e582861067a11aaca4d053546871d2)
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