1 # CPU, FPU and architecture specifications for ARM.
3 # Copyright (C) 2011-2017 Free Software Foundation, Inc.
5 # This file is part of GCC.
7 # GCC is free software; you can redistribute it and/or modify it under
8 # the terms of the GNU General Public License as published by the Free
9 # Software Foundation; either version 3, or (at your option) any later
12 # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 # You should have received a copy of the GNU General Public License
18 # along with GCC; see the file COPYING3. If not see
19 # <http://www.gnu.org/licenses/>.
21 # This file describes all the various CPUs, FPUs and architectures supported
22 # by the compiler. It is pre-processed by parsecpu.awk for a number of
25 # The general form is a sequence of begin..end blocks with the following
27 # begin <object-type> <name>
28 # attribute-statement*
29 # end <object-type> <name>
31 # where object type is one of "cpu" "arch" "fpu". Each object type has
32 # a specific set of permitted attributes, some of which are optional; further
33 # details can be found below.
35 # Some objects cross-reference other objects by name. Objects are permitted
36 # in any order and it is not necessary to place a cross-referenced object
37 # earlier in the file.
39 # The object names for cpu, arch and fpu objects are used for the public option
40 # names in the final compiler. The order within each group is preserved and
41 # forms the order for the list within the compiler.
43 # Architecture entries
50 # isa <isa-flags-list>
56 tune flags CO_PROC NO_MODE32
63 tune flags CO_PROC NO_MODE32
89 # Strictly, bit_mode26 is a permitted option for v4t, but there are no
90 # implementations that support it, so we will leave it out for now.
117 option fp add VFPv2 FP_DBL
119 option nofp remove ALL_FP
127 option fp add VFPv2 FP_DBL
129 option nofp remove ALL_FP
137 option fp add VFPv2 FP_DBL
139 option nofp remove ALL_FP
147 option fp add VFPv2 FP_DBL
149 option nofp remove ALL_FP
157 option fp add VFPv2 FP_DBL
159 option nofp remove ALL_FP
167 option fp add VFPv2 FP_DBL
169 option nofp remove ALL_FP
177 option fp add VFPv2 FP_DBL
179 option nofp remove ALL_FP
187 option fp add VFPv2 FP_DBL
189 option nofp remove ALL_FP
197 option fp add VFPv2 FP_DBL
199 option nofp remove ALL_FP
207 option fp add VFPv2 FP_DBL
209 option nofp remove ALL_FP
231 # fp => VFPv3-d16 (only useful for the A+R profile subset).
232 option fp add VFPv3 FP_DBL
233 optalias vfpv3-d16 fp
234 option nofp remove ALL_FP
243 # fp => VFPv3-d16, simd => neon-vfpv3
244 option fp add VFPv3 FP_DBL
245 optalias vfpv3-d16 fp
246 option vfpv3 add VFPv3 FP_D32
247 option vfpv3-d16-fp16 add VFPv3 FP_DBL bit_fp16conv
248 option vfpv3-fp16 add VFPv3 FP_DBL FP_D32 bit_fp16conv
249 option vfpv4-d16 add VFPv4 FP_DBL
250 option vfpv4 add VFPv4 FP_D32
251 option simd add VFPv3 NEON
253 optalias neon-vfpv3 simd
254 option neon-fp16 add VFPv3 NEON bit_fp16conv
255 option neon-vfpv4 add VFPv4 NEON
256 option nosimd remove ALL_SIMD
257 option nofp remove ALL_FP
266 # fp => VFPv4-d16, simd => neon-vfpv4
267 option vfpv3-d16 add VFPv3 FP_DBL
268 option vfpv3 add VFPv3 FP_D32
269 option vfpv3-d16-fp16 add VFPv3 FP_DBL bit_fp16conv
270 option vfpv3-fp16 add VFPv3 FP_DBL FP_D32 bit_fp16conv
271 option fp add VFPv4 FP_DBL
272 optalias vfpv4-d16 fp
273 option vfpv4 add VFPv4 FP_D32
274 option neon add VFPv3 NEON
275 optalias neon-vfpv3 neon
276 option neon-fp16 add VFPv3 NEON bit_fp16conv
277 option simd add VFPv4 NEON
278 optalias neon-vfpv4 simd
279 option nosimd remove ALL_SIMD
280 option nofp remove ALL_FP
289 # ARMv7-r uses VFPv3-d16
290 option fp.sp add VFPv3
291 optalias vfpv3xd fp.sp
292 option fp add VFPv3 FP_DBL
293 optalias vfpv3-d16 fp
294 option idiv add bit_adiv
295 option nofp remove ALL_FP
296 option noidiv remove bit_adiv
305 # In theory FP is permitted in v7-m, but in practice no implementations exist.
306 # leave it out for now.
315 # fp => VFPv4-sp-d16; fpv5 => FPv5-sp-d16; fp.dp => FPv5-d16
317 optalias vfpv4-sp-d16 fp
319 option fp.dp add FPv5 FP_DBL
320 optalias fpv5-d16 fp.dp
321 option nofp remove ALL_FP
330 option crc add bit_crc32
331 option simd add FP_ARMv8 NEON
332 option crypto add FP_ARMv8 CRYPTO
333 option nocrypto remove ALL_CRYPTO
334 option nofp remove ALL_FP
343 option simd add FP_ARMv8 NEON
344 option crypto add FP_ARMv8 CRYPTO
345 option nocrypto remove ALL_CRYPTO
346 option nofp remove ALL_FP
355 option simd add FP_ARMv8 NEON
356 option fp16 add bit_fp16 FP_ARMv8 NEON
357 option crypto add FP_ARMv8 CRYPTO
358 option nocrypto remove ALL_CRYPTO
359 option nofp remove ALL_FP
362 begin arch armv8-m.base
367 end arch armv8-m.base
369 begin arch armv8-m.main
375 option dsp add bit_ARMv7em
376 # fp => FPv5-sp-d16; fp.dp => FPv5-d16
378 option fp.dp add FPv5 FP_DBL
379 option nofp remove ALL_FP
380 option nodsp remove bit_ARMv7em
381 end arch armv8-m.main
389 option crc add bit_crc32
390 # fp.sp => fp-armv8 (d16); simd => simd + fp-armv8 + d32 + double precision
391 # note: no fp option for fp-armv8 (d16) + double precision at the moment
392 option fp.sp add FPv5
393 option simd add FP_ARMv8 NEON
394 option crypto add FP_ARMv8 CRYPTO
395 option nocrypto remove ALL_CRYPTO
396 option nofp remove ALL_FP
401 tune flags LDSCHED STRONG XSCALE
403 isa ARMv5te bit_xscale bit_iwmmxt
408 tune flags LDSCHED STRONG XSCALE
410 isa ARMv5te bit_xscale bit_iwmmxt bit_iwmmxt2
416 # [cname <c-compatible-name>]
417 # [tune for <cpu-name>]
418 # [tune flags <list>]
419 # architecture <name>
421 # [isa <additional-isa-flags-list>]
422 # [option <name> add|remove <isa-list>]*
423 # [optalias <name> <optname>]*
427 # If omitted, cname is formed from transforming the cpuname to convert
428 # non-valid punctuation characters to '_'.
429 # If specified, tune for specifies a CPU target to use for tuning this core.
430 # isa flags are appended to those defined by the architecture.
431 # Each add option must have a distinct feature set and each remove
432 # option must similarly have a distinct feature set. Option aliases can be
433 # added with the optalias statement
435 # V2/V2A Architecture Processors
437 tune flags CO_PROC NO_MODE32
443 tune flags CO_PROC NO_MODE32
449 tune flags CO_PROC NO_MODE32
455 # V3 Architecture Processors
469 tune flags CO_PROC WBUF
481 tune flags CO_PROC WBUF
511 tune flags CO_PROC WBUF
517 tune flags CO_PROC WBUF
552 # Doesn't have an external co-proc, but does have embedded FPA
553 # (the FPA part is no-longer supported).
555 tune flags CO_PROC WBUF
561 # V3M Architecture Processors
562 # arm7m doesn't exist on its own, but only with "D", (and "I"), but
563 # those don't alter the code, so arm7m is sometimes used.
583 # V4 Architecture Processors
597 tune flags LDSCHED STRONG
602 begin cpu strongarm110
603 tune flags LDSCHED STRONG
608 begin cpu strongarm1100
609 tune flags LDSCHED STRONG
612 end cpu strongarm1100
614 begin cpu strongarm1110
615 tune flags LDSCHED STRONG
618 end cpu strongarm1110
633 # V4T Architecture Processors
708 # V5T Architecture Processors
709 # These used VFPv1 which isn't supported by GCC
723 # V5TE Architecture Processors
728 option nofp remove ALL_FP
737 option nofp remove ALL_FP
746 option nofp remove ALL_FP
755 option nofp remove ALL_FP
763 option nofp remove ALL_FP
771 option nofp remove ALL_FP
779 option nofp remove ALL_FP
784 tune flags LDSCHED XSCALE
791 tune flags LDSCHED XSCALE
797 tune flags LDSCHED XSCALE
827 # V5TEJ Architecture Processors
831 architecture armv5tej
833 option nofp remove ALL_FP
837 begin cpu arm1026ej-s
840 architecture armv5tej
842 option nofp remove ALL_FP
847 # V6 Architecture Processors
855 begin cpu arm1136jf-s
863 begin cpu arm1176jz-s
870 begin cpu arm1176jzf-s
878 begin cpu mpcorenovfp
891 begin cpu arm1156t2-s
898 begin cpu arm1156t2f-s
907 # V6M Architecture Processors
922 begin cpu cortex-m0plus
927 end cpu cortex-m0plus
930 # V6M Architecture Processors for small-multiply implementations.
931 begin cpu cortex-m1.small-multiply
932 cname cortexm1smallmultiply
934 tune flags LDSCHED SMALLMUL
937 end cpu cortex-m1.small-multiply
939 begin cpu cortex-m0.small-multiply
940 cname cortexm0smallmultiply
942 tune flags LDSCHED SMALLMUL
945 end cpu cortex-m0.small-multiply
947 begin cpu cortex-m0plus.small-multiply
948 cname cortexm0plussmallmultiply
949 tune for cortex-m0plus
950 tune flags LDSCHED SMALLMUL
953 end cpu cortex-m0plus.small-multiply
956 # V7 Architecture Processors
957 begin cpu generic-armv7-a
962 option vfpv3-d16 add VFPv3 FP_DBL
963 option vfpv3 add VFPv3 FP_D32
964 option vfpv3-d16-fp16 add VFPv3 FP_DBL bit_fp16conv
965 option vfpv3-fp16 add VFPv3 FP_D32 bit_fp16conv
966 option vfpv4-d16 add VFPv4 FP_DBL
967 option vfpv4 add VFPv4 FP_D32
968 option simd add VFPv3 NEON
970 optalias neon-vfpv3 simd
971 option neon-fp16 add VFPv3 NEON bit_fp16conv
972 option neon-vfpv4 add VFPv4 NEON
973 option nosimd remove ALL_SIMD
974 option nofp remove ALL_FP
976 end cpu generic-armv7-a
983 option nosimd remove ALL_SIMD
984 option nofp remove ALL_FP
993 option nosimd remove ALL_SIMD
994 option nofp remove ALL_FP
1001 architecture armv7-a
1003 option nofp remove ALL_FP
1010 architecture armv7-a
1012 option nosimd remove ALL_SIMD
1013 option nofp remove ALL_FP
1017 begin cpu cortex-a12
1021 architecture armv7ve
1023 option nofp remove ALL_FP
1027 begin cpu cortex-a15
1030 architecture armv7ve
1032 option nofp remove ALL_FP
1036 begin cpu cortex-a17
1039 architecture armv7ve
1041 option nofp remove ALL_FP
1048 architecture armv7-r
1052 begin cpu cortex-r4f
1055 architecture armv7-r
1063 architecture armv7-r+idiv
1065 option nofp.dp remove FP_DBL
1066 option nofp remove ALL_FP
1073 architecture armv7-r+idiv
1075 option nofp remove ALL_FP
1083 architecture armv7-r+idiv
1085 option nofp remove ALL_FP
1092 architecture armv7e-m
1093 isa quirk_no_volatile_ce
1095 option nofp.dp remove FP_DBL
1096 option nofp remove ALL_FP
1103 architecture armv7e-m
1105 option nofp remove ALL_FP
1112 architecture armv7-m
1117 begin cpu marvell-pj4
1119 architecture armv7-a
1124 # V7 big.LITTLE implementations
1125 begin cpu cortex-a15.cortex-a7
1126 cname cortexa15cortexa7
1129 architecture armv7ve
1131 option nofp remove ALL_FP
1133 end cpu cortex-a15.cortex-a7
1135 begin cpu cortex-a17.cortex-a7
1136 cname cortexa17cortexa7
1139 architecture armv7ve
1141 option nofp remove ALL_FP
1143 end cpu cortex-a17.cortex-a7
1146 # V8 A-profile Architecture Processors
1147 begin cpu cortex-a32
1151 architecture armv8-a+crc
1153 option crypto add FP_ARMv8 CRYPTO
1154 option nofp remove ALL_FP
1158 begin cpu cortex-a35
1162 architecture armv8-a+crc
1164 option crypto add FP_ARMv8 CRYPTO
1165 option nofp remove ALL_FP
1169 begin cpu cortex-a53
1172 architecture armv8-a+crc
1174 option crypto add FP_ARMv8 CRYPTO
1175 option nofp remove ALL_FP
1179 begin cpu cortex-a57
1182 architecture armv8-a+crc
1184 option crypto add FP_ARMv8 CRYPTO
1188 begin cpu cortex-a72
1192 architecture armv8-a+crc
1194 option crypto add FP_ARMv8 CRYPTO
1198 begin cpu cortex-a73
1202 architecture armv8-a+crc
1204 option crypto add FP_ARMv8 CRYPTO
1211 architecture armv8-a+crc
1213 option crypto add FP_ARMv8 CRYPTO
1219 architecture armv8-a
1221 option crypto add FP_ARMv8 CRYPTO
1225 # V8 A-profile big.LITTLE implementations
1226 begin cpu cortex-a57.cortex-a53
1227 cname cortexa57cortexa53
1230 architecture armv8-a+crc
1232 option crypto add FP_ARMv8 CRYPTO
1234 end cpu cortex-a57.cortex-a53
1236 begin cpu cortex-a72.cortex-a53
1237 cname cortexa72cortexa53
1240 architecture armv8-a+crc
1242 option crypto add FP_ARMv8 CRYPTO
1244 end cpu cortex-a72.cortex-a53
1246 begin cpu cortex-a73.cortex-a35
1247 cname cortexa73cortexa35
1250 architecture armv8-a+crc
1252 option crypto add FP_ARMv8 CRYPTO
1254 end cpu cortex-a73.cortex-a35
1256 begin cpu cortex-a73.cortex-a53
1257 cname cortexa73cortexa53
1260 architecture armv8-a+crc
1262 option crypto add FP_ARMv8 CRYPTO
1264 end cpu cortex-a73.cortex-a53
1267 # ARMv8.2 A-profile Architecture Processors
1268 begin cpu cortex-a55
1272 architecture armv8.2-a+fp16
1274 option crypto add FP_ARMv8 CRYPTO
1275 option nofp remove ALL_FP
1279 begin cpu cortex-a75
1283 architecture armv8.2-a+fp16
1285 option crypto add FP_ARMv8 CRYPTO
1290 # ARMv8.2 A-profile ARM DynamIQ big.LITTLE implementations
1291 begin cpu cortex-a75.cortex-a55
1292 cname cortexa75cortexa55
1295 architecture armv8.2-a+fp16
1297 option crypto add FP_ARMv8 CRYPTO
1299 end cpu cortex-a75.cortex-a55
1301 # V8 M-profile implementations.
1302 begin cpu cortex-m23
1305 architecture armv8-m.base
1309 begin cpu cortex-m33
1312 architecture armv8-m.main+dsp
1314 option nofp remove ALL_FP
1321 # isa <isa-flags-list>
1336 begin fpu vfpv3-fp16
1337 isa VFPv3 FP_D32 bit_fp16conv
1344 begin fpu vfpv3-d16-fp16
1345 isa VFPv3 FP_DBL bit_fp16conv
1346 end fpu vfpv3-d16-fp16
1352 begin fpu vfpv3xd-fp16
1353 isa VFPv3 bit_fp16conv
1354 end fpu vfpv3xd-fp16
1360 begin fpu neon-vfpv3
1365 isa VFPv3 NEON bit_fp16conv
1372 begin fpu neon-vfpv4
1380 begin fpu fpv4-sp-d16
1384 begin fpu fpv5-sp-d16
1396 begin fpu neon-fp-armv8
1398 end fpu neon-fp-armv8
1400 begin fpu crypto-neon-fp-armv8
1402 end fpu crypto-neon-fp-armv8
1404 # Compatibility aliases.