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
49 # isa <isa-flags-list>
55 tune flags CO_PROC NO_MODE32
62 tune flags CO_PROC NO_MODE32
88 # Strictly, bit_mode26 is a permitted option for v4t, but there are no
89 # implementations that support it, so we will leave it out for now.
242 begin arch armv8-a+crc
263 begin arch armv8.2-a+fp16
267 isa ARMv8_2a bit_fp16
268 end arch armv8.2-a+fp16
270 begin arch armv8-m.base
274 end arch armv8-m.base
276 begin arch armv8-m.main
281 end arch armv8-m.main
283 begin arch armv8-m.main+dsp
287 isa ARMv8m_main bit_ARMv7em
288 end arch armv8-m.main+dsp
292 tune flags LDSCHED STRONG XSCALE
294 isa ARMv5te bit_xscale bit_iwmmxt
299 tune flags LDSCHED STRONG XSCALE
301 isa ARMv5te bit_xscale bit_iwmmxt bit_iwmmxt2
307 # [cname <c-compatible-name>]
308 # [tune for <cpu-name>]
309 # [tune flags <list>]
310 # architecture <name>
312 # [isa <additional-isa-flags-list>]
316 # If omitted, cname is formed from transforming the cpuname to convert
317 # non-valid punctuation characters to '_'.
318 # If specified, tune for specifies a CPU target to use for tuning this core.
319 # isa flags are appended to those defined by the architecture.
322 # V2/V2A Architecture Processors
324 tune flags CO_PROC NO_MODE32
330 tune flags CO_PROC NO_MODE32
336 tune flags CO_PROC NO_MODE32
342 # V3 Architecture Processors
356 tune flags CO_PROC WBUF
368 tune flags CO_PROC WBUF
398 tune flags CO_PROC WBUF
404 tune flags CO_PROC WBUF
439 # Doesn't have an external co-proc, but does have embedded FPA
440 # (the FPA part is no-longer supported).
442 tune flags CO_PROC WBUF
448 # V3M Architecture Processors
449 # arm7m doesn't exist on its own, but only with "D", (and "I"), but
450 # those don't alter the code, so arm7m is sometimes used.
470 # V4 Architecture Processors
484 tune flags LDSCHED STRONG
489 begin cpu strongarm110
490 tune flags LDSCHED STRONG
495 begin cpu strongarm1100
496 tune flags LDSCHED STRONG
499 end cpu strongarm1100
501 begin cpu strongarm1110
502 tune flags LDSCHED STRONG
505 end cpu strongarm1110
520 # V4T Architecture Processors
595 # V5T Architecture Processors
609 # V5TE Architecture Processors
656 tune flags LDSCHED XSCALE
663 tune flags LDSCHED XSCALE
669 tune flags LDSCHED XSCALE
699 # V5TEJ Architecture Processors
703 architecture armv5tej
707 begin cpu arm1026ej-s
710 architecture armv5tej
715 # V6 Architecture Processors
723 begin cpu arm1136jf-s
731 begin cpu arm1176jz-s
738 begin cpu arm1176jzf-s
746 begin cpu mpcorenovfp
759 begin cpu arm1156t2-s
766 begin cpu arm1156t2f-s
775 # V6M Architecture Processors
790 begin cpu cortex-m0plus
795 end cpu cortex-m0plus
798 # V6M Architecture Processors for small-multiply implementations.
799 begin cpu cortex-m1.small-multiply
800 cname cortexm1smallmultiply
802 tune flags LDSCHED SMALLMUL
805 end cpu cortex-m1.small-multiply
807 begin cpu cortex-m0.small-multiply
808 cname cortexm0smallmultiply
810 tune flags LDSCHED SMALLMUL
813 end cpu cortex-m0.small-multiply
815 begin cpu cortex-m0plus.small-multiply
816 cname cortexm0plussmallmultiply
817 tune for cortex-m0plus
818 tune flags LDSCHED SMALLMUL
821 end cpu cortex-m0plus.small-multiply
824 # V7 Architecture Processors
825 begin cpu generic-armv7-a
830 end cpu generic-armv7-a
924 architecture armv7e-m
925 isa quirk_no_volatile_ce
932 architecture armv7e-m
944 begin cpu marvell-pj4
951 # V7 big.LITTLE implementations
952 begin cpu cortex-a15.cortex-a7
953 cname cortexa15cortexa7
958 end cpu cortex-a15.cortex-a7
960 begin cpu cortex-a17.cortex-a7
961 cname cortexa17cortexa7
966 end cpu cortex-a17.cortex-a7
969 # V8 A-profile Architecture Processors
974 architecture armv8-a+crc
982 architecture armv8-a+crc
989 architecture armv8-a+crc
996 architecture armv8-a+crc
1000 begin cpu cortex-a72
1004 architecture armv8-a+crc
1008 begin cpu cortex-a73
1012 architecture armv8-a+crc
1019 architecture armv8-a+crc
1026 architecture armv8-a+crc
1033 architecture armv8-a+crc
1039 architecture armv8-a
1044 # V8 A-profile big.LITTLE implementations
1045 begin cpu cortex-a57.cortex-a53
1046 cname cortexa57cortexa53
1049 architecture armv8-a+crc
1051 end cpu cortex-a57.cortex-a53
1053 begin cpu cortex-a72.cortex-a53
1054 cname cortexa72cortexa53
1057 architecture armv8-a+crc
1059 end cpu cortex-a72.cortex-a53
1061 begin cpu cortex-a73.cortex-a35
1062 cname cortexa73cortexa35
1065 architecture armv8-a+crc
1067 end cpu cortex-a73.cortex-a35
1069 begin cpu cortex-a73.cortex-a53
1070 cname cortexa73cortexa53
1073 architecture armv8-a+crc
1075 end cpu cortex-a73.cortex-a53
1078 # V8 M-profile implementations.
1079 begin cpu cortex-m23
1082 architecture armv8-m.base
1086 begin cpu cortex-m33
1089 architecture armv8-m.main+dsp
1096 # isa <isa-flags-list>
1111 begin fpu vfpv3-fp16
1112 isa VFPv3 FP_D32 bit_fp16conv
1119 begin fpu vfpv3-d16-fp16
1120 isa VFPv3 FP_DBL bit_fp16conv
1121 end fpu vfpv3-d16-fp16
1127 begin fpu vfpv3xd-fp16
1128 isa VFPv3 bit_fp16conv
1129 end fpu vfpv3xd-fp16
1135 begin fpu neon-vfpv3
1140 isa VFPv3 NEON bit_fp16conv
1147 begin fpu neon-vfpv4
1155 begin fpu fpv4-sp-d16
1159 begin fpu fpv5-sp-d16
1171 begin fpu neon-fp-armv8
1173 end fpu neon-fp-armv8
1175 begin fpu crypto-neon-fp-armv8
1177 end fpu crypto-neon-fp-armv8
1179 # Compatibility aliases.