Add <bit> and <version> to freestanding headers
[official-gcc.git] / gcc / config / arm / arm-cpus.in
blobd82e95a226659948e59b317f07e0fd386ed674a2
1 # CPU, FPU and architecture specifications for ARM.
3 # Copyright (C) 2011-2018 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
10 # version.
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
15 # for more details.
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
23 # purposes.
25 # The general form is a sequence of begin..end blocks with the following
26 # syntax:
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 # Most objects in this file support forward references.  The major
44 # exception is feature groups, which may only refer to previously
45 # defined features or feature groups.  This is done to avoid the risk
46 # of feature groups recursively referencing each other and causing
47 # the parser to hang.
49 # Features - general convention: all lower case.
51 # Architecture rel 4
52 define feature armv4
54 # Thumb aware.
55 define feature thumb
57 # Architecture rel 5t.
58 define feature armv5t
60 # Architecture rel 5te.
61 define feature armv5te
63 # XScale.
64 define feature xscale
66 # Architecture rel 6.
67 define feature armv6
69 # Architecture rel 6k.
70 define feature armv6k
72 # Thumb-2.
73 define feature thumb2
75 # Instructions not present in 'M' profile.
76 define feature notm
78 # Architecture uses be8 mode in big-endian.
79 define feature be8
81 # Thumb division instructions.
82 define feature tdiv
84 # Architecture rel 7e-m.
85 define feature armv7em
87 # Architecture rel 7.
88 define feature armv7
90 # ARM division instructions.
91 define feature adiv
93 # Architecture rel 8.
94 define feature armv8
96 # ARMv8 CRC32 instructions.
97 define feature crc32
99 # XScale v2 (Wireless MMX).
100 define feature iwmmxt
102 # XScale Wireless MMX2.
103 define feature iwmmxt2
105 # Architecture rel 8.1.
106 define feature armv8_1
108 # Architecture rel 8.2.
109 define feature armv8_2
111 # Architecture rel 8.3.
112 define feature armv8_3
114 # Architecture rel 8.4.
115 define feature armv8_4
117 # M-Profile security extensions.
118 define feature cmse
120 # Floating point and Neon extensions.
121 # VFPv1 is not supported in GCC.
123 # Vector floating point v2.
124 define feature vfpv2
126 # Vector floating point v3.
127 define feature vfpv3
129 # Vector floating point v4.
130 define feature vfpv4
132 # Floating point v5.
133 define feature fpv5
135 # ARMv7-A LPAE.
136 define feature lpae
138 # Advanced SIMD instructions.
139 define feature neon
141 # Conversions to/from fp16 (VFPv3 extension).
142 define feature fp16conv
144 # Double precision operations supported.
145 define feature fp_dbl
147 # 32 Double precision registers.
148 define feature fp_d32
150 # Crypto extension to ARMv8.
151 define feature crypto
153 # FP16 data processing (half-precision float).
154 define feature fp16
156 # Dot Product instructions extension to ARMv8.2-a.
157 define feature dotprod
159 # Half-precision floating-point instructions in ARMv8.4-A.
160 define feature fp16fml
162 # ISA Quirks (errata?).  Don't forget to add this to the fgroup
163 # ALL_QUIRKS below.
165 # No volatile memory in IT blocks.
166 define feature quirk_no_volatile_ce
168 # Previously mis-identified by GCC.
169 define feature quirk_armv6kz
171 # Cortex-M3 LDRD quirk.
172 define feature quirk_cm3_ldrd
174 # (Very) slow multiply operations.  Should probably be a tuning bit.
175 define feature smallmul
177 # Feature groups.  Conventionally all (or mostly) upper case.
178 # ALL_FPU lists all the feature bits associated with the floating-point
179 # unit; these will all be removed if the floating-point unit is disabled
180 # (eg -mfloat-abi=soft).  ALL_FPU_INTERNAL must ONLY contain features that
181 # form part of a named -mfpu option; it is used to map the capabilities
182 # back to a named FPU for the benefit of the assembler.
184 # ALL_SIMD_INTERNAL and ALL_SIMD are similarly defined to help with the
185 # construction of ALL_FPU and ALL_FPU_INTERNAL; they describe the SIMD
186 # extensions that are either part of a named FPU or optional extensions
187 # respectively.
190 # List of all cryptographic extensions to stripout if crypto is
191 # disabled.  Currently, that's trivial, but we define it anyway for
192 # consistency with the SIMD and FP disable lists.
193 define fgroup ALL_CRYPTO        crypto
195 # List of all SIMD bits to strip out if SIMD is disabled.  This does
196 # strip off 32 D-registers, but does not remove support for
197 # double-precision FP.
198 define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO
199 define fgroup ALL_SIMD  ALL_SIMD_INTERNAL dotprod fp16fml
201 # List of all FPU bits to strip out if -mfpu is used to override the
202 # default.  fp16 is deliberately missing from this list.
203 define fgroup ALL_FPU_INTERNAL  vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL
205 # Similarly, but including fp16 and other extensions that aren't part of
206 # -mfpu support.
207 define fgroup ALL_FP    fp16 ALL_FPU_INTERNAL
209 define fgroup ARMv4       armv4 notm
210 define fgroup ARMv4t      ARMv4 thumb
211 define fgroup ARMv5t      ARMv4t armv5t
212 define fgroup ARMv5te     ARMv5t armv5te
213 define fgroup ARMv5tej    ARMv5te
214 define fgroup ARMv6       ARMv5te armv6 be8
215 define fgroup ARMv6j      ARMv6
216 define fgroup ARMv6k      ARMv6 armv6k
217 define fgroup ARMv6z      ARMv6
218 define fgroup ARMv6kz     ARMv6k quirk_armv6kz
219 define fgroup ARMv6zk     ARMv6k
220 define fgroup ARMv6t2     ARMv6 thumb2
221 # This is suspect.  ARMv6-m doesn't really pull in any useful features
222 # from ARMv5* or ARMv6.
223 define fgroup ARMv6m      armv4 thumb armv5t armv5te armv6 be8
224 # This is suspect, the 'common' ARMv7 subset excludes the thumb2 'DSP' and
225 # integer SIMD instructions that are in ARMv6T2.  */
226 define fgroup ARMv7       ARMv6m thumb2 armv7
228 define fgroup ARMv7a      ARMv7 notm armv6k
229 define fgroup ARMv7ve     ARMv7a adiv tdiv lpae
230 define fgroup ARMv7r      ARMv7a tdiv
231 define fgroup ARMv7m      ARMv7 tdiv
232 define fgroup ARMv7em     ARMv7m armv7em
233 define fgroup ARMv8a      ARMv7ve armv8
234 define fgroup ARMv8_1a    ARMv8a crc32 armv8_1
235 define fgroup ARMv8_2a    ARMv8_1a armv8_2
236 define fgroup ARMv8_3a    ARMv8_2a armv8_3
237 define fgroup ARMv8_4a    ARMv8_3a armv8_4
238 define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv
239 define fgroup ARMv8m_main ARMv7m armv8 cmse
240 define fgroup ARMv8r      ARMv8a
242 # Useful combinations.
243 define fgroup VFPv2     vfpv2
244 define fgroup VFPv3     VFPv2 vfpv3
245 define fgroup VFPv4     VFPv3 vfpv4 fp16conv
246 define fgroup FPv5      VFPv4 fpv5
248 define fgroup FP_DBL    fp_dbl
249 define fgroup FP_D32    FP_DBL fp_d32
250 define fgroup FP_ARMv8  FPv5 FP_D32
251 define fgroup NEON      FP_D32 neon
252 define fgroup CRYPTO    NEON crypto
253 define fgroup DOTPROD   NEON dotprod
255 # List of all quirk bits to strip out when comparing CPU features with
256 # architectures.
257 # xscale isn't really a 'quirk', but it isn't an architecture either and we
258 # need to ignore it for matching purposes.
259 define fgroup ALL_QUIRKS   quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale
261 # Architecture entries
262 # format:
263 # begin arch <name>
264 #   tune for <cpu>
265 #   [tune flags <list>]
266 #   base <name>
267 #   [profile <A|R|M>]
268 #   isa <isa-flags-list>
269 # end arch <name>
272 begin arch armv4
273  tune for arm7tdmi
274  tune flags CO_PROC
275  base 4
276  isa ARMv4
277 end arch armv4
279 begin arch armv4t
280  tune for arm7tdmi
281  tune flags CO_PROC
282  base 4T
283  isa ARMv4t
284 end arch armv4t
286 begin arch armv5t
287  tune for arm10tdmi
288  tune flags CO_PROC
289  base 5T
290  isa ARMv5t
291 end arch armv5t
293 begin arch armv5te
294  tune for arm1026ej-s
295  tune flags CO_PROC
296  base 5TE
297  isa ARMv5te
298  option fp add VFPv2 FP_DBL
299  optalias vfpv2 fp
300  option nofp remove ALL_FP
301 end arch armv5te
303 begin arch armv5tej
304  tune for arm1026ej-s
305  tune flags CO_PROC
306  base 5TEJ
307  isa ARMv5tej
308  option fp add VFPv2 FP_DBL
309  optalias vfpv2 fp
310  option nofp remove ALL_FP
311 end arch armv5tej
313 begin arch armv6
314  tune for arm1136j-s
315  tune flags CO_PROC
316  base 6
317  isa ARMv6
318  option fp add VFPv2 FP_DBL
319  optalias vfpv2 fp
320  option nofp remove ALL_FP
321 end arch armv6
323 begin arch armv6j
324  tune for arm1136j-s
325  tune flags CO_PROC
326  base 6J
327  isa ARMv6j
328  option fp add VFPv2 FP_DBL
329  optalias vfpv2 fp
330  option nofp remove ALL_FP
331 end arch armv6j
333 begin arch armv6k
334  tune for mpcore
335  tune flags CO_PROC
336  base 6K
337  isa ARMv6k
338  option fp add VFPv2 FP_DBL
339  optalias vfpv2 fp
340  option nofp remove ALL_FP
341 end arch armv6k
343 begin arch armv6z
344  tune for arm1176jz-s
345  tune flags CO_PROC
346  base 6Z
347  isa ARMv6z
348  option fp add VFPv2 FP_DBL
349  optalias vfpv2 fp
350  option nofp remove ALL_FP
351 end arch armv6z
353 begin arch armv6kz
354  tune for arm1176jz-s
355  tune flags CO_PROC
356  base 6KZ
357  isa ARMv6kz
358  option fp add VFPv2 FP_DBL
359  optalias vfpv2 fp
360  option nofp remove ALL_FP
361 end arch armv6kz
363 begin arch armv6zk
364  tune for arm1176jz-s
365  tune flags CO_PROC
366  base 6KZ
367  isa ARMv6kz
368  option fp add VFPv2 FP_DBL
369  optalias vfpv2 fp
370  option nofp remove ALL_FP
371 end arch armv6zk
373 begin arch armv6t2
374  tune for arm1156t2-s
375  tune flags CO_PROC
376  base 6T2
377  isa ARMv6t2
378  option fp add VFPv2 FP_DBL
379  optalias vfpv2 fp
380  option nofp remove ALL_FP
381 end arch armv6t2
383 begin arch armv6-m
384  tune for cortex-m1
385  base 6M
386  profile M
387  isa ARMv6m
388 end arch armv6-m
390 # This is now equivalent to armv6-m, but we keep it because some
391 # versions of GAS still distinguish between the two.
392 begin arch armv6s-m
393  tune for cortex-m1
394  base 6M
395  profile M
396  isa ARMv6m
397 end arch armv6s-m
399 begin arch armv7
400  tune for cortex-a8
401  tune flags CO_PROC
402  base 7
403  isa ARMv7
404 # fp => VFPv3-d16 (only useful for the A+R profile subset).
405  option fp add VFPv3 FP_DBL
406  optalias vfpv3-d16 fp
407  option nofp remove ALL_FP
408 end arch armv7
410 begin arch armv7-a
411  tune for cortex-a8
412  tune flags CO_PROC
413  base 7A
414  profile A
415  isa ARMv7a
416 # fp => VFPv3-d16, simd => neon-vfpv3
417  option fp             add VFPv3 FP_DBL
418  optalias vfpv3-d16    fp
419  option vfpv3          add VFPv3 FP_D32
420  option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
421  option vfpv3-fp16     add VFPv3 FP_DBL FP_D32 fp16conv
422  option vfpv4-d16      add VFPv4 FP_DBL
423  option vfpv4          add VFPv4 FP_D32
424  option simd           add VFPv3 NEON
425  optalias neon         simd
426  optalias neon-vfpv3   simd
427  option neon-fp16      add VFPv3 NEON fp16conv
428  option neon-vfpv4     add VFPv4 NEON
429  option nosimd      remove ALL_SIMD
430  option nofp        remove ALL_FP
431 end arch armv7-a
433 begin arch armv7ve
434  tune for cortex-a8
435  tune flags CO_PROC
436  base 7A
437  profile A
438  isa ARMv7ve
439 # fp => VFPv4-d16, simd => neon-vfpv4
440  option vfpv3-d16      add VFPv3 FP_DBL
441  option vfpv3          add VFPv3 FP_D32
442  option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
443  option vfpv3-fp16     add VFPv3 FP_DBL FP_D32 fp16conv
444  option fp             add VFPv4 FP_DBL
445  optalias vfpv4-d16    fp
446  option vfpv4          add VFPv4 FP_D32
447  option neon           add VFPv3 NEON
448  optalias neon-vfpv3   neon
449  option neon-fp16      add VFPv3 NEON fp16conv
450  option simd           add VFPv4 NEON
451  optalias neon-vfpv4   simd
452  option nosimd      remove ALL_SIMD
453  option nofp        remove ALL_FP
454 end arch armv7ve
456 begin arch armv7-r
457  tune for cortex-r4
458  tune flags CO_PROC
459  base 7R
460  profile R
461  isa ARMv7r
462 # ARMv7-r uses VFPv3-d16
463  option fp.sp add VFPv3
464  optalias vfpv3xd fp.sp
465  option fp add VFPv3 FP_DBL
466  optalias vfpv3-d16 fp
467  option idiv add adiv
468  option nofp remove ALL_FP
469  option noidiv remove adiv
470 end arch armv7-r
472 begin arch armv7-m
473  tune for cortex-m3
474  tune flags CO_PROC
475  base 7M
476  profile M
477  isa ARMv7m
478 # In theory FP is permitted in v7-m, but in practice no implementations exist.
479 # leave it out for now.
480 end arch armv7-m
482 begin arch armv7e-m
483  tune for cortex-m4
484  tune flags CO_PROC
485  base 7EM
486  profile M
487  isa ARMv7em
488 # fp => VFPv4-sp-d16; fpv5 => FPv5-sp-d16; fp.dp => FPv5-d16
489  option fp add VFPv4
490  optalias vfpv4-sp-d16 fp
491  option fpv5 add FPv5
492  option fp.dp add FPv5 FP_DBL
493  optalias fpv5-d16 fp.dp
494  option nofp remove ALL_FP
495 end arch armv7e-m
497 begin arch armv8-a
498  tune for cortex-a53
499  tune flags CO_PROC
500  base 8A
501  profile A
502  isa ARMv8a
503  option crc add crc32
504  option simd add FP_ARMv8 NEON
505  option crypto add FP_ARMv8 CRYPTO
506  option nocrypto remove ALL_CRYPTO
507  option nofp remove ALL_FP
508 end arch armv8-a
510 begin arch armv8.1-a
511  tune for cortex-a53
512  tune flags CO_PROC
513  base 8A
514  profile A
515  isa ARMv8_1a
516  option simd add FP_ARMv8 NEON
517  option crypto add FP_ARMv8 CRYPTO
518  option nocrypto remove ALL_CRYPTO
519  option nofp remove ALL_FP
520 end arch armv8.1-a
522 begin arch armv8.2-a
523  tune for cortex-a53
524  tune flags CO_PROC
525  base 8A
526  profile A
527  isa ARMv8_2a
528  option simd add FP_ARMv8 NEON
529  option fp16 add fp16 FP_ARMv8 NEON
530  option fp16fml add fp16fml fp16 FP_ARMv8 NEON
531  option crypto add FP_ARMv8 CRYPTO
532  option nocrypto remove ALL_CRYPTO
533  option nofp remove ALL_FP
534  option dotprod add FP_ARMv8 DOTPROD
535 end arch armv8.2-a
537 begin arch armv8.3-a
538  tune for cortex-a53
539  tune flags CO_PROC
540  base 8A
541  profile A
542  isa ARMv8_3a
543  option simd add FP_ARMv8 NEON
544  option fp16 add fp16 FP_ARMv8 NEON
545  option fp16fml add fp16fml fp16 FP_ARMv8 NEON
546  option crypto add FP_ARMv8 CRYPTO
547  option nocrypto remove ALL_CRYPTO
548  option nofp remove ALL_FP
549  option dotprod add FP_ARMv8 DOTPROD
550 end arch armv8.3-a
552 begin arch armv8.4-a
553  tune for cortex-a53
554  tune flags CO_PROC
555  base 8A
556  profile A
557  isa ARMv8_4a
558  option simd add FP_ARMv8 DOTPROD
559  option fp16 add fp16 fp16fml FP_ARMv8 DOTPROD
560  option crypto add FP_ARMv8 CRYPTO DOTPROD
561  option nocrypto remove ALL_CRYPTO
562  option nofp remove ALL_FP
563 end arch armv8.4-a
565 begin arch armv8-m.base
566  tune for cortex-m23
567  base 8M_BASE
568  profile M
569  isa ARMv8m_base
570 end arch armv8-m.base
572 begin arch armv8-m.main
573  tune for cortex-m7
574  tune flags CO_PROC
575  base 8M_MAIN
576  profile M
577  isa ARMv8m_main
578  option dsp add armv7em
579 # fp => FPv5-sp-d16; fp.dp => FPv5-d16
580  option fp add FPv5
581  option fp.dp add FPv5 FP_DBL
582  option nofp remove ALL_FP
583  option nodsp remove armv7em
584 end arch armv8-m.main
586 begin arch armv8-r
587  tune for cortex-r52
588  tune flags CO_PROC
589  base 8R
590  profile R
591  isa ARMv8r
592  option crc add crc32
593 # fp.sp => fp-armv8 (d16); simd => simd + fp-armv8 + d32 + double precision
594 # note: no fp option for fp-armv8 (d16) + double precision at the moment
595  option fp.sp add FPv5
596  option simd add FP_ARMv8 NEON
597  option crypto add FP_ARMv8 CRYPTO
598  option nocrypto remove ALL_CRYPTO
599  option nofp remove ALL_FP
600 end arch armv8-r
602 begin arch iwmmxt
603  tune for iwmmxt
604  tune flags LDSCHED STRONG XSCALE
605  base 5TE
606  isa ARMv5te xscale iwmmxt
607 end arch iwmmxt
609 begin arch iwmmxt2
610  tune for iwmmxt2
611  tune flags LDSCHED STRONG XSCALE
612  base 5TE
613  isa ARMv5te xscale iwmmxt iwmmxt2
614 end arch iwmmxt2
616 # CPU entries
617 # format:
618 # begin cpu <name>
619 #   [cname <c-compatible-name>]
620 #   [tune for <cpu-name>]
621 #   [tune flags <list>]
622 #   architecture <name>
623 #   [isa <additional-isa-flags-list>]
624 #   [option <name> add|remove <isa-list>]*
625 #   [optalias <name> <optname>]*
626 #   [costs <name>]
627 #   [vendor <vendor-id>
628 #    [part <part-id> [minrev [maxrev]]]
629 # end cpu <name>
631 # If omitted, cname is formed from transforming the cpuname to convert
632 # non-valid punctuation characters to '_'.
633 # If specified, tune for specifies a CPU target to use for tuning this core.
634 # isa flags are appended to those defined by the architecture.
635 # Each add option must have a distinct feature set and each remove
636 # option must similarly have a distinct feature set.  Option aliases can be
637 # added with the optalias statement.
638 # Vendor, part and revision information is used for native CPU and architecture
639 # detection.  All values must be in hex (lower case) with the leading '0x'
640 # omitted.  For example the cortex-a9 will have vendor 41 and part c09.
641 # Revision information is used to match a subrange of part
642 # revisions: minrev <= detected <= maxrev.
643 # If a minrev or maxrev are omitted then minrev defaults to zero and maxrev
644 # to infinity.
645 # Revision information is not implemented yet; no part uses it.
647 # V4 Architecture Processors
648 begin cpu arm8
649  tune flags LDSCHED
650  architecture armv4
651  costs fastmul
652 end cpu arm8
654 begin cpu arm810
655  tune flags LDSCHED
656  architecture armv4
657  costs fastmul
658 end cpu arm810
660 begin cpu strongarm
661  tune flags LDSCHED STRONG
662  architecture armv4
663  costs strongarm
664 end cpu strongarm
666 begin cpu strongarm110
667  tune flags LDSCHED STRONG
668  architecture armv4
669  costs strongarm
670 end cpu strongarm110
672 begin cpu strongarm1100
673  tune flags LDSCHED STRONG
674  architecture armv4
675  costs strongarm
676 end cpu strongarm1100
678 begin cpu strongarm1110
679  tune flags LDSCHED STRONG
680  architecture armv4
681  costs strongarm
682 end cpu strongarm1110
684 begin cpu fa526
685  tune flags LDSCHED
686  architecture armv4
687  costs fastmul
688 end cpu fa526
690 begin cpu fa626
691  tune flags LDSCHED
692  architecture armv4
693  costs fastmul
694 end cpu fa626
697 # V4T Architecture Processors
698 begin cpu arm7tdmi
699  tune flags CO_PROC
700  architecture armv4t
701  costs fastmul
702 end cpu arm7tdmi
704 begin cpu arm7tdmi-s
705  cname arm7tdmis
706  tune flags CO_PROC
707  architecture armv4t
708  costs fastmul
709 end cpu arm7tdmi-s
711 begin cpu arm710t
712  tune flags WBUF
713  architecture armv4t
714  costs fastmul
715 end cpu arm710t
717 begin cpu arm720t
718  tune flags WBUF
719  architecture armv4t
720  costs fastmul
721 end cpu arm720t
723 begin cpu arm740t
724  tune flags WBUF
725  architecture armv4t
726  costs fastmul
727 end cpu arm740t
729 begin cpu arm9
730  tune flags LDSCHED
731  architecture armv4t
732  costs fastmul
733 end cpu arm9
735 begin cpu arm9tdmi
736  tune flags LDSCHED
737  architecture armv4t
738  costs fastmul
739 end cpu arm9tdmi
741 begin cpu arm920
742  tune flags LDSCHED
743  architecture armv4t
744  costs fastmul
745 end cpu arm920
747 begin cpu arm920t
748  tune flags LDSCHED
749  architecture armv4t
750  costs fastmul
751 end cpu arm920t
753 begin cpu arm922t
754  tune flags LDSCHED
755  architecture armv4t
756  costs fastmul
757 end cpu arm922t
759 begin cpu arm940t
760  tune flags LDSCHED
761  architecture armv4t
762  costs fastmul
763 end cpu arm940t
765 begin cpu ep9312
766  tune flags LDSCHED
767  architecture armv4t
768  costs fastmul
769 end cpu ep9312
772 # V5T Architecture Processors
773 # These used VFPv1 which isn't supported by GCC
774 begin cpu arm10tdmi
775  tune flags LDSCHED
776  architecture armv5t
777  costs fastmul
778 end cpu arm10tdmi
780 begin cpu arm1020t
781  tune flags LDSCHED
782  architecture armv5t
783  costs fastmul
784 end cpu arm1020t
787 # V5TE Architecture Processors
788 begin cpu arm9e
789  tune flags LDSCHED
790  architecture armv5te+fp
791  option nofp remove ALL_FP
792  costs 9e
793 end cpu arm9e
795 begin cpu arm946e-s
796  cname arm946es
797  tune flags LDSCHED
798  architecture armv5te+fp
799  option nofp remove ALL_FP
800  costs 9e
801 end cpu arm946e-s
803 begin cpu arm966e-s
804  cname arm966es
805  tune flags LDSCHED
806  architecture armv5te+fp
807  option nofp remove ALL_FP
808  costs 9e
809 end cpu arm966e-s
811 begin cpu arm968e-s
812  cname arm968es
813  tune flags LDSCHED
814  architecture armv5te+fp
815  option nofp remove ALL_FP
816  costs 9e
817 end cpu arm968e-s
819 begin cpu arm10e
820  tune flags LDSCHED
821  architecture armv5te+fp
822  option nofp remove ALL_FP
823  costs fastmul
824 end cpu arm10e
826 begin cpu arm1020e
827  tune flags LDSCHED
828  architecture armv5te+fp
829  option nofp remove ALL_FP
830  costs fastmul
831 end cpu arm1020e
833 begin cpu arm1022e
834  tune flags LDSCHED
835  architecture armv5te+fp
836  option nofp remove ALL_FP
837  costs fastmul
838 end cpu arm1022e
840 begin cpu xscale
841  tune flags LDSCHED XSCALE
842  architecture armv5te
843  isa xscale
844  costs xscale
845 end cpu xscale
847 begin cpu iwmmxt
848  tune flags LDSCHED XSCALE
849  architecture iwmmxt
850  costs xscale
851 end cpu iwmmxt
853 begin cpu iwmmxt2
854  tune flags LDSCHED XSCALE
855  architecture iwmmxt2
856  costs xscale
857 end cpu iwmmxt2
859 begin cpu fa606te
860  tune flags LDSCHED
861  architecture armv5te
862  costs 9e
863 end cpu fa606te
865 begin cpu fa626te
866  tune flags LDSCHED
867  architecture armv5te
868  costs 9e
869 end cpu fa626te
871 begin cpu fmp626
872  tune flags LDSCHED
873  architecture armv5te
874  costs 9e
875 end cpu fmp626
877 begin cpu fa726te
878  tune flags LDSCHED
879  architecture armv5te
880  costs fa726te
881 end cpu fa726te
884 # V5TEJ Architecture Processors
885 begin cpu arm926ej-s
886  cname arm926ejs
887  tune flags LDSCHED
888  architecture armv5tej+fp
889  option nofp remove ALL_FP
890  costs 9e
891  vendor 41
892  part 926
893 end cpu arm926ej-s
895 begin cpu arm1026ej-s
896  cname arm1026ejs
897  tune flags LDSCHED
898  architecture armv5tej+fp
899  option nofp remove ALL_FP
900  costs 9e
901  vendor 41
902  part a26
903 end cpu arm1026ej-s
906 # V6 Architecture Processors
907 begin cpu arm1136j-s
908  cname arm1136js
909  tune flags LDSCHED
910  architecture armv6j
911  costs 9e
912 end cpu arm1136j-s
914 begin cpu arm1136jf-s
915  cname arm1136jfs
916  tune flags LDSCHED
917  architecture armv6j+fp
918  costs 9e
919  vendor 41
920  part b36
921 end cpu arm1136jf-s
923 begin cpu arm1176jz-s
924  cname arm1176jzs
925  tune flags LDSCHED
926  architecture armv6kz
927  costs 9e
928 end cpu arm1176jz-s
930 begin cpu arm1176jzf-s
931  cname arm1176jzfs
932  tune flags LDSCHED
933  architecture armv6kz+fp
934  costs 9e
935  vendor 41
936  part b76
937 end cpu arm1176jzf-s
939 begin cpu mpcorenovfp
940  tune flags LDSCHED
941  architecture armv6k
942  costs 9e
943 end cpu mpcorenovfp
945 begin cpu mpcore
946  tune flags LDSCHED
947  architecture armv6k+fp
948  costs 9e
949  vendor 41
950  part b02
951 end cpu mpcore
953 begin cpu arm1156t2-s
954  cname arm1156t2s
955  tune flags LDSCHED
956  architecture armv6t2
957  costs v6t2
958 end cpu arm1156t2-s
960 begin cpu arm1156t2f-s
961  cname arm1156t2fs
962  tune flags LDSCHED
963  architecture armv6t2+fp
964  costs v6t2
965  vendor 41
966  part b56
967 end cpu arm1156t2f-s
970 # V6M Architecture Processors
971 begin cpu cortex-m1
972  cname cortexm1
973  tune flags LDSCHED
974  architecture armv6s-m
975  costs v6m
976  vendor 41
977  part c21
978 end cpu cortex-m1
980 begin cpu cortex-m0
981  cname cortexm0
982  tune flags LDSCHED
983  architecture armv6s-m
984  costs v6m
985  vendor 41
986  part c20
987 end cpu cortex-m0
989 begin cpu cortex-m0plus
990  cname cortexm0plus
991  tune flags LDSCHED
992  architecture armv6s-m
993  costs v6m
994 end cpu cortex-m0plus
997 # V6M Architecture Processors for small-multiply implementations.
998 begin cpu cortex-m1.small-multiply
999  cname cortexm1smallmultiply
1000  tune for cortex-m1
1001  tune flags LDSCHED SMALLMUL
1002  architecture armv6s-m
1003  costs v6m
1004 end cpu cortex-m1.small-multiply
1006 begin cpu cortex-m0.small-multiply
1007  cname cortexm0smallmultiply
1008  tune for cortex-m0
1009  tune flags LDSCHED SMALLMUL
1010  architecture armv6s-m
1011  costs v6m
1012 end cpu cortex-m0.small-multiply
1014 begin cpu cortex-m0plus.small-multiply
1015  cname cortexm0plussmallmultiply
1016  tune for cortex-m0plus
1017  tune flags LDSCHED SMALLMUL
1018  architecture armv6s-m
1019  costs v6m
1020 end cpu cortex-m0plus.small-multiply
1023 # V7 Architecture Processors
1024 begin cpu generic-armv7-a
1025  cname genericv7a
1026  tune flags LDSCHED
1027  architecture armv7-a+fp
1028  option vfpv3-d16 add VFPv3 FP_DBL
1029  option vfpv3 add VFPv3 FP_D32
1030  option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
1031  option vfpv3-fp16 add VFPv3 FP_D32 fp16conv
1032  option vfpv4-d16 add VFPv4 FP_DBL
1033  option vfpv4 add VFPv4 FP_D32
1034  option simd add VFPv3 NEON
1035  optalias neon simd
1036  optalias neon-vfpv3 simd
1037  option neon-fp16 add VFPv3 NEON fp16conv
1038  option neon-vfpv4 add VFPv4 NEON
1039  option nosimd remove ALL_SIMD
1040  option nofp remove ALL_FP
1041  costs cortex
1042 end cpu generic-armv7-a
1044 begin cpu cortex-a5
1045  cname cortexa5
1046  tune flags LDSCHED
1047  architecture armv7-a+neon-fp16
1048  option nosimd remove ALL_SIMD
1049  option nofp remove ALL_FP
1050  costs cortex_a5
1051  vendor 41
1052  part c05
1053 end cpu cortex-a5
1055 begin cpu cortex-a7
1056  cname cortexa7
1057  tune flags LDSCHED
1058  architecture armv7ve+simd
1059  option nosimd remove ALL_SIMD
1060  option nofp remove ALL_FP
1061  costs cortex_a7
1062  vendor 41
1063  part c07
1064 end cpu cortex-a7
1066 begin cpu cortex-a8
1067  cname cortexa8
1068  tune flags LDSCHED
1069  architecture armv7-a+simd
1070  option nofp remove ALL_FP
1071  costs cortex_a8
1072  vendor 41
1073  part c08
1074 end cpu cortex-a8
1076 begin cpu cortex-a9
1077  cname cortexa9
1078  tune flags LDSCHED
1079  architecture armv7-a+neon-fp16
1080  option nosimd remove ALL_SIMD
1081  option nofp remove ALL_FP
1082  costs cortex_a9
1083  vendor 41
1084  part c09
1085 end cpu cortex-a9
1087 begin cpu cortex-a12
1088  cname cortexa12
1089  tune for cortex-a17
1090  tune flags LDSCHED
1091  architecture armv7ve+simd
1092  option nofp remove ALL_FP
1093  costs cortex_a12
1094  vendor 41
1095  part c0d
1096 end cpu cortex-a12
1098 begin cpu cortex-a15
1099  cname cortexa15
1100  tune flags LDSCHED
1101  architecture armv7ve+simd
1102  option nofp remove ALL_FP
1103  costs cortex_a15
1104  vendor 41
1105  part c0f
1106 end cpu cortex-a15
1108 begin cpu cortex-a17
1109  cname cortexa17
1110  tune flags LDSCHED
1111  architecture armv7ve+simd
1112  option nofp remove ALL_FP
1113  costs cortex_a12
1114  vendor 41
1115  part c0e
1116 end cpu cortex-a17
1118 begin cpu cortex-r4
1119  cname cortexr4
1120  tune flags LDSCHED
1121  architecture armv7-r
1122  costs cortex
1123 end cpu cortex-r4
1125 begin cpu cortex-r4f
1126  cname cortexr4f
1127  tune flags LDSCHED
1128  architecture armv7-r+fp
1129  costs cortex
1130  vendor 41
1131  part c14
1132 end cpu cortex-r4f
1134 begin cpu cortex-r5
1135  cname cortexr5
1136  tune flags LDSCHED
1137  architecture armv7-r+idiv+fp
1138  option nofp.dp remove FP_DBL
1139  option nofp remove ALL_FP
1140  costs cortex
1141  vendor 41
1142  part c15
1143 end cpu cortex-r5
1145 begin cpu cortex-r7
1146  cname cortexr7
1147  tune flags LDSCHED
1148  architecture armv7-r+idiv+fp
1149  option nofp remove ALL_FP
1150  costs cortex
1151  vendor 41
1152  part c17
1153 end cpu cortex-r7
1155 begin cpu cortex-r8
1156  cname cortexr8
1157  tune for cortex-r7
1158  tune flags LDSCHED
1159  architecture armv7-r+idiv+fp
1160  option nofp remove ALL_FP
1161  costs cortex
1162  vendor 41
1163  part c18
1164 end cpu cortex-r8
1166 begin cpu cortex-m7
1167  cname cortexm7
1168  tune flags LDSCHED
1169  architecture armv7e-m+fp.dp
1170  isa quirk_no_volatile_ce
1171  option nofp.dp remove FP_DBL
1172  option nofp remove ALL_FP
1173  costs cortex_m7
1174 end cpu cortex-m7
1176 begin cpu cortex-m4
1177  cname cortexm4
1178  tune flags LDSCHED
1179  architecture armv7e-m+fp
1180  option nofp remove ALL_FP
1181  costs v7m
1182  vendor 41
1183  part c24
1184 end cpu cortex-m4
1186 begin cpu cortex-m3
1187  cname cortexm3
1188  tune flags LDSCHED
1189  architecture armv7-m
1190  isa quirk_cm3_ldrd
1191  costs v7m
1192  vendor 41
1193  part c23
1194 end cpu cortex-m3
1196 begin cpu marvell-pj4
1197  tune flags LDSCHED
1198  architecture armv7-a
1199  costs marvell_pj4
1200 end cpu marvell-pj4
1203 # V7 big.LITTLE implementations
1204 begin cpu cortex-a15.cortex-a7
1205  cname cortexa15cortexa7
1206  tune for cortex-a7
1207  tune flags LDSCHED
1208  architecture armv7ve+simd
1209  option nofp remove ALL_FP
1210  costs cortex_a15
1211 end cpu cortex-a15.cortex-a7
1213 begin cpu cortex-a17.cortex-a7
1214  cname cortexa17cortexa7
1215  tune for cortex-a7
1216  tune flags LDSCHED
1217  architecture armv7ve+simd
1218  option nofp remove ALL_FP
1219  costs cortex_a12
1220 end cpu cortex-a17.cortex-a7
1223 # V8 A-profile Architecture Processors
1224 begin cpu cortex-a32
1225  cname cortexa32
1226  tune for cortex-a53
1227  tune flags LDSCHED
1228  architecture armv8-a+crc+simd
1229  option crypto add FP_ARMv8 CRYPTO
1230  option nofp remove ALL_FP
1231  costs cortex_a35
1232  vendor 41
1233  part d01
1234 end cpu cortex-a32
1236 begin cpu cortex-a35
1237  cname cortexa35
1238  tune for cortex-a53
1239  tune flags LDSCHED
1240  architecture armv8-a+crc+simd
1241  option crypto add FP_ARMv8 CRYPTO
1242  option nofp remove ALL_FP
1243  costs cortex_a35
1244  vendor 41
1245  part d04
1246 end cpu cortex-a35
1248 begin cpu cortex-a53
1249  cname cortexa53
1250  tune flags LDSCHED
1251  architecture armv8-a+crc+simd
1252  option crypto add FP_ARMv8 CRYPTO
1253  option nofp remove ALL_FP
1254  costs cortex_a53
1255  vendor 41
1256  part d03
1257 end cpu cortex-a53
1259 begin cpu cortex-a57
1260  cname cortexa57
1261  tune flags LDSCHED
1262  architecture armv8-a+crc+simd
1263  option crypto add FP_ARMv8 CRYPTO
1264  costs cortex_a57
1265  vendor 41
1266  part d07
1267 end cpu cortex-a57
1269 begin cpu cortex-a72
1270  cname cortexa72
1271  tune for cortex-a57
1272  tune flags LDSCHED
1273  architecture armv8-a+crc+simd
1274  option crypto add FP_ARMv8 CRYPTO
1275  costs cortex_a57
1276  vendor 41
1277  part d08
1278 end cpu cortex-a72
1280 begin cpu cortex-a73
1281  cname cortexa73
1282  tune for cortex-a57
1283  tune flags LDSCHED
1284  architecture armv8-a+crc+simd
1285  option crypto add FP_ARMv8 CRYPTO
1286  costs cortex_a73
1287  vendor 41
1288  part d09
1289 end cpu cortex-a73
1291 begin cpu exynos-m1
1292  cname exynosm1
1293  tune flags LDSCHED
1294  architecture armv8-a+crc+simd
1295  option crypto add FP_ARMv8 CRYPTO
1296  costs exynosm1
1297 end cpu exynos-m1
1299 begin cpu xgene1
1300  tune flags LDSCHED
1301  architecture armv8-a+simd
1302  option crypto add FP_ARMv8 CRYPTO
1303  costs xgene1
1304 end cpu xgene1
1306 # V8 A-profile big.LITTLE implementations
1307 begin cpu cortex-a57.cortex-a53
1308  cname cortexa57cortexa53
1309  tune for cortex-a53
1310  tune flags LDSCHED
1311  architecture armv8-a+crc+simd
1312  option crypto add FP_ARMv8 CRYPTO
1313  costs cortex_a57
1314 end cpu cortex-a57.cortex-a53
1316 begin cpu cortex-a72.cortex-a53
1317  cname cortexa72cortexa53
1318  tune for cortex-a53
1319  tune flags LDSCHED
1320  architecture armv8-a+crc+simd
1321  option crypto add FP_ARMv8 CRYPTO
1322  costs cortex_a57
1323 end cpu cortex-a72.cortex-a53
1325 begin cpu cortex-a73.cortex-a35
1326  cname cortexa73cortexa35
1327  tune for cortex-a53
1328  tune flags LDSCHED
1329  architecture armv8-a+crc+simd
1330  option crypto add FP_ARMv8 CRYPTO
1331  costs cortex_a73
1332 end cpu cortex-a73.cortex-a35
1334 begin cpu cortex-a73.cortex-a53
1335  cname cortexa73cortexa53
1336  tune for cortex-a53
1337  tune flags LDSCHED
1338  architecture armv8-a+crc+simd
1339  option crypto add FP_ARMv8 CRYPTO
1340  costs cortex_a73
1341 end cpu cortex-a73.cortex-a53
1344 # ARMv8.2 A-profile Architecture Processors
1345 begin cpu cortex-a55
1346  cname cortexa55
1347  tune for cortex-a53
1348  tune flags LDSCHED
1349  architecture armv8.2-a+fp16+dotprod+simd
1350  option crypto add FP_ARMv8 CRYPTO
1351  option nofp remove ALL_FP
1352  costs cortex_a53
1353  vendor 41
1354  part d05
1355 end cpu cortex-a55
1357 begin cpu cortex-a75
1358  cname cortexa75
1359  tune for cortex-a57
1360  tune flags LDSCHED
1361  architecture armv8.2-a+fp16+dotprod+simd
1362  option crypto add FP_ARMv8 CRYPTO
1363  costs cortex_a73
1364  vendor 41
1365  part d0a
1366 end cpu cortex-a75
1368 begin cpu cortex-a76
1369  cname cortexa76
1370  tune for cortex-a57
1371  tune flags LDSCHED
1372  architecture armv8.2-a+fp16+dotprod+simd
1373  option crypto add FP_ARMv8 CRYPTO
1374  costs cortex_a57
1375  vendor 41
1376  part d0b
1377 end cpu cortex-a76
1379 # ARMv8.2 A-profile ARM DynamIQ big.LITTLE implementations
1380 begin cpu cortex-a75.cortex-a55
1381  cname cortexa75cortexa55
1382  tune for cortex-a53
1383  tune flags LDSCHED
1384  architecture armv8.2-a+fp16+dotprod+simd
1385  option crypto add FP_ARMv8 CRYPTO
1386  costs cortex_a73
1387 end cpu cortex-a75.cortex-a55
1389 begin cpu cortex-a76.cortex-a55
1390  cname cortexa76cortexa55
1391  tune for cortex-a53
1392  tune flags LDSCHED
1393  architecture armv8.2-a+fp16+dotprod+simd
1394  option crypto add FP_ARMv8 CRYPTO
1395  costs cortex_a57
1396 end cpu cortex-a76.cortex-a55
1398 # V8 M-profile implementations.
1399 begin cpu cortex-m23
1400  cname cortexm23
1401  tune flags LDSCHED
1402  architecture armv8-m.base
1403  costs v6m
1404 end cpu cortex-m23
1406 begin cpu cortex-m33
1407  cname cortexm33
1408  tune flags LDSCHED
1409  architecture armv8-m.main+dsp+fp
1410  option nofp remove ALL_FP
1411  option nodsp remove armv7em
1412  costs v7m
1413 end cpu cortex-m33
1415 # V8 R-profile implementations.
1416 begin cpu cortex-r52
1417  cname cortexr52
1418  tune flags LDSCHED
1419  architecture armv8-r+crc+simd
1420  option nofp.dp remove FP_DBL ALL_SIMD
1421  costs cortex
1422  vendor 41
1423  part d13
1424 end cpu cortex-r52
1426 # FPU entries
1427 # format:
1428 # begin fpu <name>
1429 #   isa <isa-flags-list>
1430 # end fpu <name>
1432 begin fpu vfp
1433  isa VFPv2 FP_DBL
1434 end fpu vfp
1436 begin fpu vfpv2
1437  isa VFPv2 FP_DBL
1438 end fpu vfpv2
1440 begin fpu vfpv3
1441  isa VFPv3 FP_D32
1442 end fpu vfpv3
1444 begin fpu vfpv3-fp16
1445  isa VFPv3 FP_D32 fp16conv
1446 end fpu vfpv3-fp16
1448 begin fpu vfpv3-d16
1449  isa VFPv3 FP_DBL
1450 end fpu vfpv3-d16
1452 begin fpu vfpv3-d16-fp16
1453  isa VFPv3 FP_DBL fp16conv
1454 end fpu vfpv3-d16-fp16
1456 begin fpu vfpv3xd
1457  isa VFPv3
1458 end fpu vfpv3xd
1460 begin fpu vfpv3xd-fp16
1461  isa VFPv3 fp16conv
1462 end fpu vfpv3xd-fp16
1464 begin fpu neon
1465  isa VFPv3 NEON
1466 end fpu neon
1468 begin fpu neon-vfpv3
1469  isa VFPv3 NEON
1470 end fpu neon-vfpv3
1472 begin fpu neon-fp16
1473  isa VFPv3 NEON fp16conv
1474 end fpu neon-fp16
1476 begin fpu vfpv4
1477  isa VFPv4 FP_D32
1478 end fpu vfpv4
1480 begin fpu neon-vfpv4
1481  isa VFPv4 NEON
1482 end fpu neon-vfpv4
1484 begin fpu vfpv4-d16
1485  isa VFPv4 FP_DBL
1486 end fpu vfpv4-d16
1488 begin fpu fpv4-sp-d16
1489  isa VFPv4
1490 end fpu fpv4-sp-d16
1492 begin fpu fpv5-sp-d16
1493  isa FPv5
1494 end fpu fpv5-sp-d16
1496 begin fpu fpv5-d16
1497  isa FPv5 FP_DBL
1498 end fpu fpv5-d16
1500 begin fpu fp-armv8
1501  isa FP_ARMv8
1502 end fpu fp-armv8
1504 begin fpu neon-fp-armv8
1505  isa FP_ARMv8 NEON
1506 end fpu neon-fp-armv8
1508 begin fpu crypto-neon-fp-armv8
1509  isa FP_ARMv8 CRYPTO
1510 end fpu crypto-neon-fp-armv8
1512 # Compatibility aliases.
1513 begin fpu vfp3
1514  isa VFPv3 FP_D32
1515 end fpu vfp3