RISC-V: Error if function declared with different interrupt modes.
[official-gcc.git] / gcc / config / arm / arm-cpus.in
blobd6eed2f0b0d2697d719b942cf1fd61ea279869e7
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 # end cpu <name>
629 # If omitted, cname is formed from transforming the cpuname to convert
630 # non-valid punctuation characters to '_'.
631 # If specified, tune for specifies a CPU target to use for tuning this core.
632 # isa flags are appended to those defined by the architecture.
633 # Each add option must have a distinct feature set and each remove
634 # option must similarly have a distinct feature set.  Option aliases can be
635 # added with the optalias statement.
637 # V4 Architecture Processors
638 begin cpu arm8
639  tune flags LDSCHED
640  architecture armv4
641  costs fastmul
642 end cpu arm8
644 begin cpu arm810
645  tune flags LDSCHED
646  architecture armv4
647  costs fastmul
648 end cpu arm810
650 begin cpu strongarm
651  tune flags LDSCHED STRONG
652  architecture armv4
653  costs strongarm
654 end cpu strongarm
656 begin cpu strongarm110
657  tune flags LDSCHED STRONG
658  architecture armv4
659  costs strongarm
660 end cpu strongarm110
662 begin cpu strongarm1100
663  tune flags LDSCHED STRONG
664  architecture armv4
665  costs strongarm
666 end cpu strongarm1100
668 begin cpu strongarm1110
669  tune flags LDSCHED STRONG
670  architecture armv4
671  costs strongarm
672 end cpu strongarm1110
674 begin cpu fa526
675  tune flags LDSCHED
676  architecture armv4
677  costs fastmul
678 end cpu fa526
680 begin cpu fa626
681  tune flags LDSCHED
682  architecture armv4
683  costs fastmul
684 end cpu fa626
687 # V4T Architecture Processors
688 begin cpu arm7tdmi
689  tune flags CO_PROC
690  architecture armv4t
691  costs fastmul
692 end cpu arm7tdmi
694 begin cpu arm7tdmi-s
695  cname arm7tdmis
696  tune flags CO_PROC
697  architecture armv4t
698  costs fastmul
699 end cpu arm7tdmi-s
701 begin cpu arm710t
702  tune flags WBUF
703  architecture armv4t
704  costs fastmul
705 end cpu arm710t
707 begin cpu arm720t
708  tune flags WBUF
709  architecture armv4t
710  costs fastmul
711 end cpu arm720t
713 begin cpu arm740t
714  tune flags WBUF
715  architecture armv4t
716  costs fastmul
717 end cpu arm740t
719 begin cpu arm9
720  tune flags LDSCHED
721  architecture armv4t
722  costs fastmul
723 end cpu arm9
725 begin cpu arm9tdmi
726  tune flags LDSCHED
727  architecture armv4t
728  costs fastmul
729 end cpu arm9tdmi
731 begin cpu arm920
732  tune flags LDSCHED
733  architecture armv4t
734  costs fastmul
735 end cpu arm920
737 begin cpu arm920t
738  tune flags LDSCHED
739  architecture armv4t
740  costs fastmul
741 end cpu arm920t
743 begin cpu arm922t
744  tune flags LDSCHED
745  architecture armv4t
746  costs fastmul
747 end cpu arm922t
749 begin cpu arm940t
750  tune flags LDSCHED
751  architecture armv4t
752  costs fastmul
753 end cpu arm940t
755 begin cpu ep9312
756  tune flags LDSCHED
757  architecture armv4t
758  costs fastmul
759 end cpu ep9312
762 # V5T Architecture Processors
763 # These used VFPv1 which isn't supported by GCC
764 begin cpu arm10tdmi
765  tune flags LDSCHED
766  architecture armv5t
767  costs fastmul
768 end cpu arm10tdmi
770 begin cpu arm1020t
771  tune flags LDSCHED
772  architecture armv5t
773  costs fastmul
774 end cpu arm1020t
777 # V5TE Architecture Processors
778 begin cpu arm9e
779  tune flags LDSCHED
780  architecture armv5te+fp
781  option nofp remove ALL_FP
782  costs 9e
783 end cpu arm9e
785 begin cpu arm946e-s
786  cname arm946es
787  tune flags LDSCHED
788  architecture armv5te+fp
789  option nofp remove ALL_FP
790  costs 9e
791 end cpu arm946e-s
793 begin cpu arm966e-s
794  cname arm966es
795  tune flags LDSCHED
796  architecture armv5te+fp
797  option nofp remove ALL_FP
798  costs 9e
799 end cpu arm966e-s
801 begin cpu arm968e-s
802  cname arm968es
803  tune flags LDSCHED
804  architecture armv5te+fp
805  option nofp remove ALL_FP
806  costs 9e
807 end cpu arm968e-s
809 begin cpu arm10e
810  tune flags LDSCHED
811  architecture armv5te+fp
812  option nofp remove ALL_FP
813  costs fastmul
814 end cpu arm10e
816 begin cpu arm1020e
817  tune flags LDSCHED
818  architecture armv5te+fp
819  option nofp remove ALL_FP
820  costs fastmul
821 end cpu arm1020e
823 begin cpu arm1022e
824  tune flags LDSCHED
825  architecture armv5te+fp
826  option nofp remove ALL_FP
827  costs fastmul
828 end cpu arm1022e
830 begin cpu xscale
831  tune flags LDSCHED XSCALE
832  architecture armv5te
833  isa xscale
834  costs xscale
835 end cpu xscale
837 begin cpu iwmmxt
838  tune flags LDSCHED XSCALE
839  architecture iwmmxt
840  costs xscale
841 end cpu iwmmxt
843 begin cpu iwmmxt2
844  tune flags LDSCHED XSCALE
845  architecture iwmmxt2
846  costs xscale
847 end cpu iwmmxt2
849 begin cpu fa606te
850  tune flags LDSCHED
851  architecture armv5te
852  costs 9e
853 end cpu fa606te
855 begin cpu fa626te
856  tune flags LDSCHED
857  architecture armv5te
858  costs 9e
859 end cpu fa626te
861 begin cpu fmp626
862  tune flags LDSCHED
863  architecture armv5te
864  costs 9e
865 end cpu fmp626
867 begin cpu fa726te
868  tune flags LDSCHED
869  architecture armv5te
870  costs fa726te
871 end cpu fa726te
874 # V5TEJ Architecture Processors
875 begin cpu arm926ej-s
876  cname arm926ejs
877  tune flags LDSCHED
878  architecture armv5tej+fp
879  option nofp remove ALL_FP
880  costs 9e
881 end cpu arm926ej-s
883 begin cpu arm1026ej-s
884  cname arm1026ejs
885  tune flags LDSCHED
886  architecture armv5tej+fp
887  option nofp remove ALL_FP
888  costs 9e
889 end cpu arm1026ej-s
892 # V6 Architecture Processors
893 begin cpu arm1136j-s
894  cname arm1136js
895  tune flags LDSCHED
896  architecture armv6j
897  costs 9e
898 end cpu arm1136j-s
900 begin cpu arm1136jf-s
901  cname arm1136jfs
902  tune flags LDSCHED
903  architecture armv6j+fp
904  costs 9e
905 end cpu arm1136jf-s
907 begin cpu arm1176jz-s
908  cname arm1176jzs
909  tune flags LDSCHED
910  architecture armv6kz
911  costs 9e
912 end cpu arm1176jz-s
914 begin cpu arm1176jzf-s
915  cname arm1176jzfs
916  tune flags LDSCHED
917  architecture armv6kz+fp
918  costs 9e
919 end cpu arm1176jzf-s
921 begin cpu mpcorenovfp
922  tune flags LDSCHED
923  architecture armv6k
924  costs 9e
925 end cpu mpcorenovfp
927 begin cpu mpcore
928  tune flags LDSCHED
929  architecture armv6k+fp
930  costs 9e
931 end cpu mpcore
933 begin cpu arm1156t2-s
934  cname arm1156t2s
935  tune flags LDSCHED
936  architecture armv6t2
937  costs v6t2
938 end cpu arm1156t2-s
940 begin cpu arm1156t2f-s
941  cname arm1156t2fs
942  tune flags LDSCHED
943  architecture armv6t2+fp
944  costs v6t2
945 end cpu arm1156t2f-s
948 # V6M Architecture Processors
949 begin cpu cortex-m1
950  cname cortexm1
951  tune flags LDSCHED
952  architecture armv6s-m
953  costs v6m
954 end cpu cortex-m1
956 begin cpu cortex-m0
957  cname cortexm0
958  tune flags LDSCHED
959  architecture armv6s-m
960  costs v6m
961 end cpu cortex-m0
963 begin cpu cortex-m0plus
964  cname cortexm0plus
965  tune flags LDSCHED
966  architecture armv6s-m
967  costs v6m
968 end cpu cortex-m0plus
971 # V6M Architecture Processors for small-multiply implementations.
972 begin cpu cortex-m1.small-multiply
973  cname cortexm1smallmultiply
974  tune for cortex-m1
975  tune flags LDSCHED SMALLMUL
976  architecture armv6s-m
977  costs v6m
978 end cpu cortex-m1.small-multiply
980 begin cpu cortex-m0.small-multiply
981  cname cortexm0smallmultiply
982  tune for cortex-m0
983  tune flags LDSCHED SMALLMUL
984  architecture armv6s-m
985  costs v6m
986 end cpu cortex-m0.small-multiply
988 begin cpu cortex-m0plus.small-multiply
989  cname cortexm0plussmallmultiply
990  tune for cortex-m0plus
991  tune flags LDSCHED SMALLMUL
992  architecture armv6s-m
993  costs v6m
994 end cpu cortex-m0plus.small-multiply
997 # V7 Architecture Processors
998 begin cpu generic-armv7-a
999  cname genericv7a
1000  tune flags LDSCHED
1001  architecture armv7-a+fp
1002  option vfpv3-d16 add VFPv3 FP_DBL
1003  option vfpv3 add VFPv3 FP_D32
1004  option vfpv3-d16-fp16 add VFPv3 FP_DBL fp16conv
1005  option vfpv3-fp16 add VFPv3 FP_D32 fp16conv
1006  option vfpv4-d16 add VFPv4 FP_DBL
1007  option vfpv4 add VFPv4 FP_D32
1008  option simd add VFPv3 NEON
1009  optalias neon simd
1010  optalias neon-vfpv3 simd
1011  option neon-fp16 add VFPv3 NEON fp16conv
1012  option neon-vfpv4 add VFPv4 NEON
1013  option nosimd remove ALL_SIMD
1014  option nofp remove ALL_FP
1015  costs cortex
1016 end cpu generic-armv7-a
1018 begin cpu cortex-a5
1019  cname cortexa5
1020  tune flags LDSCHED
1021  architecture armv7-a+neon-fp16
1022  option nosimd remove ALL_SIMD
1023  option nofp remove ALL_FP
1024  costs cortex_a5
1025 end cpu cortex-a5
1027 begin cpu cortex-a7
1028  cname cortexa7
1029  tune flags LDSCHED
1030  architecture armv7ve+simd
1031  option nosimd remove ALL_SIMD
1032  option nofp remove ALL_FP
1033  costs cortex_a7
1034 end cpu cortex-a7
1036 begin cpu cortex-a8
1037  cname cortexa8
1038  tune flags LDSCHED
1039  architecture armv7-a+simd
1040  option nofp remove ALL_FP
1041  costs cortex_a8
1042 end cpu cortex-a8
1044 begin cpu cortex-a9
1045  cname cortexa9
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_a9
1051 end cpu cortex-a9
1053 begin cpu cortex-a12
1054  cname cortexa12
1055  tune for cortex-a17
1056  tune flags LDSCHED
1057  architecture armv7ve+simd
1058  option nofp remove ALL_FP
1059  costs cortex_a12
1060 end cpu cortex-a12
1062 begin cpu cortex-a15
1063  cname cortexa15
1064  tune flags LDSCHED
1065  architecture armv7ve+simd
1066  option nofp remove ALL_FP
1067  costs cortex_a15
1068 end cpu cortex-a15
1070 begin cpu cortex-a17
1071  cname cortexa17
1072  tune flags LDSCHED
1073  architecture armv7ve+simd
1074  option nofp remove ALL_FP
1075  costs cortex_a12
1076 end cpu cortex-a17
1078 begin cpu cortex-r4
1079  cname cortexr4
1080  tune flags LDSCHED
1081  architecture armv7-r
1082  costs cortex
1083 end cpu cortex-r4
1085 begin cpu cortex-r4f
1086  cname cortexr4f
1087  tune flags LDSCHED
1088  architecture armv7-r+fp
1089  costs cortex
1090 end cpu cortex-r4f
1092 begin cpu cortex-r5
1093  cname cortexr5
1094  tune flags LDSCHED
1095  architecture armv7-r+idiv+fp
1096  option nofp.dp remove FP_DBL
1097  option nofp remove ALL_FP
1098  costs cortex
1099 end cpu cortex-r5
1101 begin cpu cortex-r7
1102  cname cortexr7
1103  tune flags LDSCHED
1104  architecture armv7-r+idiv+fp
1105  option nofp remove ALL_FP
1106  costs cortex
1107 end cpu cortex-r7
1109 begin cpu cortex-r8
1110  cname cortexr8
1111  tune for cortex-r7
1112  tune flags LDSCHED
1113  architecture armv7-r+idiv+fp
1114  option nofp remove ALL_FP
1115  costs cortex
1116 end cpu cortex-r8
1118 begin cpu cortex-m7
1119  cname cortexm7
1120  tune flags LDSCHED
1121  architecture armv7e-m+fp.dp
1122  isa quirk_no_volatile_ce
1123  option nofp.dp remove FP_DBL
1124  option nofp remove ALL_FP
1125  costs cortex_m7
1126 end cpu cortex-m7
1128 begin cpu cortex-m4
1129  cname cortexm4
1130  tune flags LDSCHED
1131  architecture armv7e-m+fp
1132  option nofp remove ALL_FP
1133  costs v7m
1134 end cpu cortex-m4
1136 begin cpu cortex-m3
1137  cname cortexm3
1138  tune flags LDSCHED
1139  architecture armv7-m
1140  isa quirk_cm3_ldrd
1141  costs v7m
1142 end cpu cortex-m3
1144 begin cpu marvell-pj4
1145  tune flags LDSCHED
1146  architecture armv7-a
1147  costs marvell_pj4
1148 end cpu marvell-pj4
1151 # V7 big.LITTLE implementations
1152 begin cpu cortex-a15.cortex-a7
1153  cname cortexa15cortexa7
1154  tune for cortex-a7
1155  tune flags LDSCHED
1156  architecture armv7ve+simd
1157  option nofp remove ALL_FP
1158  costs cortex_a15
1159 end cpu cortex-a15.cortex-a7
1161 begin cpu cortex-a17.cortex-a7
1162  cname cortexa17cortexa7
1163  tune for cortex-a7
1164  tune flags LDSCHED
1165  architecture armv7ve+simd
1166  option nofp remove ALL_FP
1167  costs cortex_a12
1168 end cpu cortex-a17.cortex-a7
1171 # V8 A-profile Architecture Processors
1172 begin cpu cortex-a32
1173  cname cortexa32
1174  tune for cortex-a53
1175  tune flags LDSCHED
1176  architecture armv8-a+crc+simd
1177  option crypto add FP_ARMv8 CRYPTO
1178  option nofp remove ALL_FP
1179  costs cortex_a35
1180 end cpu cortex-a32
1182 begin cpu cortex-a35
1183  cname cortexa35
1184  tune for cortex-a53
1185  tune flags LDSCHED
1186  architecture armv8-a+crc+simd
1187  option crypto add FP_ARMv8 CRYPTO
1188  option nofp remove ALL_FP
1189  costs cortex_a35
1190 end cpu cortex-a35
1192 begin cpu cortex-a53
1193  cname cortexa53
1194  tune flags LDSCHED
1195  architecture armv8-a+crc+simd
1196  option crypto add FP_ARMv8 CRYPTO
1197  option nofp remove ALL_FP
1198  costs cortex_a53
1199 end cpu cortex-a53
1201 begin cpu cortex-a57
1202  cname cortexa57
1203  tune flags LDSCHED
1204  architecture armv8-a+crc+simd
1205  option crypto add FP_ARMv8 CRYPTO
1206  costs cortex_a57
1207 end cpu cortex-a57
1209 begin cpu cortex-a72
1210  cname cortexa72
1211  tune for cortex-a57
1212  tune flags LDSCHED
1213  architecture armv8-a+crc+simd
1214  option crypto add FP_ARMv8 CRYPTO
1215  costs cortex_a57
1216 end cpu cortex-a72
1218 begin cpu cortex-a73
1219  cname cortexa73
1220  tune for cortex-a57
1221  tune flags LDSCHED
1222  architecture armv8-a+crc+simd
1223  option crypto add FP_ARMv8 CRYPTO
1224  costs cortex_a73
1225 end cpu cortex-a73
1227 begin cpu exynos-m1
1228  cname exynosm1
1229  tune flags LDSCHED
1230  architecture armv8-a+crc+simd
1231  option crypto add FP_ARMv8 CRYPTO
1232  costs exynosm1
1233 end cpu exynos-m1
1235 begin cpu xgene1
1236  tune flags LDSCHED
1237  architecture armv8-a+simd
1238  option crypto add FP_ARMv8 CRYPTO
1239  costs xgene1
1240 end cpu xgene1
1242 # V8 A-profile big.LITTLE implementations
1243 begin cpu cortex-a57.cortex-a53
1244  cname cortexa57cortexa53
1245  tune for cortex-a53
1246  tune flags LDSCHED
1247  architecture armv8-a+crc+simd
1248  option crypto add FP_ARMv8 CRYPTO
1249  costs cortex_a57
1250 end cpu cortex-a57.cortex-a53
1252 begin cpu cortex-a72.cortex-a53
1253  cname cortexa72cortexa53
1254  tune for cortex-a53
1255  tune flags LDSCHED
1256  architecture armv8-a+crc+simd
1257  option crypto add FP_ARMv8 CRYPTO
1258  costs cortex_a57
1259 end cpu cortex-a72.cortex-a53
1261 begin cpu cortex-a73.cortex-a35
1262  cname cortexa73cortexa35
1263  tune for cortex-a53
1264  tune flags LDSCHED
1265  architecture armv8-a+crc+simd
1266  option crypto add FP_ARMv8 CRYPTO
1267  costs cortex_a73
1268 end cpu cortex-a73.cortex-a35
1270 begin cpu cortex-a73.cortex-a53
1271  cname cortexa73cortexa53
1272  tune for cortex-a53
1273  tune flags LDSCHED
1274  architecture armv8-a+crc+simd
1275  option crypto add FP_ARMv8 CRYPTO
1276  costs cortex_a73
1277 end cpu cortex-a73.cortex-a53
1280 # ARMv8.2 A-profile Architecture Processors
1281 begin cpu cortex-a55
1282  cname cortexa55
1283  tune for cortex-a53
1284  tune flags LDSCHED
1285  architecture armv8.2-a+fp16+dotprod+simd
1286  option crypto add FP_ARMv8 CRYPTO
1287  option nofp remove ALL_FP
1288  costs cortex_a53
1289 end cpu cortex-a55
1291 begin cpu cortex-a75
1292  cname cortexa75
1293  tune for cortex-a57
1294  tune flags LDSCHED
1295  architecture armv8.2-a+fp16+dotprod+simd
1296  option crypto add FP_ARMv8 CRYPTO
1297  costs cortex_a73
1298 end cpu cortex-a75
1300 begin cpu cortex-a76
1301  cname cortexa76
1302  tune for cortex-a57
1303  tune flags LDSCHED
1304  architecture armv8.2-a+fp16+dotprod+simd
1305  option crypto add FP_ARMv8 CRYPTO
1306  costs cortex_a57
1307 end cpu cortex-a76
1309 # ARMv8.2 A-profile ARM DynamIQ big.LITTLE implementations
1310 begin cpu cortex-a75.cortex-a55
1311  cname cortexa75cortexa55
1312  tune for cortex-a53
1313  tune flags LDSCHED
1314  architecture armv8.2-a+fp16+dotprod+simd
1315  option crypto add FP_ARMv8 CRYPTO
1316  costs cortex_a73
1317 end cpu cortex-a75.cortex-a55
1319 begin cpu cortex-a76.cortex-a55
1320  cname cortexa76cortexa55
1321  tune for cortex-a53
1322  tune flags LDSCHED
1323  architecture armv8.2-a+fp16+dotprod+simd
1324  option crypto add FP_ARMv8 CRYPTO
1325  costs cortex_a57
1326 end cpu cortex-a76.cortex-a55
1328 # V8 M-profile implementations.
1329 begin cpu cortex-m23
1330  cname cortexm23
1331  tune flags LDSCHED
1332  architecture armv8-m.base
1333  costs v6m
1334 end cpu cortex-m23
1336 begin cpu cortex-m33
1337  cname cortexm33
1338  tune flags LDSCHED
1339  architecture armv8-m.main+dsp+fp
1340  option nofp remove ALL_FP
1341  option nodsp remove armv7em
1342  costs v7m
1343 end cpu cortex-m33
1345 # V8 R-profile implementations.
1346 begin cpu cortex-r52
1347  cname cortexr52
1348  tune flags LDSCHED
1349  architecture armv8-r+crc+simd
1350  option nofp.dp remove FP_DBL ALL_SIMD
1351  costs cortex
1352 end cpu cortex-r52
1354 # FPU entries
1355 # format:
1356 # begin fpu <name>
1357 #   isa <isa-flags-list>
1358 # end fpu <name>
1360 begin fpu vfp
1361  isa VFPv2 FP_DBL
1362 end fpu vfp
1364 begin fpu vfpv2
1365  isa VFPv2 FP_DBL
1366 end fpu vfpv2
1368 begin fpu vfpv3
1369  isa VFPv3 FP_D32
1370 end fpu vfpv3
1372 begin fpu vfpv3-fp16
1373  isa VFPv3 FP_D32 fp16conv
1374 end fpu vfpv3-fp16
1376 begin fpu vfpv3-d16
1377  isa VFPv3 FP_DBL
1378 end fpu vfpv3-d16
1380 begin fpu vfpv3-d16-fp16
1381  isa VFPv3 FP_DBL fp16conv
1382 end fpu vfpv3-d16-fp16
1384 begin fpu vfpv3xd
1385  isa VFPv3
1386 end fpu vfpv3xd
1388 begin fpu vfpv3xd-fp16
1389  isa VFPv3 fp16conv
1390 end fpu vfpv3xd-fp16
1392 begin fpu neon
1393  isa VFPv3 NEON
1394 end fpu neon
1396 begin fpu neon-vfpv3
1397  isa VFPv3 NEON
1398 end fpu neon-vfpv3
1400 begin fpu neon-fp16
1401  isa VFPv3 NEON fp16conv
1402 end fpu neon-fp16
1404 begin fpu vfpv4
1405  isa VFPv4 FP_D32
1406 end fpu vfpv4
1408 begin fpu neon-vfpv4
1409  isa VFPv4 NEON
1410 end fpu neon-vfpv4
1412 begin fpu vfpv4-d16
1413  isa VFPv4 FP_DBL
1414 end fpu vfpv4-d16
1416 begin fpu fpv4-sp-d16
1417  isa VFPv4
1418 end fpu fpv4-sp-d16
1420 begin fpu fpv5-sp-d16
1421  isa FPv5
1422 end fpu fpv5-sp-d16
1424 begin fpu fpv5-d16
1425  isa FPv5 FP_DBL
1426 end fpu fpv5-d16
1428 begin fpu fp-armv8
1429  isa FP_ARMv8
1430 end fpu fp-armv8
1432 begin fpu neon-fp-armv8
1433  isa FP_ARMv8 NEON
1434 end fpu neon-fp-armv8
1436 begin fpu crypto-neon-fp-armv8
1437  isa FP_ARMv8 CRYPTO
1438 end fpu crypto-neon-fp-armv8
1440 # Compatibility aliases.
1441 begin fpu vfp3
1442  isa VFPv3 FP_D32
1443 end fpu vfp3