Coverage Report

Created: 2025-07-14 06:17

/src/keystone/llvm/lib/Target/ARM/ARMGenSubtargetInfo.inc
Line
Count
Source
1
/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2
|*                                                                            *|
3
|* Subtarget Enumeration Source Fragment                                      *|
4
|*                                                                            *|
5
|* Automatically generated file, do not edit!                                 *|
6
|*                                                                            *|
7
\*===----------------------------------------------------------------------===*/
8
9
10
#ifdef GET_SUBTARGETINFO_ENUM
11
#undef GET_SUBTARGETINFO_ENUM
12
namespace llvm_ks {
13
namespace ARM {
14
enum : uint64_t {
15
  ARMv2 = 0,
16
  ARMv2a = 1,
17
  ARMv3 = 2,
18
  ARMv3m = 3,
19
  ARMv4 = 4,
20
  ARMv4t = 5,
21
  ARMv5t = 6,
22
  ARMv5te = 7,
23
  ARMv5tej = 8,
24
  ARMv6 = 9,
25
  ARMv6j = 10,
26
  ARMv6k = 11,
27
  ARMv6kz = 12,
28
  ARMv6m = 13,
29
  ARMv6sm = 14,
30
  ARMv6t2 = 15,
31
  ARMv7a = 16,
32
  ARMv7em = 17,
33
  ARMv7k = 18,
34
  ARMv7m = 19,
35
  ARMv7r = 20,
36
  ARMv7s = 21,
37
  ARMv8a = 22,
38
  ARMv8mBaseline = 23,
39
  ARMv8mMainline = 24,
40
  ARMv81a = 25,
41
  ARMv82a = 26,
42
  Feature8MSecExt = 27,
43
  FeatureAClass = 28,
44
  FeatureAcquireRelease = 29,
45
  FeatureAvoidMOVsShOp = 30,
46
  FeatureAvoidPartialCPSR = 31,
47
  FeatureCRC = 32,
48
  FeatureCrypto = 33,
49
  FeatureD16 = 34,
50
  FeatureDB = 35,
51
  FeatureDSP = 36,
52
  FeatureFP16 = 37,
53
  FeatureFPARMv8 = 38,
54
  FeatureFullFP16 = 39,
55
  FeatureHWDiv = 40,
56
  FeatureHWDivARM = 41,
57
  FeatureHasRAS = 42,
58
  FeatureHasSlowFPVMLx = 43,
59
  FeatureLongCalls = 44,
60
  FeatureMClass = 45,
61
  FeatureMP = 46,
62
  FeatureNEON = 47,
63
  FeatureNEONForFP = 48,
64
  FeatureNaClTrap = 49,
65
  FeatureNoARM = 50,
66
  FeatureNoMovt = 51,
67
  FeaturePerfMon = 52,
68
  FeaturePref32BitThumb = 53,
69
  FeatureRClass = 54,
70
  FeatureReserveR9 = 55,
71
  FeatureSlowFPBrcc = 56,
72
  FeatureStrictAlign = 57,
73
  FeatureT2XtPk = 58,
74
  FeatureThumb2 = 59,
75
  FeatureTrustZone = 60,
76
  FeatureV7Clrex = 61,
77
  FeatureVFP2 = 62,
78
  FeatureVFP3 = 63,
79
  FeatureVFP4 = 64,
80
  FeatureVFPOnlySP = 65,
81
  FeatureVMLxForwarding = 66,
82
  FeatureVirtualization = 67,
83
  FeatureZCZeroing = 68,
84
  HasV4TOps = 69,
85
  HasV5TEOps = 70,
86
  HasV5TOps = 71,
87
  HasV6KOps = 72,
88
  HasV6MOps = 73,
89
  HasV6Ops = 74,
90
  HasV6T2Ops = 75,
91
  HasV7Ops = 76,
92
  HasV8MBaselineOps = 77,
93
  HasV8MMainlineOps = 78,
94
  HasV8Ops = 79,
95
  HasV8_1aOps = 80,
96
  HasV8_2aOps = 81,
97
  IWMMXT = 82,
98
  IWMMXT2 = 83,
99
  ModeSoftFloat = 84,
100
  ModeThumb = 85,
101
  ProcA5 = 86,
102
  ProcA7 = 87,
103
  ProcA8 = 88,
104
  ProcA9 = 89,
105
  ProcA12 = 90,
106
  ProcA15 = 91,
107
  ProcA17 = 92,
108
  ProcA35 = 93,
109
  ProcA53 = 94,
110
  ProcA57 = 95,
111
  ProcA72 = 96,
112
  ProcExynosM1 = 97,
113
  ProcKrait = 98,
114
  ProcR4 = 99,
115
  ProcR5 = 100,
116
  ProcR7 = 101,
117
  ProcSwift = 102,
118
  XScale = 103
119
};
120
}
121
} // end llvm namespace
122
#endif // GET_SUBTARGETINFO_ENUM
123
124
125
#ifdef GET_SUBTARGETINFO_MC_DESC
126
#undef GET_SUBTARGETINFO_MC_DESC
127
namespace llvm_ks {
128
// Sorted (by key) array of values for CPU features.
129
extern const llvm_ks::SubtargetFeatureKV ARMFeatureKV[] = {
130
  { "32bit", "Prefer 32-bit Thumb instrs", { ARM::FeaturePref32BitThumb }, { } },
131
  { "8msecext", "Enable support for ARMv8-M Security Extensions", { ARM::Feature8MSecExt }, { } },
132
  { "a12", "Cortex-A12 ARM processors", { ARM::ProcA12 }, { } },
133
  { "a15", "Cortex-A15 ARM processors", { ARM::ProcA15 }, { } },
134
  { "a17", "Cortex-A17 ARM processors", { ARM::ProcA17 }, { } },
135
  { "a35", "Cortex-A35 ARM processors", { ARM::ProcA35 }, { } },
136
  { "a5", "Cortex-A5 ARM processors", { ARM::ProcA5 }, { } },
137
  { "a53", "Cortex-A53 ARM processors", { ARM::ProcA53 }, { } },
138
  { "a57", "Cortex-A57 ARM processors", { ARM::ProcA57 }, { } },
139
  { "a7", "Cortex-A7 ARM processors", { ARM::ProcA7 }, { } },
140
  { "a72", "Cortex-A72 ARM processors", { ARM::ProcA72 }, { } },
141
  { "a8", "Cortex-A8 ARM processors", { ARM::ProcA8 }, { } },
142
  { "a9", "Cortex-A9 ARM processors", { ARM::ProcA9 }, { } },
143
  { "aclass", "Is application profile ('A' series)", { ARM::FeatureAClass }, { } },
144
  { "acquire-release", "Has v8 acquire/release (lda/ldaex etc) instructions", { ARM::FeatureAcquireRelease }, { } },
145
  { "armv2", "ARMv2 architecture", { ARM::ARMv2 }, { } },
146
  { "armv2a", "ARMv2a architecture", { ARM::ARMv2a }, { } },
147
  { "armv3", "ARMv3 architecture", { ARM::ARMv3 }, { } },
148
  { "armv3m", "ARMv3m architecture", { ARM::ARMv3m }, { } },
149
  { "armv4", "ARMv4 architecture", { ARM::ARMv4 }, { } },
150
  { "armv4t", "ARMv4t architecture", { ARM::ARMv4t }, { ARM::HasV4TOps } },
151
  { "armv5t", "ARMv5t architecture", { ARM::ARMv5t }, { ARM::HasV5TOps } },
152
  { "armv5te", "ARMv5te architecture", { ARM::ARMv5te }, { ARM::HasV5TEOps } },
153
  { "armv5tej", "ARMv5tej architecture", { ARM::ARMv5tej }, { ARM::HasV5TEOps } },
154
  { "armv6", "ARMv6 architecture", { ARM::ARMv6 }, { ARM::HasV6Ops } },
155
  { "armv6-m", "ARMv6m architecture", { ARM::ARMv6m }, { ARM::HasV6MOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureMClass } },
156
  { "armv6j", "ARMv7a architecture", { ARM::ARMv6j }, { ARM::ARMv6 } },
157
  { "armv6k", "ARMv6k architecture", { ARM::ARMv6k }, { ARM::HasV6KOps } },
158
  { "armv6kz", "ARMv6kz architecture", { ARM::ARMv6kz }, { ARM::HasV6KOps, ARM::FeatureTrustZone } },
159
  { "armv6s-m", "ARMv6sm architecture", { ARM::ARMv6sm }, { ARM::HasV6MOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureMClass } },
160
  { "armv6t2", "ARMv6t2 architecture", { ARM::ARMv6t2 }, { ARM::HasV6T2Ops, ARM::FeatureDSP } },
161
  { "armv7-a", "ARMv7a architecture", { ARM::ARMv7a }, { ARM::HasV7Ops, ARM::FeatureNEON, ARM::FeatureDB, ARM::FeatureDSP, ARM::FeatureAClass } },
162
  { "armv7-m", "ARMv7m architecture", { ARM::ARMv7m }, { ARM::HasV7Ops, ARM::FeatureThumb2, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::FeatureMClass } },
163
  { "armv7-r", "ARMv7r architecture", { ARM::ARMv7r }, { ARM::HasV7Ops, ARM::FeatureDB, ARM::FeatureDSP, ARM::FeatureHWDiv, ARM::FeatureRClass } },
164
  { "armv7e-m", "ARMv7em architecture", { ARM::ARMv7em }, { ARM::HasV7Ops, ARM::FeatureThumb2, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::FeatureMClass, ARM::FeatureDSP, ARM::FeatureT2XtPk } },
165
  { "armv7k", "ARMv7a architecture", { ARM::ARMv7k }, { ARM::ARMv7a } },
166
  { "armv7s", "ARMv7a architecture", { ARM::ARMv7s }, { ARM::ARMv7a } },
167
  { "armv8-a", "ARMv8a architecture", { ARM::ARMv8a }, { ARM::HasV8Ops, ARM::FeatureAClass, ARM::FeatureDB, ARM::FeatureFPARMv8, ARM::FeatureNEON, ARM::FeatureDSP, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVirtualization, ARM::FeatureCrypto, ARM::FeatureCRC } },
168
  { "armv8-m.base", "ARMv8mBaseline architecture", { ARM::ARMv8mBaseline }, { ARM::HasV8MBaselineOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::FeatureV7Clrex, ARM::Feature8MSecExt, ARM::FeatureAcquireRelease, ARM::FeatureMClass } },
169
  { "armv8-m.main", "ARMv8mMainline architecture", { ARM::ARMv8mMainline }, { ARM::HasV8MMainlineOps, ARM::FeatureNoARM, ARM::FeatureDB, ARM::FeatureHWDiv, ARM::Feature8MSecExt, ARM::FeatureAcquireRelease, ARM::FeatureMClass } },
170
  { "armv8.1-a", "ARMv81a architecture", { ARM::ARMv81a }, { ARM::HasV8_1aOps, ARM::FeatureAClass, ARM::FeatureDB, ARM::FeatureFPARMv8, ARM::FeatureNEON, ARM::FeatureDSP, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVirtualization, ARM::FeatureCrypto, ARM::FeatureCRC } },
171
  { "armv8.2-a", "ARMv82a architecture", { ARM::ARMv82a }, { ARM::HasV8_2aOps, ARM::FeatureAClass, ARM::FeatureDB, ARM::FeatureFPARMv8, ARM::FeatureNEON, ARM::FeatureDSP, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVirtualization, ARM::FeatureCrypto, ARM::FeatureCRC } },
172
  { "avoid-movs-shop", "Avoid movs instructions with shifter operand", { ARM::FeatureAvoidMOVsShOp }, { } },
173
  { "avoid-partial-cpsr", "Avoid CPSR partial update for OOO execution", { ARM::FeatureAvoidPartialCPSR }, { } },
174
  { "crc", "Enable support for CRC instructions", { ARM::FeatureCRC }, { } },
175
  { "crypto", "Enable support for Cryptography extensions", { ARM::FeatureCrypto }, { ARM::FeatureNEON } },
176
  { "d16", "Restrict FP to 16 double registers", { ARM::FeatureD16 }, { } },
177
  { "db", "Has data barrier (dmb / dsb) instructions", { ARM::FeatureDB }, { } },
178
  { "dsp", "Supports DSP instructions in ARM and/or Thumb2", { ARM::FeatureDSP }, { } },
179
  { "exynosm1", "Samsung Exynos-M1 processors", { ARM::ProcExynosM1 }, { } },
180
  { "fp-armv8", "Enable ARMv8 FP", { ARM::FeatureFPARMv8 }, { ARM::FeatureVFP4 } },
181
  { "fp-only-sp", "Floating point unit supports single precision only", { ARM::FeatureVFPOnlySP }, { } },
182
  { "fp16", "Enable half-precision floating point", { ARM::FeatureFP16 }, { } },
183
  { "fullfp16", "Enable full half-precision floating point", { ARM::FeatureFullFP16 }, { ARM::FeatureFPARMv8 } },
184
  { "hwdiv", "Enable divide instructions", { ARM::FeatureHWDiv }, { } },
185
  { "hwdiv-arm", "Enable divide instructions in ARM mode", { ARM::FeatureHWDivARM }, { } },
186
  { "iwmmxt", "ARMv5te architecture", { ARM::IWMMXT }, { ARM::ARMv5te } },
187
  { "iwmmxt2", "ARMv5te architecture", { ARM::IWMMXT2 }, { ARM::ARMv5te } },
188
  { "krait", "Qualcomm ARM processors", { ARM::ProcKrait }, { } },
189
  { "long-calls", "Generate calls via indirect call instructions", { ARM::FeatureLongCalls }, { } },
190
  { "mclass", "Is microcontroller profile ('M' series)", { ARM::FeatureMClass }, { } },
191
  { "mp", "Supports Multiprocessing extension", { ARM::FeatureMP }, { } },
192
  { "nacl-trap", "NaCl trap", { ARM::FeatureNaClTrap }, { } },
193
  { "neon", "Enable NEON instructions", { ARM::FeatureNEON }, { ARM::FeatureVFP3 } },
194
  { "neonfp", "Use NEON for single precision FP", { ARM::FeatureNEONForFP }, { } },
195
  { "no-movt", "Don't use movt/movw pairs for 32-bit imms", { ARM::FeatureNoMovt }, { } },
196
  { "noarm", "Does not support ARM mode execution", { ARM::FeatureNoARM }, { ARM::ModeThumb } },
197
  { "perfmon", "Enable support for Performance Monitor extensions", { ARM::FeaturePerfMon }, { } },
198
  { "r4", "Cortex-R4 ARM processors", { ARM::ProcR4 }, { } },
199
  { "r5", "Cortex-R5 ARM processors", { ARM::ProcR5 }, { } },
200
  { "r7", "Cortex-R7 ARM processors", { ARM::ProcR7 }, { } },
201
  { "ras", "Has return address stack", { ARM::FeatureHasRAS }, { } },
202
  { "rclass", "Is realtime profile ('R' series)", { ARM::FeatureRClass }, { } },
203
  { "reserve-r9", "Reserve R9, making it unavailable as GPR", { ARM::FeatureReserveR9 }, { } },
204
  { "slow-fp-brcc", "FP compare + branch is slow", { ARM::FeatureSlowFPBrcc }, { } },
205
  { "slowfpvmlx", "Disable VFP / NEON MAC instructions", { ARM::FeatureHasSlowFPVMLx }, { } },
206
  { "soft-float", "Use software floating point features.", { ARM::ModeSoftFloat }, { } },
207
  { "strict-align", "Disallow all unaligned memory access", { ARM::FeatureStrictAlign }, { } },
208
  { "swift", "Swift ARM processors", { ARM::ProcSwift }, { } },
209
  { "t2xtpk", "Enable Thumb2 extract and pack instructions", { ARM::FeatureT2XtPk }, { } },
210
  { "thumb-mode", "Thumb mode", { ARM::ModeThumb }, { } },
211
  { "thumb2", "Enable Thumb2 instructions", { ARM::FeatureThumb2 }, { } },
212
  { "trustzone", "Enable support for TrustZone security extensions", { ARM::FeatureTrustZone }, { } },
213
  { "v4t", "Support ARM v4T instructions", { ARM::HasV4TOps }, { } },
214
  { "v5t", "Support ARM v5T instructions", { ARM::HasV5TOps }, { ARM::HasV4TOps } },
215
  { "v5te", "Support ARM v5TE, v5TEj, and v5TExp instructions", { ARM::HasV5TEOps }, { ARM::HasV5TOps } },
216
  { "v6", "Support ARM v6 instructions", { ARM::HasV6Ops }, { ARM::HasV5TEOps } },
217
  { "v6k", "Support ARM v6k instructions", { ARM::HasV6KOps }, { ARM::HasV6Ops } },
218
  { "v6m", "Support ARM v6M instructions", { ARM::HasV6MOps }, { ARM::HasV6Ops } },
219
  { "v6t2", "Support ARM v6t2 instructions", { ARM::HasV6T2Ops }, { ARM::HasV8MBaselineOps, ARM::HasV6KOps, ARM::FeatureThumb2 } },
220
  { "v7", "Support ARM v7 instructions", { ARM::HasV7Ops }, { ARM::HasV6T2Ops, ARM::FeaturePerfMon, ARM::FeatureV7Clrex } },
221
  { "v7clrex", "Has v7 clrex instruction", { ARM::FeatureV7Clrex }, { } },
222
  { "v8", "Support ARM v8 instructions", { ARM::HasV8Ops }, { ARM::HasV7Ops, ARM::FeatureAcquireRelease } },
223
  { "v8.1a", "Support ARM v8.1a instructions", { ARM::HasV8_1aOps }, { ARM::HasV8Ops } },
224
  { "v8.2a", "Support ARM v8.2a instructions", { ARM::HasV8_2aOps }, { ARM::HasV8_1aOps } },
225
  { "v8m", "Support ARM v8M Baseline instructions", { ARM::HasV8MBaselineOps }, { ARM::HasV6MOps } },
226
  { "v8m.main", "Support ARM v8M Mainline instructions", { ARM::HasV8MMainlineOps }, { ARM::HasV7Ops } },
227
  { "vfp2", "Enable VFP2 instructions", { ARM::FeatureVFP2 }, { } },
228
  { "vfp3", "Enable VFP3 instructions", { ARM::FeatureVFP3 }, { ARM::FeatureVFP2 } },
229
  { "vfp4", "Enable VFP4 instructions", { ARM::FeatureVFP4 }, { ARM::FeatureVFP3, ARM::FeatureFP16 } },
230
  { "virtualization", "Supports Virtualization extension", { ARM::FeatureVirtualization }, { ARM::FeatureHWDiv, ARM::FeatureHWDivARM } },
231
  { "vmlx-forwarding", "Has multiplier accumulator forwarding", { ARM::FeatureVMLxForwarding }, { } },
232
  { "xscale", "ARMv5te architecture", { ARM::XScale }, { ARM::ARMv5te } },
233
  { "zcz", "Has zero-cycle zeroing instructions", { ARM::FeatureZCZeroing }, { } }
234
};
235
236
// Sorted (by key) array of values for CPU subtype.
237
extern const llvm_ks::SubtargetFeatureKV ARMSubTypeKV[] = {
238
  { "arm1020e", "Select the arm1020e processor", { ARM::ARMv5te }, { } },
239
  { "arm1020t", "Select the arm1020t processor", { ARM::ARMv5t }, { } },
240
  { "arm1022e", "Select the arm1022e processor", { ARM::ARMv5te }, { } },
241
  { "arm10e", "Select the arm10e processor", { ARM::ARMv5te }, { } },
242
  { "arm10tdmi", "Select the arm10tdmi processor", { ARM::ARMv5t }, { } },
243
  { "arm1136j-s", "Select the arm1136j-s processor", { ARM::ARMv6 }, { } },
244
  { "arm1136jf-s", "Select the arm1136jf-s processor", { ARM::ARMv6, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
245
  { "arm1156t2-s", "Select the arm1156t2-s processor", { ARM::ARMv6t2 }, { } },
246
  { "arm1156t2f-s", "Select the arm1156t2f-s processor", { ARM::ARMv6t2, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
247
  { "arm1176jz-s", "Select the arm1176jz-s processor", { ARM::ARMv6kz }, { } },
248
  { "arm1176jzf-s", "Select the arm1176jzf-s processor", { ARM::ARMv6kz, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
249
  { "arm710t", "Select the arm710t processor", { ARM::ARMv4t }, { } },
250
  { "arm720t", "Select the arm720t processor", { ARM::ARMv4t }, { } },
251
  { "arm7tdmi", "Select the arm7tdmi processor", { ARM::ARMv4t }, { } },
252
  { "arm7tdmi-s", "Select the arm7tdmi-s processor", { ARM::ARMv4t }, { } },
253
  { "arm8", "Select the arm8 processor", { ARM::ARMv4 }, { } },
254
  { "arm810", "Select the arm810 processor", { ARM::ARMv4 }, { } },
255
  { "arm9", "Select the arm9 processor", { ARM::ARMv4t }, { } },
256
  { "arm920", "Select the arm920 processor", { ARM::ARMv4t }, { } },
257
  { "arm920t", "Select the arm920t processor", { ARM::ARMv4t }, { } },
258
  { "arm922t", "Select the arm922t processor", { ARM::ARMv4t }, { } },
259
  { "arm926ej-s", "Select the arm926ej-s processor", { ARM::ARMv5te }, { } },
260
  { "arm940t", "Select the arm940t processor", { ARM::ARMv4t }, { } },
261
  { "arm946e-s", "Select the arm946e-s processor", { ARM::ARMv5te }, { } },
262
  { "arm966e-s", "Select the arm966e-s processor", { ARM::ARMv5te }, { } },
263
  { "arm968e-s", "Select the arm968e-s processor", { ARM::ARMv5te }, { } },
264
  { "arm9e", "Select the arm9e processor", { ARM::ARMv5te }, { } },
265
  { "arm9tdmi", "Select the arm9tdmi processor", { ARM::ARMv4t }, { } },
266
  { "cortex-a12", "Select the cortex-a12 processor", { ARM::ARMv7a, ARM::ProcA12, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVirtualization, ARM::FeatureMP }, { } },
267
  { "cortex-a15", "Select the cortex-a15 processor", { ARM::ARMv7a, ARM::ProcA15, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureMP, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVirtualization }, { } },
268
  { "cortex-a17", "Select the cortex-a17 processor", { ARM::ARMv7a, ARM::ProcA17, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureMP, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVirtualization }, { } },
269
  { "cortex-a35", "Select the cortex-a35 processor", { ARM::ARMv8a, ARM::ProcA35, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
270
  { "cortex-a5", "Select the cortex-a5 processor", { ARM::ARMv7a, ARM::ProcA5, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureMP, ARM::FeatureVFP4 }, { } },
271
  { "cortex-a53", "Select the cortex-a53 processor", { ARM::ARMv8a, ARM::ProcA53, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
272
  { "cortex-a57", "Select the cortex-a57 processor", { ARM::ARMv8a, ARM::ProcA57, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
273
  { "cortex-a7", "Select the cortex-a7 processor", { ARM::ARMv7a, ARM::ProcA7, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureMP, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureVirtualization }, { } },
274
  { "cortex-a72", "Select the cortex-a72 processor", { ARM::ARMv8a, ARM::ProcA72, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
275
  { "cortex-a8", "Select the cortex-a8 processor", { ARM::ARMv7a, ARM::ProcA8, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk }, { } },
276
  { "cortex-a9", "Select the cortex-a9 processor", { ARM::ARMv7a, ARM::ProcA9, ARM::FeatureHasRAS, ARM::FeatureTrustZone, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureFP16, ARM::FeatureAvoidPartialCPSR, ARM::FeatureMP }, { } },
277
  { "cortex-m0", "Select the cortex-m0 processor", { ARM::ARMv6m }, { } },
278
  { "cortex-m0plus", "Select the cortex-m0plus processor", { ARM::ARMv6m }, { } },
279
  { "cortex-m1", "Select the cortex-m1 processor", { ARM::ARMv6m }, { } },
280
  { "cortex-m3", "Select the cortex-m3 processor", { ARM::ARMv7m }, { } },
281
  { "cortex-m4", "Select the cortex-m4 processor", { ARM::ARMv7em, ARM::FeatureVFP4, ARM::FeatureVFPOnlySP, ARM::FeatureD16 }, { } },
282
  { "cortex-m7", "Select the cortex-m7 processor", { ARM::ARMv7em, ARM::FeatureFPARMv8, ARM::FeatureD16 }, { } },
283
  { "cortex-r4", "Select the cortex-r4 processor", { ARM::ARMv7r, ARM::ProcR4, ARM::FeatureHasRAS, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
284
  { "cortex-r4f", "Select the cortex-r4f processor", { ARM::ARMv7r, ARM::ProcR4, ARM::FeatureHasRAS, ARM::FeatureSlowFPBrcc, ARM::FeatureHasSlowFPVMLx, ARM::FeatureVFP3, ARM::FeatureD16, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
285
  { "cortex-r5", "Select the cortex-r5 processor", { ARM::ARMv7r, ARM::ProcR5, ARM::FeatureHasRAS, ARM::FeatureVFP3, ARM::FeatureD16, ARM::FeatureSlowFPBrcc, ARM::FeatureHWDivARM, ARM::FeatureHasSlowFPVMLx, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
286
  { "cortex-r7", "Select the cortex-r7 processor", { ARM::ARMv7r, ARM::ProcR7, ARM::FeatureHasRAS, ARM::FeatureVFP3, ARM::FeatureD16, ARM::FeatureFP16, ARM::FeatureMP, ARM::FeatureSlowFPBrcc, ARM::FeatureHWDivARM, ARM::FeatureHasSlowFPVMLx, ARM::FeatureAvoidPartialCPSR, ARM::FeatureT2XtPk }, { } },
287
  { "cyclone", "Select the cyclone processor", { ARM::ARMv8a, ARM::ProcSwift, ARM::FeatureHasRAS, ARM::FeatureNEONForFP, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureMP, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureAvoidMOVsShOp, ARM::FeatureHasSlowFPVMLx, ARM::FeatureCrypto, ARM::FeatureZCZeroing }, { } },
288
  { "ep9312", "Select the ep9312 processor", { ARM::ARMv4t }, { } },
289
  { "exynos-m1", "Select the exynos-m1 processor", { ARM::ARMv8a, ARM::ProcExynosM1, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureT2XtPk, ARM::FeatureCrypto, ARM::FeatureCRC }, { } },
290
  { "generic", "Select the generic processor", { }, { } },
291
  { "iwmmxt", "Select the iwmmxt processor", { ARM::ARMv5te }, { } },
292
  { "krait", "Select the krait processor", { ARM::ARMv7a, ARM::ProcKrait, ARM::FeatureHasRAS, ARM::FeatureVMLxForwarding, ARM::FeatureT2XtPk, ARM::FeatureFP16, ARM::FeatureAvoidPartialCPSR, ARM::FeatureVFP4, ARM::FeatureHWDiv, ARM::FeatureHWDivARM }, { } },
293
  { "mpcore", "Select the mpcore processor", { ARM::ARMv6k, ARM::FeatureVFP2, ARM::FeatureHasSlowFPVMLx }, { } },
294
  { "mpcorenovfp", "Select the mpcorenovfp processor", { ARM::ARMv6k }, { } },
295
  { "sc000", "Select the sc000 processor", { ARM::ARMv6m }, { } },
296
  { "sc300", "Select the sc300 processor", { ARM::ARMv7m }, { } },
297
  { "strongarm", "Select the strongarm processor", { ARM::ARMv4 }, { } },
298
  { "strongarm110", "Select the strongarm110 processor", { ARM::ARMv4 }, { } },
299
  { "strongarm1100", "Select the strongarm1100 processor", { ARM::ARMv4 }, { } },
300
  { "strongarm1110", "Select the strongarm1110 processor", { ARM::ARMv4 }, { } },
301
  { "swift", "Select the swift processor", { ARM::ARMv7a, ARM::ProcSwift, ARM::FeatureHasRAS, ARM::FeatureNEONForFP, ARM::FeatureT2XtPk, ARM::FeatureVFP4, ARM::FeatureMP, ARM::FeatureHWDiv, ARM::FeatureHWDivARM, ARM::FeatureAvoidPartialCPSR, ARM::FeatureAvoidMOVsShOp, ARM::FeatureHasSlowFPVMLx }, { } },
302
  { "xscale", "Select the xscale processor", { ARM::ARMv5te }, { } }
303
};
304
305
#ifdef DBGFIELD
306
#error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
307
#endif
308
#ifndef NDEBUG
309
#define DBGFIELD(x) x,
310
#else
311
#define DBGFIELD(x)
312
#endif
313
314
// Functional units for "ARMV6Itineraries"
315
namespace ARMV6ItinerariesFU {
316
  const unsigned V6_Pipe = 1 << 0;
317
}
318
319
// Functional units for "CortexA9Itineraries"
320
namespace CortexA9ItinerariesFU {
321
  const unsigned A9_Issue0 = 1 << 0;
322
  const unsigned A9_Issue1 = 1 << 1;
323
  const unsigned A9_Branch = 1 << 2;
324
  const unsigned A9_ALU0 = 1 << 3;
325
  const unsigned A9_ALU1 = 1 << 4;
326
  const unsigned A9_AGU = 1 << 5;
327
  const unsigned A9_NPipe = 1 << 6;
328
  const unsigned A9_MUX0 = 1 << 7;
329
  const unsigned A9_LSUnit = 1 << 8;
330
  const unsigned A9_DRegsVFP = 1 << 9;
331
  const unsigned A9_DRegsN = 1 << 10;
332
}
333
334
// ===============================================================
335
// Data tables for the new per-operand machine model.
336
337
338
#undef DBGFIELD
339
121k
static inline MCSubtargetInfo *createARMMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) {
340
121k
  return new MCSubtargetInfo(TT, CPU, FS, ARMFeatureKV, ARMSubTypeKV, NULL);
341
121k
}
342
343
} // end llvm namespace
344
#endif // GET_SUBTARGETINFO_MC_DESC
345
346
347
#ifdef GET_SUBTARGETINFO_TARGET_DESC
348
#undef GET_SUBTARGETINFO_TARGET_DESC
349
#include "llvm/Support/Debug.h"
350
#include "llvm/Support/raw_ostream.h"
351
// ParseSubtargetFeatures - Parses features string setting specified
352
// subtarget options.
353
void llvm_ks::ARMSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
354
  DEBUG(dbgs() << "\nFeatures:" << FS);
355
  DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
356
  InitMCProcessorInfo(CPU, FS);
357
  const FeatureBitset& Bits = getFeatureBits();
358
  if (Bits[ARM::ARMv2] && ARMArch < ARMv2) ARMArch = ARMv2;
359
  if (Bits[ARM::ARMv2a] && ARMArch < ARMv2a) ARMArch = ARMv2a;
360
  if (Bits[ARM::ARMv3] && ARMArch < ARMv3) ARMArch = ARMv3;
361
  if (Bits[ARM::ARMv3m] && ARMArch < ARMv3m) ARMArch = ARMv3m;
362
  if (Bits[ARM::ARMv4] && ARMArch < ARMv4) ARMArch = ARMv4;
363
  if (Bits[ARM::ARMv4t] && ARMArch < ARMv4t) ARMArch = ARMv4t;
364
  if (Bits[ARM::ARMv5t] && ARMArch < ARMv5t) ARMArch = ARMv5t;
365
  if (Bits[ARM::ARMv5te] && ARMArch < ARMv5te) ARMArch = ARMv5te;
366
  if (Bits[ARM::ARMv5tej] && ARMArch < ARMv5tej) ARMArch = ARMv5tej;
367
  if (Bits[ARM::ARMv6] && ARMArch < ARMv6) ARMArch = ARMv6;
368
  if (Bits[ARM::ARMv6j] && ARMArch < ARMv7a) ARMArch = ARMv7a;
369
  if (Bits[ARM::ARMv6k] && ARMArch < ARMv6k) ARMArch = ARMv6k;
370
  if (Bits[ARM::ARMv6kz] && ARMArch < ARMv6kz) ARMArch = ARMv6kz;
371
  if (Bits[ARM::ARMv6m] && ARMArch < ARMv6m) ARMArch = ARMv6m;
372
  if (Bits[ARM::ARMv6sm] && ARMArch < ARMv6sm) ARMArch = ARMv6sm;
373
  if (Bits[ARM::ARMv6t2] && ARMArch < ARMv6t2) ARMArch = ARMv6t2;
374
  if (Bits[ARM::ARMv7a] && ARMArch < ARMv7a) ARMArch = ARMv7a;
375
  if (Bits[ARM::ARMv7em] && ARMArch < ARMv7em) ARMArch = ARMv7em;
376
  if (Bits[ARM::ARMv7k] && ARMArch < ARMv7a) ARMArch = ARMv7a;
377
  if (Bits[ARM::ARMv7m] && ARMArch < ARMv7m) ARMArch = ARMv7m;
378
  if (Bits[ARM::ARMv7r] && ARMArch < ARMv7r) ARMArch = ARMv7r;
379
  if (Bits[ARM::ARMv7s] && ARMArch < ARMv7a) ARMArch = ARMv7a;
380
  if (Bits[ARM::ARMv8a] && ARMArch < ARMv8a) ARMArch = ARMv8a;
381
  if (Bits[ARM::ARMv8mBaseline] && ARMArch < ARMv8mBaseline) ARMArch = ARMv8mBaseline;
382
  if (Bits[ARM::ARMv8mMainline] && ARMArch < ARMv8mMainline) ARMArch = ARMv8mMainline;
383
  if (Bits[ARM::ARMv81a] && ARMArch < ARMv81a) ARMArch = ARMv81a;
384
  if (Bits[ARM::ARMv82a] && ARMArch < ARMv82a) ARMArch = ARMv82a;
385
  if (Bits[ARM::Feature8MSecExt]) Has8MSecExt = true;
386
  if (Bits[ARM::FeatureAClass] && ARMProcClass < AClass) ARMProcClass = AClass;
387
  if (Bits[ARM::FeatureAcquireRelease]) HasAcquireRelease = true;
388
  if (Bits[ARM::FeatureAvoidMOVsShOp]) AvoidMOVsShifterOperand = true;
389
  if (Bits[ARM::FeatureAvoidPartialCPSR]) AvoidCPSRPartialUpdate = true;
390
  if (Bits[ARM::FeatureCRC]) HasCRC = true;
391
  if (Bits[ARM::FeatureCrypto]) HasCrypto = true;
392
  if (Bits[ARM::FeatureD16]) HasD16 = true;
393
  if (Bits[ARM::FeatureDB]) HasDataBarrier = true;
394
  if (Bits[ARM::FeatureDSP]) HasDSP = true;
395
  if (Bits[ARM::FeatureFP16]) HasFP16 = true;
396
  if (Bits[ARM::FeatureFPARMv8]) HasFPARMv8 = true;
397
  if (Bits[ARM::FeatureFullFP16]) HasFullFP16 = true;
398
  if (Bits[ARM::FeatureHWDiv]) HasHardwareDivide = true;
399
  if (Bits[ARM::FeatureHWDivARM]) HasHardwareDivideInARM = true;
400
  if (Bits[ARM::FeatureHasRAS]) HasRAS = true;
401
  if (Bits[ARM::FeatureHasSlowFPVMLx]) SlowFPVMLx = true;
402
  if (Bits[ARM::FeatureLongCalls]) GenLongCalls = true;
403
  if (Bits[ARM::FeatureMClass] && ARMProcClass < MClass) ARMProcClass = MClass;
404
  if (Bits[ARM::FeatureMP]) HasMPExtension = true;
405
  if (Bits[ARM::FeatureNEON]) HasNEON = true;
406
  if (Bits[ARM::FeatureNEONForFP]) UseNEONForSinglePrecisionFP = true;
407
  if (Bits[ARM::FeatureNaClTrap]) UseNaClTrap = true;
408
  if (Bits[ARM::FeatureNoARM]) NoARM = true;
409
  if (Bits[ARM::FeatureNoMovt]) NoMovt = true;
410
  if (Bits[ARM::FeaturePerfMon]) HasPerfMon = true;
411
  if (Bits[ARM::FeaturePref32BitThumb]) Pref32BitThumb = true;
412
  if (Bits[ARM::FeatureRClass] && ARMProcClass < RClass) ARMProcClass = RClass;
413
  if (Bits[ARM::FeatureReserveR9]) ReserveR9 = true;
414
  if (Bits[ARM::FeatureSlowFPBrcc]) SlowFPBrcc = true;
415
  if (Bits[ARM::FeatureStrictAlign]) StrictAlign = true;
416
  if (Bits[ARM::FeatureT2XtPk]) HasT2ExtractPack = true;
417
  if (Bits[ARM::FeatureThumb2]) HasThumb2 = true;
418
  if (Bits[ARM::FeatureTrustZone]) HasTrustZone = true;
419
  if (Bits[ARM::FeatureV7Clrex]) HasV7Clrex = true;
420
  if (Bits[ARM::FeatureVFP2]) HasVFPv2 = true;
421
  if (Bits[ARM::FeatureVFP3]) HasVFPv3 = true;
422
  if (Bits[ARM::FeatureVFP4]) HasVFPv4 = true;
423
  if (Bits[ARM::FeatureVFPOnlySP]) FPOnlySP = true;
424
  if (Bits[ARM::FeatureVMLxForwarding]) HasVMLxForwarding = true;
425
  if (Bits[ARM::FeatureVirtualization]) HasVirtualization = true;
426
  if (Bits[ARM::FeatureZCZeroing]) HasZeroCycleZeroing = true;
427
  if (Bits[ARM::HasV4TOps]) HasV4TOps = true;
428
  if (Bits[ARM::HasV5TEOps]) HasV5TEOps = true;
429
  if (Bits[ARM::HasV5TOps]) HasV5TOps = true;
430
  if (Bits[ARM::HasV6KOps]) HasV6KOps = true;
431
  if (Bits[ARM::HasV6MOps]) HasV6MOps = true;
432
  if (Bits[ARM::HasV6Ops]) HasV6Ops = true;
433
  if (Bits[ARM::HasV6T2Ops]) HasV6T2Ops = true;
434
  if (Bits[ARM::HasV7Ops]) HasV7Ops = true;
435
  if (Bits[ARM::HasV8MBaselineOps]) HasV8MBaselineOps = true;
436
  if (Bits[ARM::HasV8MMainlineOps]) HasV8MMainlineOps = true;
437
  if (Bits[ARM::HasV8Ops]) HasV8Ops = true;
438
  if (Bits[ARM::HasV8_1aOps]) HasV8_1aOps = true;
439
  if (Bits[ARM::HasV8_2aOps]) HasV8_2aOps = true;
440
  if (Bits[ARM::IWMMXT] && ARMArch < ARMv5te) ARMArch = ARMv5te;
441
  if (Bits[ARM::IWMMXT2] && ARMArch < ARMv5te) ARMArch = ARMv5te;
442
  if (Bits[ARM::ModeSoftFloat]) UseSoftFloat = true;
443
  if (Bits[ARM::ModeThumb]) InThumbMode = true;
444
  if (Bits[ARM::ProcA5] && ARMProcFamily < CortexA5) ARMProcFamily = CortexA5;
445
  if (Bits[ARM::ProcA7] && ARMProcFamily < CortexA7) ARMProcFamily = CortexA7;
446
  if (Bits[ARM::ProcA8] && ARMProcFamily < CortexA8) ARMProcFamily = CortexA8;
447
  if (Bits[ARM::ProcA9] && ARMProcFamily < CortexA9) ARMProcFamily = CortexA9;
448
  if (Bits[ARM::ProcA12] && ARMProcFamily < CortexA12) ARMProcFamily = CortexA12;
449
  if (Bits[ARM::ProcA15] && ARMProcFamily < CortexA15) ARMProcFamily = CortexA15;
450
  if (Bits[ARM::ProcA17] && ARMProcFamily < CortexA17) ARMProcFamily = CortexA17;
451
  if (Bits[ARM::ProcA35] && ARMProcFamily < CortexA35) ARMProcFamily = CortexA35;
452
  if (Bits[ARM::ProcA53] && ARMProcFamily < CortexA53) ARMProcFamily = CortexA53;
453
  if (Bits[ARM::ProcA57] && ARMProcFamily < CortexA57) ARMProcFamily = CortexA57;
454
  if (Bits[ARM::ProcA72] && ARMProcFamily < CortexA72) ARMProcFamily = CortexA72;
455
  if (Bits[ARM::ProcExynosM1] && ARMProcFamily < ExynosM1) ARMProcFamily = ExynosM1;
456
  if (Bits[ARM::ProcKrait] && ARMProcFamily < Krait) ARMProcFamily = Krait;
457
  if (Bits[ARM::ProcR4] && ARMProcFamily < CortexR4) ARMProcFamily = CortexR4;
458
  if (Bits[ARM::ProcR5] && ARMProcFamily < CortexR5) ARMProcFamily = CortexR5;
459
  if (Bits[ARM::ProcR7] && ARMProcFamily < CortexR7) ARMProcFamily = CortexR7;
460
  if (Bits[ARM::ProcSwift] && ARMProcFamily < Swift) ARMProcFamily = Swift;
461
  if (Bits[ARM::XScale] && ARMArch < ARMv5te) ARMArch = ARMv5te;
462
}
463
#endif // GET_SUBTARGETINFO_TARGET_DESC