Skip to content

Commit 799e880

Browse files
committedAug 30, 2015
Refactor the ARM target parsing to use a def file with macros to expand
the necessary tables. This will allow me to restructure the code and structures using this to be significantly more efficient. It also removes the duplication of the list of several enumerators. It also enshrines that the order of enumerators match the order of the entries in the tables, something the implementation code actually uses. No functionality changed (yet). llvm-svn: 246370
1 parent 4fc3a98 commit 799e880

File tree

3 files changed

+222
-222
lines changed

3 files changed

+222
-222
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
//===- ARMTargetParser.def - ARM target parsing defines ---------*- C++ -*-===//
2+
//
3+
// The LLVM Compiler Infrastructure
4+
//
5+
// This file is distributed under the University of Illinois Open Source
6+
// License. See LICENSE.TXT for details.
7+
//
8+
//===----------------------------------------------------------------------===//
9+
//
10+
// This file provides defines to build up the ARM target parser's logic.
11+
//
12+
//===----------------------------------------------------------------------===//
13+
14+
// NOTE: NO INCLUDE GUARD DESIRED!
15+
16+
#ifndef ARM_FPU
17+
#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION)
18+
#endif
19+
ARM_FPU("invalid", FK_INVALID, FV_NONE, NS_None, FR_None)
20+
ARM_FPU("none", FK_NONE, FV_NONE, NS_None, FR_None)
21+
ARM_FPU("vfp", FK_VFP, FV_VFPV2, NS_None, FR_None)
22+
ARM_FPU("vfpv2", FK_VFPV2, FV_VFPV2, NS_None, FR_None)
23+
ARM_FPU("vfpv3", FK_VFPV3, FV_VFPV3, NS_None, FR_None)
24+
ARM_FPU("vfpv3-fp16", FK_VFPV3_FP16, FV_VFPV3_FP16, NS_None, FR_None)
25+
ARM_FPU("vfpv3-d16", FK_VFPV3_D16, FV_VFPV3, NS_None, FR_D16)
26+
ARM_FPU("vfpv3-d16-fp16", FK_VFPV3_D16_FP16, FV_VFPV3_FP16, NS_None, FR_D16)
27+
ARM_FPU("vfpv3xd", FK_VFPV3XD, FV_VFPV3, NS_None, FR_SP_D16)
28+
ARM_FPU("vfpv3xd-fp16", FK_VFPV3XD_FP16, FV_VFPV3_FP16, NS_None, FR_SP_D16)
29+
ARM_FPU("vfpv4", FK_VFPV4, FV_VFPV4, NS_None, FR_None)
30+
ARM_FPU("vfpv4-d16", FK_VFPV4_D16, FV_VFPV4, NS_None, FR_D16)
31+
ARM_FPU("fpv4-sp-d16", FK_FPV4_SP_D16, FV_VFPV4, NS_None, FR_SP_D16)
32+
ARM_FPU("fpv5-d16", FK_FPV5_D16, FV_VFPV5, NS_None, FR_D16)
33+
ARM_FPU("fpv5-sp-d16", FK_FPV5_SP_D16, FV_VFPV5, NS_None, FR_SP_D16)
34+
ARM_FPU("fp-armv8", FK_FP_ARMV8, FV_VFPV5, NS_None, FR_None)
35+
ARM_FPU("neon", FK_NEON, FV_VFPV3, NS_Neon, FR_None)
36+
ARM_FPU("neon-fp16", FK_NEON_FP16, FV_VFPV3_FP16, NS_Neon, FR_None)
37+
ARM_FPU("neon-vfpv4", FK_NEON_VFPV4, FV_VFPV4, NS_Neon, FR_None)
38+
ARM_FPU("neon-fp-armv8", FK_NEON_FP_ARMV8, FV_VFPV5, NS_Neon, FR_None)
39+
ARM_FPU("crypto-neon-fp-armv8", FK_CRYPTO_NEON_FP_ARMV8, FV_VFPV5, NS_Crypto,
40+
FR_None)
41+
ARM_FPU("softvfp", FK_SOFTVFP, FV_NONE, NS_None, FR_None)
42+
#undef ARM_FPU
43+
44+
#ifndef ARM_ARCH
45+
#define ARM_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR)
46+
#endif
47+
ARM_ARCH("invalid", AK_INVALID, nullptr, nullptr,
48+
ARMBuildAttrs::CPUArch::Pre_v4)
49+
ARM_ARCH("armv2", AK_ARMV2, "2", "v2", ARMBuildAttrs::CPUArch::Pre_v4)
50+
ARM_ARCH("armv2a", AK_ARMV2A, "2A", "v2a", ARMBuildAttrs::CPUArch::Pre_v4)
51+
ARM_ARCH("armv3", AK_ARMV3, "3", "v3", ARMBuildAttrs::CPUArch::Pre_v4)
52+
ARM_ARCH("armv3m", AK_ARMV3M, "3M", "v3m", ARMBuildAttrs::CPUArch::Pre_v4)
53+
ARM_ARCH("armv4", AK_ARMV4, "4", "v4", ARMBuildAttrs::CPUArch::v4)
54+
ARM_ARCH("armv4t", AK_ARMV4T, "4T", "v4t", ARMBuildAttrs::CPUArch::v4T)
55+
ARM_ARCH("armv5t", AK_ARMV5T, "5T", "v5", ARMBuildAttrs::CPUArch::v5T)
56+
ARM_ARCH("armv5te", AK_ARMV5TE, "5TE", "v5e", ARMBuildAttrs::CPUArch::v5TE)
57+
ARM_ARCH("armv5tej", AK_ARMV5TEJ, "5TEJ", "v5e", ARMBuildAttrs::CPUArch::v5TEJ)
58+
ARM_ARCH("armv6", AK_ARMV6, "6", "v6", ARMBuildAttrs::CPUArch::v6)
59+
ARM_ARCH("armv6k", AK_ARMV6K, "6K", "v6k", ARMBuildAttrs::CPUArch::v6K)
60+
ARM_ARCH("armv6t2", AK_ARMV6T2, "6T2", "v6t2", ARMBuildAttrs::CPUArch::v6T2)
61+
ARM_ARCH("armv6z", AK_ARMV6Z, "6Z", "v6z", ARMBuildAttrs::CPUArch::v6KZ)
62+
ARM_ARCH("armv6zk", AK_ARMV6ZK, "6ZK", "v6zk", ARMBuildAttrs::CPUArch::v6KZ)
63+
ARM_ARCH("armv6-m", AK_ARMV6M, "6-M", "v6m", ARMBuildAttrs::CPUArch::v6_M)
64+
ARM_ARCH("armv6s-m", AK_ARMV6SM, "6S-M", "v6sm", ARMBuildAttrs::CPUArch::v6S_M)
65+
ARM_ARCH("armv7-a", AK_ARMV7A, "7-A", "v7", ARMBuildAttrs::CPUArch::v7)
66+
ARM_ARCH("armv7-r", AK_ARMV7R, "7-R", "v7r", ARMBuildAttrs::CPUArch::v7)
67+
ARM_ARCH("armv7-m", AK_ARMV7M, "7-M", "v7m", ARMBuildAttrs::CPUArch::v7)
68+
ARM_ARCH("armv7e-m", AK_ARMV7EM, "7E-M", "v7em", ARMBuildAttrs::CPUArch::v7E_M)
69+
ARM_ARCH("armv8-a", AK_ARMV8A, "8-A", "v8", ARMBuildAttrs::CPUArch::v8)
70+
ARM_ARCH("armv8.1-a", AK_ARMV8_1A, "8.1-A", "v8.1a", ARMBuildAttrs::CPUArch::v8)
71+
// Non-standard Arch names.
72+
ARM_ARCH("iwmmxt", AK_IWMMXT, "iwmmxt", "", ARMBuildAttrs::CPUArch::v5TE)
73+
ARM_ARCH("iwmmxt2", AK_IWMMXT2, "iwmmxt2", "", ARMBuildAttrs::CPUArch::v5TE)
74+
ARM_ARCH("xscale", AK_XSCALE, "xscale", "", ARMBuildAttrs::CPUArch::v5TE)
75+
ARM_ARCH("armv5", AK_ARMV5, "5T", "v5", ARMBuildAttrs::CPUArch::v5T)
76+
ARM_ARCH("armv5e", AK_ARMV5E, "5TE", "v5e", ARMBuildAttrs::CPUArch::v5TE)
77+
ARM_ARCH("armv6j", AK_ARMV6J, "6J", "v6", ARMBuildAttrs::CPUArch::v6)
78+
ARM_ARCH("armv6hl", AK_ARMV6HL, "6-M", "v6hl", ARMBuildAttrs::CPUArch::v6_M)
79+
ARM_ARCH("armv7", AK_ARMV7, "7", "v7", ARMBuildAttrs::CPUArch::v7)
80+
ARM_ARCH("armv7l", AK_ARMV7L, "7-L", "v7l", ARMBuildAttrs::CPUArch::v7)
81+
ARM_ARCH("armv7hl", AK_ARMV7HL, "7-L", "v7hl", ARMBuildAttrs::CPUArch::v7)
82+
ARM_ARCH("armv7s", AK_ARMV7S, "7-S", "v7s", ARMBuildAttrs::CPUArch::v7)
83+
ARM_ARCH("armv7k", AK_ARMV7K, "7-K", "v7k", ARMBuildAttrs::CPUArch::v7)
84+
#undef ARM_ARCH
85+
86+
#ifndef ARM_ARCH_EXT_NAME
87+
#define ARM_ARCH_EXT_NAME(NAME, ID)
88+
#endif
89+
ARM_ARCH_EXT_NAME("invalid", AEK_INVALID)
90+
ARM_ARCH_EXT_NAME("none", AEK_NONE)
91+
ARM_ARCH_EXT_NAME("crc", AEK_CRC)
92+
ARM_ARCH_EXT_NAME("crypto", AEK_CRYPTO)
93+
ARM_ARCH_EXT_NAME("fp", AEK_FP)
94+
ARM_ARCH_EXT_NAME("idiv", (AEK_HWDIVARM | AEK_HWDIV))
95+
ARM_ARCH_EXT_NAME("mp", AEK_MP)
96+
ARM_ARCH_EXT_NAME("simd", AEK_SIMD)
97+
ARM_ARCH_EXT_NAME("sec", AEK_SEC)
98+
ARM_ARCH_EXT_NAME("virt", AEK_VIRT)
99+
ARM_ARCH_EXT_NAME("os", AEK_OS)
100+
ARM_ARCH_EXT_NAME("iwmmxt", AEK_IWMMXT)
101+
ARM_ARCH_EXT_NAME("iwmmxt2", AEK_IWMMXT2)
102+
ARM_ARCH_EXT_NAME("maverick", AEK_MAVERICK)
103+
ARM_ARCH_EXT_NAME("xscale", AEK_XSCALE)
104+
#undef ARM_ARCH_EXT_NAME
105+
106+
#ifndef ARM_HW_DIV_NAME
107+
#define ARM_HW_DIV_NAME(NAME, ID)
108+
#endif
109+
ARM_HW_DIV_NAME("invalid", AEK_INVALID)
110+
ARM_HW_DIV_NAME("none", AEK_NONE)
111+
ARM_HW_DIV_NAME("thumb", AEK_HWDIV)
112+
ARM_HW_DIV_NAME("arm", AEK_HWDIVARM)
113+
ARM_HW_DIV_NAME("arm,thumb", (AEK_HWDIVARM | AEK_HWDIV))
114+
#undef ARM_HW_DIV_NAME
115+
116+
#ifndef ARM_CPU_NAME
117+
#define ARM_CPU_NAME(NAME, ID, DEFAULT_FPU, IS_DEFAULT)
118+
#endif
119+
ARM_CPU_NAME("arm2", AK_ARMV2, FK_NONE, true)
120+
ARM_CPU_NAME("arm3", AK_ARMV2A, FK_NONE, true)
121+
ARM_CPU_NAME("arm6", AK_ARMV3, FK_NONE, true)
122+
ARM_CPU_NAME("arm7m", AK_ARMV3M, FK_NONE, true)
123+
ARM_CPU_NAME("arm8", AK_ARMV4, FK_NONE, false)
124+
ARM_CPU_NAME("arm810", AK_ARMV4, FK_NONE, false)
125+
ARM_CPU_NAME("strongarm", AK_ARMV4, FK_NONE, true)
126+
ARM_CPU_NAME("strongarm110", AK_ARMV4, FK_NONE, false)
127+
ARM_CPU_NAME("strongarm1100", AK_ARMV4, FK_NONE, false)
128+
ARM_CPU_NAME("strongarm1110", AK_ARMV4, FK_NONE, false)
129+
ARM_CPU_NAME("arm7tdmi", AK_ARMV4T, FK_NONE, true)
130+
ARM_CPU_NAME("arm7tdmi-s", AK_ARMV4T, FK_NONE, false)
131+
ARM_CPU_NAME("arm710t", AK_ARMV4T, FK_NONE, false)
132+
ARM_CPU_NAME("arm720t", AK_ARMV4T, FK_NONE, false)
133+
ARM_CPU_NAME("arm9", AK_ARMV4T, FK_NONE, false)
134+
ARM_CPU_NAME("arm9tdmi", AK_ARMV4T, FK_NONE, false)
135+
ARM_CPU_NAME("arm920", AK_ARMV4T, FK_NONE, false)
136+
ARM_CPU_NAME("arm920t", AK_ARMV4T, FK_NONE, false)
137+
ARM_CPU_NAME("arm922t", AK_ARMV4T, FK_NONE, false)
138+
ARM_CPU_NAME("arm9312", AK_ARMV4T, FK_NONE, false)
139+
ARM_CPU_NAME("arm940t", AK_ARMV4T, FK_NONE, false)
140+
ARM_CPU_NAME("ep9312", AK_ARMV4T, FK_NONE, false)
141+
ARM_CPU_NAME("arm10tdmi", AK_ARMV5T, FK_NONE, true)
142+
ARM_CPU_NAME("arm1020t", AK_ARMV5T, FK_NONE, false)
143+
ARM_CPU_NAME("arm9e", AK_ARMV5TE, FK_NONE, false)
144+
ARM_CPU_NAME("arm946e-s", AK_ARMV5TE, FK_NONE, false)
145+
ARM_CPU_NAME("arm966e-s", AK_ARMV5TE, FK_NONE, false)
146+
ARM_CPU_NAME("arm968e-s", AK_ARMV5TE, FK_NONE, false)
147+
ARM_CPU_NAME("arm10e", AK_ARMV5TE, FK_NONE, false)
148+
ARM_CPU_NAME("arm1020e", AK_ARMV5TE, FK_NONE, false)
149+
ARM_CPU_NAME("arm1022e", AK_ARMV5TE, FK_NONE, true)
150+
ARM_CPU_NAME("iwmmxt", AK_ARMV5TE, FK_NONE, false)
151+
ARM_CPU_NAME("xscale", AK_ARMV5TE, FK_NONE, false)
152+
ARM_CPU_NAME("arm926ej-s", AK_ARMV5TEJ, FK_NONE, true)
153+
ARM_CPU_NAME("arm1136jf-s", AK_ARMV6, FK_VFPV2, true)
154+
ARM_CPU_NAME("arm1176j-s", AK_ARMV6K, FK_NONE, false)
155+
ARM_CPU_NAME("arm1176jz-s", AK_ARMV6K, FK_NONE, false)
156+
ARM_CPU_NAME("mpcore", AK_ARMV6K, FK_VFPV2, false)
157+
ARM_CPU_NAME("mpcorenovfp", AK_ARMV6K, FK_NONE, false)
158+
ARM_CPU_NAME("arm1176jzf-s", AK_ARMV6K, FK_VFPV2, true)
159+
ARM_CPU_NAME("arm1176jzf-s", AK_ARMV6Z, FK_VFPV2, true)
160+
ARM_CPU_NAME("arm1176jzf-s", AK_ARMV6ZK, FK_VFPV2, true)
161+
ARM_CPU_NAME("arm1156t2-s", AK_ARMV6T2, FK_NONE, true)
162+
ARM_CPU_NAME("arm1156t2f-s", AK_ARMV6T2, FK_VFPV2, false)
163+
ARM_CPU_NAME("cortex-m0", AK_ARMV6M, FK_NONE, true)
164+
ARM_CPU_NAME("cortex-m0plus", AK_ARMV6M, FK_NONE, false)
165+
ARM_CPU_NAME("cortex-m1", AK_ARMV6M, FK_NONE, false)
166+
ARM_CPU_NAME("sc000", AK_ARMV6M, FK_NONE, false)
167+
ARM_CPU_NAME("cortex-a5", AK_ARMV7A, FK_NEON_VFPV4, false)
168+
ARM_CPU_NAME("cortex-a7", AK_ARMV7A, FK_NEON_VFPV4, false)
169+
ARM_CPU_NAME("cortex-a8", AK_ARMV7A, FK_NEON, true)
170+
ARM_CPU_NAME("cortex-a9", AK_ARMV7A, FK_NEON_FP16, false)
171+
ARM_CPU_NAME("cortex-a12", AK_ARMV7A, FK_NEON_VFPV4, false)
172+
ARM_CPU_NAME("cortex-a15", AK_ARMV7A, FK_NEON_VFPV4, false)
173+
ARM_CPU_NAME("cortex-a17", AK_ARMV7A, FK_NEON_VFPV4, false)
174+
ARM_CPU_NAME("krait", AK_ARMV7A, FK_NEON_VFPV4, false)
175+
ARM_CPU_NAME("cortex-r4", AK_ARMV7R, FK_NONE, true)
176+
ARM_CPU_NAME("cortex-r4f", AK_ARMV7R, FK_VFPV3_D16, false)
177+
ARM_CPU_NAME("cortex-r5", AK_ARMV7R, FK_VFPV3_D16, false)
178+
ARM_CPU_NAME("cortex-r7", AK_ARMV7R, FK_VFPV3_D16_FP16, false)
179+
ARM_CPU_NAME("sc300", AK_ARMV7M, FK_NONE, false)
180+
ARM_CPU_NAME("cortex-m3", AK_ARMV7M, FK_NONE, true)
181+
ARM_CPU_NAME("cortex-m4", AK_ARMV7EM, FK_FPV4_SP_D16, true)
182+
ARM_CPU_NAME("cortex-m7", AK_ARMV7EM, FK_FPV5_D16, false)
183+
ARM_CPU_NAME("cortex-a53", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, true)
184+
ARM_CPU_NAME("cortex-a57", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false)
185+
ARM_CPU_NAME("cortex-a72", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false)
186+
ARM_CPU_NAME("cyclone", AK_ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false)
187+
ARM_CPU_NAME("generic", AK_ARMV8_1A, FK_NEON_FP_ARMV8, true)
188+
// Non-standard Arch names.
189+
ARM_CPU_NAME("iwmmxt", AK_IWMMXT, FK_NONE, true)
190+
ARM_CPU_NAME("xscale", AK_XSCALE, FK_NONE, true)
191+
ARM_CPU_NAME("arm10tdmi", AK_ARMV5, FK_NONE, true)
192+
ARM_CPU_NAME("arm1022e", AK_ARMV5E, FK_NONE, true)
193+
ARM_CPU_NAME("arm1136j-s", AK_ARMV6J, FK_NONE, true)
194+
ARM_CPU_NAME("arm1136jz-s", AK_ARMV6J, FK_NONE, false)
195+
ARM_CPU_NAME("cortex-m0", AK_ARMV6SM, FK_NONE, true)
196+
ARM_CPU_NAME("arm1176jzf-s", AK_ARMV6HL, FK_VFPV2, true)
197+
ARM_CPU_NAME("cortex-a8", AK_ARMV7, FK_NEON, true)
198+
ARM_CPU_NAME("cortex-a8", AK_ARMV7L, FK_NEON, true)
199+
ARM_CPU_NAME("cortex-a8", AK_ARMV7HL, FK_NEON, true)
200+
ARM_CPU_NAME("cortex-m4", AK_ARMV7EM, FK_NONE, true)
201+
ARM_CPU_NAME("swift", AK_ARMV7S, FK_NEON_VFPV4, true)
202+
// Invalid CPU
203+
ARM_CPU_NAME("invalid", AK_INVALID, FK_INVALID, true)
204+
#undef ARM_CPU_NAME

