xref: /aosp_15_r20/external/llvm/lib/Target/ARM/ARM.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- ARM.td - Describe the ARM Target Machine -----------*- tablegen -*-===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker//
11*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
14*9880d681SAndroid Build Coastguard Worker// Target-independent interfaces which we are implementing
15*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerinclude "llvm/Target/Target.td"
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
20*9880d681SAndroid Build Coastguard Worker// ARM Helper classes.
21*9880d681SAndroid Build Coastguard Worker//
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerclass ProcNoItin<string Name, list<SubtargetFeature> Features>
24*9880d681SAndroid Build Coastguard Worker : Processor<Name, NoItineraries, Features>;
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerclass Architecture<string fname, string aname, list<SubtargetFeature> features >
27*9880d681SAndroid Build Coastguard Worker  : SubtargetFeature<fname, "ARMArch", aname,
28*9880d681SAndroid Build Coastguard Worker                     !strconcat(aname, " architecture"), features>;
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
31*9880d681SAndroid Build Coastguard Worker// ARM Subtarget state.
32*9880d681SAndroid Build Coastguard Worker//
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdef ModeThumb  : SubtargetFeature<"thumb-mode", "InThumbMode", "true",
35*9880d681SAndroid Build Coastguard Worker                                  "Thumb mode">;
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdef ModeSoftFloat : SubtargetFeature<"soft-float", "UseSoftFloat", "true",
38*9880d681SAndroid Build Coastguard Worker                                     "Use software floating point features.">;
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
41*9880d681SAndroid Build Coastguard Worker// ARM Subtarget features.
42*9880d681SAndroid Build Coastguard Worker//
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Workerdef FeatureVFP2 : SubtargetFeature<"vfp2", "HasVFPv2", "true",
45*9880d681SAndroid Build Coastguard Worker                                   "Enable VFP2 instructions">;
46*9880d681SAndroid Build Coastguard Workerdef FeatureVFP3 : SubtargetFeature<"vfp3", "HasVFPv3", "true",
47*9880d681SAndroid Build Coastguard Worker                                   "Enable VFP3 instructions",
48*9880d681SAndroid Build Coastguard Worker                                   [FeatureVFP2]>;
49*9880d681SAndroid Build Coastguard Workerdef FeatureNEON : SubtargetFeature<"neon", "HasNEON", "true",
50*9880d681SAndroid Build Coastguard Worker                                   "Enable NEON instructions",
51*9880d681SAndroid Build Coastguard Worker                                   [FeatureVFP3]>;
52*9880d681SAndroid Build Coastguard Workerdef FeatureThumb2 : SubtargetFeature<"thumb2", "HasThumb2", "true",
53*9880d681SAndroid Build Coastguard Worker                                     "Enable Thumb2 instructions">;
54*9880d681SAndroid Build Coastguard Workerdef FeatureNoARM  : SubtargetFeature<"noarm", "NoARM", "true",
55*9880d681SAndroid Build Coastguard Worker                                     "Does not support ARM mode execution",
56*9880d681SAndroid Build Coastguard Worker                                     [ModeThumb]>;
57*9880d681SAndroid Build Coastguard Workerdef FeatureFP16   : SubtargetFeature<"fp16", "HasFP16", "true",
58*9880d681SAndroid Build Coastguard Worker                                     "Enable half-precision floating point">;
59*9880d681SAndroid Build Coastguard Workerdef FeatureVFP4   : SubtargetFeature<"vfp4", "HasVFPv4", "true",
60*9880d681SAndroid Build Coastguard Worker                                     "Enable VFP4 instructions",
61*9880d681SAndroid Build Coastguard Worker                                     [FeatureVFP3, FeatureFP16]>;
62*9880d681SAndroid Build Coastguard Workerdef FeatureFPARMv8 : SubtargetFeature<"fp-armv8", "HasFPARMv8",
63*9880d681SAndroid Build Coastguard Worker                                   "true", "Enable ARMv8 FP",
64*9880d681SAndroid Build Coastguard Worker                                   [FeatureVFP4]>;
65*9880d681SAndroid Build Coastguard Workerdef FeatureFullFP16 : SubtargetFeature<"fullfp16", "HasFullFP16", "true",
66*9880d681SAndroid Build Coastguard Worker                                       "Enable full half-precision floating point",
67*9880d681SAndroid Build Coastguard Worker                                       [FeatureFPARMv8]>;
68*9880d681SAndroid Build Coastguard Workerdef FeatureD16    : SubtargetFeature<"d16", "HasD16", "true",
69*9880d681SAndroid Build Coastguard Worker                                     "Restrict FP to 16 double registers">;
70*9880d681SAndroid Build Coastguard Workerdef FeatureHWDiv  : SubtargetFeature<"hwdiv", "HasHardwareDivide", "true",
71*9880d681SAndroid Build Coastguard Worker                                     "Enable divide instructions">;
72*9880d681SAndroid Build Coastguard Workerdef FeatureHWDivARM  : SubtargetFeature<"hwdiv-arm",
73*9880d681SAndroid Build Coastguard Worker                                        "HasHardwareDivideInARM", "true",
74*9880d681SAndroid Build Coastguard Worker                                      "Enable divide instructions in ARM mode">;
75*9880d681SAndroid Build Coastguard Workerdef FeatureT2XtPk : SubtargetFeature<"t2xtpk", "HasT2ExtractPack", "true",
76*9880d681SAndroid Build Coastguard Worker                                 "Enable Thumb2 extract and pack instructions">;
77*9880d681SAndroid Build Coastguard Workerdef FeatureDB     : SubtargetFeature<"db", "HasDataBarrier", "true",
78*9880d681SAndroid Build Coastguard Worker                                   "Has data barrier (dmb / dsb) instructions">;
79*9880d681SAndroid Build Coastguard Workerdef FeatureV7Clrex : SubtargetFeature<"v7clrex", "HasV7Clrex", "true",
80*9880d681SAndroid Build Coastguard Worker                                      "Has v7 clrex instruction">;
81*9880d681SAndroid Build Coastguard Workerdef FeatureAcquireRelease : SubtargetFeature<"acquire-release",
82*9880d681SAndroid Build Coastguard Worker                                             "HasAcquireRelease", "true",
83*9880d681SAndroid Build Coastguard Worker                         "Has v8 acquire/release (lda/ldaex etc) instructions">;
84*9880d681SAndroid Build Coastguard Workerdef FeatureSlowFPBrcc : SubtargetFeature<"slow-fp-brcc", "SlowFPBrcc", "true",
85*9880d681SAndroid Build Coastguard Worker                                         "FP compare + branch is slow">;
86*9880d681SAndroid Build Coastguard Workerdef FeatureVFPOnlySP : SubtargetFeature<"fp-only-sp", "FPOnlySP", "true",
87*9880d681SAndroid Build Coastguard Worker                          "Floating point unit supports single precision only">;
88*9880d681SAndroid Build Coastguard Workerdef FeaturePerfMon : SubtargetFeature<"perfmon", "HasPerfMon", "true",
89*9880d681SAndroid Build Coastguard Worker                           "Enable support for Performance Monitor extensions">;
90*9880d681SAndroid Build Coastguard Workerdef FeatureTrustZone : SubtargetFeature<"trustzone", "HasTrustZone", "true",
91*9880d681SAndroid Build Coastguard Worker                          "Enable support for TrustZone security extensions">;
92*9880d681SAndroid Build Coastguard Workerdef Feature8MSecExt : SubtargetFeature<"8msecext", "Has8MSecExt", "true",
93*9880d681SAndroid Build Coastguard Worker                          "Enable support for ARMv8-M Security Extensions">;
94*9880d681SAndroid Build Coastguard Workerdef FeatureCrypto : SubtargetFeature<"crypto", "HasCrypto", "true",
95*9880d681SAndroid Build Coastguard Worker                          "Enable support for Cryptography extensions",
96*9880d681SAndroid Build Coastguard Worker                          [FeatureNEON]>;
97*9880d681SAndroid Build Coastguard Workerdef FeatureCRC : SubtargetFeature<"crc", "HasCRC", "true",
98*9880d681SAndroid Build Coastguard Worker                          "Enable support for CRC instructions">;
99*9880d681SAndroid Build Coastguard Worker// Not to be confused with FeatureHasRetAddrStack (return address stack)
100*9880d681SAndroid Build Coastguard Workerdef FeatureRAS : SubtargetFeature<"ras", "HasRAS", "true",
101*9880d681SAndroid Build Coastguard Worker                "Enable Reliability, Availability and Serviceability extensions">;
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Worker// Cyclone has preferred instructions for zeroing VFP registers, which can
105*9880d681SAndroid Build Coastguard Worker// execute in 0 cycles.
106*9880d681SAndroid Build Coastguard Workerdef FeatureZCZeroing : SubtargetFeature<"zcz", "HasZeroCycleZeroing", "true",
107*9880d681SAndroid Build Coastguard Worker                                        "Has zero-cycle zeroing instructions">;
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker// Whether or not it may be profitable to unpredicate certain instructions
110*9880d681SAndroid Build Coastguard Worker// during if conversion.
111*9880d681SAndroid Build Coastguard Workerdef FeatureProfUnpredicate : SubtargetFeature<"prof-unpr",
112*9880d681SAndroid Build Coastguard Worker                                              "IsProfitableToUnpredicate",
113*9880d681SAndroid Build Coastguard Worker                                              "true",
114*9880d681SAndroid Build Coastguard Worker                                              "Is profitable to unpredicate">;
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker// Some targets (e.g. Swift) have microcoded VGETLNi32.
117*9880d681SAndroid Build Coastguard Workerdef FeatureSlowVGETLNi32 : SubtargetFeature<"slow-vgetlni32",
118*9880d681SAndroid Build Coastguard Worker                                            "HasSlowVGETLNi32", "true",
119*9880d681SAndroid Build Coastguard Worker                                            "Has slow VGETLNi32 - prefer VMOV">;
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker// Some targets (e.g. Swift) have microcoded VDUP32.
122*9880d681SAndroid Build Coastguard Workerdef FeatureSlowVDUP32 : SubtargetFeature<"slow-vdup32", "HasSlowVDUP32", "true",
123*9880d681SAndroid Build Coastguard Worker                                         "Has slow VDUP32 - prefer VMOV">;
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Worker// Some targets (e.g. Cortex-A9) prefer VMOVSR to VMOVDRR even when using NEON
126*9880d681SAndroid Build Coastguard Worker// for scalar FP, as this allows more effective execution domain optimization.
127*9880d681SAndroid Build Coastguard Workerdef FeaturePreferVMOVSR : SubtargetFeature<"prefer-vmovsr", "PreferVMOVSR",
128*9880d681SAndroid Build Coastguard Worker                                           "true", "Prefer VMOVSR">;
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker// Swift has ISHST barriers compatible with Atomic Release semantics but weaker
131*9880d681SAndroid Build Coastguard Worker// than ISH
132*9880d681SAndroid Build Coastguard Workerdef FeaturePrefISHSTBarrier : SubtargetFeature<"prefer-ishst", "PreferISHST",
133*9880d681SAndroid Build Coastguard Worker                                           "true", "Prefer ISHST barriers">;
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker// Some targets (e.g. Cortex-A9) have muxed AGU and NEON/FPU.
136*9880d681SAndroid Build Coastguard Workerdef FeatureMuxedUnits : SubtargetFeature<"muxed-units", "HasMuxedUnits", "true",
137*9880d681SAndroid Build Coastguard Worker                                         "Has muxed AGU and NEON/FPU">;
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker// On some targets, a VLDM/VSTM starting with an odd register number needs more
140*9880d681SAndroid Build Coastguard Worker// microops than single VLDRS.
141*9880d681SAndroid Build Coastguard Workerdef FeatureSlowOddRegister : SubtargetFeature<"slow-odd-reg", "SlowOddRegister",
142*9880d681SAndroid Build Coastguard Worker                     "true", "VLDM/VSTM starting with an odd register is slow">;
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Worker// Some targets have a renaming dependency when loading into D subregisters.
145*9880d681SAndroid Build Coastguard Workerdef FeatureSlowLoadDSubreg : SubtargetFeature<"slow-load-D-subreg",
146*9880d681SAndroid Build Coastguard Worker                                              "SlowLoadDSubregister", "true",
147*9880d681SAndroid Build Coastguard Worker                                              "Loading into D subregs is slow">;
148*9880d681SAndroid Build Coastguard Worker// Some targets (e.g. Cortex-A15) never want VMOVS to be widened to VMOVD.
149*9880d681SAndroid Build Coastguard Workerdef FeatureDontWidenVMOVS : SubtargetFeature<"dont-widen-vmovs",
150*9880d681SAndroid Build Coastguard Worker                                             "DontWidenVMOVS", "true",
151*9880d681SAndroid Build Coastguard Worker                                             "Don't widen VMOVS to VMOVD">;
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker// Whether or not it is profitable to expand VFP/NEON MLA/MLS instructions.
154*9880d681SAndroid Build Coastguard Workerdef FeatureExpandMLx : SubtargetFeature<"expand-fp-mlx", "ExpandMLx", "true",
155*9880d681SAndroid Build Coastguard Worker                                        "Expand VFP/NEON MLA/MLS instructions">;
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Worker// Some targets have special RAW hazards for VFP/NEON VMLA/VMLS.
158*9880d681SAndroid Build Coastguard Workerdef FeatureHasVMLxHazards : SubtargetFeature<"vmlx-hazards", "HasVMLxHazards",
159*9880d681SAndroid Build Coastguard Worker                                             "true", "Has VMLx hazards">;
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker// Some targets (e.g. Cortex-A9) want to convert VMOVRS, VMOVSR and VMOVS from
162*9880d681SAndroid Build Coastguard Worker// VFP to NEON, as an execution domain optimization.
163*9880d681SAndroid Build Coastguard Workerdef FeatureNEONForFPMovs : SubtargetFeature<"neon-fpmovs", "UseNEONForFPMovs",
164*9880d681SAndroid Build Coastguard Worker                              "true", "Convert VMOVSR, VMOVRS, VMOVS to NEON">;
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker// Some processors benefit from using NEON instructions for scalar
167*9880d681SAndroid Build Coastguard Worker// single-precision FP operations. This affects instruction selection and should
168*9880d681SAndroid Build Coastguard Worker// only be enabled if the handling of denormals is not important.
169*9880d681SAndroid Build Coastguard Workerdef FeatureNEONForFP : SubtargetFeature<"neonfp", "UseNEONForSinglePrecisionFP",
170*9880d681SAndroid Build Coastguard Worker                                        "true",
171*9880d681SAndroid Build Coastguard Worker                                        "Use NEON for single precision FP">;
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker// On some processors, VLDn instructions that access unaligned data take one
174*9880d681SAndroid Build Coastguard Worker// extra cycle. Take that into account when computing operand latencies.
175*9880d681SAndroid Build Coastguard Workerdef FeatureCheckVLDnAlign : SubtargetFeature<"vldn-align", "CheckVLDnAlign",
176*9880d681SAndroid Build Coastguard Worker                                             "true",
177*9880d681SAndroid Build Coastguard Worker                                             "Check for VLDn unaligned access">;
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker// Some processors have a nonpipelined VFP coprocessor.
180*9880d681SAndroid Build Coastguard Workerdef FeatureNonpipelinedVFP : SubtargetFeature<"nonpipelined-vfp",
181*9880d681SAndroid Build Coastguard Worker                                              "NonpipelinedVFP", "true",
182*9880d681SAndroid Build Coastguard Worker                                          "VFP instructions are not pipelined">;
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker// Some processors have FP multiply-accumulate instructions that don't
185*9880d681SAndroid Build Coastguard Worker// play nicely with other VFP / NEON instructions, and it's generally better
186*9880d681SAndroid Build Coastguard Worker// to just not use them.
187*9880d681SAndroid Build Coastguard Workerdef FeatureHasSlowFPVMLx : SubtargetFeature<"slowfpvmlx", "SlowFPVMLx", "true",
188*9880d681SAndroid Build Coastguard Worker                                         "Disable VFP / NEON MAC instructions">;
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker// Cortex-A8 / A9 Advanced SIMD has multiplier accumulator forwarding.
191*9880d681SAndroid Build Coastguard Workerdef FeatureVMLxForwarding : SubtargetFeature<"vmlx-forwarding",
192*9880d681SAndroid Build Coastguard Worker                                       "HasVMLxForwarding", "true",
193*9880d681SAndroid Build Coastguard Worker                                       "Has multiplier accumulator forwarding">;
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker// Disable 32-bit to 16-bit narrowing for experimentation.
196*9880d681SAndroid Build Coastguard Workerdef FeaturePref32BitThumb : SubtargetFeature<"32bit", "Pref32BitThumb", "true",
197*9880d681SAndroid Build Coastguard Worker                                             "Prefer 32-bit Thumb instrs">;
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker/// Some instructions update CPSR partially, which can add false dependency for
200*9880d681SAndroid Build Coastguard Worker/// out-of-order implementation, e.g. Cortex-A9, unless each individual bit is
201*9880d681SAndroid Build Coastguard Worker/// mapped to a separate physical register. Avoid partial CPSR update for these
202*9880d681SAndroid Build Coastguard Worker/// processors.
203*9880d681SAndroid Build Coastguard Workerdef FeatureAvoidPartialCPSR : SubtargetFeature<"avoid-partial-cpsr",
204*9880d681SAndroid Build Coastguard Worker                                               "AvoidCPSRPartialUpdate", "true",
205*9880d681SAndroid Build Coastguard Worker                                 "Avoid CPSR partial update for OOO execution">;
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdef FeatureAvoidMOVsShOp : SubtargetFeature<"avoid-movs-shop",
208*9880d681SAndroid Build Coastguard Worker                                            "AvoidMOVsShifterOperand", "true",
209*9880d681SAndroid Build Coastguard Worker                                "Avoid movs instructions with shifter operand">;
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker// Some processors perform return stack prediction. CodeGen should avoid issue
212*9880d681SAndroid Build Coastguard Worker// "normal" call instructions to callees which do not return.
213*9880d681SAndroid Build Coastguard Workerdef FeatureHasRetAddrStack : SubtargetFeature<"ret-addr-stack", "HasRetAddrStack", "true",
214*9880d681SAndroid Build Coastguard Worker                                     "Has return address stack">;
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Worker/// DSP extension.
217*9880d681SAndroid Build Coastguard Workerdef FeatureDSP : SubtargetFeature<"dsp", "HasDSP", "true",
218*9880d681SAndroid Build Coastguard Worker                              "Supports DSP instructions in ARM and/or Thumb2">;
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker// Multiprocessing extension.
221*9880d681SAndroid Build Coastguard Workerdef FeatureMP : SubtargetFeature<"mp", "HasMPExtension", "true",
222*9880d681SAndroid Build Coastguard Worker                                 "Supports Multiprocessing extension">;
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker// Virtualization extension - requires HW divide (ARMv7-AR ARMARM - 4.4.8).
225*9880d681SAndroid Build Coastguard Workerdef FeatureVirtualization : SubtargetFeature<"virtualization",
226*9880d681SAndroid Build Coastguard Worker                                 "HasVirtualization", "true",
227*9880d681SAndroid Build Coastguard Worker                                 "Supports Virtualization extension",
228*9880d681SAndroid Build Coastguard Worker                                 [FeatureHWDiv, FeatureHWDivARM]>;
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Worker// M-series ISA
231*9880d681SAndroid Build Coastguard Workerdef FeatureMClass : SubtargetFeature<"mclass", "ARMProcClass", "MClass",
232*9880d681SAndroid Build Coastguard Worker                                     "Is microcontroller profile ('M' series)">;
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker// R-series ISA
235*9880d681SAndroid Build Coastguard Workerdef FeatureRClass : SubtargetFeature<"rclass", "ARMProcClass", "RClass",
236*9880d681SAndroid Build Coastguard Worker                                     "Is realtime profile ('R' series)">;
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Worker// A-series ISA
239*9880d681SAndroid Build Coastguard Workerdef FeatureAClass : SubtargetFeature<"aclass", "ARMProcClass", "AClass",
240*9880d681SAndroid Build Coastguard Worker                                     "Is application profile ('A' series)">;
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Worker// Special TRAP encoding for NaCl, which looks like a TRAP in Thumb too.
243*9880d681SAndroid Build Coastguard Worker// See ARMInstrInfo.td for details.
244*9880d681SAndroid Build Coastguard Workerdef FeatureNaClTrap : SubtargetFeature<"nacl-trap", "UseNaClTrap", "true",
245*9880d681SAndroid Build Coastguard Worker                                       "NaCl trap">;
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Workerdef FeatureStrictAlign : SubtargetFeature<"strict-align",
248*9880d681SAndroid Build Coastguard Worker                                          "StrictAlign", "true",
249*9880d681SAndroid Build Coastguard Worker                                          "Disallow all unaligned memory "
250*9880d681SAndroid Build Coastguard Worker                                          "access">;
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Workerdef FeatureLongCalls : SubtargetFeature<"long-calls", "GenLongCalls", "true",
253*9880d681SAndroid Build Coastguard Worker                                        "Generate calls via indirect call "
254*9880d681SAndroid Build Coastguard Worker                                        "instructions">;
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Workerdef FeatureReserveR9 : SubtargetFeature<"reserve-r9", "ReserveR9", "true",
257*9880d681SAndroid Build Coastguard Worker                                        "Reserve R9, making it unavailable as "
258*9880d681SAndroid Build Coastguard Worker                                        "GPR">;
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Workerdef FeatureNoMovt : SubtargetFeature<"no-movt", "NoMovt", "true",
261*9880d681SAndroid Build Coastguard Worker                                     "Don't use movt/movw pairs for 32-bit "
262*9880d681SAndroid Build Coastguard Worker                                     "imms">;
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
266*9880d681SAndroid Build Coastguard Worker// ARM ISAa.
267*9880d681SAndroid Build Coastguard Worker//
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Workerdef HasV4TOps   : SubtargetFeature<"v4t", "HasV4TOps", "true",
270*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v4T instructions">;
271*9880d681SAndroid Build Coastguard Workerdef HasV5TOps   : SubtargetFeature<"v5t", "HasV5TOps", "true",
272*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v5T instructions",
273*9880d681SAndroid Build Coastguard Worker                                   [HasV4TOps]>;
274*9880d681SAndroid Build Coastguard Workerdef HasV5TEOps  : SubtargetFeature<"v5te", "HasV5TEOps", "true",
275*9880d681SAndroid Build Coastguard Worker                             "Support ARM v5TE, v5TEj, and v5TExp instructions",
276*9880d681SAndroid Build Coastguard Worker                                   [HasV5TOps]>;
277*9880d681SAndroid Build Coastguard Workerdef HasV6Ops    : SubtargetFeature<"v6", "HasV6Ops", "true",
278*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v6 instructions",
279*9880d681SAndroid Build Coastguard Worker                                   [HasV5TEOps]>;
280*9880d681SAndroid Build Coastguard Workerdef HasV6MOps   : SubtargetFeature<"v6m", "HasV6MOps", "true",
281*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v6M instructions",
282*9880d681SAndroid Build Coastguard Worker                                   [HasV6Ops]>;
283*9880d681SAndroid Build Coastguard Workerdef HasV8MBaselineOps : SubtargetFeature<"v8m", "HasV8MBaselineOps", "true",
284*9880d681SAndroid Build Coastguard Worker                                         "Support ARM v8M Baseline instructions",
285*9880d681SAndroid Build Coastguard Worker                                         [HasV6MOps]>;
286*9880d681SAndroid Build Coastguard Workerdef HasV6KOps   : SubtargetFeature<"v6k", "HasV6KOps", "true",
287*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v6k instructions",
288*9880d681SAndroid Build Coastguard Worker                                   [HasV6Ops]>;
289*9880d681SAndroid Build Coastguard Workerdef HasV6T2Ops  : SubtargetFeature<"v6t2", "HasV6T2Ops", "true",
290*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v6t2 instructions",
291*9880d681SAndroid Build Coastguard Worker                                   [HasV8MBaselineOps, HasV6KOps, FeatureThumb2]>;
292*9880d681SAndroid Build Coastguard Workerdef HasV7Ops    : SubtargetFeature<"v7", "HasV7Ops", "true",
293*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v7 instructions",
294*9880d681SAndroid Build Coastguard Worker                                   [HasV6T2Ops, FeaturePerfMon,
295*9880d681SAndroid Build Coastguard Worker                                    FeatureV7Clrex]>;
296*9880d681SAndroid Build Coastguard Workerdef HasV8Ops    : SubtargetFeature<"v8", "HasV8Ops", "true",
297*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v8 instructions",
298*9880d681SAndroid Build Coastguard Worker                                   [HasV7Ops, FeatureAcquireRelease]>;
299*9880d681SAndroid Build Coastguard Workerdef HasV8_1aOps : SubtargetFeature<"v8.1a", "HasV8_1aOps", "true",
300*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v8.1a instructions",
301*9880d681SAndroid Build Coastguard Worker                                   [HasV8Ops]>;
302*9880d681SAndroid Build Coastguard Workerdef HasV8_2aOps   : SubtargetFeature<"v8.2a", "HasV8_2aOps", "true",
303*9880d681SAndroid Build Coastguard Worker                                   "Support ARM v8.2a instructions",
304*9880d681SAndroid Build Coastguard Worker                                   [HasV8_1aOps]>;
305*9880d681SAndroid Build Coastguard Workerdef HasV8MMainlineOps : SubtargetFeature<"v8m.main", "HasV8MMainlineOps", "true",
306*9880d681SAndroid Build Coastguard Worker                                         "Support ARM v8M Mainline instructions",
307*9880d681SAndroid Build Coastguard Worker                                         [HasV7Ops]>;
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
311*9880d681SAndroid Build Coastguard Worker// ARM Processor subtarget features.
312*9880d681SAndroid Build Coastguard Worker//
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdef ProcA5      : SubtargetFeature<"a5", "ARMProcFamily", "CortexA5",
315*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A5 ARM processors", []>;
316*9880d681SAndroid Build Coastguard Workerdef ProcA7      : SubtargetFeature<"a7", "ARMProcFamily", "CortexA7",
317*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A7 ARM processors", []>;
318*9880d681SAndroid Build Coastguard Workerdef ProcA8      : SubtargetFeature<"a8", "ARMProcFamily", "CortexA8",
319*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A8 ARM processors", []>;
320*9880d681SAndroid Build Coastguard Workerdef ProcA9      : SubtargetFeature<"a9", "ARMProcFamily", "CortexA9",
321*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A9 ARM processors", []>;
322*9880d681SAndroid Build Coastguard Workerdef ProcA12     : SubtargetFeature<"a12", "ARMProcFamily", "CortexA12",
323*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A12 ARM processors", []>;
324*9880d681SAndroid Build Coastguard Workerdef ProcA15     : SubtargetFeature<"a15", "ARMProcFamily", "CortexA15",
325*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A15 ARM processors", []>;
326*9880d681SAndroid Build Coastguard Workerdef ProcA17     : SubtargetFeature<"a17", "ARMProcFamily", "CortexA17",
327*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A17 ARM processors", []>;
328*9880d681SAndroid Build Coastguard Workerdef ProcA32     : SubtargetFeature<"a32", "ARMProcFamily", "CortexA32",
329*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A32 ARM processors", []>;
330*9880d681SAndroid Build Coastguard Workerdef ProcA35     : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35",
331*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A35 ARM processors", []>;
332*9880d681SAndroid Build Coastguard Workerdef ProcA53     : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53",
333*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A53 ARM processors", []>;
334*9880d681SAndroid Build Coastguard Workerdef ProcA57     : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57",
335*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A57 ARM processors", []>;
336*9880d681SAndroid Build Coastguard Workerdef ProcA72     : SubtargetFeature<"a72", "ARMProcFamily", "CortexA72",
337*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A72 ARM processors", []>;
338*9880d681SAndroid Build Coastguard Workerdef ProcA73     : SubtargetFeature<"a73", "ARMProcFamily", "CortexA73",
339*9880d681SAndroid Build Coastguard Worker                                   "Cortex-A73 ARM processors", []>;
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Workerdef ProcKrait   : SubtargetFeature<"krait", "ARMProcFamily", "Krait",
342*9880d681SAndroid Build Coastguard Worker                                   "Qualcomm ARM processors", []>;
343*9880d681SAndroid Build Coastguard Workerdef ProcSwift   : SubtargetFeature<"swift", "ARMProcFamily", "Swift",
344*9880d681SAndroid Build Coastguard Worker                                   "Swift ARM processors", []>;
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Workerdef ProcExynosM1 : SubtargetFeature<"exynosm1", "ARMProcFamily", "ExynosM1",
347*9880d681SAndroid Build Coastguard Worker                                    "Samsung Exynos-M1 processors", []>;
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Workerdef ProcR4      : SubtargetFeature<"r4", "ARMProcFamily", "CortexR4",
350*9880d681SAndroid Build Coastguard Worker                                   "Cortex-R4 ARM processors", []>;
351*9880d681SAndroid Build Coastguard Workerdef ProcR5      : SubtargetFeature<"r5", "ARMProcFamily", "CortexR5",
352*9880d681SAndroid Build Coastguard Worker                                   "Cortex-R5 ARM processors", []>;
353*9880d681SAndroid Build Coastguard Workerdef ProcR7      : SubtargetFeature<"r7", "ARMProcFamily", "CortexR7",
354*9880d681SAndroid Build Coastguard Worker                                   "Cortex-R7 ARM processors", []>;
355*9880d681SAndroid Build Coastguard Worker
356*9880d681SAndroid Build Coastguard Workerdef ProcM3      : SubtargetFeature<"m3", "ARMProcFamily", "CortexM3",
357*9880d681SAndroid Build Coastguard Worker                                   "Cortex-M3 ARM processors", []>;
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
360*9880d681SAndroid Build Coastguard Worker// ARM schedules.
361*9880d681SAndroid Build Coastguard Worker//
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Workerinclude "ARMSchedule.td"
364*9880d681SAndroid Build Coastguard Worker
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
367*9880d681SAndroid Build Coastguard Worker// ARM architectures
368*9880d681SAndroid Build Coastguard Worker//
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Workerdef ARMv2     : Architecture<"armv2",     "ARMv2",    []>;
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdef ARMv2a    : Architecture<"armv2a",    "ARMv2a",   []>;
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Workerdef ARMv3     : Architecture<"armv3",     "ARMv3",    []>;
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Workerdef ARMv3m    : Architecture<"armv3m",    "ARMv3m",   []>;
377*9880d681SAndroid Build Coastguard Worker
378*9880d681SAndroid Build Coastguard Workerdef ARMv4     : Architecture<"armv4",     "ARMv4",    []>;
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdef ARMv4t    : Architecture<"armv4t",    "ARMv4t",   [HasV4TOps]>;
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Workerdef ARMv5t    : Architecture<"armv5t",    "ARMv5t",   [HasV5TOps]>;
383*9880d681SAndroid Build Coastguard Worker
384*9880d681SAndroid Build Coastguard Workerdef ARMv5te   : Architecture<"armv5te",   "ARMv5te",  [HasV5TEOps]>;
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdef ARMv5tej  : Architecture<"armv5tej",  "ARMv5tej", [HasV5TEOps]>;
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Workerdef ARMv6     : Architecture<"armv6",     "ARMv6",    [HasV6Ops]>;
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Workerdef ARMv6t2   : Architecture<"armv6t2",   "ARMv6t2",  [HasV6T2Ops,
391*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP]>;
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Workerdef ARMv6k    : Architecture<"armv6k",    "ARMv6k",   [HasV6KOps]>;
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Workerdef ARMv6kz   : Architecture<"armv6kz",   "ARMv6kz",  [HasV6KOps,
396*9880d681SAndroid Build Coastguard Worker                                                       FeatureTrustZone]>;
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerdef ARMv6m    : Architecture<"armv6-m",   "ARMv6m",   [HasV6MOps,
399*9880d681SAndroid Build Coastguard Worker                                                       FeatureNoARM,
400*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
401*9880d681SAndroid Build Coastguard Worker                                                       FeatureMClass]>;
402*9880d681SAndroid Build Coastguard Worker
403*9880d681SAndroid Build Coastguard Workerdef ARMv6sm   : Architecture<"armv6s-m",  "ARMv6sm",  [HasV6MOps,
404*9880d681SAndroid Build Coastguard Worker                                                       FeatureNoARM,
405*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
406*9880d681SAndroid Build Coastguard Worker                                                       FeatureMClass]>;
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Workerdef ARMv7a    : Architecture<"armv7-a",   "ARMv7a",   [HasV7Ops,
409*9880d681SAndroid Build Coastguard Worker                                                       FeatureNEON,
410*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
411*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP,
412*9880d681SAndroid Build Coastguard Worker                                                       FeatureAClass]>;
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Workerdef ARMv7r    : Architecture<"armv7-r",   "ARMv7r",   [HasV7Ops,
415*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
416*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP,
417*9880d681SAndroid Build Coastguard Worker                                                       FeatureHWDiv,
418*9880d681SAndroid Build Coastguard Worker                                                       FeatureRClass]>;
419*9880d681SAndroid Build Coastguard Worker
420*9880d681SAndroid Build Coastguard Workerdef ARMv7m    : Architecture<"armv7-m",   "ARMv7m",   [HasV7Ops,
421*9880d681SAndroid Build Coastguard Worker                                                       FeatureThumb2,
422*9880d681SAndroid Build Coastguard Worker                                                       FeatureNoARM,
423*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
424*9880d681SAndroid Build Coastguard Worker                                                       FeatureHWDiv,
425*9880d681SAndroid Build Coastguard Worker                                                       FeatureMClass]>;
426*9880d681SAndroid Build Coastguard Worker
427*9880d681SAndroid Build Coastguard Workerdef ARMv7em   : Architecture<"armv7e-m",  "ARMv7em",  [HasV7Ops,
428*9880d681SAndroid Build Coastguard Worker                                                       FeatureThumb2,
429*9880d681SAndroid Build Coastguard Worker                                                       FeatureNoARM,
430*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
431*9880d681SAndroid Build Coastguard Worker                                                       FeatureHWDiv,
432*9880d681SAndroid Build Coastguard Worker                                                       FeatureMClass,
433*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP,
434*9880d681SAndroid Build Coastguard Worker                                                       FeatureT2XtPk]>;
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Workerdef ARMv8a    : Architecture<"armv8-a",   "ARMv8a",   [HasV8Ops,
437*9880d681SAndroid Build Coastguard Worker                                                       FeatureAClass,
438*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
439*9880d681SAndroid Build Coastguard Worker                                                       FeatureFPARMv8,
440*9880d681SAndroid Build Coastguard Worker                                                       FeatureNEON,
441*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP,
442*9880d681SAndroid Build Coastguard Worker                                                       FeatureTrustZone,
443*9880d681SAndroid Build Coastguard Worker                                                       FeatureMP,
444*9880d681SAndroid Build Coastguard Worker                                                       FeatureVirtualization,
445*9880d681SAndroid Build Coastguard Worker                                                       FeatureCrypto,
446*9880d681SAndroid Build Coastguard Worker                                                       FeatureCRC]>;
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Workerdef ARMv81a   : Architecture<"armv8.1-a", "ARMv81a",  [HasV8_1aOps,
449*9880d681SAndroid Build Coastguard Worker                                                       FeatureAClass,
450*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
451*9880d681SAndroid Build Coastguard Worker                                                       FeatureFPARMv8,
452*9880d681SAndroid Build Coastguard Worker                                                       FeatureNEON,
453*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP,
454*9880d681SAndroid Build Coastguard Worker                                                       FeatureTrustZone,
455*9880d681SAndroid Build Coastguard Worker                                                       FeatureMP,
456*9880d681SAndroid Build Coastguard Worker                                                       FeatureVirtualization,
457*9880d681SAndroid Build Coastguard Worker                                                       FeatureCrypto,
458*9880d681SAndroid Build Coastguard Worker                                                       FeatureCRC]>;
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Workerdef ARMv82a   : Architecture<"armv8.2-a", "ARMv82a",  [HasV8_2aOps,
461*9880d681SAndroid Build Coastguard Worker                                                       FeatureAClass,
462*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
463*9880d681SAndroid Build Coastguard Worker                                                       FeatureFPARMv8,
464*9880d681SAndroid Build Coastguard Worker                                                       FeatureNEON,
465*9880d681SAndroid Build Coastguard Worker                                                       FeatureDSP,
466*9880d681SAndroid Build Coastguard Worker                                                       FeatureTrustZone,
467*9880d681SAndroid Build Coastguard Worker                                                       FeatureMP,
468*9880d681SAndroid Build Coastguard Worker                                                       FeatureVirtualization,
469*9880d681SAndroid Build Coastguard Worker                                                       FeatureCrypto,
470*9880d681SAndroid Build Coastguard Worker                                                       FeatureCRC,
471*9880d681SAndroid Build Coastguard Worker                                                       FeatureRAS]>;
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdef ARMv8mBaseline : Architecture<"armv8-m.base", "ARMv8mBaseline",
474*9880d681SAndroid Build Coastguard Worker                                                      [HasV8MBaselineOps,
475*9880d681SAndroid Build Coastguard Worker                                                       FeatureNoARM,
476*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
477*9880d681SAndroid Build Coastguard Worker                                                       FeatureHWDiv,
478*9880d681SAndroid Build Coastguard Worker                                                       FeatureV7Clrex,
479*9880d681SAndroid Build Coastguard Worker                                                       Feature8MSecExt,
480*9880d681SAndroid Build Coastguard Worker                                                       FeatureAcquireRelease,
481*9880d681SAndroid Build Coastguard Worker                                                       FeatureMClass]>;
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Workerdef ARMv8mMainline : Architecture<"armv8-m.main", "ARMv8mMainline",
484*9880d681SAndroid Build Coastguard Worker                                                      [HasV8MMainlineOps,
485*9880d681SAndroid Build Coastguard Worker                                                       FeatureNoARM,
486*9880d681SAndroid Build Coastguard Worker                                                       FeatureDB,
487*9880d681SAndroid Build Coastguard Worker                                                       FeatureHWDiv,
488*9880d681SAndroid Build Coastguard Worker                                                       Feature8MSecExt,
489*9880d681SAndroid Build Coastguard Worker                                                       FeatureAcquireRelease,
490*9880d681SAndroid Build Coastguard Worker                                                       FeatureMClass]>;
491*9880d681SAndroid Build Coastguard Worker
492*9880d681SAndroid Build Coastguard Worker// Aliases
493*9880d681SAndroid Build Coastguard Workerdef IWMMXT   : Architecture<"iwmmxt",      "ARMv5te",  [ARMv5te]>;
494*9880d681SAndroid Build Coastguard Workerdef IWMMXT2  : Architecture<"iwmmxt2",     "ARMv5te",  [ARMv5te]>;
495*9880d681SAndroid Build Coastguard Workerdef XScale   : Architecture<"xscale",      "ARMv5te",  [ARMv5te]>;
496*9880d681SAndroid Build Coastguard Workerdef ARMv6j   : Architecture<"armv6j",      "ARMv7a",   [ARMv6]>;
497*9880d681SAndroid Build Coastguard Workerdef ARMv7k   : Architecture<"armv7k",      "ARMv7a",   [ARMv7a]>;
498*9880d681SAndroid Build Coastguard Workerdef ARMv7s   : Architecture<"armv7s",      "ARMv7a",   [ARMv7a]>;
499*9880d681SAndroid Build Coastguard Worker
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
502*9880d681SAndroid Build Coastguard Worker// ARM processors
503*9880d681SAndroid Build Coastguard Worker//
504*9880d681SAndroid Build Coastguard Worker
505*9880d681SAndroid Build Coastguard Worker// Dummy CPU, used to target architectures
506*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"generic",                             []>;
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm8",                                [ARMv4]>;
509*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm810",                              [ARMv4]>;
510*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"strongarm",                           [ARMv4]>;
511*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"strongarm110",                        [ARMv4]>;
512*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"strongarm1100",                       [ARMv4]>;
513*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"strongarm1110",                       [ARMv4]>;
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm7tdmi",                            [ARMv4t]>;
516*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm7tdmi-s",                          [ARMv4t]>;
517*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm710t",                             [ARMv4t]>;
518*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm720t",                             [ARMv4t]>;
519*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm9",                                [ARMv4t]>;
520*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm9tdmi",                            [ARMv4t]>;
521*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm920",                              [ARMv4t]>;
522*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm920t",                             [ARMv4t]>;
523*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm922t",                             [ARMv4t]>;
524*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm940t",                             [ARMv4t]>;
525*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"ep9312",                              [ARMv4t]>;
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm10tdmi",                           [ARMv5t]>;
528*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm1020t",                            [ARMv5t]>;
529*9880d681SAndroid Build Coastguard Worker
530*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm9e",                               [ARMv5te]>;
531*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm926ej-s",                          [ARMv5te]>;
532*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm946e-s",                           [ARMv5te]>;
533*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm966e-s",                           [ARMv5te]>;
534*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm968e-s",                           [ARMv5te]>;
535*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm10e",                              [ARMv5te]>;
536*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm1020e",                            [ARMv5te]>;
537*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"arm1022e",                            [ARMv5te]>;
538*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"xscale",                              [ARMv5te]>;
539*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"iwmmxt",                              [ARMv5te]>;
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Workerdef : Processor<"arm1136j-s",       ARMV6Itineraries,   [ARMv6]>;
542*9880d681SAndroid Build Coastguard Workerdef : Processor<"arm1136jf-s",      ARMV6Itineraries,   [ARMv6,
543*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP2,
544*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx]>;
545*9880d681SAndroid Build Coastguard Worker
546*9880d681SAndroid Build Coastguard Workerdef : Processor<"cortex-m0",        ARMV6Itineraries,   [ARMv6m]>;
547*9880d681SAndroid Build Coastguard Workerdef : Processor<"cortex-m0plus",    ARMV6Itineraries,   [ARMv6m]>;
548*9880d681SAndroid Build Coastguard Workerdef : Processor<"cortex-m1",        ARMV6Itineraries,   [ARMv6m]>;
549*9880d681SAndroid Build Coastguard Workerdef : Processor<"sc000",            ARMV6Itineraries,   [ARMv6m]>;
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Workerdef : Processor<"arm1176jz-s",      ARMV6Itineraries,   [ARMv6kz]>;
552*9880d681SAndroid Build Coastguard Workerdef : Processor<"arm1176jzf-s",     ARMV6Itineraries,   [ARMv6kz,
553*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP2,
554*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx]>;
555*9880d681SAndroid Build Coastguard Worker
556*9880d681SAndroid Build Coastguard Workerdef : Processor<"mpcorenovfp",      ARMV6Itineraries,   [ARMv6k]>;
557*9880d681SAndroid Build Coastguard Workerdef : Processor<"mpcore",           ARMV6Itineraries,   [ARMv6k,
558*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP2,
559*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx]>;
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Workerdef : Processor<"arm1156t2-s",      ARMV6Itineraries,   [ARMv6t2]>;
562*9880d681SAndroid Build Coastguard Workerdef : Processor<"arm1156t2f-s",     ARMV6Itineraries,   [ARMv6t2,
563*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP2,
564*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx]>;
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Worker// FIXME: A5 has currently the same Schedule model as A8
567*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a5",   CortexA8Model,      [ARMv7a, ProcA5,
568*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
569*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
570*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
571*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
572*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
573*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
574*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
575*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4]>;
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a7",   CortexA8Model,      [ARMv7a, ProcA7,
578*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
579*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
580*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
581*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasVMLxHazards,
582*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
583*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
584*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
585*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
586*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
587*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
588*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
589*9880d681SAndroid Build Coastguard Worker                                                         FeatureVirtualization]>;
590*9880d681SAndroid Build Coastguard Worker
591*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a8",   CortexA8Model,      [ARMv7a, ProcA8,
592*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
593*9880d681SAndroid Build Coastguard Worker                                                         FeatureNonpipelinedVFP,
594*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
595*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
596*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasVMLxHazards,
597*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
598*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
599*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk]>;
600*9880d681SAndroid Build Coastguard Worker
601*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a9",   CortexA9Model,      [ARMv7a, ProcA9,
602*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
603*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
604*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasVMLxHazards,
605*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
606*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
607*9880d681SAndroid Build Coastguard Worker                                                         FeatureFP16,
608*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
609*9880d681SAndroid Build Coastguard Worker                                                         FeatureExpandMLx,
610*9880d681SAndroid Build Coastguard Worker                                                         FeaturePreferVMOVSR,
611*9880d681SAndroid Build Coastguard Worker                                                         FeatureMuxedUnits,
612*9880d681SAndroid Build Coastguard Worker                                                         FeatureNEONForFPMovs,
613*9880d681SAndroid Build Coastguard Worker                                                         FeatureCheckVLDnAlign,
614*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP]>;
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Worker// FIXME: A12 has currently the same Schedule model as A9
617*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a12",  CortexA9Model,      [ARMv7a, ProcA12,
618*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
619*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
620*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
621*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
622*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
623*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
624*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
625*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
626*9880d681SAndroid Build Coastguard Worker                                                         FeatureVirtualization,
627*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP]>;
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Worker// FIXME: A15 has currently the same Schedule model as A9.
630*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a15",  CortexA9Model,      [ARMv7a, ProcA15,
631*9880d681SAndroid Build Coastguard Worker                                                         FeatureDontWidenVMOVS,
632*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
633*9880d681SAndroid Build Coastguard Worker                                                         FeatureMuxedUnits,
634*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
635*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
636*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
637*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
638*9880d681SAndroid Build Coastguard Worker                                                         FeatureCheckVLDnAlign,
639*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
640*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
641*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
642*9880d681SAndroid Build Coastguard Worker                                                         FeatureVirtualization]>;
643*9880d681SAndroid Build Coastguard Worker
644*9880d681SAndroid Build Coastguard Worker// FIXME: A17 has currently the same Schedule model as A9
645*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-a17",  CortexA9Model,      [ARMv7a, ProcA17,
646*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
647*9880d681SAndroid Build Coastguard Worker                                                         FeatureTrustZone,
648*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
649*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
650*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
651*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
652*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
653*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
654*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
655*9880d681SAndroid Build Coastguard Worker                                                         FeatureVirtualization]>;
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Worker// FIXME: krait has currently the same Schedule model as A9
658*9880d681SAndroid Build Coastguard Worker// FIXME: krait has currently the same features as A9 plus VFP4 and hardware
659*9880d681SAndroid Build Coastguard Worker//        division features.
660*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"krait",       CortexA9Model,      [ARMv7a, ProcKrait,
661*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
662*9880d681SAndroid Build Coastguard Worker                                                         FeatureMuxedUnits,
663*9880d681SAndroid Build Coastguard Worker                                                         FeatureCheckVLDnAlign,
664*9880d681SAndroid Build Coastguard Worker                                                         FeatureVMLxForwarding,
665*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
666*9880d681SAndroid Build Coastguard Worker                                                         FeatureFP16,
667*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
668*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
669*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
670*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM]>;
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"swift",       SwiftModel,         [ARMv7a, ProcSwift,
673*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
674*9880d681SAndroid Build Coastguard Worker                                                         FeatureNEONForFP,
675*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
676*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
677*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
678*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
679*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
680*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
681*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidMOVsShOp,
682*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
683*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasVMLxHazards,
684*9880d681SAndroid Build Coastguard Worker                                                         FeatureProfUnpredicate,
685*9880d681SAndroid Build Coastguard Worker                                                         FeaturePrefISHSTBarrier,
686*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowOddRegister,
687*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowLoadDSubreg,
688*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowVGETLNi32,
689*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowVDUP32]>;
690*9880d681SAndroid Build Coastguard Worker
691*9880d681SAndroid Build Coastguard Worker// FIXME: R4 has currently the same ProcessorModel as A8.
692*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-r4",   CortexA8Model,      [ARMv7r, ProcR4,
693*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
694*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
695*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk]>;
696*9880d681SAndroid Build Coastguard Worker
697*9880d681SAndroid Build Coastguard Worker// FIXME: R4F has currently the same ProcessorModel as A8.
698*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-r4f",  CortexA8Model,      [ARMv7r, ProcR4,
699*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
700*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
701*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
702*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP3,
703*9880d681SAndroid Build Coastguard Worker                                                         FeatureD16,
704*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
705*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk]>;
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Worker// FIXME: R5 has currently the same ProcessorModel as A8.
708*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-r5",   CortexA8Model,      [ARMv7r, ProcR5,
709*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
710*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP3,
711*9880d681SAndroid Build Coastguard Worker                                                         FeatureD16,
712*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
713*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
714*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
715*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
716*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk]>;
717*9880d681SAndroid Build Coastguard Worker
718*9880d681SAndroid Build Coastguard Worker// FIXME: R7 has currently the same ProcessorModel as A8 and is modelled as R5.
719*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-r7",   CortexA8Model,      [ARMv7r, ProcR7,
720*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
721*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP3,
722*9880d681SAndroid Build Coastguard Worker                                                         FeatureD16,
723*9880d681SAndroid Build Coastguard Worker                                                         FeatureFP16,
724*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
725*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
726*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
727*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
728*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
729*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk]>;
730*9880d681SAndroid Build Coastguard Worker
731*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cortex-r8",   CortexA8Model,      [ARMv7r,
732*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
733*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP3,
734*9880d681SAndroid Build Coastguard Worker                                                         FeatureD16,
735*9880d681SAndroid Build Coastguard Worker                                                         FeatureFP16,
736*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
737*9880d681SAndroid Build Coastguard Worker                                                         FeatureSlowFPBrcc,
738*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
739*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
740*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
741*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk]>;
742*9880d681SAndroid Build Coastguard Worker
743*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-m3",                           [ARMv7m, ProcM3]>;
744*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"sc300",                               [ARMv7m, ProcM3]>;
745*9880d681SAndroid Build Coastguard Worker
746*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-m4",                           [ARMv7em,
747*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
748*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFPOnlySP,
749*9880d681SAndroid Build Coastguard Worker                                                         FeatureD16]>;
750*9880d681SAndroid Build Coastguard Worker
751*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-m7",                           [ARMv7em,
752*9880d681SAndroid Build Coastguard Worker                                                         FeatureFPARMv8,
753*9880d681SAndroid Build Coastguard Worker                                                         FeatureD16]>;
754*9880d681SAndroid Build Coastguard Worker
755*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-a32",                           [ARMv8a,
756*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
757*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
758*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
759*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
760*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-a35",                          [ARMv8a, ProcA35,
763*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
764*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
765*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
766*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
767*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
768*9880d681SAndroid Build Coastguard Worker
769*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-a53",                          [ARMv8a, ProcA53,
770*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
771*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
772*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
773*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
774*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
775*9880d681SAndroid Build Coastguard Worker
776*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-a57",                          [ARMv8a, ProcA57,
777*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
778*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
779*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
780*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
781*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
782*9880d681SAndroid Build Coastguard Worker
783*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-a72",                          [ARMv8a, ProcA72,
784*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
785*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
786*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
787*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
788*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
789*9880d681SAndroid Build Coastguard Worker
790*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"cortex-a73",                          [ARMv8a, ProcA73,
791*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
792*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
793*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
794*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
795*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
796*9880d681SAndroid Build Coastguard Worker
797*9880d681SAndroid Build Coastguard Worker// Cyclone is very similar to swift
798*9880d681SAndroid Build Coastguard Workerdef : ProcessorModel<"cyclone",     SwiftModel,         [ARMv8a, ProcSwift,
799*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasRetAddrStack,
800*9880d681SAndroid Build Coastguard Worker                                                         FeatureNEONForFP,
801*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
802*9880d681SAndroid Build Coastguard Worker                                                         FeatureVFP4,
803*9880d681SAndroid Build Coastguard Worker                                                         FeatureMP,
804*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
805*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
806*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidPartialCPSR,
807*9880d681SAndroid Build Coastguard Worker                                                         FeatureAvoidMOVsShOp,
808*9880d681SAndroid Build Coastguard Worker                                                         FeatureHasSlowFPVMLx,
809*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
810*9880d681SAndroid Build Coastguard Worker                                                         FeatureZCZeroing]>;
811*9880d681SAndroid Build Coastguard Worker
812*9880d681SAndroid Build Coastguard Workerdef : ProcNoItin<"exynos-m1",                           [ARMv8a, ProcExynosM1,
813*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDiv,
814*9880d681SAndroid Build Coastguard Worker                                                         FeatureHWDivARM,
815*9880d681SAndroid Build Coastguard Worker                                                         FeatureT2XtPk,
816*9880d681SAndroid Build Coastguard Worker                                                         FeatureCrypto,
817*9880d681SAndroid Build Coastguard Worker                                                         FeatureCRC]>;
818*9880d681SAndroid Build Coastguard Worker
819*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
820*9880d681SAndroid Build Coastguard Worker// Register File Description
821*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
822*9880d681SAndroid Build Coastguard Worker
823*9880d681SAndroid Build Coastguard Workerinclude "ARMRegisterInfo.td"
824*9880d681SAndroid Build Coastguard Worker
825*9880d681SAndroid Build Coastguard Workerinclude "ARMCallingConv.td"
826*9880d681SAndroid Build Coastguard Worker
827*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
828*9880d681SAndroid Build Coastguard Worker// Instruction Descriptions
829*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
830*9880d681SAndroid Build Coastguard Worker
831*9880d681SAndroid Build Coastguard Workerinclude "ARMInstrInfo.td"
832*9880d681SAndroid Build Coastguard Worker
833*9880d681SAndroid Build Coastguard Workerdef ARMInstrInfo : InstrInfo;
834*9880d681SAndroid Build Coastguard Worker
835*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
836*9880d681SAndroid Build Coastguard Worker// Declare the target which we are implementing
837*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
838*9880d681SAndroid Build Coastguard Worker
839*9880d681SAndroid Build Coastguard Workerdef ARMAsmWriter : AsmWriter {
840*9880d681SAndroid Build Coastguard Worker  string AsmWriterClassName  = "InstPrinter";
841*9880d681SAndroid Build Coastguard Worker  int PassSubtarget = 1;
842*9880d681SAndroid Build Coastguard Worker  int Variant = 0;
843*9880d681SAndroid Build Coastguard Worker  bit isMCAsmWriter = 1;
844*9880d681SAndroid Build Coastguard Worker}
845*9880d681SAndroid Build Coastguard Worker
846*9880d681SAndroid Build Coastguard Workerdef ARMAsmParserVariant : AsmParserVariant {
847*9880d681SAndroid Build Coastguard Worker  int Variant = 0;
848*9880d681SAndroid Build Coastguard Worker  string Name = "ARM";
849*9880d681SAndroid Build Coastguard Worker  string BreakCharacters = ".";
850*9880d681SAndroid Build Coastguard Worker}
851*9880d681SAndroid Build Coastguard Worker
852*9880d681SAndroid Build Coastguard Workerdef ARM : Target {
853*9880d681SAndroid Build Coastguard Worker  // Pull in Instruction Info:
854*9880d681SAndroid Build Coastguard Worker  let InstructionSet = ARMInstrInfo;
855*9880d681SAndroid Build Coastguard Worker  let AssemblyWriters = [ARMAsmWriter];
856*9880d681SAndroid Build Coastguard Worker  let AssemblyParserVariants = [ARMAsmParserVariant];
857*9880d681SAndroid Build Coastguard Worker}
858