1 | //===- ARMTargetParser.def - ARM target parsing defines ---------*- C++ -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | // |
9 | // This file provides defines to build up the ARM target parser's logic. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | // NOTE: NO INCLUDE GUARD DESIRED! |
14 | |
15 | #ifndef ARM_FPU |
16 | #define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) |
17 | #endif |
18 | ARM_FPU("invalid" , FK_INVALID, FPUVersion::NONE, NeonSupportLevel::None, |
19 | FPURestriction::None) |
20 | ARM_FPU("none" , FK_NONE, FPUVersion::NONE, NeonSupportLevel::None, |
21 | FPURestriction::None) |
22 | ARM_FPU("vfp" , FK_VFP, FPUVersion::VFPV2, NeonSupportLevel::None, |
23 | FPURestriction::None) |
24 | ARM_FPU("vfpv2" , FK_VFPV2, FPUVersion::VFPV2, NeonSupportLevel::None, |
25 | FPURestriction::None) |
26 | ARM_FPU("vfpv3" , FK_VFPV3, FPUVersion::VFPV3, NeonSupportLevel::None, |
27 | FPURestriction::None) |
28 | ARM_FPU("vfpv3-fp16" , FK_VFPV3_FP16, FPUVersion::VFPV3_FP16, |
29 | NeonSupportLevel::None, FPURestriction::None) |
30 | ARM_FPU("vfpv3-d16" , FK_VFPV3_D16, FPUVersion::VFPV3, NeonSupportLevel::None, |
31 | FPURestriction::D16) |
32 | ARM_FPU("vfpv3-d16-fp16" , FK_VFPV3_D16_FP16, FPUVersion::VFPV3_FP16, |
33 | NeonSupportLevel::None, FPURestriction::D16) |
34 | ARM_FPU("vfpv3xd" , FK_VFPV3XD, FPUVersion::VFPV3, NeonSupportLevel::None, |
35 | FPURestriction::SP_D16) |
36 | ARM_FPU("vfpv3xd-fp16" , FK_VFPV3XD_FP16, FPUVersion::VFPV3_FP16, |
37 | NeonSupportLevel::None, FPURestriction::SP_D16) |
38 | ARM_FPU("vfpv4" , FK_VFPV4, FPUVersion::VFPV4, NeonSupportLevel::None, |
39 | FPURestriction::None) |
40 | ARM_FPU("vfpv4-d16" , FK_VFPV4_D16, FPUVersion::VFPV4, NeonSupportLevel::None, |
41 | FPURestriction::D16) |
42 | ARM_FPU("fpv4-sp-d16" , FK_FPV4_SP_D16, FPUVersion::VFPV4, |
43 | NeonSupportLevel::None, FPURestriction::SP_D16) |
44 | ARM_FPU("fpv5-d16" , FK_FPV5_D16, FPUVersion::VFPV5, NeonSupportLevel::None, |
45 | FPURestriction::D16) |
46 | ARM_FPU("fpv5-sp-d16" , FK_FPV5_SP_D16, FPUVersion::VFPV5, |
47 | NeonSupportLevel::None, FPURestriction::SP_D16) |
48 | ARM_FPU("fp-armv8" , FK_FP_ARMV8, FPUVersion::VFPV5, NeonSupportLevel::None, |
49 | FPURestriction::None) |
50 | ARM_FPU("fp-armv8-fullfp16-d16" , FK_FP_ARMV8_FULLFP16_D16, |
51 | FPUVersion::VFPV5_FULLFP16, NeonSupportLevel::None, FPURestriction::D16) |
52 | ARM_FPU("fp-armv8-fullfp16-sp-d16" , FK_FP_ARMV8_FULLFP16_SP_D16, |
53 | FPUVersion::VFPV5_FULLFP16, NeonSupportLevel::None, |
54 | FPURestriction::SP_D16) |
55 | ARM_FPU("neon" , FK_NEON, FPUVersion::VFPV3, NeonSupportLevel::Neon, |
56 | FPURestriction::None) |
57 | ARM_FPU("neon-fp16" , FK_NEON_FP16, FPUVersion::VFPV3_FP16, |
58 | NeonSupportLevel::Neon, FPURestriction::None) |
59 | ARM_FPU("neon-vfpv4" , FK_NEON_VFPV4, FPUVersion::VFPV4, NeonSupportLevel::Neon, |
60 | FPURestriction::None) |
61 | ARM_FPU("neon-fp-armv8" , FK_NEON_FP_ARMV8, FPUVersion::VFPV5, |
62 | NeonSupportLevel::Neon, FPURestriction::None) |
63 | ARM_FPU("crypto-neon-fp-armv8" , FK_CRYPTO_NEON_FP_ARMV8, FPUVersion::VFPV5, |
64 | NeonSupportLevel::Crypto, FPURestriction::None) |
65 | ARM_FPU("softvfp" , FK_SOFTVFP, FPUVersion::NONE, NeonSupportLevel::None, |
66 | FPURestriction::None) |
67 | #undef ARM_FPU |
68 | |
69 | #ifndef ARM_ARCH |
70 | #define ARM_ARCH(NAME, ID, CPU_ATTR, ARCH_FEATURE, ARCH_ATTR, ARCH_FPU, \ |
71 | ARCH_BASE_EXT) |
72 | #endif |
73 | ARM_ARCH("invalid" , INVALID, "" , "+" , ARMBuildAttrs::CPUArch::Pre_v4, FK_NONE, |
74 | ARM::AEK_NONE) |
75 | ARM_ARCH("armv4" , ARMV4, "4" , "+v4" , ARMBuildAttrs::CPUArch::v4, FK_NONE, |
76 | ARM::AEK_NONE) |
77 | ARM_ARCH("armv4t" , ARMV4T, "4T" , "+v4t" , ARMBuildAttrs::CPUArch::v4T, FK_NONE, |
78 | ARM::AEK_NONE) |
79 | ARM_ARCH("armv5t" , ARMV5T, "5T" , "+v5" , ARMBuildAttrs::CPUArch::v5T, FK_NONE, |
80 | ARM::AEK_NONE) |
81 | ARM_ARCH("armv5te" , ARMV5TE, "5TE" , "+v5e" , ARMBuildAttrs::CPUArch::v5TE, |
82 | FK_NONE, ARM::AEK_DSP) |
83 | ARM_ARCH("armv5tej" , ARMV5TEJ, "5TEJ" , "+v5e" , ARMBuildAttrs::CPUArch::v5TEJ, |
84 | FK_NONE, ARM::AEK_DSP) |
85 | ARM_ARCH("armv6" , ARMV6, "6" , "+v6" , ARMBuildAttrs::CPUArch::v6, FK_VFPV2, |
86 | ARM::AEK_DSP) |
87 | ARM_ARCH("armv6k" , ARMV6K, "6K" , "+v6k" , ARMBuildAttrs::CPUArch::v6K, FK_VFPV2, |
88 | ARM::AEK_DSP) |
89 | ARM_ARCH("armv6t2" , ARMV6T2, "6T2" , "+v6t2" , ARMBuildAttrs::CPUArch::v6T2, |
90 | FK_NONE, ARM::AEK_DSP) |
91 | ARM_ARCH("armv6kz" , ARMV6KZ, "6KZ" , "+v6kz" , ARMBuildAttrs::CPUArch::v6KZ, |
92 | FK_VFPV2, (ARM::AEK_SEC | ARM::AEK_DSP)) |
93 | ARM_ARCH("armv6-m" , ARMV6M, "6-M" , "+v6m" , ARMBuildAttrs::CPUArch::v6_M, |
94 | FK_NONE, ARM::AEK_NONE) |
95 | ARM_ARCH("armv7-a" , ARMV7A, "7-A" , "+v7" , ARMBuildAttrs::CPUArch::v7, FK_NEON, |
96 | ARM::AEK_DSP) |
97 | ARM_ARCH("armv7ve" , ARMV7VE, "7VE" , "+v7ve" , ARMBuildAttrs::CPUArch::v7, |
98 | FK_NEON, |
99 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
100 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP)) |
101 | ARM_ARCH("armv7-r" , ARMV7R, "7-R" , "+v7r" , ARMBuildAttrs::CPUArch::v7, FK_NONE, |
102 | (ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP)) |
103 | ARM_ARCH("armv7-m" , ARMV7M, "7-M" , "+v7m" , ARMBuildAttrs::CPUArch::v7, FK_NONE, |
104 | ARM::AEK_HWDIVTHUMB) |
105 | ARM_ARCH("armv7e-m" , ARMV7EM, "7E-M" , "+v7em" , ARMBuildAttrs::CPUArch::v7E_M, |
106 | FK_NONE, (ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP)) |
107 | ARM_ARCH("armv8-a" , ARMV8A, "8-A" , "+v8a" , ARMBuildAttrs::CPUArch::v8_A, |
108 | FK_CRYPTO_NEON_FP_ARMV8, |
109 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
110 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC)) |
111 | ARM_ARCH("armv8.1-a" , ARMV8_1A, "8.1-A" , "+v8.1a" , ARMBuildAttrs::CPUArch::v8_A, |
112 | FK_CRYPTO_NEON_FP_ARMV8, |
113 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
114 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC)) |
115 | ARM_ARCH("armv8.2-a" , ARMV8_2A, "8.2-A" , "+v8.2a" , ARMBuildAttrs::CPUArch::v8_A, |
116 | FK_CRYPTO_NEON_FP_ARMV8, |
117 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
118 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS)) |
119 | ARM_ARCH("armv8.3-a" , ARMV8_3A, "8.3-A" , "+v8.3a" , ARMBuildAttrs::CPUArch::v8_A, |
120 | FK_CRYPTO_NEON_FP_ARMV8, |
121 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
122 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS)) |
123 | ARM_ARCH("armv8.4-a" , ARMV8_4A, "8.4-A" , "+v8.4a" , ARMBuildAttrs::CPUArch::v8_A, |
124 | FK_CRYPTO_NEON_FP_ARMV8, |
125 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
126 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
127 | ARM::AEK_DOTPROD)) |
128 | ARM_ARCH("armv8.5-a" , ARMV8_5A, "8.5-A" , "+v8.5a" , ARMBuildAttrs::CPUArch::v8_A, |
129 | FK_CRYPTO_NEON_FP_ARMV8, |
130 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
131 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
132 | ARM::AEK_DOTPROD)) |
133 | ARM_ARCH("armv8.6-a" , ARMV8_6A, "8.6-A" , "+v8.6a" , ARMBuildAttrs::CPUArch::v8_A, |
134 | FK_CRYPTO_NEON_FP_ARMV8, |
135 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
136 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
137 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
138 | ARM_ARCH("armv8.7-a" , ARMV8_7A, "8.7-A" , "+v8.7a" , ARMBuildAttrs::CPUArch::v8_A, |
139 | FK_CRYPTO_NEON_FP_ARMV8, |
140 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
141 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
142 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
143 | ARM_ARCH("armv8.8-a" , ARMV8_8A, "8.8-A" , "+v8.8a" , ARMBuildAttrs::CPUArch::v8_A, |
144 | FK_CRYPTO_NEON_FP_ARMV8, |
145 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
146 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
147 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 | ARM::AEK_AES | |
148 | ARM::AEK_I8MM)) |
149 | ARM_ARCH("armv8.9-a" , ARMV8_9A, "8.9-A" , "+v8.9a" , ARMBuildAttrs::CPUArch::v8_A, |
150 | FK_CRYPTO_NEON_FP_ARMV8, |
151 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
152 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
153 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_SHA2 | ARM::AEK_AES | |
154 | ARM::AEK_I8MM)) |
155 | ARM_ARCH("armv9-a" , ARMV9A, "9-A" , "+v9a" , ARMBuildAttrs::CPUArch::v9_A, |
156 | FK_NEON_FP_ARMV8, |
157 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
158 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
159 | ARM::AEK_DOTPROD)) |
160 | ARM_ARCH("armv9.1-a" , ARMV9_1A, "9.1-A" , "+v9.1a" , ARMBuildAttrs::CPUArch::v9_A, |
161 | FK_NEON_FP_ARMV8, |
162 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
163 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
164 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
165 | ARM_ARCH("armv9.2-a" , ARMV9_2A, "9.2-A" , "+v9.2a" , ARMBuildAttrs::CPUArch::v9_A, |
166 | FK_NEON_FP_ARMV8, |
167 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
168 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
169 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
170 | ARM_ARCH("armv9.3-a" , ARMV9_3A, "9.3-A" , "+v9.3a" , ARMBuildAttrs::CPUArch::v9_A, |
171 | FK_CRYPTO_NEON_FP_ARMV8, |
172 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
173 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
174 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
175 | ARM_ARCH("armv9.4-a" , ARMV9_4A, "9.4-A" , "+v9.4a" , ARMBuildAttrs::CPUArch::v9_A, |
176 | FK_NEON_FP_ARMV8, |
177 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
178 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
179 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
180 | ARM_ARCH("armv9.5-a" , ARMV9_5A, "9.5-A" , "+v9.5a" , ARMBuildAttrs::CPUArch::v9_A, |
181 | FK_NEON_FP_ARMV8, |
182 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
183 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS | |
184 | ARM::AEK_DOTPROD | ARM::AEK_BF16 | ARM::AEK_I8MM)) |
185 | ARM_ARCH("armv8-r" , ARMV8R, "8-R" , "+v8r" , ARMBuildAttrs::CPUArch::v8_R, |
186 | FK_NEON_FP_ARMV8, |
187 | (ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
188 | ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC)) |
189 | ARM_ARCH("armv8-m.base" , ARMV8MBaseline, "8-M.Baseline" , "+v8m.base" , |
190 | ARMBuildAttrs::CPUArch::v8_M_Base, FK_NONE, ARM::AEK_HWDIVTHUMB) |
191 | ARM_ARCH("armv8-m.main" , ARMV8MMainline, "8-M.Mainline" , "+v8m.main" , |
192 | ARMBuildAttrs::CPUArch::v8_M_Main, FK_FPV5_D16, ARM::AEK_HWDIVTHUMB) |
193 | ARM_ARCH("armv8.1-m.main" , ARMV8_1MMainline, "8.1-M.Mainline" , "+v8.1m.main" , |
194 | ARMBuildAttrs::CPUArch::v8_1_M_Main, FK_FP_ARMV8_FULLFP16_SP_D16, |
195 | ARM::AEK_HWDIVTHUMB | ARM::AEK_RAS | ARM::AEK_LOB) |
196 | // Non-standard Arch names. |
197 | ARM_ARCH("iwmmxt" , IWMMXT, "iwmmxt" , "+" , ARMBuildAttrs::CPUArch::v5TE, FK_NONE, |
198 | ARM::AEK_NONE) |
199 | ARM_ARCH("iwmmxt2" , IWMMXT2, "iwmmxt2" , "+" , ARMBuildAttrs::CPUArch::v5TE, |
200 | FK_NONE, ARM::AEK_NONE) |
201 | ARM_ARCH("xscale" , XSCALE, "xscale" , "+v5e" , ARMBuildAttrs::CPUArch::v5TE, |
202 | FK_NONE, ARM::AEK_NONE) |
203 | ARM_ARCH("armv7s" , ARMV7S, "7-S" , "+v7s" , ARMBuildAttrs::CPUArch::v7, |
204 | FK_NEON_VFPV4, ARM::AEK_DSP) |
205 | ARM_ARCH("armv7k" , ARMV7K, "7-K" , "+v7k" , ARMBuildAttrs::CPUArch::v7, FK_NONE, |
206 | ARM::AEK_DSP) |
207 | #undef ARM_ARCH |
208 | |
209 | #ifndef ARM_ARCH_EXT_NAME |
210 | #define ARM_ARCH_EXT_NAME(NAME, ID, FEATURE, NEGFEATURE) |
211 | #endif |
212 | ARM_ARCH_EXT_NAME("invalid" , ARM::AEK_INVALID, {}, {}) |
213 | ARM_ARCH_EXT_NAME("none" , ARM::AEK_NONE, {}, {}) |
214 | ARM_ARCH_EXT_NAME("crc" , ARM::AEK_CRC, "+crc" , "-crc" ) |
215 | ARM_ARCH_EXT_NAME("crypto" , ARM::AEK_CRYPTO, "+crypto" , "-crypto" ) |
216 | ARM_ARCH_EXT_NAME("sha2" , ARM::AEK_SHA2, "+sha2" , "-sha2" ) |
217 | ARM_ARCH_EXT_NAME("aes" , ARM::AEK_AES, "+aes" , "-aes" ) |
218 | ARM_ARCH_EXT_NAME("dotprod" , ARM::AEK_DOTPROD, "+dotprod" , "-dotprod" ) |
219 | ARM_ARCH_EXT_NAME("dsp" , ARM::AEK_DSP, "+dsp" , "-dsp" ) |
220 | ARM_ARCH_EXT_NAME("fp" , ARM::AEK_FP, {}, {}) |
221 | ARM_ARCH_EXT_NAME("fp.dp" , ARM::AEK_FP_DP, {}, {}) |
222 | ARM_ARCH_EXT_NAME("mve" , (ARM::AEK_DSP | ARM::AEK_SIMD), "+mve" , "-mve" ) |
223 | ARM_ARCH_EXT_NAME("mve.fp" , (ARM::AEK_DSP | ARM::AEK_SIMD | ARM::AEK_FP), |
224 | "+mve.fp" , "-mve.fp" ) |
225 | ARM_ARCH_EXT_NAME("idiv" , (ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB), {}, {}) |
226 | ARM_ARCH_EXT_NAME("mp" , ARM::AEK_MP, {}, {}) |
227 | ARM_ARCH_EXT_NAME("simd" , ARM::AEK_SIMD, {}, {}) |
228 | ARM_ARCH_EXT_NAME("sec" , ARM::AEK_SEC, {}, {}) |
229 | ARM_ARCH_EXT_NAME("virt" , ARM::AEK_VIRT, {}, {}) |
230 | ARM_ARCH_EXT_NAME("fp16" , ARM::AEK_FP16, "+fullfp16" , "-fullfp16" ) |
231 | ARM_ARCH_EXT_NAME("ras" , ARM::AEK_RAS, "+ras" , "-ras" ) |
232 | ARM_ARCH_EXT_NAME("os" , ARM::AEK_OS, {}, {}) |
233 | ARM_ARCH_EXT_NAME("iwmmxt" , ARM::AEK_IWMMXT, {}, {}) |
234 | ARM_ARCH_EXT_NAME("iwmmxt2" , ARM::AEK_IWMMXT2, {}, {}) |
235 | ARM_ARCH_EXT_NAME("maverick" , ARM::AEK_MAVERICK, {}, {}) |
236 | ARM_ARCH_EXT_NAME("xscale" , ARM::AEK_XSCALE, {}, {}) |
237 | ARM_ARCH_EXT_NAME("fp16fml" , ARM::AEK_FP16FML, "+fp16fml" , "-fp16fml" ) |
238 | ARM_ARCH_EXT_NAME("bf16" , ARM::AEK_BF16, "+bf16" , "-bf16" ) |
239 | ARM_ARCH_EXT_NAME("sb" , ARM::AEK_SB, "+sb" , "-sb" ) |
240 | ARM_ARCH_EXT_NAME("i8mm" , ARM::AEK_I8MM, "+i8mm" , "-i8mm" ) |
241 | ARM_ARCH_EXT_NAME("lob" , ARM::AEK_LOB, "+lob" , "-lob" ) |
242 | ARM_ARCH_EXT_NAME("cdecp0" , ARM::AEK_CDECP0, "+cdecp0" , "-cdecp0" ) |
243 | ARM_ARCH_EXT_NAME("cdecp1" , ARM::AEK_CDECP1, "+cdecp1" , "-cdecp1" ) |
244 | ARM_ARCH_EXT_NAME("cdecp2" , ARM::AEK_CDECP2, "+cdecp2" , "-cdecp2" ) |
245 | ARM_ARCH_EXT_NAME("cdecp3" , ARM::AEK_CDECP3, "+cdecp3" , "-cdecp3" ) |
246 | ARM_ARCH_EXT_NAME("cdecp4" , ARM::AEK_CDECP4, "+cdecp4" , "-cdecp4" ) |
247 | ARM_ARCH_EXT_NAME("cdecp5" , ARM::AEK_CDECP5, "+cdecp5" , "-cdecp5" ) |
248 | ARM_ARCH_EXT_NAME("cdecp6" , ARM::AEK_CDECP6, "+cdecp6" , "-cdecp6" ) |
249 | ARM_ARCH_EXT_NAME("cdecp7" , ARM::AEK_CDECP7, "+cdecp7" , "-cdecp7" ) |
250 | ARM_ARCH_EXT_NAME("pacbti" , ARM::AEK_PACBTI, "+pacbti" , "-pacbti" ) |
251 | #undef ARM_ARCH_EXT_NAME |
252 | |
253 | #ifndef ARM_HW_DIV_NAME |
254 | #define ARM_HW_DIV_NAME(NAME, ID) |
255 | #endif |
256 | ARM_HW_DIV_NAME("invalid" , ARM::AEK_INVALID) |
257 | ARM_HW_DIV_NAME("none" , ARM::AEK_NONE) |
258 | ARM_HW_DIV_NAME("thumb" , ARM::AEK_HWDIVTHUMB) |
259 | ARM_HW_DIV_NAME("arm" , ARM::AEK_HWDIVARM) |
260 | ARM_HW_DIV_NAME("arm,thumb" , (ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB)) |
261 | #undef ARM_HW_DIV_NAME |
262 | |
263 | #ifndef ARM_CPU_NAME |
264 | #define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT, DEFAULT_EXT) |
265 | #endif |
266 | ARM_CPU_NAME("arm8" , ARMV4, FK_NONE, false, ARM::AEK_NONE) |
267 | ARM_CPU_NAME("arm810" , ARMV4, FK_NONE, false, ARM::AEK_NONE) |
268 | ARM_CPU_NAME("strongarm" , ARMV4, FK_NONE, true, ARM::AEK_NONE) |
269 | ARM_CPU_NAME("strongarm110" , ARMV4, FK_NONE, false, ARM::AEK_NONE) |
270 | ARM_CPU_NAME("strongarm1100" , ARMV4, FK_NONE, false, ARM::AEK_NONE) |
271 | ARM_CPU_NAME("strongarm1110" , ARMV4, FK_NONE, false, ARM::AEK_NONE) |
272 | ARM_CPU_NAME("arm7tdmi" , ARMV4T, FK_NONE, true, ARM::AEK_NONE) |
273 | ARM_CPU_NAME("arm7tdmi-s" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
274 | ARM_CPU_NAME("arm710t" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
275 | ARM_CPU_NAME("arm720t" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
276 | ARM_CPU_NAME("arm9" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
277 | ARM_CPU_NAME("arm9tdmi" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
278 | ARM_CPU_NAME("arm920" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
279 | ARM_CPU_NAME("arm920t" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
280 | ARM_CPU_NAME("arm922t" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
281 | ARM_CPU_NAME("arm940t" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
282 | ARM_CPU_NAME("ep9312" , ARMV4T, FK_NONE, false, ARM::AEK_NONE) |
283 | ARM_CPU_NAME("arm10tdmi" , ARMV5T, FK_NONE, true, ARM::AEK_NONE) |
284 | ARM_CPU_NAME("arm1020t" , ARMV5T, FK_NONE, false, ARM::AEK_NONE) |
285 | ARM_CPU_NAME("arm9e" , ARMV5TE, FK_NONE, false, ARM::AEK_NONE) |
286 | ARM_CPU_NAME("arm946e-s" , ARMV5TE, FK_NONE, false, ARM::AEK_NONE) |
287 | ARM_CPU_NAME("arm966e-s" , ARMV5TE, FK_NONE, false, ARM::AEK_NONE) |
288 | ARM_CPU_NAME("arm968e-s" , ARMV5TE, FK_NONE, false, ARM::AEK_NONE) |
289 | ARM_CPU_NAME("arm10e" , ARMV5TE, FK_NONE, false, ARM::AEK_NONE) |
290 | ARM_CPU_NAME("arm1020e" , ARMV5TE, FK_NONE, false, ARM::AEK_NONE) |
291 | ARM_CPU_NAME("arm1022e" , ARMV5TE, FK_NONE, true, ARM::AEK_NONE) |
292 | ARM_CPU_NAME("arm926ej-s" , ARMV5TEJ, FK_NONE, true, ARM::AEK_NONE) |
293 | ARM_CPU_NAME("arm1136j-s" , ARMV6, FK_NONE, false, ARM::AEK_NONE) |
294 | ARM_CPU_NAME("arm1136jf-s" , ARMV6, FK_VFPV2, true, ARM::AEK_NONE) |
295 | ARM_CPU_NAME("mpcore" , ARMV6K, FK_VFPV2, true, ARM::AEK_NONE) |
296 | ARM_CPU_NAME("mpcorenovfp" , ARMV6K, FK_NONE, false, ARM::AEK_NONE) |
297 | ARM_CPU_NAME("arm1176jz-s" , ARMV6KZ, FK_NONE, false, ARM::AEK_NONE) |
298 | ARM_CPU_NAME("arm1176jzf-s" , ARMV6KZ, FK_VFPV2, true, ARM::AEK_NONE) |
299 | ARM_CPU_NAME("arm1156t2-s" , ARMV6T2, FK_NONE, true, ARM::AEK_NONE) |
300 | ARM_CPU_NAME("arm1156t2f-s" , ARMV6T2, FK_VFPV2, false, ARM::AEK_NONE) |
301 | ARM_CPU_NAME("cortex-m0" , ARMV6M, FK_NONE, true, ARM::AEK_NONE) |
302 | ARM_CPU_NAME("cortex-m0plus" , ARMV6M, FK_NONE, false, ARM::AEK_NONE) |
303 | ARM_CPU_NAME("cortex-m1" , ARMV6M, FK_NONE, false, ARM::AEK_NONE) |
304 | ARM_CPU_NAME("sc000" , ARMV6M, FK_NONE, false, ARM::AEK_NONE) |
305 | ARM_CPU_NAME("cortex-a5" , ARMV7A, FK_NEON_VFPV4, false, |
306 | (ARM::AEK_SEC | ARM::AEK_MP)) |
307 | ARM_CPU_NAME("cortex-a7" , ARMV7A, FK_NEON_VFPV4, false, |
308 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
309 | ARM::AEK_HWDIVTHUMB)) |
310 | ARM_CPU_NAME("cortex-a8" , ARMV7A, FK_NEON, false, ARM::AEK_SEC) |
311 | ARM_CPU_NAME("cortex-a9" , ARMV7A, FK_NEON_FP16, false, |
312 | (ARM::AEK_SEC | ARM::AEK_MP)) |
313 | ARM_CPU_NAME("cortex-a12" , ARMV7A, FK_NEON_VFPV4, false, |
314 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
315 | ARM::AEK_HWDIVTHUMB)) |
316 | ARM_CPU_NAME("cortex-a15" , ARMV7A, FK_NEON_VFPV4, false, |
317 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
318 | ARM::AEK_HWDIVTHUMB)) |
319 | ARM_CPU_NAME("cortex-a17" , ARMV7A, FK_NEON_VFPV4, false, |
320 | (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | |
321 | ARM::AEK_HWDIVTHUMB)) |
322 | ARM_CPU_NAME("krait" , ARMV7A, FK_NEON_VFPV4, false, |
323 | (ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB)) |
324 | ARM_CPU_NAME("cortex-r4" , ARMV7R, FK_NONE, true, ARM::AEK_NONE) |
325 | ARM_CPU_NAME("cortex-r4f" , ARMV7R, FK_VFPV3_D16, false, ARM::AEK_NONE) |
326 | ARM_CPU_NAME("cortex-r5" , ARMV7R, FK_VFPV3_D16, false, |
327 | (ARM::AEK_MP | ARM::AEK_HWDIVARM)) |
328 | ARM_CPU_NAME("cortex-r7" , ARMV7R, FK_VFPV3_D16_FP16, false, |
329 | (ARM::AEK_MP | ARM::AEK_HWDIVARM)) |
330 | ARM_CPU_NAME("cortex-r8" , ARMV7R, FK_VFPV3_D16_FP16, false, |
331 | (ARM::AEK_MP | ARM::AEK_HWDIVARM)) |
332 | ARM_CPU_NAME("cortex-r52" , ARMV8R, FK_NEON_FP_ARMV8, true, ARM::AEK_NONE) |
333 | ARM_CPU_NAME("sc300" , ARMV7M, FK_NONE, false, ARM::AEK_NONE) |
334 | ARM_CPU_NAME("cortex-m3" , ARMV7M, FK_NONE, true, ARM::AEK_NONE) |
335 | ARM_CPU_NAME("cortex-m4" , ARMV7EM, FK_FPV4_SP_D16, true, ARM::AEK_NONE) |
336 | ARM_CPU_NAME("cortex-m7" , ARMV7EM, FK_FPV5_D16, false, ARM::AEK_NONE) |
337 | ARM_CPU_NAME("cortex-m23" , ARMV8MBaseline, FK_NONE, false, ARM::AEK_NONE) |
338 | ARM_CPU_NAME("cortex-m33" , ARMV8MMainline, FK_FPV5_SP_D16, false, ARM::AEK_DSP) |
339 | ARM_CPU_NAME("cortex-m35p" , ARMV8MMainline, FK_FPV5_SP_D16, false, ARM::AEK_DSP) |
340 | ARM_CPU_NAME("cortex-m55" , ARMV8_1MMainline, FK_FP_ARMV8_FULLFP16_D16, false, |
341 | (ARM::AEK_DSP | ARM::AEK_SIMD | ARM::AEK_FP | ARM::AEK_FP16)) |
342 | ARM_CPU_NAME("cortex-m85" , ARMV8_1MMainline, FK_FP_ARMV8_FULLFP16_D16, false, |
343 | (ARM::AEK_DSP | ARM::AEK_SIMD | ARM::AEK_FP | ARM::AEK_FP16 | |
344 | ARM::AEK_RAS | ARM::AEK_PACBTI)) |
345 | ARM_CPU_NAME("cortex-m52" , ARMV8_1MMainline, FK_FP_ARMV8_FULLFP16_D16, false, |
346 | (ARM::AEK_DSP | ARM::AEK_SIMD | ARM::AEK_FP | ARM::AEK_FP16 | |
347 | ARM::AEK_RAS | ARM::AEK_PACBTI)) |
348 | ARM_CPU_NAME("cortex-a32" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
349 | ARM_CPU_NAME("cortex-a35" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
350 | ARM_CPU_NAME("cortex-a53" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
351 | ARM_CPU_NAME("cortex-a55" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
352 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
353 | ARM_CPU_NAME("cortex-a57" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
354 | ARM_CPU_NAME("cortex-a72" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
355 | ARM_CPU_NAME("cortex-a73" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
356 | ARM_CPU_NAME("cortex-a75" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
357 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
358 | ARM_CPU_NAME("cortex-a76" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
359 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
360 | ARM_CPU_NAME("cortex-a76ae" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
361 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
362 | ARM_CPU_NAME("cortex-a77" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
363 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
364 | ARM_CPU_NAME("cortex-a78" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
365 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
366 | ARM_CPU_NAME("cortex-a78ae" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
367 | (ARM::AEK_RAS | ARM::AEK_DOTPROD)) |
368 | ARM_CPU_NAME("cortex-a78c" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
369 | ARM::AEK_FP16 | ARM::AEK_DOTPROD) |
370 | ARM_CPU_NAME("cortex-a710" , ARMV9A, FK_NEON_FP_ARMV8, false, |
371 | (ARM::AEK_DOTPROD | ARM::AEK_FP16FML | ARM::AEK_BF16 | |
372 | ARM::AEK_SB | ARM::AEK_I8MM)) |
373 | ARM_CPU_NAME("cortex-x1" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
374 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
375 | ARM_CPU_NAME("cortex-x1c" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
376 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
377 | ARM_CPU_NAME("neoverse-n1" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
378 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
379 | ARM_CPU_NAME("neoverse-n2" , ARMV9A, FK_NEON_FP_ARMV8, false, |
380 | (ARM::AEK_BF16 | ARM::AEK_DOTPROD | ARM::AEK_FP16FML | |
381 | ARM::AEK_I8MM | ARM::AEK_RAS | ARM::AEK_SB )) |
382 | ARM_CPU_NAME("neoverse-v1" , ARMV8_4A, FK_CRYPTO_NEON_FP_ARMV8, false, |
383 | (ARM::AEK_RAS | ARM::AEK_FP16 | ARM::AEK_BF16 | ARM::AEK_DOTPROD)) |
384 | ARM_CPU_NAME("cyclone" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
385 | ARM_CPU_NAME("exynos-m3" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
386 | ARM_CPU_NAME("exynos-m4" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
387 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
388 | ARM_CPU_NAME("exynos-m5" , ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false, |
389 | (ARM::AEK_FP16 | ARM::AEK_DOTPROD)) |
390 | ARM_CPU_NAME("kryo" , ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC) |
391 | // Non-standard Arch names. |
392 | ARM_CPU_NAME("iwmmxt" , IWMMXT, FK_NONE, true, ARM::AEK_NONE) |
393 | ARM_CPU_NAME("xscale" , XSCALE, FK_NONE, true, ARM::AEK_NONE) |
394 | ARM_CPU_NAME("swift" , ARMV7S, FK_NEON_VFPV4, true, |
395 | (ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB)) |
396 | // Invalid CPU |
397 | ARM_CPU_NAME("invalid" , INVALID, FK_INVALID, true, ARM::AEK_INVALID) |
398 | #undef ARM_CPU_NAME |
399 | |