‎llvm/include/llvm/Support/TargetParser.h

+4-58
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,8 @@ namespace ARM {
3232

3333
// FPU names.
3434
enum FPUKind {
35-
FK_INVALID = 0,
36-
FK_NONE,
37-
FK_VFP,
38-
FK_VFPV2,
39-
FK_VFPV3,
40-
FK_VFPV3_FP16,
41-
FK_VFPV3_D16,
42-
FK_VFPV3_D16_FP16,
43-
FK_VFPV3XD,
44-
FK_VFPV3XD_FP16,
45-
FK_VFPV4,
46-
FK_VFPV4_D16,
47-
FK_FPV4_SP_D16,
48-
FK_FPV5_D16,
49-
FK_FPV5_SP_D16,
50-
FK_FP_ARMV8,
51-
FK_NEON,
52-
FK_NEON_FP16,
53-
FK_NEON_VFPV4,
54-
FK_NEON_FP_ARMV8,
55-
FK_CRYPTO_NEON_FP_ARMV8,
56-
FK_SOFTVFP,
35+
#define ARM_FPU(NAME, KIND, VERSION, NEON_SUPPORT, RESTRICTION) KIND,
36+
#include "ARMTargetParser.def"
5737
FK_LAST
5838
};
5939

@@ -83,42 +63,8 @@ enum FPURestriction {
8363

8464
// Arch names.
8565
enum ArchKind {
86-
AK_INVALID = 0,
87-
AK_ARMV2,
88-
AK_ARMV2A,
89-
AK_ARMV3,
90-
AK_ARMV3M,
91-
AK_ARMV4,
92-
AK_ARMV4T,
93-
AK_ARMV5T,
94-
AK_ARMV5TE,
95-
AK_ARMV5TEJ,
96-
AK_ARMV6,
97-
AK_ARMV6K,
98-
AK_ARMV6T2,
99-
AK_ARMV6Z,
100-
AK_ARMV6ZK,
101-
AK_ARMV6M,
102-
AK_ARMV6SM,
103-
AK_ARMV7A,
104-
AK_ARMV7R,
105-
AK_ARMV7M,
106-
AK_ARMV7EM,
107-
AK_ARMV8A,
108-
AK_ARMV8_1A,
109-
// Non-standard Arch names.
110-
AK_IWMMXT,
111-
AK_IWMMXT2,
112-
AK_XSCALE,
113-
AK_ARMV5,
114-
AK_ARMV5E,
115-
AK_ARMV6J,
116-
AK_ARMV6HL,
117-
AK_ARMV7,
118-
AK_ARMV7L,
119-
AK_ARMV7HL,
120-
AK_ARMV7S,
121-
AK_ARMV7K,
66+
#define ARM_ARCH(NAME, ID, CPU_ATTR, SUB_ARCH, ARCH_ATTR) ID,
67+
#include "ARMTargetParser.def"
12268
AK_LAST
12369
};
12470

0 commit comments

Comments
 (0)