/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 |